Removed legacy GUI.
FIxed an NPE in the devices table.
Added cord-gui to obs.exclude

Change-Id: I18a53d2c44c6c97fb7f5d16b7446942a1a37ddca
diff --git a/tools/dev/bin/onos-build-selective.exclude b/tools/dev/bin/onos-build-selective.exclude
index ace399a..494a438 100644
--- a/tools/dev/bin/onos-build-selective.exclude
+++ b/tools/dev/bin/onos-build-selective.exclude
@@ -3,3 +3,4 @@
 .*/build/conf/.*
 .*/docs/.*
 .*/openflow/drivers/.*
+.*/cord-gui/.*
\ No newline at end of file
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
index d1cbcb4..fb83cdd 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
@@ -121,6 +121,8 @@
             boolean available = ds.isAvailable(id);
             String iconId = available ? ICON_ID_ONLINE : ICON_ID_OFFLINE;
 
+            String protocol = dev.annotations().value(PROTOCOL);
+
             row.cell(ID, id)
                 .cell(AVAILABLE, available)
                 .cell(AVAILABLE_IID, iconId)
@@ -128,7 +130,7 @@
                 .cell(MFR, dev.manufacturer())
                 .cell(HW, dev.hwVersion())
                 .cell(SW, dev.swVersion())
-                .cell(PROTOCOL, dev.annotations().value(PROTOCOL))
+                .cell(PROTOCOL, protocol != null ? protocol : "")
                 .cell(NUM_PORTS, ds.getPorts(id).size())
                 .cell(MASTER_ID, ms.getMasterFor(id));
         }
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/GuiWebSocketServlet.java b/web/gui/src/main/java/org/onosproject/ui/impl/GuiWebSocketServlet.java
deleted file mode 100644
index 835058f..0000000
--- a/web/gui/src/main/java/org/onosproject/ui/impl/GuiWebSocketServlet.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2014-2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import org.eclipse.jetty.websocket.WebSocket;
-import org.eclipse.jetty.websocket.WebSocketServlet;
-import org.onlab.osgi.DefaultServiceDirectory;
-import org.onlab.osgi.ServiceDirectory;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.Timer;
-import java.util.TimerTask;
-
-/**
- * Web socket servlet capable of creating various sockets for the user interface.
- */
-@Deprecated
-public class GuiWebSocketServlet extends WebSocketServlet {
-
-    private static final long PING_DELAY_MS = 5000;
-
-    private ServiceDirectory directory = new DefaultServiceDirectory();
-
-    private final Set<TopologyViewWebSocket> sockets = new HashSet<>();
-    private final Timer timer = new Timer();
-    private final TimerTask pruner = new Pruner();
-
-    @Override
-    public void init() throws ServletException {
-        super.init();
-        timer.schedule(pruner, PING_DELAY_MS, PING_DELAY_MS);
-    }
-
-    @Override
-    public WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
-        TopologyViewWebSocket socket = new TopologyViewWebSocket(directory);
-        synchronized (sockets) {
-            sockets.add(socket);
-        }
-        return socket;
-    }
-
-    // Task for pruning web-sockets that are idle.
-    private class Pruner extends TimerTask {
-        @Override
-        public void run() {
-            synchronized (sockets) {
-                Iterator<TopologyViewWebSocket> it = sockets.iterator();
-                while (it.hasNext()) {
-                    TopologyViewWebSocket socket = it.next();
-                    if (socket.isIdle()) {
-                        it.remove();
-                        socket.close();
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java
index 2e37b6f..b71b9f8 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java
@@ -52,7 +52,7 @@
         ArrayNode devices = mapper.createArrayNode();
         ArrayNode hosts = mapper.createArrayNode();
 
-        Map<String, ObjectNode> metaUi = TopologyViewMessages.getMetaUi();
+        Map<String, ObjectNode> metaUi = TopologyViewMessageHandler.getMetaUi();
         for (String id : metaUi.keySet()) {
             ObjectNode memento = metaUi.get(id);
             if (id.charAt(17) == '/') {
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessages.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessages.java
deleted file mode 100644
index 463f8b3..0000000
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessages.java
+++ /dev/null
@@ -1,885 +0,0 @@
-/*
- * Copyright 2014-2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.onlab.osgi.ServiceDirectory;
-import org.onlab.packet.IpAddress;
-import org.onosproject.cluster.ClusterEvent;
-import org.onosproject.cluster.ClusterService;
-import org.onosproject.cluster.ControllerNode;
-import org.onosproject.cluster.NodeId;
-import org.onosproject.core.CoreService;
-import org.onosproject.mastership.MastershipService;
-import org.onosproject.net.Annotated;
-import org.onosproject.net.AnnotationKeys;
-import org.onosproject.net.Annotations;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.DefaultEdgeLink;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.EdgeLink;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.Link;
-import org.onosproject.net.LinkKey;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.device.DeviceEvent;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.flow.FlowEntry;
-import org.onosproject.net.flow.FlowRuleService;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.flow.instructions.Instructions.OutputInstruction;
-import org.onosproject.net.host.HostEvent;
-import org.onosproject.net.host.HostService;
-import org.onosproject.net.intent.Intent;
-import org.onosproject.net.intent.IntentService;
-import org.onosproject.net.intent.LinkCollectionIntent;
-import org.onosproject.net.intent.OpticalConnectivityIntent;
-import org.onosproject.net.intent.OpticalPathIntent;
-import org.onosproject.net.intent.PathIntent;
-import org.onosproject.net.link.LinkEvent;
-import org.onosproject.net.link.LinkService;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.statistic.Load;
-import org.onosproject.net.statistic.StatisticService;
-import org.onosproject.net.topology.Topology;
-import org.onosproject.net.topology.TopologyService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static org.onosproject.cluster.ClusterEvent.Type.INSTANCE_ADDED;
-import static org.onosproject.cluster.ClusterEvent.Type.INSTANCE_REMOVED;
-import static org.onosproject.cluster.ControllerNode.State.ACTIVE;
-import static org.onosproject.net.DeviceId.deviceId;
-import static org.onosproject.net.HostId.hostId;
-import static org.onosproject.net.LinkKey.linkKey;
-import static org.onosproject.net.PortNumber.P0;
-import static org.onosproject.net.PortNumber.portNumber;
-import static org.onosproject.net.device.DeviceEvent.Type.DEVICE_ADDED;
-import static org.onosproject.net.device.DeviceEvent.Type.DEVICE_REMOVED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED;
-import static org.onosproject.net.link.LinkEvent.Type.LINK_ADDED;
-import static org.onosproject.net.link.LinkEvent.Type.LINK_REMOVED;
-
-/**
- * Facility for creating messages bound for the topology viewer.
- */
-@Deprecated
-public abstract class TopologyViewMessages {
-
-    protected static final Logger log = LoggerFactory.getLogger(TopologyViewMessages.class);
-
-    private static final ProviderId PID = new ProviderId("core", "org.onosproject.core", true);
-    private static final String COMPACT = "%s/%s-%s/%s";
-
-    private static final double KB = 1024;
-    private static final double MB = 1024 * KB;
-    private static final double GB = 1024 * MB;
-
-    private static final String GB_UNIT = "GB";
-    private static final String MB_UNIT = "MB";
-    private static final String KB_UNIT = "KB";
-    private static final String B_UNIT = "B";
-
-    protected final ServiceDirectory directory;
-    protected final ClusterService clusterService;
-    protected final DeviceService deviceService;
-    protected final LinkService linkService;
-    protected final HostService hostService;
-    protected final MastershipService mastershipService;
-    protected final IntentService intentService;
-    protected final FlowRuleService flowService;
-    protected final StatisticService statService;
-    protected final TopologyService topologyService;
-
-    protected final ObjectMapper mapper = new ObjectMapper();
-    private final String version;
-
-    // TODO: extract into an external & durable state; good enough for now and demo
-    private static Map<String, ObjectNode> metaUi = new ConcurrentHashMap<>();
-
-    /**
-     * Returns read-only view of the meta-ui information.
-     *
-     * @return map of id to meta-ui mementos
-     */
-    static Map<String, ObjectNode> getMetaUi() {
-        return Collections.unmodifiableMap(metaUi);
-    }
-
-    /**
-     * Creates a messaging facility for creating messages for topology viewer.
-     *
-     * @param directory service directory
-     */
-    protected TopologyViewMessages(ServiceDirectory directory) {
-        this.directory = checkNotNull(directory, "Directory cannot be null");
-        clusterService = directory.get(ClusterService.class);
-        deviceService = directory.get(DeviceService.class);
-        linkService = directory.get(LinkService.class);
-        hostService = directory.get(HostService.class);
-        mastershipService = directory.get(MastershipService.class);
-        intentService = directory.get(IntentService.class);
-        flowService = directory.get(FlowRuleService.class);
-        statService = directory.get(StatisticService.class);
-        topologyService = directory.get(TopologyService.class);
-
-        String ver = directory.get(CoreService.class).version().toString();
-        version = ver.replace(".SNAPSHOT", "*").replaceFirst("~.*$", "");
-    }
-
-    // Retrieves the payload from the specified event.
-    protected ObjectNode payload(ObjectNode event) {
-        return (ObjectNode) event.path("payload");
-    }
-
-    // Returns the specified node property as a number
-    protected long number(ObjectNode node, String name) {
-        return node.path(name).asLong();
-    }
-
-    // Returns the specified node property as a string.
-    protected String string(ObjectNode node, String name) {
-        return node.path(name).asText();
-    }
-
-    // Returns the specified node property as a string.
-    protected String string(ObjectNode node, String name, String defaultValue) {
-        return node.path(name).asText(defaultValue);
-    }
-
-    // Returns the specified set of IP addresses as a string.
-    private String ip(Set<IpAddress> ipAddresses) {
-        Iterator<IpAddress> it = ipAddresses.iterator();
-        return it.hasNext() ? it.next().toString() : "unknown";
-    }
-
-    // Produces JSON structure from annotations.
-    private JsonNode props(Annotations annotations) {
-        ObjectNode props = mapper.createObjectNode();
-        if (annotations != null) {
-            for (String key : annotations.keys()) {
-                props.put(key, annotations.value(key));
-            }
-        }
-        return props;
-    }
-
-    // Produces an informational log message event bound to the client.
-    protected ObjectNode info(long id, String message) {
-        return message("info", id, message);
-    }
-
-    // Produces a warning log message event bound to the client.
-    protected ObjectNode warning(long id, String message) {
-        return message("warning", id, message);
-    }
-
-    // Produces an error log message event bound to the client.
-    protected ObjectNode error(long id, String message) {
-        return message("error", id, message);
-    }
-
-    // Produces a log message event bound to the client.
-    private ObjectNode message(String severity, long id, String message) {
-        return envelope("message", id,
-                        mapper.createObjectNode()
-                                .put("severity", severity)
-                                .put("message", message));
-    }
-
-    // Puts the payload into an envelope and returns it.
-    protected ObjectNode envelope(String type, long sid, ObjectNode payload) {
-        ObjectNode event = mapper.createObjectNode();
-        event.put("event", type);
-        if (sid > 0) {
-            event.put("sid", sid);
-        }
-        event.set("payload", payload);
-        return event;
-    }
-
-    // Produces a set of all hosts listed in the specified JSON array.
-    protected Set<Host> getHosts(ArrayNode array) {
-        Set<Host> hosts = new HashSet<>();
-        if (array != null) {
-            for (JsonNode node : array) {
-                try {
-                    addHost(hosts, hostId(node.asText()));
-                } catch (IllegalArgumentException e) {
-                    log.debug("Skipping ID {}", node.asText());
-                }
-            }
-        }
-        return hosts;
-    }
-
-    // Adds the specified host to the set of hosts.
-    private void addHost(Set<Host> hosts, HostId hostId) {
-        Host host = hostService.getHost(hostId);
-        if (host != null) {
-            hosts.add(host);
-        }
-    }
-
-
-    // Produces a set of all devices listed in the specified JSON array.
-    protected Set<Device> getDevices(ArrayNode array) {
-        Set<Device> devices = new HashSet<>();
-        if (array != null) {
-            for (JsonNode node : array) {
-                try {
-                    addDevice(devices, deviceId(node.asText()));
-                } catch (IllegalArgumentException e) {
-                    log.debug("Skipping ID {}", node.asText());
-                }
-            }
-        }
-        return devices;
-    }
-
-    private void addDevice(Set<Device> devices, DeviceId deviceId) {
-        Device device = deviceService.getDevice(deviceId);
-        if (device != null) {
-            devices.add(device);
-        }
-    }
-
-    protected void addHover(Set<Host> hosts, Set<Device> devices, String hover) {
-        try {
-            addHost(hosts, hostId(hover));
-        } catch (IllegalArgumentException e) {
-            try {
-                addDevice(devices, deviceId(hover));
-            } catch (IllegalArgumentException ne) {
-                log.debug("Skipping ID {}", hover);
-            }
-        }
-    }
-
-    // Produces a cluster instance message to the client.
-    protected ObjectNode instanceMessage(ClusterEvent event, String messageType) {
-        ControllerNode node = event.subject();
-        int switchCount = mastershipService.getDevicesOf(node.id()).size();
-        ObjectNode payload = mapper.createObjectNode()
-                .put("id", node.id().toString())
-                .put("ip", node.ip().toString())
-                .put("online", clusterService.getState(node.id()) == ACTIVE)
-                .put("uiAttached", event.subject().equals(clusterService.getLocalNode()))
-                .put("switches", switchCount);
-
-        ArrayNode labels = mapper.createArrayNode();
-        labels.add(node.id().toString());
-        labels.add(node.ip().toString());
-
-        // Add labels, props and stuff the payload into envelope.
-        payload.set("labels", labels);
-        addMetaUi(node.id().toString(), payload);
-
-        String type = messageType != null ? messageType :
-                ((event.type() == INSTANCE_ADDED) ? "addInstance" :
-                        ((event.type() == INSTANCE_REMOVED ? "removeInstance" :
-                                "addInstance")));
-        return envelope(type, 0, payload);
-    }
-
-    // Produces a device event message to the client.
-    protected ObjectNode deviceMessage(DeviceEvent event) {
-        Device device = event.subject();
-        ObjectNode payload = mapper.createObjectNode()
-                .put("id", device.id().toString())
-                .put("type", device.type().toString().toLowerCase())
-                .put("online", deviceService.isAvailable(device.id()))
-                .put("master", master(device.id()));
-
-        // Generate labels: id, chassis id, no-label, optional-name
-        String name = device.annotations().value(AnnotationKeys.NAME);
-        ArrayNode labels = mapper.createArrayNode();
-        labels.add("");
-        labels.add(isNullOrEmpty(name) ? device.id().toString() : name);
-        labels.add(device.id().toString());
-
-        // Add labels, props and stuff the payload into envelope.
-        payload.set("labels", labels);
-        payload.set("props", props(device.annotations()));
-        addGeoLocation(device, payload);
-        addMetaUi(device.id().toString(), payload);
-
-        String type = (event.type() == DEVICE_ADDED) ? "addDevice" :
-                ((event.type() == DEVICE_REMOVED) ? "removeDevice" : "updateDevice");
-        return envelope(type, 0, payload);
-    }
-
-    // Produces a link event message to the client.
-    protected ObjectNode linkMessage(LinkEvent event) {
-        Link link = event.subject();
-        ObjectNode payload = mapper.createObjectNode()
-                .put("id", compactLinkString(link))
-                .put("type", link.type().toString().toLowerCase())
-                .put("online", link.state() == Link.State.ACTIVE)
-                .put("linkWidth", 1.2)
-                .put("src", link.src().deviceId().toString())
-                .put("srcPort", link.src().port().toString())
-                .put("dst", link.dst().deviceId().toString())
-                .put("dstPort", link.dst().port().toString());
-        String type = (event.type() == LINK_ADDED) ? "addLink" :
-                ((event.type() == LINK_REMOVED) ? "removeLink" : "updateLink");
-        return envelope(type, 0, payload);
-    }
-
-    // Produces a host event message to the client.
-    protected ObjectNode hostMessage(HostEvent event) {
-        Host host = event.subject();
-        String hostType = host.annotations().value(AnnotationKeys.TYPE);
-        ObjectNode payload = mapper.createObjectNode()
-                .put("id", host.id().toString())
-                .put("type", isNullOrEmpty(hostType) ? "endstation" : hostType)
-                .put("ingress", compactLinkString(edgeLink(host, true)))
-                .put("egress", compactLinkString(edgeLink(host, false)));
-        payload.set("cp", hostConnect(mapper, host.location()));
-        payload.set("labels", labels(mapper, ip(host.ipAddresses()),
-                                     host.mac().toString()));
-        payload.set("props", props(host.annotations()));
-        addGeoLocation(host, payload);
-        addMetaUi(host.id().toString(), payload);
-
-        String type = (event.type() == HOST_ADDED) ? "addHost" :
-                ((event.type() == HOST_REMOVED) ? "removeHost" : "updateHost");
-        return envelope(type, 0, payload);
-    }
-
-    // Encodes the specified host location into a JSON object.
-    private ObjectNode hostConnect(ObjectMapper mapper, HostLocation location) {
-        return mapper.createObjectNode()
-                .put("device", location.deviceId().toString())
-                .put("port", location.port().toLong());
-    }
-
-    // Encodes the specified list of labels a JSON array.
-    private ArrayNode labels(ObjectMapper mapper, String... labels) {
-        ArrayNode json = mapper.createArrayNode();
-        for (String label : labels) {
-            json.add(label);
-        }
-        return json;
-    }
-
-    // Returns the name of the master node for the specified device id.
-    private String master(DeviceId deviceId) {
-        NodeId master = mastershipService.getMasterFor(deviceId);
-        return master != null ? master.toString() : "";
-    }
-
-    // Generates an edge link from the specified host location.
-    private EdgeLink edgeLink(Host host, boolean ingress) {
-        return new DefaultEdgeLink(PID, new ConnectPoint(host.id(), portNumber(0)),
-                                   host.location(), ingress);
-    }
-
-    // Adds meta UI information for the specified object.
-    private void addMetaUi(String id, ObjectNode payload) {
-        ObjectNode meta = metaUi.get(id);
-        if (meta != null) {
-            payload.set("metaUi", meta);
-        }
-    }
-
-    // Adds a geo location JSON to the specified payload object.
-    private void addGeoLocation(Annotated annotated, ObjectNode payload) {
-        Annotations annotations = annotated.annotations();
-        if (annotations == null) {
-            return;
-        }
-
-        String slat = annotations.value(AnnotationKeys.LATITUDE);
-        String slng = annotations.value(AnnotationKeys.LONGITUDE);
-        try {
-            if (slat != null && slng != null && !slat.isEmpty() && !slng.isEmpty()) {
-                double lat = Double.parseDouble(slat);
-                double lng = Double.parseDouble(slng);
-                ObjectNode loc = mapper.createObjectNode()
-                        .put("type", "latlng").put("lat", lat).put("lng", lng);
-                payload.set("location", loc);
-            }
-        } catch (NumberFormatException e) {
-            log.warn("Invalid geo data latitude={}; longiture={}", slat, slng);
-        }
-    }
-
-    // Updates meta UI information for the specified object.
-    protected void updateMetaUi(ObjectNode event) {
-        ObjectNode payload = payload(event);
-        metaUi.put(string(payload, "id"), (ObjectNode) payload.path("memento"));
-    }
-
-    // Returns summary response.
-    protected ObjectNode summmaryMessage(long sid) {
-        Topology topology = topologyService.currentTopology();
-        return envelope("showSummary", sid,
-                        json("ONOS Summary", "node",
-                             new Prop("Devices", format(topology.deviceCount())),
-                             new Prop("Links", format(topology.linkCount())),
-                             new Prop("Hosts", format(hostService.getHostCount())),
-                             new Prop("Topology SCCs", format(topology.clusterCount())),
-                             new Separator(),
-                             new Prop("Intents", format(intentService.getIntentCount())),
-                             new Prop("Flows", format(flowService.getFlowRuleCount())),
-                             new Prop("Version", version)));
-    }
-
-    // Returns device details response.
-    protected ObjectNode deviceDetails(DeviceId deviceId, long sid) {
-        Device device = deviceService.getDevice(deviceId);
-        Annotations annot = device.annotations();
-        String name = annot.value(AnnotationKeys.NAME);
-        int portCount = deviceService.getPorts(deviceId).size();
-        int flowCount = getFlowCount(deviceId);
-        return envelope("showDetails", sid,
-                        json(isNullOrEmpty(name) ? deviceId.toString() : name,
-                             device.type().toString().toLowerCase(),
-                             new Prop("URI", deviceId.toString()),
-                             new Prop("Vendor", device.manufacturer()),
-                             new Prop("H/W Version", device.hwVersion()),
-                             new Prop("S/W Version", device.swVersion()),
-                             new Prop("Serial Number", device.serialNumber()),
-                             new Prop("Protocol", annot.value(AnnotationKeys.PROTOCOL)),
-                             new Separator(),
-                             new Prop("Master", master(deviceId)),
-                             new Prop("Latitude", annot.value(AnnotationKeys.LATITUDE)),
-                             new Prop("Longitude", annot.value(AnnotationKeys.LONGITUDE)),
-                             new Separator(),
-                             new Prop("Ports", Integer.toString(portCount)),
-                             new Prop("Flows", Integer.toString(flowCount))));
-    }
-
-    protected int getFlowCount(DeviceId deviceId) {
-        int count = 0;
-        Iterator<FlowEntry> it = flowService.getFlowEntries(deviceId).iterator();
-        while (it.hasNext()) {
-            count++;
-            it.next();
-        }
-        return count;
-    }
-
-    // Counts all entries that egress on the given device links.
-    protected Map<Link, Integer> getFlowCounts(DeviceId deviceId) {
-        List<FlowEntry> entries = new ArrayList<>();
-        Set<Link> links = new HashSet<>(linkService.getDeviceEgressLinks(deviceId));
-        Set<Host> hosts = hostService.getConnectedHosts(deviceId);
-        Iterator<FlowEntry> it = flowService.getFlowEntries(deviceId).iterator();
-        while (it.hasNext()) {
-            entries.add(it.next());
-        }
-
-        // Add all edge links to the set
-        if (hosts != null) {
-            for (Host host : hosts) {
-                links.add(new DefaultEdgeLink(host.providerId(),
-                                              new ConnectPoint(host.id(), P0),
-                                              host.location(), false));
-            }
-        }
-
-        Map<Link, Integer> counts = new HashMap<>();
-        for (Link link : links) {
-            counts.put(link, getEgressFlows(link, entries));
-        }
-        return counts;
-    }
-
-    // Counts all entries that egress on the link source port.
-    private Integer getEgressFlows(Link link, List<FlowEntry> entries) {
-        int count = 0;
-        PortNumber out = link.src().port();
-        for (FlowEntry entry : entries) {
-            TrafficTreatment treatment = entry.treatment();
-            for (Instruction instruction : treatment.allInstructions()) {
-                if (instruction.type() == Instruction.Type.OUTPUT &&
-                        ((OutputInstruction) instruction).port().equals(out)) {
-                    count++;
-                }
-            }
-        }
-        return count;
-    }
-
-
-    // Returns host details response.
-    protected ObjectNode hostDetails(HostId hostId, long sid) {
-        Host host = hostService.getHost(hostId);
-        Annotations annot = host.annotations();
-        String type = annot.value(AnnotationKeys.TYPE);
-        String name = annot.value(AnnotationKeys.NAME);
-        String vlan = host.vlan().toString();
-        return envelope("showDetails", sid,
-                        json(isNullOrEmpty(name) ? hostId.toString() : name,
-                             isNullOrEmpty(type) ? "endstation" : type,
-                             new Prop("MAC", host.mac().toString()),
-                             new Prop("IP", host.ipAddresses().toString().replaceAll("[\\[\\]]", "")),
-                             new Prop("VLAN", vlan.equals("-1") ? "none" : vlan),
-                             new Separator(),
-                             new Prop("Latitude", annot.value(AnnotationKeys.LATITUDE)),
-                             new Prop("Longitude", annot.value(AnnotationKeys.LONGITUDE))));
-    }
-
-
-    // Produces JSON message to trigger traffic overview visualization
-    protected ObjectNode trafficSummaryMessage(long sid) {
-        ObjectNode payload = mapper.createObjectNode();
-        ArrayNode paths = mapper.createArrayNode();
-        payload.set("paths", paths);
-
-        ObjectNode pathNodeN = mapper.createObjectNode();
-        ArrayNode linksNodeN = mapper.createArrayNode();
-        ArrayNode labelsN = mapper.createArrayNode();
-
-        pathNodeN.put("class", "plain").put("traffic", false);
-        pathNodeN.set("links", linksNodeN);
-        pathNodeN.set("labels", labelsN);
-        paths.add(pathNodeN);
-
-        ObjectNode pathNodeT = mapper.createObjectNode();
-        ArrayNode linksNodeT = mapper.createArrayNode();
-        ArrayNode labelsT = mapper.createArrayNode();
-
-        pathNodeT.put("class", "secondary").put("traffic", true);
-        pathNodeT.set("links", linksNodeT);
-        pathNodeT.set("labels", labelsT);
-        paths.add(pathNodeT);
-
-        for (BiLink link : consolidateLinks(linkService.getLinks())) {
-            boolean bi = link.two != null;
-            if (isInfrastructureEgress(link.one) ||
-                    (bi && isInfrastructureEgress(link.two))) {
-                link.addLoad(statService.load(link.one));
-                link.addLoad(bi ? statService.load(link.two) : null);
-                if (link.hasTraffic) {
-                    linksNodeT.add(compactLinkString(link.one));
-                    labelsT.add(formatBytes(link.bytes));
-                } else {
-                    linksNodeN.add(compactLinkString(link.one));
-                    labelsN.add("");
-                }
-            }
-        }
-        return envelope("showTraffic", sid, payload);
-    }
-
-    private Collection<BiLink> consolidateLinks(Iterable<Link> links) {
-        Map<LinkKey, BiLink> biLinks = new HashMap<>();
-        for (Link link : links) {
-            addLink(biLinks, link);
-        }
-        return biLinks.values();
-    }
-
-    // Produces JSON message to trigger flow overview visualization
-    protected ObjectNode flowSummaryMessage(long sid, Set<Device> devices) {
-        ObjectNode payload = mapper.createObjectNode();
-        ArrayNode paths = mapper.createArrayNode();
-        payload.set("paths", paths);
-
-        for (Device device : devices) {
-            Map<Link, Integer> counts = getFlowCounts(device.id());
-            for (Link link : counts.keySet()) {
-                addLinkFlows(link, paths, counts.get(link));
-            }
-        }
-        return envelope("showTraffic", sid, payload);
-    }
-
-    private void addLinkFlows(Link link, ArrayNode paths, Integer count) {
-        ObjectNode pathNode = mapper.createObjectNode();
-        ArrayNode linksNode = mapper.createArrayNode();
-        ArrayNode labels = mapper.createArrayNode();
-        boolean noFlows = count == null || count == 0;
-        pathNode.put("class", noFlows ? "secondary" : "primary");
-        pathNode.put("traffic", false);
-        pathNode.set("links", linksNode.add(compactLinkString(link)));
-        pathNode.set("labels", labels.add(noFlows ? "" : (count.toString() +
-                (count == 1 ? " flow" : " flows"))));
-        paths.add(pathNode);
-    }
-
-
-    // Produces JSON message to trigger traffic visualization
-    protected ObjectNode trafficMessage(long sid, TrafficClass... trafficClasses) {
-        ObjectNode payload = mapper.createObjectNode();
-        ArrayNode paths = mapper.createArrayNode();
-        payload.set("paths", paths);
-
-        // Classify links based on their traffic traffic first...
-        Map<LinkKey, BiLink> biLinks = classifyLinkTraffic(trafficClasses);
-
-        // Then separate the links into their respective classes and send them out.
-        Map<String, ObjectNode> pathNodes = new HashMap<>();
-        for (BiLink biLink : biLinks.values()) {
-            boolean hasTraffic = biLink.hasTraffic;
-            String tc = (biLink.classes + (hasTraffic ? " animated" : "")).trim();
-            ObjectNode pathNode = pathNodes.get(tc);
-            if (pathNode == null) {
-                pathNode = mapper.createObjectNode()
-                        .put("class", tc).put("traffic", hasTraffic);
-                pathNode.set("links", mapper.createArrayNode());
-                pathNode.set("labels", mapper.createArrayNode());
-                pathNodes.put(tc, pathNode);
-                paths.add(pathNode);
-            }
-            ((ArrayNode) pathNode.path("links")).add(compactLinkString(biLink.one));
-            ((ArrayNode) pathNode.path("labels")).add(hasTraffic ? formatBytes(biLink.bytes) : "");
-        }
-
-        return envelope("showTraffic", sid, payload);
-    }
-
-    // Classifies the link traffic according to the specified classes.
-    private Map<LinkKey, BiLink> classifyLinkTraffic(TrafficClass... trafficClasses) {
-        Map<LinkKey, BiLink> biLinks = new HashMap<>();
-        for (TrafficClass trafficClass : trafficClasses) {
-            for (Intent intent : trafficClass.intents) {
-                boolean isOptical = intent instanceof OpticalConnectivityIntent;
-                List<Intent> installables = intentService.getInstallableIntents(intent.key());
-                if (installables != null) {
-                    for (Intent installable : installables) {
-                        String type = isOptical ? trafficClass.type + " optical" : trafficClass.type;
-                        if (installable instanceof PathIntent) {
-                            classifyLinks(type, biLinks, trafficClass.showTraffic,
-                                          ((PathIntent) installable).path().links());
-                        } else if (installable instanceof LinkCollectionIntent) {
-                            classifyLinks(type, biLinks, trafficClass.showTraffic,
-                                          ((LinkCollectionIntent) installable).links());
-                        } else if (installable instanceof OpticalPathIntent) {
-                            classifyLinks(type, biLinks, trafficClass.showTraffic,
-                                    ((OpticalPathIntent) installable).path().links());
-                        }
-                    }
-                }
-            }
-        }
-        return biLinks;
-    }
-
-
-    // Adds the link segments (path or tree) associated with the specified
-    // connectivity intent
-    private void classifyLinks(String type, Map<LinkKey, BiLink> biLinks,
-                               boolean showTraffic, Iterable<Link> links) {
-        if (links != null) {
-            for (Link link : links) {
-                BiLink biLink = addLink(biLinks, link);
-                if (isInfrastructureEgress(link)) {
-                    if (showTraffic) {
-                        biLink.addLoad(statService.load(link));
-                    }
-                    biLink.addClass(type);
-                }
-            }
-        }
-    }
-
-
-    private BiLink addLink(Map<LinkKey, BiLink> biLinks, Link link) {
-        LinkKey key = canonicalLinkKey(link);
-        BiLink biLink = biLinks.get(key);
-        if (biLink != null) {
-            biLink.setOther(link);
-        } else {
-            biLink = new BiLink(key, link);
-            biLinks.put(key, biLink);
-        }
-        return biLink;
-    }
-
-
-    // Adds the link segments (path or tree) associated with the specified
-    // connectivity intent
-    protected void addPathTraffic(ArrayNode paths, String type, String trafficType,
-                                  Iterable<Link> links) {
-        ObjectNode pathNode = mapper.createObjectNode();
-        ArrayNode linksNode = mapper.createArrayNode();
-
-        if (links != null) {
-            ArrayNode labels = mapper.createArrayNode();
-            boolean hasTraffic = false;
-            for (Link link : links) {
-                if (isInfrastructureEgress(link)) {
-                    linksNode.add(compactLinkString(link));
-                    Load load = statService.load(link);
-                    String label = "";
-                    if (load.rate() > 0) {
-                        hasTraffic = true;
-                        label = formatBytes(load.latest());
-                    }
-                    labels.add(label);
-                }
-            }
-            pathNode.put("class", hasTraffic ? type + " " + trafficType : type);
-            pathNode.put("traffic", hasTraffic);
-            pathNode.set("links", linksNode);
-            pathNode.set("labels", labels);
-            paths.add(pathNode);
-        }
-    }
-
-    // Poor-mans formatting to get the labels with byte counts looking nice.
-    private String formatBytes(long bytes) {
-        String unit;
-        double value;
-        if (bytes > GB) {
-            value = bytes / GB;
-            unit = GB_UNIT;
-        } else if (bytes > MB) {
-            value = bytes / MB;
-            unit = MB_UNIT;
-        } else if (bytes > KB) {
-            value = bytes / KB;
-            unit = KB_UNIT;
-        } else {
-            value = bytes;
-            unit = B_UNIT;
-        }
-        DecimalFormat format = new DecimalFormat("#,###.##");
-        return format.format(value) + " " + unit;
-    }
-
-    // Formats the given number into a string.
-    private String format(Number number) {
-        DecimalFormat format = new DecimalFormat("#,###");
-        return format.format(number);
-    }
-
-    private boolean isInfrastructureEgress(Link link) {
-        return link.src().elementId() instanceof DeviceId;
-    }
-
-    // Produces compact string representation of a link.
-    private static String compactLinkString(Link link) {
-        return String.format(COMPACT, link.src().elementId(), link.src().port(),
-                             link.dst().elementId(), link.dst().port());
-    }
-
-    // Produces JSON property details.
-    private ObjectNode json(String id, String type, Prop... props) {
-        ObjectMapper mapper = new ObjectMapper();
-        ObjectNode result = mapper.createObjectNode()
-                .put("id", id).put("type", type);
-        ObjectNode pnode = mapper.createObjectNode();
-        ArrayNode porder = mapper.createArrayNode();
-        for (Prop p : props) {
-            porder.add(p.key);
-            pnode.put(p.key, p.value);
-        }
-        result.set("propOrder", porder);
-        result.set("props", pnode);
-        return result;
-    }
-
-    // Produces canonical link key, i.e. one that will match link and its inverse.
-    private LinkKey canonicalLinkKey(Link link) {
-        String sn = link.src().elementId().toString();
-        String dn = link.dst().elementId().toString();
-        return sn.compareTo(dn) < 0 ?
-                linkKey(link.src(), link.dst()) : linkKey(link.dst(), link.src());
-    }
-
-    // Representation of link and its inverse and any traffic data.
-    private class BiLink {
-        public final LinkKey key;
-        public final Link one;
-        public Link two;
-        public boolean hasTraffic = false;
-        public long bytes = 0;
-        public String classes = "";
-
-        BiLink(LinkKey key, Link link) {
-            this.key = key;
-            this.one = link;
-        }
-
-        void setOther(Link link) {
-            this.two = link;
-        }
-
-        void addLoad(Load load) {
-            if (load != null) {
-                this.hasTraffic = hasTraffic || load.rate() > 0;
-                this.bytes += load.latest();
-            }
-        }
-
-        void addClass(String trafficClass) {
-            classes = classes + " " + trafficClass;
-        }
-    }
-
-    // Auxiliary key/value carrier.
-    private class Prop {
-        public final String key;
-        public final String value;
-
-        protected Prop(String key, String value) {
-            this.key = key;
-            this.value = value;
-        }
-    }
-
-    // Auxiliary properties separator
-    private class Separator extends Prop {
-        protected Separator() {
-            super("-", "");
-        }
-    }
-
-    // Auxiliary carrier of data for requesting traffic message.
-    protected class TrafficClass {
-        public final boolean showTraffic;
-        public final String type;
-        public final Iterable<Intent> intents;
-
-        TrafficClass(String type, Iterable<Intent> intents) {
-            this(type, intents, false);
-        }
-
-        TrafficClass(String type, Iterable<Intent> intents, boolean showTraffic) {
-            this.type = type;
-            this.intents = intents;
-            this.showTraffic = showTraffic;
-        }
-    }
-
-}
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewWebSocket.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewWebSocket.java
deleted file mode 100644
index 16b0eb6..0000000
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewWebSocket.java
+++ /dev/null
@@ -1,752 +0,0 @@
-/*
- * Copyright 2014-2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.Timer;
-import java.util.TimerTask;
-
-import org.eclipse.jetty.websocket.WebSocket;
-import org.onlab.osgi.ServiceDirectory;
-import org.onlab.util.AbstractAccumulator;
-import org.onlab.util.Accumulator;
-import org.onosproject.cluster.ClusterEvent;
-import org.onosproject.cluster.ClusterEventListener;
-import org.onosproject.cluster.ControllerNode;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-import org.onosproject.event.Event;
-import org.onosproject.mastership.MastershipAdminService;
-import org.onosproject.mastership.MastershipEvent;
-import org.onosproject.mastership.MastershipListener;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Device;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.Link;
-import org.onosproject.net.device.DeviceEvent;
-import org.onosproject.net.device.DeviceListener;
-import org.onosproject.net.flow.DefaultTrafficSelector;
-import org.onosproject.net.flow.DefaultTrafficTreatment;
-import org.onosproject.net.flow.FlowRuleEvent;
-import org.onosproject.net.flow.FlowRuleListener;
-import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.host.HostEvent;
-import org.onosproject.net.host.HostListener;
-import org.onosproject.net.intent.HostToHostIntent;
-import org.onosproject.net.intent.Intent;
-import org.onosproject.net.intent.IntentEvent;
-import org.onosproject.net.intent.IntentListener;
-import org.onosproject.net.intent.MultiPointToSinglePointIntent;
-import org.onosproject.net.link.LinkEvent;
-import org.onosproject.net.link.LinkListener;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static org.onosproject.cluster.ClusterEvent.Type.INSTANCE_ADDED;
-import static org.onosproject.net.DeviceId.deviceId;
-import static org.onosproject.net.HostId.hostId;
-import static org.onosproject.net.device.DeviceEvent.Type.DEVICE_ADDED;
-import static org.onosproject.net.device.DeviceEvent.Type.DEVICE_UPDATED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
-import static org.onosproject.net.link.LinkEvent.Type.LINK_ADDED;
-
-/**
- * Web socket capable of interacting with the GUI topology view.
- */
-@Deprecated
-public class TopologyViewWebSocket
-        extends TopologyViewMessages
-        implements WebSocket.OnTextMessage, WebSocket.OnControl {
-
-    private static final long MAX_AGE_MS = 15000;
-
-    private static final byte PING = 0x9;
-    private static final byte PONG = 0xA;
-    private static final byte[] PING_DATA = new byte[]{(byte) 0xde, (byte) 0xad};
-
-    private static final String APP_ID = "org.onosproject.gui";
-
-    private static final long TRAFFIC_FREQUENCY = 5000;
-    private static final long SUMMARY_FREQUENCY = 30000;
-
-    private static final Comparator<? super ControllerNode> NODE_COMPARATOR =
-            new Comparator<ControllerNode>() {
-                @Override
-                public int compare(ControllerNode o1, ControllerNode o2) {
-                    return o1.id().toString().compareTo(o2.id().toString());
-                }
-            };
-
-
-    private final Timer timer = new Timer("topology-view");
-
-    private static final int MAX_EVENTS = 1000;
-    private static final int MAX_BATCH_MS = 5000;
-    private static final int MAX_IDLE_MS = 1000;
-
-    private final ApplicationId appId;
-
-    private Connection connection;
-    private FrameConnection control;
-
-    private final ClusterEventListener clusterListener = new InternalClusterListener();
-    private final MastershipListener mastershipListener = new InternalMastershipListener();
-    private final DeviceListener deviceListener = new InternalDeviceListener();
-    private final LinkListener linkListener = new InternalLinkListener();
-    private final HostListener hostListener = new InternalHostListener();
-    private final IntentListener intentListener = new InternalIntentListener();
-    private final FlowRuleListener flowListener = new InternalFlowListener();
-
-    private final Accumulator<Event> eventAccummulator = new InternalEventAccummulator();
-
-    private TimerTask trafficTask;
-    private ObjectNode trafficEvent;
-
-    private TimerTask summaryTask;
-    private ObjectNode summaryEvent;
-
-    private long lastActive = System.currentTimeMillis();
-    private boolean listenersRemoved = false;
-
-    private TopologyViewIntentFilter intentFilter;
-
-    // Current selection context
-    private Set<Host> selectedHosts;
-    private Set<Device> selectedDevices;
-    private List<Intent> selectedIntents;
-    private int currentIntentIndex = -1;
-
-    /**
-     * Creates a new web-socket for serving data to GUI topology view.
-     *
-     * @param directory service directory
-     */
-    public TopologyViewWebSocket(ServiceDirectory directory) {
-        super(directory);
-        intentFilter = new TopologyViewIntentFilter(intentService, deviceService,
-                                                    hostService, linkService);
-        appId = directory.get(CoreService.class).registerApplication(APP_ID);
-    }
-
-    /**
-     * Issues a close on the connection.
-     */
-    synchronized void close() {
-        removeListeners();
-        if (connection.isOpen()) {
-            connection.close();
-        }
-    }
-
-    /**
-     * Indicates if this connection is idle.
-     *
-     * @return true if idle or closed
-     */
-    synchronized boolean isIdle() {
-        boolean idle = (System.currentTimeMillis() - lastActive) > MAX_AGE_MS;
-        if (idle || (connection != null && !connection.isOpen())) {
-            return true;
-        } else if (connection != null) {
-            try {
-                control.sendControl(PING, PING_DATA, 0, PING_DATA.length);
-            } catch (IOException e) {
-                log.warn("Unable to send ping message due to: ", e);
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public void onOpen(Connection connection) {
-        log.info("Legacy GUI client connected");
-        this.connection = connection;
-        this.control = (FrameConnection) connection;
-        addListeners();
-
-        sendAllInstances(null);
-        sendAllDevices();
-        sendAllLinks();
-        sendAllHosts();
-    }
-
-    @Override
-    public synchronized void onClose(int closeCode, String message) {
-        removeListeners();
-        timer.cancel();
-        log.info("Legacy GUI client disconnected");
-    }
-
-    @Override
-    public boolean onControl(byte controlCode, byte[] data, int offset, int length) {
-        lastActive = System.currentTimeMillis();
-        return true;
-    }
-
-    @Override
-    public void onMessage(String data) {
-        lastActive = System.currentTimeMillis();
-        try {
-            processMessage((ObjectNode) mapper.reader().readTree(data));
-        } catch (Exception e) {
-            log.warn("Unable to parse GUI request {} due to {}", data, e);
-            log.debug("Boom!!!", e);
-        }
-    }
-
-    // Processes the specified event.
-    private void processMessage(ObjectNode event) {
-        String type = string(event, "event", "unknown");
-        if (type.equals("requestDetails")) {
-            requestDetails(event);
-        } else if (type.equals("updateMeta")) {
-            updateMetaUi(event);
-
-        } else if (type.equals("addHostIntent")) {
-            createHostIntent(event);
-        } else if (type.equals("addMultiSourceIntent")) {
-            createMultiSourceIntent(event);
-
-        } else if (type.equals("requestRelatedIntents")) {
-            stopTrafficMonitoring();
-            requestRelatedIntents(event);
-
-        } else if (type.equals("requestNextRelatedIntent")) {
-            stopTrafficMonitoring();
-            requestAnotherRelatedIntent(event, +1);
-        } else if (type.equals("requestPrevRelatedIntent")) {
-            stopTrafficMonitoring();
-            requestAnotherRelatedIntent(event, -1);
-        } else if (type.equals("requestSelectedIntentTraffic")) {
-            requestSelectedIntentTraffic(event);
-            startTrafficMonitoring(event);
-
-        } else if (type.equals("requestAllTraffic")) {
-            requestAllTraffic(event);
-            startTrafficMonitoring(event);
-
-        } else if (type.equals("requestDeviceLinkFlows")) {
-            requestDeviceLinkFlows(event);
-            startTrafficMonitoring(event);
-
-        } else if (type.equals("cancelTraffic")) {
-            cancelTraffic(event);
-
-        } else if (type.equals("requestSummary")) {
-            requestSummary(event);
-            startSummaryMonitoring(event);
-        } else if (type.equals("cancelSummary")) {
-            stopSummaryMonitoring();
-
-        } else if (type.equals("equalizeMasters")) {
-            equalizeMasters(event);
-        }
-    }
-
-    // Sends the specified data to the client.
-    protected synchronized void sendMessage(ObjectNode data) {
-        try {
-            if (connection.isOpen()) {
-                connection.sendMessage(data.toString());
-            }
-        } catch (IOException e) {
-            log.warn("Unable to send message {} to GUI due to {}", data, e);
-            log.debug("Boom!!!", e);
-        }
-    }
-
-    // Sends all controller nodes to the client as node-added messages.
-    private void sendAllInstances(String messageType) {
-        List<ControllerNode> nodes = new ArrayList<>(clusterService.getNodes());
-        Collections.sort(nodes, NODE_COMPARATOR);
-        for (ControllerNode node : nodes) {
-            sendMessage(instanceMessage(new ClusterEvent(INSTANCE_ADDED, node),
-                                        messageType));
-        }
-    }
-
-    // Sends all devices to the client as device-added messages.
-    private void sendAllDevices() {
-        // Send optical first, others later for layered rendering
-        for (Device device : deviceService.getDevices()) {
-            if (device.type() == Device.Type.ROADM) {
-                sendMessage(deviceMessage(new DeviceEvent(DEVICE_ADDED, device)));
-            }
-        }
-        for (Device device : deviceService.getDevices()) {
-            if (device.type() != Device.Type.ROADM) {
-                sendMessage(deviceMessage(new DeviceEvent(DEVICE_ADDED, device)));
-            }
-        }
-    }
-
-    // Sends all links to the client as link-added messages.
-    private void sendAllLinks() {
-        // Send optical first, others later for layered rendering
-        for (Link link : linkService.getLinks()) {
-            if (link.type() == Link.Type.OPTICAL) {
-                sendMessage(linkMessage(new LinkEvent(LINK_ADDED, link)));
-            }
-        }
-        for (Link link : linkService.getLinks()) {
-            if (link.type() != Link.Type.OPTICAL) {
-                sendMessage(linkMessage(new LinkEvent(LINK_ADDED, link)));
-            }
-        }
-    }
-
-    // Sends all hosts to the client as host-added messages.
-    private void sendAllHosts() {
-        for (Host host : hostService.getHosts()) {
-            sendMessage(hostMessage(new HostEvent(HOST_ADDED, host)));
-        }
-    }
-
-    // Sends back device or host details.
-    private void requestDetails(ObjectNode event) {
-        ObjectNode payload = payload(event);
-        String type = string(payload, "class", "unknown");
-        long sid = number(event, "sid");
-
-        if (type.equals("device")) {
-            sendMessage(deviceDetails(deviceId(string(payload, "id")), sid));
-        } else if (type.equals("host")) {
-            sendMessage(hostDetails(hostId(string(payload, "id")), sid));
-        }
-    }
-
-
-    // Creates host-to-host intent.
-    private void createHostIntent(ObjectNode event) {
-        ObjectNode payload = payload(event);
-        long id = number(event, "sid");
-        // TODO: add protection against device ids and non-existent hosts.
-        HostId one = hostId(string(payload, "one"));
-        HostId two = hostId(string(payload, "two"));
-
-        HostToHostIntent intent =
-                HostToHostIntent.builder()
-                        .appId(appId)
-                        .one(one)
-                        .two(two)
-                        .build();
-
-
-        intentService.submit(intent);
-        startMonitoringIntent(event, intent);
-    }
-
-    // Creates multi-source-to-single-dest intent.
-    private void createMultiSourceIntent(ObjectNode event) {
-        ObjectNode payload = payload(event);
-        long id = number(event, "sid");
-        // TODO: add protection against device ids and non-existent hosts.
-        Set<HostId> src = getHostIds((ArrayNode) payload.path("src"));
-        HostId dst = hostId(string(payload, "dst"));
-        Host dstHost = hostService.getHost(dst);
-
-        Set<ConnectPoint> ingressPoints = getHostLocations(src);
-
-        // FIXME: clearly, this is not enough
-        TrafficSelector selector = DefaultTrafficSelector.builder()
-                .matchEthDst(dstHost.mac()).build();
-        TrafficTreatment treatment = DefaultTrafficTreatment.emptyTreatment();
-
-        MultiPointToSinglePointIntent intent =
-                MultiPointToSinglePointIntent.builder()
-                        .appId(appId)
-                        .selector(selector)
-                        .treatment(treatment)
-                        .ingressPoints(ingressPoints)
-                        .egressPoint(dstHost.location())
-                        .build();
-
-        intentService.submit(intent);
-        startMonitoringIntent(event, intent);
-    }
-
-
-    private synchronized void startMonitoringIntent(ObjectNode event, Intent intent) {
-        selectedHosts = new HashSet<>();
-        selectedDevices = new HashSet<>();
-        selectedIntents = new ArrayList<>();
-        selectedIntents.add(intent);
-        currentIntentIndex = -1;
-        requestAnotherRelatedIntent(event, +1);
-        requestSelectedIntentTraffic(event);
-    }
-
-
-    private Set<ConnectPoint> getHostLocations(Set<HostId> hostIds) {
-        Set<ConnectPoint> points = new HashSet<>();
-        for (HostId hostId : hostIds) {
-            points.add(getHostLocation(hostId));
-        }
-        return points;
-    }
-
-    private HostLocation getHostLocation(HostId hostId) {
-        return hostService.getHost(hostId).location();
-    }
-
-    // Produces a list of host ids from the specified JSON array.
-    private Set<HostId> getHostIds(ArrayNode ids) {
-        Set<HostId> hostIds = new HashSet<>();
-        for (JsonNode id : ids) {
-            hostIds.add(hostId(id.asText()));
-        }
-        return hostIds;
-    }
-
-
-    private synchronized long startTrafficMonitoring(ObjectNode event) {
-        stopTrafficMonitoring();
-        trafficEvent = event;
-        trafficTask = new TrafficMonitor();
-        timer.schedule(trafficTask, TRAFFIC_FREQUENCY, TRAFFIC_FREQUENCY);
-        return number(event, "sid");
-    }
-
-    private synchronized void stopTrafficMonitoring() {
-        if (trafficTask != null) {
-            trafficTask.cancel();
-            trafficTask = null;
-            trafficEvent = null;
-        }
-    }
-
-    // Subscribes for host traffic messages.
-    private synchronized void requestAllTraffic(ObjectNode event) {
-        long sid = startTrafficMonitoring(event);
-        sendMessage(trafficSummaryMessage(sid));
-    }
-
-    private void requestDeviceLinkFlows(ObjectNode event) {
-        ObjectNode payload = payload(event);
-        long sid = startTrafficMonitoring(event);
-
-        // Get the set of selected hosts and their intents.
-        ArrayNode ids = (ArrayNode) payload.path("ids");
-        Set<Host> hosts = new HashSet<>();
-        Set<Device> devices = getDevices(ids);
-
-        // If there is a hover node, include it in the hosts and find intents.
-        String hover = string(payload, "hover");
-        if (!isNullOrEmpty(hover)) {
-            addHover(hosts, devices, hover);
-        }
-        sendMessage(flowSummaryMessage(sid, devices));
-    }
-
-
-    // Requests related intents message.
-    private synchronized void requestRelatedIntents(ObjectNode event) {
-        ObjectNode payload = payload(event);
-        if (!payload.has("ids")) {
-            return;
-        }
-
-        long sid = number(event, "sid");
-
-        // Cancel any other traffic monitoring mode.
-        stopTrafficMonitoring();
-
-        // Get the set of selected hosts and their intents.
-        ArrayNode ids = (ArrayNode) payload.path("ids");
-        selectedHosts = getHosts(ids);
-        selectedDevices = getDevices(ids);
-        selectedIntents = intentFilter.findPathIntents(selectedHosts, selectedDevices,
-                                                       intentService.getIntents());
-        currentIntentIndex = -1;
-
-        if (haveSelectedIntents()) {
-            // Send a message to highlight all links of all monitored intents.
-            sendMessage(trafficMessage(sid, new TrafficClass("primary", selectedIntents)));
-        }
-
-        // FIXME: Re-introduce one the client click vs hover gesture stuff is sorted out.
-//        String hover = string(payload, "hover");
-//        if (!isNullOrEmpty(hover)) {
-//            // If there is a hover node, include it in the selection and find intents.
-//            processHoverExtendedSelection(sid, hover);
-//        }
-    }
-
-    private boolean haveSelectedIntents() {
-        return selectedIntents != null && !selectedIntents.isEmpty();
-    }
-
-    // Processes the selection extended with hovered item to segregate items
-    // into primary (those including the hover) vs secondary highlights.
-    private void processHoverExtendedSelection(long sid, String hover) {
-        Set<Host> hoverSelHosts = new HashSet<>(selectedHosts);
-        Set<Device> hoverSelDevices = new HashSet<>(selectedDevices);
-        addHover(hoverSelHosts, hoverSelDevices, hover);
-
-        List<Intent> primary = selectedIntents == null ? new ArrayList<>() :
-                intentFilter.findPathIntents(hoverSelHosts, hoverSelDevices,
-                                             selectedIntents);
-        Set<Intent> secondary = new HashSet<>(selectedIntents);
-        secondary.removeAll(primary);
-
-        // Send a message to highlight all links of all monitored intents.
-        sendMessage(trafficMessage(sid, new TrafficClass("primary", primary),
-                                   new TrafficClass("secondary", secondary)));
-    }
-
-    // Requests next or previous related intent.
-    private void requestAnotherRelatedIntent(ObjectNode event, int offset) {
-        if (haveSelectedIntents()) {
-            currentIntentIndex = currentIntentIndex + offset;
-            if (currentIntentIndex < 0) {
-                currentIntentIndex = selectedIntents.size() - 1;
-            } else if (currentIntentIndex >= selectedIntents.size()) {
-                currentIntentIndex = 0;
-            }
-            sendSelectedIntent(event);
-        }
-    }
-
-    // Sends traffic information on the related intents with the currently
-    // selected intent highlighted.
-    private void sendSelectedIntent(ObjectNode event) {
-        Intent selectedIntent = selectedIntents.get(currentIntentIndex);
-        log.info("Requested next intent {}", selectedIntent.id());
-
-        Set<Intent> primary = new HashSet<>();
-        primary.add(selectedIntent);
-
-        Set<Intent> secondary = new HashSet<>(selectedIntents);
-        secondary.remove(selectedIntent);
-
-        // Send a message to highlight all links of the selected intent.
-        sendMessage(trafficMessage(number(event, "sid"),
-                                   new TrafficClass("primary", primary),
-                                   new TrafficClass("secondary", secondary)));
-    }
-
-    // Requests monitoring of traffic for the selected intent.
-    private void requestSelectedIntentTraffic(ObjectNode event) {
-        if (haveSelectedIntents()) {
-            if (currentIntentIndex < 0) {
-                currentIntentIndex = 0;
-            }
-            Intent selectedIntent = selectedIntents.get(currentIntentIndex);
-            log.info("Requested traffic for selected {}", selectedIntent.id());
-
-            Set<Intent> primary = new HashSet<>();
-            primary.add(selectedIntent);
-
-            // Send a message to highlight all links of the selected intent.
-            sendMessage(trafficMessage(number(event, "sid"),
-                                       new TrafficClass("primary", primary, true)));
-        }
-    }
-
-    // Cancels sending traffic messages.
-    private void cancelTraffic(ObjectNode event) {
-        selectedIntents = null;
-        sendMessage(trafficMessage(number(event, "sid")));
-        stopTrafficMonitoring();
-    }
-
-
-    private synchronized long startSummaryMonitoring(ObjectNode event) {
-        stopSummaryMonitoring();
-        summaryEvent = event;
-        summaryTask = new SummaryMonitor();
-        timer.schedule(summaryTask, SUMMARY_FREQUENCY, SUMMARY_FREQUENCY);
-        return number(event, "sid");
-    }
-
-    private synchronized void stopSummaryMonitoring() {
-        if (summaryEvent != null) {
-            summaryTask.cancel();
-            summaryTask = null;
-            summaryEvent = null;
-        }
-    }
-
-    // Subscribes for summary messages.
-    private synchronized void requestSummary(ObjectNode event) {
-        sendMessage(summmaryMessage(number(event, "sid")));
-    }
-
-
-    // Forces mastership role rebalancing.
-    private void equalizeMasters(ObjectNode event) {
-        directory.get(MastershipAdminService.class).balanceRoles();
-    }
-
-
-    // Adds all internal listeners.
-    private void addListeners() {
-        clusterService.addListener(clusterListener);
-        mastershipService.addListener(mastershipListener);
-        deviceService.addListener(deviceListener);
-        linkService.addListener(linkListener);
-        hostService.addListener(hostListener);
-        intentService.addListener(intentListener);
-        flowService.addListener(flowListener);
-    }
-
-    // Removes all internal listeners.
-    private synchronized void removeListeners() {
-        if (!listenersRemoved) {
-            listenersRemoved = true;
-            clusterService.removeListener(clusterListener);
-            mastershipService.removeListener(mastershipListener);
-            deviceService.removeListener(deviceListener);
-            linkService.removeListener(linkListener);
-            hostService.removeListener(hostListener);
-            intentService.removeListener(intentListener);
-            flowService.removeListener(flowListener);
-        }
-    }
-
-    // Cluster event listener.
-    private class InternalClusterListener implements ClusterEventListener {
-        @Override
-        public void event(ClusterEvent event) {
-            sendMessage(instanceMessage(event, null));
-        }
-    }
-
-    // Mastership change listener
-    private class InternalMastershipListener implements MastershipListener {
-        @Override
-        public void event(MastershipEvent event) {
-            sendAllInstances("updateInstance");
-            Device device = deviceService.getDevice(event.subject());
-            sendMessage(deviceMessage(new DeviceEvent(DEVICE_UPDATED, device)));
-        }
-    }
-
-    // Device event listener.
-    private class InternalDeviceListener implements DeviceListener {
-        @Override
-        public void event(DeviceEvent event) {
-            sendMessage(deviceMessage(event));
-            eventAccummulator.add(event);
-        }
-    }
-
-    // Link event listener.
-    private class InternalLinkListener implements LinkListener {
-        @Override
-        public void event(LinkEvent event) {
-            sendMessage(linkMessage(event));
-            eventAccummulator.add(event);
-        }
-    }
-
-    // Host event listener.
-    private class InternalHostListener implements HostListener {
-        @Override
-        public void event(HostEvent event) {
-            sendMessage(hostMessage(event));
-            eventAccummulator.add(event);
-        }
-    }
-
-    // Intent event listener.
-    private class InternalIntentListener implements IntentListener {
-        @Override
-        public void event(IntentEvent event) {
-            if (trafficEvent != null) {
-                requestSelectedIntentTraffic(trafficEvent);
-            }
-            eventAccummulator.add(event);
-        }
-    }
-
-    // Intent event listener.
-    private class InternalFlowListener implements FlowRuleListener {
-        @Override
-        public void event(FlowRuleEvent event) {
-            eventAccummulator.add(event);
-        }
-    }
-
-    // Periodic update of the traffic information
-    private class TrafficMonitor extends TimerTask {
-        @Override
-        public void run() {
-            try {
-                if (trafficEvent != null) {
-                    String type = string(trafficEvent, "event", "unknown");
-                    if (type.equals("requestAllTraffic")) {
-                        requestAllTraffic(trafficEvent);
-                    } else if (type.equals("requestDeviceLinkFlows")) {
-                        requestDeviceLinkFlows(trafficEvent);
-                    } else if (type.equals("requestSelectedIntentTraffic")) {
-                        requestSelectedIntentTraffic(trafficEvent);
-                    }
-                }
-            } catch (Exception e) {
-                log.warn("Unable to handle traffic request due to {}", e.getMessage());
-                log.debug("Boom!", e);
-            }
-        }
-    }
-
-    // Periodic update of the summary information
-    private class SummaryMonitor extends TimerTask {
-        @Override
-        public void run() {
-            try {
-                if (summaryEvent != null) {
-                    requestSummary(summaryEvent);
-                }
-            } catch (Exception e) {
-                log.warn("Unable to handle summary request due to {}", e.getMessage());
-                log.debug("Boom!", e);
-            }
-        }
-    }
-
-    // Accumulates events to drive methodic update of the summary pane.
-    private class InternalEventAccummulator extends AbstractAccumulator<Event> {
-        protected InternalEventAccummulator() {
-            super(new Timer("topo-summary"), MAX_EVENTS, MAX_BATCH_MS, MAX_IDLE_MS);
-        }
-
-        @Override
-        public void processItems(List<Event> items) {
-            try {
-                if (summaryEvent != null) {
-                    sendMessage(summmaryMessage(0));
-                }
-            } catch (Exception e) {
-                log.warn("Unable to handle summary request due to {}", e.getMessage());
-                log.debug("Boom!", e);
-            }
-        }
-    }
-}
-
diff --git a/web/gui/src/main/webapp/WEB-INF/web.xml b/web/gui/src/main/webapp/WEB-INF/web.xml
index ace06db..f03925b 100644
--- a/web/gui/src/main/webapp/WEB-INF/web.xml
+++ b/web/gui/src/main/webapp/WEB-INF/web.xml
@@ -161,15 +161,4 @@
         <url-pattern>/websock/*</url-pattern>
     </servlet-mapping>
 
-    <servlet>
-        <servlet-name>Legacy Web Socket Service</servlet-name>
-        <servlet-class>org.onosproject.ui.impl.GuiWebSocketServlet</servlet-class>
-        <load-on-startup>2</load-on-startup>
-    </servlet>
-
-    <servlet-mapping>
-        <servlet-name>Legacy Web Socket Service</servlet-name>
-        <url-pattern>/ws/*</url-pattern>
-    </servlet-mapping>
-
 </web-app>
diff --git a/web/gui/src/main/webapp/legacy/base.css b/web/gui/src/main/webapp/legacy/base.css
deleted file mode 100644
index bc5b240..0000000
--- a/web/gui/src/main/webapp/legacy/base.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- Base CSS file
- */
-
-html {
-    font-family: sans-serif;
-    -webkit-text-size-adjust: 100%;
-    -ms-text-size-adjust: 100%;
-}
-
-body {
-    margin: 0;
-}
diff --git a/web/gui/src/main/webapp/legacy/continental_us.json b/web/gui/src/main/webapp/legacy/continental_us.json
deleted file mode 100644
index 978fbdf..0000000
--- a/web/gui/src/main/webapp/legacy/continental_us.json
+++ /dev/null
@@ -1,25782 +0,0 @@
-{
-  "type": "Topology",
-  "objects": {
-    "states": {
-      "type": "GeometryCollection",
-      "geometries": [
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                0
-              ]
-            ],
-            [
-              [
-                1,
-                2,
-                3,
-                4,
-                5
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              6,
-              7,
-              8,
-              9,
-              10,
-              11
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              12,
-              13,
-              14,
-              15,
-              16
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                17
-              ]
-            ],
-            [
-              [
-                18
-              ]
-            ],
-            [
-              [
-                19
-              ]
-            ],
-            [
-              [
-                20
-              ]
-            ],
-            [
-              [
-                21
-              ]
-            ],
-            [
-              [
-                22
-              ]
-            ],
-            [
-              [
-                23,
-                24,
-                -15,
-                25
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              26,
-              27,
-              28,
-              29,
-              30,
-              31
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              32,
-              33,
-              34,
-              35
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              36,
-              37
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              38,
-              39,
-              40
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                41
-              ]
-            ],
-            [
-              [
-                42
-              ]
-            ],
-            [
-              [
-                43
-              ]
-            ],
-            [
-              [
-                44
-              ]
-            ],
-            [
-              [
-                45
-              ]
-            ],
-            [
-              [
-                46
-              ]
-            ],
-            [
-              [
-                47
-              ]
-            ],
-            [
-              [
-                48
-              ]
-            ],
-            [
-              [
-                49
-              ]
-            ],
-            [
-              [
-                50
-              ]
-            ],
-            [
-              [
-                51
-              ]
-            ],
-            [
-              [
-                52,
-                -6,
-                53
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                54
-              ]
-            ],
-            [
-              [
-                55,
-                -54,
-                -5,
-                56,
-                57,
-                58
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              59,
-              60,
-              61,
-              62,
-              63,
-              64
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              65,
-              66,
-              67,
-              68,
-              69,
-              70,
-              71
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              72,
-              73,
-              74,
-              75,
-              -60,
-              76
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              77,
-              78,
-              -74,
-              79,
-              80
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              81,
-              -27,
-              82,
-              83
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                84,
-                85
-              ]
-            ],
-            [
-              [
-                86,
-                87,
-                88,
-                89,
-                -75,
-                -79,
-                90
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                91
-              ]
-            ],
-            [
-              [
-                92
-              ]
-            ],
-            [
-              [
-                93
-              ]
-            ],
-            [
-              [
-                94
-              ]
-            ],
-            [
-              [
-                95,
-                96,
-                -9,
-                97
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                98
-              ]
-            ],
-            [
-              [
-                99
-              ]
-            ],
-            [
-              [
-                100,
-                -36,
-                101,
-                102,
-                103,
-                104
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                105,
-                106
-              ]
-            ],
-            [
-              [
-                -40,
-                107,
-                108,
-                109,
-                -38,
-                110,
-                111,
-                112
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                113
-              ]
-            ],
-            [
-              [
-                114
-              ]
-            ],
-            [
-              [
-                115,
-                116
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                117
-              ]
-            ],
-            [
-              [
-                118
-              ]
-            ],
-            [
-              [
-                119,
-                -81,
-                120
-              ]
-            ],
-            [
-              [
-                121
-              ]
-            ],
-            [
-              [
-                122
-              ]
-            ],
-            [
-              [
-                123
-              ]
-            ],
-            [
-              [
-                124
-              ]
-            ],
-            [
-              [
-                125,
-                126
-              ]
-            ],
-            [
-              [
-                127
-              ]
-            ],
-            [
-              [
-                128
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              129,
-              -64,
-              130,
-              131,
-              132
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -76,
-              -90,
-              133,
-              -86,
-              134,
-              -12,
-              135,
-              -84,
-              136,
-              -61
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                137
-              ]
-            ],
-            [
-              [
-                138,
-                -98,
-                -8,
-                139,
-                -3
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              140,
-              141,
-              -72,
-              142,
-              143
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                144
-              ]
-            ],
-            [
-              [
-                145
-              ]
-            ],
-            [
-              [
-                146
-              ]
-            ],
-            [
-              [
-                147
-              ]
-            ],
-            [
-              [
-                148
-              ]
-            ],
-            [
-              [
-                149,
-                150
-              ]
-            ],
-            [
-              [
-                151,
-                -58,
-                152,
-                153,
-                154
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              155,
-              -144,
-              156,
-              -132
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -62,
-              -137,
-              -83,
-              -32,
-              157,
-              158
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              159,
-              -104,
-              160,
-              161,
-              -116
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                162
-              ]
-            ],
-            [
-              [
-                163,
-                164,
-                165
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              166,
-              167,
-              -13,
-              -29,
-              168
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -16,
-              -25,
-              169,
-              -68,
-              170
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                171
-              ]
-            ],
-            [
-              [
-                172
-              ]
-            ],
-            [
-              [
-                173
-              ]
-            ],
-            [
-              [
-                174
-              ]
-            ],
-            [
-              [
-                175
-              ]
-            ],
-            [
-              [
-                176,
-                -102,
-                -35,
-                177,
-                -165,
-                178,
-                179
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              180,
-              -91,
-              -78,
-              -120,
-              181,
-              182
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -11,
-              183,
-              -169,
-              -28,
-              -82,
-              -136
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              184,
-              -69,
-              -170,
-              -24,
-              185
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -164,
-              186,
-              -41,
-              -113,
-              187,
-              -183,
-              188,
-              -179
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                189
-              ]
-            ],
-            [
-              [
-                190
-              ]
-            ],
-            [
-              [
-                191,
-                -33,
-                -101
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              192,
-              -59,
-              -152
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -131,
-              -63,
-              -159,
-              193,
-              -141,
-              -156
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              194,
-              -153,
-              -57,
-              -4,
-              -140,
-              -7,
-              -135,
-              -85,
-              -134,
-              -89
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                195
-              ]
-            ],
-            [
-              [
-                196
-              ]
-            ],
-            [
-              [
-                197
-              ]
-            ],
-            [
-              [
-                198
-              ]
-            ],
-            [
-              [
-                199
-              ]
-            ],
-            [
-              [
-                -10,
-                -97,
-                200,
-                -167,
-                -184
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              201,
-              -30,
-              -17,
-              -171,
-              -67
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                -109,
-                202
-              ]
-            ],
-            [
-              [
-                -106,
-                203
-              ]
-            ],
-            [
-              [
-                -111,
-                -37,
-                204,
-                -150,
-                205,
-                -154,
-                -195,
-                -88,
-                206
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -103,
-              -177,
-              207,
-              -161
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                208
-              ]
-            ],
-            [
-              [
-                209
-              ]
-            ],
-            [
-              [
-                210
-              ]
-            ],
-            [
-              [
-                211
-              ]
-            ],
-            [
-              [
-                212
-              ]
-            ],
-            [
-              [
-                213
-              ]
-            ],
-            [
-              [
-                214
-              ]
-            ],
-            [
-              [
-                215
-              ]
-            ],
-            [
-              [
-                -185,
-                216,
-                -70
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                217
-              ]
-            ],
-            [
-              [
-                218
-              ]
-            ],
-            [
-              [
-                219
-              ]
-            ],
-            [
-              [
-                220
-              ]
-            ],
-            [
-              [
-                -126,
-                221,
-                -77,
-                -65,
-                -130,
-                222
-              ]
-            ],
-            [
-              [
-                223
-              ]
-            ],
-            [
-              [
-                224
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -112,
-              -207,
-              -87,
-              -181,
-              -188
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -158,
-              -31,
-              -202,
-              -66,
-              -142,
-              -194
-            ]
-          ]
-        }
-      ]
-    }
-  },
-  "arcs": [
-    [
-      [
-        6347,
-        2300
-      ],
-      [
-        -16,
-        -9
-      ],
-      [
-        -22,
-        1
-      ],
-      [
-        -5,
-        3
-      ],
-      [
-        9,
-        6
-      ],
-      [
-        27,
-        7
-      ],
-      [
-        7,
-        -8
-      ]
-    ],
-    [
-      [
-        6447,
-        2350
-      ],
-      [
-        -4,
-        -4
-      ],
-      [
-        -19,
-        -41
-      ],
-      [
-        -66,
-        -14
-      ],
-      [
-        4,
-        9
-      ],
-      [
-        14,
-        2
-      ],
-      [
-        19,
-        14
-      ],
-      [
-        -4,
-        22
-      ],
-      [
-        -7,
-        24
-      ],
-      [
-        -7,
-        3
-      ],
-      [
-        -5,
-        14
-      ],
-      [
-        0,
-        45
-      ],
-      [
-        -4,
-        27
-      ],
-      [
-        -11,
-        27
-      ],
-      [
-        -4,
-        -6
-      ],
-      [
-        -8,
-        -46
-      ],
-      [
-        -6,
-        -61
-      ],
-      [
-        -3,
-        -19
-      ],
-      [
-        -20,
-        -2
-      ],
-      [
-        -18,
-        4
-      ],
-      [
-        -8,
-        -1
-      ]
-    ],
-    [
-      [
-        6290,
-        2347
-      ],
-      [
-        -2,
-        83
-      ],
-      [
-        -2,
-        76
-      ],
-      [
-        -2,
-        75
-      ],
-      [
-        -2,
-        76
-      ],
-      [
-        -2,
-        76
-      ],
-      [
-        -2,
-        75
-      ],
-      [
-        -1,
-        76
-      ],
-      [
-        -2,
-        75
-      ],
-      [
-        4,
-        75
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        5,
-        75
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        4,
-        75
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        5,
-        75
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        4,
-        75
-      ],
-      [
-        5,
-        74
-      ],
-      [
-        4,
-        75
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        4,
-        75
-      ],
-      [
-        2,
-        19
-      ],
-      [
-        0,
-        6
-      ],
-      [
-        0,
-        10
-      ],
-      [
-        -15,
-        26
-      ]
-    ],
-    [
-      [
-        6329,
-        4211
-      ],
-      [
-        -3,
-        6
-      ],
-      [
-        -2,
-        4
-      ],
-      [
-        2,
-        1
-      ],
-      [
-        28,
-        -1
-      ],
-      [
-        28,
-        0
-      ],
-      [
-        27,
-        -1
-      ],
-      [
-        28,
-        -1
-      ],
-      [
-        28,
-        0
-      ],
-      [
-        28,
-        -1
-      ],
-      [
-        28,
-        0
-      ],
-      [
-        27,
-        -1
-      ],
-      [
-        28,
-        -1
-      ],
-      [
-        28,
-        0
-      ],
-      [
-        28,
-        -1
-      ],
-      [
-        28,
-        0
-      ],
-      [
-        27,
-        -1
-      ],
-      [
-        28,
-        -1
-      ],
-      [
-        28,
-        0
-      ],
-      [
-        28,
-        -1
-      ]
-    ],
-    [
-      [
-        6771,
-        4212
-      ],
-      [
-        4,
-        -51
-      ],
-      [
-        5,
-        -52
-      ],
-      [
-        4,
-        -51
-      ],
-      [
-        5,
-        -52
-      ],
-      [
-        5,
-        -51
-      ],
-      [
-        4,
-        -52
-      ],
-      [
-        5,
-        -51
-      ],
-      [
-        4,
-        -52
-      ],
-      [
-        5,
-        -51
-      ],
-      [
-        4,
-        -52
-      ],
-      [
-        5,
-        -51
-      ],
-      [
-        5,
-        -52
-      ],
-      [
-        4,
-        -51
-      ],
-      [
-        5,
-        -51
-      ],
-      [
-        4,
-        -52
-      ],
-      [
-        5,
-        -51
-      ],
-      [
-        4,
-        -24
-      ],
-      [
-        4,
-        -38
-      ],
-      [
-        24,
-        -112
-      ],
-      [
-        7,
-        -47
-      ],
-      [
-        -2,
-        -19
-      ],
-      [
-        3,
-        -17
-      ],
-      [
-        8,
-        -13
-      ],
-      [
-        -1,
-        -16
-      ],
-      [
-        -11,
-        -18
-      ],
-      [
-        -7,
-        -22
-      ],
-      [
-        -5,
-        -39
-      ],
-      [
-        -11,
-        -69
-      ],
-      [
-        0,
-        -41
-      ],
-      [
-        10,
-        -57
-      ],
-      [
-        2,
-        -26
-      ],
-      [
-        -6,
-        -111
-      ],
-      [
-        4,
-        -72
-      ],
-      [
-        10,
-        -47
-      ]
-    ],
-    [
-      [
-        6877,
-        2601
-      ],
-      [
-        -55,
-        0
-      ],
-      [
-        -56,
-        0
-      ],
-      [
-        -56,
-        0
-      ],
-      [
-        -56,
-        0
-      ],
-      [
-        -57,
-        0
-      ],
-      [
-        -56,
-        0
-      ],
-      [
-        -56,
-        0
-      ],
-      [
-        -56,
-        0
-      ],
-      [
-        -2,
-        -29
-      ],
-      [
-        1,
-        -27
-      ],
-      [
-        6,
-        -27
-      ],
-      [
-        25,
-        -49
-      ],
-      [
-        3,
-        -13
-      ],
-      [
-        -5,
-        -38
-      ],
-      [
-        1,
-        -28
-      ],
-      [
-        -3,
-        -14
-      ],
-      [
-        -6,
-        -12
-      ],
-      [
-        -2,
-        -14
-      ]
-    ],
-    [
-      [
-        6064,
-        4615
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        3,
-        -16
-      ],
-      [
-        0,
-        -9
-      ],
-      [
-        -2,
-        -6
-      ],
-      [
-        -6,
-        -3
-      ],
-      [
-        -4,
-        -4
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        -1,
-        -3
-      ],
-      [
-        1,
-        -8
-      ],
-      [
-        1,
-        -7
-      ],
-      [
-        -3,
-        -9
-      ],
-      [
-        -20,
-        -22
-      ],
-      [
-        -9,
-        -29
-      ],
-      [
-        3,
-        -35
-      ],
-      [
-        -7,
-        -36
-      ],
-      [
-        -17,
-        -35
-      ],
-      [
-        -7,
-        -41
-      ],
-      [
-        3,
-        -44
-      ],
-      [
-        -9,
-        -36
-      ],
-      [
-        -20,
-        -28
-      ],
-      [
-        -6,
-        -16
-      ],
-      [
-        0,
-        -2
-      ]
-    ],
-    [
-      [
-        5962,
-        4212
-      ],
-      [
-        0,
-        -12
-      ],
-      [
-        2,
-        -10
-      ],
-      [
-        -7,
-        -19
-      ],
-      [
-        -16,
-        -19
-      ],
-      [
-        -9,
-        -19
-      ],
-      [
-        -2,
-        -18
-      ],
-      [
-        -4,
-        -9
-      ],
-      [
-        -7,
-        -4
-      ],
-      [
-        -4,
-        -27
-      ],
-      [
-        -4,
-        -63
-      ],
-      [
-        -8,
-        -36
-      ],
-      [
-        -15,
-        -9
-      ],
-      [
-        -7,
-        -14
-      ],
-      [
-        -1,
-        -20
-      ],
-      [
-        -9,
-        -22
-      ],
-      [
-        -16,
-        -26
-      ],
-      [
-        -5,
-        -24
-      ],
-      [
-        5,
-        -23
-      ],
-      [
-        -1,
-        -9
-      ],
-      [
-        -5,
-        -8
-      ],
-      [
-        -17,
-        -11
-      ],
-      [
-        -3,
-        -5
-      ],
-      [
-        -2,
-        -6
-      ],
-      [
-        4,
-        -12
-      ],
-      [
-        2,
-        -18
-      ],
-      [
-        -3,
-        -29
-      ],
-      [
-        -4,
-        -13
-      ],
-      [
-        -4,
-        -12
-      ],
-      [
-        -15,
-        -21
-      ],
-      [
-        -4,
-        -16
-      ],
-      [
-        7,
-        -11
-      ],
-      [
-        -1,
-        -12
-      ],
-      [
-        -7,
-        -14
-      ],
-      [
-        2,
-        -14
-      ],
-      [
-        2,
-        -10
-      ],
-      [
-        7,
-        -9
-      ],
-      [
-        2,
-        -25
-      ],
-      [
-        -5,
-        -32
-      ],
-      [
-        1,
-        -26
-      ],
-      [
-        8,
-        -22
-      ],
-      [
-        2,
-        -9
-      ],
-      [
-        -8,
-        -71
-      ],
-      [
-        0,
-        -10
-      ]
-    ],
-    [
-      [
-        5813,
-        3413
-      ],
-      [
-        -34,
-        -1
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        -1
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ]
-    ],
-    [
-      [
-        5313,
-        3411
-      ],
-      [
-        -1,
-        55
-      ],
-      [
-        0,
-        54
-      ],
-      [
-        0,
-        55
-      ],
-      [
-        0,
-        55
-      ],
-      [
-        -9,
-        9
-      ],
-      [
-        -16,
-        4
-      ],
-      [
-        -9,
-        -3
-      ],
-      [
-        -9,
-        3
-      ],
-      [
-        -7,
-        -9
-      ],
-      [
-        -4,
-        -2
-      ],
-      [
-        -4,
-        2
-      ],
-      [
-        -2,
-        8
-      ],
-      [
-        -7,
-        6
-      ],
-      [
-        -9,
-        19
-      ]
-    ],
-    [
-      [
-        5236,
-        3667
-      ],
-      [
-        0,
-        44
-      ],
-      [
-        1,
-        44
-      ],
-      [
-        0,
-        44
-      ],
-      [
-        1,
-        43
-      ],
-      [
-        0,
-        44
-      ],
-      [
-        1,
-        44
-      ],
-      [
-        0,
-        44
-      ],
-      [
-        1,
-        44
-      ],
-      [
-        0,
-        43
-      ],
-      [
-        1,
-        44
-      ],
-      [
-        0,
-        44
-      ],
-      [
-        1,
-        44
-      ],
-      [
-        0,
-        43
-      ],
-      [
-        1,
-        44
-      ],
-      [
-        0,
-        44
-      ],
-      [
-        1,
-        44
-      ],
-      [
-        -4,
-        56
-      ],
-      [
-        -4,
-        56
-      ],
-      [
-        -4,
-        56
-      ],
-      [
-        -4,
-        56
-      ],
-      [
-        -4,
-        56
-      ],
-      [
-        -4,
-        56
-      ],
-      [
-        -4,
-        56
-      ],
-      [
-        -3,
-        56
-      ]
-    ],
-    [
-      [
-        5213,
-        4816
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        49,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        49,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        49,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        49,
-        0
-      ],
-      [
-        7,
-        -31
-      ],
-      [
-        8,
-        -21
-      ],
-      [
-        1,
-        -15
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        -12,
-        -33
-      ],
-      [
-        -12,
-        -15
-      ],
-      [
-        -6,
-        -16
-      ],
-      [
-        -9,
-        -15
-      ],
-      [
-        -13,
-        -43
-      ],
-      [
-        28,
-        0
-      ],
-      [
-        29,
-        1
-      ],
-      [
-        28,
-        1
-      ],
-      [
-        32,
-        1
-      ]
-    ],
-    [
-      [
-        2713,
-        5018
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -142
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -142
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -142
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ]
-    ],
-    [
-      [
-        2713,
-        2733
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -61,
-        -1
-      ],
-      [
-        -62,
-        0
-      ],
-      [
-        -61,
-        0
-      ],
-      [
-        -61,
-        0
-      ],
-      [
-        -61,
-        -1
-      ],
-      [
-        -83,
-        60
-      ],
-      [
-        -82,
-        60
-      ],
-      [
-        -82,
-        59
-      ],
-      [
-        -82,
-        60
-      ],
-      [
-        -82,
-        59
-      ],
-      [
-        -82,
-        60
-      ],
-      [
-        -82,
-        60
-      ],
-      [
-        -83,
-        59
-      ],
-      [
-        9,
-        23
-      ],
-      [
-        11,
-        61
-      ]
-    ],
-    [
-      [
-        1730,
-        3292
-      ],
-      [
-        0,
-        3
-      ],
-      [
-        24,
-        4
-      ],
-      [
-        12,
-        16
-      ],
-      [
-        7,
-        28
-      ],
-      [
-        1,
-        28
-      ],
-      [
-        -4,
-        29
-      ],
-      [
-        -10,
-        21
-      ],
-      [
-        -17,
-        14
-      ],
-      [
-        -10,
-        40
-      ],
-      [
-        -2,
-        65
-      ],
-      [
-        3,
-        35
-      ],
-      [
-        8,
-        5
-      ],
-      [
-        9,
-        16
-      ],
-      [
-        8,
-        26
-      ],
-      [
-        6,
-        29
-      ],
-      [
-        4,
-        31
-      ],
-      [
-        0,
-        40
-      ],
-      [
-        -2,
-        48
-      ],
-      [
-        16,
-        60
-      ],
-      [
-        15,
-        36
-      ],
-      [
-        29,
-        45
-      ],
-      [
-        6,
-        13
-      ],
-      [
-        1,
-        11
-      ],
-      [
-        0,
-        2
-      ],
-      [
-        -6,
-        15
-      ],
-      [
-        -26,
-        31
-      ],
-      [
-        -11,
-        23
-      ],
-      [
-        -1,
-        20
-      ],
-      [
-        0,
-        1
-      ],
-      [
-        -4,
-        19
-      ],
-      [
-        -27,
-        83
-      ],
-      [
-        -10,
-        45
-      ],
-      [
-        0,
-        34
-      ]
-    ],
-    [
-      [
-        1749,
-        4208
-      ],
-      [
-        0,
-        3
-      ],
-      [
-        4,
-        143
-      ],
-      [
-        -10,
-        49
-      ],
-      [
-        -2,
-        28
-      ],
-      [
-        2,
-        35
-      ],
-      [
-        0,
-        21
-      ],
-      [
-        -5,
-        19
-      ],
-      [
-        -1,
-        33
-      ],
-      [
-        -1,
-        42
-      ],
-      [
-        -8,
-        27
-      ],
-      [
-        -1,
-        12
-      ],
-      [
-        4,
-        29
-      ],
-      [
-        8,
-        15
-      ],
-      [
-        14,
-        10
-      ],
-      [
-        15,
-        3
-      ],
-      [
-        17,
-        -3
-      ],
-      [
-        13,
-        -13
-      ],
-      [
-        8,
-        -22
-      ],
-      [
-        9,
-        -12
-      ],
-      [
-        8,
-        0
-      ],
-      [
-        12,
-        18
-      ],
-      [
-        10,
-        40
-      ],
-      [
-        3,
-        3
-      ],
-      [
-        0,
-        173
-      ],
-      [
-        0,
-        158
-      ]
-    ],
-    [
-      [
-        1848,
-        5019
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        55,
-        0
-      ],
-      [
-        54,
-        -1
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ]
-    ],
-    [
-      [
-        1102,
-        3337
-      ],
-      [
-        -10,
-        -4
-      ],
-      [
-        -12,
-        8
-      ],
-      [
-        -9,
-        39
-      ],
-      [
-        -11,
-        31
-      ],
-      [
-        6,
-        8
-      ],
-      [
-        8,
-        -29
-      ],
-      [
-        22,
-        -44
-      ],
-      [
-        6,
-        -9
-      ]
-    ],
-    [
-      [
-        913,
-        3494
-      ],
-      [
-        -7,
-        -1
-      ],
-      [
-        -11,
-        4
-      ],
-      [
-        -6,
-        21
-      ],
-      [
-        9,
-        2
-      ],
-      [
-        8,
-        -3
-      ],
-      [
-        7,
-        -17
-      ],
-      [
-        0,
-        -6
-      ]
-    ],
-    [
-      [
-        1102,
-        3562
-      ],
-      [
-        9,
-        -30
-      ],
-      [
-        -13,
-        4
-      ],
-      [
-        -13,
-        -2
-      ],
-      [
-        -4,
-        16
-      ],
-      [
-        -4,
-        23
-      ],
-      [
-        -3,
-        5
-      ],
-      [
-        -9,
-        2
-      ],
-      [
-        0,
-        2
-      ],
-      [
-        -1,
-        11
-      ],
-      [
-        2,
-        5
-      ],
-      [
-        28,
-        -25
-      ],
-      [
-        8,
-        -11
-      ]
-    ],
-    [
-      [
-        808,
-        3776
-      ],
-      [
-        -12,
-        -5
-      ],
-      [
-        -9,
-        5
-      ],
-      [
-        -15,
-        39
-      ],
-      [
-        31,
-        5
-      ],
-      [
-        14,
-        -17
-      ],
-      [
-        2,
-        -5
-      ],
-      [
-        -11,
-        -22
-      ]
-    ],
-    [
-      [
-        763,
-        3819
-      ],
-      [
-        -9,
-        -1
-      ],
-      [
-        -15,
-        4
-      ],
-      [
-        5,
-        10
-      ],
-      [
-        8,
-        7
-      ],
-      [
-        3,
-        -6
-      ],
-      [
-        8,
-        -14
-      ]
-    ],
-    [
-      [
-        836,
-        3841
-      ],
-      [
-        36,
-        -21
-      ],
-      [
-        19,
-        10
-      ],
-      [
-        3,
-        -10
-      ],
-      [
-        -2,
-        -8
-      ],
-      [
-        -43,
-        -16
-      ],
-      [
-        -13,
-        11
-      ],
-      [
-        -1,
-        15
-      ],
-      [
-        -5,
-        14
-      ],
-      [
-        6,
-        5
-      ]
-    ],
-    [
-      [
-        83,
-        7031
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        45,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        45,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        45,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        45,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        45,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ]
-    ],
-    [
-      [
-        816,
-        7031
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        40,
-        -66
-      ],
-      [
-        41,
-        -66
-      ],
-      [
-        41,
-        -66
-      ],
-      [
-        40,
-        -66
-      ],
-      [
-        41,
-        -65
-      ],
-      [
-        40,
-        -66
-      ],
-      [
-        41,
-        -66
-      ],
-      [
-        40,
-        -66
-      ],
-      [
-        32,
-        -55
-      ],
-      [
-        32,
-        -56
-      ],
-      [
-        32,
-        -55
-      ],
-      [
-        31,
-        -56
-      ],
-      [
-        32,
-        -55
-      ],
-      [
-        32,
-        -56
-      ],
-      [
-        32,
-        -55
-      ],
-      [
-        32,
-        -56
-      ],
-      [
-        44,
-        -80
-      ],
-      [
-        43,
-        -80
-      ],
-      [
-        44,
-        -79
-      ],
-      [
-        44,
-        -80
-      ],
-      [
-        44,
-        -80
-      ],
-      [
-        44,
-        -80
-      ],
-      [
-        44,
-        -80
-      ],
-      [
-        47,
-        -85
-      ]
-    ],
-    [
-      [
-        1730,
-        3292
-      ],
-      [
-        -20,
-        -5
-      ],
-      [
-        -50,
-        -8
-      ],
-      [
-        -49,
-        -9
-      ],
-      [
-        -50,
-        -9
-      ],
-      [
-        -49,
-        -8
-      ],
-      [
-        -50,
-        -9
-      ],
-      [
-        -50,
-        -8
-      ],
-      [
-        -49,
-        -9
-      ],
-      [
-        -50,
-        -9
-      ],
-      [
-        0,
-        3
-      ],
-      [
-        -1,
-        44
-      ],
-      [
-        -8,
-        16
-      ],
-      [
-        -11,
-        -10
-      ],
-      [
-        -4,
-        57
-      ],
-      [
-        2,
-        27
-      ],
-      [
-        -1,
-        27
-      ],
-      [
-        -10,
-        65
-      ],
-      [
-        -25,
-        78
-      ],
-      [
-        -56,
-        98
-      ],
-      [
-        -28,
-        33
-      ],
-      [
-        -23,
-        41
-      ],
-      [
-        -14,
-        12
-      ],
-      [
-        -17,
-        3
-      ],
-      [
-        -6,
-        -19
-      ],
-      [
-        -20,
-        13
-      ],
-      [
-        3,
-        46
-      ],
-      [
-        -19,
-        64
-      ],
-      [
-        -16,
-        7
-      ],
-      [
-        -41,
-        -4
-      ],
-      [
-        -54,
-        35
-      ],
-      [
-        -16,
-        21
-      ],
-      [
-        -5,
-        38
-      ],
-      [
-        -26,
-        32
-      ],
-      [
-        -33,
-        32
-      ],
-      [
-        -18,
-        -7
-      ],
-      [
-        -25,
-        5
-      ],
-      [
-        -34,
-        23
-      ],
-      [
-        -20,
-        3
-      ],
-      [
-        -40,
-        -7
-      ],
-      [
-        -14,
-        5
-      ],
-      [
-        -14,
-        29
-      ],
-      [
-        -15,
-        15
-      ],
-      [
-        3,
-        35
-      ],
-      [
-        -2,
-        33
-      ],
-      [
-        3,
-        25
-      ],
-      [
-        -7,
-        55
-      ],
-      [
-        5,
-        52
-      ],
-      [
-        -4,
-        18
-      ],
-      [
-        -9,
-        14
-      ],
-      [
-        -26,
-        21
-      ],
-      [
-        -4,
-        26
-      ],
-      [
-        4,
-        37
-      ],
-      [
-        -7,
-        24
-      ],
-      [
-        -21,
-        22
-      ],
-      [
-        -20,
-        51
-      ],
-      [
-        -26,
-        28
-      ],
-      [
-        -10,
-        47
-      ],
-      [
-        -15,
-        29
-      ],
-      [
-        -6,
-        25
-      ],
-      [
-        -34,
-        92
-      ],
-      [
-        -37,
-        71
-      ],
-      [
-        -6,
-        41
-      ],
-      [
-        -1,
-        56
-      ],
-      [
-        14,
-        34
-      ],
-      [
-        8,
-        30
-      ],
-      [
-        -1,
-        28
-      ],
-      [
-        -2,
-        20
-      ],
-      [
-        -13,
-        36
-      ],
-      [
-        -49,
-        21
-      ],
-      [
-        -40,
-        87
-      ],
-      [
-        -2,
-        67
-      ],
-      [
-        -16,
-        68
-      ],
-      [
-        0,
-        44
-      ],
-      [
-        -3,
-        48
-      ],
-      [
-        12,
-        11
-      ],
-      [
-        11,
-        -4
-      ],
-      [
-        -1,
-        -19
-      ],
-      [
-        3,
-        -35
-      ],
-      [
-        13,
-        -25
-      ],
-      [
-        12,
-        -12
-      ],
-      [
-        11,
-        -25
-      ],
-      [
-        8,
-        -7
-      ],
-      [
-        8,
-        -2
-      ],
-      [
-        -4,
-        16
-      ],
-      [
-        -5,
-        10
-      ],
-      [
-        -6,
-        34
-      ],
-      [
-        -11,
-        42
-      ],
-      [
-        -13,
-        24
-      ],
-      [
-        -6,
-        42
-      ],
-      [
-        -6,
-        10
-      ],
-      [
-        -3,
-        16
-      ],
-      [
-        12,
-        19
-      ],
-      [
-        17,
-        13
-      ],
-      [
-        22,
-        4
-      ],
-      [
-        64,
-        -6
-      ],
-      [
-        14,
-        11
-      ],
-      [
-        11,
-        -4
-      ],
-      [
-        9,
-        1
-      ],
-      [
-        -18,
-        12
-      ],
-      [
-        -10,
-        -4
-      ],
-      [
-        -11,
-        2
-      ],
-      [
-        -23,
-        -2
-      ],
-      [
-        -9,
-        5
-      ],
-      [
-        -10,
-        13
-      ],
-      [
-        -7,
-        2
-      ],
-      [
-        -21,
-        -24
-      ],
-      [
-        -10,
-        3
-      ],
-      [
-        -22,
-        26
-      ],
-      [
-        -10,
-        3
-      ],
-      [
-        -15,
-        -14
-      ],
-      [
-        -2,
-        -63
-      ],
-      [
-        5,
-        -46
-      ],
-      [
-        -10,
-        -5
-      ],
-      [
-        -11,
-        19
-      ],
-      [
-        -16,
-        12
-      ],
-      [
-        -14,
-        17
-      ],
-      [
-        -20,
-        32
-      ],
-      [
-        -10,
-        12
-      ],
-      [
-        -12,
-        -27
-      ],
-      [
-        0,
-        13
-      ],
-      [
-        6,
-        31
-      ],
-      [
-        -2,
-        53
-      ],
-      [
-        18,
-        -42
-      ],
-      [
-        -6,
-        29
-      ],
-      [
-        -13,
-        33
-      ],
-      [
-        -11,
-        11
-      ],
-      [
-        -13,
-        58
-      ],
-      [
-        -29,
-        35
-      ],
-      [
-        -23,
-        56
-      ],
-      [
-        -48,
-        93
-      ],
-      [
-        -3,
-        82
-      ],
-      [
-        -18,
-        104
-      ],
-      [
-        7,
-        59
-      ],
-      [
-        -1,
-        42
-      ],
-      [
-        -8,
-        63
-      ],
-      [
-        -9,
-        34
-      ],
-      [
-        -39,
-        95
-      ],
-      [
-        -37,
-        63
-      ],
-      [
-        -6,
-        48
-      ],
-      [
-        -2,
-        48
-      ],
-      [
-        8,
-        43
-      ],
-      [
-        7,
-        46
-      ],
-      [
-        5,
-        12
-      ],
-      [
-        2,
-        -5
-      ],
-      [
-        -1,
-        -10
-      ],
-      [
-        5,
-        -3
-      ],
-      [
-        2,
-        20
-      ],
-      [
-        3,
-        10
-      ],
-      [
-        -6,
-        2
-      ],
-      [
-        1,
-        6
-      ],
-      [
-        3,
-        13
-      ],
-      [
-        12,
-        59
-      ],
-      [
-        -1,
-        75
-      ],
-      [
-        12,
-        92
-      ],
-      [
-        0,
-        30
-      ],
-      [
-        -8,
-        66
-      ],
-      [
-        -8,
-        39
-      ],
-      [
-        -14,
-        28
-      ],
-      [
-        6,
-        40
-      ],
-      [
-        -1,
-        39
-      ],
-      [
-        -3,
-        6
-      ]
-    ],
-    [
-      [
-        3930,
-        6226
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        1,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        1,
-        -76
-      ],
-      [
-        0,
-        -75
-      ]
-    ],
-    [
-      [
-        3932,
-        5018
-      ],
-      [
-        -43,
-        0
-      ],
-      [
-        -43,
-        0
-      ],
-      [
-        -43,
-        0
-      ],
-      [
-        -42,
-        0
-      ]
-    ],
-    [
-      [
-        3761,
-        5018
-      ],
-      [
-        -66,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -66,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -66,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -66,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -66,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -66,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -66,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -66,
-        0
-      ]
-    ],
-    [
-      [
-        2713,
-        5018
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ]
-    ],
-    [
-      [
-        2713,
-        6629
-      ],
-      [
-        55,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        55,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        55,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        55,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        55,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        55,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        55,
-        0
-      ]
-    ],
-    [
-      [
-        3584,
-        6629
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        44,
-        -1
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        44,
-        0
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -51
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -51
-      ],
-      [
-        0,
-        -50
-      ]
-    ],
-    [
-      [
-        9165,
-        7036
-      ],
-      [
-        0,
-        -22
-      ],
-      [
-        0,
-        -30
-      ],
-      [
-        0,
-        -22
-      ],
-      [
-        1,
-        -31
-      ],
-      [
-        0,
-        -34
-      ],
-      [
-        0,
-        -32
-      ],
-      [
-        0,
-        -27
-      ],
-      [
-        -1,
-        -17
-      ],
-      [
-        -1,
-        -25
-      ],
-      [
-        -4,
-        -10
-      ],
-      [
-        -2,
-        -23
-      ]
-    ],
-    [
-      [
-        9158,
-        6763
-      ],
-      [
-        -15,
-        3
-      ],
-      [
-        -25,
-        -6
-      ],
-      [
-        -33,
-        -14
-      ],
-      [
-        -19,
-        8
-      ],
-      [
-        -18,
-        -15
-      ],
-      [
-        -64,
-        -4
-      ],
-      [
-        -14,
-        8
-      ],
-      [
-        -17,
-        -28
-      ],
-      [
-        -27,
-        -16
-      ],
-      [
-        -70,
-        -62
-      ],
-      [
-        -8,
-        -12
-      ]
-    ],
-    [
-      [
-        8848,
-        6625
-      ],
-      [
-        -9,
-        25
-      ],
-      [
-        -7,
-        20
-      ],
-      [
-        14,
-        16
-      ],
-      [
-        11,
-        12
-      ],
-      [
-        10,
-        11
-      ],
-      [
-        7,
-        7
-      ],
-      [
-        -6,
-        16
-      ],
-      [
-        -5,
-        15
-      ],
-      [
-        1,
-        39
-      ],
-      [
-        2,
-        38
-      ],
-      [
-        1,
-        38
-      ],
-      [
-        2,
-        38
-      ],
-      [
-        1,
-        39
-      ],
-      [
-        1,
-        38
-      ],
-      [
-        2,
-        38
-      ],
-      [
-        1,
-        38
-      ]
-    ],
-    [
-      [
-        8874,
-        7053
-      ],
-      [
-        15,
-        -1
-      ],
-      [
-        14,
-        -1
-      ],
-      [
-        15,
-        -1
-      ],
-      [
-        14,
-        -1
-      ],
-      [
-        15,
-        -1
-      ],
-      [
-        15,
-        -1
-      ],
-      [
-        14,
-        -1
-      ],
-      [
-        15,
-        -1
-      ],
-      [
-        0,
-        -11
-      ],
-      [
-        7,
-        1
-      ],
-      [
-        1,
-        10
-      ],
-      [
-        21,
-        -1
-      ],
-      [
-        21,
-        0
-      ],
-      [
-        20,
-        -1
-      ],
-      [
-        21,
-        -1
-      ],
-      [
-        21,
-        0
-      ],
-      [
-        21,
-        -1
-      ],
-      [
-        20,
-        0
-      ],
-      [
-        21,
-        -1
-      ],
-      [
-        0,
-        -4
-      ]
-    ],
-    [
-      [
-        8259,
-        5778
-      ],
-      [
-        -4,
-        11
-      ],
-      [
-        -8,
-        8
-      ],
-      [
-        -4,
-        3
-      ]
-    ],
-    [
-      [
-        8243,
-        5800
-      ],
-      [
-        14,
-        27
-      ],
-      [
-        9,
-        -23
-      ],
-      [
-        10,
-        -26
-      ],
-      [
-        -15,
-        -33
-      ],
-      [
-        -2,
-        33
-      ]
-    ],
-    [
-      [
-        8538,
-        6151
-      ],
-      [
-        -7,
-        -14
-      ],
-      [
-        -7,
-        -25
-      ],
-      [
-        -15,
-        -31
-      ],
-      [
-        1,
-        -21
-      ],
-      [
-        3,
-        -15
-      ],
-      [
-        -1,
-        -30
-      ],
-      [
-        9,
-        -30
-      ],
-      [
-        18,
-        -49
-      ],
-      [
-        4,
-        -76
-      ],
-      [
-        14,
-        -51
-      ],
-      [
-        22,
-        -59
-      ],
-      [
-        17,
-        -17
-      ],
-      [
-        0,
-        -22
-      ],
-      [
-        -7,
-        -36
-      ],
-      [
-        -10,
-        -17
-      ],
-      [
-        13,
-        3
-      ],
-      [
-        6,
-        -8
-      ],
-      [
-        7,
-        -30
-      ],
-      [
-        -1,
-        -20
-      ]
-    ],
-    [
-      [
-        8604,
-        5603
-      ],
-      [
-        -18,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -17,
-        0
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        -1,
-        64
-      ],
-      [
-        -2,
-        64
-      ],
-      [
-        -2,
-        64
-      ],
-      [
-        -1,
-        63
-      ],
-      [
-        -2,
-        64
-      ],
-      [
-        -2,
-        64
-      ],
-      [
-        -1,
-        64
-      ],
-      [
-        -2,
-        64
-      ]
-    ],
-    [
-      [
-        8475,
-        6114
-      ],
-      [
-        13,
-        32
-      ],
-      [
-        6,
-        10
-      ],
-      [
-        7,
-        5
-      ],
-      [
-        22,
-        1
-      ],
-      [
-        15,
-        -11
-      ]
-    ],
-    [
-      [
-        7436,
-        1
-      ],
-      [
-        -5,
-        -1
-      ],
-      [
-        0,
-        6
-      ],
-      [
-        8,
-        8
-      ],
-      [
-        5,
-        -1
-      ],
-      [
-        -1,
-        -8
-      ],
-      [
-        -7,
-        -4
-      ]
-    ],
-    [
-      [
-        7473,
-        23
-      ],
-      [
-        -11,
-        -4
-      ],
-      [
-        9,
-        16
-      ],
-      [
-        3,
-        24
-      ],
-      [
-        6,
-        -19
-      ],
-      [
-        -1,
-        -11
-      ],
-      [
-        -6,
-        -6
-      ]
-    ],
-    [
-      [
-        7514,
-        44
-      ],
-      [
-        -6,
-        -9
-      ],
-      [
-        -2,
-        3
-      ],
-      [
-        0,
-        12
-      ],
-      [
-        -7,
-        27
-      ],
-      [
-        0,
-        7
-      ],
-      [
-        17,
-        -27
-      ],
-      [
-        0,
-        -7
-      ],
-      [
-        -2,
-        -6
-      ]
-    ],
-    [
-      [
-        7564,
-        70
-      ],
-      [
-        -8,
-        -9
-      ],
-      [
-        -8,
-        7
-      ],
-      [
-        9,
-        9
-      ],
-      [
-        27,
-        10
-      ],
-      [
-        -10,
-        -12
-      ],
-      [
-        -10,
-        -5
-      ]
-    ],
-    [
-      [
-        7601,
-        105
-      ],
-      [
-        -3,
-        0
-      ],
-      [
-        2,
-        6
-      ],
-      [
-        6,
-        11
-      ],
-      [
-        3,
-        -4
-      ],
-      [
-        0,
-        -6
-      ],
-      [
-        -8,
-        -7
-      ]
-    ],
-    [
-      [
-        7634,
-        145
-      ],
-      [
-        -4,
-        -2
-      ],
-      [
-        6,
-        18
-      ],
-      [
-        2,
-        -2
-      ],
-      [
-        -4,
-        -14
-      ]
-    ],
-    [
-      [
-        7679,
-        242
-      ],
-      [
-        -35,
-        -76
-      ],
-      [
-        4,
-        19
-      ],
-      [
-        14,
-        40
-      ],
-      [
-        4,
-        19
-      ],
-      [
-        9,
-        13
-      ],
-      [
-        8,
-        21
-      ],
-      [
-        1,
-        26
-      ],
-      [
-        12,
-        18
-      ],
-      [
-        4,
-        2
-      ],
-      [
-        -21,
-        -82
-      ]
-    ],
-    [
-      [
-        7392,
-        770
-      ],
-      [
-        -6,
-        -11
-      ],
-      [
-        -13,
-        8
-      ],
-      [
-        -7,
-        14
-      ],
-      [
-        -2,
-        27
-      ],
-      [
-        10,
-        -29
-      ],
-      [
-        4,
-        -6
-      ],
-      [
-        14,
-        -3
-      ]
-    ],
-    [
-      [
-        7384,
-        810
-      ],
-      [
-        0,
-        -24
-      ],
-      [
-        -9,
-        39
-      ],
-      [
-        -6,
-        44
-      ],
-      [
-        8,
-        -14
-      ],
-      [
-        7,
-        -45
-      ]
-    ],
-    [
-      [
-        7712,
-        1102
-      ],
-      [
-        3,
-        -30
-      ],
-      [
-        -16,
-        69
-      ],
-      [
-        -19,
-        108
-      ],
-      [
-        -11,
-        83
-      ],
-      [
-        7,
-        -22
-      ],
-      [
-        7,
-        -47
-      ],
-      [
-        29,
-        -161
-      ]
-    ],
-    [
-      [
-        6895,
-        2054
-      ],
-      [
-        -18,
-        -14
-      ],
-      [
-        -18,
-        10
-      ],
-      [
-        11,
-        2
-      ],
-      [
-        9,
-        -4
-      ],
-      [
-        21,
-        21
-      ],
-      [
-        11,
-        15
-      ],
-      [
-        13,
-        6
-      ],
-      [
-        -29,
-        -36
-      ]
-    ],
-    [
-      [
-        7484,
-        2493
-      ],
-      [
-        8,
-        -37
-      ],
-      [
-        13,
-        -149
-      ],
-      [
-        8,
-        -52
-      ],
-      [
-        15,
-        -140
-      ],
-      [
-        26,
-        -136
-      ],
-      [
-        35,
-        -164
-      ],
-      [
-        58,
-        -198
-      ],
-      [
-        7,
-        -29
-      ],
-      [
-        -8,
-        -24
-      ],
-      [
-        -2,
-        -25
-      ],
-      [
-        0,
-        -37
-      ],
-      [
-        2,
-        -37
-      ],
-      [
-        6,
-        -44
-      ],
-      [
-        14,
-        -68
-      ],
-      [
-        -8,
-        13
-      ],
-      [
-        -19,
-        98
-      ],
-      [
-        -2,
-        58
-      ],
-      [
-        3,
-        81
-      ],
-      [
-        -5,
-        -2
-      ],
-      [
-        -3,
-        -26
-      ],
-      [
-        -2,
-        -31
-      ],
-      [
-        -5,
-        -13
-      ],
-      [
-        -7,
-        48
-      ],
-      [
-        1,
-        21
-      ],
-      [
-        7,
-        26
-      ],
-      [
-        -2,
-        9
-      ],
-      [
-        -12,
-        12
-      ],
-      [
-        -2,
-        21
-      ],
-      [
-        1,
-        20
-      ],
-      [
-        -6,
-        10
-      ],
-      [
-        -5,
-        0
-      ],
-      [
-        3,
-        -49
-      ],
-      [
-        5,
-        -31
-      ],
-      [
-        7,
-        -72
-      ],
-      [
-        11,
-        -44
-      ],
-      [
-        6,
-        -37
-      ],
-      [
-        74,
-        -392
-      ],
-      [
-        17,
-        -50
-      ],
-      [
-        6,
-        -36
-      ],
-      [
-        7,
-        -75
-      ],
-      [
-        2,
-        -96
-      ],
-      [
-        -12,
-        -176
-      ],
-      [
-        -3,
-        -120
-      ],
-      [
-        -2,
-        4
-      ],
-      [
-        -1,
-        12
-      ],
-      [
-        -3,
-        2
-      ],
-      [
-        -10,
-        -55
-      ],
-      [
-        -14,
-        -50
-      ],
-      [
-        -5,
-        -77
-      ],
-      [
-        -7,
-        -38
-      ],
-      [
-        -20,
-        -41
-      ],
-      [
-        -13,
-        1
-      ],
-      [
-        -31,
-        -31
-      ],
-      [
-        -22,
-        8
-      ],
-      [
-        -25,
-        -17
-      ],
-      [
-        -18,
-        2
-      ],
-      [
-        -9,
-        36
-      ],
-      [
-        1,
-        17
-      ],
-      [
-        4,
-        16
-      ],
-      [
-        7,
-        4
-      ],
-      [
-        23,
-        -38
-      ],
-      [
-        4,
-        16
-      ],
-      [
-        -7,
-        19
-      ],
-      [
-        -13,
-        11
-      ],
-      [
-        -10,
-        11
-      ],
-      [
-        -20,
-        87
-      ],
-      [
-        -20,
-        60
-      ],
-      [
-        -4,
-        40
-      ],
-      [
-        -35,
-        24
-      ],
-      [
-        -25,
-        37
-      ],
-      [
-        -17,
-        66
-      ],
-      [
-        -9,
-        116
-      ],
-      [
-        -12,
-        13
-      ],
-      [
-        -4,
-        9
-      ],
-      [
-        10,
-        44
-      ],
-      [
-        12,
-        36
-      ],
-      [
-        -9,
-        -9
-      ],
-      [
-        -7,
-        -14
-      ],
-      [
-        -8,
-        -32
-      ],
-      [
-        -7,
-        -5
-      ],
-      [
-        -5,
-        5
-      ],
-      [
-        -7,
-        62
-      ],
-      [
-        2,
-        75
-      ],
-      [
-        9,
-        28
-      ],
-      [
-        -14,
-        1
-      ],
-      [
-        -15,
-        -11
-      ],
-      [
-        2,
-        -25
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        -11,
-        4
-      ],
-      [
-        -8,
-        9
-      ],
-      [
-        -11,
-        26
-      ],
-      [
-        -15,
-        50
-      ],
-      [
-        -31,
-        137
-      ],
-      [
-        -6,
-        20
-      ],
-      [
-        -10,
-        20
-      ],
-      [
-        4,
-        6
-      ],
-      [
-        9,
-        4
-      ],
-      [
-        20,
-        62
-      ],
-      [
-        16,
-        37
-      ],
-      [
-        5,
-        26
-      ],
-      [
-        -1,
-        11
-      ],
-      [
-        -7,
-        16
-      ],
-      [
-        -9,
-        -14
-      ],
-      [
-        -4,
-        4
-      ],
-      [
-        -10,
-        33
-      ],
-      [
-        -10,
-        9
-      ],
-      [
-        -7,
-        -7
-      ],
-      [
-        8,
-        -27
-      ],
-      [
-        6,
-        -10
-      ],
-      [
-        -2,
-        -38
-      ],
-      [
-        -3,
-        -13
-      ],
-      [
-        -6,
-        -11
-      ],
-      [
-        -10,
-        6
-      ],
-      [
-        -4,
-        -10
-      ],
-      [
-        -6,
-        11
-      ],
-      [
-        -5,
-        17
-      ],
-      [
-        -7,
-        28
-      ],
-      [
-        17,
-        157
-      ],
-      [
-        15,
-        100
-      ],
-      [
-        2,
-        115
-      ],
-      [
-        1,
-        17
-      ],
-      [
-        -1,
-        30
-      ],
-      [
-        -21,
-        66
-      ],
-      [
-        -90,
-        161
-      ],
-      [
-        -70,
-        191
-      ],
-      [
-        -61,
-        72
-      ],
-      [
-        -46,
-        -16
-      ],
-      [
-        -8,
-        -14
-      ],
-      [
-        -3,
-        -19
-      ],
-      [
-        3,
-        -21
-      ],
-      [
-        -4,
-        -9
-      ],
-      [
-        -13,
-        1
-      ],
-      [
-        -16,
-        -5
-      ],
-      [
-        -44,
-        -50
-      ],
-      [
-        -15,
-        1
-      ],
-      [
-        -14,
-        -13
-      ],
-      [
-        -10,
-        -9
-      ],
-      [
-        -28,
-        -6
-      ],
-      [
-        -23,
-        -11
-      ],
-      [
-        -9,
-        6
-      ],
-      [
-        -7,
-        29
-      ],
-      [
-        0,
-        31
-      ],
-      [
-        5,
-        -24
-      ],
-      [
-        8,
-        -18
-      ],
-      [
-        4,
-        8
-      ],
-      [
-        2,
-        16
-      ],
-      [
-        -9,
-        31
-      ],
-      [
-        -26,
-        40
-      ],
-      [
-        -29,
-        59
-      ],
-      [
-        9,
-        -2
-      ],
-      [
-        2,
-        13
-      ],
-      [
-        -9,
-        16
-      ],
-      [
-        4,
-        19
-      ],
-      [
-        6,
-        21
-      ],
-      [
-        -12,
-        -3
-      ],
-      [
-        -12,
-        -15
-      ],
-      [
-        0,
-        -17
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        -6,
-        2
-      ],
-      [
-        -11,
-        17
-      ],
-      [
-        -56,
-        48
-      ],
-      [
-        -48,
-        27
-      ],
-      [
-        37,
-        12
-      ],
-      [
-        20,
-        -10
-      ],
-      [
-        -2,
-        15
-      ],
-      [
-        -5,
-        9
-      ],
-      [
-        -16,
-        12
-      ],
-      [
-        -20,
-        -5
-      ],
-      [
-        -13,
-        6
-      ],
-      [
-        -13,
-        -12
-      ],
-      [
-        -14,
-        -17
-      ],
-      [
-        -13,
-        -9
-      ],
-      [
-        -50,
-        -12
-      ],
-      [
-        -41,
-        -13
-      ],
-      [
-        7,
-        14
-      ],
-      [
-        7,
-        9
-      ],
-      [
-        24,
-        14
-      ],
-      [
-        3,
-        28
-      ],
-      [
-        -5,
-        28
-      ],
-      [
-        -7,
-        -7
-      ],
-      [
-        -6,
-        -21
-      ],
-      [
-        -8,
-        15
-      ],
-      [
-        -9,
-        0
-      ],
-      [
-        -3,
-        -34
-      ],
-      [
-        -11,
-        -23
-      ],
-      [
-        -5,
-        -23
-      ],
-      [
-        -34,
-        -18
-      ],
-      [
-        -4,
-        6
-      ],
-      [
-        9,
-        22
-      ],
-      [
-        0,
-        12
-      ],
-      [
-        -8,
-        -7
-      ]
-    ],
-    [
-      [
-        6877,
-        2601
-      ],
-      [
-        8,
-        -31
-      ],
-      [
-        13,
-        -66
-      ],
-      [
-        1,
-        -16
-      ],
-      [
-        16,
-        -2
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        27,
-        -3
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        27,
-        -4
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        27,
-        -3
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        27,
-        -4
-      ],
-      [
-        28,
-        -3
-      ],
-      [
-        27,
-        -4
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        27,
-        -3
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        0,
-        -13
-      ],
-      [
-        5,
-        -21
-      ],
-      [
-        1,
-        -24
-      ],
-      [
-        2,
-        -12
-      ],
-      [
-        5,
-        -7
-      ],
-      [
-        9,
-        -1
-      ],
-      [
-        9,
-        13
-      ],
-      [
-        5,
-        29
-      ],
-      [
-        2,
-        34
-      ],
-      [
-        -4,
-        37
-      ],
-      [
-        1,
-        32
-      ],
-      [
-        4,
-        18
-      ],
-      [
-        5,
-        5
-      ],
-      [
-        5,
-        10
-      ],
-      [
-        4,
-        2
-      ],
-      [
-        9,
-        -5
-      ],
-      [
-        36,
-        -27
-      ],
-      [
-        29,
-        -3
-      ]
-    ],
-    [
-      [
-        7499,
-        2589
-      ],
-      [
-        -8,
-        -98
-      ],
-      [
-        -3,
-        35
-      ],
-      [
-        0,
-        34
-      ],
-      [
-        6,
-        20
-      ],
-      [
-        5,
-        9
-      ]
-    ],
-    [
-      [
-        7594,
-        3015
-      ],
-      [
-        -9,
-        -34
-      ],
-      [
-        -21,
-        -21
-      ],
-      [
-        -7,
-        1
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        3,
-        -16
-      ],
-      [
-        5,
-        -11
-      ],
-      [
-        0,
-        -10
-      ],
-      [
-        -5,
-        -14
-      ],
-      [
-        -11,
-        -4
-      ],
-      [
-        -7,
-        -16
-      ],
-      [
-        2,
-        -15
-      ],
-      [
-        4,
-        -8
-      ],
-      [
-        -1,
-        -14
-      ],
-      [
-        -12,
-        -15
-      ],
-      [
-        -3,
-        -14
-      ],
-      [
-        6,
-        -4
-      ],
-      [
-        5,
-        4
-      ],
-      [
-        3,
-        -3
-      ],
-      [
-        -7,
-        -24
-      ],
-      [
-        -7,
-        -15
-      ],
-      [
-        -6,
-        -26
-      ],
-      [
-        -15,
-        -7
-      ],
-      [
-        0,
-        -8
-      ],
-      [
-        9,
-        -8
-      ],
-      [
-        7,
-        -20
-      ],
-      [
-        -14,
-        -37
-      ],
-      [
-        -8,
-        3
-      ],
-      [
-        -5,
-        8
-      ],
-      [
-        -3,
-        -29
-      ],
-      [
-        1,
-        -16
-      ],
-      [
-        -3,
-        -32
-      ],
-      [
-        -5,
-        -38
-      ],
-      [
-        -4,
-        -16
-      ],
-      [
-        1,
-        -29
-      ],
-      [
-        2,
-        -28
-      ]
-    ],
-    [
-      [
-        6771,
-        4212
-      ],
-      [
-        56,
-        -1
-      ],
-      [
-        56,
-        -1
-      ],
-      [
-        56,
-        -2
-      ],
-      [
-        57,
-        -1
-      ]
-    ],
-    [
-      [
-        6996,
-        4207
-      ],
-      [
-        52,
-        1
-      ],
-      [
-        52,
-        2
-      ],
-      [
-        53,
-        1
-      ],
-      [
-        52,
-        1
-      ]
-    ],
-    [
-      [
-        7205,
-        4212
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        -8,
-        -27
-      ],
-      [
-        -26,
-        -52
-      ],
-      [
-        -6,
-        -39
-      ],
-      [
-        32,
-        -44
-      ],
-      [
-        20,
-        -35
-      ],
-      [
-        13,
-        -14
-      ],
-      [
-        14,
-        -4
-      ],
-      [
-        9,
-        -12
-      ],
-      [
-        5,
-        -29
-      ],
-      [
-        39,
-        -140
-      ],
-      [
-        41,
-        -72
-      ],
-      [
-        17,
-        -36
-      ],
-      [
-        8,
-        -34
-      ],
-      [
-        35,
-        -57
-      ],
-      [
-        12,
-        -31
-      ],
-      [
-        1,
-        -23
-      ],
-      [
-        4,
-        -16
-      ],
-      [
-        8,
-        -10
-      ],
-      [
-        7,
-        -20
-      ],
-      [
-        7,
-        -32
-      ],
-      [
-        14,
-        -28
-      ],
-      [
-        21,
-        -23
-      ],
-      [
-        16,
-        -54
-      ],
-      [
-        9,
-        -83
-      ],
-      [
-        10,
-        -49
-      ],
-      [
-        15,
-        -20
-      ],
-      [
-        21,
-        -71
-      ],
-      [
-        7,
-        -43
-      ],
-      [
-        -1,
-        -37
-      ],
-      [
-        11,
-        -29
-      ],
-      [
-        35,
-        -33
-      ]
-    ],
-    [
-      [
-        5900,
-        7238
-      ],
-      [
-        10,
-        -28
-      ],
-      [
-        19,
-        -25
-      ],
-      [
-        10,
-        -23
-      ],
-      [
-        2,
-        -21
-      ],
-      [
-        12,
-        -24
-      ],
-      [
-        19,
-        -24
-      ],
-      [
-        12,
-        -22
-      ],
-      [
-        3,
-        -18
-      ],
-      [
-        -1,
-        -30
-      ],
-      [
-        -4,
-        -39
-      ],
-      [
-        -7,
-        -28
-      ],
-      [
-        -10,
-        -18
-      ],
-      [
-        -8,
-        -24
-      ],
-      [
-        -5,
-        -31
-      ],
-      [
-        -15,
-        -29
-      ],
-      [
-        -26,
-        -27
-      ],
-      [
-        -29,
-        -18
-      ],
-      [
-        -32,
-        -9
-      ],
-      [
-        -19,
-        -23
-      ],
-      [
-        -6,
-        -36
-      ],
-      [
-        3,
-        -30
-      ],
-      [
-        11,
-        -24
-      ],
-      [
-        7,
-        -26
-      ],
-      [
-        1,
-        -27
-      ],
-      [
-        -8,
-        -44
-      ],
-      [
-        -17,
-        -63
-      ],
-      [
-        -20,
-        -40
-      ],
-      [
-        -21,
-        -18
-      ],
-      [
-        -10,
-        -27
-      ],
-      [
-        2,
-        -36
-      ],
-      [
-        -1,
-        -21
-      ],
-      [
-        -9,
-        -7
-      ]
-    ],
-    [
-      [
-        5763,
-        6378
-      ],
-      [
-        -15,
-        22
-      ],
-      [
-        -3,
-        14
-      ],
-      [
-        -12,
-        16
-      ],
-      [
-        -2,
-        9
-      ],
-      [
-        -10,
-        9
-      ],
-      [
-        -8,
-        29
-      ],
-      [
-        -44,
-        -1
-      ],
-      [
-        -44,
-        0
-      ],
-      [
-        -43,
-        -1
-      ],
-      [
-        -44,
-        0
-      ],
-      [
-        -44,
-        -1
-      ],
-      [
-        -44,
-        0
-      ],
-      [
-        -43,
-        -1
-      ],
-      [
-        -44,
-        -1
-      ],
-      [
-        -44,
-        0
-      ],
-      [
-        -43,
-        -1
-      ],
-      [
-        -44,
-        0
-      ],
-      [
-        -44,
-        -1
-      ],
-      [
-        -43,
-        -1
-      ],
-      [
-        -44,
-        0
-      ],
-      [
-        -44,
-        -1
-      ],
-      [
-        -43,
-        0
-      ]
-    ],
-    [
-      [
-        5014,
-        6468
-      ],
-      [
-        -11,
-        30
-      ],
-      [
-        -5,
-        28
-      ],
-      [
-        3,
-        13
-      ],
-      [
-        1,
-        45
-      ],
-      [
-        -2,
-        77
-      ],
-      [
-        -4,
-        43
-      ],
-      [
-        -7,
-        10
-      ],
-      [
-        0,
-        13
-      ],
-      [
-        4,
-        17
-      ],
-      [
-        -1,
-        12
-      ],
-      [
-        -8,
-        5
-      ],
-      [
-        -2,
-        15
-      ],
-      [
-        3,
-        24
-      ],
-      [
-        -2,
-        14
-      ],
-      [
-        -7,
-        5
-      ],
-      [
-        -2,
-        8
-      ],
-      [
-        1,
-        11
-      ],
-      [
-        -4,
-        7
-      ],
-      [
-        -8,
-        3
-      ],
-      [
-        -3,
-        26
-      ],
-      [
-        1,
-        50
-      ],
-      [
-        -3,
-        35
-      ],
-      [
-        -7,
-        21
-      ],
-      [
-        -4,
-        19
-      ],
-      [
-        0,
-        18
-      ],
-      [
-        -9,
-        28
-      ],
-      [
-        -16,
-        39
-      ],
-      [
-        -10,
-        52
-      ],
-      [
-        -5,
-        63
-      ],
-      [
-        -12,
-        36
-      ],
-      [
-        -5,
-        2
-      ]
-    ],
-    [
-      [
-        4890,
-        7237
-      ],
-      [
-        -4,
-        33
-      ],
-      [
-        -5,
-        15
-      ],
-      [
-        -1,
-        11
-      ],
-      [
-        -14,
-        29
-      ],
-      [
-        -1,
-        11
-      ],
-      [
-        2,
-        14
-      ],
-      [
-        9,
-        27
-      ],
-      [
-        8,
-        44
-      ],
-      [
-        2,
-        30
-      ],
-      [
-        7,
-        23
-      ],
-      [
-        0,
-        12
-      ],
-      [
-        -1,
-        16
-      ],
-      [
-        -4,
-        14
-      ],
-      [
-        -11,
-        11
-      ],
-      [
-        -1,
-        4
-      ],
-      [
-        -1,
-        17
-      ],
-      [
-        4,
-        10
-      ],
-      [
-        2,
-        12
-      ],
-      [
-        -2,
-        14
-      ],
-      [
-        -6,
-        25
-      ],
-      [
-        -3,
-        25
-      ],
-      [
-        25,
-        2
-      ]
-    ],
-    [
-      [
-        4895,
-        7636
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        57,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        57,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        57,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        57,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        57,
-        0
-      ],
-      [
-        57,
-        0
-      ]
-    ],
-    [
-      [
-        5797,
-        7636
-      ],
-      [
-        1,
-        -25
-      ],
-      [
-        3,
-        -18
-      ],
-      [
-        7,
-        -15
-      ],
-      [
-        11,
-        -11
-      ],
-      [
-        2,
-        -21
-      ],
-      [
-        -7,
-        -32
-      ],
-      [
-        -3,
-        -39
-      ],
-      [
-        3,
-        -47
-      ],
-      [
-        5,
-        -42
-      ],
-      [
-        8,
-        -37
-      ],
-      [
-        19,
-        -28
-      ],
-      [
-        30,
-        -17
-      ],
-      [
-        17,
-        -27
-      ],
-      [
-        6,
-        -36
-      ],
-      [
-        1,
-        -3
-      ]
-    ],
-    [
-      [
-        2366,
-        8037
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -62
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -62
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ]
-    ],
-    [
-      [
-        2366,
-        7031
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ]
-    ],
-    [
-      [
-        1848,
-        7031
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -64,
-        0
-      ],
-      [
-        -64,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -64,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -64,
-        0
-      ],
-      [
-        -64,
-        0
-      ]
-    ],
-    [
-      [
-        1333,
-        7031
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        -1,
-        90
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        89
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        99
-      ],
-      [
-        0,
-        2
-      ],
-      [
-        11,
-        61
-      ],
-      [
-        2,
-        30
-      ],
-      [
-        -3,
-        16
-      ],
-      [
-        2,
-        16
-      ],
-      [
-        7,
-        16
-      ],
-      [
-        0,
-        17
-      ],
-      [
-        -7,
-        18
-      ],
-      [
-        -13,
-        12
-      ],
-      [
-        -20,
-        6
-      ],
-      [
-        -10,
-        22
-      ],
-      [
-        0,
-        37
-      ],
-      [
-        14,
-        57
-      ],
-      [
-        29,
-        78
-      ],
-      [
-        17,
-        54
-      ],
-      [
-        2,
-        32
-      ],
-      [
-        18,
-        74
-      ],
-      [
-        33,
-        116
-      ],
-      [
-        12,
-        74
-      ],
-      [
-        -7,
-        33
-      ],
-      [
-        -17,
-        31
-      ],
-      [
-        -26,
-        30
-      ],
-      [
-        -18,
-        34
-      ],
-      [
-        -5,
-        18
-      ]
-    ],
-    [
-      [
-        1353,
-        8643
-      ],
-      [
-        -5,
-        21
-      ],
-      [
-        -3,
-        28
-      ],
-      [
-        4,
-        16
-      ],
-      [
-        -4,
-        27
-      ],
-      [
-        -11,
-        40
-      ],
-      [
-        -5,
-        27
-      ],
-      [
-        1,
-        9
-      ],
-      [
-        1,
-        4
-      ],
-      [
-        0,
-        64
-      ],
-      [
-        0,
-        65
-      ],
-      [
-        0,
-        64
-      ],
-      [
-        0,
-        65
-      ],
-      [
-        0,
-        65
-      ],
-      [
-        -1,
-        64
-      ],
-      [
-        0,
-        65
-      ],
-      [
-        0,
-        64
-      ],
-      [
-        0,
-        65
-      ],
-      [
-        0,
-        64
-      ],
-      [
-        0,
-        65
-      ],
-      [
-        0,
-        64
-      ],
-      [
-        -1,
-        65
-      ],
-      [
-        0,
-        65
-      ],
-      [
-        0,
-        64
-      ],
-      [
-        0,
-        64
-      ]
-    ],
-    [
-      [
-        1329,
-        9847
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        42,
-        0
-      ]
-    ],
-    [
-      [
-        1500,
-        9847
-      ],
-      [
-        0,
-        -99
-      ],
-      [
-        0,
-        -100
-      ],
-      [
-        0,
-        -99
-      ],
-      [
-        0,
-        -100
-      ],
-      [
-        19,
-        -40
-      ],
-      [
-        14,
-        -25
-      ],
-      [
-        8,
-        -27
-      ],
-      [
-        14,
-        -28
-      ],
-      [
-        3,
-        -10
-      ],
-      [
-        4,
-        -30
-      ],
-      [
-        -3,
-        -22
-      ],
-      [
-        7,
-        -22
-      ],
-      [
-        -1,
-        -11
-      ],
-      [
-        -6,
-        -5
-      ],
-      [
-        -1,
-        -2
-      ],
-      [
-        0,
-        -2
-      ],
-      [
-        2,
-        -4
-      ],
-      [
-        19,
-        -21
-      ],
-      [
-        19,
-        -30
-      ],
-      [
-        23,
-        -20
-      ],
-      [
-        8,
-        -12
-      ],
-      [
-        31,
-        -59
-      ],
-      [
-        16,
-        -38
-      ],
-      [
-        17,
-        -27
-      ],
-      [
-        9,
-        -32
-      ],
-      [
-        17,
-        -27
-      ],
-      [
-        4,
-        -14
-      ],
-      [
-        2,
-        -3
-      ],
-      [
-        2,
-        -1
-      ],
-      [
-        11,
-        7
-      ],
-      [
-        3,
-        -2
-      ],
-      [
-        5,
-        -11
-      ],
-      [
-        1,
-        -16
-      ],
-      [
-        4,
-        -7
-      ],
-      [
-        7,
-        -4
-      ],
-      [
-        7,
-        -1
-      ],
-      [
-        24,
-        8
-      ],
-      [
-        5,
-        0
-      ],
-      [
-        3,
-        -4
-      ],
-      [
-        1,
-        -8
-      ],
-      [
-        0,
-        -15
-      ],
-      [
-        -3,
-        -20
-      ],
-      [
-        -7,
-        -21
-      ],
-      [
-        1,
-        -19
-      ],
-      [
-        -5,
-        -44
-      ],
-      [
-        -6,
-        -29
-      ],
-      [
-        0,
-        -29
-      ],
-      [
-        -7,
-        -16
-      ],
-      [
-        4,
-        -20
-      ],
-      [
-        -3,
-        -30
-      ],
-      [
-        3,
-        -7
-      ],
-      [
-        8,
-        -14
-      ],
-      [
-        3,
-        -37
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        -15,
-        -14
-      ],
-      [
-        -5,
-        -10
-      ],
-      [
-        -2,
-        -13
-      ],
-      [
-        6,
-        -39
-      ],
-      [
-        -6,
-        -21
-      ],
-      [
-        -1,
-        -18
-      ],
-      [
-        2,
-        -5
-      ],
-      [
-        14,
-        -10
-      ],
-      [
-        17,
-        -22
-      ],
-      [
-        5,
-        -4
-      ],
-      [
-        4,
-        1
-      ],
-      [
-        7,
-        7
-      ],
-      [
-        8,
-        15
-      ],
-      [
-        16,
-        14
-      ],
-      [
-        19,
-        32
-      ],
-      [
-        1,
-        9
-      ],
-      [
-        2,
-        5
-      ],
-      [
-        2,
-        0
-      ],
-      [
-        6,
-        -4
-      ],
-      [
-        12,
-        -20
-      ],
-      [
-        11,
-        -10
-      ],
-      [
-        1,
-        -3
-      ],
-      [
-        1,
-        -5
-      ],
-      [
-        0,
-        -19
-      ],
-      [
-        6,
-        -15
-      ],
-      [
-        1,
-        -25
-      ],
-      [
-        6,
-        -25
-      ],
-      [
-        5,
-        -30
-      ],
-      [
-        15,
-        -39
-      ],
-      [
-        9,
-        -27
-      ],
-      [
-        9,
-        -13
-      ],
-      [
-        6,
-        -15
-      ],
-      [
-        4,
-        -17
-      ],
-      [
-        2,
-        -14
-      ],
-      [
-        -6,
-        -26
-      ],
-      [
-        2,
-        -11
-      ],
-      [
-        5,
-        -12
-      ],
-      [
-        16,
-        -26
-      ],
-      [
-        3,
-        -2
-      ],
-      [
-        15,
-        3
-      ],
-      [
-        8,
-        -5
-      ],
-      [
-        8,
-        -13
-      ],
-      [
-        8,
-        -20
-      ],
-      [
-        6,
-        -21
-      ],
-      [
-        1,
-        -24
-      ],
-      [
-        8,
-        -26
-      ],
-      [
-        2,
-        -24
-      ],
-      [
-        5,
-        -11
-      ],
-      [
-        10,
-        -14
-      ],
-      [
-        10,
-        -8
-      ],
-      [
-        4,
-        -1
-      ],
-      [
-        2,
-        4
-      ],
-      [
-        1,
-        13
-      ],
-      [
-        4,
-        10
-      ],
-      [
-        13,
-        14
-      ],
-      [
-        11,
-        0
-      ],
-      [
-        45,
-        -12
-      ],
-      [
-        3,
-        1
-      ],
-      [
-        2,
-        4
-      ],
-      [
-        7,
-        21
-      ],
-      [
-        6,
-        9
-      ],
-      [
-        10,
-        2
-      ],
-      [
-        27,
-        -5
-      ],
-      [
-        31,
-        3
-      ],
-      [
-        17,
-        -6
-      ],
-      [
-        24,
-        8
-      ],
-      [
-        27,
-        -6
-      ],
-      [
-        4,
-        3
-      ],
-      [
-        1,
-        5
-      ],
-      [
-        -3,
-        8
-      ],
-      [
-        0,
-        16
-      ],
-      [
-        5,
-        19
-      ],
-      [
-        2,
-        16
-      ],
-      [
-        6,
-        9
-      ],
-      [
-        7,
-        5
-      ],
-      [
-        6,
-        -1
-      ],
-      [
-        6,
-        -8
-      ],
-      [
-        7,
-        -15
-      ],
-      [
-        12,
-        -39
-      ],
-      [
-        6,
-        -14
-      ],
-      [
-        8,
-        -12
-      ],
-      [
-        11,
-        -11
-      ]
-    ],
-    [
-      [
-        6392,
-        7231
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        2,
-        -52
-      ],
-      [
-        5,
-        -23
-      ],
-      [
-        6,
-        -17
-      ],
-      [
-        7,
-        -11
-      ],
-      [
-        7,
-        -34
-      ],
-      [
-        9,
-        -57
-      ],
-      [
-        8,
-        -37
-      ],
-      [
-        6,
-        -16
-      ]
-    ],
-    [
-      [
-        6442,
-        6921
-      ],
-      [
-        0,
-        -107
-      ],
-      [
-        0,
-        -121
-      ],
-      [
-        -1,
-        -121
-      ],
-      [
-        0,
-        -120
-      ],
-      [
-        0,
-        -121
-      ],
-      [
-        -1,
-        -121
-      ],
-      [
-        0,
-        -121
-      ],
-      [
-        0,
-        -114
-      ],
-      [
-        0,
-        -1
-      ],
-      [
-        -8,
-        -13
-      ],
-      [
-        -6,
-        -21
-      ],
-      [
-        2,
-        -23
-      ],
-      [
-        -2,
-        -16
-      ],
-      [
-        -6,
-        -10
-      ],
-      [
-        3,
-        -25
-      ],
-      [
-        11,
-        -40
-      ],
-      [
-        6,
-        -40
-      ],
-      [
-        3,
-        -39
-      ],
-      [
-        -2,
-        -28
-      ],
-      [
-        -10,
-        -25
-      ],
-      [
-        -9,
-        -56
-      ],
-      [
-        -8,
-        -22
-      ],
-      [
-        -9,
-        -7
-      ],
-      [
-        -9,
-        -20
-      ],
-      [
-        -7,
-        -34
-      ],
-      [
-        -8,
-        -16
-      ],
-      [
-        -8,
-        1
-      ],
-      [
-        -7,
-        -6
-      ],
-      [
-        -4,
-        -14
-      ],
-      [
-        1,
-        -14
-      ],
-      [
-        5,
-        -14
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        -8,
-        -12
-      ],
-      [
-        0,
-        -6
-      ],
-      [
-        3,
-        -4
-      ],
-      [
-        -1,
-        -6
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        -4,
-        -19
-      ],
-      [
-        1,
-        -31
-      ],
-      [
-        -3,
-        -15
-      ],
-      [
-        -6,
-        -1
-      ],
-      [
-        0,
-        -8
-      ],
-      [
-        9,
-        -35
-      ]
-    ],
-    [
-      [
-        6352,
-        5335
-      ],
-      [
-        -6,
-        -7
-      ],
-      [
-        -9,
-        -29
-      ],
-      [
-        -2,
-        -32
-      ],
-      [
-        5,
-        -35
-      ],
-      [
-        -14,
-        -28
-      ],
-      [
-        -34,
-        -21
-      ],
-      [
-        -19,
-        -19
-      ],
-      [
-        -2,
-        -16
-      ],
-      [
-        3,
-        -25
-      ],
-      [
-        7,
-        -34
-      ],
-      [
-        1,
-        -23
-      ],
-      [
-        -5,
-        -13
-      ],
-      [
-        -24,
-        9
-      ],
-      [
-        -45,
-        30
-      ],
-      [
-        -30,
-        -1
-      ],
-      [
-        -15,
-        -33
-      ],
-      [
-        -6,
-        -24
-      ],
-      [
-        2,
-        -20
-      ]
-    ],
-    [
-      [
-        6159,
-        5014
-      ],
-      [
-        -12,
-        24
-      ],
-      [
-        -8,
-        11
-      ],
-      [
-        -2,
-        0
-      ],
-      [
-        -2,
-        -3
-      ],
-      [
-        0,
-        -8
-      ],
-      [
-        0,
-        -5
-      ],
-      [
-        1,
-        -7
-      ],
-      [
-        0,
-        -4
-      ],
-      [
-        -2,
-        0
-      ],
-      [
-        -9,
-        10
-      ],
-      [
-        -11,
-        26
-      ],
-      [
-        -13,
-        45
-      ],
-      [
-        -2,
-        35
-      ],
-      [
-        7,
-        26
-      ],
-      [
-        0,
-        28
-      ],
-      [
-        -7,
-        29
-      ],
-      [
-        -4,
-        28
-      ],
-      [
-        0,
-        28
-      ],
-      [
-        -17,
-        41
-      ],
-      [
-        -35,
-        55
-      ],
-      [
-        -25,
-        34
-      ],
-      [
-        -16,
-        13
-      ],
-      [
-        -19,
-        28
-      ],
-      [
-        -22,
-        42
-      ],
-      [
-        -12,
-        32
-      ],
-      [
-        -1,
-        23
-      ],
-      [
-        10,
-        59
-      ],
-      [
-        28,
-        130
-      ],
-      [
-        4,
-        16
-      ],
-      [
-        1,
-        5
-      ],
-      [
-        -2,
-        6
-      ],
-      [
-        -2,
-        5
-      ],
-      [
-        -13,
-        15
-      ],
-      [
-        -23,
-        14
-      ],
-      [
-        -21,
-        7
-      ],
-      [
-        -17,
-        -16
-      ],
-      [
-        -15,
-        32
-      ],
-      [
-        -13,
-        78
-      ],
-      [
-        -32,
-        83
-      ],
-      [
-        -50,
-        86
-      ],
-      [
-        -29,
-        60
-      ],
-      [
-        -8,
-        31
-      ],
-      [
-        -7,
-        46
-      ],
-      [
-        -7,
-        63
-      ],
-      [
-        1,
-        51
-      ],
-      [
-        10,
-        62
-      ]
-    ],
-    [
-      [
-        5900,
-        7238
-      ],
-      [
-        80,
-        -2
-      ],
-      [
-        78,
-        -1
-      ],
-      [
-        78,
-        -1
-      ],
-      [
-        78,
-        -1
-      ],
-      [
-        78,
-        -1
-      ],
-      [
-        78,
-        -1
-      ],
-      [
-        22,
-        0
-      ]
-    ],
-    [
-      [
-        6914,
-        6911
-      ],
-      [
-        -1,
-        -131
-      ],
-      [
-        0,
-        -131
-      ],
-      [
-        -1,
-        -131
-      ],
-      [
-        0,
-        -131
-      ],
-      [
-        -1,
-        -132
-      ],
-      [
-        -1,
-        -131
-      ],
-      [
-        0,
-        -131
-      ],
-      [
-        0,
-        -133
-      ]
-    ],
-    [
-      [
-        6910,
-        5860
-      ],
-      [
-        -3,
-        -4
-      ],
-      [
-        -4,
-        -17
-      ],
-      [
-        4,
-        -18
-      ],
-      [
-        0,
-        -14
-      ],
-      [
-        -5,
-        -11
-      ],
-      [
-        2,
-        -8
-      ],
-      [
-        8,
-        -6
-      ],
-      [
-        3,
-        -12
-      ],
-      [
-        -2,
-        -20
-      ],
-      [
-        -17,
-        -20
-      ],
-      [
-        -34,
-        -23
-      ],
-      [
-        -7,
-        -6
-      ],
-      [
-        -6,
-        -3
-      ],
-      [
-        -3,
-        1
-      ],
-      [
-        -4,
-        5
-      ],
-      [
-        -6,
-        9
-      ],
-      [
-        -10,
-        4
-      ],
-      [
-        -18,
-        -3
-      ],
-      [
-        -6,
-        -19
-      ],
-      [
-        3,
-        -35
-      ],
-      [
-        -6,
-        -26
-      ],
-      [
-        -15,
-        -19
-      ],
-      [
-        -11,
-        -25
-      ],
-      [
-        -6,
-        -30
-      ],
-      [
-        -11,
-        -19
-      ],
-      [
-        -14,
-        -6
-      ],
-      [
-        -11,
-        -28
-      ],
-      [
-        -9,
-        -50
-      ],
-      [
-        -10,
-        -31
-      ],
-      [
-        -10,
-        -12
-      ],
-      [
-        -14,
-        3
-      ],
-      [
-        -18,
-        18
-      ],
-      [
-        -11,
-        18
-      ],
-      [
-        -3,
-        19
-      ],
-      [
-        -5,
-        14
-      ],
-      [
-        -5,
-        6
-      ],
-      [
-        -3,
-        0
-      ],
-      [
-        0,
-        -3
-      ],
-      [
-        1,
-        -5
-      ],
-      [
-        -2,
-        -6
-      ],
-      [
-        -11,
-        -2
-      ],
-      [
-        -5,
-        -8
-      ],
-      [
-        2,
-        -13
-      ],
-      [
-        -3,
-        -10
-      ],
-      [
-        -6,
-        -6
-      ],
-      [
-        -4,
-        -13
-      ],
-      [
-        0,
-        -21
-      ],
-      [
-        -5,
-        -18
-      ],
-      [
-        -8,
-        -17
-      ],
-      [
-        -13,
-        5
-      ],
-      [
-        -17,
-        29
-      ],
-      [
-        -17,
-        6
-      ],
-      [
-        -17,
-        -15
-      ],
-      [
-        -13,
-        -21
-      ],
-      [
-        -9,
-        -26
-      ],
-      [
-        -8,
-        -6
-      ],
-      [
-        -12,
-        20
-      ],
-      [
-        -28,
-        27
-      ],
-      [
-        -15,
-        6
-      ],
-      [
-        -11,
-        -7
-      ],
-      [
-        -7,
-        3
-      ],
-      [
-        -3,
-        8
-      ],
-      [
-        -1,
-        3
-      ],
-      [
-        -3,
-        -4
-      ],
-      [
-        0,
-        -24
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        -4,
-        5
-      ],
-      [
-        -2,
-        16
-      ],
-      [
-        -6,
-        6
-      ],
-      [
-        -10,
-        -6
-      ],
-      [
-        -10,
-        2
-      ],
-      [
-        -8,
-        10
-      ],
-      [
-        -3,
-        -1
-      ],
-      [
-        -3,
-        -5
-      ],
-      [
-        1,
-        -18
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        -4,
-        -10
-      ],
-      [
-        -7,
-        -2
-      ],
-      [
-        -8,
-        5
-      ],
-      [
-        -3,
-        -5
-      ]
-    ],
-    [
-      [
-        6442,
-        6921
-      ],
-      [
-        1,
-        -3
-      ],
-      [
-        7,
-        -10
-      ],
-      [
-        5,
-        -6
-      ],
-      [
-        4,
-        -1
-      ],
-      [
-        2,
-        -8
-      ],
-      [
-        10,
-        -6
-      ],
-      [
-        17,
-        -2
-      ],
-      [
-        17,
-        4
-      ],
-      [
-        15,
-        9
-      ],
-      [
-        36,
-        37
-      ]
-    ],
-    [
-      [
-        6556,
-        6935
-      ],
-      [
-        43,
-        -1
-      ],
-      [
-        52,
-        0
-      ],
-      [
-        53,
-        0
-      ],
-      [
-        52,
-        0
-      ],
-      [
-        53,
-        0
-      ],
-      [
-        52,
-        0
-      ],
-      [
-        53,
-        0
-      ],
-      [
-        0,
-        -23
-      ]
-    ],
-    [
-      [
-        5213,
-        5018
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ]
-    ],
-    [
-      [
-        3930,
-        6226
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        31,
-        0
-      ]
-    ],
-    [
-      [
-        5086,
-        6226
-      ],
-      [
-        40,
-        -52
-      ],
-      [
-        11,
-        -1
-      ],
-      [
-        12,
-        9
-      ],
-      [
-        10,
-        -12
-      ],
-      [
-        6,
-        -32
-      ],
-      [
-        -1,
-        -17
-      ],
-      [
-        -8,
-        0
-      ],
-      [
-        -10,
-        -20
-      ],
-      [
-        -13,
-        -38
-      ],
-      [
-        3,
-        -35
-      ],
-      [
-        19,
-        -34
-      ],
-      [
-        12,
-        -33
-      ],
-      [
-        6,
-        -34
-      ],
-      [
-        12,
-        -26
-      ],
-      [
-        27,
-        -28
-      ],
-      [
-        0,
-        -16
-      ],
-      [
-        0,
-        -52
-      ],
-      [
-        0,
-        -53
-      ],
-      [
-        0,
-        -52
-      ],
-      [
-        0,
-        -53
-      ],
-      [
-        0,
-        -52
-      ],
-      [
-        0,
-        -53
-      ],
-      [
-        0,
-        -52
-      ],
-      [
-        0,
-        -53
-      ],
-      [
-        0,
-        -52
-      ],
-      [
-        0,
-        -53
-      ],
-      [
-        0,
-        -52
-      ],
-      [
-        0,
-        -52
-      ],
-      [
-        0,
-        -53
-      ],
-      [
-        1,
-        -52
-      ],
-      [
-        0,
-        -53
-      ],
-      [
-        0,
-        -52
-      ]
-    ],
-    [
-      [
-        6101,
-        4817
-      ],
-      [
-        -12,
-        -1
-      ]
-    ],
-    [
-      [
-        6089,
-        4816
-      ],
-      [
-        0,
-        5
-      ],
-      [
-        1,
-        11
-      ],
-      [
-        1,
-        5
-      ],
-      [
-        2,
-        1
-      ],
-      [
-        3,
-        0
-      ],
-      [
-        4,
-        -11
-      ],
-      [
-        1,
-        -10
-      ]
-    ],
-    [
-      [
-        7292,
-        5600
-      ],
-      [
-        4,
-        -11
-      ],
-      [
-        2,
-        -59
-      ],
-      [
-        -1,
-        -12
-      ],
-      [
-        -6,
-        -25
-      ],
-      [
-        0,
-        -13
-      ],
-      [
-        5,
-        -20
-      ],
-      [
-        19,
-        -47
-      ],
-      [
-        2,
-        -18
-      ],
-      [
-        7,
-        -18
-      ],
-      [
-        6,
-        -26
-      ],
-      [
-        20,
-        -57
-      ],
-      [
-        30,
-        -47
-      ],
-      [
-        24,
-        -12
-      ]
-    ],
-    [
-      [
-        7404,
-        5235
-      ],
-      [
-        -65,
-        -98
-      ],
-      [
-        -30,
-        -36
-      ],
-      [
-        -29,
-        -28
-      ],
-      [
-        -2,
-        -5
-      ],
-      [
-        -6,
-        -31
-      ],
-      [
-        -18,
-        -28
-      ],
-      [
-        -11,
-        -29
-      ],
-      [
-        -25,
-        -25
-      ],
-      [
-        -19,
-        -33
-      ],
-      [
-        -46,
-        -33
-      ],
-      [
-        -26,
-        -12
-      ],
-      [
-        -17,
-        -19
-      ]
-    ],
-    [
-      [
-        7110,
-        4858
-      ],
-      [
-        -2,
-        -1
-      ],
-      [
-        -1,
-        -1
-      ],
-      [
-        -2,
-        -1
-      ],
-      [
-        -1,
-        -1
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        -2,
-        -1
-      ],
-      [
-        -1,
-        -1
-      ],
-      [
-        -1,
-        -1
-      ],
-      [
-        -60,
-        4
-      ],
-      [
-        -61,
-        4
-      ],
-      [
-        -60,
-        4
-      ],
-      [
-        -60,
-        4
-      ],
-      [
-        -60,
-        3
-      ],
-      [
-        -60,
-        4
-      ],
-      [
-        -60,
-        4
-      ],
-      [
-        -60,
-        4
-      ],
-      [
-        -58,
-        -2
-      ],
-      [
-        -58,
-        -2
-      ],
-      [
-        -57,
-        -2
-      ],
-      [
-        -58,
-        -2
-      ],
-      [
-        -5,
-        12
-      ],
-      [
-        -15,
-        3
-      ],
-      [
-        -24,
-        4
-      ],
-      [
-        -1,
-        1
-      ],
-      [
-        7,
-        -42
-      ],
-      [
-        0,
-        -36
-      ],
-      [
-        -27,
-        0
-      ],
-      [
-        -30,
-        0
-      ],
-      [
-        -30,
-        0
-      ],
-      [
-        -30,
-        0
-      ],
-      [
-        -30,
-        0
-      ],
-      [
-        -30,
-        0
-      ],
-      [
-        -30,
-        0
-      ],
-      [
-        -34,
-        0
-      ]
-    ],
-    [
-      [
-        6108,
-        4816
-      ],
-      [
-        9,
-        35
-      ],
-      [
-        8,
-        10
-      ],
-      [
-        4,
-        2
-      ],
-      [
-        8,
-        -7
-      ],
-      [
-        4,
-        -2
-      ],
-      [
-        10,
-        12
-      ],
-      [
-        8,
-        37
-      ],
-      [
-        4,
-        38
-      ],
-      [
-        2,
-        41
-      ],
-      [
-        -6,
-        32
-      ]
-    ],
-    [
-      [
-        6910,
-        5860
-      ],
-      [
-        9,
-        13
-      ],
-      [
-        10,
-        2
-      ],
-      [
-        9,
-        -14
-      ],
-      [
-        11,
-        -4
-      ],
-      [
-        15,
-        7
-      ],
-      [
-        13,
-        -5
-      ],
-      [
-        13,
-        -16
-      ],
-      [
-        12,
-        -30
-      ],
-      [
-        11,
-        -45
-      ],
-      [
-        19,
-        -26
-      ],
-      [
-        29,
-        -10
-      ],
-      [
-        21,
-        -18
-      ],
-      [
-        13,
-        -24
-      ],
-      [
-        11,
-        -8
-      ],
-      [
-        12,
-        13
-      ],
-      [
-        14,
-        7
-      ],
-      [
-        13,
-        -8
-      ],
-      [
-        18,
-        -21
-      ],
-      [
-        27,
-        4
-      ],
-      [
-        35,
-        31
-      ],
-      [
-        21,
-        -2
-      ],
-      [
-        6,
-        -33
-      ],
-      [
-        15,
-        -35
-      ],
-      [
-        24,
-        -37
-      ],
-      [
-        1,
-        -1
-      ]
-    ],
-    [
-      [
-        5702,
-        1997
-      ],
-      [
-        -7,
-        -6
-      ],
-      [
-        -28,
-        35
-      ],
-      [
-        -2,
-        15
-      ],
-      [
-        14,
-        14
-      ],
-      [
-        9,
-        -2
-      ],
-      [
-        13,
-        -17
-      ],
-      [
-        5,
-        -5
-      ],
-      [
-        3,
-        -7
-      ],
-      [
-        -2,
-        -12
-      ],
-      [
-        -5,
-        -15
-      ]
-    ],
-    [
-      [
-        6205,
-        2082
-      ],
-      [
-        -9,
-        -21
-      ],
-      [
-        0,
-        8
-      ],
-      [
-        7,
-        21
-      ],
-      [
-        5,
-        9
-      ],
-      [
-        -3,
-        -17
-      ]
-    ],
-    [
-      [
-        6216,
-        2121
-      ],
-      [
-        -5,
-        -13
-      ],
-      [
-        5,
-        61
-      ],
-      [
-        -7,
-        52
-      ],
-      [
-        7,
-        -23
-      ],
-      [
-        2,
-        -27
-      ],
-      [
-        -2,
-        -50
-      ]
-    ],
-    [
-      [
-        6147,
-        2232
-      ],
-      [
-        1,
-        -19
-      ],
-      [
-        -9,
-        9
-      ],
-      [
-        -12,
-        1
-      ],
-      [
-        5,
-        7
-      ],
-      [
-        4,
-        6
-      ],
-      [
-        2,
-        7
-      ],
-      [
-        16,
-        23
-      ],
-      [
-        -5,
-        -17
-      ],
-      [
-        -2,
-        -17
-      ]
-    ],
-    [
-      [
-        6096,
-        2276
-      ],
-      [
-        -12,
-        -11
-      ],
-      [
-        -63,
-        41
-      ],
-      [
-        -16,
-        34
-      ],
-      [
-        -14,
-        7
-      ],
-      [
-        -17,
-        4
-      ],
-      [
-        -19,
-        -41
-      ],
-      [
-        -14,
-        -55
-      ],
-      [
-        22,
-        -31
-      ],
-      [
-        19,
-        -14
-      ],
-      [
-        32,
-        12
-      ],
-      [
-        17,
-        27
-      ],
-      [
-        14,
-        -1
-      ],
-      [
-        7,
-        5
-      ],
-      [
-        6,
-        14
-      ],
-      [
-        12,
-        -11
-      ],
-      [
-        1,
-        -11
-      ],
-      [
-        -9,
-        -15
-      ],
-      [
-        -11,
-        -14
-      ],
-      [
-        -6,
-        -15
-      ],
-      [
-        12,
-        -31
-      ],
-      [
-        19,
-        -11
-      ],
-      [
-        8,
-        5
-      ],
-      [
-        4,
-        35
-      ],
-      [
-        12,
-        22
-      ],
-      [
-        16,
-        -4
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        2,
-        -13
-      ],
-      [
-        8,
-        -23
-      ],
-      [
-        -1,
-        -32
-      ],
-      [
-        1,
-        -8
-      ],
-      [
-        -17,
-        -15
-      ],
-      [
-        -13,
-        -5
-      ],
-      [
-        -11,
-        -19
-      ],
-      [
-        6,
-        -11
-      ],
-      [
-        -11,
-        -9
-      ],
-      [
-        -7,
-        4
-      ],
-      [
-        -3,
-        -4
-      ],
-      [
-        -2,
-        -12
-      ],
-      [
-        -5,
-        -10
-      ],
-      [
-        8,
-        -33
-      ],
-      [
-        16,
-        -21
-      ],
-      [
-        12,
-        -27
-      ],
-      [
-        46,
-        -35
-      ],
-      [
-        12,
-        1
-      ],
-      [
-        11,
-        -35
-      ],
-      [
-        9,
-        -12
-      ],
-      [
-        8,
-        -6
-      ],
-      [
-        -1,
-        -24
-      ],
-      [
-        -15,
-        -18
-      ],
-      [
-        -4,
-        -21
-      ],
-      [
-        -4,
-        -12
-      ],
-      [
-        -7,
-        15
-      ],
-      [
-        -7,
-        11
-      ],
-      [
-        -16,
-        -33
-      ],
-      [
-        -8,
-        -7
-      ],
-      [
-        4,
-        36
-      ],
-      [
-        -7,
-        14
-      ],
-      [
-        -9,
-        35
-      ],
-      [
-        -14,
-        23
-      ],
-      [
-        -9,
-        7
-      ],
-      [
-        -8,
-        14
-      ],
-      [
-        -9,
-        6
-      ],
-      [
-        -7,
-        -2
-      ],
-      [
-        -13,
-        8
-      ],
-      [
-        -1,
-        20
-      ],
-      [
-        -4,
-        14
-      ],
-      [
-        -10,
-        17
-      ],
-      [
-        -49,
-        32
-      ],
-      [
-        0,
-        -14
-      ],
-      [
-        3,
-        -9
-      ],
-      [
-        7,
-        -7
-      ],
-      [
-        9,
-        -13
-      ],
-      [
-        -1,
-        -38
-      ],
-      [
-        -3,
-        -16
-      ],
-      [
-        -2,
-        -23
-      ],
-      [
-        -3,
-        -23
-      ],
-      [
-        -6,
-        -19
-      ],
-      [
-        -13,
-        -12
-      ],
-      [
-        -6,
-        10
-      ],
-      [
-        -10,
-        50
-      ],
-      [
-        -13,
-        16
-      ],
-      [
-        -21,
-        2
-      ],
-      [
-        -15,
-        -11
-      ],
-      [
-        -16,
-        -49
-      ],
-      [
-        -12,
-        -8
-      ],
-      [
-        -44,
-        25
-      ],
-      [
-        -50,
-        39
-      ],
-      [
-        1,
-        12
-      ],
-      [
-        8,
-        5
-      ],
-      [
-        15,
-        -6
-      ],
-      [
-        -1,
-        14
-      ],
-      [
-        -15,
-        42
-      ],
-      [
-        -3,
-        20
-      ],
-      [
-        2,
-        24
-      ],
-      [
-        -5,
-        -1
-      ],
-      [
-        -9,
-        -20
-      ],
-      [
-        -32,
-        17
-      ],
-      [
-        -8,
-        20
-      ],
-      [
-        -19,
-        57
-      ],
-      [
-        -26,
-        2
-      ],
-      [
-        -12,
-        34
-      ],
-      [
-        -22,
-        -14
-      ],
-      [
-        -11,
-        -16
-      ],
-      [
-        -9,
-        -25
-      ],
-      [
-        3,
-        -13
-      ],
-      [
-        10,
-        -20
-      ],
-      [
-        -4,
-        -10
-      ],
-      [
-        -31,
-        -14
-      ],
-      [
-        -71,
-        16
-      ],
-      [
-        -21,
-        15
-      ],
-      [
-        -28,
-        32
-      ],
-      [
-        -39,
-        26
-      ],
-      [
-        -18,
-        4
-      ],
-      [
-        -18,
-        -5
-      ],
-      [
-        -53,
-        -3
-      ],
-      [
-        -13,
-        -7
-      ],
-      [
-        -10,
-        -11
-      ],
-      [
-        -7,
-        13
-      ],
-      [
-        -3,
-        22
-      ],
-      [
-        6,
-        3
-      ],
-      [
-        7,
-        13
-      ],
-      [
-        6,
-        25
-      ],
-      [
-        1,
-        16
-      ],
-      [
-        -5,
-        10
-      ]
-    ],
-    [
-      [
-        5355,
-        2189
-      ],
-      [
-        12,
-        40
-      ],
-      [
-        3,
-        14
-      ],
-      [
-        -2,
-        69
-      ],
-      [
-        -5,
-        25
-      ],
-      [
-        1,
-        14
-      ],
-      [
-        5,
-        38
-      ],
-      [
-        -1,
-        34
-      ],
-      [
-        10,
-        41
-      ],
-      [
-        7,
-        22
-      ],
-      [
-        8,
-        44
-      ],
-      [
-        1,
-        28
-      ],
-      [
-        4,
-        22
-      ],
-      [
-        -3,
-        23
-      ],
-      [
-        6,
-        16
-      ],
-      [
-        -4,
-        24
-      ],
-      [
-        -1,
-        30
-      ],
-      [
-        -6,
-        12
-      ],
-      [
-        -12,
-        46
-      ],
-      [
-        0,
-        20
-      ],
-      [
-        -13,
-        42
-      ],
-      [
-        0,
-        15
-      ],
-      [
-        -12,
-        22
-      ],
-      [
-        -2,
-        14
-      ],
-      [
-        -1,
-        59
-      ],
-      [
-        -4,
-        17
-      ],
-      [
-        -10,
-        34
-      ],
-      [
-        -24,
-        49
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        1,
-        51
-      ],
-      [
-        0,
-        51
-      ]
-    ],
-    [
-      [
-        5813,
-        3413
-      ],
-      [
-        1,
-        -20
-      ],
-      [
-        9,
-        -12
-      ],
-      [
-        0,
-        -21
-      ],
-      [
-        -7,
-        -31
-      ],
-      [
-        0,
-        -21
-      ],
-      [
-        7,
-        -12
-      ],
-      [
-        0,
-        -13
-      ],
-      [
-        -8,
-        -13
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        6,
-        -15
-      ],
-      [
-        3,
-        -18
-      ],
-      [
-        -1,
-        -21
-      ],
-      [
-        8,
-        -27
-      ],
-      [
-        12,
-        -17
-      ],
-      [
-        8,
-        -20
-      ],
-      [
-        1,
-        -11
-      ],
-      [
-        0,
-        -11
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        -9,
-        -22
-      ],
-      [
-        -8,
-        -16
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        -2,
-        -11
-      ],
-      [
-        -1,
-        -23
-      ],
-      [
-        -11,
-        -30
-      ],
-      [
-        -22,
-        -35
-      ],
-      [
-        -15,
-        -45
-      ],
-      [
-        -7,
-        -53
-      ],
-      [
-        -8,
-        -35
-      ],
-      [
-        -8,
-        -14
-      ],
-      [
-        -4,
-        -28
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        -5,
-        -23
-      ],
-      [
-        -11,
-        -5
-      ],
-      [
-        -2,
-        -24
-      ],
-      [
-        6,
-        -43
-      ],
-      [
-        -2,
-        -18
-      ],
-      [
-        -8,
-        -14
-      ],
-      [
-        0,
-        -12
-      ],
-      [
-        41,
-        0
-      ],
-      [
-        42,
-        0
-      ],
-      [
-        41,
-        0
-      ],
-      [
-        42,
-        0
-      ],
-      [
-        42,
-        0
-      ],
-      [
-        41,
-        0
-      ],
-      [
-        42,
-        0
-      ],
-      [
-        41,
-        0
-      ],
-      [
-        -5,
-        -46
-      ],
-      [
-        -12,
-        -63
-      ],
-      [
-        0,
-        -16
-      ],
-      [
-        3,
-        -20
-      ],
-      [
-        0,
-        -12
-      ],
-      [
-        4,
-        -17
-      ],
-      [
-        10,
-        -17
-      ],
-      [
-        9,
-        -26
-      ],
-      [
-        8,
-        -45
-      ],
-      [
-        2,
-        -22
-      ],
-      [
-        6,
-        -29
-      ],
-      [
-        4,
-        -6
-      ],
-      [
-        4,
-        -3
-      ],
-      [
-        5,
-        -3
-      ]
-    ],
-    [
-      [
-        9481,
-        6735
-      ],
-      [
-        -13,
-        -6
-      ],
-      [
-        -31,
-        15
-      ],
-      [
-        25,
-        12
-      ],
-      [
-        4,
-        4
-      ],
-      [
-        4,
-        19
-      ],
-      [
-        0,
-        9
-      ],
-      [
-        10,
-        -40
-      ],
-      [
-        1,
-        -13
-      ]
-    ],
-    [
-      [
-        9389,
-        6780
-      ],
-      [
-        -48,
-        -20
-      ],
-      [
-        -8,
-        13
-      ],
-      [
-        12,
-        6
-      ],
-      [
-        15,
-        30
-      ],
-      [
-        10,
-        3
-      ],
-      [
-        16,
-        -17
-      ],
-      [
-        3,
-        -15
-      ]
-    ],
-    [
-      [
-        9263,
-        6913
-      ],
-      [
-        -6,
-        18
-      ],
-      [
-        -6,
-        9
-      ],
-      [
-        -6,
-        10
-      ],
-      [
-        0,
-        15
-      ],
-      [
-        0,
-        22
-      ],
-      [
-        -7,
-        5
-      ],
-      [
-        -1,
-        28
-      ],
-      [
-        0,
-        18
-      ],
-      [
-        -13,
-        -1
-      ],
-      [
-        -11,
-        0
-      ],
-      [
-        -17,
-        0
-      ],
-      [
-        -18,
-        -1
-      ],
-      [
-        -13,
-        0
-      ]
-    ],
-    [
-      [
-        8874,
-        7053
-      ],
-      [
-        -4,
-        10
-      ],
-      [
-        5,
-        34
-      ],
-      [
-        6,
-        34
-      ],
-      [
-        5,
-        34
-      ],
-      [
-        6,
-        34
-      ],
-      [
-        5,
-        33
-      ],
-      [
-        6,
-        34
-      ],
-      [
-        5,
-        34
-      ],
-      [
-        6,
-        34
-      ]
-    ],
-    [
-      [
-        8914,
-        7334
-      ],
-      [
-        17,
-        -1
-      ],
-      [
-        17,
-        -1
-      ],
-      [
-        17,
-        -1
-      ],
-      [
-        17,
-        -2
-      ],
-      [
-        17,
-        -1
-      ],
-      [
-        17,
-        -1
-      ],
-      [
-        17,
-        -1
-      ],
-      [
-        17,
-        -1
-      ]
-    ],
-    [
-      [
-        9050,
-        7325
-      ],
-      [
-        24,
-        -1
-      ],
-      [
-        25,
-        -2
-      ],
-      [
-        25,
-        -1
-      ],
-      [
-        24,
-        -2
-      ],
-      [
-        25,
-        -1
-      ],
-      [
-        25,
-        -1
-      ],
-      [
-        24,
-        -2
-      ],
-      [
-        25,
-        -1
-      ],
-      [
-        15,
-        11
-      ],
-      [
-        18,
-        31
-      ],
-      [
-        11,
-        7
-      ],
-      [
-        17,
-        19
-      ],
-      [
-        9,
-        4
-      ],
-      [
-        20,
-        -2
-      ]
-    ],
-    [
-      [
-        9337,
-        7384
-      ],
-      [
-        -4,
-        -21
-      ],
-      [
-        5,
-        -20
-      ],
-      [
-        4,
-        -22
-      ],
-      [
-        8,
-        -21
-      ],
-      [
-        6,
-        -1
-      ],
-      [
-        8,
-        3
-      ],
-      [
-        5,
-        -1
-      ],
-      [
-        3,
-        -8
-      ],
-      [
-        -1,
-        -11
-      ],
-      [
-        -8,
-        -3
-      ],
-      [
-        -16,
-        -18
-      ],
-      [
-        -14,
-        -8
-      ],
-      [
-        -7,
-        -22
-      ],
-      [
-        -10,
-        -26
-      ],
-      [
-        -20,
-        -41
-      ],
-      [
-        8,
-        -12
-      ],
-      [
-        31,
-        -14
-      ],
-      [
-        14,
-        -15
-      ],
-      [
-        21,
-        -76
-      ],
-      [
-        -5,
-        -7
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        19,
-        -20
-      ],
-      [
-        6,
-        -54
-      ],
-      [
-        15,
-        -19
-      ],
-      [
-        23,
-        -11
-      ],
-      [
-        28,
-        16
-      ],
-      [
-        23,
-        23
-      ],
-      [
-        -1,
-        19
-      ],
-      [
-        -15,
-        43
-      ],
-      [
-        -3,
-        20
-      ],
-      [
-        -11,
-        13
-      ],
-      [
-        -4,
-        -11
-      ],
-      [
-        -7,
-        15
-      ],
-      [
-        -1,
-        8
-      ],
-      [
-        7,
-        4
-      ],
-      [
-        7,
-        -2
-      ],
-      [
-        9,
-        -8
-      ],
-      [
-        23,
-        -47
-      ],
-      [
-        6,
-        -61
-      ],
-      [
-        2,
-        -40
-      ],
-      [
-        -3,
-        -13
-      ],
-      [
-        -7,
-        3
-      ],
-      [
-        -12,
-        -3
-      ],
-      [
-        -60,
-        -20
-      ],
-      [
-        -13,
-        -18
-      ],
-      [
-        -31,
-        -20
-      ],
-      [
-        -2,
-        10
-      ],
-      [
-        3,
-        20
-      ],
-      [
-        -2,
-        41
-      ],
-      [
-        -6,
-        2
-      ],
-      [
-        -48,
-        -67
-      ],
-      [
-        -18,
-        -4
-      ],
-      [
-        -15,
-        -20
-      ],
-      [
-        -4,
-        11
-      ],
-      [
-        -3,
-        50
-      ],
-      [
-        10,
-        43
-      ],
-      [
-        -5,
-        -1
-      ],
-      [
-        -10,
-        -15
-      ]
-    ],
-    [
-      [
-        8572,
-        5436
-      ],
-      [
-        -5,
-        -1
-      ]
-    ],
-    [
-      [
-        8567,
-        5435
-      ],
-      [
-        5,
-        14
-      ],
-      [
-        15,
-        68
-      ],
-      [
-        7,
-        23
-      ],
-      [
-        -7,
-        -47
-      ],
-      [
-        -11,
-        -44
-      ],
-      [
-        -4,
-        -13
-      ]
-    ],
-    [
-      [
-        8604,
-        5603
-      ],
-      [
-        0,
-        -11
-      ],
-      [
-        -2,
-        -18
-      ],
-      [
-        -4,
-        -7
-      ],
-      [
-        0,
-        18
-      ],
-      [
-        -3,
-        6
-      ],
-      [
-        -4,
-        -7
-      ],
-      [
-        -3,
-        -9
-      ],
-      [
-        -2,
-        -35
-      ],
-      [
-        -3,
-        -17
-      ],
-      [
-        -11,
-        -5
-      ],
-      [
-        -12,
-        -46
-      ],
-      [
-        -10,
-        -26
-      ],
-      [
-        -4,
-        -16
-      ]
-    ],
-    [
-      [
-        8546,
-        5430
-      ],
-      [
-        -16,
-        -4
-      ],
-      [
-        -26,
-        -6
-      ],
-      [
-        -7,
-        -19
-      ]
-    ],
-    [
-      [
-        8497,
-        5401
-      ],
-      [
-        -13,
-        8
-      ],
-      [
-        -20,
-        0
-      ],
-      [
-        3,
-        24
-      ],
-      [
-        6,
-        22
-      ],
-      [
-        -10,
-        21
-      ],
-      [
-        -6,
-        3
-      ],
-      [
-        -7,
-        9
-      ],
-      [
-        8,
-        18
-      ],
-      [
-        3,
-        19
-      ],
-      [
-        -2,
-        23
-      ],
-      [
-        3,
-        18
-      ],
-      [
-        -5,
-        -3
-      ],
-      [
-        -8,
-        -18
-      ],
-      [
-        -6,
-        -8
-      ],
-      [
-        -3,
-        17
-      ],
-      [
-        -3,
-        -4
-      ],
-      [
-        -3,
-        -11
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        -11,
-        15
-      ],
-      [
-        -17,
-        17
-      ],
-      [
-        -9,
-        31
-      ],
-      [
-        -5,
-        23
-      ],
-      [
-        5,
-        43
-      ],
-      [
-        11,
-        7
-      ],
-      [
-        15,
-        -7
-      ],
-      [
-        20,
-        0
-      ],
-      [
-        -3,
-        10
-      ],
-      [
-        -7,
-        -2
-      ],
-      [
-        -21,
-        35
-      ],
-      [
-        -6,
-        20
-      ],
-      [
-        -11,
-        6
-      ],
-      [
-        -6,
-        -20
-      ],
-      [
-        -5,
-        -5
-      ],
-      [
-        7,
-        43
-      ],
-      [
-        9,
-        2
-      ],
-      [
-        14,
-        12
-      ],
-      [
-        -4,
-        26
-      ],
-      [
-        -9,
-        11
-      ],
-      [
-        -16,
-        -14
-      ],
-      [
-        1,
-        18
-      ],
-      [
-        3,
-        22
-      ],
-      [
-        11,
-        0
-      ],
-      [
-        11,
-        -7
-      ],
-      [
-        8,
-        37
-      ],
-      [
-        1,
-        16
-      ],
-      [
-        -15,
-        -24
-      ],
-      [
-        -3,
-        52
-      ],
-      [
-        14,
-        50
-      ],
-      [
-        14,
-        21
-      ],
-      [
-        17,
-        0
-      ],
-      [
-        17,
-        3
-      ],
-      [
-        -11,
-        9
-      ],
-      [
-        -11,
-        5
-      ],
-      [
-        9,
-        20
-      ],
-      [
-        7,
-        3
-      ],
-      [
-        7,
-        17
-      ],
-      [
-        -17,
-        -2
-      ],
-      [
-        2,
-        32
-      ],
-      [
-        -8,
-        -6
-      ],
-      [
-        -10,
-        -3
-      ],
-      [
-        -4,
-        -14
-      ],
-      [
-        1,
-        -23
-      ],
-      [
-        -3,
-        -15
-      ],
-      [
-        -8,
-        -12
-      ],
-      [
-        -13,
-        -9
-      ],
-      [
-        -1,
-        16
-      ],
-      [
-        -4,
-        7
-      ],
-      [
-        -2,
-        -34
-      ],
-      [
-        -3,
-        -12
-      ],
-      [
-        -10,
-        32
-      ],
-      [
-        -2,
-        -6
-      ],
-      [
-        0,
-        -9
-      ],
-      [
-        -2,
-        -17
-      ],
-      [
-        -9,
-        -8
-      ],
-      [
-        1,
-        -20
-      ],
-      [
-        -3,
-        -12
-      ],
-      [
-        -26,
-        18
-      ],
-      [
-        -1,
-        -6
-      ],
-      [
-        15,
-        -38
-      ],
-      [
-        11,
-        -14
-      ],
-      [
-        1,
-        -21
-      ],
-      [
-        -9,
-        -17
-      ],
-      [
-        -13,
-        15
-      ],
-      [
-        -2,
-        -1
-      ],
-      [
-        7,
-        -26
-      ],
-      [
-        4,
-        -22
-      ],
-      [
-        -4,
-        -19
-      ],
-      [
-        0,
-        -23
-      ],
-      [
-        -1,
-        -22
-      ],
-      [
-        -2,
-        -18
-      ],
-      [
-        6,
-        -85
-      ],
-      [
-        7,
-        -23
-      ],
-      [
-        8,
-        -22
-      ],
-      [
-        3,
-        -20
-      ],
-      [
-        -7,
-        -3
-      ],
-      [
-        -13,
-        17
-      ],
-      [
-        -10,
-        12
-      ],
-      [
-        -13,
-        42
-      ],
-      [
-        -2,
-        16
-      ],
-      [
-        -4,
-        13
-      ],
-      [
-        2,
-        -30
-      ],
-      [
-        5,
-        -33
-      ],
-      [
-        40,
-        -75
-      ],
-      [
-        7,
-        -29
-      ],
-      [
-        6,
-        -22
-      ],
-      [
-        -1,
-        -22
-      ],
-      [
-        -11,
-        15
-      ],
-      [
-        -9,
-        20
-      ],
-      [
-        -24,
-        22
-      ],
-      [
-        -30,
-        14
-      ],
-      [
-        -18,
-        51
-      ],
-      [
-        0,
-        -21
-      ],
-      [
-        -3,
-        -18
-      ],
-      [
-        -11,
-        22
-      ],
-      [
-        -6,
-        19
-      ],
-      [
-        -3,
-        20
-      ],
-      [
-        -13,
-        -1
-      ],
-      [
-        -13,
-        -18
-      ],
-      [
-        -14,
-        4
-      ],
-      [
-        -1,
-        35
-      ],
-      [
-        3,
-        19
-      ],
-      [
-        15,
-        44
-      ],
-      [
-        14,
-        22
-      ],
-      [
-        6,
-        29
-      ],
-      [
-        -2,
-        45
-      ]
-    ],
-    [
-      [
-        8243,
-        5800
-      ],
-      [
-        -11,
-        10
-      ],
-      [
-        -20,
-        34
-      ],
-      [
-        -31,
-        24
-      ],
-      [
-        -4,
-        12
-      ],
-      [
-        0,
-        13
-      ],
-      [
-        5,
-        19
-      ],
-      [
-        -10,
-        18
-      ],
-      [
-        -23,
-        17
-      ],
-      [
-        -10,
-        15
-      ]
-    ],
-    [
-      [
-        8139,
-        5962
-      ],
-      [
-        -3,
-        3
-      ],
-      [
-        -1,
-        19
-      ],
-      [
-        -3,
-        12
-      ],
-      [
-        -5,
-        5
-      ],
-      [
-        -1,
-        8
-      ],
-      [
-        3,
-        10
-      ],
-      [
-        -3,
-        12
-      ],
-      [
-        -9,
-        13
-      ],
-      [
-        -4,
-        11
-      ],
-      [
-        3,
-        9
-      ],
-      [
-        -4,
-        5
-      ],
-      [
-        -13,
-        -1
-      ],
-      [
-        -12,
-        9
-      ],
-      [
-        -13,
-        19
-      ],
-      [
-        -14,
-        3
-      ],
-      [
-        -25,
-        -19
-      ],
-      [
-        -14,
-        -4
-      ],
-      [
-        -6,
-        -11
-      ],
-      [
-        -3,
-        -18
-      ],
-      [
-        -7,
-        -9
-      ],
-      [
-        -13,
-        -1
-      ],
-      [
-        -2,
-        1
-      ],
-      [
-        -16,
-        6
-      ],
-      [
-        -11,
-        11
-      ],
-      [
-        -2,
-        5
-      ],
-      [
-        1,
-        10
-      ],
-      [
-        -2,
-        4
-      ],
-      [
-        -3,
-        1
-      ],
-      [
-        -4,
-        -6
-      ],
-      [
-        -3,
-        -17
-      ],
-      [
-        -27,
-        -47
-      ],
-      [
-        -13,
-        10
-      ],
-      [
-        -5,
-        -1
-      ],
-      [
-        -38,
-        -66
-      ],
-      [
-        -11,
-        -10
-      ],
-      [
-        -22,
-        -30
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        0,
-        52
-      ],
-      [
-        1,
-        51
-      ],
-      [
-        0,
-        52
-      ]
-    ],
-    [
-      [
-        7835,
-        6114
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ]
-    ],
-    [
-      [
-        9716,
-        7915
-      ],
-      [
-        -7,
-        -8
-      ],
-      [
-        -7,
-        3
-      ],
-      [
-        0,
-        20
-      ],
-      [
-        2,
-        7
-      ],
-      [
-        2,
-        3
-      ],
-      [
-        4,
-        -6
-      ],
-      [
-        6,
-        -19
-      ]
-    ],
-    [
-      [
-        9791,
-        7970
-      ],
-      [
-        -10,
-        -8
-      ],
-      [
-        -11,
-        4
-      ],
-      [
-        0,
-        -21
-      ],
-      [
-        -1,
-        -8
-      ],
-      [
-        -12,
-        11
-      ],
-      [
-        -5,
-        7
-      ],
-      [
-        1,
-        28
-      ],
-      [
-        10,
-        27
-      ],
-      [
-        9,
-        10
-      ],
-      [
-        10,
-        -7
-      ],
-      [
-        8,
-        -30
-      ],
-      [
-        1,
-        -13
-      ]
-    ],
-    [
-      [
-        9350,
-        7462
-      ],
-      [
-        -14,
-        38
-      ],
-      [
-        -3,
-        30
-      ],
-      [
-        -15,
-        36
-      ],
-      [
-        -6,
-        24
-      ],
-      [
-        -3,
-        28
-      ],
-      [
-        1,
-        30
-      ],
-      [
-        -1,
-        45
-      ],
-      [
-        -1,
-        44
-      ],
-      [
-        -2,
-        45
-      ],
-      [
-        -1,
-        45
-      ],
-      [
-        -1,
-        44
-      ],
-      [
-        -2,
-        45
-      ],
-      [
-        -1,
-        44
-      ],
-      [
-        -1,
-        45
-      ],
-      [
-        -2,
-        45
-      ],
-      [
-        -1,
-        44
-      ],
-      [
-        -1,
-        45
-      ],
-      [
-        -2,
-        45
-      ],
-      [
-        -1,
-        44
-      ],
-      [
-        -1,
-        45
-      ],
-      [
-        -2,
-        45
-      ],
-      [
-        -1,
-        40
-      ]
-    ],
-    [
-      [
-        9289,
-        8358
-      ],
-      [
-        4,
-        6
-      ],
-      [
-        11,
-        11
-      ],
-      [
-        7,
-        -2
-      ],
-      [
-        6,
-        -17
-      ],
-      [
-        5,
-        -11
-      ],
-      [
-        5,
-        3
-      ],
-      [
-        5,
-        16
-      ],
-      [
-        0,
-        23
-      ],
-      [
-        7,
-        15
-      ],
-      [
-        8,
-        3
-      ],
-      [
-        7,
-        -1
-      ],
-      [
-        4,
-        8
-      ],
-      [
-        -1,
-        11
-      ],
-      [
-        -2,
-        17
-      ],
-      [
-        0,
-        21
-      ],
-      [
-        19,
-        38
-      ],
-      [
-        22,
-        25
-      ],
-      [
-        8,
-        12
-      ],
-      [
-        2,
-        26
-      ],
-      [
-        13,
-        27
-      ],
-      [
-        7,
-        15
-      ],
-      [
-        1,
-        13
-      ],
-      [
-        -3,
-        17
-      ],
-      [
-        0,
-        31
-      ],
-      [
-        5,
-        37
-      ],
-      [
-        5,
-        41
-      ],
-      [
-        12,
-        37
-      ],
-      [
-        19,
-        40
-      ],
-      [
-        5,
-        52
-      ],
-      [
-        6,
-        55
-      ],
-      [
-        23,
-        54
-      ],
-      [
-        27,
-        62
-      ],
-      [
-        15,
-        34
-      ],
-      [
-        28,
-        64
-      ],
-      [
-        19,
-        45
-      ],
-      [
-        10,
-        21
-      ],
-      [
-        10,
-        24
-      ],
-      [
-        17,
-        -7
-      ],
-      [
-        17,
-        -8
-      ],
-      [
-        -3,
-        -35
-      ],
-      [
-        2,
-        -18
-      ],
-      [
-        1,
-        -8
-      ],
-      [
-        8,
-        -15
-      ],
-      [
-        11,
-        -10
-      ],
-      [
-        9,
-        -4
-      ],
-      [
-        10,
-        1
-      ],
-      [
-        28,
-        20
-      ],
-      [
-        32,
-        13
-      ],
-      [
-        18,
-        12
-      ],
-      [
-        4,
-        11
-      ],
-      [
-        8,
-        4
-      ],
-      [
-        13,
-        -3
-      ],
-      [
-        24,
-        -29
-      ],
-      [
-        28,
-        -43
-      ],
-      [
-        22,
-        -34
-      ],
-      [
-        1,
-        -59
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        1,
-        -66
-      ],
-      [
-        0,
-        -47
-      ],
-      [
-        0,
-        -65
-      ],
-      [
-        1,
-        -52
-      ],
-      [
-        1,
-        -67
-      ],
-      [
-        0,
-        -36
-      ],
-      [
-        3,
-        -11
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        0,
-        -5
-      ],
-      [
-        2,
-        -8
-      ],
-      [
-        -1,
-        -9
-      ],
-      [
-        -2,
-        -9
-      ],
-      [
-        -2,
-        -11
-      ],
-      [
-        0,
-        -6
-      ],
-      [
-        -11,
-        -6
-      ],
-      [
-        15,
-        -28
-      ],
-      [
-        26,
-        -27
-      ],
-      [
-        20,
-        -5
-      ],
-      [
-        11,
-        7
-      ],
-      [
-        3,
-        -2
-      ],
-      [
-        3,
-        -15
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        -5,
-        -7
-      ],
-      [
-        -6,
-        -5
-      ],
-      [
-        -1,
-        -11
-      ],
-      [
-        3,
-        -11
-      ],
-      [
-        4,
-        -10
-      ],
-      [
-        5,
-        -18
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        -4,
-        -13
-      ],
-      [
-        -2,
-        -13
-      ],
-      [
-        3,
-        -11
-      ],
-      [
-        10,
-        -15
-      ],
-      [
-        5,
-        -15
-      ],
-      [
-        9,
-        -8
-      ],
-      [
-        4,
-        6
-      ],
-      [
-        4,
-        7
-      ],
-      [
-        4,
-        6
-      ],
-      [
-        6,
-        -3
-      ],
-      [
-        7,
-        -5
-      ],
-      [
-        8,
-        -5
-      ],
-      [
-        -1,
-        -12
-      ],
-      [
-        5,
-        -21
-      ],
-      [
-        4,
-        -39
-      ],
-      [
-        -6,
-        -18
-      ],
-      [
-        1,
-        -24
-      ],
-      [
-        16,
-        -7
-      ],
-      [
-        4,
-        -7
-      ],
-      [
-        1,
-        -9
-      ],
-      [
-        -35,
-        -62
-      ],
-      [
-        -30,
-        9
-      ],
-      [
-        -17,
-        -16
-      ],
-      [
-        -17,
-        -5
-      ],
-      [
-        -7,
-        -27
-      ],
-      [
-        -9,
-        -6
-      ],
-      [
-        -13,
-        2
-      ],
-      [
-        -11,
-        7
-      ],
-      [
-        -9,
-        -4
-      ],
-      [
-        -11,
-        -49
-      ],
-      [
-        -10,
-        4
-      ],
-      [
-        -4,
-        -17
-      ],
-      [
-        -5,
-        -8
-      ],
-      [
-        -7,
-        -7
-      ],
-      [
-        -7,
-        22
-      ],
-      [
-        -4,
-        21
-      ],
-      [
-        -6,
-        5
-      ],
-      [
-        -8,
-        5
-      ],
-      [
-        -8,
-        0
-      ],
-      [
-        -6,
-        -3
-      ],
-      [
-        -6,
-        -14
-      ],
-      [
-        -10,
-        -11
-      ],
-      [
-        -8,
-        9
-      ],
-      [
-        -6,
-        16
-      ],
-      [
-        -5,
-        -25
-      ],
-      [
-        -7,
-        -26
-      ],
-      [
-        1,
-        -31
-      ],
-      [
-        -3,
-        -18
-      ],
-      [
-        -7,
-        4
-      ],
-      [
-        -6,
-        16
-      ],
-      [
-        -20,
-        13
-      ],
-      [
-        -15,
-        -1
-      ],
-      [
-        3,
-        17
-      ],
-      [
-        15,
-        25
-      ],
-      [
-        -5,
-        4
-      ],
-      [
-        -7,
-        -3
-      ],
-      [
-        -3,
-        3
-      ],
-      [
-        5,
-        23
-      ],
-      [
-        0,
-        24
-      ],
-      [
-        -6,
-        -8
-      ],
-      [
-        -8,
-        -26
-      ],
-      [
-        -20,
-        -21
-      ],
-      [
-        1,
-        -34
-      ],
-      [
-        -19,
-        -71
-      ],
-      [
-        -1,
-        -30
-      ],
-      [
-        -11,
-        -24
-      ],
-      [
-        -16,
-        -21
-      ],
-      [
-        -20,
-        6
-      ],
-      [
-        -16,
-        -18
-      ],
-      [
-        -8,
-        -21
-      ],
-      [
-        -7,
-        -3
-      ],
-      [
-        -3,
-        26
-      ],
-      [
-        -3,
-        8
-      ],
-      [
-        -6,
-        -38
-      ],
-      [
-        -6,
-        -3
-      ],
-      [
-        -2,
-        28
-      ],
-      [
-        -3,
-        18
-      ],
-      [
-        -8,
-        -16
-      ],
-      [
-        -5,
-        -41
-      ],
-      [
-        -6,
-        3
-      ],
-      [
-        -1,
-        16
-      ],
-      [
-        -4,
-        4
-      ],
-      [
-        -2,
-        -17
-      ],
-      [
-        2,
-        -25
-      ],
-      [
-        -3,
-        -13
-      ],
-      [
-        -5,
-        7
-      ],
-      [
-        -6,
-        12
-      ],
-      [
-        -9,
-        -9
-      ],
-      [
-        -8,
-        -4
-      ],
-      [
-        -1,
-        12
-      ],
-      [
-        2,
-        15
-      ],
-      [
-        -17,
-        -8
-      ],
-      [
-        -20,
-        -28
-      ],
-      [
-        -16,
-        -38
-      ],
-      [
-        6,
-        -6
-      ],
-      [
-        6,
-        -12
-      ],
-      [
-        -27,
-        -59
-      ],
-      [
-        -28,
-        -53
-      ],
-      [
-        -21,
-        -86
-      ],
-      [
-        -9,
-        -10
-      ],
-      [
-        -7,
-        -16
-      ]
-    ],
-    [
-      [
-        6710,
-        8280
-      ],
-      [
-        -2,
-        -5
-      ],
-      [
-        -5,
-        0
-      ],
-      [
-        -4,
-        6
-      ],
-      [
-        -4,
-        17
-      ],
-      [
-        1,
-        4
-      ],
-      [
-        10,
-        -2
-      ],
-      [
-        3,
-        -8
-      ],
-      [
-        1,
-        -12
-      ]
-    ],
-    [
-      [
-        6783,
-        8482
-      ],
-      [
-        -6,
-        -2
-      ],
-      [
-        -4,
-        5
-      ],
-      [
-        0,
-        18
-      ],
-      [
-        6,
-        33
-      ],
-      [
-        6,
-        15
-      ],
-      [
-        8,
-        -6
-      ],
-      [
-        -1,
-        -4
-      ],
-      [
-        1,
-        -35
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        -8,
-        -9
-      ]
-    ],
-    [
-      [
-        7146,
-        6928
-      ],
-      [
-        -1,
-        -2
-      ],
-      [
-        -58,
-        -4
-      ],
-      [
-        -58,
-        -4
-      ],
-      [
-        -57,
-        -3
-      ],
-      [
-        -58,
-        -4
-      ]
-    ],
-    [
-      [
-        6556,
-        6935
-      ],
-      [
-        11,
-        11
-      ],
-      [
-        19,
-        26
-      ],
-      [
-        10,
-        23
-      ],
-      [
-        10,
-        31
-      ],
-      [
-        9,
-        38
-      ],
-      [
-        20,
-        57
-      ],
-      [
-        9,
-        35
-      ],
-      [
-        10,
-        43
-      ],
-      [
-        7,
-        46
-      ],
-      [
-        4,
-        48
-      ],
-      [
-        2,
-        49
-      ],
-      [
-        0,
-        52
-      ],
-      [
-        -5,
-        51
-      ],
-      [
-        -9,
-        52
-      ],
-      [
-        -5,
-        27
-      ],
-      [
-        -1,
-        7
-      ],
-      [
-        -17,
-        67
-      ],
-      [
-        -18,
-        92
-      ],
-      [
-        0,
-        8
-      ],
-      [
-        17,
-        56
-      ],
-      [
-        1,
-        7
-      ],
-      [
-        -2,
-        45
-      ],
-      [
-        -4,
-        22
-      ],
-      [
-        -9,
-        30
-      ],
-      [
-        1,
-        8
-      ],
-      [
-        18,
-        39
-      ],
-      [
-        10,
-        29
-      ],
-      [
-        10,
-        36
-      ],
-      [
-        7,
-        41
-      ],
-      [
-        3,
-        47
-      ],
-      [
-        -1,
-        32
-      ],
-      [
-        -3,
-        16
-      ],
-      [
-        1,
-        12
-      ],
-      [
-        3,
-        8
-      ],
-      [
-        20,
-        12
-      ],
-      [
-        6,
-        18
-      ],
-      [
-        2,
-        33
-      ],
-      [
-        4,
-        16
-      ],
-      [
-        6,
-        0
-      ],
-      [
-        6,
-        7
-      ],
-      [
-        6,
-        14
-      ],
-      [
-        7,
-        4
-      ],
-      [
-        9,
-        -6
-      ],
-      [
-        13,
-        20
-      ],
-      [
-        16,
-        47
-      ],
-      [
-        13,
-        26
-      ],
-      [
-        9,
-        5
-      ],
-      [
-        1,
-        -4
-      ],
-      [
-        -5,
-        -14
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        2,
-        -17
-      ],
-      [
-        -1,
-        -16
-      ],
-      [
-        -5,
-        -22
-      ],
-      [
-        3,
-        -7
-      ],
-      [
-        -7,
-        -36
-      ],
-      [
-        0,
-        -17
-      ],
-      [
-        4,
-        -14
-      ],
-      [
-        5,
-        5
-      ],
-      [
-        6,
-        23
-      ],
-      [
-        2,
-        12
-      ],
-      [
-        -3,
-        2
-      ],
-      [
-        1,
-        9
-      ],
-      [
-        4,
-        18
-      ],
-      [
-        4,
-        9
-      ],
-      [
-        3,
-        -1
-      ],
-      [
-        1,
-        -10
-      ],
-      [
-        -1,
-        -19
-      ],
-      [
-        -10,
-        -43
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        3,
-        -4
-      ],
-      [
-        11,
-        28
-      ],
-      [
-        9,
-        44
-      ],
-      [
-        7,
-        33
-      ],
-      [
-        2,
-        19
-      ],
-      [
-        -3,
-        47
-      ],
-      [
-        1,
-        19
-      ],
-      [
-        3,
-        14
-      ],
-      [
-        9,
-        15
-      ],
-      [
-        17,
-        17
-      ],
-      [
-        17,
-        9
-      ],
-      [
-        16,
-        1
-      ],
-      [
-        11,
-        4
-      ],
-      [
-        7,
-        8
-      ],
-      [
-        -2,
-        7
-      ],
-      [
-        -11,
-        5
-      ],
-      [
-        -9,
-        10
-      ],
-      [
-        -5,
-        16
-      ],
-      [
-        -2,
-        19
-      ],
-      [
-        2,
-        21
-      ],
-      [
-        7,
-        21
-      ],
-      [
-        12,
-        20
-      ],
-      [
-        3,
-        15
-      ],
-      [
-        -4,
-        9
-      ],
-      [
-        5,
-        3
-      ],
-      [
-        15,
-        -2
-      ],
-      [
-        10,
-        2
-      ],
-      [
-        6,
-        8
-      ],
-      [
-        14,
-        -8
-      ],
-      [
-        22,
-        -25
-      ],
-      [
-        21,
-        -14
-      ],
-      [
-        20,
-        -5
-      ],
-      [
-        15,
-        -8
-      ],
-      [
-        9,
-        -14
-      ],
-      [
-        7,
-        -15
-      ],
-      [
-        4,
-        -16
-      ],
-      [
-        9,
-        -10
-      ],
-      [
-        15,
-        -2
-      ],
-      [
-        12,
-        -7
-      ],
-      [
-        9,
-        -12
-      ],
-      [
-        47,
-        -31
-      ],
-      [
-        20,
-        -16
-      ],
-      [
-        11,
-        -16
-      ],
-      [
-        3,
-        -11
-      ],
-      [
-        -1,
-        -10
-      ],
-      [
-        2,
-        -11
-      ],
-      [
-        8,
-        -21
-      ],
-      [
-        3,
-        -2
-      ],
-      [
-        2,
-        -10
-      ],
-      [
-        0,
-        -18
-      ],
-      [
-        3,
-        -13
-      ],
-      [
-        4,
-        -6
-      ],
-      [
-        -3,
-        -3
-      ],
-      [
-        -14,
-        11
-      ],
-      [
-        -9,
-        -3
-      ],
-      [
-        -3,
-        -14
-      ],
-      [
-        -1,
-        -13
-      ],
-      [
-        3,
-        -12
-      ],
-      [
-        18,
-        -38
-      ],
-      [
-        5,
-        -33
-      ],
-      [
-        1,
-        -41
-      ],
-      [
-        -2,
-        -16
-      ],
-      [
-        -2,
-        -35
-      ],
-      [
-        -2,
-        -55
-      ],
-      [
-        0,
-        -19
-      ],
-      [
-        -6,
-        -18
-      ],
-      [
-        -17,
-        -26
-      ],
-      [
-        0,
-        5
-      ],
-      [
-        -4,
-        1
-      ],
-      [
-        -5,
-        -4
-      ],
-      [
-        -6,
-        -22
-      ],
-      [
-        -5,
-        -41
-      ],
-      [
-        -6,
-        -22
-      ],
-      [
-        -8,
-        -4
-      ],
-      [
-        -4,
-        -5
-      ],
-      [
-        -2,
-        -9
-      ],
-      [
-        -8,
-        -5
-      ],
-      [
-        -14,
-        -3
-      ],
-      [
-        -10,
-        -13
-      ],
-      [
-        -7,
-        -35
-      ],
-      [
-        0,
-        -16
-      ],
-      [
-        -4,
-        -21
-      ],
-      [
-        1,
-        -18
-      ],
-      [
-        4,
-        -15
-      ],
-      [
-        11,
-        -15
-      ],
-      [
-        20,
-        -15
-      ],
-      [
-        11,
-        -2
-      ],
-      [
-        9,
-        6
-      ],
-      [
-        8,
-        24
-      ],
-      [
-        8,
-        10
-      ],
-      [
-        10,
-        4
-      ],
-      [
-        4,
-        11
-      ],
-      [
-        16,
-        49
-      ],
-      [
-        0,
-        11
-      ],
-      [
-        -6,
-        4
-      ],
-      [
-        1,
-        3
-      ],
-      [
-        8,
-        2
-      ],
-      [
-        6,
-        6
-      ],
-      [
-        6,
-        11
-      ],
-      [
-        10,
-        9
-      ],
-      [
-        24,
-        13
-      ],
-      [
-        13,
-        14
-      ],
-      [
-        8,
-        2
-      ],
-      [
-        12,
-        -7
-      ],
-      [
-        16,
-        -18
-      ],
-      [
-        12,
-        -26
-      ],
-      [
-        9,
-        -34
-      ],
-      [
-        12,
-        -89
-      ],
-      [
-        14,
-        -143
-      ],
-      [
-        9,
-        -80
-      ],
-      [
-        6,
-        -17
-      ],
-      [
-        2,
-        -8
-      ],
-      [
-        -12,
-        -112
-      ],
-      [
-        -10,
-        -46
-      ],
-      [
-        -17,
-        -27
-      ],
-      [
-        1,
-        6
-      ],
-      [
-        1,
-        8
-      ],
-      [
-        0,
-        27
-      ],
-      [
-        -3,
-        10
-      ],
-      [
-        -7,
-        5
-      ],
-      [
-        -8,
-        -3
-      ],
-      [
-        -9,
-        -10
-      ],
-      [
-        -3,
-        -11
-      ],
-      [
-        4,
-        -10
-      ],
-      [
-        -2,
-        -10
-      ],
-      [
-        -8,
-        -8
-      ],
-      [
-        -5,
-        -20
-      ],
-      [
-        -3,
-        -31
-      ],
-      [
-        -3,
-        -19
-      ],
-      [
-        -4,
-        -8
-      ],
-      [
-        -16,
-        -11
-      ],
-      [
-        -8,
-        -10
-      ],
-      [
-        -7,
-        -15
-      ],
-      [
-        -6,
-        -23
-      ],
-      [
-        -6,
-        -33
-      ],
-      [
-        -2,
-        -25
-      ],
-      [
-        2,
-        -14
-      ],
-      [
-        -5,
-        -9
-      ],
-      [
-        -9,
-        -17
-      ],
-      [
-        -2,
-        -6
-      ],
-      [
-        1,
-        -10
-      ],
-      [
-        -2,
-        -4
-      ],
-      [
-        -4,
-        0
-      ],
-      [
-        -4,
-        -5
-      ],
-      [
-        -8,
-        -17
-      ],
-      [
-        -13,
-        -46
-      ],
-      [
-        -3,
-        -9
-      ]
-    ],
-    [
-      [
-        6955,
-        8570
-      ],
-      [
-        23,
-        -6
-      ],
-      [
-        2,
-        3
-      ],
-      [
-        6,
-        -11
-      ],
-      [
-        1,
-        -9
-      ],
-      [
-        -3,
-        -7
-      ],
-      [
-        -3,
-        -4
-      ],
-      [
-        -5,
-        -1
-      ],
-      [
-        -8,
-        8
-      ],
-      [
-        -14,
-        20
-      ],
-      [
-        1,
-        7
-      ]
-    ],
-    [
-      [
-        7138,
-        8647
-      ],
-      [
-        2,
-        -9
-      ],
-      [
-        -5,
-        -13
-      ],
-      [
-        -12,
-        -7
-      ],
-      [
-        -24,
-        1
-      ],
-      [
-        -16,
-        5
-      ],
-      [
-        -8,
-        9
-      ],
-      [
-        -1,
-        5
-      ],
-      [
-        0,
-        11
-      ],
-      [
-        4,
-        1
-      ],
-      [
-        5,
-        -6
-      ],
-      [
-        8,
-        2
-      ],
-      [
-        10,
-        11
-      ],
-      [
-        6,
-        8
-      ],
-      [
-        0,
-        5
-      ],
-      [
-        -3,
-        10
-      ],
-      [
-        3,
-        5
-      ],
-      [
-        13,
-        -4
-      ],
-      [
-        5,
-        -7
-      ],
-      [
-        9,
-        -23
-      ],
-      [
-        4,
-        -4
-      ]
-    ],
-    [
-      [
-        7031,
-        8741
-      ],
-      [
-        -2,
-        -2
-      ],
-      [
-        -9,
-        15
-      ],
-      [
-        -2,
-        10
-      ],
-      [
-        1,
-        8
-      ],
-      [
-        4,
-        1
-      ],
-      [
-        5,
-        -8
-      ],
-      [
-        3,
-        -8
-      ],
-      [
-        1,
-        -10
-      ],
-      [
-        -1,
-        -6
-      ]
-    ],
-    [
-      [
-        7029,
-        8788
-      ],
-      [
-        0,
-        -9
-      ],
-      [
-        -5,
-        2
-      ],
-      [
-        -5,
-        6
-      ],
-      [
-        -3,
-        10
-      ],
-      [
-        -5,
-        24
-      ],
-      [
-        -7,
-        17
-      ],
-      [
-        11,
-        20
-      ],
-      [
-        6,
-        2
-      ],
-      [
-        6,
-        -4
-      ],
-      [
-        1,
-        -12
-      ],
-      [
-        -5,
-        -18
-      ],
-      [
-        1,
-        -19
-      ],
-      [
-        5,
-        -19
-      ]
-    ],
-    [
-      [
-        6427,
-        8283
-      ],
-      [
-        -8,
-        5
-      ],
-      [
-        -7,
-        16
-      ],
-      [
-        -4,
-        16
-      ],
-      [
-        -1,
-        17
-      ],
-      [
-        10,
-        41
-      ],
-      [
-        1,
-        7
-      ],
-      [
-        -1,
-        4
-      ],
-      [
-        -5,
-        4
-      ],
-      [
-        -13,
-        -7
-      ],
-      [
-        -13,
-        -2
-      ],
-      [
-        -4,
-        3
-      ],
-      [
-        -1,
-        7
-      ],
-      [
-        0,
-        11
-      ],
-      [
-        2,
-        14
-      ],
-      [
-        8,
-        24
-      ],
-      [
-        0,
-        23
-      ],
-      [
-        4,
-        13
-      ],
-      [
-        -4,
-        25
-      ],
-      [
-        1,
-        11
-      ],
-      [
-        -5,
-        13
-      ],
-      [
-        -15,
-        17
-      ],
-      [
-        -33,
-        23
-      ],
-      [
-        3,
-        25
-      ],
-      [
-        -1,
-        11
-      ],
-      [
-        -8,
-        16
-      ],
-      [
-        -35,
-        19
-      ],
-      [
-        -24,
-        8
-      ],
-      [
-        -24,
-        1
-      ],
-      [
-        -17,
-        6
-      ],
-      [
-        -19,
-        3
-      ],
-      [
-        -12,
-        11
-      ],
-      [
-        -12,
-        11
-      ],
-      [
-        -13,
-        12
-      ],
-      [
-        -12,
-        11
-      ],
-      [
-        -21,
-        10
-      ],
-      [
-        -22,
-        9
-      ],
-      [
-        -22,
-        10
-      ],
-      [
-        -21,
-        10
-      ],
-      [
-        -22,
-        9
-      ],
-      [
-        -22,
-        10
-      ],
-      [
-        -21,
-        10
-      ],
-      [
-        -22,
-        9
-      ],
-      [
-        -5,
-        17
-      ],
-      [
-        -5,
-        17
-      ],
-      [
-        -4,
-        17
-      ],
-      [
-        -5,
-        17
-      ],
-      [
-        -10,
-        7
-      ],
-      [
-        -6,
-        4
-      ],
-      [
-        -3,
-        9
-      ],
-      [
-        -9,
-        -4
-      ],
-      [
-        -4,
-        15
-      ],
-      [
-        1,
-        3
-      ]
-    ],
-    [
-      [
-        5942,
-        8881
-      ],
-      [
-        11,
-        4
-      ],
-      [
-        33,
-        20
-      ],
-      [
-        28,
-        26
-      ],
-      [
-        23,
-        30
-      ],
-      [
-        28,
-        19
-      ],
-      [
-        35,
-        6
-      ],
-      [
-        24,
-        11
-      ],
-      [
-        15,
-        15
-      ],
-      [
-        20,
-        28
-      ],
-      [
-        11,
-        8
-      ],
-      [
-        14,
-        3
-      ],
-      [
-        11,
-        11
-      ],
-      [
-        7,
-        19
-      ],
-      [
-        13,
-        22
-      ],
-      [
-        20,
-        25
-      ],
-      [
-        11,
-        10
-      ],
-      [
-        3,
-        -5
-      ],
-      [
-        1,
-        -8
-      ],
-      [
-        -1,
-        -13
-      ],
-      [
-        5,
-        -10
-      ],
-      [
-        11,
-        -8
-      ],
-      [
-        5,
-        -11
-      ],
-      [
-        -1,
-        -13
-      ],
-      [
-        3,
-        -11
-      ],
-      [
-        6,
-        -9
-      ],
-      [
-        2,
-        -20
-      ],
-      [
-        -3,
-        -31
-      ],
-      [
-        0,
-        -20
-      ],
-      [
-        2,
-        -9
-      ],
-      [
-        2,
-        -5
-      ],
-      [
-        4,
-        5
-      ],
-      [
-        5,
-        11
-      ],
-      [
-        2,
-        6
-      ],
-      [
-        1,
-        7
-      ],
-      [
-        29,
-        31
-      ],
-      [
-        5,
-        2
-      ],
-      [
-        10,
-        -8
-      ],
-      [
-        43,
-        -12
-      ],
-      [
-        18,
-        -8
-      ],
-      [
-        18,
-        -17
-      ],
-      [
-        6,
-        -7
-      ],
-      [
-        22,
-        -58
-      ],
-      [
-        10,
-        -22
-      ],
-      [
-        6,
-        -7
-      ],
-      [
-        4,
-        -8
-      ],
-      [
-        3,
-        -21
-      ],
-      [
-        3,
-        -6
-      ],
-      [
-        33,
-        -4
-      ],
-      [
-        14,
-        3
-      ],
-      [
-        9,
-        9
-      ],
-      [
-        10,
-        -6
-      ],
-      [
-        11,
-        -18
-      ],
-      [
-        11,
-        -6
-      ],
-      [
-        11,
-        9
-      ],
-      [
-        10,
-        -1
-      ],
-      [
-        9,
-        -9
-      ],
-      [
-        4,
-        -6
-      ],
-      [
-        3,
-        0
-      ],
-      [
-        19,
-        29
-      ],
-      [
-        22,
-        26
-      ],
-      [
-        29,
-        27
-      ],
-      [
-        18,
-        13
-      ],
-      [
-        4,
-        -4
-      ],
-      [
-        28,
-        10
-      ],
-      [
-        24,
-        1
-      ],
-      [
-        33,
-        -6
-      ],
-      [
-        30,
-        6
-      ],
-      [
-        28,
-        19
-      ],
-      [
-        25,
-        10
-      ],
-      [
-        21,
-        2
-      ],
-      [
-        8,
-        -5
-      ],
-      [
-        -5,
-        -12
-      ],
-      [
-        -3,
-        -22
-      ],
-      [
-        0,
-        -30
-      ],
-      [
-        -2,
-        -19
-      ],
-      [
-        -3,
-        -8
-      ],
-      [
-        -1,
-        -8
-      ],
-      [
-        3,
-        -7
-      ],
-      [
-        21,
-        -5
-      ],
-      [
-        11,
-        -10
-      ],
-      [
-        12,
-        0
-      ],
-      [
-        14,
-        9
-      ],
-      [
-        11,
-        -4
-      ],
-      [
-        7,
-        -16
-      ],
-      [
-        11,
-        -2
-      ],
-      [
-        11,
-        11
-      ],
-      [
-        7,
-        11
-      ],
-      [
-        7,
-        4
-      ],
-      [
-        5,
-        1
-      ],
-      [
-        5,
-        -5
-      ],
-      [
-        4,
-        -9
-      ],
-      [
-        9,
-        -25
-      ],
-      [
-        4,
-        -17
-      ],
-      [
-        3,
-        -25
-      ],
-      [
-        2,
-        -8
-      ],
-      [
-        0,
-        -15
-      ],
-      [
-        -6,
-        -10
-      ],
-      [
-        -2,
-        -7
-      ],
-      [
-        4,
-        -8
-      ],
-      [
-        20,
-        -2
-      ],
-      [
-        9,
-        -8
-      ],
-      [
-        4,
-        -9
-      ],
-      [
-        -2,
-        -9
-      ],
-      [
-        1,
-        -11
-      ],
-      [
-        5,
-        -10
-      ],
-      [
-        16,
-        -17
-      ],
-      [
-        4,
-        -8
-      ],
-      [
-        -1,
-        -8
-      ],
-      [
-        -5,
-        -5
-      ],
-      [
-        -8,
-        -3
-      ],
-      [
-        -63,
-        16
-      ],
-      [
-        -19,
-        2
-      ],
-      [
-        -2,
-        -5
-      ],
-      [
-        -2,
-        -1
-      ],
-      [
-        -3,
-        1
-      ],
-      [
-        -5,
-        1
-      ],
-      [
-        -3,
-        3
-      ],
-      [
-        -2,
-        11
-      ],
-      [
-        -6,
-        6
-      ],
-      [
-        -8,
-        3
-      ],
-      [
-        -8,
-        -8
-      ],
-      [
-        -9,
-        -30
-      ],
-      [
-        2,
-        -6
-      ],
-      [
-        -2,
-        -19
-      ],
-      [
-        2,
-        -6
-      ],
-      [
-        0,
-        -4
-      ],
-      [
-        -2,
-        -4
-      ],
-      [
-        -5,
-        1
-      ],
-      [
-        -8,
-        4
-      ],
-      [
-        -29,
-        46
-      ],
-      [
-        -23,
-        24
-      ],
-      [
-        -27,
-        16
-      ],
-      [
-        -22,
-        9
-      ],
-      [
-        -16,
-        -1
-      ],
-      [
-        -13,
-        -12
-      ],
-      [
-        -11,
-        -23
-      ],
-      [
-        -16,
-        -13
-      ],
-      [
-        -22,
-        -3
-      ],
-      [
-        -12,
-        -7
-      ],
-      [
-        -2,
-        -9
-      ],
-      [
-        -7,
-        0
-      ],
-      [
-        -14,
-        9
-      ],
-      [
-        -15,
-        2
-      ],
-      [
-        -15,
-        -3
-      ],
-      [
-        -11,
-        -10
-      ],
-      [
-        -11,
-        -28
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        -9,
-        -12
-      ],
-      [
-        -22,
-        -20
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        -12,
-        -21
-      ],
-      [
-        -3,
-        -12
-      ],
-      [
-        0,
-        -12
-      ],
-      [
-        -4,
-        1
-      ],
-      [
-        -8,
-        13
-      ],
-      [
-        0,
-        18
-      ],
-      [
-        7,
-        22
-      ],
-      [
-        6,
-        11
-      ],
-      [
-        6,
-        -1
-      ],
-      [
-        4,
-        10
-      ],
-      [
-        1,
-        20
-      ],
-      [
-        -2,
-        11
-      ],
-      [
-        -11,
-        -4
-      ],
-      [
-        -6,
-        -9
-      ],
-      [
-        -7,
-        -1
-      ],
-      [
-        -9,
-        4
-      ],
-      [
-        -8,
-        -11
-      ],
-      [
-        -7,
-        -27
-      ],
-      [
-        -8,
-        -17
-      ],
-      [
-        -9,
-        -9
-      ],
-      [
-        -6,
-        9
-      ],
-      [
-        -3,
-        27
-      ],
-      [
-        0,
-        21
-      ],
-      [
-        3,
-        26
-      ],
-      [
-        -2,
-        5
-      ],
-      [
-        -4,
-        -9
-      ],
-      [
-        -6,
-        -21
-      ],
-      [
-        -7,
-        -46
-      ],
-      [
-        -5,
-        -15
-      ],
-      [
-        -7,
-        -6
-      ],
-      [
-        -11,
-        -28
-      ],
-      [
-        -15,
-        -50
-      ],
-      [
-        -17,
-        -48
-      ],
-      [
-        -18,
-        -47
-      ],
-      [
-        -12,
-        -25
-      ],
-      [
-        -3,
-        -3
-      ],
-      [
-        -2,
-        -9
-      ],
-      [
-        -1,
-        -19
-      ]
-    ],
-    [
-      [
-        6321,
-        9129
-      ],
-      [
-        -4,
-        -13
-      ],
-      [
-        1,
-        -7
-      ],
-      [
-        -21,
-        -35
-      ],
-      [
-        -8,
-        -22
-      ],
-      [
-        -6,
-        -3
-      ],
-      [
-        -5,
-        15
-      ],
-      [
-        0,
-        12
-      ],
-      [
-        5,
-        9
-      ],
-      [
-        5,
-        13
-      ],
-      [
-        1,
-        17
-      ],
-      [
-        -2,
-        7
-      ],
-      [
-        -7,
-        -16
-      ],
-      [
-        4,
-        -4
-      ],
-      [
-        1,
-        -2
-      ],
-      [
-        -1,
-        -6
-      ],
-      [
-        -24,
-        8
-      ],
-      [
-        -8,
-        13
-      ],
-      [
-        2,
-        17
-      ],
-      [
-        8,
-        22
-      ],
-      [
-        29,
-        47
-      ],
-      [
-        13,
-        13
-      ],
-      [
-        36,
-        21
-      ],
-      [
-        20,
-        5
-      ],
-      [
-        20,
-        0
-      ],
-      [
-        15,
-        -7
-      ],
-      [
-        9,
-        -14
-      ],
-      [
-        -9,
-        -9
-      ],
-      [
-        -40,
-        -7
-      ],
-      [
-        -1,
-        -3
-      ],
-      [
-        8,
-        -7
-      ],
-      [
-        1,
-        -5
-      ],
-      [
-        -7,
-        -14
-      ],
-      [
-        -35,
-        -45
-      ]
-    ],
-    [
-      [
-        6194,
-        9418
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        6,
-        -2
-      ],
-      [
-        -1,
-        -3
-      ],
-      [
-        -7,
-        -6
-      ],
-      [
-        -19,
-        -13
-      ],
-      [
-        -13,
-        -4
-      ],
-      [
-        -7,
-        5
-      ],
-      [
-        -1,
-        8
-      ],
-      [
-        6,
-        12
-      ],
-      [
-        0,
-        6
-      ],
-      [
-        -6,
-        0
-      ],
-      [
-        1,
-        5
-      ],
-      [
-        8,
-        9
-      ],
-      [
-        68,
-        61
-      ],
-      [
-        29,
-        22
-      ],
-      [
-        16,
-        7
-      ],
-      [
-        2,
-        -3
-      ],
-      [
-        -17,
-        -23
-      ],
-      [
-        -2,
-        -9
-      ],
-      [
-        0,
-        -7
-      ],
-      [
-        -5,
-        -12
-      ],
-      [
-        -50,
-        -42
-      ],
-      [
-        -7,
-        -4
-      ]
-    ],
-    [
-      [
-        5648,
-        8949
-      ],
-      [
-        -4,
-        0
-      ],
-      [
-        -12,
-        -22
-      ],
-      [
-        -5,
-        -15
-      ],
-      [
-        -11,
-        -4
-      ],
-      [
-        0,
-        -58
-      ],
-      [
-        0,
-        -58
-      ],
-      [
-        0,
-        -58
-      ],
-      [
-        -1,
-        -58
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        -7,
-        -14
-      ],
-      [
-        -10,
-        -3
-      ],
-      [
-        -47,
-        -48
-      ],
-      [
-        -8,
-        -14
-      ],
-      [
-        -8,
-        -31
-      ],
-      [
-        -15,
-        -36
-      ],
-      [
-        -4,
-        -20
-      ],
-      [
-        1,
-        -25
-      ],
-      [
-        23,
-        -21
-      ],
-      [
-        9,
-        -20
-      ],
-      [
-        4,
-        -24
-      ],
-      [
-        -1,
-        -22
-      ],
-      [
-        -11,
-        -41
-      ],
-      [
-        -3,
-        -17
-      ],
-      [
-        2,
-        -50
-      ],
-      [
-        -6,
-        -16
-      ],
-      [
-        5,
-        -41
-      ],
-      [
-        0,
-        -14
-      ],
-      [
-        -4,
-        -45
-      ],
-      [
-        -2,
-        -13
-      ],
-      [
-        4,
-        -24
-      ],
-      [
-        1,
-        -2
-      ],
-      [
-        22,
-        -33
-      ],
-      [
-        18,
-        -18
-      ],
-      [
-        17,
-        -5
-      ],
-      [
-        13,
-        -14
-      ],
-      [
-        9,
-        -22
-      ],
-      [
-        13,
-        -14
-      ],
-      [
-        15,
-        -7
-      ],
-      [
-        17,
-        -19
-      ],
-      [
-        24,
-        -44
-      ],
-      [
-        13,
-        -38
-      ],
-      [
-        21,
-        -28
-      ],
-      [
-        35,
-        -29
-      ],
-      [
-        23,
-        -25
-      ],
-      [
-        11,
-        -22
-      ],
-      [
-        7,
-        -56
-      ],
-      [
-        6,
-        -119
-      ]
-    ],
-    [
-      [
-        4895,
-        7636
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        91
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        91
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        91
-      ],
-      [
-        -14,
-        30
-      ],
-      [
-        -28,
-        24
-      ],
-      [
-        -7,
-        15
-      ],
-      [
-        -14,
-        36
-      ],
-      [
-        -5,
-        15
-      ],
-      [
-        -1,
-        12
-      ],
-      [
-        6,
-        14
-      ],
-      [
-        26,
-        38
-      ],
-      [
-        9,
-        18
-      ],
-      [
-        4,
-        18
-      ],
-      [
-        6,
-        40
-      ]
-    ],
-    [
-      [
-        4877,
-        8619
-      ],
-      [
-        -3,
-        31
-      ],
-      [
-        2,
-        48
-      ],
-      [
-        -5,
-        36
-      ],
-      [
-        -1,
-        17
-      ],
-      [
-        -4,
-        23
-      ],
-      [
-        -19,
-        58
-      ],
-      [
-        -5,
-        48
-      ],
-      [
-        -5,
-        23
-      ],
-      [
-        -2,
-        60
-      ],
-      [
-        1,
-        17
-      ],
-      [
-        4,
-        32
-      ],
-      [
-        -8,
-        22
-      ],
-      [
-        -2,
-        18
-      ],
-      [
-        -4,
-        143
-      ],
-      [
-        -2,
-        20
-      ],
-      [
-        1,
-        67
-      ],
-      [
-        -16,
-        69
-      ],
-      [
-        -7,
-        24
-      ],
-      [
-        -4,
-        29
-      ],
-      [
-        1,
-        13
-      ],
-      [
-        -13,
-        48
-      ],
-      [
-        -8,
-        52
-      ],
-      [
-        1,
-        46
-      ],
-      [
-        -3,
-        34
-      ],
-      [
-        1,
-        27
-      ],
-      [
-        -2,
-        40
-      ],
-      [
-        3,
-        22
-      ],
-      [
-        0,
-        36
-      ],
-      [
-        -17,
-        125
-      ]
-    ],
-    [
-      [
-        4761,
-        9847
-      ],
-      [
-        21,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        1,
-        85
-      ],
-      [
-        1,
-        67
-      ],
-      [
-        37,
-        -8
-      ],
-      [
-        11,
-        -12
-      ],
-      [
-        4,
-        -6
-      ],
-      [
-        -1,
-        -19
-      ],
-      [
-        3,
-        -56
-      ],
-      [
-        7,
-        -47
-      ],
-      [
-        15,
-        -56
-      ],
-      [
-        2,
-        -22
-      ],
-      [
-        5,
-        -14
-      ],
-      [
-        9,
-        -13
-      ],
-      [
-        36,
-        -15
-      ],
-      [
-        62,
-        -18
-      ],
-      [
-        35,
-        -21
-      ],
-      [
-        9,
-        -24
-      ],
-      [
-        16,
-        -9
-      ],
-      [
-        25,
-        5
-      ],
-      [
-        18,
-        9
-      ],
-      [
-        14,
-        23
-      ],
-      [
-        21,
-        5
-      ],
-      [
-        18,
-        -2
-      ],
-      [
-        18,
-        -2
-      ],
-      [
-        10,
-        -3
-      ],
-      [
-        27,
-        -18
-      ],
-      [
-        18,
-        -14
-      ],
-      [
-        26,
-        -27
-      ],
-      [
-        14,
-        -12
-      ],
-      [
-        7,
-        -28
-      ],
-      [
-        8,
-        -36
-      ],
-      [
-        12,
-        0
-      ],
-      [
-        8,
-        21
-      ],
-      [
-        22,
-        4
-      ],
-      [
-        29,
-        -15
-      ],
-      [
-        26,
-        -42
-      ],
-      [
-        36,
-        -37
-      ],
-      [
-        23,
-        -19
-      ],
-      [
-        22,
-        0
-      ],
-      [
-        29,
-        19
-      ],
-      [
-        31,
-        35
-      ],
-      [
-        22,
-        7
-      ],
-      [
-        13,
-        -4
-      ],
-      [
-        7,
-        -28
-      ],
-      [
-        10,
-        -10
-      ],
-      [
-        23,
-        3
-      ],
-      [
-        50,
-        -6
-      ],
-      [
-        40,
-        8
-      ],
-      [
-        9,
-        -16
-      ],
-      [
-        8,
-        -25
-      ],
-      [
-        16,
-        -8
-      ],
-      [
-        22,
-        8
-      ],
-      [
-        34,
-        -6
-      ],
-      [
-        -5,
-        -4
-      ],
-      [
-        -5,
-        1
-      ],
-      [
-        -7,
-        -6
-      ],
-      [
-        -8,
-        -13
-      ],
-      [
-        -19,
-        -19
-      ],
-      [
-        -29,
-        -24
-      ],
-      [
-        -35,
-        -22
-      ],
-      [
-        -69,
-        -39
-      ],
-      [
-        -43,
-        -42
-      ],
-      [
-        -19,
-        -24
-      ],
-      [
-        -75,
-        -125
-      ],
-      [
-        -44,
-        -66
-      ],
-      [
-        -73,
-        -93
-      ],
-      [
-        -7,
-        -12
-      ],
-      [
-        0,
-        -11
-      ]
-    ],
-    [
-      [
-        6108,
-        4816
-      ],
-      [
-        0,
-        -1
-      ],
-      [
-        -4,
-        -4
-      ],
-      [
-        -2,
-        4
-      ],
-      [
-        -1,
-        2
-      ]
-    ],
-    [
-      [
-        6089,
-        4816
-      ],
-      [
-        3,
-        -30
-      ],
-      [
-        -2,
-        -21
-      ],
-      [
-        -9,
-        -9
-      ],
-      [
-        -1,
-        -12
-      ],
-      [
-        5,
-        -14
-      ],
-      [
-        0,
-        -6
-      ],
-      [
-        -2,
-        -5
-      ],
-      [
-        -6,
-        -2
-      ],
-      [
-        -4,
-        -3
-      ],
-      [
-        -4,
-        -11
-      ],
-      [
-        7,
-        -21
-      ],
-      [
-        -1,
-        -25
-      ],
-      [
-        -10,
-        -30
-      ],
-      [
-        -1,
-        -12
-      ]
-    ],
-    [
-      [
-        5213,
-        4816
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        0,
-        50
-      ],
-      [
-        0,
-        50
-      ],
-      [
-        0,
-        51
-      ]
-    ],
-    [
-      [
-        5086,
-        6226
-      ],
-      [
-        -2,
-        4
-      ],
-      [
-        -13,
-        34
-      ],
-      [
-        -5,
-        41
-      ],
-      [
-        -10,
-        27
-      ],
-      [
-        -15,
-        12
-      ],
-      [
-        -9,
-        28
-      ],
-      [
-        -4,
-        41
-      ],
-      [
-        -10,
-        42
-      ],
-      [
-        -4,
-        13
-      ]
-    ],
-    [
-      [
-        6262,
-        2285
-      ],
-      [
-        -2,
-        -4
-      ],
-      [
-        -15,
-        8
-      ],
-      [
-        -9,
-        8
-      ],
-      [
-        -2,
-        7
-      ],
-      [
-        26,
-        -14
-      ],
-      [
-        2,
-        -5
-      ]
-    ],
-    [
-      [
-        6290,
-        2347
-      ],
-      [
-        -51,
-        -6
-      ],
-      [
-        -22,
-        21
-      ],
-      [
-        -9,
-        4
-      ],
-      [
-        -6,
-        -1
-      ],
-      [
-        -26,
-        -19
-      ],
-      [
-        -29,
-        -14
-      ],
-      [
-        -7,
-        4
-      ],
-      [
-        -10,
-        1
-      ],
-      [
-        -21,
-        -49
-      ],
-      [
-        -13,
-        -12
-      ]
-    ],
-    [
-      [
-        5962,
-        4212
-      ],
-      [
-        44,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        -1
-      ],
-      [
-        47,
-        0
-      ]
-    ],
-    [
-      [
-        3586,
-        8619
-      ],
-      [
-        0,
-        -94
-      ],
-      [
-        0,
-        -93
-      ],
-      [
-        0,
-        -94
-      ],
-      [
-        1,
-        -93
-      ],
-      [
-        0,
-        -2
-      ],
-      [
-        0,
-        -1
-      ],
-      [
-        0,
-        -1
-      ],
-      [
-        0,
-        -1
-      ],
-      [
-        -2,
-        0
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        -2,
-        0
-      ],
-      [
-        -1,
-        0
-      ]
-    ],
-    [
-      [
-        3581,
-        8240
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -37,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        0,
-        -51
-      ],
-      [
-        0,
-        -51
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -51
-      ]
-    ],
-    [
-      [
-        1500,
-        9847
-      ],
-      [
-        32,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        16,
-        0
-      ],
-      [
-        58,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        18,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        55,
-        0
-      ]
-    ],
-    [
-      [
-        3582,
-        9847
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        1,
-        -76
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        1,
-        -77
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        1,
-        -77
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        1,
-        -77
-      ]
-    ],
-    [
-      [
-        8343,
-        4073
-      ],
-      [
-        -4,
-        -1
-      ],
-      [
-        -7,
-        4
-      ],
-      [
-        -9,
-        9
-      ],
-      [
-        -2,
-        6
-      ],
-      [
-        9,
-        -2
-      ],
-      [
-        13,
-        -16
-      ]
-    ],
-    [
-      [
-        8350,
-        4068
-      ],
-      [
-        -4,
-        -5
-      ],
-      [
-        16,
-        51
-      ],
-      [
-        31,
-        63
-      ],
-      [
-        9,
-        10
-      ],
-      [
-        -26,
-        -54
-      ],
-      [
-        -26,
-        -65
-      ]
-    ],
-    [
-      [
-        8476,
-        4288
-      ],
-      [
-        -32,
-        -28
-      ],
-      [
-        -4,
-        1
-      ],
-      [
-        21,
-        21
-      ],
-      [
-        15,
-        6
-      ]
-    ],
-    [
-      [
-        8517,
-        4308
-      ],
-      [
-        -24,
-        -11
-      ],
-      [
-        -2,
-        4
-      ],
-      [
-        27,
-        23
-      ],
-      [
-        8,
-        81
-      ],
-      [
-        2,
-        37
-      ],
-      [
-        -4,
-        66
-      ],
-      [
-        0,
-        14
-      ],
-      [
-        4,
-        -22
-      ],
-      [
-        4,
-        -61
-      ],
-      [
-        -2,
-        -47
-      ],
-      [
-        -7,
-        -67
-      ],
-      [
-        -6,
-        -17
-      ]
-    ],
-    [
-      [
-        8501,
-        4556
-      ],
-      [
-        -3,
-        -8
-      ],
-      [
-        -11,
-        45
-      ],
-      [
-        12,
-        -15
-      ],
-      [
-        2,
-        -12
-      ],
-      [
-        0,
-        -10
-      ]
-    ],
-    [
-      [
-        8457,
-        4836
-      ],
-      [
-        5,
-        0
-      ]
-    ],
-    [
-      [
-        8462,
-        4836
-      ],
-      [
-        18,
-        -129
-      ],
-      [
-        34,
-        -141
-      ],
-      [
-        4,
-        -24
-      ],
-      [
-        -8,
-        21
-      ],
-      [
-        -25,
-        93
-      ],
-      [
-        -14,
-        68
-      ],
-      [
-        -14,
-        112
-      ]
-    ],
-    [
-      [
-        7994,
-        3759
-      ],
-      [
-        -25,
-        49
-      ],
-      [
-        -24,
-        46
-      ],
-      [
-        -23,
-        46
-      ],
-      [
-        -24,
-        46
-      ],
-      [
-        -23,
-        46
-      ],
-      [
-        -23,
-        46
-      ],
-      [
-        -24,
-        46
-      ],
-      [
-        -23,
-        46
-      ],
-      [
-        -25,
-        1
-      ],
-      [
-        -24,
-        2
-      ],
-      [
-        -25,
-        2
-      ],
-      [
-        -24,
-        1
-      ],
-      [
-        -25,
-        2
-      ],
-      [
-        -24,
-        2
-      ],
-      [
-        -24,
-        1
-      ],
-      [
-        -25,
-        2
-      ],
-      [
-        -1,
-        31
-      ],
-      [
-        -1,
-        23
-      ],
-      [
-        -15,
-        38
-      ],
-      [
-        -9,
-        23
-      ],
-      [
-        -19,
-        -20
-      ],
-      [
-        -1,
-        10
-      ],
-      [
-        1,
-        17
-      ],
-      [
-        -2,
-        5
-      ],
-      [
-        -6,
-        4
-      ],
-      [
-        -27,
-        3
-      ],
-      [
-        -27,
-        2
-      ],
-      [
-        -28,
-        2
-      ],
-      [
-        -27,
-        3
-      ],
-      [
-        -28,
-        2
-      ],
-      [
-        -27,
-        2
-      ],
-      [
-        -28,
-        3
-      ],
-      [
-        -27,
-        2
-      ],
-      [
-        -7,
-        4
-      ],
-      [
-        -12,
-        -14
-      ],
-      [
-        -32,
-        -20
-      ],
-      [
-        -16,
-        -17
-      ],
-      [
-        -6,
-        1
-      ],
-      [
-        -28,
-        -17
-      ],
-      [
-        -28,
-        -18
-      ],
-      [
-        -3,
-        0
-      ]
-    ],
-    [
-      [
-        6996,
-        4207
-      ],
-      [
-        6,
-        86
-      ],
-      [
-        5,
-        19
-      ],
-      [
-        5,
-        5
-      ],
-      [
-        18,
-        0
-      ],
-      [
-        11,
-        10
-      ],
-      [
-        10,
-        52
-      ],
-      [
-        23,
-        40
-      ],
-      [
-        11,
-        10
-      ],
-      [
-        15,
-        8
-      ],
-      [
-        37,
-        10
-      ],
-      [
-        39,
-        39
-      ],
-      [
-        28,
-        38
-      ],
-      [
-        23,
-        10
-      ],
-      [
-        7,
-        14
-      ],
-      [
-        5,
-        18
-      ],
-      [
-        3,
-        24
-      ],
-      [
-        3,
-        5
-      ],
-      [
-        13,
-        -2
-      ],
-      [
-        10,
-        21
-      ],
-      [
-        9,
-        12
-      ],
-      [
-        10,
-        7
-      ],
-      [
-        6,
-        1
-      ],
-      [
-        2,
-        -7
-      ],
-      [
-        1,
-        -18
-      ],
-      [
-        2,
-        -6
-      ],
-      [
-        5,
-        0
-      ],
-      [
-        5,
-        4
-      ],
-      [
-        8,
-        12
-      ],
-      [
-        19,
-        36
-      ],
-      [
-        12,
-        13
-      ],
-      [
-        20,
-        8
-      ],
-      [
-        14,
-        -19
-      ],
-      [
-        8,
-        7
-      ],
-      [
-        25,
-        74
-      ],
-      [
-        10,
-        13
-      ],
-      [
-        8,
-        6
-      ],
-      [
-        12,
-        1
-      ],
-      [
-        1,
-        20
-      ],
-      [
-        4,
-        31
-      ],
-      [
-        1,
-        21
-      ],
-      [
-        7,
-        30
-      ]
-    ],
-    [
-      [
-        7457,
-        4860
-      ],
-      [
-        3,
-        -6
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        62,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        63,
-        -2
-      ],
-      [
-        62,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        62,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        62,
-        -2
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        43,
-        0
-      ]
-    ],
-    [
-      [
-        8444,
-        4837
-      ],
-      [
-        -5,
-        -32
-      ],
-      [
-        2,
-        -18
-      ],
-      [
-        10,
-        -18
-      ],
-      [
-        10,
-        -47
-      ],
-      [
-        8,
-        -62
-      ],
-      [
-        -11,
-        25
-      ],
-      [
-        -12,
-        14
-      ],
-      [
-        -18,
-        10
-      ],
-      [
-        -16,
-        18
-      ],
-      [
-        1,
-        -26
-      ],
-      [
-        -1,
-        -28
-      ],
-      [
-        -13,
-        9
-      ],
-      [
-        -8,
-        9
-      ],
-      [
-        7,
-        -30
-      ],
-      [
-        -16,
-        9
-      ],
-      [
-        -11,
-        -2
-      ],
-      [
-        -7,
-        -26
-      ],
-      [
-        -9,
-        -16
-      ],
-      [
-        -14,
-        -5
-      ],
-      [
-        -21,
-        24
-      ],
-      [
-        -7,
-        29
-      ],
-      [
-        -2,
-        33
-      ],
-      [
-        -1,
-        -39
-      ],
-      [
-        3,
-        -40
-      ],
-      [
-        -1,
-        -31
-      ],
-      [
-        20,
-        -5
-      ],
-      [
-        19,
-        5
-      ],
-      [
-        25,
-        -1
-      ],
-      [
-        16,
-        5
-      ],
-      [
-        10,
-        10
-      ],
-      [
-        24,
-        -8
-      ],
-      [
-        1,
-        -37
-      ],
-      [
-        -2,
-        -37
-      ],
-      [
-        -2,
-        -39
-      ],
-      [
-        7,
-        0
-      ],
-      [
-        8,
-        13
-      ],
-      [
-        3,
-        70
-      ],
-      [
-        22,
-        25
-      ],
-      [
-        7,
-        -1
-      ],
-      [
-        7,
-        -23
-      ],
-      [
-        3,
-        -23
-      ],
-      [
-        2,
-        -31
-      ],
-      [
-        -5,
-        -48
-      ],
-      [
-        -33,
-        -56
-      ],
-      [
-        -24,
-        -51
-      ],
-      [
-        -12,
-        -11
-      ],
-      [
-        -18,
-        6
-      ],
-      [
-        -20,
-        13
-      ],
-      [
-        -10,
-        3
-      ],
-      [
-        -7,
-        -4
-      ],
-      [
-        -5,
-        16
-      ],
-      [
-        -2,
-        29
-      ],
-      [
-        -8,
-        9
-      ],
-      [
-        -6,
-        -1
-      ],
-      [
-        -4,
-        -31
-      ],
-      [
-        -19,
-        -8
-      ],
-      [
-        -25,
-        12
-      ],
-      [
-        -26,
-        26
-      ],
-      [
-        11,
-        -28
-      ],
-      [
-        66,
-        -51
-      ],
-      [
-        7,
-        -10
-      ],
-      [
-        7,
-        -14
-      ],
-      [
-        -9,
-        -23
-      ],
-      [
-        -7,
-        -25
-      ],
-      [
-        -2,
-        -19
-      ],
-      [
-        -2,
-        -13
-      ],
-      [
-        -26,
-        -33
-      ],
-      [
-        -14,
-        6
-      ],
-      [
-        -37,
-        60
-      ],
-      [
-        17,
-        -52
-      ],
-      [
-        13,
-        -22
-      ],
-      [
-        27,
-        -12
-      ],
-      [
-        50,
-        19
-      ],
-      [
-        16,
-        -21
-      ],
-      [
-        -13,
-        -38
-      ],
-      [
-        -14,
-        -26
-      ],
-      [
-        -17,
-        -3
-      ],
-      [
-        -16,
-        -7
-      ],
-      [
-        -4,
-        -18
-      ],
-      [
-        -11,
-        -1
-      ],
-      [
-        -17,
-        -1
-      ],
-      [
-        -27,
-        -2
-      ],
-      [
-        -15,
-        4
-      ],
-      [
-        -20,
-        -37
-      ],
-      [
-        -8,
-        -5
-      ],
-      [
-        -11,
-        7
-      ],
-      [
-        -4,
-        30
-      ],
-      [
-        -5,
-        14
-      ],
-      [
-        0,
-        -56
-      ],
-      [
-        2,
-        -15
-      ],
-      [
-        4,
-        -11
-      ],
-      [
-        -24,
-        -30
-      ],
-      [
-        -23,
-        -38
-      ],
-      [
-        -8,
-        -10
-      ],
-      [
-        -10,
-        -19
-      ],
-      [
-        -19,
-        -55
-      ],
-      [
-        -4,
-        -40
-      ],
-      [
-        -7,
-        -44
-      ],
-      [
-        -1,
-        20
-      ],
-      [
-        1,
-        33
-      ],
-      [
-        -5,
-        39
-      ],
-      [
-        -3,
-        -71
-      ],
-      [
-        -7,
-        -33
-      ],
-      [
-        -68,
-        3
-      ],
-      [
-        -27,
-        -17
-      ]
-    ],
-    [
-      [
-        4877,
-        8619
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ]
-    ],
-    [
-      [
-        3582,
-        9847
-      ],
-      [
-        18,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        53,
-        0
-      ]
-    ],
-    [
-      [
-        3584,
-        6629
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        -1,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        -1,
-        100
-      ]
-    ],
-    [
-      [
-        3582,
-        7434
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        68,
-        0
-      ],
-      [
-        52,
-        -60
-      ],
-      [
-        31,
-        -19
-      ],
-      [
-        14,
-        18
-      ],
-      [
-        32,
-        10
-      ],
-      [
-        49,
-        3
-      ],
-      [
-        31,
-        -8
-      ],
-      [
-        13,
-        -20
-      ],
-      [
-        25,
-        -21
-      ],
-      [
-        37,
-        -24
-      ],
-      [
-        22,
-        -25
-      ],
-      [
-        8,
-        -28
-      ],
-      [
-        13,
-        -18
-      ],
-      [
-        13,
-        -5
-      ]
-    ],
-    [
-      [
-        9350,
-        7462
-      ],
-      [
-        -8,
-        -52
-      ],
-      [
-        -5,
-        -26
-      ]
-    ],
-    [
-      [
-        9050,
-        7325
-      ],
-      [
-        -3,
-        15
-      ],
-      [
-        -10,
-        25
-      ],
-      [
-        -2,
-        11
-      ],
-      [
-        0,
-        12
-      ],
-      [
-        6,
-        32
-      ],
-      [
-        4,
-        10
-      ],
-      [
-        4,
-        19
-      ],
-      [
-        6,
-        75
-      ],
-      [
-        5,
-        43
-      ],
-      [
-        4,
-        80
-      ],
-      [
-        4,
-        23
-      ],
-      [
-        4,
-        14
-      ],
-      [
-        7,
-        38
-      ],
-      [
-        13,
-        30
-      ],
-      [
-        9,
-        38
-      ],
-      [
-        10,
-        32
-      ],
-      [
-        1,
-        20
-      ],
-      [
-        8,
-        41
-      ],
-      [
-        5,
-        75
-      ],
-      [
-        5,
-        11
-      ],
-      [
-        24,
-        10
-      ],
-      [
-        7,
-        8
-      ],
-      [
-        25,
-        31
-      ],
-      [
-        7,
-        12
-      ],
-      [
-        5,
-        13
-      ],
-      [
-        4,
-        21
-      ],
-      [
-        3,
-        6
-      ],
-      [
-        0,
-        11
-      ],
-      [
-        -8,
-        49
-      ],
-      [
-        -1,
-        17
-      ],
-      [
-        19,
-        55
-      ],
-      [
-        -4,
-        32
-      ],
-      [
-        3,
-        8
-      ]
-    ],
-    [
-      [
-        9214,
-        8242
-      ],
-      [
-        17,
-        78
-      ],
-      [
-        16,
-        36
-      ],
-      [
-        22,
-        -12
-      ],
-      [
-        12,
-        1
-      ],
-      [
-        8,
-        13
-      ]
-    ],
-    [
-      [
-        8761,
-        6097
-      ],
-      [
-        -20,
-        -61
-      ],
-      [
-        -1,
-        12
-      ],
-      [
-        26,
-        75
-      ],
-      [
-        -5,
-        -26
-      ]
-    ],
-    [
-      [
-        8598,
-        6219
-      ],
-      [
-        9,
-        13
-      ],
-      [
-        20,
-        25
-      ],
-      [
-        30,
-        31
-      ],
-      [
-        -42,
-        101
-      ],
-      [
-        -10,
-        6
-      ],
-      [
-        -11,
-        49
-      ],
-      [
-        -13,
-        14
-      ],
-      [
-        -3,
-        7
-      ],
-      [
-        0,
-        38
-      ],
-      [
-        1,
-        22
-      ],
-      [
-        2,
-        13
-      ],
-      [
-        11,
-        10
-      ],
-      [
-        6,
-        22
-      ],
-      [
-        0,
-        12
-      ],
-      [
-        -8,
-        35
-      ],
-      [
-        0,
-        11
-      ],
-      [
-        16,
-        21
-      ],
-      [
-        20,
-        42
-      ],
-      [
-        12,
-        45
-      ],
-      [
-        5,
-        14
-      ],
-      [
-        6,
-        9
-      ],
-      [
-        14,
-        13
-      ]
-    ],
-    [
-      [
-        8663,
-        6772
-      ],
-      [
-        17,
-        -18
-      ],
-      [
-        17,
-        -19
-      ],
-      [
-        18,
-        -18
-      ],
-      [
-        17,
-        -19
-      ],
-      [
-        17,
-        -18
-      ],
-      [
-        17,
-        -18
-      ],
-      [
-        17,
-        -19
-      ],
-      [
-        17,
-        -18
-      ]
-    ],
-    [
-      [
-        8800,
-        6625
-      ],
-      [
-        -3,
-        -31
-      ],
-      [
-        -17,
-        -64
-      ],
-      [
-        -7,
-        -15
-      ],
-      [
-        -9,
-        -13
-      ],
-      [
-        -6,
-        -5
-      ],
-      [
-        -6,
-        -11
-      ],
-      [
-        -7,
-        -16
-      ],
-      [
-        -7,
-        -32
-      ],
-      [
-        4,
-        -29
-      ],
-      [
-        34,
-        -10
-      ],
-      [
-        8,
-        9
-      ],
-      [
-        5,
-        -21
-      ],
-      [
-        3,
-        -29
-      ],
-      [
-        -3,
-        -32
-      ],
-      [
-        -6,
-        -32
-      ],
-      [
-        -4,
-        -39
-      ],
-      [
-        -3,
-        -61
-      ],
-      [
-        -6,
-        -54
-      ],
-      [
-        0,
-        17
-      ],
-      [
-        3,
-        66
-      ],
-      [
-        -5,
-        -7
-      ],
-      [
-        -4,
-        -15
-      ],
-      [
-        -10,
-        -86
-      ],
-      [
-        -14,
-        -45
-      ],
-      [
-        -13,
-        -31
-      ],
-      [
-        -13,
-        5
-      ],
-      [
-        3,
-        -25
-      ],
-      [
-        -4,
-        -13
-      ],
-      [
-        -3,
-        -27
-      ],
-      [
-        -8,
-        -18
-      ],
-      [
-        -7,
-        1
-      ],
-      [
-        -11,
-        -12
-      ],
-      [
-        -4,
-        -9
-      ],
-      [
-        -1,
-        -19
-      ],
-      [
-        -7,
-        -16
-      ],
-      [
-        -25,
-        -83
-      ],
-      [
-        -23,
-        -24
-      ],
-      [
-        -5,
-        4
-      ],
-      [
-        6,
-        39
-      ],
-      [
-        4,
-        39
-      ],
-      [
-        -14,
-        18
-      ],
-      [
-        -13,
-        9
-      ],
-      [
-        -15,
-        -2
-      ],
-      [
-        -16,
-        31
-      ],
-      [
-        -21,
-        23
-      ],
-      [
-        -30,
-        60
-      ],
-      [
-        1,
-        17
-      ],
-      [
-        -1,
-        28
-      ],
-      [
-        9,
-        45
-      ],
-      [
-        9,
-        31
-      ],
-      [
-        12,
-        16
-      ],
-      [
-        34,
-        16
-      ],
-      [
-        9,
-        25
-      ],
-      [
-        5,
-        21
-      ]
-    ],
-    [
-      [
-        3761,
-        4816
-      ],
-      [
-        -8,
-        0
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -114
-      ],
-      [
-        -1,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        -1,
-        -114
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        -1,
-        -114
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        -1,
-        -113
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -39,
-        -1
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        18,
-        -73
-      ],
-      [
-        21,
-        -21
-      ]
-    ],
-    [
-      [
-        3164,
-        2910
-      ],
-      [
-        -1,
-        1
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -38,
-        1
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        1
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        1
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        1
-      ],
-      [
-        0,
-        -46
-      ],
-      [
-        0,
-        -45
-      ],
-      [
-        0,
-        -45
-      ],
-      [
-        -1,
-        -46
-      ],
-      [
-        -61,
-        0
-      ],
-      [
-        -61,
-        0
-      ],
-      [
-        -22,
-        0
-      ]
-    ],
-    [
-      [
-        3761,
-        5018
-      ],
-      [
-        0,
-        -51
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -51
-      ]
-    ],
-    [
-      [
-        816,
-        7031
-      ],
-      [
-        64,
-        0
-      ],
-      [
-        65,
-        0
-      ],
-      [
-        65,
-        0
-      ],
-      [
-        64,
-        0
-      ],
-      [
-        65,
-        0
-      ],
-      [
-        64,
-        0
-      ],
-      [
-        65,
-        0
-      ],
-      [
-        65,
-        0
-      ]
-    ],
-    [
-      [
-        1848,
-        7031
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -62
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -62
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -62
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -62
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ]
-    ],
-    [
-      [
-        8752,
-        6436
-      ],
-      [
-        -9,
-        -2
-      ],
-      [
-        9,
-        39
-      ],
-      [
-        15,
-        18
-      ],
-      [
-        5,
-        -4
-      ],
-      [
-        1,
-        -14
-      ],
-      [
-        -3,
-        -11
-      ],
-      [
-        -10,
-        -18
-      ],
-      [
-        -8,
-        -8
-      ]
-    ],
-    [
-      [
-        9042,
-        6623
-      ],
-      [
-        -12,
-        -26
-      ],
-      [
-        11,
-        -3
-      ],
-      [
-        10,
-        8
-      ],
-      [
-        9,
-        15
-      ],
-      [
-        21,
-        21
-      ],
-      [
-        18,
-        9
-      ],
-      [
-        5,
-        2
-      ],
-      [
-        9,
-        -15
-      ],
-      [
-        17,
-        12
-      ],
-      [
-        17,
-        7
-      ],
-      [
-        -75,
-        -67
-      ],
-      [
-        -16,
-        -8
-      ],
-      [
-        -22,
-        -20
-      ],
-      [
-        -20,
-        -14
-      ],
-      [
-        -16,
-        -5
-      ],
-      [
-        -74,
-        -50
-      ],
-      [
-        -6,
-        -1
-      ],
-      [
-        -7,
-        5
-      ],
-      [
-        -61,
-        -26
-      ],
-      [
-        -25,
-        -3
-      ],
-      [
-        -23,
-        -9
-      ],
-      [
-        17,
-        21
-      ],
-      [
-        0,
-        8
-      ],
-      [
-        -4,
-        6
-      ],
-      [
-        -9,
-        -2
-      ],
-      [
-        -10,
-        -21
-      ],
-      [
-        -14,
-        -7
-      ],
-      [
-        -3,
-        23
-      ],
-      [
-        5,
-        18
-      ],
-      [
-        6,
-        17
-      ],
-      [
-        15,
-        26
-      ],
-      [
-        21,
-        17
-      ],
-      [
-        11,
-        15
-      ],
-      [
-        7,
-        -13
-      ],
-      [
-        2,
-        17
-      ],
-      [
-        6,
-        10
-      ],
-      [
-        6,
-        6
-      ],
-      [
-        15,
-        0
-      ],
-      [
-        8,
-        3
-      ],
-      [
-        6,
-        5
-      ],
-      [
-        6,
-        2
-      ],
-      [
-        16,
-        -8
-      ],
-      [
-        16,
-        2
-      ],
-      [
-        13,
-        11
-      ],
-      [
-        14,
-        3
-      ],
-      [
-        35,
-        3
-      ],
-      [
-        35,
-        8
-      ],
-      [
-        14,
-        14
-      ],
-      [
-        30,
-        40
-      ],
-      [
-        17,
-        11
-      ],
-      [
-        -26,
-        -46
-      ],
-      [
-        -15,
-        -21
-      ]
-    ],
-    [
-      [
-        7930,
-        7443
-      ],
-      [
-        -5,
-        -14
-      ],
-      [
-        -5,
-        1
-      ],
-      [
-        -4,
-        5
-      ],
-      [
-        -1,
-        8
-      ],
-      [
-        1,
-        11
-      ],
-      [
-        4,
-        5
-      ],
-      [
-        13,
-        -4
-      ],
-      [
-        0,
-        -4
-      ],
-      [
-        -3,
-        -8
-      ]
-    ],
-    [
-      [
-        8392,
-        7832
-      ],
-      [
-        -2,
-        -1
-      ],
-      [
-        0,
-        9
-      ],
-      [
-        3,
-        5
-      ],
-      [
-        5,
-        3
-      ],
-      [
-        0,
-        -4
-      ],
-      [
-        -6,
-        -12
-      ]
-    ],
-    [
-      [
-        8418,
-        7948
-      ],
-      [
-        -5,
-        -3
-      ],
-      [
-        -1,
-        5
-      ],
-      [
-        1,
-        4
-      ],
-      [
-        4,
-        6
-      ],
-      [
-        8,
-        0
-      ],
-      [
-        -1,
-        -5
-      ],
-      [
-        -6,
-        -7
-      ]
-    ],
-    [
-      [
-        8896,
-        8241
-      ],
-      [
-        2,
-        -26
-      ],
-      [
-        -4,
-        -32
-      ],
-      [
-        3,
-        -34
-      ],
-      [
-        -4,
-        -72
-      ],
-      [
-        11,
-        -55
-      ],
-      [
-        -3,
-        -37
-      ],
-      [
-        1,
-        -40
-      ],
-      [
-        -2,
-        -10
-      ],
-      [
-        -9,
-        -23
-      ],
-      [
-        -5,
-        -23
-      ],
-      [
-        -2,
-        -22
-      ],
-      [
-        0,
-        -15
-      ],
-      [
-        7,
-        -66
-      ],
-      [
-        1,
-        -28
-      ],
-      [
-        0,
-        -17
-      ],
-      [
-        -6,
-        -54
-      ],
-      [
-        -1,
-        -16
-      ],
-      [
-        2,
-        -4
-      ],
-      [
-        3,
-        0
-      ],
-      [
-        7,
-        17
-      ],
-      [
-        3,
-        2
-      ],
-      [
-        4,
-        -4
-      ],
-      [
-        11,
-        -26
-      ],
-      [
-        -1,
-        -45
-      ],
-      [
-        0,
-        -33
-      ],
-      [
-        -1,
-        -37
-      ],
-      [
-        0,
-        -56
-      ],
-      [
-        -1,
-        -40
-      ],
-      [
-        0,
-        -37
-      ],
-      [
-        -1,
-        -29
-      ],
-      [
-        -2,
-        -21
-      ],
-      [
-        5,
-        -24
-      ]
-    ],
-    [
-      [
-        8848,
-        6625
-      ],
-      [
-        -7,
-        -11
-      ],
-      [
-        -19,
-        -35
-      ],
-      [
-        -12,
-        -19
-      ],
-      [
-        -10,
-        -6
-      ],
-      [
-        -7,
-        -16
-      ],
-      [
-        -7,
-        -10
-      ],
-      [
-        7,
-        35
-      ],
-      [
-        7,
-        30
-      ],
-      [
-        6,
-        57
-      ],
-      [
-        -1,
-        47
-      ],
-      [
-        -8,
-        19
-      ],
-      [
-        -8,
-        13
-      ],
-      [
-        9,
-        -46
-      ],
-      [
-        2,
-        -56
-      ],
-      [
-        0,
-        -2
-      ]
-    ],
-    [
-      [
-        8663,
-        6772
-      ],
-      [
-        -4,
-        15
-      ],
-      [
-        -6,
-        12
-      ],
-      [
-        -31,
-        20
-      ],
-      [
-        -8,
-        14
-      ],
-      [
-        -7,
-        18
-      ],
-      [
-        -5,
-        22
-      ],
-      [
-        -3,
-        24
-      ],
-      [
-        0,
-        18
-      ],
-      [
-        3,
-        21
-      ],
-      [
-        -7,
-        14
-      ],
-      [
-        -1,
-        13
-      ],
-      [
-        -4,
-        9
-      ],
-      [
-        -20,
-        16
-      ],
-      [
-        -6,
-        21
-      ],
-      [
-        -14,
-        21
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        1
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        0,
-        55
-      ],
-      [
-        0,
-        54
-      ],
-      [
-        0,
-        2
-      ]
-    ],
-    [
-      [
-        7786,
-        7142
-      ],
-      [
-        10,
-        10
-      ],
-      [
-        33,
-        36
-      ],
-      [
-        17,
-        27
-      ],
-      [
-        17,
-        22
-      ],
-      [
-        19,
-        18
-      ],
-      [
-        14,
-        22
-      ],
-      [
-        11,
-        28
-      ],
-      [
-        12,
-        20
-      ],
-      [
-        13,
-        14
-      ],
-      [
-        7,
-        14
-      ],
-      [
-        1,
-        15
-      ],
-      [
-        -2,
-        20
-      ],
-      [
-        -6,
-        25
-      ],
-      [
-        -1,
-        20
-      ],
-      [
-        4,
-        14
-      ],
-      [
-        1,
-        10
-      ],
-      [
-        -2,
-        5
-      ],
-      [
-        -27,
-        14
-      ],
-      [
-        1,
-        70
-      ],
-      [
-        -1,
-        2
-      ],
-      [
-        2,
-        0
-      ],
-      [
-        63,
-        31
-      ],
-      [
-        40,
-        11
-      ],
-      [
-        49,
-        3
-      ],
-      [
-        58,
-        -16
-      ],
-      [
-        23,
-        -13
-      ],
-      [
-        14,
-        -18
-      ],
-      [
-        17,
-        -5
-      ],
-      [
-        19,
-        9
-      ],
-      [
-        26,
-        2
-      ],
-      [
-        33,
-        -2
-      ],
-      [
-        18,
-        -5
-      ],
-      [
-        2,
-        -5
-      ],
-      [
-        2,
-        2
-      ],
-      [
-        2,
-        8
-      ],
-      [
-        9,
-        10
-      ],
-      [
-        25,
-        15
-      ],
-      [
-        4,
-        -3
-      ],
-      [
-        5,
-        7
-      ],
-      [
-        7,
-        18
-      ],
-      [
-        12,
-        19
-      ],
-      [
-        19,
-        22
-      ],
-      [
-        17,
-        11
-      ],
-      [
-        15,
-        1
-      ],
-      [
-        10,
-        5
-      ],
-      [
-        5,
-        10
-      ],
-      [
-        1,
-        9
-      ],
-      [
-        -2,
-        7
-      ],
-      [
-        1,
-        8
-      ],
-      [
-        1,
-        4
-      ],
-      [
-        -1,
-        4
-      ],
-      [
-        -2,
-        7
-      ],
-      [
-        -1,
-        35
-      ],
-      [
-        -3,
-        16
-      ],
-      [
-        -4,
-        13
-      ],
-      [
-        -5,
-        7
-      ],
-      [
-        0,
-        9
-      ],
-      [
-        9,
-        10
-      ],
-      [
-        0,
-        -10
-      ],
-      [
-        2,
-        -2
-      ],
-      [
-        4,
-        4
-      ],
-      [
-        10,
-        21
-      ],
-      [
-        1,
-        8
-      ],
-      [
-        7,
-        8
-      ],
-      [
-        5,
-        13
-      ],
-      [
-        -6,
-        2
-      ],
-      [
-        -13,
-        -4
-      ],
-      [
-        -3,
-        4
-      ],
-      [
-        7,
-        17
-      ],
-      [
-        -1,
-        9
-      ],
-      [
-        -2,
-        4
-      ],
-      [
-        -4,
-        2
-      ],
-      [
-        -15,
-        -15
-      ],
-      [
-        -4,
-        -1
-      ],
-      [
-        -1,
-        8
-      ],
-      [
-        -7,
-        17
-      ],
-      [
-        20,
-        31
-      ],
-      [
-        70,
-        86
-      ],
-      [
-        7,
-        14
-      ],
-      [
-        3,
-        11
-      ],
-      [
-        -2,
-        10
-      ],
-      [
-        -2,
-        3
-      ],
-      [
-        1,
-        3
-      ],
-      [
-        67,
-        110
-      ],
-      [
-        39,
-        52
-      ],
-      [
-        32,
-        28
-      ],
-      [
-        24,
-        14
-      ],
-      [
-        16,
-        -2
-      ],
-      [
-        9,
-        2
-      ],
-      [
-        8,
-        0
-      ],
-      [
-        41,
-        0
-      ],
-      [
-        72,
-        0
-      ],
-      [
-        72,
-        0
-      ],
-      [
-        42,
-        0
-      ]
-    ],
-    [
-      [
-        7655,
-        6486
-      ],
-      [
-        -21,
-        -18
-      ],
-      [
-        -3,
-        -16
-      ],
-      [
-        6,
-        -21
-      ],
-      [
-        3,
-        -26
-      ],
-      [
-        1,
-        -33
-      ],
-      [
-        -12,
-        -72
-      ],
-      [
-        -23,
-        -111
-      ],
-      [
-        -12,
-        -70
-      ],
-      [
-        -1,
-        -29
-      ],
-      [
-        -15,
-        -37
-      ],
-      [
-        -30,
-        -47
-      ],
-      [
-        -22,
-        -28
-      ],
-      [
-        -12,
-        -9
-      ],
-      [
-        -10,
-        1
-      ],
-      [
-        -9,
-        11
-      ],
-      [
-        -9,
-        -8
-      ],
-      [
-        -10,
-        -26
-      ],
-      [
-        -9,
-        -14
-      ],
-      [
-        -9,
-        -1
-      ],
-      [
-        -8,
-        -17
-      ],
-      [
-        -6,
-        -33
-      ],
-      [
-        -6,
-        -19
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        -1,
-        -17
-      ],
-      [
-        5,
-        -28
-      ],
-      [
-        -1,
-        -11
-      ],
-      [
-        -2,
-        0
-      ],
-      [
-        -3,
-        2
-      ],
-      [
-        -6,
-        -7
-      ],
-      [
-        -6,
-        -16
-      ],
-      [
-        -3,
-        0
-      ],
-      [
-        -2,
-        3
-      ],
-      [
-        -1,
-        21
-      ],
-      [
-        -6,
-        14
-      ],
-      [
-        -9,
-        9
-      ],
-      [
-        -12,
-        -19
-      ],
-      [
-        -16,
-        -48
-      ],
-      [
-        -7,
-        -31
-      ],
-      [
-        3,
-        -21
-      ],
-      [
-        1,
-        -31
-      ],
-      [
-        -4,
-        -13
-      ],
-      [
-        -8,
-        -5
-      ],
-      [
-        -7,
-        -17
-      ],
-      [
-        -5,
-        -29
-      ],
-      [
-        -12,
-        -18
-      ],
-      [
-        -19,
-        -8
-      ],
-      [
-        -20,
-        13
-      ]
-    ],
-    [
-      [
-        7146,
-        6928
-      ],
-      [
-        0,
-        -1
-      ],
-      [
-        2,
-        -7
-      ],
-      [
-        16,
-        -4
-      ],
-      [
-        11,
-        -9
-      ],
-      [
-        8,
-        -12
-      ],
-      [
-        30,
-        -25
-      ],
-      [
-        9,
-        -15
-      ],
-      [
-        10,
-        -9
-      ],
-      [
-        9,
-        -1
-      ],
-      [
-        6,
-        5
-      ],
-      [
-        3,
-        11
-      ],
-      [
-        4,
-        1
-      ],
-      [
-        6,
-        -10
-      ],
-      [
-        17,
-        -11
-      ],
-      [
-        0,
-        -3
-      ],
-      [
-        -47,
-        -18
-      ],
-      [
-        -10,
-        -9
-      ],
-      [
-        12,
-        -6
-      ],
-      [
-        12,
-        2
-      ],
-      [
-        12,
-        9
-      ],
-      [
-        14,
-        -1
-      ],
-      [
-        12,
-        -4
-      ],
-      [
-        4,
-        3
-      ],
-      [
-        1,
-        2
-      ],
-      [
-        21,
-        -24
-      ],
-      [
-        7,
-        -3
-      ],
-      [
-        8,
-        2
-      ],
-      [
-        8,
-        9
-      ],
-      [
-        18,
-        12
-      ],
-      [
-        28,
-        15
-      ],
-      [
-        27,
-        6
-      ],
-      [
-        26,
-        -3
-      ],
-      [
-        16,
-        4
-      ],
-      [
-        15,
-        15
-      ],
-      [
-        33,
-        50
-      ],
-      [
-        38,
-        39
-      ],
-      [
-        62,
-        50
-      ],
-      [
-        61,
-        39
-      ]
-    ],
-    [
-      [
-        7655,
-        7027
-      ],
-      [
-        0,
-        -34
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -43
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -43
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -43
-      ]
-    ],
-    [
-      [
-        5236,
-        3667
-      ],
-      [
-        -39,
-        21
-      ],
-      [
-        -10,
-        13
-      ],
-      [
-        -18,
-        15
-      ],
-      [
-        -16,
-        30
-      ],
-      [
-        -32,
-        37
-      ],
-      [
-        -12,
-        9
-      ],
-      [
-        -4,
-        -1
-      ],
-      [
-        -6,
-        -18
-      ],
-      [
-        -17,
-        -15
-      ],
-      [
-        -10,
-        0
-      ],
-      [
-        -16,
-        5
-      ],
-      [
-        -3,
-        5
-      ],
-      [
-        -3,
-        11
-      ],
-      [
-        -6,
-        8
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        -25,
-        -16
-      ],
-      [
-        -3,
-        -11
-      ],
-      [
-        -14,
-        0
-      ],
-      [
-        -14,
-        8
-      ],
-      [
-        -34,
-        -25
-      ],
-      [
-        -12,
-        -19
-      ],
-      [
-        -12,
-        -7
-      ],
-      [
-        -6,
-        -18
-      ],
-      [
-        -4,
-        2
-      ],
-      [
-        -13,
-        23
-      ],
-      [
-        -13,
-        7
-      ],
-      [
-        -18,
-        23
-      ],
-      [
-        -1,
-        20
-      ],
-      [
-        -2,
-        3
-      ],
-      [
-        -3,
-        2
-      ],
-      [
-        -4,
-        -2
-      ],
-      [
-        -8,
-        -17
-      ],
-      [
-        -4,
-        -4
-      ],
-      [
-        -5,
-        0
-      ],
-      [
-        -18,
-        12
-      ],
-      [
-        -7,
-        21
-      ],
-      [
-        -4,
-        6
-      ],
-      [
-        -4,
-        1
-      ],
-      [
-        -7,
-        -6
-      ],
-      [
-        -4,
-        -23
-      ],
-      [
-        -4,
-        -6
-      ],
-      [
-        -7,
-        -4
-      ],
-      [
-        0,
-        -11
-      ],
-      [
-        -6,
-        -32
-      ],
-      [
-        -4,
-        -6
-      ],
-      [
-        -4,
-        1
-      ],
-      [
-        -5,
-        8
-      ],
-      [
-        -3,
-        11
-      ],
-      [
-        -2,
-        10
-      ],
-      [
-        3,
-        25
-      ],
-      [
-        -2,
-        8
-      ],
-      [
-        -3,
-        3
-      ],
-      [
-        -9,
-        -12
-      ],
-      [
-        -7,
-        0
-      ],
-      [
-        -10,
-        -11
-      ],
-      [
-        -6,
-        -4
-      ],
-      [
-        -5,
-        3
-      ],
-      [
-        -9,
-        19
-      ],
-      [
-        -16,
-        12
-      ],
-      [
-        -6,
-        23
-      ],
-      [
-        -3,
-        6
-      ],
-      [
-        -3,
-        2
-      ],
-      [
-        -3,
-        -1
-      ],
-      [
-        -6,
-        -7
-      ],
-      [
-        -18,
-        -30
-      ],
-      [
-        -8,
-        -9
-      ],
-      [
-        -7,
-        -2
-      ],
-      [
-        -7,
-        3
-      ],
-      [
-        -4,
-        8
-      ],
-      [
-        -1,
-        29
-      ],
-      [
-        -4,
-        9
-      ],
-      [
-        -16,
-        19
-      ],
-      [
-        -4,
-        18
-      ],
-      [
-        -1,
-        24
-      ],
-      [
-        -20,
-        -3
-      ],
-      [
-        -25,
-        2
-      ],
-      [
-        -11,
-        -22
-      ],
-      [
-        -6,
-        -4
-      ],
-      [
-        -7,
-        5
-      ],
-      [
-        -20,
-        29
-      ],
-      [
-        -21,
-        -6
-      ],
-      [
-        -12,
-        3
-      ],
-      [
-        -29,
-        22
-      ],
-      [
-        -23,
-        2
-      ],
-      [
-        -10,
-        4
-      ],
-      [
-        -5,
-        5
-      ],
-      [
-        -2,
-        33
-      ],
-      [
-        -9,
-        28
-      ],
-      [
-        -3,
-        8
-      ],
-      [
-        -16,
-        20
-      ],
-      [
-        -2,
-        0
-      ],
-      [
-        -2,
-        -4
-      ],
-      [
-        -4,
-        -22
-      ],
-      [
-        -4,
-        -1
-      ],
-      [
-        -18,
-        6
-      ],
-      [
-        -17,
-        -7
-      ],
-      [
-        -9,
-        11
-      ],
-      [
-        -32,
-        52
-      ],
-      [
-        -12,
-        13
-      ],
-      [
-        -11,
-        4
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        49
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        49
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        49
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ]
-    ],
-    [
-      [
-        258,
-        8704
-      ],
-      [
-        17,
-        10
-      ],
-      [
-        14,
-        -8
-      ],
-      [
-        17,
-        -18
-      ],
-      [
-        17,
-        -55
-      ],
-      [
-        17,
-        -92
-      ],
-      [
-        4,
-        -30
-      ],
-      [
-        13,
-        -19
-      ],
-      [
-        15,
-        -1
-      ],
-      [
-        62,
-        -14
-      ],
-      [
-        9,
-        1
-      ],
-      [
-        12,
-        4
-      ],
-      [
-        35,
-        35
-      ],
-      [
-        38,
-        11
-      ],
-      [
-        45,
-        -2
-      ],
-      [
-        28,
-        -10
-      ],
-      [
-        10,
-        -18
-      ],
-      [
-        24,
-        -1
-      ],
-      [
-        57,
-        20
-      ],
-      [
-        63,
-        14
-      ],
-      [
-        34,
-        15
-      ],
-      [
-        38,
-        31
-      ],
-      [
-        88,
-        38
-      ],
-      [
-        43,
-        5
-      ],
-      [
-        22,
-        14
-      ],
-      [
-        6,
-        8
-      ],
-      [
-        3,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        1
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        42,
-        0
-      ]
-    ],
-    [
-      [
-        83,
-        7031
-      ],
-      [
-        -22,
-        49
-      ],
-      [
-        -9,
-        74
-      ],
-      [
-        -2,
-        30
-      ],
-      [
-        3,
-        82
-      ],
-      [
-        -7,
-        35
-      ],
-      [
-        -16,
-        57
-      ],
-      [
-        7,
-        50
-      ],
-      [
-        7,
-        31
-      ],
-      [
-        19,
-        132
-      ],
-      [
-        4,
-        11
-      ],
-      [
-        8,
-        0
-      ],
-      [
-        14,
-        22
-      ],
-      [
-        -6,
-        5
-      ],
-      [
-        -10,
-        -10
-      ],
-      [
-        9,
-        52
-      ],
-      [
-        9,
-        45
-      ],
-      [
-        6,
-        16
-      ],
-      [
-        3,
-        147
-      ],
-      [
-        6,
-        112
-      ],
-      [
-        9,
-        37
-      ],
-      [
-        -3,
-        38
-      ],
-      [
-        3,
-        51
-      ],
-      [
-        -2,
-        53
-      ],
-      [
-        19,
-        251
-      ],
-      [
-        -3,
-        30
-      ],
-      [
-        6,
-        41
-      ],
-      [
-        -5,
-        107
-      ],
-      [
-        2,
-        120
-      ],
-      [
-        -5,
-        15
-      ],
-      [
-        -2,
-        16
-      ],
-      [
-        4,
-        3
-      ],
-      [
-        9,
-        -18
-      ],
-      [
-        42,
-        0
-      ],
-      [
-        26,
-        17
-      ],
-      [
-        9,
-        -6
-      ],
-      [
-        12,
-        -22
-      ],
-      [
-        14,
-        -4
-      ],
-      [
-        17,
-        4
-      ]
-    ],
-    [
-      [
-        8598,
-        6219
-      ],
-      [
-        -17,
-        -36
-      ],
-      [
-        -26,
-        -12
-      ],
-      [
-        -13,
-        -13
-      ],
-      [
-        -4,
-        -7
-      ]
-    ],
-    [
-      [
-        7835,
-        6114
-      ],
-      [
-        -22,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -22,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -22,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -22,
-        0
-      ],
-      [
-        0,
-        46
-      ],
-      [
-        0,
-        47
-      ],
-      [
-        0,
-        46
-      ],
-      [
-        0,
-        47
-      ],
-      [
-        0,
-        47
-      ],
-      [
-        0,
-        46
-      ],
-      [
-        0,
-        47
-      ],
-      [
-        0,
-        46
-      ]
-    ],
-    [
-      [
-        7655,
-        7027
-      ],
-      [
-        32,
-        20
-      ],
-      [
-        14,
-        14
-      ],
-      [
-        15,
-        14
-      ],
-      [
-        7,
-        8
-      ],
-      [
-        9,
-        7
-      ],
-      [
-        54,
-        52
-      ]
-    ],
-    [
-      [
-        9241,
-        6824
-      ],
-      [
-        -5,
-        -8
-      ],
-      [
-        -2,
-        20
-      ],
-      [
-        3,
-        22
-      ],
-      [
-        4,
-        0
-      ],
-      [
-        1,
-        -11
-      ],
-      [
-        -1,
-        -23
-      ]
-    ],
-    [
-      [
-        9262,
-        6826
-      ],
-      [
-        -9,
-        -11
-      ],
-      [
-        -9,
-        2
-      ],
-      [
-        5,
-        15
-      ],
-      [
-        2,
-        22
-      ],
-      [
-        4,
-        24
-      ],
-      [
-        3,
-        7
-      ],
-      [
-        6,
-        7
-      ],
-      [
-        -2,
-        -66
-      ]
-    ],
-    [
-      [
-        9263,
-        6913
-      ],
-      [
-        -6,
-        -10
-      ],
-      [
-        -7,
-        15
-      ],
-      [
-        -3,
-        17
-      ],
-      [
-        -5,
-        10
-      ],
-      [
-        -6,
-        4
-      ],
-      [
-        5,
-        -38
-      ],
-      [
-        -11,
-        -28
-      ],
-      [
-        -3,
-        -72
-      ],
-      [
-        -14,
-        -30
-      ],
-      [
-        -42,
-        -20
-      ],
-      [
-        -13,
-        2
-      ]
-    ],
-    [
-      [
-        7994,
-        3759
-      ],
-      [
-        -3,
-        -1
-      ],
-      [
-        -45,
-        -60
-      ],
-      [
-        -14,
-        -26
-      ],
-      [
-        -38,
-        -102
-      ],
-      [
-        -10,
-        -65
-      ],
-      [
-        -7,
-        27
-      ],
-      [
-        2,
-        21
-      ],
-      [
-        0,
-        16
-      ],
-      [
-        -10,
-        -36
-      ],
-      [
-        9,
-        -52
-      ],
-      [
-        -8,
-        -20
-      ],
-      [
-        -25,
-        -38
-      ],
-      [
-        -13,
-        -6
-      ],
-      [
-        -16,
-        -10
-      ],
-      [
-        -4,
-        -37
-      ],
-      [
-        -21,
-        -34
-      ],
-      [
-        -12,
-        -15
-      ],
-      [
-        -23,
-        9
-      ],
-      [
-        7,
-        -33
-      ],
-      [
-        -8,
-        -25
-      ],
-      [
-        -14,
-        -19
-      ],
-      [
-        -17,
-        -12
-      ],
-      [
-        -10,
-        1
-      ],
-      [
-        -9,
-        -6
-      ],
-      [
-        -7,
-        -16
-      ],
-      [
-        -16,
-        -15
-      ],
-      [
-        -17,
-        8
-      ],
-      [
-        -19,
-        5
-      ],
-      [
-        -11,
-        -8
-      ],
-      [
-        18,
-        -15
-      ],
-      [
-        10,
-        -21
-      ],
-      [
-        -2,
-        -29
-      ],
-      [
-        -5,
-        -11
-      ],
-      [
-        -12,
-        -15
-      ],
-      [
-        -5,
-        2
-      ],
-      [
-        -3,
-        14
-      ],
-      [
-        -3,
-        28
-      ],
-      [
-        -6,
-        -6
-      ],
-      [
-        0,
-        -13
-      ],
-      [
-        -5,
-        -5
-      ],
-      [
-        -16,
-        45
-      ],
-      [
-        1,
-        -34
-      ],
-      [
-        5,
-        -26
-      ],
-      [
-        6,
-        -14
-      ],
-      [
-        5,
-        -7
-      ],
-      [
-        2,
-        -13
-      ],
-      [
-        -11,
-        -29
-      ],
-      [
-        -6,
-        -7
-      ],
-      [
-        -10,
-        -5
-      ],
-      [
-        -6,
-        -18
-      ],
-      [
-        2,
-        -16
-      ]
-    ],
-    [
-      [
-        3582,
-        7434
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        -1,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ]
-    ],
-    [
-      [
-        7110,
-        4858
-      ],
-      [
-        39,
-        0
-      ],
-      [
-        84,
-        -1
-      ],
-      [
-        59,
-        -1
-      ],
-      [
-        49,
-        0
-      ],
-      [
-        29,
-        0
-      ],
-      [
-        37,
-        -1
-      ],
-      [
-        8,
-        9
-      ],
-      [
-        18,
-        -2
-      ],
-      [
-        24,
-        -2
-      ]
-    ],
-    [
-      [
-        4770,
-        651
-      ],
-      [
-        -2,
-        -18
-      ],
-      [
-        -14,
-        87
-      ],
-      [
-        -24,
-        198
-      ],
-      [
-        0,
-        112
-      ],
-      [
-        3,
-        39
-      ],
-      [
-        6,
-        -159
-      ],
-      [
-        26,
-        -202
-      ],
-      [
-        5,
-        -57
-      ]
-    ],
-    [
-      [
-        4739,
-        1111
-      ],
-      [
-        -6,
-        -24
-      ],
-      [
-        2,
-        35
-      ],
-      [
-        14,
-        78
-      ],
-      [
-        29,
-        104
-      ],
-      [
-        12,
-        17
-      ],
-      [
-        -33,
-        -113
-      ],
-      [
-        -18,
-        -97
-      ]
-    ],
-    [
-      [
-        4798,
-        1353
-      ],
-      [
-        -4,
-        -1
-      ],
-      [
-        8,
-        33
-      ],
-      [
-        2,
-        13
-      ],
-      [
-        13,
-        42
-      ],
-      [
-        8,
-        6
-      ],
-      [
-        3,
-        -18
-      ],
-      [
-        -14,
-        -29
-      ],
-      [
-        -16,
-        -46
-      ]
-    ],
-    [
-      [
-        4841,
-        1454
-      ],
-      [
-        -7,
-        -2
-      ],
-      [
-        8,
-        22
-      ],
-      [
-        13,
-        11
-      ],
-      [
-        28,
-        42
-      ],
-      [
-        12,
-        3
-      ],
-      [
-        6,
-        14
-      ],
-      [
-        2,
-        2
-      ],
-      [
-        -1,
-        -17
-      ],
-      [
-        -23,
-        -25
-      ],
-      [
-        -38,
-        -50
-      ]
-    ],
-    [
-      [
-        5140,
-        1854
-      ],
-      [
-        -9,
-        -4
-      ],
-      [
-        38,
-        62
-      ],
-      [
-        8,
-        21
-      ],
-      [
-        10,
-        -1
-      ],
-      [
-        -17,
-        -35
-      ],
-      [
-        -30,
-        -43
-      ]
-    ],
-    [
-      [
-        5355,
-        2189
-      ],
-      [
-        -8,
-        1
-      ],
-      [
-        -18,
-        -66
-      ],
-      [
-        10,
-        -38
-      ],
-      [
-        0,
-        -13
-      ],
-      [
-        -37,
-        -8
-      ],
-      [
-        -82,
-        -75
-      ],
-      [
-        -32,
-        -40
-      ],
-      [
-        2,
-        14
-      ],
-      [
-        39,
-        52
-      ],
-      [
-        -14,
-        8
-      ],
-      [
-        -22,
-        -13
-      ],
-      [
-        -8,
-        5
-      ],
-      [
-        9,
-        43
-      ],
-      [
-        -3,
-        38
-      ],
-      [
-        -15,
-        1
-      ],
-      [
-        -10,
-        -30
-      ],
-      [
-        -7,
-        1
-      ],
-      [
-        -9,
-        13
-      ],
-      [
-        -7,
-        -4
-      ],
-      [
-        5,
-        -69
-      ],
-      [
-        10,
-        -28
-      ],
-      [
-        8,
-        -36
-      ],
-      [
-        -23,
-        -45
-      ],
-      [
-        -21,
-        -37
-      ],
-      [
-        -2,
-        -36
-      ],
-      [
-        -21,
-        -46
-      ],
-      [
-        -20,
-        -27
-      ],
-      [
-        -46,
-        -62
-      ],
-      [
-        -13,
-        -13
-      ],
-      [
-        -21,
-        -29
-      ],
-      [
-        -29,
-        -21
-      ],
-      [
-        -28,
-        -34
-      ],
-      [
-        -9,
-        -6
-      ],
-      [
-        17,
-        29
-      ],
-      [
-        21,
-        29
-      ],
-      [
-        -18,
-        -4
-      ],
-      [
-        -27,
-        13
-      ],
-      [
-        -17,
-        1
-      ],
-      [
-        -1,
-        -10
-      ],
-      [
-        -12,
-        -15
-      ],
-      [
-        -14,
-        22
-      ],
-      [
-        -6,
-        14
-      ],
-      [
-        -2,
-        13
-      ],
-      [
-        -6,
-        3
-      ],
-      [
-        -6,
-        -6
-      ],
-      [
-        20,
-        -89
-      ],
-      [
-        9,
-        -3
-      ],
-      [
-        9,
-        -9
-      ],
-      [
-        -11,
-        -21
-      ],
-      [
-        -13,
-        -16
-      ],
-      [
-        -20,
-        -10
-      ],
-      [
-        -17,
-        32
-      ],
-      [
-        -3,
-        -40
-      ],
-      [
-        -3,
-        -41
-      ],
-      [
-        -5,
-        -10
-      ],
-      [
-        -9,
-        -15
-      ],
-      [
-        -5,
-        11
-      ],
-      [
-        -2,
-        16
-      ],
-      [
-        -6,
-        -14
-      ],
-      [
-        -9,
-        -11
-      ],
-      [
-        -14,
-        -2
-      ],
-      [
-        -10,
-        -5
-      ],
-      [
-        0,
-        -17
-      ],
-      [
-        3,
-        -17
-      ],
-      [
-        18,
-        13
-      ],
-      [
-        -7,
-        -43
-      ],
-      [
-        -17,
-        -43
-      ],
-      [
-        -14,
-        -10
-      ],
-      [
-        -21,
-        6
-      ],
-      [
-        -5,
-        -4
-      ],
-      [
-        -5,
-        -9
-      ],
-      [
-        25,
-        -67
-      ],
-      [
-        -16,
-        -101
-      ],
-      [
-        -10,
-        -37
-      ],
-      [
-        -7,
-        -5
-      ],
-      [
-        -8,
-        -1
-      ],
-      [
-        -27,
-        33
-      ],
-      [
-        -15,
-        25
-      ],
-      [
-        13,
-        -69
-      ],
-      [
-        36,
-        -20
-      ],
-      [
-        2,
-        -26
-      ],
-      [
-        0,
-        -22
-      ],
-      [
-        -7,
-        -26
-      ],
-      [
-        -7,
-        -34
-      ],
-      [
-        5,
-        -24
-      ],
-      [
-        5,
-        -60
-      ],
-      [
-        5,
-        -27
-      ],
-      [
-        6,
-        -83
-      ],
-      [
-        5,
-        -36
-      ],
-      [
-        33,
-        -133
-      ],
-      [
-        11,
-        -1
-      ],
-      [
-        2,
-        -14
-      ],
-      [
-        -1,
-        -27
-      ],
-      [
-        -24,
-        -8
-      ],
-      [
-        -10,
-        -13
-      ],
-      [
-        -2,
-        -10
-      ],
-      [
-        -1,
-        -6
-      ],
-      [
-        -3,
-        0
-      ],
-      [
-        -11,
-        8
-      ],
-      [
-        -26,
-        38
-      ],
-      [
-        -37,
-        23
-      ],
-      [
-        -49,
-        9
-      ],
-      [
-        -33,
-        19
-      ],
-      [
-        -18,
-        29
-      ],
-      [
-        -18,
-        17
-      ],
-      [
-        -20,
-        5
-      ],
-      [
-        -16,
-        15
-      ],
-      [
-        -13,
-        26
-      ],
-      [
-        -18,
-        17
-      ],
-      [
-        -25,
-        7
-      ],
-      [
-        -16,
-        19
-      ],
-      [
-        -11,
-        47
-      ],
-      [
-        0,
-        1
-      ],
-      [
-        -10,
-        79
-      ],
-      [
-        -13,
-        49
-      ],
-      [
-        -24,
-        62
-      ],
-      [
-        -2,
-        8
-      ],
-      [
-        -1,
-        10
-      ],
-      [
-        3,
-        35
-      ],
-      [
-        -2,
-        26
-      ],
-      [
-        -8,
-        21
-      ],
-      [
-        -2,
-        22
-      ],
-      [
-        4,
-        23
-      ],
-      [
-        1,
-        28
-      ],
-      [
-        -4,
-        33
-      ],
-      [
-        -16,
-        35
-      ],
-      [
-        -27,
-        38
-      ],
-      [
-        -24,
-        55
-      ],
-      [
-        -19,
-        73
-      ],
-      [
-        -19,
-        50
-      ],
-      [
-        -19,
-        28
-      ],
-      [
-        -13,
-        35
-      ],
-      [
-        -7,
-        40
-      ],
-      [
-        -2,
-        23
-      ],
-      [
-        3,
-        7
-      ],
-      [
-        -12,
-        45
-      ],
-      [
-        -26,
-        83
-      ],
-      [
-        -15,
-        61
-      ],
-      [
-        -4,
-        39
-      ],
-      [
-        -16,
-        46
-      ],
-      [
-        -30,
-        53
-      ],
-      [
-        -16,
-        35
-      ],
-      [
-        -4,
-        24
-      ],
-      [
-        -45,
-        70
-      ],
-      [
-        -14,
-        43
-      ],
-      [
-        -10,
-        14
-      ],
-      [
-        -12,
-        -1
-      ],
-      [
-        -6,
-        4
-      ],
-      [
-        -1,
-        10
-      ],
-      [
-        -3,
-        0
-      ],
-      [
-        -8,
-        -9
-      ],
-      [
-        -24,
-        -2
-      ],
-      [
-        -42,
-        6
-      ],
-      [
-        -29,
-        12
-      ],
-      [
-        -19,
-        18
-      ],
-      [
-        -13,
-        -2
-      ],
-      [
-        -7,
-        -24
-      ],
-      [
-        -16,
-        -15
-      ],
-      [
-        -24,
-        -7
-      ],
-      [
-        -20,
-        -43
-      ],
-      [
-        -18,
-        -81
-      ],
-      [
-        -7,
-        -52
-      ],
-      [
-        2,
-        -23
-      ],
-      [
-        -5,
-        -17
-      ],
-      [
-        -11,
-        -10
-      ],
-      [
-        -11,
-        -23
-      ],
-      [
-        -12,
-        -37
-      ],
-      [
-        -13,
-        -17
-      ],
-      [
-        -16,
-        1
-      ],
-      [
-        -29,
-        28
-      ],
-      [
-        -41,
-        55
-      ],
-      [
-        -33,
-        34
-      ],
-      [
-        -24,
-        12
-      ],
-      [
-        -21,
-        26
-      ],
-      [
-        -18,
-        38
-      ],
-      [
-        -17,
-        25
-      ],
-      [
-        -15,
-        12
-      ],
-      [
-        -18,
-        42
-      ],
-      [
-        -20,
-        71
-      ],
-      [
-        -11,
-        55
-      ],
-      [
-        0,
-        58
-      ],
-      [
-        -26,
-        126
-      ],
-      [
-        -15,
-        55
-      ],
-      [
-        -10,
-        25
-      ],
-      [
-        -21,
-        30
-      ],
-      [
-        -31,
-        35
-      ],
-      [
-        -41,
-        70
-      ],
-      [
-        -52,
-        105
-      ],
-      [
-        -36,
-        63
-      ],
-      [
-        -22,
-        21
-      ],
-      [
-        -18,
-        38
-      ],
-      [
-        -16,
-        54
-      ],
-      [
-        -16,
-        35
-      ],
-      [
-        -1,
-        1
-      ]
-    ],
-    [
-      [
-        2366,
-        7031
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -51
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -51
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        44,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        44,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        44,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        43,
-        0
-      ]
-    ],
-    [
-      [
-        8546,
-        5430
-      ],
-      [
-        -38,
-        -159
-      ],
-      [
-        1,
-        -29
-      ],
-      [
-        -7,
-        -9
-      ],
-      [
-        -12,
-        -8
-      ],
-      [
-        -12,
-        -17
-      ],
-      [
-        -8,
-        -20
-      ],
-      [
-        -7,
-        -51
-      ],
-      [
-        -14,
-        -59
-      ],
-      [
-        -9,
-        25
-      ],
-      [
-        -2,
-        20
-      ],
-      [
-        4,
-        55
-      ],
-      [
-        15,
-        89
-      ],
-      [
-        17,
-        55
-      ],
-      [
-        12,
-        26
-      ],
-      [
-        11,
-        53
-      ]
-    ],
-    [
-      [
-        8572,
-        5436
-      ],
-      [
-        -19,
-        -61
-      ],
-      [
-        -8,
-        -7
-      ],
-      [
-        22,
-        67
-      ]
-    ],
-    [
-      [
-        8259,
-        5778
-      ],
-      [
-        -2,
-        -46
-      ],
-      [
-        -8,
-        -22
-      ],
-      [
-        -13,
-        -18
-      ],
-      [
-        -17,
-        -30
-      ],
-      [
-        -4,
-        -29
-      ],
-      [
-        -5,
-        -53
-      ],
-      [
-        7,
-        -18
-      ],
-      [
-        7,
-        -5
-      ],
-      [
-        21,
-        12
-      ],
-      [
-        11,
-        -5
-      ],
-      [
-        25,
-        -65
-      ],
-      [
-        45,
-        -25
-      ],
-      [
-        17,
-        -16
-      ],
-      [
-        13,
-        -34
-      ],
-      [
-        20,
-        -19
-      ],
-      [
-        16,
-        -28
-      ],
-      [
-        0,
-        -18
-      ],
-      [
-        -5,
-        -22
-      ],
-      [
-        -2,
-        -29
-      ],
-      [
-        -7,
-        -19
-      ],
-      [
-        -16,
-        -2
-      ],
-      [
-        -10,
-        5
-      ],
-      [
-        -52,
-        103
-      ],
-      [
-        -6,
-        9
-      ],
-      [
-        -19,
-        54
-      ],
-      [
-        -23,
-        29
-      ],
-      [
-        -7,
-        0
-      ],
-      [
-        32,
-        -54
-      ],
-      [
-        14,
-        -37
-      ],
-      [
-        23,
-        -52
-      ],
-      [
-        16,
-        -23
-      ],
-      [
-        13,
-        -34
-      ],
-      [
-        11,
-        -17
-      ],
-      [
-        31,
-        -23
-      ],
-      [
-        -11,
-        -16
-      ],
-      [
-        17,
-        -14
-      ],
-      [
-        3,
-        -26
-      ],
-      [
-        -2,
-        -30
-      ],
-      [
-        -24,
-        12
-      ],
-      [
-        0,
-        -22
-      ],
-      [
-        2,
-        -13
-      ],
-      [
-        -11,
-        -11
-      ],
-      [
-        -15,
-        15
-      ],
-      [
-        -38,
-        79
-      ],
-      [
-        1,
-        -11
-      ],
-      [
-        3,
-        -12
-      ],
-      [
-        22,
-        -51
-      ],
-      [
-        20,
-        -30
-      ],
-      [
-        16,
-        -14
-      ],
-      [
-        13,
-        -26
-      ],
-      [
-        5,
-        -15
-      ],
-      [
-        3,
-        -24
-      ],
-      [
-        -10,
-        -15
-      ],
-      [
-        -11,
-        -9
-      ],
-      [
-        -10,
-        16
-      ],
-      [
-        -8,
-        16
-      ],
-      [
-        -17,
-        29
-      ],
-      [
-        -5,
-        32
-      ],
-      [
-        -12,
-        -2
-      ],
-      [
-        -53,
-        40
-      ],
-      [
-        -42,
-        5
-      ],
-      [
-        4,
-        -8
-      ],
-      [
-        6,
-        -6
-      ],
-      [
-        33,
-        -10
-      ],
-      [
-        13,
-        -18
-      ],
-      [
-        28,
-        -17
-      ],
-      [
-        16,
-        -4
-      ],
-      [
-        7,
-        -51
-      ],
-      [
-        22,
-        -34
-      ],
-      [
-        3,
-        -26
-      ],
-      [
-        16,
-        -3
-      ],
-      [
-        26,
-        25
-      ],
-      [
-        18,
-        -9
-      ],
-      [
-        25,
-        -7
-      ],
-      [
-        6,
-        -20
-      ],
-      [
-        4,
-        -39
-      ],
-      [
-        9,
-        -44
-      ],
-      [
-        5,
-        -43
-      ]
-    ],
-    [
-      [
-        8457,
-        4836
-      ],
-      [
-        -13,
-        1
-      ]
-    ],
-    [
-      [
-        7404,
-        5235
-      ],
-      [
-        2,
-        -13
-      ],
-      [
-        -3,
-        -14
-      ],
-      [
-        6,
-        -17
-      ],
-      [
-        4,
-        -25
-      ],
-      [
-        7,
-        -16
-      ],
-      [
-        8,
-        -13
-      ],
-      [
-        13,
-        -11
-      ],
-      [
-        16,
-        -19
-      ],
-      [
-        13,
-        -6
-      ],
-      [
-        4,
-        1
-      ],
-      [
-        14,
-        19
-      ],
-      [
-        11,
-        10
-      ],
-      [
-        12,
-        21
-      ],
-      [
-        21,
-        -29
-      ],
-      [
-        9,
-        0
-      ],
-      [
-        21,
-        13
-      ],
-      [
-        19,
-        3
-      ],
-      [
-        5,
-        4
-      ],
-      [
-        8,
-        11
-      ],
-      [
-        0,
-        24
-      ],
-      [
-        1,
-        6
-      ],
-      [
-        4,
-        3
-      ],
-      [
-        4,
-        1
-      ],
-      [
-        8,
-        -9
-      ],
-      [
-        9,
-        0
-      ],
-      [
-        37,
-        27
-      ],
-      [
-        3,
-        -2
-      ],
-      [
-        4,
-        -13
-      ],
-      [
-        17,
-        17
-      ],
-      [
-        9,
-        14
-      ],
-      [
-        4,
-        23
-      ],
-      [
-        8,
-        22
-      ],
-      [
-        -1,
-        10
-      ],
-      [
-        -6,
-        13
-      ],
-      [
-        7,
-        30
-      ],
-      [
-        10,
-        29
-      ],
-      [
-        38,
-        90
-      ],
-      [
-        12,
-        54
-      ],
-      [
-        15,
-        35
-      ],
-      [
-        5,
-        27
-      ],
-      [
-        12,
-        28
-      ],
-      [
-        8,
-        56
-      ],
-      [
-        5,
-        12
-      ],
-      [
-        8,
-        1
-      ],
-      [
-        7,
-        -7
-      ],
-      [
-        5,
-        -10
-      ],
-      [
-        4,
-        -17
-      ],
-      [
-        18,
-        -15
-      ],
-      [
-        16,
-        -2
-      ],
-      [
-        11,
-        11
-      ],
-      [
-        7,
-        20
-      ],
-      [
-        9,
-        37
-      ],
-      [
-        8,
-        22
-      ],
-      [
-        5,
-        28
-      ],
-      [
-        6,
-        19
-      ],
-      [
-        8,
-        12
-      ],
-      [
-        22,
-        -1
-      ],
-      [
-        11,
-        17
-      ],
-      [
-        8,
-        20
-      ],
-      [
-        5,
-        6
-      ],
-      [
-        6,
-        -1
-      ],
-      [
-        20,
-        31
-      ],
-      [
-        25,
-        65
-      ],
-      [
-        5,
-        41
-      ],
-      [
-        7,
-        30
-      ],
-      [
-        2,
-        30
-      ],
-      [
-        5,
-        17
-      ],
-      [
-        23,
-        -33
-      ],
-      [
-        13,
-        -19
-      ],
-      [
-        29,
-        -43
-      ],
-      [
-        20,
-        -29
-      ],
-      [
-        7,
-        33
-      ],
-      [
-        12,
-        48
-      ]
-    ],
-    [
-      [
-        8896,
-        8241
-      ],
-      [
-        30,
-        0
-      ],
-      [
-        72,
-        1
-      ],
-      [
-        72,
-        0
-      ],
-      [
-        72,
-        0
-      ],
-      [
-        72,
-        0
-      ]
-    ],
-    [
-      [
-        322,
-        9127
-      ],
-      [
-        -2,
-        -8
-      ],
-      [
-        -2,
-        1
-      ],
-      [
-        -6,
-        16
-      ],
-      [
-        -1,
-        11
-      ],
-      [
-        5,
-        8
-      ],
-      [
-        6,
-        -23
-      ],
-      [
-        0,
-        -5
-      ]
-    ],
-    [
-      [
-        401,
-        9204
-      ],
-      [
-        -1,
-        -9
-      ],
-      [
-        -6,
-        -7
-      ],
-      [
-        -4,
-        1
-      ],
-      [
-        0,
-        11
-      ],
-      [
-        -2,
-        2
-      ],
-      [
-        -7,
-        -13
-      ],
-      [
-        1,
-        25
-      ],
-      [
-        3,
-        27
-      ],
-      [
-        3,
-        1
-      ],
-      [
-        5,
-        -18
-      ],
-      [
-        8,
-        -20
-      ]
-    ],
-    [
-      [
-        383,
-        9284
-      ],
-      [
-        -1,
-        -8
-      ],
-      [
-        -9,
-        10
-      ],
-      [
-        -3,
-        8
-      ],
-      [
-        0,
-        19
-      ],
-      [
-        2,
-        13
-      ],
-      [
-        2,
-        2
-      ],
-      [
-        6,
-        -5
-      ],
-      [
-        1,
-        -3
-      ],
-      [
-        2,
-        -36
-      ]
-    ],
-    [
-      [
-        370,
-        9510
-      ],
-      [
-        9,
-        -52
-      ],
-      [
-        3,
-        22
-      ],
-      [
-        24,
-        -38
-      ],
-      [
-        0,
-        -19
-      ],
-      [
-        -3,
-        -7
-      ],
-      [
-        -5,
-        -2
-      ],
-      [
-        -4,
-        6
-      ],
-      [
-        -5,
-        13
-      ],
-      [
-        -5,
-        7
-      ],
-      [
-        -11,
-        4
-      ],
-      [
-        -6,
-        15
-      ],
-      [
-        -2,
-        11
-      ],
-      [
-        -1,
-        29
-      ],
-      [
-        -2,
-        9
-      ],
-      [
-        -6,
-        2
-      ],
-      [
-        -6,
-        7
-      ],
-      [
-        -9,
-        21
-      ],
-      [
-        -1,
-        6
-      ],
-      [
-        4,
-        17
-      ],
-      [
-        10,
-        28
-      ],
-      [
-        7,
-        13
-      ],
-      [
-        4,
-        -1
-      ],
-      [
-        5,
-        -9
-      ],
-      [
-        7,
-        -15
-      ],
-      [
-        -2,
-        -11
-      ],
-      [
-        -25,
-        -22
-      ],
-      [
-        -1,
-        -5
-      ],
-      [
-        12,
-        -6
-      ],
-      [
-        5,
-        -5
-      ],
-      [
-        4,
-        -18
-      ]
-    ],
-    [
-      [
-        327,
-        9621
-      ],
-      [
-        -2,
-        -4
-      ],
-      [
-        -10,
-        5
-      ],
-      [
-        -5,
-        9
-      ],
-      [
-        -2,
-        12
-      ],
-      [
-        3,
-        21
-      ],
-      [
-        5,
-        6
-      ],
-      [
-        3,
-        -2
-      ],
-      [
-        1,
-        -19
-      ],
-      [
-        8,
-        -19
-      ],
-      [
-        -1,
-        -9
-      ]
-    ],
-    [
-      [
-        294,
-        9649
-      ],
-      [
-        5,
-        -13
-      ],
-      [
-        -19,
-        8
-      ],
-      [
-        -8,
-        8
-      ],
-      [
-        -2,
-        7
-      ],
-      [
-        -3,
-        25
-      ],
-      [
-        1,
-        8
-      ],
-      [
-        8,
-        2
-      ],
-      [
-        16,
-        -30
-      ],
-      [
-        2,
-        -15
-      ]
-    ],
-    [
-      [
-        334,
-        9718
-      ],
-      [
-        2,
-        -8
-      ],
-      [
-        -7,
-        -9
-      ],
-      [
-        -5,
-        -1
-      ],
-      [
-        -8,
-        13
-      ],
-      [
-        -3,
-        2
-      ],
-      [
-        3,
-        -21
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        -16,
-        13
-      ],
-      [
-        -3,
-        10
-      ],
-      [
-        4,
-        11
-      ],
-      [
-        10,
-        11
-      ],
-      [
-        4,
-        1
-      ],
-      [
-        20,
-        -15
-      ]
-    ],
-    [
-      [
-        288,
-        9847
-      ],
-      [
-        -3,
-        -6
-      ],
-      [
-        -2,
-        1
-      ],
-      [
-        -2,
-        5
-      ],
-      [
-        7,
-        0
-      ]
-    ],
-    [
-      [
-        258,
-        8704
-      ],
-      [
-        -5,
-        5
-      ],
-      [
-        -9,
-        2
-      ],
-      [
-        -18,
-        20
-      ],
-      [
-        -10,
-        20
-      ],
-      [
-        -32,
-        -1
-      ],
-      [
-        -7,
-        13
-      ],
-      [
-        -36,
-        -13
-      ],
-      [
-        -11,
-        13
-      ],
-      [
-        -20,
-        -9
-      ],
-      [
-        5,
-        38
-      ],
-      [
-        -1,
-        47
-      ],
-      [
-        1,
-        47
-      ],
-      [
-        5,
-        -34
-      ],
-      [
-        12,
-        -36
-      ],
-      [
-        6,
-        41
-      ],
-      [
-        4,
-        51
-      ],
-      [
-        -12,
-        19
-      ],
-      [
-        -19,
-        15
-      ],
-      [
-        -8,
-        47
-      ],
-      [
-        47,
-        41
-      ],
-      [
-        -25,
-        8
-      ],
-      [
-        -9,
-        19
-      ],
-      [
-        -12,
-        2
-      ],
-      [
-        -1,
-        -14
-      ],
-      [
-        -4,
-        -19
-      ],
-      [
-        -4,
-        25
-      ],
-      [
-        -2,
-        29
-      ],
-      [
-        -4,
-        49
-      ],
-      [
-        -20,
-        79
-      ],
-      [
-        -11,
-        102
-      ],
-      [
-        -15,
-        50
-      ],
-      [
-        -28,
-        49
-      ],
-      [
-        -7,
-        28
-      ],
-      [
-        -7,
-        71
-      ],
-      [
-        4,
-        55
-      ],
-      [
-        -5,
-        38
-      ],
-      [
-        13,
-        -3
-      ],
-      [
-        36,
-        -29
-      ],
-      [
-        44,
-        -24
-      ],
-      [
-        13,
-        -17
-      ],
-      [
-        21,
-        -13
-      ],
-      [
-        118,
-        -19
-      ],
-      [
-        8,
-        1
-      ],
-      [
-        15,
-        13
-      ],
-      [
-        7,
-        -2
-      ],
-      [
-        17,
-        -28
-      ],
-      [
-        9,
-        -3
-      ],
-      [
-        11,
-        1
-      ],
-      [
-        8,
-        6
-      ],
-      [
-        15,
-        19
-      ],
-      [
-        1,
-        -7
-      ],
-      [
-        0,
-        -18
-      ],
-      [
-        5,
-        -25
-      ],
-      [
-        11,
-        -33
-      ],
-      [
-        4,
-        -20
-      ],
-      [
-        -21,
-        -58
-      ],
-      [
-        -4,
-        -1
-      ],
-      [
-        -1,
-        19
-      ],
-      [
-        -3,
-        4
-      ],
-      [
-        -40,
-        -97
-      ],
-      [
-        -13,
-        -46
-      ],
-      [
-        -2,
-        -21
-      ],
-      [
-        1,
-        -12
-      ],
-      [
-        5,
-        -3
-      ],
-      [
-        13,
-        5
-      ],
-      [
-        19,
-        19
-      ],
-      [
-        1,
-        4
-      ],
-      [
-        -18,
-        -7
-      ],
-      [
-        -8,
-        0
-      ],
-      [
-        1,
-        21
-      ],
-      [
-        2,
-        11
-      ],
-      [
-        11,
-        32
-      ],
-      [
-        12,
-        19
-      ],
-      [
-        17,
-        21
-      ],
-      [
-        10,
-        17
-      ],
-      [
-        7,
-        25
-      ],
-      [
-        19,
-        29
-      ],
-      [
-        4,
-        8
-      ],
-      [
-        -1,
-        25
-      ],
-      [
-        1,
-        4
-      ],
-      [
-        9,
-        -3
-      ],
-      [
-        4,
-        -42
-      ],
-      [
-        -2,
-        -19
-      ],
-      [
-        -17,
-        -22
-      ],
-      [
-        -2,
-        -8
-      ],
-      [
-        3,
-        -31
-      ],
-      [
-        -2,
-        -3
-      ],
-      [
-        -7,
-        3
-      ],
-      [
-        -2,
-        -2
-      ],
-      [
-        16,
-        -34
-      ],
-      [
-        5,
-        -26
-      ],
-      [
-        1,
-        -23
-      ],
-      [
-        -5,
-        -45
-      ],
-      [
-        -4,
-        -8
-      ],
-      [
-        -8,
-        3
-      ],
-      [
-        -10,
-        14
-      ],
-      [
-        -2,
-        -4
-      ],
-      [
-        -9,
-        -35
-      ],
-      [
-        -2,
-        3
-      ],
-      [
-        -5,
-        41
-      ],
-      [
-        -3,
-        3
-      ],
-      [
-        -16,
-        -19
-      ],
-      [
-        -6,
-        -18
-      ],
-      [
-        -6,
-        -29
-      ],
-      [
-        -7,
-        -13
-      ],
-      [
-        20,
-        -3
-      ],
-      [
-        18,
-        5
-      ],
-      [
-        14,
-        -13
-      ],
-      [
-        5,
-        -1
-      ],
-      [
-        13,
-        14
-      ],
-      [
-        4,
-        9
-      ],
-      [
-        11,
-        44
-      ],
-      [
-        5,
-        7
-      ],
-      [
-        8,
-        1
-      ],
-      [
-        8,
-        6
-      ],
-      [
-        11,
-        24
-      ],
-      [
-        1,
-        10
-      ],
-      [
-        -5,
-        53
-      ],
-      [
-        2,
-        31
-      ],
-      [
-        -3,
-        9
-      ],
-      [
-        -5,
-        10
-      ],
-      [
-        1,
-        10
-      ],
-      [
-        4,
-        16
-      ],
-      [
-        0,
-        15
-      ],
-      [
-        -3,
-        12
-      ],
-      [
-        1,
-        15
-      ],
-      [
-        11,
-        32
-      ],
-      [
-        2,
-        13
-      ],
-      [
-        14,
-        32
-      ],
-      [
-        -4,
-        12
-      ],
-      [
-        -10,
-        16
-      ],
-      [
-        -6,
-        13
-      ],
-      [
-        -6,
-        21
-      ],
-      [
-        -5,
-        7
-      ],
-      [
-        -1,
-        -3
-      ],
-      [
-        6,
-        -34
-      ],
-      [
-        -1,
-        -3
-      ],
-      [
-        -17,
-        19
-      ],
-      [
-        -4,
-        12
-      ],
-      [
-        -2,
-        16
-      ],
-      [
-        1,
-        12
-      ],
-      [
-        10,
-        11
-      ],
-      [
-        11,
-        5
-      ],
-      [
-        -1,
-        10
-      ],
-      [
-        -14,
-        32
-      ],
-      [
-        -9,
-        15
-      ],
-      [
-        -7,
-        7
-      ],
-      [
-        -10,
-        2
-      ],
-      [
-        -4,
-        5
-      ],
-      [
-        -1,
-        8
-      ],
-      [
-        2,
-        10
-      ],
-      [
-        5,
-        3
-      ],
-      [
-        14,
-        -4
-      ],
-      [
-        8,
-        7
-      ],
-      [
-        0,
-        13
-      ],
-      [
-        -3,
-        7
-      ],
-      [
-        1,
-        46
-      ],
-      [
-        -6,
-        37
-      ],
-      [
-        -3,
-        7
-      ],
-      [
-        -3,
-        0
-      ],
-      [
-        -3,
-        -5
-      ],
-      [
-        -10,
-        -1
-      ],
-      [
-        -5,
-        12
-      ],
-      [
-        -7,
-        24
-      ],
-      [
-        -11,
-        56
-      ],
-      [
-        18,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        18,
-        0
-      ]
-    ],
-    [
-      [
-        6534,
-        8336
-      ],
-      [
-        -4,
-        -5
-      ],
-      [
-        -5,
-        3
-      ],
-      [
-        -2,
-        -7
-      ],
-      [
-        1,
-        -19
-      ],
-      [
-        -2,
-        -8
-      ],
-      [
-        -4,
-        1
-      ],
-      [
-        -1,
-        -3
-      ],
-      [
-        5,
-        -9
-      ],
-      [
-        0,
-        -9
-      ],
-      [
-        -3,
-        -9
-      ],
-      [
-        -3,
-        -5
-      ],
-      [
-        -3,
-        1
-      ],
-      [
-        -5,
-        -11
-      ],
-      [
-        -7,
-        -24
-      ],
-      [
-        -2,
-        -13
-      ],
-      [
-        2,
-        -4
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        -16,
-        -35
-      ],
-      [
-        -6,
-        -4
-      ],
-      [
-        -7,
-        5
-      ],
-      [
-        -5,
-        10
-      ],
-      [
-        -3,
-        16
-      ],
-      [
-        -1,
-        12
-      ],
-      [
-        2,
-        9
-      ],
-      [
-        14,
-        31
-      ],
-      [
-        6,
-        20
-      ],
-      [
-        3,
-        23
-      ],
-      [
-        7,
-        14
-      ],
-      [
-        9,
-        6
-      ],
-      [
-        8,
-        15
-      ],
-      [
-        6,
-        22
-      ],
-      [
-        7,
-        9
-      ],
-      [
-        7,
-        -3
-      ],
-      [
-        4,
-        -8
-      ],
-      [
-        -1,
-        -14
-      ]
-    ],
-    [
-      [
-        6556,
-        8381
-      ],
-      [
-        -5,
-        -4
-      ],
-      [
-        -10,
-        1
-      ],
-      [
-        -3,
-        9
-      ],
-      [
-        5,
-        24
-      ],
-      [
-        2,
-        -5
-      ],
-      [
-        8,
-        0
-      ],
-      [
-        3,
-        -2
-      ],
-      [
-        1,
-        -6
-      ],
-      [
-        -1,
-        -17
-      ]
-    ],
-    [
-      [
-        5890,
-        8957
-      ],
-      [
-        -10,
-        -5
-      ],
-      [
-        -5,
-        1
-      ],
-      [
-        2,
-        7
-      ],
-      [
-        5,
-        10
-      ],
-      [
-        23,
-        22
-      ],
-      [
-        4,
-        0
-      ],
-      [
-        2,
-        -6
-      ],
-      [
-        -12,
-        -11
-      ],
-      [
-        -4,
-        -6
-      ],
-      [
-        0,
-        -6
-      ],
-      [
-        -5,
-        -6
-      ]
-    ],
-    [
-      [
-        5918,
-        9012
-      ],
-      [
-        -6,
-        -2
-      ],
-      [
-        -12,
-        3
-      ],
-      [
-        0,
-        6
-      ],
-      [
-        13,
-        8
-      ],
-      [
-        6,
-        3
-      ],
-      [
-        1,
-        -4
-      ],
-      [
-        -2,
-        -14
-      ]
-    ],
-    [
-      [
-        6427,
-        8283
-      ],
-      [
-        0,
-        -11
-      ],
-      [
-        -3,
-        -20
-      ],
-      [
-        -10,
-        -16
-      ],
-      [
-        -26,
-        -20
-      ],
-      [
-        -4,
-        -14
-      ],
-      [
-        0,
-        -11
-      ],
-      [
-        -17,
-        -47
-      ],
-      [
-        -8,
-        -29
-      ],
-      [
-        -5,
-        -30
-      ],
-      [
-        2,
-        -19
-      ],
-      [
-        8,
-        -7
-      ],
-      [
-        7,
-        3
-      ],
-      [
-        6,
-        13
-      ],
-      [
-        8,
-        13
-      ],
-      [
-        11,
-        11
-      ],
-      [
-        8,
-        16
-      ],
-      [
-        11,
-        40
-      ],
-      [
-        13,
-        22
-      ],
-      [
-        6,
-        2
-      ],
-      [
-        2,
-        -1
-      ],
-      [
-        13,
-        10
-      ],
-      [
-        11,
-        -3
-      ],
-      [
-        6,
-        -15
-      ],
-      [
-        6,
-        -11
-      ],
-      [
-        2,
-        -10
-      ],
-      [
-        -3,
-        -22
-      ],
-      [
-        -6,
-        -24
-      ],
-      [
-        -9,
-        -25
-      ],
-      [
-        -8,
-        -37
-      ],
-      [
-        -7,
-        -49
-      ],
-      [
-        -2,
-        -38
-      ],
-      [
-        5,
-        -25
-      ],
-      [
-        -4,
-        -22
-      ],
-      [
-        -12,
-        -20
-      ],
-      [
-        -10,
-        -27
-      ],
-      [
-        -7,
-        -33
-      ],
-      [
-        -4,
-        -28
-      ],
-      [
-        -1,
-        -23
-      ],
-      [
-        1,
-        -16
-      ],
-      [
-        4,
-        -23
-      ],
-      [
-        0,
-        -12
-      ],
-      [
-        -13,
-        -50
-      ],
-      [
-        -4,
-        -25
-      ],
-      [
-        -1,
-        -19
-      ],
-      [
-        -3,
-        -19
-      ],
-      [
-        -10,
-        -39
-      ],
-      [
-        -3,
-        -21
-      ],
-      [
-        -1,
-        -20
-      ],
-      [
-        2,
-        -32
-      ],
-      [
-        -1,
-        -11
-      ],
-      [
-        1,
-        -8
-      ],
-      [
-        2,
-        -6
-      ],
-      [
-        0,
-        -10
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        0,
-        -11
-      ],
-      [
-        5,
-        -9
-      ],
-      [
-        3,
-        -15
-      ],
-      [
-        1,
-        -23
-      ],
-      [
-        3,
-        -20
-      ],
-      [
-        6,
-        -15
-      ],
-      [
-        1,
-        -23
-      ],
-      [
-        -4,
-        -29
-      ],
-      [
-        -1,
-        -55
-      ],
-      [
-        0,
-        -19
-      ]
-    ],
-    [
-      [
-        5648,
-        8949
-      ],
-      [
-        6,
-        -11
-      ],
-      [
-        14,
-        -15
-      ],
-      [
-        12,
-        -1
-      ],
-      [
-        15,
-        3
-      ],
-      [
-        58,
-        25
-      ],
-      [
-        25,
-        18
-      ],
-      [
-        24,
-        31
-      ],
-      [
-        2,
-        1
-      ],
-      [
-        10,
-        -6
-      ],
-      [
-        3,
-        -3
-      ],
-      [
-        32,
-        35
-      ],
-      [
-        10,
-        4
-      ],
-      [
-        8,
-        0
-      ],
-      [
-        10,
-        -14
-      ],
-      [
-        3,
-        -8
-      ],
-      [
-        -4,
-        -16
-      ],
-      [
-        -9,
-        -24
-      ],
-      [
-        -4,
-        -20
-      ],
-      [
-        0,
-        -16
-      ],
-      [
-        -4,
-        -17
-      ],
-      [
-        -10,
-        -24
-      ],
-      [
-        4,
-        -6
-      ],
-      [
-        26,
-        17
-      ],
-      [
-        4,
-        6
-      ],
-      [
-        1,
-        4
-      ],
-      [
-        -2,
-        5
-      ],
-      [
-        3,
-        2
-      ],
-      [
-        21,
-        -23
-      ],
-      [
-        14,
-        -13
-      ],
-      [
-        11,
-        -6
-      ],
-      [
-        11,
-        4
-      ]
-    ],
-    [
-      [
-        5890,
-        9015
-      ],
-      [
-        -3,
-        -3
-      ],
-      [
-        -6,
-        7
-      ],
-      [
-        -1,
-        6
-      ],
-      [
-        2,
-        5
-      ],
-      [
-        3,
-        -1
-      ],
-      [
-        4,
-        -8
-      ],
-      [
-        1,
-        -6
-      ]
-    ],
-    [
-      [
-        5939,
-        9055
-      ],
-      [
-        -6,
-        -6
-      ],
-      [
-        -2,
-        3
-      ],
-      [
-        1,
-        12
-      ],
-      [
-        3,
-        7
-      ],
-      [
-        4,
-        2
-      ],
-      [
-        3,
-        -3
-      ],
-      [
-        0,
-        -8
-      ],
-      [
-        -3,
-        -7
-      ]
-    ]
-  ],
-  "transform": {
-    "scale": [
-      0.005772872856602365,
-      0.0024829805705001468
-    ],
-    "translate": [
-      -124.70997774915153,
-      24.542349340056283
-    ]
-  }
-}
diff --git a/web/gui/src/main/webapp/legacy/d3Utils.css b/web/gui/src/main/webapp/legacy/d3Utils.css
deleted file mode 100644
index a0167d3..0000000
--- a/web/gui/src/main/webapp/legacy/d3Utils.css
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- D3 Utilities CSS file
- */
-
-#d3u .light.norm.c1 {
-  color: #1f77b4;
-}
-
-#d3u .light.norm.c2 {
-  color: #2ca02c;
-}
-
-#d3u .light.norm.c3 {
-  color: #d62728;
-}
-
-#d3u .light.norm.c4 {
-  color: #9467bd;
-}
-
-#d3u .light.norm.c5 {
-  color: #e377c2;
-}
-
-#d3u .light.norm.c6 {
-  color: #bcbd22;
-}
-
-#d3u .light.norm.c7 {
-  color: #17becf;
-}
-
-
-
-#d3u .light.mute.c1 {
-  color: #aec7e8;
-}
-
-#d3u .light.mute.c2 {
-  color: #98df8a;
-}
-
-#d3u .light.mute.c3 {
-  color: #ff9896;
-}
-
-#d3u .light.mute.c4 {
-  color: #c5b0d5;
-}
-
-#d3u .light.mute.c5 {
-  color: #f7b6d2;
-}
-
-#d3u .light.mute.c6 {
-  color: #dbdb8d;
-}
-
-#d3u .light.mute.c7 {
-  color: #9edae5;
-}
-
-
-
-#d3u .dark.norm.c1 {
-  color: #1f77b4;
-}
-
-#d3u .dark.norm.c2 {
-  color: #2ca02c;
-}
-
-#d3u .dark.norm.c3 {
-  color: #d62728;
-}
-
-#d3u .dark.norm.c4 {
-  color: #9467bd;
-}
-
-#d3u .dark.norm.c5 {
-  color: #e377c2;
-}
-
-#d3u .dark.norm.c6 {
-  color: #bcbd22;
-}
-
-#d3u .dark.norm.c7 {
-  color: #17becf;
-}
-
-
-
-#d3u .dark.mute.c1 {
-  color: #aec7e8;
-}
-
-#d3u .dark.mute.c2 {
-  color: #639a56;
-}
-
-#d3u .dark.mute.c3 {
-  color: #ff9896;
-}
-
-#d3u .dark.mute.c4 {
-  color: #c5b0d5;
-}
-
-#d3u .dark.mute.c5 {
-  color: #f7b6d2;
-}
-
-#d3u .dark.mute.c6 {
-  color: #dbdb8d;
-}
-
-#d3u .dark.mute.c7 {
-  color: #9edae5;
-}
-
diff --git a/web/gui/src/main/webapp/legacy/d3Utils.js b/web/gui/src/main/webapp/legacy/d3Utils.js
deleted file mode 100644
index 00ca887..0000000
--- a/web/gui/src/main/webapp/legacy/d3Utils.js
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- Utility functions for D3 visualizations.
- */
-
-(function (onos) {
-    'use strict';
-
-    function isF(f) {
-        return $.isFunction(f) ? f : null;
-    }
-
-    // TODO: sensible defaults
-    function createDragBehavior(force, selectCb, atDragEnd,
-                                dragEnabled, clickEnabled) {
-        var draggedThreshold = d3.scale.linear()
-                .domain([0, 0.1])
-                .range([5, 20])
-                .clamp(true),
-            drag,
-            fSel = isF(selectCb),
-            fEnd = isF(atDragEnd),
-            fDEn = isF(dragEnabled),
-            fCEn = isF(clickEnabled),
-            bad = [];
-
-        function naf(what) {
-            return 'd3util.createDragBehavior(): '+ what + ' is not a function';
-        }
-
-        if (!fSel) {
-            bad.push(naf('selectCb'));
-        }
-        if (!fEnd) {
-            bad.push(naf('atDragEnd'));
-        }
-        if (!fDEn) {
-            bad.push(naf('dragEnabled'));
-        }
-        if (!fCEn) {
-            bad.push(naf('clickEnabled'));
-        }
-
-        if (bad.length) {
-            alert(bad.join('\n'));
-            return null;
-        }
-
-
-        function dragged(d) {
-            var threshold = draggedThreshold(force.alpha()),
-                dx = d.oldX - d.px,
-                dy = d.oldY - d.py;
-            if (Math.abs(dx) >= threshold || Math.abs(dy) >= threshold) {
-                d.dragged = true;
-            }
-            return d.dragged;
-        }
-
-        drag = d3.behavior.drag()
-            .origin(function(d) { return d; })
-            .on('dragstart', function(d) {
-                if (clickEnabled() || dragEnabled()) {
-                    d3.event.sourceEvent.stopPropagation();
-
-                    d.oldX = d.x;
-                    d.oldY = d.y;
-                    d.dragged = false;
-                    d.fixed |= 2;
-                    d.dragStarted = true;
-                }
-            })
-            .on('drag', function(d) {
-                if (dragEnabled()) {
-                    d.px = d3.event.x;
-                    d.py = d3.event.y;
-                    if (dragged(d)) {
-                        if (!force.alpha()) {
-                            force.alpha(.025);
-                        }
-                    }
-                }
-            })
-            .on('dragend', function(d) {
-                if (d.dragStarted) {
-                    d.dragStarted = false;
-                    if (!dragged(d)) {
-                        // consider this the same as a 'click'
-                        // (selection of a node)
-                        if (clickEnabled()) {
-                            selectCb(d, this); // TODO: set 'this' context instead of param
-                        }
-                    }
-                    d.fixed &= ~6;
-
-                    // hook at the end of a drag gesture
-                    if (dragEnabled()) {
-                        atDragEnd(d, this); // TODO: set 'this' context instead of param
-                    }
-                }
-            });
-
-        return drag;
-    }
-
-    function loadGlow(defs) {
-        // TODO: parameterize color
-
-        var glow = defs.append('filter')
-            .attr('x', '-50%')
-            .attr('y', '-50%')
-            .attr('width', '200%')
-            .attr('height', '200%')
-            .attr('id', 'blue-glow');
-
-        glow.append('feColorMatrix')
-            .attr('type', 'matrix')
-            .attr('values',
-                '0 0 0 0  0 ' +
-                '0 0 0 0  0 ' +
-                '0 0 0 0  .7 ' +
-                '0 0 0 1  0 ');
-
-        glow.append('feGaussianBlur')
-            .attr('stdDeviation', 3)
-            .attr('result', 'coloredBlur');
-
-        glow.append('feMerge').selectAll('feMergeNode')
-            .data(['coloredBlur', 'SourceGraphic'])
-            .enter().append('feMergeNode')
-            .attr('in', String);
-    }
-
-    // --- Ordinal scales for 7 values.
-    // TODO: tune colors for light and dark themes
-    // Note: These colors look good on the white background. Still, need to tune for dark.
-
-    //               blue       brown      brick red  sea green  purple     dark teal  lime
-    var lightNorm = ['#3E5780', '#78533B', '#CB4D28', '#018D61', '#8A2979', '#006D73', '#56AF00'],
-        lightMute = ['#A8B8CC', '#CCB3A8', '#FFC2BD', '#96D6BF', '#D19FCE', '#8FCCCA', '#CAEAA4'],
-
-        darkNorm  = ['#3E5780', '#78533B', '#CB4D28', '#018D61', '#8A2979', '#006D73', '#56AF00'],
-        darkMute  = ['#A8B8CC', '#CCB3A8', '#FFC2BD', '#96D6BF', '#D19FCE', '#8FCCCA', '#CAEAA4'];
-
-    function cat7() {
-        var colors = {
-                light: {
-                    norm: d3.scale.ordinal().range(lightNorm),
-                    mute: d3.scale.ordinal().range(lightMute)
-                },
-                dark: {
-                    norm: d3.scale.ordinal().range(darkNorm),
-                    mute: d3.scale.ordinal().range(darkMute)
-                }
-            },
-            tcid = 'd3utilTestCard';
-
-        function get(id, muted, theme) {
-            // NOTE: since we are lazily assigning domain ids, we need to
-            //       get the color from all 4 scales, to keep the domains
-            //       in sync.
-            var ln = colors.light.norm(id),
-                lm = colors.light.mute(id),
-                dn = colors.dark.norm(id),
-                dm = colors.dark.mute(id);
-            if (theme === 'dark') {
-                return muted ? dm : dn;
-            } else {
-                return muted ? lm : ln;
-            }
-        }
-
-        function testCard(svg) {
-            var g = svg.select('g#' + tcid),
-                dom = d3.range(7),
-                k, muted, theme, what;
-
-            if (!g.empty()) {
-                g.remove();
-
-            } else {
-                g = svg.append('g')
-                    .attr('id', tcid)
-                    .attr('transform', 'scale(4)translate(20,20)');
-
-                for (k=0; k<4; k++) {
-                    muted = k%2;
-                    what = muted ? ' muted' : ' normal';
-                    theme = k < 2 ? 'light' : 'dark';
-                    dom.forEach(function (id, i) {
-                        var x = i * 20,
-                            y = k * 20,
-                            f = get(id, muted, theme);
-                        g.append('circle').attr({
-                            cx: x,
-                            cy: y,
-                            r: 5,
-                            fill: f
-                        });
-                    });
-                    g.append('rect').attr({
-                        x: 140,
-                        y: k * 20 - 5,
-                        width: 32,
-                        height: 10,
-                        rx: 2,
-                        fill: '#888'
-                    });
-                    g.append('text').text(theme + what)
-                        .attr({
-                            x: 142,
-                            y: k * 20 + 2,
-                            fill: 'white'
-                        })
-                        .style('font-size', '4pt');
-                }
-            }
-        }
-
-        return {
-            testCard: testCard,
-            get: get
-        };
-    }
-
-    // === register the functions as a library
-    onos.ui.addLib('d3util', {
-        createDragBehavior: createDragBehavior,
-        loadGlow: loadGlow,
-        cat7: cat7
-    });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/geometry.js b/web/gui/src/main/webapp/legacy/geometry.js
deleted file mode 100644
index 5ede643..0000000
--- a/web/gui/src/main/webapp/legacy/geometry.js
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- Geometry library - based on work by Mike Bostock.
- */
-
-(function() {
-
-    if (typeof geo == 'undefined') {
-        geo = {};
-    }
-
-    var tolerance = 1e-10;
-
-    function eq(a, b) {
-        return (Math.abs(a - b) < tolerance);
-    }
-
-    function gt(a, b) {
-        return (a - b > -tolerance);
-    }
-
-    function lt(a, b) {
-        return gt(b, a);
-    }
-
-    geo.eq = eq;
-    geo.gt = gt;
-    geo.lt = lt;
-
-    geo.LineSegment = function(x1, y1, x2, y2) {
-        this.x1 = x1;
-        this.y1 = y1;
-        this.x2 = x2;
-        this.y2 = y2;
-
-        // Ax + By = C
-        this.a = y2 - y1;
-        this.b = x1 - x2;
-        this.c = x1 * this.a + y1 * this.b;
-
-        if (eq(this.a, 0) && eq(this.b, 0)) {
-            throw new Error(
-                'Cannot construct a LineSegment with two equal endpoints.');
-        }
-    };
-
-    geo.LineSegment.prototype.intersect = function(that) {
-        var d = (this.x1 - this.x2) * (that.y1 - that.y2) -
-            (this.y1 - this.y2) * (that.x1 - that.x2);
-
-        if (eq(d, 0)) {
-            // The two lines are parallel or very close.
-            return {
-                x : NaN,
-                y : NaN
-            };
-        }
-
-        var t1  = this.x1 * this.y2 - this.y1 * this.x2,
-            t2  = that.x1 * that.y2 - that.y1 * that.x2,
-            x   = (t1 * (that.x1 - that.x2) - t2 * (this.x1 - this.x2)) / d,
-            y   = (t1 * (that.y1 - that.y2) - t2 * (this.y1 - this.y2)) / d,
-            in1 = (gt(x, Math.min(this.x1, this.x2)) && lt(x, Math.max(this.x1, this.x2)) &&
-                gt(y, Math.min(this.y1, this.y2)) && lt(y, Math.max(this.y1, this.y2))),
-            in2 = (gt(x, Math.min(that.x1, that.x2)) && lt(x, Math.max(that.x1, that.x2)) &&
-                gt(y, Math.min(that.y1, that.y2)) && lt(y, Math.max(that.y1, that.y2)));
-
-        return {
-            x   : x,
-            y   : y,
-            in1 : in1,
-            in2 : in2
-        };
-    };
-
-    geo.LineSegment.prototype.x = function(y) {
-        // x = (C - By) / a;
-        if (this.a) {
-            return (this.c - this.b * y) / this.a;
-        } else {
-            // a == 0 -> horizontal line
-            return NaN;
-        }
-    };
-
-    geo.LineSegment.prototype.y = function(x) {
-        // y = (C - Ax) / b;
-        if (this.b) {
-            return (this.c - this.a * x) / this.b;
-        } else {
-            // b == 0 -> vertical line
-            return NaN;
-        }
-    };
-
-    geo.LineSegment.prototype.length = function() {
-        return Math.sqrt(
-                (this.y2 - this.y1) * (this.y2 - this.y1) +
-                (this.x2 - this.x1) * (this.x2 - this.x1));
-    };
-
-    geo.LineSegment.prototype.offset = function(x, y) {
-        return new geo.LineSegment(
-                this.x1 + x, this.y1 + y,
-                this.x2 + x, this.y2 + y);
-    };
-
-})();
diff --git a/web/gui/src/main/webapp/legacy/glyphs.js b/web/gui/src/main/webapp/legacy/glyphs.js
deleted file mode 100644
index 9f8b461..0000000
--- a/web/gui/src/main/webapp/legacy/glyphs.js
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS -- SVG Glyphs Library.
- */
-
-
-(function (onos) {
-    'use strict';
-
-    var birdViewBox = '352 224 113 112',
-
-        birdData = {
-            bird: "M427.7,300.4 c-6.9,0.6-13.1,5-19.2,7.1c-18.1,6.2-33.9," +
-            "9.1-56.5,4.7c24.6,17.2,36.6,13,63.7,0.1c-0.5,0.6-0.7,1.3-1.3," +
-            "1.9c1.4-0.4,2.4-1.7,3.4-2.2c-0.4,0.7-0.9,1.5-1.4,1.9c2.2-0.6," +
-            "3.7-2.3,5.9-3.9c-2.4,2.1-4.2,5-6,8c-1.5,2.5-3.1,4.8-5.1,6.9c-1," +
-            "1-1.9,1.9-2.9,2.9c-1.4,1.3-2.9,2.5-5.1,2.9c1.7,0.1,3.6-0.3,6.5" +
-            "-1.9c-1.6,2.4-7.1,6.2-9.9,7.2c10.5-2.6,19.2-15.9,25.7-18c18.3" +
-            "-5.9,13.8-3.4,27-14.2c1.6-1.3,3-1,5.1-0.8c1.1,0.1,2.1,0.3,3.2," +
-            "0.5c0.8,0.2,1.4,0.4,2.2,0.8l1.8,0.9c-1.9-4.5-2.3-4.1-5.9-6c-2.3" +
-            "-1.3-3.3-3.8-6.2-4.9c-7.1-2.6-11.9,11.7-11.7-5c0.1-8,4.2-14.4," +
-            "6.4-22c1.1-3.8,2.3-7.6,2.4-11.5c0.1-2.3,0-4.7-0.4-7c-2-11.2-8.4" +
-            "-21.5-19.7-24.8c-1-0.3-1.1-0.3-0.9,0c9.6,17.1,7.2,38.3,3.1,54.2" +
-            "C429.9,285.5,426.7,293.2,427.7,300.4z"
-        },
-
-        glyphViewBox = '0 0 110 110',
-
-        glyphData = {
-            unknown: "M35,40a5,5,0,0,1,5-5h30a5,5,0,0,1,5,5v30a5,5,0,0,1-5,5" +
-            "h-30a5,5,0,0,1-5-5z",
-
-            node: "M15,100a5,5,0,0,1-5-5v-65a5,5,0,0,1,5-5h80a5,5,0,0,1,5,5" +
-            "v65a5,5,0,0,1-5,5zM14,22.5l11-11a10,3,0,0,1,10-2h40a10,3,0,0,1," +
-            "10,2l11,11zM16,35a5,5,0,0,1,10,0a5,5,0,0,1-10,0z",
-
-            switch: "M10,20a10,10,0,0,1,10-10h70a10,10,0,0,1,10,10v70a10,10," +
-            "0,0,1-10,10h-70a10,10,0,0,1-10-10zM60,26l12,0,0-8,18,13-18,13,0" +
-            "-8-12,0zM60,60l12,0,0-8,18,13-18,13,0-8-12,0zM50,40l-12,0,0-8" +
-            "-18,13,18,13,0-8,12,0zM50,74l-12,0,0-8-18,13,18,13,0-8,12,0z",
-
-            roadm: "M10,35l25-25h40l25,25v40l-25,25h-40l-25-25zM58,26l12,0,0" +
-            "-8,18,13-18,13,0-8-12,0zM58,60l12,0,0-8,18,13-18,13,0-8-12,0z" +
-            "M52,40l-12,0,0-8-18,13,18,13,0-8,12,0zM52,74l-12,0,0-8-18,13," +
-            "18,13,0-8,12,0z",
-
-            endstation: "M10,15a5,5,0,0,1,5-5h65a5,5,0,0,1,5,5v80a5,5,0,0,1" +
-            "-5,5h-65a5,5,0,0,1-5-5zM87.5,14l11,11a3,10,0,0,1,2,10v40a3,10," +
-            "0,0,1,-2,10l-11,11zM17,19a2,2,0,0,1,2-2h56a2,2,0,0,1,2,2v26a2," +
-            "2,0,0,1-2,2h-56a2,2,0,0,1-2-2zM20,20h54v10h-54zM20,33h54v10h" +
-            "-54zM42,70a5,5,0,0,1,10,0a5,5,0,0,1-10,0z",
-
-            router: "M10,55A45,45,0,0,1,100,55A45,45,0,0,1,10,55M20,50l12,0," +
-            "0-8,18,13-18,13,0-8-12,0zM90,50l-12,0,0-8-18,13,18,13,0-8,12,0z" +
-            "M50,47l0-12-8,0,13-18,13,18-8,0,0,12zM50,63l0,12-8,0,13,18,13" +
-            "-18-8,0,0-12z",
-
-            bgpSpeaker: "M10,40a45,35,0,0,1,90,0Q100,77,55,100Q10,77,10,40z" +
-            "M50,29l12,0,0-8,18,13-18,13,0-8-12,0zM60,57l-12,0,0-8-18,13," +
-            "18,13,0-8,12,0z",
- 
-            chain: "M60.4,77.6c-4.9,5.2-9.6,11.3-15.3,16.3c-8.6,7.5-20.4,6.8" +
-            "-28-0.8c-7.7-7.7-8.4-19.6-0.8-28.4c6.5-7.4,13.5-14.4,20.9-20.9" +
-            "c7.5-6.7,19.2-6.7,26.5-0.8c3.5,2.8,4.4,6.1,2.2,8.7c-2.7,3.1" +
-            "-5.5,2.5-8.5,0.3c-4.7-3.4-9.7-3.2-14,0.9C37.1,58.7,31,64.8," +
-            "25.2,71c-4.2,4.4-4.2,10.6-0.6,14.3c3.7,3.7,9.7,3.7,14.3-0.4" +
-            "c2.9-2.5,5.3-5.5,8.3-8c1-0.9,3-1.1,4.4-0.9C54.8,76.3,57.9,77.1," +
-            "60.4,77.6zM49.2,32.2c5-5.2,9.7-10.9,15.2-15.7c12.8-11,31.2" +
-            "-4.9,34.3,11.2C100,34.2,98.3,40.2,94,45c-6.7,7.4-13.7,14.6" +
-            "-21.2,21.2C65.1,73,53.2,72.7,46,66.5c-3.2-2.8-3.9-5.8-1.6-8.4" +
-            "c2.6-2.9,5.3-2.4,8.2-0.3c5.2,3.7,10,3.3,14.7-1.1c5.8-5.6,11.6" +
-            "-11.3,17.2-17.2c4.6-4.8,4.9-11.1,0.9-15c-3.9-3.9-10.1-3.4-15," +
-            "1.2c-3.1,2.9-5.7,7.4-9.3,8.5C57.6,35.3,53,33,49.2,32.2z",
-
-            crown: "M99.5,21.6c0,3-2.3,5.4-5.1,5.4c-0.3,0-0.7,0-1-0.1c-1.8," +
-            "4-4.8,10-7.2,17.3c-3.4,10.6-0.9,26.2,2.7,27.3C90.4,72,91.3," +
-            "75,88,75H22.7c-3.3,0-2.4-3-0.9-3.5c3.6-1.1,6.1-16.7,2.7-27.3" +
-            "c-2.4-7.4-5.4-13.5-7.2-17.5c-0.5,0.2-1,0.3-1.6,0.3c-2.8,0" +
-            "-5.1-2.4-5.1-5.4c0-3,2.3-5.4,5.1-5.4c2.8,0,5.1,2.4,5.1,5.4c0," +
-            "1-0.2,1.9-0.7,2.7c0.7,0.8,1.4,1.6,2.4,2.6c8.8,8.9,11.9,12.7," +
-            "18.1,11.7c6.5-1,11-8.2,13.3-14.1c-2-0.8-3.3-2.7-3.3-5.1c0-3," +
-            "2.3-5.4,5.1-5.4c2.8,0,5.1,2.4,5.1,5.4c0,2.5-1.6,4.5-3.7,5.2" +
-            "c2.3,5.9,6.8,13,13.2,14c6.2,1,9.3-2.7,18.1-11.7c0.7-0.7,1.4" +
-            "-1.5,2-2.1c-0.6-0.9-1-2-1-3.1c0-3,2.3-5.4,5.1-5.4C97.2,16.2," +
-            "99.5,18.6,99.5,21.6zM92,87.9c0,2.2-1.7,4.1-3.8,4.1H22.4c" +
-            "-2.1,0-4.4-1.9-4.4-4.1v-3.3c0-2.2,2.3-4.5,4.4-4.5h65.8c2.1," +
-            "0,3.8,2.3,3.8,4.5V87.9z"
-        },
-
-        badgeViewBox = '0 0 10 10',
-
-        badgeData = {
-            uiAttached: "M2,2.5a.5,.5,0,0,1,.5-.5h5a.5,.5,0,0,1,.5,.5v3" +
-            "a.5,.5,0,0,1-.5,.5h-5a.5,.5,0,0,1-.5-.5zM2.5,2.8a.3,.3,0,0,1," +
-            ".3-.3h4.4a.3,.3,0,0,1,.3,.3v2.4a.3,.3,0,0,1-.3,.3h-4.4" +
-            "a.3,.3,0,0,1-.3-.3zM2,6.55h6l1,1.45h-8z"
-        };
-
-    function defStuff(defs, viewbox, data) {
-        d3.map(data).keys().forEach(function (key) {
-            defs.append('symbol')
-                .attr({ id: key, viewBox: viewbox })
-                .append('path').attr('d', data[key]);
-        });
-    }
-
-    function loadDefs(defs) {
-        defStuff(defs, birdViewBox,  birdData);
-        defStuff(defs, glyphViewBox, glyphData);
-        defStuff(defs, badgeViewBox, badgeData);
-    }
-
-    onos.ui.addLib('glyphs', {
-        loadDefs: loadDefs
-    });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/index.html b/web/gui/src/main/webapp/legacy/index.html
deleted file mode 100644
index 0e5f57a..0000000
--- a/web/gui/src/main/webapp/legacy/index.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE html>
-<!--
-  ~ Copyright 2014 Open Networking Laboratory
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<!--
-  ONOS UI - single page web app
-  Version 1.1
-  -->
-<html>
-<head>
-    <meta charset="utf-8">
-    <link rel="shortcut icon" href="../img/onos-logo.png">
-    <title>ONOS</title>
-
-    <!-- Third party library code included here -->
-    <!--TODO: use the minified version of d3, once debugging is complete -->
-    <script src="../tp/d3.js"></script>
-    <script src="../tp/topojson.v1.min.js"></script>
-    <script src="../tp/jquery-2.1.1.min.js"></script>
-
-    <!-- ONOS UI Framework included here -->
-    <script src="onos.js"></script>
-
-    <!-- Framework and library stylesheets included here -->
-    <link rel="stylesheet" href="base.css">
-    <link rel="stylesheet" href="onos.css">
-    <link rel="stylesheet" href="onosMast.css">
-    <link rel="stylesheet" href="onosFloatPanel.css">
-    <link rel="stylesheet" href="onosFlash.css">
-    <link rel="stylesheet" href="onosQuickHelp.css">
-
-    <!-- This is where contributed stylesheets get INJECTED -->
-    <!-- TODO: replace with template marker and inject refs server-side -->
-    <link rel="stylesheet" href="topo.css">
-</head>
-<body>
-    <div id="frame">
-        <div id="mast">
-            <!-- NOTE: masthead injected here by mast.js -->
-        </div>
-        <div id="view">
-            <!-- NOTE: views injected here by onos.js -->
-        </div>
-        <div id="floatPanels">
-            <!-- NOTE: floating panels injected here, as needed -->
-            <!--       see onos.ui.addFloatingPanel             -->
-        </div>
-        <div id="alerts">
-            <!-- NOTE: alert content injected here, as needed -->
-        </div>
-        <div id="feedback">
-            <!-- NOTE: feedback flashes to user -->
-        </div>
-        <div id="quickhelp">
-            <!-- NOTE: key bindings and mouse gesture help -->
-        </div>
-    </div>
-
-    <!-- Initialize the UI...-->
-    <script type="text/javascript">
-        var ONOS = $.onos({
-            comment: 'configuration options',
-            theme: 'dark',
-            startVid: 'topo'
-        });
-    </script>
-
-    <!-- Library modules included here -->
-    <script src="d3Utils.js"></script>
-    <script src="geometry.js"></script>
-    <script src="glyphs.js"></script>
-
-    <!-- Framework modules included here -->
-    <script src="onosMast.js"></script>
-    <script src="onosFlash.js"></script>
-    <script src="onosQuickHelp.js"></script>
-
-    <!-- View Module Templates; REMOVE THESE LINES, FOR PRODUCTION -->
-    <script src="module-svg-template.js"></script>
-    <script src="module-div-template.js"></script>
-
-    <!-- Sample Views; REMOVE THESE LINES, FOR PRODUCTION -->
-    <script src="sample.js"></script>
-    <script src="sampleRadio.js"></script>
-    <script src="sampleKeys.js"></script>
-    <script src="sampleHash.js"></script>
-
-    <!-- Contributed (application) views injected here -->
-    <!-- TODO: replace with template marker and inject refs server-side -->
-    <script src="topo.js"></script>
-
-    <!-- finally, build the UI-->
-    <script type="text/javascript">
-        $(ONOS.buildUi);
-    </script>
-
-</body>
-</html>
diff --git a/web/gui/src/main/webapp/legacy/module-div-template.js b/web/gui/src/main/webapp/legacy/module-div-template.js
deleted file mode 100644
index 52aece9..0000000
--- a/web/gui/src/main/webapp/legacy/module-div-template.js
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- Module template file for DIV based view.
- */
-
-(function (onos) {
-    'use strict';
-
-    var list,
-        data = [ 'foo', 'bar', 'baz' ];
-
-    // invoked only the first time the view is loaded
-    //  - used to initialize the view contents
-    function init(view, ctx, flags) {
-        // NOTE: view.$div is a D3 selection of the view's div
-        list = view.$div.append('ul');
-        // ... further code to initialize the SVG view ...
-
-    }
-
-    // invoked just prior to loading the view
-    //  - used to clear the view of stale data
-    function reset(view, ctx, flags) {
-
-    }
-
-    // invoked when the view is loaded
-    //  - used to load data into the view,
-    //     when the view is shown
-    function load(view, ctx, flags) {
-        list.selectAll('li')
-            .data(data)
-            .enter()
-            .append('li')
-            .text(function (d) { return d; })
-    }
-
-    // invoked when the view is unloaded
-    //  - used to clean up data that should be removed,
-    //     when the view is hidden
-    function unload(view, ctx, flags) {
-
-    }
-
-    // invoked when the view is resized
-    //  - used to reconfigure elements to the new view size
-    function resize(view, ctx, flags) {
-        var w = view.width(),
-            h = view.height();
-
-    }
-
-    // invoked when the framework needs to alert the view of an error
-    //  - (EXPERIMENTAL -- not currently used)
-    function error(view, ctx, flags) {
-
-    }
-
-    // ================================================================
-    // == register the view here, with links to lifecycle callbacks
-
-    // A typical setup that initializes the view once, then reacts to
-    // load and resize events would look like this:
-
-    onos.ui.addView('myDivViewId', {
-        init: init,
-        load: load,
-        resize: resize
-    });
-
-    // A minimum setup that builds the view every time it is loaded
-    // would look like this:
-    //
-    //  onos.ui.addView('myViewId', {
-    //      reset: true,    // clear view contents on reset
-    //      load: load
-    //  });
-
-    // The complete gamut of callbacks would look like this:
-    //
-    //  onos.ui.addView('myViewId', {
-    //      init: init,
-    //      reset: reset,
-    //      load: load,
-    //      unload: unload,
-    //      resize: resize,
-    //      error: error
-    //  });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/module-svg-template.js b/web/gui/src/main/webapp/legacy/module-svg-template.js
deleted file mode 100644
index d4d7c4f..0000000
--- a/web/gui/src/main/webapp/legacy/module-svg-template.js
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- Module template file for SVG based view.
- */
-
-(function (onos) {
-    'use strict';
-
-    var svg,
-        data = [ 60 ];
-
-    // invoked only the first time the view is loaded
-    //  - used to initialize the view contents
-    function init(view, ctx, flags) {
-        svg = view.$div.append('svg');
-        resize(view);
-        // ... further code to initialize the SVG view ...
-
-    }
-
-    // invoked just prior to loading the view
-    //  - used to clear the view of stale data
-    function reset(view, ctx, flags) {
-        // e.g. clear svg of all objects...
-        // svg.html('');
-
-    }
-
-    // invoked when the view is loaded
-    //  - used to load data into the view,
-    //     when the view is shown
-    function load(view, ctx, flags) {
-        var w = view.width(),
-            h = view.height();
-
-        // as an example...
-        svg.selectAll('circle')
-            .data(data)
-            .enter()
-            .append('circle')
-            .attr({
-                cx: w / 2,
-                cy: h / 2,
-                r: function (d) { return d; }
-            })
-            .style({
-                fill: 'goldenrod',
-                stroke: 'black',
-                'stroke-width': 3.5,
-            });
-    }
-
-    // invoked when the view is unloaded
-    //  - used to clean up data that should be removed,
-    //     when the view is hidden
-    function unload(view, ctx, flags) {
-
-    }
-
-    // invoked when the view is resized
-    //  - used to reconfigure elements to the new size of the view
-    function resize(view, ctx, flags) {
-        var w = view.width(),
-            h = view.height();
-
-        // resize svg layer to match new size of view
-        svg.attr({
-            width: w,
-            height: h
-        });
-
-        // as an example...
-        svg.selectAll('circle')
-            .attr({
-                cx: w / 2,
-                cy: h / 2
-            });
-
-        // ... further code to handle resize of view ...
-
-    }
-
-    // invoked when the framework needs to alert the view of an error
-    //  - (EXPERIMENTAL -- not currently used)
-    function error(view, ctx, flags) {
-
-    }
-
-    // ================================================================
-    // == register the view here, with links to lifecycle callbacks
-
-    // A typical setup that initializes the view once, then reacts to
-    // load and resize events would look like this:
-
-    onos.ui.addView('mySvgViewId', {
-        init: init,
-        load: load,
-        resize: resize
-    });
-
-    // A minimum setup that builds the view every time it is loaded
-    // would look like this:
-    //
-    //  onos.ui.addView('myViewId', {
-    //      reset: true,    // clear view contents on reset
-    //      load: load
-    //  });
-
-    // The complete gamut of callbacks would look like this:
-    //
-    //  onos.ui.addView('myViewId', {
-    //      init: init,
-    //      reset: reset,
-    //      load: load,
-    //      unload: unload,
-    //      resize: resize,
-    //      error: error
-    //  });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/onos-logo.png b/web/gui/src/main/webapp/legacy/onos-logo.png
deleted file mode 100644
index 8688cd6..0000000
--- a/web/gui/src/main/webapp/legacy/onos-logo.png
+++ /dev/null
Binary files differ
diff --git a/web/gui/src/main/webapp/legacy/onos.css b/web/gui/src/main/webapp/legacy/onos.css
deleted file mode 100644
index 5870044..0000000
--- a/web/gui/src/main/webapp/legacy/onos.css
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Base Framework -- CSS file
- */
-
-html, body {
-    height: 100%;
-}
-
-/* This is to ensure that the body does not expand to account for the
-   flyout details pane, that is positioned "off screen".
- */
-body {
-    overflow: hidden;
-}
-
-#frame {
-    width: 100%;
-    height: 100%;
-    background-color: #fff;
-}
-
-div.onosView {
-    display: none;
-}
-
-div.onosView.currentView {
-    display: block;
-}
-
-
-#alerts {
-    display: none;
-    position: absolute;
-    z-index: 1200;
-    opacity: 0.65;
-    background-color: #006;
-    color: white;
-    top: 80px;
-    left: 40px;
-    padding: 3px 6px;
-    -moz-border-radius: 6px;
-    border-radius: 6px;
-    box-shadow: 0px 2px 12px #777;
-}
-
-#alerts pre {
-    margin: 0.2em 6px;
-}
-
-#alerts span.close {
-    color: #6af;
-    float: right;
-    right: 2px;
-    cursor: pointer;
-}
-
-#alerts span.close:hover {
-    color: #fff;
-}
-
-#alerts p.footnote {
-    text-align: right;
-    font-size: 8pt;
-    margin: 8px 0 0 0;
-    color: #66d;
-}
-
-#floatPanels {
-    z-index: 1100;
-}
-
-#flyout {
-    position: absolute;
-    display: block;
-    top: 10%;
-    width: 280px;
-    right: -300px;
-    opacity: 0;
-    background-color: rgba(255,255,255,0.8);
-
-    padding: 10px;
-    color: black;
-    font-size: 10pt;
-    box-shadow: 2px 2px 16px #777;
-}
-
-#flyout h2 {
-    margin: 8px 4px;
-    color: black;
-    vertical-align: middle;
-}
-
-#flyout h2 img {
-    height: 32px;
-    padding-right: 8px;
-    vertical-align: middle;
-}
-
-#flyout p, table {
-    margin: 4px 4px;
-}
-
-#flyout td.label {
-    font-style: italic;
-    color: #777;
-    padding-right: 12px;
-}
-
-#flyout td.value {
-
-}
-
-#flyout hr {
-    height: 1px;
-    color: #ccc;
-    background-color: #ccc;
-    border: 0;
-}
diff --git a/web/gui/src/main/webapp/legacy/onos.js b/web/gui/src/main/webapp/legacy/onos.js
deleted file mode 100644
index c122177..0000000
--- a/web/gui/src/main/webapp/legacy/onos.js
+++ /dev/null
@@ -1,1002 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Base Framework
- */
-
-(function ($) {
-    'use strict';
-    var tsI = new Date().getTime(),         // initialize time stamp
-        tsB,                                // build time stamp
-        mastHeight = 36,                    // see mast2.css
-        defaultVid = 'sample';
-
-
-    // attach our main function to the jQuery object
-    $.onos = function (options) {
-        var uiApi,
-            viewApi,
-            navApi,
-            libApi,
-            exported = {};
-
-        var defaultOptions = {
-            trace: false,
-            theme: 'dark',
-            startVid: defaultVid
-        };
-
-        // compute runtime settings
-        var settings = $.extend({}, defaultOptions, options);
-
-        // set the selected theme
-        d3.select('body').classed(settings.theme, true);
-
-        // internal state
-        var views = {},
-            fpanels = {},
-            current = {
-                view: null,
-                ctx: '',
-                flags: {},
-                theme: settings.theme
-            },
-            built = false,
-            buildErrors = [],
-            keyHandler = {
-                globalKeys: {},
-                maskedKeys: {},
-                viewKeys: {},
-                viewFn: null,
-                viewGestures: []
-            },
-            alerts = {
-                open: false,
-                count: 0
-            };
-
-        // DOM elements etc.
-        // TODO: verify existence of following elements...
-        var $view = d3.select('#view'),
-            $floatPanels = d3.select('#floatPanels'),
-            $alerts = d3.select('#alerts'),
-            // note, following elements added programmatically...
-            $mastRadio;
-
-
-        function whatKey(code) {
-            switch (code) {
-                case 13: return 'enter';
-                case 16: return 'shift';
-                case 17: return 'ctrl';
-                case 18: return 'alt';
-                case 27: return 'esc';
-                case 32: return 'space';
-                case 37: return 'leftArrow';
-                case 38: return 'upArrow';
-                case 39: return 'rightArrow';
-                case 40: return 'downArrow';
-                case 91: return 'cmdLeft';
-                case 93: return 'cmdRight';
-                case 187: return 'equals';
-                case 189: return 'dash';
-                case 191: return 'slash';
-                case 192: return 'backQuote';
-                case 220: return 'backSlash';
-                default:
-                    if ((code >= 48 && code <= 57) ||
-                        (code >= 65 && code <= 90)) {
-                        return String.fromCharCode(code);
-                    } else if (code >= 112 && code <= 123) {
-                        return 'F' + (code - 111);
-                    }
-                    return '.';
-            }
-        }
-
-
-        // ..........................................................
-        // Internal functions
-
-        // throw an error
-        function throwError(msg) {
-            // separate function, as we might add tracing here too, later
-            throw new Error(msg);
-        }
-
-        function doError(msg) {
-            console.error(msg);
-            doAlert(msg);
-        }
-
-        function trace(msg) {
-            if (settings.trace) {
-                console.log(msg);
-            }
-        }
-
-        function traceFn(fn, params) {
-            if (settings.trace) {
-                console.log('*FN* ' + fn + '(...): ' + params);
-            }
-        }
-
-        // hash navigation
-        function hash() {
-            var hash = window.location.hash,
-                redo = false,
-                view,
-                t;
-
-            traceFn('hash', hash);
-
-            if (!hash) {
-                hash = settings.startVid;
-                redo = true;
-            }
-
-            t = parseHash(hash);
-            if (!t || !t.vid) {
-                doError('Unable to parse target hash: "' + hash + '"');
-            }
-
-            view = views[t.vid];
-            if (!view) {
-                doError('No view defined with id: ' + t.vid);
-            }
-
-            if (redo) {
-                window.location.hash = makeHash(t);
-                // the above will result in a hashchange event, invoking
-                // this function again
-            } else {
-                // hash was not modified... navigate to where we need to be
-                navigate(hash, view, t);
-            }
-        }
-
-        function parseHash(s) {
-            // extract navigation coordinates from the supplied string
-            // "vid,ctx?flag1,flag2" --> { vid:vid, ctx:ctx, flags:{...} }
-            traceFn('parseHash', s);
-
-            // look for use of flags, first
-            var vidctx,
-                vid,
-                ctx,
-                flags,
-                flagMap,
-                m;
-
-            // RE that includes flags ('?flag1,flag2')
-            m = /^[#]{0,1}(.+)\?(.+)$/.exec(s);
-            if (m) {
-                vidctx = m[1];
-                flags = m[2];
-                flagMap = {};
-            } else {
-                // no flags
-                m = /^[#]{0,1}((.+)(,.+)*)$/.exec(s);
-                if (m) {
-                    vidctx = m[1];
-                } else {
-                    // bad hash
-                    return null;
-                }
-            }
-
-            vidctx = vidctx.split(',');
-            vid = vidctx[0];
-            ctx = vidctx[1];
-            if (flags) {
-                flags.split(',').forEach(function (f) {
-                    flagMap[f.trim()] = true;
-                });
-            }
-
-            return {
-                vid: vid.trim(),
-                ctx: ctx ? ctx.trim() : '',
-                flags: flagMap
-            };
-
-        }
-
-        function makeHash(t, ctx, flags) {
-            traceFn('makeHash');
-            // make a hash string from the given navigation coordinates,
-            // and optional flags map.
-            // if t is not an object, then it is a vid
-            var h = t,
-                c = ctx || '',
-                f = $.isPlainObject(flags) ? flags : null;
-
-            if ($.isPlainObject(t)) {
-                h = t.vid;
-                c = t.ctx || '';
-                f = t.flags || null;
-            }
-
-            if (c) {
-                h += ',' + c;
-            }
-            if (f) {
-                h += '?' + d3.map(f).keys().join(',');
-            }
-            trace('hash = "' + h + '"');
-            return h;
-        }
-
-        function navigate(hash, view, t) {
-            traceFn('navigate', view.vid);
-            // closePanes()     // flyouts etc.
-            // updateNav()      // accordion / selected nav item etc.
-            createView(view);
-            setView(view, hash, t);
-        }
-
-        function buildError(msg) {
-            buildErrors.push(msg);
-        }
-
-        function reportBuildErrors() {
-            traceFn('reportBuildErrors');
-            var nerr = buildErrors.length,
-                errmsg;
-            if (!nerr) {
-                console.log('(no build errors)');
-            } else {
-                errmsg = 'Build errors: ' + nerr + ' found...\n\n' +
-                    buildErrors.join('\n');
-                doAlert(errmsg);
-                console.error(errmsg);
-            }
-        }
-
-        // returns the reference if it is a function, null otherwise
-        function isF(f) {
-            return $.isFunction(f) ? f : null;
-        }
-
-        // returns the reference if it is an array, null otherwise
-        function isA(a) {
-            return $.isArray(a) ? a : null;
-        }
-
-        // ..........................................................
-        // View life-cycle functions
-
-        function setViewDimensions(sel) {
-            var w = window.innerWidth,
-                h = window.innerHeight - mastHeight;
-            sel.each(function () {
-                $(this)
-                    .css('width', w + 'px')
-                    .css('height', h + 'px')
-            });
-        }
-
-        function createView(view) {
-            var $d;
-
-            // lazy initialization of the view
-            if (view && !view.$div) {
-                trace('creating view for ' + view.vid);
-                $d = $view.append('div')
-                        .attr({
-                            id: view.vid,
-                            class: 'onosView'
-                         });
-                setViewDimensions($d);
-                view.$div = $d;   // cache a reference to the D3 selection
-            }
-        }
-
-        function setView(view, hash, t) {
-            traceFn('setView', view.vid);
-            // set the specified view as current, while invoking the
-            // appropriate life-cycle callbacks
-
-            // first, we'll start by closing the alerts pane, if open
-            closeAlerts();
-
-            // if there is a current view, and it is not the same as
-            // the incoming view, then unload it...
-            if (current.view && (current.view.vid !== view.vid)) {
-                current.view.unload();
-
-                // detach radio buttons, key handlers, etc.
-                $('#mastRadio').children().detach();
-                keyHandler.viewKeys = {};
-                keyHandler.viewFn = null;
-            }
-
-            // cache new view and context
-            current.view = view;
-            current.ctx = t.ctx || '';
-            current.flags = t.flags || {};
-
-            // init is called only once, after the view is in the DOM
-            if (!view.inited) {
-                view.init(current.ctx, current.flags);
-                view.inited = true;
-            }
-
-            // clear the view of stale data
-            view.reset();
-
-            // load the view
-            view.load(current.ctx, current.flags);
-        }
-
-        // generate 'unique' id by prefixing view id
-        function makeUid(view, id) {
-            return view.vid + '-' + id;
-        }
-
-        // restore id by removing view id prefix
-        function unmakeUid(view, uid) {
-            var re = new RegExp('^' + view.vid + '-');
-            return uid.replace(re, '');
-        }
-
-        function setRadioButtons(vid, btnSet) {
-            var view = views[vid],
-                btnG,
-                api = {};
-
-            // lazily create the buttons...
-            if (!(btnG = view.radioButtons)) {
-                btnG = d3.select(document.createElement('div'));
-                btnG.buttonDef = {};
-
-                btnSet.forEach(function (btn, i) {
-                    var bid = btn.id || 'b' + i,
-                        txt = btn.text || 'Button #' + i,
-                        uid = makeUid(view, bid),
-                        button = btnG.append('span')
-                        .attr({
-                            id: uid,
-                            class: 'radio'
-                        })
-                        .text(txt);
-
-                    btn.id = bid;
-                    btnG.buttonDef[uid] = btn;
-
-                    if (i === 0) {
-                        button.classed('active', true);
-                        btnG.selected = bid;
-                    }
-                });
-
-                btnG.selectAll('span')
-                    .on('click', function (d) {
-                        var button = d3.select(this),
-                            uid = button.attr('id'),
-                            btn = btnG.buttonDef[uid],
-                            act = button.classed('active');
-
-                        if (!act) {
-                            btnG.selectAll('span').classed('active', false);
-                            button.classed('active', true);
-                            btnG.selected = btn.id;
-                            if (isF(btn.cb)) {
-                                btn.cb(view.token(), btn);
-                            }
-                        }
-                    });
-
-                view.radioButtons = btnG;
-
-                api.selected = function () {
-                    return btnG.selected;
-                }
-            }
-
-            // attach the buttons to the masthead
-            $mastRadio.node().appendChild(btnG.node());
-            // return an api for interacting with the button set
-            return api;
-        }
-
-        function setupGlobalKeys() {
-            $.extend(keyHandler, {
-                globalKeys: {
-                    backSlash: [quickHelp, 'Show / hide Quick Help'],
-                    slash: [quickHelp, 'Show / hide Quick Help'],
-                    esc: [escapeKey, 'Dismiss dialog or cancel selections'],
-                    T: [toggleTheme, "Toggle theme"]
-                },
-                globalFormat: ['backSlash', 'slash', 'esc', 'T'],
-
-                // Masked keys are global key handlers that always return true.
-                // That is, the view will never see the event for that key.
-                maskedKeys: {
-                    slash: true,
-                    backSlash: true,
-                    T: true
-                }
-            });
-        }
-
-        function quickHelp(view, key, code, ev) {
-            libApi.quickHelp.show(keyHandler);
-            return true;
-        }
-
-        function escapeKey(view, key, code, ev) {
-            if (alerts.open) {
-                closeAlerts();
-                return true;
-            }
-            if (libApi.quickHelp.hide()) {
-                return true;
-            }
-            return false;
-        }
-
-        function toggleTheme(view, key, code, ev) {
-            var body = d3.select('body');
-            current.theme = (current.theme === 'light') ? 'dark' : 'light';
-            body.classed('light dark', false);
-            body.classed(current.theme, true);
-            theme(view);
-            return true;
-        }
-
-        function setGestureNotes(g) {
-            keyHandler.viewGestures = isA(g) || [];
-        }
-
-        function setKeyBindings(keyArg) {
-            var viewKeys,
-                masked = [];
-
-            if ($.isFunction(keyArg)) {
-                // set general key handler callback
-                keyHandler.viewFn = keyArg;
-            } else {
-                // set specific key filter map
-                viewKeys = d3.map(keyArg).keys();
-                viewKeys.forEach(function (key) {
-                    if (keyHandler.maskedKeys[key]) {
-                        masked.push('  Key "' + key + '" is reserved');
-                    }
-                });
-
-                if (masked.length) {
-                    doAlert('WARNING...\n\nsetKeys():\n' + masked.join('\n'));
-                }
-                keyHandler.viewKeys = keyArg;
-            }
-        }
-
-        function keyIn() {
-            var event = d3.event,
-                keyCode = event.keyCode,
-                key = whatKey(keyCode),
-                kh = keyHandler,
-                gk = kh.globalKeys[key],
-                gcb = isF(gk) || (isA(gk) && isF(gk[0])),
-                vk = kh.viewKeys[key],
-                vcb = isF(vk) || (isA(vk) && isF(vk[0])) || isF(kh.viewFn),
-                token = current.view.token();
-
-            // global callback?
-            if (gcb && gcb(token, key, keyCode, event)) {
-                // if the event was 'handled', we are done
-                return;
-            }
-            // otherwise, let the view callback have a shot
-            if (vcb) {
-                vcb(token, key, keyCode, event);
-            }
-        }
-
-        function createAlerts() {
-            $alerts.style('display', 'block');
-            $alerts.append('span')
-                .attr('class', 'close')
-                .text('X')
-                .on('click', closeAlerts);
-            $alerts.append('pre');
-            $alerts.append('p').attr('class', 'footnote')
-                .text('Press ESCAPE to close');
-            alerts.open = true;
-            alerts.count = 0;
-        }
-
-        function closeAlerts() {
-            $alerts.style('display', 'none')
-                .html('');
-            alerts.open = false;
-        }
-
-        function addAlert(msg) {
-            var lines,
-                oldContent;
-
-            if (alerts.count) {
-                oldContent = $alerts.select('pre').html();
-            }
-
-            lines = msg.split('\n');
-            lines[0] += '  '; // spacing so we don't crowd 'X'
-            lines = lines.join('\n');
-
-            if (oldContent) {
-                lines += '\n----\n' + oldContent;
-            }
-
-            $alerts.select('pre').html(lines);
-            alerts.count++;
-        }
-
-        function doAlert(msg) {
-            if (!alerts.open) {
-                createAlerts();
-            }
-            addAlert(msg);
-        }
-
-        function resize(e) {
-            d3.selectAll('.onosView').call(setViewDimensions);
-            // allow current view to react to resize event...
-            if (current.view) {
-                current.view.resize(current.ctx, current.flags);
-            }
-        }
-
-        function theme() {
-            // allow current view to react to theme event...
-            if (current.view) {
-                current.view.theme(current.ctx, current.flags);
-            }
-        }
-
-        // ..........................................................
-        // View class
-        //   Captures state information about a view.
-
-        // Constructor
-        //      vid : view id
-        //      nid : id of associated nav-item (optional)
-        //      cb  : callbacks (init, reset, load, unload, resize, theme, error)
-        function View(vid) {
-            var av = 'addView(): ',
-                args = Array.prototype.slice.call(arguments),
-                nid,
-                cb;
-
-            args.shift();   // first arg is always vid
-            if (typeof args[0] === 'string') {  // nid specified
-                nid = args.shift();
-            }
-            cb = args.shift();
-
-            this.vid = vid;
-
-            if (validateViewArgs(vid)) {
-                this.nid = nid;     // explicit navitem id (can be null)
-                this.cb = $.isPlainObject(cb) ? cb : {};    // callbacks
-                this.$div = null;               // view not yet added to DOM
-                this.radioButtons = null;       // no radio buttons yet
-                this.ok = true;                 // valid view
-            }
-        }
-
-        function validateViewArgs(vid) {
-            var av = "ui.addView(...): ",
-                ok = false;
-            if (typeof vid !== 'string' || !vid) {
-                doError(av + 'vid required');
-            } else if (views[vid]) {
-                doError(av + 'View ID "' + vid + '" already exists');
-            } else {
-                ok = true;
-            }
-            return ok;
-        }
-
-        var viewInstanceMethods = {
-            token: function () {
-                return {
-                    // attributes
-                    vid: this.vid,
-                    nid: this.nid,
-                    $div: this.$div,
-
-                    // functions
-                    width: this.width,
-                    height: this.height,
-                    uid: this.uid,
-                    setRadio: this.setRadio,
-                    setKeys: this.setKeys,
-                    setGestures: this.setGestures,
-                    dataLoadError: this.dataLoadError,
-                    alert: this.alert,
-                    flash: this.flash,
-                    getTheme: this.getTheme
-                }
-            },
-
-            // == Life-cycle functions
-            // TODO: factor common code out of life-cycle
-            init: function (ctx, flags) {
-                var c = ctx || '',
-                    fn = isF(this.cb.init);
-                traceFn('View.init', this.vid + ', ' + c);
-                if (fn) {
-                    trace('INIT cb for ' + this.vid);
-                    fn(this.token(), c, flags);
-                }
-            },
-
-            reset: function (ctx, flags) {
-                var c = ctx || '',
-                    fn = isF(this.cb.reset);
-                traceFn('View.reset', this.vid);
-                if (fn) {
-                    trace('RESET cb for ' + this.vid);
-                    fn(this.token(), c, flags);
-                } else if (this.cb.reset === true) {
-                    // boolean true signifies "clear view"
-                    trace('  [true] cleaing view...');
-                    viewApi.empty();
-                }
-            },
-
-            load: function (ctx, flags) {
-                var c = ctx || '',
-                    fn = isF(this.cb.load);
-                traceFn('View.load', this.vid + ', ' + c);
-                this.$div.classed('currentView', true);
-                if (fn) {
-                    trace('LOAD cb for ' + this.vid);
-                    fn(this.token(), c, flags);
-                }
-            },
-
-            unload: function (ctx, flags) {
-                var c = ctx | '',
-                    fn = isF(this.cb.unload);
-                traceFn('View.unload', this.vid);
-                this.$div.classed('currentView', false);
-                if (fn) {
-                    trace('UNLOAD cb for ' + this.vid);
-                    fn(this.token(), c, flags);
-                }
-            },
-
-            resize: function (ctx, flags) {
-                var c = ctx || '',
-                    fn = isF(this.cb.resize),
-                    w = this.width(),
-                    h = this.height();
-                traceFn('View.resize', this.vid + '/' + c +
-                        ' [' + w + 'x' + h + ']');
-                if (fn) {
-                    trace('RESIZE cb for ' + this.vid);
-                    fn(this.token(), c, flags);
-                }
-            },
-
-            theme: function (ctx, flags) {
-                var c = ctx | '',
-                    fn = isF(this.cb.theme);
-                traceFn('View.theme', this.vid);
-                if (fn) {
-                    trace('THEME cb for ' + this.vid);
-                    fn(this.token(), c, flags);
-                }
-            },
-
-            error: function (ctx, flags) {
-                var c = ctx || '',
-                    fn = isF(this.cb.error);
-                traceFn('View.error', this.vid + ', ' + c);
-                if (fn) {
-                    trace('ERROR cb for ' + this.vid);
-                    fn(this.token(), c, flags);
-                }
-            },
-
-            // == Token API functions
-            width: function () {
-                return $(this.$div.node()).width();
-            },
-
-            height: function () {
-                return $(this.$div.node()).height();
-            },
-
-            setRadio: function (btnSet) {
-                return setRadioButtons(this.vid, btnSet);
-            },
-
-            setKeys: function (keyArg) {
-                setKeyBindings(keyArg);
-            },
-
-            setGestures: function (g) {
-                setGestureNotes(g);
-            },
-
-            getTheme: function () {
-                return current.theme;
-            },
-
-            uid: function (id) {
-                return makeUid(this, id);
-            },
-
-            // TODO : add exportApi and importApi methods
-            // TODO : implement custom dialogs
-
-            // Consider enhancing alert mechanism to handle multiples
-            // as individually closable.
-            alert: function (msg) {
-                doAlert(msg);
-            },
-
-            flash: function (msg) {
-                libApi.feedback.flash(msg);
-            },
-
-            dataLoadError: function (err, url) {
-                var msg = 'Data Load Error\n\n' +
-                    err.status + ' -- ' + err.statusText + '\n\n' +
-                    'relative-url: "' + url + '"\n\n' +
-                    'complete-url: "' + err.responseURL + '"';
-                this.alert(msg);
-            }
-
-            // TODO: consider schedule, clearTimer, etc.
-        };
-
-        // attach instance methods to the view prototype
-        $.extend(View.prototype, viewInstanceMethods);
-
-        // ..........................................................
-        // UI API
-
-        var fpConfig = {
-            TR: {
-                side: 'right'
-            },
-            TL: {
-                side: 'left'
-            }
-        };
-
-        uiApi = {
-            addLib: function (libName, api) {
-                // TODO: validation of args
-                libApi[libName] = api;
-            },
-
-            // TODO: implement floating panel as a class
-            // TODO: parameterize position (currently hard-coded to TopRight)
-            /*
-             * Creates div in floating panels block, with the given id.
-             * Returns panel token used to interact with the panel
-             */
-            addFloatingPanel: function (id, position) {
-                var pos = position || 'TR',
-                    cfg = fpConfig[pos],
-                    el,
-                    fp,
-                    on = false;
-
-                if (fpanels[id]) {
-                    buildError('Float panel with id "' + id + '" already exists.');
-                    return null;
-                }
-
-                el = $floatPanels.append('div')
-                    .attr('id', id)
-                    .attr('class', 'fpanel')
-                    .style('opacity', 0);
-
-                // has to be called after el is set.
-                el.style(cfg.side, pxHide());
-
-                function pxShow() {
-                    return '20px';
-                }
-                function pxHide() {
-                    return (-20 - widthVal()) + 'px';
-                }
-                function noPx(what) {
-                    return el.style(what).replace(/px$/, '');
-                }
-                function widthVal() {
-                    return noPx('width');
-                }
-                function heightVal() {
-                    return noPx('height');
-                }
-
-                function noop() {}
-
-                fp = {
-                    id: id,
-                    el: el,
-                    pos: pos,
-                    isVisible: function () {
-                        return on;
-                    },
-
-                    show: function (cb) {
-                        var endCb = isF(cb) || noop;
-                        on = true;
-                        el.transition().duration(750)
-                            .each('end', endCb)
-                            .style(cfg.side, pxShow())
-                            .style('opacity', 1);
-                    },
-                    hide: function (cb) {
-                        var endCb = isF(cb) || noop;
-                        on = false;
-                        el.transition().duration(750)
-                            .each('end', endCb)
-                            .style(cfg.side, pxHide())
-                            .style('opacity', 0);
-                    },
-                    empty: function () {
-                        return el.html('');
-                    },
-                    append: function (what) {
-                        return el.append(what);
-                    },
-                    width: function (w) {
-                        if (w === undefined) {
-                            return widthVal();
-                        }
-                        el.style('width', w + 'px');
-                    },
-                    height: function (h) {
-                        if (h === undefined) {
-                            return heightVal();
-                        }
-                        el.style('height', h + 'px');
-                    }
-                };
-                fpanels[id] = fp;
-                return fp;
-            },
-
-            // TODO: it remains to be seen whether we keep this style of docs
-            /** @api ui addView( vid, nid, cb )
-             * Adds a view to the UI.
-             * <p>
-             * Views are loaded/unloaded into the view content pane at
-             * appropriate times, by the navigation framework. This method
-             * adds a view to the UI and returns a token object representing
-             * the view. A view's token is always passed as the first
-             * argument to each of the view's life-cycle callback functions.
-             * <p>
-             * Note that if the view is directly referenced by a nav-item,
-             * or in a group of views with one of those views referenced by
-             * a nav-item, then the <i>nid</i> argument can be omitted as
-             * the framework can infer it.
-             * <p>
-             * <i>cb</i> is a plain object containing callback functions:
-             * "init", "reset", "load", "unload", "resize", "theme", "error".
-             * <pre>
-             *     function myLoad(view, ctx) { ... }
-             *     ...
-             *     // short form...
-             *     onos.ui.addView('viewId', {
-             *         load: myLoad
-             *     });
-             * </pre>
-             *
-             * @param vid (string) [*] view ID (a unique DOM element id)
-             * @param nid (string) nav-item ID (a unique DOM element id)
-             * @param cb (object) [*] callbacks object
-             * @return the view token
-             */
-            addView: function (vid, nid, cb) {
-                traceFn('addView', vid);
-                var view = new View(vid, nid, cb),
-                    token;
-                if (view.ok) {
-                    views[vid] = view;
-                    token = view.token();
-                } else {
-                    token = { vid: view.vid, bad: true };
-                }
-                return token;
-            }
-        };
-
-        // ..........................................................
-        // View API
-
-        // TODO: deprecated
-        viewApi = {
-            /** @api view empty( )
-             * Empties the current view.
-             * <p>
-             * More specifically, removes all DOM elements from the
-             * current view's display div.
-             */
-            empty: function () {
-                if (!current.view) {
-                    return;
-                }
-                current.view.$div.html('');
-            }
-        };
-
-        // ..........................................................
-        // Nav API
-        navApi = {
-
-        };
-
-        // ..........................................................
-        // Library API
-        libApi = {
-
-        };
-
-        // ..........................................................
-        // Exported API
-
-        // function to be called from index.html to build the ONOS UI
-        function buildOnosUi() {
-            tsB = new Date().getTime();
-            tsI = tsB - tsI; // initialization duration
-
-            console.log('ONOS UI initialized in ' + tsI + 'ms');
-
-            if (built) {
-                throwError("ONOS UI already built!");
-            }
-            built = true;
-
-            $mastRadio = d3.select('#mastRadio');
-
-            $(window).on('hashchange', hash);
-            $(window).on('resize', resize);
-
-            d3.select('body').on('keydown', keyIn);
-            setupGlobalKeys();
-
-            // Invoke hashchange callback to navigate to content
-            // indicated by the window location hash.
-            hash();
-
-            // If there were any build errors, report them
-            reportBuildErrors();
-        }
-
-        // export the api and build-UI function
-        return {
-            ui: uiApi,
-            lib: libApi,
-            //view: viewApi,
-            nav: navApi,
-            buildUi: buildOnosUi,
-            exported: exported
-        };
-    };
-
-}(jQuery));
diff --git a/web/gui/src/main/webapp/legacy/onosFlash.css b/web/gui/src/main/webapp/legacy/onosFlash.css
deleted file mode 100644
index 30decca..0000000
--- a/web/gui/src/main/webapp/legacy/onosFlash.css
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Feedback layer -- CSS file
- */
-
-#feedback {
-    z-index: 1400;
-}
-
-#feedback svg {
-    position: absolute;
-    bottom: 0;
-    opacity: 0.8;
-}
-
-#feedback svg g.feedbackItem {
-    background-color: teal;
-}
-
-#feedback svg g.feedbackItem rect {
-    fill: #ccc;
-}
-
-#feedback svg g.feedbackItem text {
-    fill: #333;
-    stroke: none;
-    text-anchor: middle;
-    alignment-baseline: middle;
-
-    font-size: 16pt;
-}
diff --git a/web/gui/src/main/webapp/legacy/onosFlash.js b/web/gui/src/main/webapp/legacy/onosFlash.js
deleted file mode 100644
index 4035bb3..0000000
--- a/web/gui/src/main/webapp/legacy/onosFlash.js
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Feedback layer
-
- Defines the feedback layer for the UI. Used to give user visual feedback
- of choices, typically responding to keystrokes.
- */
-
-(function (onos){
-    'use strict';
-
-    // API's
-    var api = onos.api;
-
-    // Config variables
-    var w = '100%',
-        h = 200,
-        fade = 200,
-        showFor = 1200,
-        vb = '-200 -' + (h/2) + ' 400 ' + h,
-        xpad = 20,
-        ypad = 10;
-
-    // State variables
-    var timer = null,
-        data = [];
-
-    // DOM elements and the like
-    var fb = d3.select('#feedback');
-
-    var svg;
-
-    //var svg = fb.append('svg').attr({
-    //    width: w,
-    //    height: h,
-    //    viewBox: vb
-    //});
-
-    function computeBox(el) {
-        var text = el.select('text'),
-            box = text.node().getBBox();
-
-        // center
-        box.x = -box.width / 2;
-        box.y = -box.height / 2;
-
-        // add some padding
-        box.x -= xpad;
-        box.width += xpad * 2;
-        box.y -= ypad;
-        box.height += ypad * 2;
-
-        return box;
-    }
-
-    function updateFeedback() {
-        if (!svg) {
-            svg = fb.append('svg').attr({
-                width: w,
-                height: h,
-                viewBox: vb
-            });
-        }
-
-        var items = svg.selectAll('.feedbackItem')
-            .data(data);
-
-        var entering = items.enter()
-            .append('g')
-            .attr({
-                class: 'feedbackItem',
-                opacity: 0
-            })
-            .transition()
-            .duration(fade)
-            .attr('opacity', 1);
-
-        entering.each(function (d) {
-            var el = d3.select(this),
-                box;
-
-            d.el = el;
-            el.append('rect').attr({ rx: 10, ry: 10});
-            el.append('text').text(d.label);
-            box = computeBox(el);
-            el.select('rect').attr(box);
-        });
-
-        items.exit()
-            .transition()
-            .duration(fade)
-            .attr({ opacity: 0})
-            .remove();
-
-        if (svg && data.length === 0) {
-            svg.transition()
-                .delay(fade + 10)
-                .remove();
-            svg = null;
-        }
-    }
-
-    function clearFlash() {
-        if (timer) {
-            clearInterval(timer);
-        }
-        data = [];
-        updateFeedback();
-    }
-
-    // for now, simply display some text feedback
-    function flash(text) {
-        // cancel old scheduled event if there was one
-        if (timer) {
-            clearInterval(timer);
-        }
-        timer = setInterval(function () {
-            clearFlash();
-        }, showFor);
-
-        data = [{
-            label: text
-        }];
-        updateFeedback();
-    }
-
-    onos.ui.addLib('feedback', {
-        flash: flash
-    });
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/onosFloatPanel.css b/web/gui/src/main/webapp/legacy/onosFloatPanel.css
deleted file mode 100644
index 05ae076..0000000
--- a/web/gui/src/main/webapp/legacy/onosFloatPanel.css
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Floating Panels -- CSS file
- */
-
-.fpanel {
-    position: absolute;
-    z-index: 100;
-    display: block;
-    top: 64px;
-    width: 260px;
-    right: -300px;
-    opacity: 0;
-    background-color: rgba(255,255,255,0.8);
-
-    padding: 10px;
-    color: black;
-    font-size: 10pt;
-
-    -moz-border-radius: 6px;
-    border-radius: 6px;
-    box-shadow: 0px 2px 12px #777;
-}
-
-/* TODO: light/dark themes */
-.light .fpanel {
-
-}
-.dark .fpanel {
-
-}
diff --git a/web/gui/src/main/webapp/legacy/onosMast.css b/web/gui/src/main/webapp/legacy/onosMast.css
deleted file mode 100644
index 7210043..0000000
--- a/web/gui/src/main/webapp/legacy/onosMast.css
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Masthead -- CSS file
- */
-
-#mast {
-    height: 36px;
-    padding: 4px;
-    vertical-align: baseline;
-}
-
-.light #mast {
-    background-color: #bbb;
-    box-shadow: 0 2px 8px #777;
-}
-.dark #mast {
-    background-color: #444;
-    box-shadow: 0 2px 8px #777;
-}
-
-#mast img#logo {
-    height: 38px;
-    padding-left: 8px;
-    padding-right: 8px;
-}
-
-#mast span.title {
-    font-size: 14pt;
-    font-style: italic;
-    vertical-align: 12px;
-}
-
-.light #mast span.title {
-    color: #369;
-}
-.dark #mast span.title {
-    color: #eee;
-}
-
-#mast span.right {
-    padding-top: 8px;
-    padding-right: 16px;
-    float: right;
-}
-
-#mast span.radio {
-    font-size: 10pt;
-    margin: 4px 2px;
-    padding: 1px 6px;
-    -moz-border-radius: 3px;
-    border-radius: 3px;
-    cursor: pointer;
-}
-
-.light #mast span.radio {
-    border: 1px dotted #222;
-    color: #eee;
-}
-.dark #mast span.radio {
-    border: 1px dotted #bbb;
-    color: #888;
-}
-
-#mast span.radio.active {
-    padding: 1px 6px;
-}
-
-.light #mast span.radio.active {
-    background-color: #bbb;
-    border: 1px solid #eee;
-    color: #666;
-
-}
-.dark #mast span.radio.active {
-    background-color: #222;
-    border: 1px solid #eee;
-    color: #78a;
-}
-
-/* Button Bar */
-
-#bb {
-    margin: 0 30px;
-    padding: 0 2px;
-}
-
-#bb .btn {
-    margin: 0 4px;
-    padding: 2px 6px;
-    -moz-border-radius: 3px;
-    border-radius: 3px;
-    font-size: 9pt;
-    cursor: pointer;
-}
-
-.light #bb .btn {
-    border: 1px solid #fff;
-    border-right-color: #444;
-    border-bottom-color: #444;
-    color: #222;
-}
-
-.light #bb .btn.active {
-    border: 1px solid #444;
-    border-right-color: #fff;
-    border-bottom-color: #fff;
-    background-color: #888;
-    color: #ddf;
-}
-
-.dark #bb .btn {
-    border: 1px solid #888;
-    border-right-color: #111;
-    border-bottom-color: #111;
-    color: #888;
-}
-
-.dark #bb .btn.active {
-    border: 1px solid #111;
-    border-right-color: #888;
-    border-bottom-color: #888;
-    background-color: #555;
-    color: #78a;
-}
-
diff --git a/web/gui/src/main/webapp/legacy/onosMast.js b/web/gui/src/main/webapp/legacy/onosMast.js
deleted file mode 100644
index d4f51b7..0000000
--- a/web/gui/src/main/webapp/legacy/onosMast.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Masthead script
-
- Defines the masthead for the UI. Injects logo and title, as well as providing
- the placeholder for a set of radio buttons.
- */
-
-(function (onos){
-    'use strict';
-
-    // API's
-    var api = onos.api;
-
-    // Config variables
-    var guiTitle = 'Open Network Operating System';
-
-    // DOM elements and the like
-    var mast = d3.select('#mast');
-
-    mast.append('img')
-        .attr({
-            id: 'logo',
-            src: 'onos-logo.png'
-        });
-
-    mast.append('span')
-        .attr({
-            class: 'title'
-        })
-        .text(guiTitle);
-
-    mast.append('span')
-        .attr({
-            id: 'mastRadio',
-            class: 'right'
-        });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/onosQuickHelp.css b/web/gui/src/main/webapp/legacy/onosQuickHelp.css
deleted file mode 100644
index 899730e..0000000
--- a/web/gui/src/main/webapp/legacy/onosQuickHelp.css
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Quick Help layer -- CSS file
- */
-
-#quickhelp {
-    z-index: 1300;
-}
-
-#quickhelp svg {
-    position: absolute;
-    top: 180px;
-    opacity: 1;
-}
-
-#quickhelp svg g.help rect {
-    fill: black;
-    opacity: 0.7;
-}
-
-#quickhelp svg text.title {
-    font-size: 10pt;
-    font-style: italic;
-    text-anchor: middle;
-    fill: #999;
-}
-
-#quickhelp svg g.keyItem {
-    fill: white;
-}
-
-#quickhelp svg g line.qhrowsep {
-    stroke: #888;
-    stroke-dasharray: 2 2;
-}
-
-#quickhelp svg text {
-    font-size: 7pt;
-    alignment-baseline: middle;
-}
-
-#quickhelp svg text.key {
-    fill: #add;
-}
-
-#quickhelp svg text.desc {
-    fill: #ddd;
-}
-
diff --git a/web/gui/src/main/webapp/legacy/onosQuickHelp.js b/web/gui/src/main/webapp/legacy/onosQuickHelp.js
deleted file mode 100644
index c0767ef..0000000
--- a/web/gui/src/main/webapp/legacy/onosQuickHelp.js
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Quick Help Layer
-
- Defines the key-map layer for the UI. Used to give user a list of
- key bindings; both global, and for the current view.
- */
-
-(function (onos){
-    'use strict';
-
-    // Config variables
-    var w = '100%',
-        h = '80%',
-        fade = 500,
-        vb = '-200 0 400 400';
-
-    // layout configuration
-    var pad = 10,
-        offy = 45,
-        sepYDelta = 20,
-        colXDelta = 16,
-        yTextSpc = 12,
-        offDesc = 8;
-
-    // State variables
-    var data = [],
-        yCount;
-
-    // DOM elements and the like
-    var qhdiv = d3.select('#quickhelp'),
-        svg = qhdiv.select('svg'),
-        pane, rect, items;
-
-    // General functions
-    function isA(a) { return $.isArray(a) ? a : null; }
-    function isS(s) { return typeof s === 'string'; }
-
-    function cap(s) {
-        return s.replace(/^[a-z]/, function (m) { return m.toUpperCase(); });
-    }
-
-    var keyDisp = {
-        equals: '=',
-        dash: '-',
-        slash: '/',
-        backSlash: '\\',
-        backQuote: '`',
-        leftArrow: 'L-arrow',
-        upArrow: 'U-arrow',
-        rightArrow: 'R-arrow',
-        downArrow: 'D-arrow'
-    };
-
-    function mkKeyDisp(id) {
-        var v = keyDisp[id] || id;
-        return cap(v);
-    }
-
-    function addSeparator(el, i) {
-        var y = sepYDelta/2 - 5;
-        el.append('line')
-            .attr({ 'class': 'qhrowsep', x1: 0, y1: y, x2: 0, y2: y });
-    }
-
-    function addContent(el, data, ri) {
-        var xCount = 0,
-            clsPfx = 'qh-r' + ri + '-c';
-
-        function addColumn(el, c, i) {
-            var cls = clsPfx + i,
-                oy = 0,
-                aggKey = el.append('g').attr('visibility', 'hidden'),
-                gcol = el.append('g').attr({
-                   'class': cls,
-                    transform: translate(xCount, 0)
-                });
-
-            c.forEach(function (j) {
-                var k = j[0],
-                    v = j[1];
-
-                if (k !== '-') {
-                    aggKey.append('text').text(k);
-
-                    gcol.append('text').text(k)
-                        .attr({
-                            'class': 'key',
-                            y: oy
-                        });
-                    gcol.append('text').text(v)
-                        .attr({
-                            'class': 'desc',
-                            y: oy
-                        });
-                }
-
-                oy += yTextSpc;
-            });
-
-            // adjust position of descriptions, based on widest key
-            var kbox = aggKey.node().getBBox(),
-                ox = kbox.width + offDesc;
-            gcol.selectAll('.desc').attr('x', ox);
-            aggKey.remove();
-
-            // now update x-offset for next column
-            var bbox = gcol.node().getBBox();
-            xCount += bbox.width + colXDelta;
-        }
-
-        data.forEach(function (d, i) {
-            addColumn(el, d, i);
-        });
-
-        // finally, return the height of the row..
-        return el.node().getBBox().height;
-    }
-
-    function updateKeyItems() {
-        var rows = items.selectAll('.qhRow').data(data);
-
-        yCount = offy;
-
-        var entering = rows.enter()
-            .append('g')
-            .attr({
-                'class': 'qhrow'
-            });
-
-        entering.each(function (r, i) {
-            var el = d3.select(this),
-                sep = r.type === 'sep',
-                dy;
-
-            el.attr('transform', translate(0, yCount));
-
-            if (sep) {
-                addSeparator(el, i);
-                yCount += sepYDelta;
-            } else {
-                dy = addContent(el, r.data, i);
-                yCount += dy;
-            }
-        });
-
-        // size the backing rectangle
-        var ibox = items.node().getBBox(),
-            paneW = ibox.width + pad * 2,
-            paneH = ibox.height + offy;
-
-        items.selectAll('.qhrowsep').attr('x2', ibox.width);
-        items.attr('transform', translate(-paneW/2, -pad));
-        rect.attr({
-            width: paneW,
-            height: paneH,
-            transform: translate(-paneW/2-pad, 0)
-        });
-
-    }
-
-    function translate(x, y) {
-        return 'translate(' + x + ',' + y + ')';
-    }
-
-    function checkFmt(fmt) {
-        // should be a single array of keys,
-        // or array of arrays of keys (one per column).
-        // return null if there is a problem.
-        var a = isA(fmt),
-            n = a && a.length,
-            ns = 0,
-            na = 0;
-
-        if (n) {
-            // it is an array which has some content
-            a.forEach(function (d) {
-                isA(d) && na++;
-                isS(d) && ns++;
-            });
-            if (na === n || ns === n) {
-                // all arrays or all strings...
-                return a;
-            }
-        }
-        return null;
-    }
-
-    function buildBlock(map, fmt) {
-        var b = [];
-        fmt.forEach(function (k) {
-            var v = map.get(k),
-                a = isA(v),
-                d = (a && a[1]);
-
-            // '-' marks a separator; d is the description
-            if (k === '-' || d) {
-                b.push([mkKeyDisp(k), d]);
-            }
-        });
-        return b;
-    }
-
-    function emptyRow() {
-        return { type: 'row', data: []};
-    }
-
-    function mkArrRow(fmt) {
-        var d = emptyRow();
-        d.data.push(fmt);
-        return d;
-    }
-
-    function mkColumnarRow(map, fmt) {
-        var d = emptyRow();
-        fmt.forEach(function (a) {
-            d.data.push(buildBlock(map, a));
-        });
-        return d;
-    }
-
-    function mkMapRow(map, fmt) {
-        var d = emptyRow();
-        d.data.push(buildBlock(map, fmt));
-        return d;
-    }
-
-    function addRow(row) {
-        var d = row || { type: 'sep' };
-        data.push(d);
-    }
-
-    function aggregateData(bindings) {
-        var hf = '_helpFormat',
-            gmap = d3.map(bindings.globalKeys),
-            gfmt = bindings.globalFormat,
-            vmap = d3.map(bindings.viewKeys),
-            vgest = bindings.viewGestures,
-            vfmt, vkeys;
-
-        // filter out help format entry
-        vfmt = checkFmt(vmap.get(hf));
-        vmap.remove(hf);
-
-        // if bad (or no) format, fallback to sorted keys
-        if (!vfmt) {
-            vkeys = vmap.keys();
-            vfmt = vkeys.sort();
-        }
-
-        data = [];
-
-        addRow(mkMapRow(gmap, gfmt));
-        addRow();
-        addRow(isA(vfmt[0]) ? mkColumnarRow(vmap, vfmt) : mkMapRow(vmap, vfmt));
-        addRow();
-        addRow(mkArrRow(vgest));
-    }
-
-
-    function popBind(bindings) {
-        pane = svg.append('g')
-            .attr({
-                class: 'help',
-                opacity: 0
-            });
-
-        rect = pane.append('rect')
-            .attr('rx', 8);
-
-        pane.append('text')
-            .text('Quick Help')
-            .attr({
-                class: 'title',
-                dy: '1.2em',
-                transform: translate(-pad,0)
-            });
-
-        items = pane.append('g');
-        aggregateData(bindings);
-        updateKeyItems();
-
-        _fade(1);
-    }
-
-    function fadeBindings() {
-        _fade(0);
-    }
-
-    function _fade(o) {
-        svg.selectAll('g.help')
-            .transition()
-            .duration(fade)
-            .attr('opacity', o);
-    }
-
-    function addSvg() {
-        svg = qhdiv.append('svg')
-            .attr({
-                width: w,
-                height: h,
-                viewBox: vb
-            });
-    }
-
-    function removeSvg() {
-        svg.transition()
-            .delay(fade + 20)
-            .remove();
-    }
-
-    function showQuickHelp(bindings) {
-        svg = qhdiv.select('svg');
-        if (svg.empty()) {
-            addSvg();
-            popBind(bindings);
-        } else {
-            hideQuickHelp();
-        }
-    }
-
-    function hideQuickHelp() {
-        svg = qhdiv.select('svg');
-        if (!svg.empty()) {
-            fadeBindings();
-            removeSvg();
-            return true;
-        }
-        return false;
-    }
-
-    onos.ui.addLib('quickHelp', {
-        show: showQuickHelp,
-        hide: hideQuickHelp
-    });
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/sample.js b/web/gui/src/main/webapp/legacy/sample.js
deleted file mode 100644
index bbd7ef9..0000000
--- a/web/gui/src/main/webapp/legacy/sample.js
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- Sample module file to illustrate framework integration.
- */
-
-(function (onos) {
-    'use strict';
-
-    var pi = Math.PI,
-        svg,
-        dotG,
-        nCircles = 12,
-        circleData = [],
-        dotId = 0,
-        angle = 360 / nCircles,
-        baseAngle = -90 - angle,
-        groupRadius = 120,
-        dotRadius = 24,
-        dotMoveMs = 800,
-        dotAppearMs = 300,
-        dotEase = 'elastic',
-        colorScale = d3.scale.linear()
-            .domain([-pi/2, 2*pi/4, 3*pi/2])
-            .range(['green', 'goldenrod', 'blue']);
-
-    // set the size of the SVG layer to match that of the view
-    function sizeSvg(view) {
-        svg.attr({
-            width: view.width(),
-            height: view.height()
-        });
-    }
-
-    // gets invoked only the first time the view is loaded
-    function init(view, ctx, flags) {
-        // prepare our SVG layer...
-        svg = view.$div.append('svg');
-        sizeSvg(view);
-        dotG = svg.append('g').attr('id', 'dots');
-    }
-
-    // gets invoked just before our view is loaded
-    function reset(view, ctx, flags) {
-        // clear dot group and reset circle data
-        dotG.html('');
-        circleData = [];
-        // also clear text, if any
-        svg.selectAll('text').remove();
-    }
-
-    function updateCirclePositions(view, addNew) {
-        var w = view.width(),
-            h = view.height(),
-            ox = w / 2,
-            oy = h / 2;
-
-        // reposition existing dots
-        circleData.forEach(function (c, i) {
-            var inc = addNew ? 1 : 0,
-                theta = ((i + inc) * angle + baseAngle) * pi/180,
-                dx = Math.cos(theta) * groupRadius,
-                dy = Math.sin(theta) * groupRadius,
-                x = ox + dx,
-                y = oy + dy;
-            if (!addNew && i === 0) {
-                x = ox;
-                y = oy;
-            }
-            c.cx = x;
-            c.cy = y;
-            c.rgb = colorScale(theta);
-        });
-
-        if (addNew) {
-            // introduce a new dot
-            circleData.unshift({
-                cx: ox,
-                cy: oy,
-                id: dotId++
-            });
-        }
-
-        // +1 to account for the circle in the center..
-        if (circleData.length > nCircles + 1) {
-            circleData.splice(nCircles + 1, 1);
-        }
-    }
-
-    function doCircles(view) {
-        var ox = view.width() / 2,
-            oy = view.height() / 2,
-            stroke = 'black',
-            fill = 'red',
-            hoverFill = 'magenta';
-
-        // move existing circles, and add a new one
-        updateCirclePositions(view, true);
-
-        var circ = dotG.selectAll('circle')
-            .data(circleData, function (d) { return d.id; });
-
-        // operate on existing elements
-        circ.on('mouseover', null)
-            .on('mouseout', null)
-            .on('click', null)
-            .transition()
-            .duration(dotMoveMs)
-            .ease(dotEase)
-            .attr({
-                cx: function (d) { return d.cx; },
-                cy: function (d) { return d.cy; }
-            })
-            .style({
-                cursor: 'default',
-                fill: function (d) { return d.rgb; }
-            });
-
-        // operate on entering elements
-        circ.enter()
-            .append('circle')
-            .attr({
-                cx: function (d) { return d.cx; },
-                cy: function (d) { return d.cy; },
-                r: 0
-            })
-            .style({
-                fill: fill,
-                stroke: stroke,
-                'stroke-width': 3.5,
-                cursor: 'pointer',
-                opacity: 0
-            })
-            .on('mouseover', function (d) {
-                d3.select(this).style('fill', hoverFill);
-            })
-            .on('mouseout', function (d) {
-                d3.select(this).style('fill', fill);
-            })
-            .on('click', function (d) {
-                setTimeout(function() {
-                    doCircles(view, true);
-                }, 10);
-            })
-            .transition()
-            .delay(dotMoveMs)
-            .duration(dotAppearMs)
-            .attr('r', dotRadius)
-            .style('opacity', 1);
-
-        // operate on exiting elements
-        circ.exit()
-            .transition()
-            .duration(750)
-            .style('opacity', 0)
-            .attr({
-                cx: ox,
-                cy: oy,
-                r: groupRadius - dotRadius
-            })
-            .remove();
-    }
-
-    function load(view, ctx, flags) {
-        var ctxText = ctx ? 'Context is "' + ctx + '"' : '';
-
-        // display our view context
-        if (ctxText) {
-            svg.append('text')
-                .text(ctxText)
-                .attr({
-                    x: 20,
-                    y: '1.5em'
-                })
-                .style({
-                    fill: 'darkgreen',
-                    'font-size': '20pt'
-                });
-        }
-
-        doCircles(view);
-    }
-
-    function resize(view, ctx, flags) {
-        sizeSvg(view);
-        updateCirclePositions(view);
-
-        // move exiting dots into new positions, relative to view size
-        var circ = dotG.selectAll('circle')
-            .data(circleData, function (d) { return d.id; });
-        circ.attr({
-                cx: function (d) { return d.cx; },
-                cy: function (d) { return d.cy; }
-            });
-    }
-
-    // == register our view here, with links to lifecycle callbacks
-
-    onos.ui.addView('sample', {
-        init: init,
-        reset: reset,
-        load: load,
-        resize: resize
-    });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/sampleHash.js b/web/gui/src/main/webapp/legacy/sampleHash.js
deleted file mode 100644
index f668c74..0000000
--- a/web/gui/src/main/webapp/legacy/sampleHash.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- Sample view to illustrate hash formats.
- */
-
-(function (onos) {
-    'use strict';
-
-    var intro = "Try using the following hashes in the address bar:",
-        hashPrefix = '#sampleHash',
-        suffixes = [
-            '',
-            ',one',
-            ',two',
-            ',context,ignored',
-            ',context,ignored?a,b,c',
-            ',two?foo',
-            ',three?foo,bar'
-        ],
-        $d;
-
-    function note(txt) {
-        $d.append('p')
-            .text(txt)
-            .style({
-                'font-size': '10pt',
-                color: 'darkorange',
-                padding: '0 20px',
-                margin: 0
-            });
-    }
-
-    function para(txt, color) {
-        var c = color || 'black';
-        $d.append('p')
-            .text(txt)
-            .style({
-                padding: '2px 8px',
-                color: c
-            });
-    }
-
-    function load(view, ctx, flags) {
-        var c = ctx || '(undefined)',
-            f = flags ? d3.map(flags).keys() : [];
-
-        $d = view.$div;
-
-        para(intro);
-
-        suffixes.forEach(function (s) {
-            note(hashPrefix + s);
-        });
-
-        para('View ID: ' + view.vid, 'blue');
-        para('Context: ' + c, 'blue');
-        para('Flags: { ' + f.join(', ') + ' }', 'magenta');
-    }
-
-    // == register the view here, with links to lifecycle callbacks
-
-    onos.ui.addView('sampleHash', {
-        reset: true,    // empty the div on reset
-        load: load
-    });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/sampleKeys.js b/web/gui/src/main/webapp/legacy/sampleKeys.js
deleted file mode 100644
index ef3d76c..0000000
--- a/web/gui/src/main/webapp/legacy/sampleKeys.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- Sample view to illustrate key bindings.
- */
-
-(function (onos) {
-    'use strict';
-
-    var keyDispatch = {
-        Z: keyUndo,
-        X: keyCut,
-        C: keyCopy,
-        V: keyPaste,
-        space: keySpace
-    };
-
-    function keyUndo(view) {
-        note(view, 'Z = UNDO');
-    }
-
-    function keyCut(view) {
-        note(view, 'X = CUT');
-    }
-
-    function keyCopy(view) {
-        note(view, 'C = COPY');
-    }
-
-    function keyPaste(view) {
-        note(view, 'V = PASTE');
-    }
-
-    function keySpace(view) {
-        note(view, 'The SpaceBar');
-    }
-
-    function note(view, msg) {
-        view.$div.append('p')
-            .text(msg)
-            .style({
-                'font-size': '10pt',
-                color: 'darkorange',
-                padding: '0 20px',
-                margin: 0
-            });
-    }
-
-    function keyCallback(view, key, keyCode, event) {
-        note(view, 'Key = ' + key + ' KeyCode = ' + keyCode);
-    }
-
-    function load(view, ctx) {
-        // this maps specific keys to specific functions (1)
-        view.setKeys(keyDispatch);
-        // whereas, this installs a general key handler function (2)
-        view.setKeys(keyCallback);
-
-        // Note that (1) takes precedence over (2)
-
-        view.$div.append('p')
-            .text('Press a key or two (try Z,X,C,V and others) ...')
-            .style('padding', '2px 8px');
-    }
-
-    // == register the view here, with links to lifecycle callbacks
-
-    onos.ui.addView('sampleKeys', {
-        reset: true,    // empty the div on reset
-        load: load
-    });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/sampleRadio.js b/web/gui/src/main/webapp/legacy/sampleRadio.js
deleted file mode 100644
index 11dd1ef..0000000
--- a/web/gui/src/main/webapp/legacy/sampleRadio.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- Sample view to illustrate radio buttons.
- */
-
-(function (onos) {
-    'use strict';
-
-    var intro = [ 'Yo, radio button set...', 'Time to shine' ],
-        btnSet = [
-            { text: 'First Button', cb: cbRadio },
-            { text: 'Second Button', cb: cbRadio },
-            { text: 'Third Button', cb: cbRadio }
-        ];
-
-    // radio button callback
-    function cbRadio(view, btn) {
-        write(view, 'You pressed the ' + btn.text);
-    }
-
-    function write(view, msg) {
-        view.$div.append('p')
-            .text(msg)
-            .style({
-                'font-size': '10pt',
-                color: 'green',
-                padding: '0 20px',
-                margin: '2px'
-            });
-    }
-
-    // invoked when the view is loaded
-    function load(view, ctx) {
-        view.setRadio(btnSet);
-
-        view.$div.selectAll('p')
-            .data(intro)
-            .enter()
-            .append('p')
-            .text(function (d) { return d; })
-            .style('padding', '2px 8px');
-    }
-
-    // == register the view here, with links to lifecycle callbacks
-
-    onos.ui.addView('sampleRadio', {
-        reset: true,    // empty the div on reset
-        load: load
-    });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/topo.css b/web/gui/src/main/webapp/legacy/topo.css
deleted file mode 100644
index ddf15b6..0000000
--- a/web/gui/src/main/webapp/legacy/topo.css
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology view -- CSS file
- */
-
-#topo svg #topo-bg {
-    opacity: 0.5;
-}
-
-#topo #map {
-    stroke-width: 2px;
-    stroke: #eee;
-    fill: transparent;
-}
-
-/* TODO: move glyphs into framework */
-
-#topo svg .glyphIcon {
-    fill: black;
-    stroke: none;
-    fill-rule: evenodd;
-}
-#topo svg .glyphIcon rect {
-    fill: #ddd;
-    stroke: none;
-}
-
-
-#topo svg .noDevsLayer {
-    visibility: hidden;
-}
-
-#topo svg .noDevsLayer text {
-    font-size: 60pt;
-    font-style: italic;
-    fill: #dde;
-}
-
-#topo svg .noDevsBird {
-    fill: #ecd;
-}
-
-/* NODES */
-
-#topo svg .node {
-    cursor: pointer;
-}
-
-#topo svg .node.selected rect,
-#topo svg .node.selected circle {
-    fill: #f90;
-    filter: url(#blue-glow);
-}
-
-#topo svg .node text {
-    pointer-events: none;
-}
-
-/* Device Nodes */
-
-#topo svg .node.device {
-}
-
-#topo svg .node.device rect {
-    stroke-width: 1.5;
-}
-
-#topo svg .node.device.fixed rect {
-    stroke-width: 1.5;
-    stroke: #ccc;
-}
-
-/* note: device is offline without the 'online' class */
-#topo svg .node.device {
-    fill: #777;
-}
-
-#topo svg .node.device.online {
-    fill: #6e7fa3;
-}
-
-/* note: device is offline without the 'online' class */
-#topo svg .node.device text {
-    fill: #bbb;
-    font: 10pt sans-serif;
-}
-
-#topo svg .node.device.online text {
-    fill: white;
-}
-
-#topo svg .node.device .glyphIcon rect {
-    fill: #aaa;
-}
-#topo svg .node.device .glyphIcon use {
-    fill: #777;
-}
-#topo svg .node.device.selected .glyphIcon rect {
-    fill: #f90;
-}
-#topo svg .node.device.online .glyphIcon rect {
-    fill: #ccc;
-}
-#topo svg .node.device.online .glyphIcon use {
-    fill: #000;
-}
-#topo svg .node.device.online.selected .glyphIcon rect {
-    fill: #f90;
-}
-
-
-/* Host Nodes */
-
-#topo svg .node.host {
-    stroke: #000;
-}
-
-#topo svg .node.host text {
-    fill: #846;
-    stroke: none;
-    font: 9pt sans-serif;
-}
-
-svg .node.host circle {
-    stroke: #000;
-    fill: #edb;
-}
-
-/* LINKS */
-
-#topo svg .link {
-    opacity: .9;
-}
-
-#topo svg .link.inactive {
-    opacity: .5;
-    stroke-dasharray: 8 4;
-}
-
-#topo svg .link.secondary {
-    stroke: rgba(0,153,51,0.5);
-    stroke-width: 3px;
-}
-#topo svg .link.primary {
-    stroke: #ffA300;
-    stroke-width: 4px;
-}
-#topo svg .link.animated {
-    stroke: #ffA300;
-}
-
-#topo svg .link.secondary.optical {
-    stroke: rgba(128,64,255,0.5);
-    stroke-width: 4px;
-}
-#topo svg .link.primary.optical {
-    stroke: #74f;
-    stroke-width: 6px;
-}
-#topo svg .link.animated.optical {
-    stroke: #74f;
-    stroke-width: 10px;
-}
-
-#topo svg .linkLabel rect {
-    fill: #eee;
-    stroke: none;
-}
-#topo svg .linkLabel text {
-    text-anchor: middle;
-    stroke: #777;
-    stroke-width: 0.1;
-    font-size: 9pt;
-}
-
-/* Fly-in summary pane */
-
-#topo-summary {
-    /* gets base CSS from .fpanel in floatPanel.css */
-    top: 64px;
-}
-
-#topo-summary svg {
-    display: inline-block;
-    width: 42px;
-    height: 42px;
-}
-
-#topo-summary svg .glyphIcon {
-    fill: black;
-    stroke: none;
-    fill-rule: evenodd;
-}
-
-#topo-summary h2 {
-    position: absolute;
-    margin: 0 4px;
-    top: 20px;
-    left: 50px;
-    color: black;
-}
-
-#topo-summary h3 {
-    margin: 0 4px;
-    top: 20px;
-    left: 50px;
-    color: black;
-}
-
-#topo-summary p, table {
-    margin: 4px 4px;
-}
-
-#topo-summary td.label {
-    font-style: italic;
-    color: #777;
-    padding-right: 12px;
-}
-
-#topo-summary td.value {
-}
-
-#topo-summary hr {
-    height: 1px;
-    color: #ccc;
-    background-color: #ccc;
-    border: 0;
-}
-
-/* Fly-in details pane */
-
-#topo-detail {
-    /* gets base CSS from .fpanel in floatPanel.css */
-    top: 320px;
-
-}
-
-#topo-detail svg {
-    display: inline-block;
-    width: 42px;
-    height: 42px;
-}
-
-#topo-detail svg .glyphIcon {
-    fill: black;
-    stroke: none;
-    fill-rule: evenodd;
-}
-
-#topo-detail h2 {
-    position: absolute;
-    margin: 0 4px;
-    top: 20px;
-    left: 50px;
-    color: black;
-}
-
-#topo-detail h3 {
-    margin: 0 4px;
-    top: 20px;
-    left: 50px;
-    color: black;
-}
-
-#topo-detail p, table {
-    margin: 4px 4px;
-}
-
-#topo-detail td.label {
-    font-style: italic;
-    color: #777;
-    padding-right: 12px;
-}
-
-#topo-detail td.value {
-}
-
-
-#topo-detail .actionBtn {
-    margin: 6px 12px;
-    padding: 2px 6px;
-    font-size: 9pt;
-    cursor: pointer;
-    width: 200px;
-    text-align: center;
-
-    /* theme specific... */
-    border: 2px solid #ddd;
-    border-radius: 4px;
-    color: #eee;
-    background: #888;
-}
-
-#topo-detail .actionBtn:hover {
-    /* theme specific... */
-    border: 2px solid #ddd;
-    color: #eee;
-    background: #444;
-}
-
-
-#topo-detail hr {
-    height: 1px;
-    color: #ccc;
-    background-color: #ccc;
-    border: 0;
-}
-
-/* ONOS instance stuff */
-
-#topo-oibox {
-    height: 100px;
-}
-
-#topo-oibox div.onosInst {
-    display: inline-block;
-    width: 170px;
-    height: 85px;
-    cursor: pointer;
-}
-
-#topo-oibox svg rect {
-    fill: #ccc;
-    stroke: #aaa;
-    stroke-width: 3.5;
-}
-#topo-oibox .online svg rect {
-    opacity: 1;
-    fill: #9cf;
-    stroke: #555;
-}
-
-#topo-oibox svg .glyphIcon {
-    fill: #888;
-    fill-rule: evenodd;
-}
-#topo-oibox .online svg .glyphIcon {
-    fill: #000;
-}
-
-#topo-oibox svg .badgeIcon {
-    fill: #777;
-    fill-rule: evenodd;
-}
-
-#topo-oibox .online svg .badgeIcon {
-    fill: #fff;
-}
-
-#topo-oibox svg text {
-    text-anchor: middle;
-    fill: #777;
-}
-#topo-oibox .online svg text {
-    fill: #eee;
-}
-
-#topo-oibox svg text.instTitle {
-    font-size: 11pt;
-    font-weight: bold;
-}
-#topo-oibox svg text.instLabel {
-    font-size: 9pt;
-    font-style: italic;
-}
-
-#topo-oibox .onosInst.mastership {
-    opacity: 0.3;
-}
-#topo-oibox .onosInst.mastership.affinity {
-    opacity: 1.0;
-}
-#topo-oibox .onosInst.mastership.affinity svg rect {
-    filter: url(#blue-glow);
-}
-
-
-#topo svg .suppressed {
-    opacity: 0.2;
-}
-
-/* Death Mask (starts hidden) */
-
-#topo-mask {
-    display: none;
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 10000px;
-    height: 8000px;
-    z-index: 5000;
-    background-color: rgba(0,0,0,0.75);
-    padding: 60px;
-}
-
-#topo-mask p {
-    margin: 8px 20px;
-    color: #ddd;
-    font-size: 14pt;
-    font-style: italic;
-}
-
diff --git a/web/gui/src/main/webapp/legacy/topo.js b/web/gui/src/main/webapp/legacy/topo.js
deleted file mode 100644
index a8f0570..0000000
--- a/web/gui/src/main/webapp/legacy/topo.js
+++ /dev/null
@@ -1,3160 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS network topology viewer - version 1.1
- */
-
-(function (onos) {
-    'use strict';
-
-    // shorter names for library APIs
-    var d3u = onos.lib.d3util,
-        gly = onos.lib.glyphs;
-
-    // configuration data
-    var config = {
-        useLiveData: true,
-        fnTrace: true,
-        debugOn: false,
-        birdDim: 400,
-        options: {
-            showBackground: true
-        },
-        webSockUrl: '../ws/topology',
-        data: {
-            live: {
-                jsonUrl: '../rs/topology/graph',
-                detailPrefix: '../rs/topology/graph/',
-                detailSuffix: ''
-            },
-            fake: {
-                jsonUrl: 'json/network2.json',
-                detailPrefix: 'json/',
-                detailSuffix: '.json'
-            }
-        },
-        labels: {
-            imgPad: 16,
-            padLR: 4,
-            padTB: 3,
-            marginLR: 3,
-            marginTB: 2,
-            port: {
-                gap: 3,
-                width: 18,
-                height: 14
-            }
-        },
-        topo: {
-            linkBaseColor: '#666',
-            linkInColor: '#66f',
-            linkInWidth: 12,
-            linkOutColor: '#f00',
-            linkOutWidth: 10
-        },
-        icons: {
-            device: {
-                dim: 36,
-                rx: 4,
-                xoff: -20,
-                yoff: -18
-            },
-            host: {
-                defaultRadius: 9,
-                radius: {
-                    endstation: 14,
-                    bgpSpeaker: 14,
-                    router: 14
-                }
-            }
-        },
-        force: {
-            note_for_links: 'link.type is used to differentiate',
-            linkDistance: {
-                direct: 100,
-                optical: 120,
-                hostLink: 3
-            },
-            linkStrength: {
-                direct: 1.0,
-                optical: 1.0,
-                hostLink: 1.0
-            },
-            note_for_nodes: 'node.class is used to differentiate',
-            charge: {
-                device: -8000,
-                host: -5000
-            }
-        },
-        // see below in creation of viewBox on main svg
-        logicalSize: 1000
-    };
-
-    // radio buttons
-    var layerButtons = [
-            { text: 'All Layers', id: 'all', cb: showAllLayers },
-            { text: 'Packet Only', id: 'pkt', cb: showPacketLayer },
-            { text: 'Optical Only', id: 'opt', cb: showOpticalLayer }
-        ],
-        layerBtnSet,
-        layerBtnDispatch = {
-            all: showAllLayers,
-            pkt: showPacketLayer,
-            opt: showOpticalLayer
-        };
-
-    // key bindings
-    var keyDispatch = {
-        // ==== "development mode" ====
-        //0: testMe,
-        //equals: injectStartupEvents,
-        //dash: injectTestEvent,
-
-        O: [toggleSummary, 'Toggle ONOS summary pane'],
-        I: [toggleInstances, 'Toggle ONOS instances pane'],
-        D: [toggleDetails, 'Disable / enable details pane'],
-
-        H: [toggleHosts, 'Toggle host visibility'],
-        M: [toggleOffline, 'Toggle offline visibility'],
-        B: [toggleBg, 'Toggle background image'],
-        P: togglePorts,
-
-        X: [toggleNodeLock, 'Lock / unlock node positions'],
-        Z: [toggleOblique, 'Toggle oblique view (Experimental)'],
-        L: [cycleLabels, 'Cycle device labels'],
-        U: [unpin, 'Unpin node (hover mouse over)'],
-        R: [resetPanZoom, 'Reset pan / zoom'],
-
-        V: [showRelatedIntentsAction, 'Show all related intents'],
-        rightArrow: [showNextIntentAction, 'Show next related intent'],
-        leftArrow: [showPrevIntentAction, 'Show previous related intent'],
-        W: [showSelectedIntentTrafficAction, 'Monitor traffic of selected intent'],
-        A: [showAllTrafficAction, 'Monitor all traffic'],
-        F: [showDeviceLinkFlowsAction, 'Show device link flows'],
-
-        E: [equalizeMasters, 'Equalize mastership roles'],
-
-        esc: handleEscape,
-
-        _helpFormat: [
-            ['O', 'I', 'D', '-', 'H', 'M', 'B', 'P' ],
-            ['X', 'Z', 'L', 'U', 'R' ],
-            ['V', 'rightArrow', 'leftArrow', 'W', 'A', 'F', '-', 'E' ]
-        ]
-    };
-
-    // mouse gestures
-    var gestures = [
-        ['click', 'Select the item and show details'],
-        ['shift-click', 'Toggle selection state'],
-        ['drag', 'Reposition (and pin) device / host'],
-        ['cmd-scroll', 'Zoom in / out'],
-        ['cmd-drag', 'Pan']
-    ];
-
-    // state variables
-    var network = {
-            view: null,     // view token reference
-            nodes: [],
-            links: [],
-            lookup: {},
-            revLinkToKey: {}
-        },
-        scenario = {
-            evDir: 'json/ev/',
-            evScenario: '/scenario.json',
-            evPrefix: '/ev_',
-            evOnos: '_onos.json',
-            evUi: '_ui.json',
-            ctx: null,
-            params: {},
-            evNumber: 0,
-            view: null
-        },
-        webSock,
-        sid = 0,
-        deviceLabelCount = 3,
-        hostLabelCount = 2,
-        deviceLabelIndex = 0,
-        hostLabelIndex = 0,
-        selections = {},
-        selectOrder = [],
-        hovered = null,
-        summaryPane,
-        detailPane,
-        antTimer = null,
-        guiSuccessor = null,
-        onosInstances = {},
-        onosOrder = [],
-        oiBox,
-        oiShowMaster = false,
-        portLabelsOn = false,
-        cat7 = d3u.cat7(),
-        colorAffinity = false,
-        showHosts = false,
-        showOffline = true,
-        useDetails = true,
-        haveDetails = false,
-        nodeLock = false,
-        oblique = false;
-
-    // constants
-    var hoverModeNone = 0,
-        hoverModeAll = 1,
-        hoverModeFlows = 2,
-        hoverModeIntents = 3,
-        hoverMode = hoverModeNone;
-
-    // D3 selections
-    var svg,
-        panZoomContainer,
-        noDevices,
-        bgImg,
-        topoG,
-        nodeG,
-        linkG,
-        linkLabelG,
-        node,
-        link,
-        linkLabel,
-        mask;
-
-    // the projection for the map background
-    var geoMapProj;
-
-    // the zoom function
-    var zoom;
-
-    // ==============================
-    // For Debugging / Development
-
-    function fnTrace(msg, id) {
-        if (config.fnTrace) {
-            console.log('FN: ' + msg + ' [' + id + ']');
-        }
-    }
-
-    function evTrace(data) {
-        fnTrace(data.event, data.payload.id);
-    }
-
-    // ==============================
-    // Key Callbacks
-
-    function flash(txt) {
-        network.view.flash(txt);
-    }
-
-    function testMe(view) {
-        //view.alert('Theme is ' + view.getTheme());
-        //view.flash('This is some text');
-        cat7.testCard(svg);
-    }
-
-    function injectTestEvent(view) {
-        if (config.useLiveData) { return; }
-
-        var sc = scenario,
-            evn = ++sc.evNumber,
-            pfx = sc.evDir + sc.ctx + sc.evPrefix + evn,
-            onosUrl = pfx + sc.evOnos,
-            uiUrl = pfx + sc.evUi,
-            stack = [
-                { url: onosUrl, cb: handleServerEvent },
-                { url: uiUrl, cb: handleUiEvent }
-            ];
-        recurseFetchEvent(stack, evn);
-    }
-
-    function recurseFetchEvent(stack, evn) {
-        var v = scenario.view,
-            frame;
-        if (stack.length === 0) {
-            v.alert('Oops!\n\nNo event #' + evn + ' found.');
-            return;
-        }
-        frame = stack.shift();
-
-        d3.json(frame.url, function (err, data) {
-            if (err) {
-                if (err.status === 404) {
-                    // if we didn't find the data, try the next stack frame
-                    recurseFetchEvent(stack, evn);
-                } else {
-                    v.alert('non-404 error:\n\n' + frame.url + '\n\n' + err);
-                }
-            } else {
-                wsTrace('test', JSON.stringify(data));
-                frame.cb(data);
-            }
-        });
-
-    }
-
-    function handleUiEvent(data) {
-        scenario.view.alert('UI Tx: ' + data.event + '\n\n' +
-            JSON.stringify(data));
-    }
-
-    function injectStartupEvents(view) {
-        var last = scenario.params.lastAuto || 0;
-        if (config.useLiveData) { return; }
-
-        while (scenario.evNumber < last) {
-            injectTestEvent(view);
-        }
-    }
-
-    function toggleBg() {
-        var vis = bgImg.style('visibility');
-        bgImg.style('visibility', visVal(vis === 'hidden'));
-    }
-
-    function opacifyBg(b) {
-        bgImg.transition()
-            .duration(1000)
-            .attr('opacity', b ? 1 : 0);
-    }
-
-    function toggleNodeLock() {
-        nodeLock = !nodeLock;
-        flash('Node positions ' + (nodeLock ? 'locked' : 'unlocked'))
-    }
-
-    function toggleOblique() {
-        oblique = !oblique;
-        if (oblique) {
-            network.force.stop();
-            toObliqueView();
-        } else {
-            toNormalView();
-        }
-    }
-
-    function toggleHosts() {
-        showHosts = !showHosts;
-        updateHostVisibility();
-        flash('Hosts ' + visVal(showHosts));
-    }
-
-    function toggleOffline() {
-        showOffline = !showOffline;
-        updateOfflineVisibility();
-        flash('Offline devices ' + visVal(showOffline));
-    }
-
-    function cycleLabels() {
-        deviceLabelIndex = (deviceLabelIndex === 2)
-            ? 0 : deviceLabelIndex + 1;
-
-        network.nodes.forEach(function (d) {
-            if (d.class === 'device') {
-                updateDeviceLabel(d);
-            }
-        });
-    }
-
-    function togglePorts(view) {
-        //view.alert('togglePorts() callback')
-    }
-
-    function unpin() {
-        if (hovered) {
-            sendUpdateMeta(hovered);
-            hovered.fixed = false;
-            hovered.el.classed('fixed', false);
-            fResume();
-        }
-    }
-
-    function handleEscape(view) {
-        if (oiShowMaster) {
-            cancelAffinity();
-        } else if (haveDetails) {
-            deselectAll();
-        } else if (oiBox.isVisible()) {
-            hideInstances();
-        } else if (summaryPane.isVisible()) {
-            cancelSummary();
-            stopAntTimer();
-        } else {
-            hoverMode = hoverModeNone;
-        }
-    }
-
-    function showNoDevs(b) {
-        noDevices.style('visibility', visVal(b));
-    }
-
-    // ==============================
-    // Oblique view ...
-
-    var obview = {
-            tt:  -.7,     // x skew y factor
-            xsk: -35,     // x skew angle
-            ysc: 0.5,     // y scale
-            pad: 50,
-            time: 1500,
-            fill: {
-                pkt: 'rgba(130,130,170,0.3)',
-                opt: 'rgba(170,130,170,0.3)'
-            },
-            id: function (tag) {
-                return 'obview-' + tag + 'Plane';
-            },
-            yt: function (h, dir) {
-                return h * obview.ysc * dir * 1.1;
-            },
-            obXform: function (h, dir) {
-                var yt = obview.yt(h, dir);
-                return scale(1, obview.ysc) + translate(0, yt) + skewX(obview.xsk);
-            },
-            noXform: function () {
-                return skewX(0) + translate(0,0) + scale(1,1);
-            },
-            xffn: null,
-            plane: {}
-    };
-
-
-    function toObliqueView() {
-        var box = nodeG.node().getBBox(),
-            ox, oy;
-
-        padBox(box, obview.pad);
-
-        ox = box.x + box.width / 2;
-        oy = box.y + box.height / 2;
-
-        // remember node lock state, then lock the nodes down
-        obview.nodeLock = nodeLock;
-        nodeLock = true;
-        opacifyBg(false);
-
-        insertPlanes(ox, oy);
-
-        obview.xffn = function (xy, dir) {
-            var yt = obview.yt(box.height, dir),
-                ax = xy.x - ox,
-                ay = xy.y - oy,
-                x = ax + ay * obview.tt,
-                y = ay * obview.ysc + obview.ysc * yt;
-            return {x: ox + x, y: oy + y};
-        };
-
-        showPlane('pkt', box, -1);
-        showPlane('opt', box, 1);
-        obTransitionNodes();
-    }
-
-    function toNormalView() {
-        obview.xffn = null;
-
-        hidePlane('pkt');
-        hidePlane('opt');
-        obTransitionNodes();
-
-        removePlanes();
-
-        // restore node lock state
-        nodeLock = obview.nodeLock;
-        opacifyBg(true);
-    }
-
-    function obTransitionNodes() {
-        var xffn = obview.xffn;
-
-        // return the direction for the node
-        // -1 for pkt layer, 1 for optical layer
-        function dir(d) {
-            return inLayer(d, 'pkt') ? -1 : 1;
-        }
-
-        if (xffn) {
-            network.nodes.forEach(function (d) {
-                var oldxy = {x: d.x, y: d.y},
-                    coords = xffn(oldxy, dir(d));
-                d.oldxy = oldxy;
-                d.px = d.x = coords.x;
-                d.py = d.y = coords.y;
-            });
-        } else {
-            network.nodes.forEach(function (d) {
-                var old = d.oldxy || {x: d.x, y: d.y};
-                d.px = d.x = old.x;
-                d.py = d.y = old.y;
-                delete d.oldxy;
-            });
-        }
-
-        node.transition()
-            .duration(obview.time)
-            .attr(tickStuff.nodeAttr);
-        link.transition()
-            .duration(obview.time)
-            .attr(tickStuff.linkAttr);
-        linkLabel.transition()
-            .duration(obview.time)
-            .attr(tickStuff.linkLabelAttr);
-    }
-
-    function showPlane(tag, box, dir) {
-        var g = obview.plane[tag];
-
-        // set box origin at center..
-        box.x = -box.width/2;
-        box.y = -box.height/2;
-
-        g.select('rect')
-            .attr(box)
-            .attr('opacity', 0)
-            .transition()
-            .duration(obview.time)
-            .attr('opacity', 1)
-            .attr('transform', obview.obXform(box.height, dir));
-    }
-
-    function hidePlane(tag) {
-        var g = obview.plane[tag];
-
-        g.select('rect')
-            .transition()
-            .duration(obview.time)
-            .attr('opacity', 0)
-            .attr('transform', obview.noXform());
-    }
-
-    function insertPlanes(ox, oy) {
-        function ins(tag) {
-            var id = obview.id(tag),
-                g = panZoomContainer.insert('g', '#topo-G')
-                    .attr('id', id)
-                    .attr('transform', translate(ox,oy));
-            g.append('rect')
-                .attr('fill', obview.fill[tag])
-                .attr('opacity', 0);
-            obview.plane[tag] = g;
-        }
-        ins('opt');
-        ins('pkt');
-    }
-
-    function removePlanes() {
-        function rem(tag) {
-            var id = obview.id(tag);
-            panZoomContainer.select('#'+id)
-                .transition()
-                .duration(obview.time + 50)
-                .remove();
-            delete obview.plane[tag];
-        }
-        rem('opt');
-        rem('pkt');
-    }
-
-    function padBox(box, p) {
-        box.x -= p;
-        box.y -= p;
-        box.width += p*2;
-        box.height += p*2;
-    }
-
-    // ==============================
-    // Radio Button Callbacks
-
-    var layerLookup = {
-        host: {
-            endstation: 'pkt', // default, if host event does not define type
-            router:     'pkt',
-            bgpSpeaker: 'pkt'
-        },
-        device: {
-            switch: 'pkt',
-            roadm: 'opt'
-        },
-        link: {
-            hostLink: 'pkt',
-            direct: 'pkt',
-            indirect: '',
-            tunnel: '',
-            optical: 'opt'
-        }
-    };
-
-    function inLayer(d, layer) {
-        var type = d.class === 'link' ? d.type() : d.type,
-            look = layerLookup[d.class],
-            lyr = look && look[type];
-        return lyr === layer;
-    }
-
-    function unsuppressLayer(which) {
-        node.each(function (d) {
-            var node = d.el;
-            if (inLayer(d, which)) {
-                node.classed('suppressed', false);
-            }
-        });
-
-        link.each(function (d) {
-            var link = d.el;
-            if (inLayer(d, which)) {
-                link.classed('suppressed', false);
-            }
-        });
-    }
-
-    function suppressLayers(b) {
-        node.classed('suppressed', b);
-        link.classed('suppressed', b);
-//        d3.selectAll('svg .port').classed('inactive', false);
-//        d3.selectAll('svg .portText').classed('inactive', false);
-    }
-
-    function showAllLayers() {
-        suppressLayers(false);
-    }
-
-    function showPacketLayer() {
-        node.classed('suppressed', true);
-        link.classed('suppressed', true);
-        unsuppressLayer('pkt');
-    }
-
-    function showOpticalLayer() {
-        node.classed('suppressed', true);
-        link.classed('suppressed', true);
-        unsuppressLayer('opt');
-    }
-
-    function restoreLayerState() {
-        layerBtnDispatch[layerBtnSet.selected()]();
-    }
-
-    // ==============================
-    // Private functions
-
-    function safeId(s) {
-        return s.replace(/[^a-z0-9]/gi, '-');
-    }
-
-    // set the size of the given element to that of the view (reduced if padded)
-    function setSize(el, view, pad) {
-        var padding = pad ? pad * 2 : 0;
-        el.attr({
-            width: view.width() - padding,
-            height: view.height() - padding
-        });
-    }
-
-    function makeNodeKey(d, what) {
-        var port = what + 'Port';
-        return d[what] + '/' + d[port];
-    }
-
-    function makeLinkKey(d, flipped) {
-        var one = flipped ? makeNodeKey(d, 'dst') : makeNodeKey(d, 'src'),
-            two = flipped ? makeNodeKey(d, 'src') : makeNodeKey(d, 'dst');
-        return one + '-' + two;
-    }
-
-    function findLinkById(id) {
-        // check to see if this is a reverse lookup, else default to given id
-        var key = network.revLinkToKey[id] || id;
-            return key && network.lookup[key];
-    }
-
-    function findLink(linkData, op) {
-        var key = makeLinkKey(linkData),
-            keyrev = makeLinkKey(linkData, 1),
-            link = network.lookup[key],
-            linkRev = network.lookup[keyrev],
-            result = {},
-            ldata = link || linkRev,
-            rawLink;
-
-        if (op === 'add') {
-            if (link) {
-                // trying to add a link that we already know about
-                result.ldata = link;
-                result.badLogic = 'addLink: link already added';
-
-            } else if (linkRev) {
-                // we found the reverse of the link to be added
-                result.ldata = linkRev;
-                if (linkRev.fromTarget) {
-                    result.badLogic = 'addLink: link already added';
-                }
-            }
-        } else if (op === 'update') {
-            if (!ldata) {
-                result.badLogic = 'updateLink: link not found';
-            } else {
-                rawLink = link ? ldata.fromSource : ldata.fromTarget;
-                result.updateWith = function (data) {
-                    $.extend(rawLink, data);
-                    restyleLinkElement(ldata);
-                }
-            }
-        } else if (op === 'remove') {
-            if (!ldata) {
-                result.badLogic = 'removeLink: link not found';
-            } else {
-                rawLink = link ? ldata.fromSource : ldata.fromTarget;
-
-                if (!rawLink) {
-                    result.badLogic = 'removeLink: link not found';
-
-                } else {
-                    result.removeRawLink = function () {
-                        if (link) {
-                            // remove fromSource
-                            ldata.fromSource = null;
-                            if (ldata.fromTarget) {
-                                // promote target into source position
-                                ldata.fromSource = ldata.fromTarget;
-                                ldata.fromTarget = null;
-                                ldata.key = keyrev;
-                                delete network.lookup[key];
-                                network.lookup[keyrev] = ldata;
-                                delete network.revLinkToKey[keyrev];
-                            }
-                        } else {
-                            // remove fromTarget
-                            ldata.fromTarget = null;
-                            delete network.revLinkToKey[keyrev];
-                        }
-                        if (ldata.fromSource) {
-                            restyleLinkElement(ldata);
-                        } else {
-                            removeLinkElement(ldata);
-                        }
-                    }
-                }
-            }
-        }
-        return result;
-    }
-
-    function addLinkUpdate(ldata, link) {
-        // add link event, but we already have the reverse link installed
-        ldata.fromTarget = link;
-        network.revLinkToKey[link.id] = ldata.key;
-        restyleLinkElement(ldata);
-    }
-
-    var allLinkTypes = 'direct indirect optical tunnel',
-        defaultLinkType = 'direct';
-
-    function restyleLinkElement(ldata) {
-        // this fn's job is to look at raw links and decide what svg classes
-        // need to be applied to the line element in the DOM
-        var el = ldata.el,
-            type = ldata.type(),
-            lw = ldata.linkWidth(),
-            online = ldata.online();
-
-        el.classed('link', true);
-        el.classed('inactive', !online);
-        el.classed(allLinkTypes, false);
-        if (type) {
-            el.classed(type, true);
-        }
-        el.transition()
-            .duration(1000)
-            .attr('stroke-width', linkScale(lw))
-            .attr('stroke', config.topo.linkBaseColor);
-    }
-
-    // ==============================
-    // Event handlers for server-pushed events
-
-    function logicError(msg) {
-        // TODO, report logic error to server, via websock, so it can be logged
-        console.warn(msg);
-    }
-
-    var eventDispatch = {
-        addInstance: addInstance,
-        addDevice: addDevice,
-        addLink: addLink,
-        addHost: addHost,
-
-        updateInstance: updateInstance,
-        updateDevice: updateDevice,
-        updateLink: updateLink,
-        updateHost: updateHost,
-
-        removeInstance: removeInstance,
-        removeDevice: removeDevice,
-        removeLink: removeLink,
-        removeHost: removeHost,
-
-        showDetails: showDetails,
-        showSummary: showSummary,
-        showTraffic: showTraffic
-    };
-
-    function addInstance(data) {
-        evTrace(data);
-        var inst = data.payload,
-            id = inst.id;
-        if (onosInstances[id]) {
-            updateInstance(data);
-            return;
-        }
-        onosInstances[id] = inst;
-        onosOrder.push(inst);
-        updateInstances();
-    }
-
-    function addDevice(data) {
-        evTrace(data);
-        var device = data.payload,
-            id = device.id,
-            d;
-
-        showNoDevs(false);
-
-        if (network.lookup[id]) {
-            updateDevice(data);
-            return;
-        }
-
-        d = createDeviceNode(device);
-        network.nodes.push(d);
-        network.lookup[id] = d;
-        updateNodes();
-        fStart();
-    }
-
-    function addLink(data) {
-        evTrace(data);
-        var link = data.payload,
-            result = findLink(link, 'add'),
-            bad = result.badLogic,
-            d = result.ldata;
-
-        if (bad) {
-            logicError(bad + ': ' + link.id);
-            return;
-        }
-
-        if (d) {
-            // we already have a backing store link for src/dst nodes
-            addLinkUpdate(d, link);
-            return;
-        }
-
-        // no backing store link yet
-        d = createLink(link);
-        if (d) {
-            network.links.push(d);
-            network.lookup[d.key] = d;
-            updateLinks();
-            fStart();
-        }
-    }
-
-    function addHost(data) {
-        evTrace(data);
-        var host = data.payload,
-            id = host.id,
-            d,
-            lnk;
-
-        if (network.lookup[id]) {
-            logicError('Host already added: ' + id);
-            return;
-        }
-
-        d = createHostNode(host);
-        network.nodes.push(d);
-        network.lookup[host.id] = d;
-        updateNodes();
-
-        lnk = createHostLink(host);
-        if (lnk) {
-            d.linkData = lnk;    // cache ref on its host
-            network.links.push(lnk);
-            network.lookup[d.ingress] = lnk;
-            network.lookup[d.egress] = lnk;
-            updateLinks();
-        }
-        fStart();
-    }
-
-    function updateInstance(data) {
-        evTrace(data);
-        var inst = data.payload,
-            id = inst.id,
-            d = onosInstances[id];
-        if (d) {
-            $.extend(d, inst);
-            updateInstances();
-        } else {
-            logicError('updateInstance lookup fail. ID = "' + id + '"');
-        }
-    }
-
-    function updateDevice(data) {
-        evTrace(data);
-        var device = data.payload,
-            id = device.id,
-            d = network.lookup[id],
-            wasOnline;
-
-        if (d) {
-            wasOnline = d.online;
-            $.extend(d, device);
-            if (positionNode(d, true)) {
-                sendUpdateMeta(d, true);
-            }
-            updateNodes();
-            if (wasOnline !== d.online) {
-                findAttachedLinks(d.id).forEach(restyleLinkElement);
-                updateOfflineVisibility(d);
-            }
-        } else {
-            logicError('updateDevice lookup fail. ID = "' + id + '"');
-        }
-    }
-
-    function updateLink(data) {
-        evTrace(data);
-        var link = data.payload,
-            result = findLink(link, 'update'),
-            bad = result.badLogic;
-        if (bad) {
-            logicError(bad + ': ' + link.id);
-            return;
-        }
-        result.updateWith(link);
-    }
-
-    function updateHost(data) {
-        evTrace(data);
-        var host = data.payload,
-            id = host.id,
-            d = network.lookup[id];
-        if (d) {
-            $.extend(d, host);
-            if (positionNode(d, true)) {
-                sendUpdateMeta(d, true);
-            }
-            updateNodes(d);
-        } else {
-            logicError('updateHost lookup fail. ID = "' + id + '"');
-        }
-    }
-
-    function removeInstance(data) {
-        evTrace(data);
-        var inst = data.payload,
-            id = inst.id,
-            d = onosInstances[id];
-        if (d) {
-            var idx = find(id, onosOrder);
-            if (idx >= 0) {
-                onosOrder.splice(idx, 1);
-            }
-            delete onosInstances[id];
-            updateInstances();
-        } else {
-            logicError('updateInstance lookup fail. ID = "' + id + '"');
-        }
-    }
-
-    function removeDevice(data) {
-        evTrace(data);
-        var device = data.payload,
-            id = device.id,
-            d = network.lookup[id];
-        if (d) {
-            removeDeviceElement(d);
-        } else {
-            logicError('removeDevice lookup fail. ID = "' + id + '"');
-        }
-    }
-
-    function removeLink(data) {
-        evTrace(data);
-        var link = data.payload,
-            result = findLink(link, 'remove'),
-            bad = result.badLogic;
-        if (bad) {
-            // may have already removed link, if attached to removed device
-            console.warn(bad + ': ' + link.id);
-            return;
-        }
-        result.removeRawLink();
-    }
-
-    function removeHost(data) {
-        evTrace(data);
-        var host = data.payload,
-            id = host.id,
-            d = network.lookup[id];
-        if (d) {
-            removeHostElement(d, true);
-        } else {
-            // may have already removed host, if attached to removed device
-            console.warn('removeHost lookup fail. ID = "' + id + '"');
-        }
-    }
-
-    // the following events are server responses to user actions
-    function showSummary(data) {
-        evTrace(data);
-        populateSummary(data.payload);
-        showSummaryPane();
-    }
-
-    function showDetails(data) {
-        evTrace(data);
-        haveDetails = true;
-        populateDetails(data.payload);
-        if (useDetails) {
-            showDetailPane();
-        }
-    }
-
-    function showTraffic(data) {
-        evTrace(data);
-        var paths = data.payload.paths,
-            hasTraffic = false;
-
-        // Revert any links hilighted previously.
-        link.style('stroke-width', null)
-            .classed('primary secondary animated optical', false);
-        // Remove all previous labels.
-        removeLinkLabels();
-
-        // Now hilight all links in the paths payload, and attach
-        //  labels to them, if they are defined.
-        paths.forEach(function (p) {
-            var n = p.links.length,
-                i,
-                ldata;
-
-            hasTraffic = hasTraffic || p.traffic;
-            for (i=0; i<n; i++) {
-                ldata = findLinkById(p.links[i]);
-                if (ldata && ldata.el) {
-                    ldata.el.classed(p.class, true);
-                    ldata.label = p.labels[i];
-                }
-            }
-        });
-
-        updateLinks();
-
-        if (hasTraffic && !antTimer) {
-            startAntTimer();
-        } else if (!hasTraffic && antTimer) {
-            stopAntTimer();
-        }
-    }
-
-    // ...............................
-
-    function unknownEvent(data) {
-        console.warn('Unknown event type: "' + data.event + '"', data);
-    }
-
-    function handleServerEvent(data) {
-        var fn = eventDispatch[data.event] || unknownEvent;
-        fn(data);
-    }
-
-    // ==============================
-    // Out-going messages...
-
-    function nSel() {
-        return selectOrder.length;
-    }
-    function getSel(idx) {
-        return selections[selectOrder[idx]];
-    }
-    function allSelectionsClass(cls) {
-        for (var i=0, n=nSel(); i<n; i++) {
-            if (getSel(i).obj.class !== cls) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    function toggleInstances() {
-        if (!oiBox.isVisible()) {
-            showInstances();
-        } else {
-            hideInstances();
-        }
-    }
-
-    function showInstances() {
-        oiBox.show();
-        colorAffinity = true;
-        updateDeviceColors();
-    }
-
-    function hideInstances() {
-        oiBox.hide();
-        colorAffinity = false;
-        cancelAffinity();
-        updateDeviceColors();
-    }
-
-    function equalizeMasters() {
-        sendMessage('equalizeMasters');
-        flash('Equalizing master roles');
-    }
-
-    function toggleSummary() {
-        if (!summaryPane.isVisible()) {
-            requestSummary();
-        } else {
-            cancelSummary();
-        }
-    }
-
-    function requestSummary() {
-        sendMessage('requestSummary');
-    }
-
-    function cancelSummary() {
-        sendMessage('cancelSummary');
-        hideSummaryPane();
-    }
-
-    function toggleDetails() {
-        useDetails = !useDetails;
-        if (useDetails) {
-            flash('Enable details pane');
-            if (haveDetails) {
-                showDetailPane();
-            }
-        } else {
-            flash('Disable details pane');
-            hideDetailPane();
-        }
-    }
-
-    // encapsulate interaction between summary and details panes
-    function showSummaryPane() {
-        if (detailPane.isVisible()) {
-            detailPane.down(summaryPane.show);
-        } else {
-            summaryPane.show();
-        }
-    }
-
-    function hideSummaryPane() {
-        summaryPane.hide(function () {
-            if (detailPane.isVisible()) {
-                detailPane.up();
-            }
-        });
-    }
-
-    function showDetailPane() {
-        if (summaryPane.isVisible()) {
-            detailPane.down(detailPane.show);
-        } else {
-            detailPane.up(detailPane.show);
-        }
-    }
-
-    function hideDetailPane() {
-        detailPane.hide();
-    }
-
-
-    // request details for the selected element
-    // invoked from selection of a single node.
-    function requestDetails() {
-        var data = getSel(0).obj;
-        sendMessage('requestDetails', {
-            id: data.id,
-            class: data.class
-        });
-    }
-
-    function addHostIntentAction() {
-        sendMessage('addHostIntent', {
-            one: selectOrder[0],
-            two: selectOrder[1],
-            ids: selectOrder
-        });
-        flash('Host-to-Host flow added');
-    }
-
-    function addMultiSourceIntentAction() {
-        sendMessage('addMultiSourceIntent', {
-            src: selectOrder.slice(0, selectOrder.length - 1),
-            dst: selectOrder[selectOrder.length - 1],
-            ids: selectOrder
-        });
-        flash('Multi-Source flow added');
-    }
-
-    function cancelTraffic() {
-        sendMessage('cancelTraffic');
-    }
-
-    function requestTrafficForMode() {
-        if (hoverMode === hoverModeFlows) {
-            requestDeviceLinkFlows();
-        } else if (hoverMode === hoverModeIntents) {
-            requestRelatedIntents();
-        }
-    }
-
-    function showRelatedIntentsAction() {
-        hoverMode = hoverModeIntents;
-        requestRelatedIntents();
-        flash('Related Paths');
-    }
-
-    function requestRelatedIntents() {
-        function hoverValid() {
-            return hoverMode === hoverModeIntents &&
-                hovered &&
-                (hovered.class === 'host' || hovered.class === 'device');
-        }
-
-        if (validateSelectionContext()) {
-            sendMessage('requestRelatedIntents', {
-                ids: selectOrder,
-                hover: hoverValid() ? hovered.id : ''
-            });
-        }
-    }
-
-    function showNextIntentAction() {
-        hoverMode = hoverModeNone;
-        sendMessage('requestNextRelatedIntent');
-        flash('>');
-    }
-
-    function showPrevIntentAction() {
-        hoverMode = hoverModeNone;
-        sendMessage('requestPrevRelatedIntent');
-        flash('<');
-    }
-
-    function showSelectedIntentTrafficAction() {
-        hoverMode = hoverModeNone;
-        sendMessage('requestSelectedIntentTraffic');
-        flash('Traffic on Selected Path');
-    }
-
-    function showDeviceLinkFlowsAction() {
-        hoverMode = hoverModeFlows;
-        requestDeviceLinkFlows();
-        flash('Device Flows');
-    }
-
-    function requestDeviceLinkFlows() {
-        function hoverValid() {
-            return hoverMode === hoverModeFlows &&
-                hovered && (hovered.class === 'device');
-        }
-
-        if (validateSelectionContext()) {
-            sendMessage('requestDeviceLinkFlows', {
-                ids: selectOrder,
-                hover: hoverValid() ? hovered.id : ''
-            });
-        }
-    }
-
-    function showAllTrafficAction() {
-        hoverMode = hoverModeAll;
-        requestAllTraffic();
-        flash('All Traffic');
-    }
-
-    function requestAllTraffic() {
-        sendMessage('requestAllTraffic');
-    }
-
-    function validateSelectionContext() {
-        if (!hovered && nSel() === 0) {
-            cancelTraffic();
-            return false;
-        }
-        return true;
-    }
-
-
-    // ==============================
-    // onos instance panel functions
-
-    var instCfg = {
-        rectPad: 8,
-        nodeOx: 9,
-        nodeOy: 9,
-        nodeDim: 40,
-        birdOx: 19,
-        birdOy: 21,
-        birdDim: 21,
-        uiDy: 45,
-        titleDy: 30,
-        textYOff: 20,
-        textYSpc: 15
-    };
-
-    function viewBox(dim) {
-        return '0 0 ' + dim.w + ' ' + dim.h;
-    }
-
-    function instRectAttr(dim) {
-        var pad = instCfg.rectPad;
-        return {
-            x: pad,
-            y: pad,
-            width: dim.w - pad*2,
-            height: dim.h - pad*2,
-            rx: 6
-        };
-    }
-
-    function computeDim(self) {
-        var css = window.getComputedStyle(self);
-        return {
-            w: stripPx(css.width),
-            h: stripPx(css.height)
-        };
-    }
-
-    function updateInstances() {
-        var onoses = oiBox.el.selectAll('.onosInst')
-                .data(onosOrder, function (d) { return d.id; }),
-            instDim = {w:0,h:0},
-            c = instCfg;
-
-        function nSw(n) {
-            return '# Switches: ' + n;
-        }
-
-        // operate on existing onos instances if necessary
-        onoses.each(function (d) {
-            var el = d3.select(this),
-                svg = el.select('svg');
-            instDim = computeDim(this);
-
-            // update online state
-            el.classed('online', d.online);
-
-            // update ui-attached state
-            svg.select('use.uiBadge').remove();
-            if (d.uiAttached) {
-                attachUiBadge(svg);
-            }
-
-            function updAttr(id, value) {
-                svg.select('text.instLabel.'+id).text(value);
-            }
-
-            updAttr('ip', d.ip);
-            updAttr('ns', nSw(d.switches));
-        });
-
-
-        // operate on new onos instances
-        var entering = onoses.enter()
-            .append('div')
-            .attr('class', 'onosInst')
-            .classed('online', function (d) { return d.online; })
-            .on('click', clickInst);
-
-        entering.each(function (d) {
-            var el = d3.select(this),
-                rectAttr,
-                svg;
-            instDim = computeDim(this);
-            rectAttr = instRectAttr(instDim);
-
-            svg = el.append('svg').attr({
-                width: instDim.w,
-                height: instDim.h,
-                viewBox: viewBox(instDim)
-            });
-
-            svg.append('rect').attr(rectAttr);
-
-            appendBadge(svg, 14, 14, 28, '#bird');
-
-            if (d.uiAttached) {
-                attachUiBadge(svg);
-            }
-
-            var left = c.nodeOx + c.nodeDim,
-                len = rectAttr.width - left,
-                hlen = len / 2,
-                midline = hlen + left;
-
-            // title
-            svg.append('text')
-                .attr({
-                    class: 'instTitle',
-                    x: midline,
-                    y: c.titleDy
-                })
-                .text(d.id);
-
-            // a couple of attributes
-            var ty = c.titleDy + c.textYOff;
-
-            function addAttr(id, label) {
-                svg.append('text').attr({
-                    class: 'instLabel ' + id,
-                    x: midline,
-                    y: ty
-                }).text(label);
-                ty += c.textYSpc;
-            }
-
-            addAttr('ip', d.ip);
-            addAttr('ns', nSw(d.switches));
-        });
-
-        // operate on existing + new onoses here
-        // set the affinity colors...
-        onoses.each(function (d) {
-            var el = d3.select(this),
-                rect = el.select('svg').select('rect'),
-                col = instColor(d.id, d.online);
-            rect.style('fill', col);
-        });
-
-        // adjust the panel size appropriately...
-        oiBox.width(instDim.w * onosOrder.length);
-        oiBox.height(instDim.h);
-
-        // remove any outgoing instances
-        onoses.exit().remove();
-    }
-
-    function instColor(id, online) {
-        return cat7.get(id, !online, network.view.getTheme());
-    }
-
-    function clickInst(d) {
-        var el = d3.select(this),
-            aff = el.classed('affinity');
-        if (!aff) {
-            setAffinity(el, d);
-        } else {
-            cancelAffinity();
-        }
-    }
-
-    function setAffinity(el, d) {
-        d3.selectAll('.onosInst')
-            .classed('mastership', true)
-            .classed('affinity', false);
-        el.classed('affinity', true);
-
-        suppressLayers(true);
-        node.each(function (n) {
-             if (n.master === d.id) {
-                 n.el.classed('suppressed', false);
-             }
-        });
-        oiShowMaster = true;
-    }
-
-    function cancelAffinity() {
-        d3.selectAll('.onosInst')
-            .classed('mastership affinity', false);
-        restoreLayerState();
-        oiShowMaster = false;
-    }
-
-    // TODO: these should be moved out to utility module.
-    function stripPx(s) {
-        return s.replace(/px$/,'');
-    }
-
-    function appendUse(svg, ox, oy, dim, iid, cls) {
-        var use = svg.append('use').attr({
-            transform: translate(ox,oy),
-            'xlink:href': iid,
-            width: dim,
-            height: dim
-        });
-        if (cls) {
-            use.classed(cls, true);
-        }
-        return use;
-    }
-
-    function appendGlyph(svg, ox, oy, dim, iid, cls) {
-        appendUse(svg, ox, oy, dim, iid, cls).classed('glyphIcon', true);
-    }
-
-    function appendBadge(svg, ox, oy, dim, iid, cls) {
-        appendUse(svg, ox, oy, dim, iid, cls).classed('badgeIcon', true);
-    }
-
-    function attachUiBadge(svg) {
-        appendBadge(svg, 12, instCfg.uiDy, 30, '#uiAttached', 'uiBadge');
-    }
-
-    function visVal(b) {
-        return b ? 'visible' : 'hidden';
-    }
-
-    // ==============================
-    // force layout modification functions
-
-    function translate(x, y) {
-        return 'translate(' + x + ',' + y + ')';
-    }
-    function scale(x,y) {
-        return 'scale(' + x + ',' + y + ')';
-    }
-    function skewX(x) {
-        return 'skewX(' + x + ')';
-    }
-    function rotate(deg) {
-        return 'rotate(' + deg + ')';
-    }
-
-    function missMsg(what, id) {
-        return '\n[' + what + '] "' + id + '" missing ';
-    }
-
-    function linkEndPoints(srcId, dstId) {
-        var srcNode = network.lookup[srcId],
-            dstNode = network.lookup[dstId],
-            sMiss = !srcNode ? missMsg('src', srcId) : '',
-            dMiss = !dstNode ? missMsg('dst', dstId) : '';
-
-        if (sMiss || dMiss) {
-            logicError('Node(s) not on map for link:\n' + sMiss + dMiss);
-            return null;
-        }
-        return {
-            source: srcNode,
-            target: dstNode,
-            x1: srcNode.x,
-            y1: srcNode.y,
-            x2: dstNode.x,
-            y2: dstNode.y
-        };
-    }
-
-    function createHostLink(host) {
-        var src = host.id,
-            dst = host.cp.device,
-            id = host.ingress,
-            lnk = linkEndPoints(src, dst);
-
-        if (!lnk) {
-            return null;
-        }
-
-        // Synthesize link ...
-        $.extend(lnk, {
-            key: id,
-            class: 'link',
-
-            type: function () { return 'hostLink'; },
-            online: function () {
-                // hostlink target is edge switch
-                return lnk.target.online;
-            },
-            linkWidth: function () { return 1; }
-        });
-        return lnk;
-    }
-
-    function createLink(link) {
-        var lnk = linkEndPoints(link.src, link.dst);
-
-        if (!lnk) {
-            return null;
-        }
-
-        $.extend(lnk, {
-            key: link.id,
-            class: 'link',
-            fromSource: link,
-
-            // functions to aggregate dual link state
-            type: function () {
-                var s = lnk.fromSource,
-                    t = lnk.fromTarget;
-                return (s && s.type) || (t && t.type) || defaultLinkType;
-            },
-            online: function () {
-                var s = lnk.fromSource,
-                    t = lnk.fromTarget,
-                    both = lnk.source.online && lnk.target.online;
-                return both && ((s && s.online) || (t && t.online));
-            },
-            linkWidth: function () {
-                var s = lnk.fromSource,
-                    t = lnk.fromTarget,
-                    ws = (s && s.linkWidth) || 0,
-                    wt = (t && t.linkWidth) || 0;
-                return Math.max(ws, wt);
-            }
-        });
-        return lnk;
-    }
-
-    function removeLinkLabels() {
-        network.links.forEach(function (d) {
-            d.label = '';
-        });
-    }
-
-    function showHostVis(el) {
-        el.style('visibility', visVal(showHosts));
-    }
-
-    var widthRatio = 1.4,
-        linkScale = d3.scale.linear()
-            .domain([1, 12])
-            .range([widthRatio, 12 * widthRatio])
-            .clamp(true);
-
-    function updateLinks() {
-        link = linkG.selectAll('.link')
-            .data(network.links, function (d) { return d.key; });
-
-        // operate on existing links, if necessary
-        // link .foo() .bar() ...
-
-        // operate on entering links:
-        var entering = link.enter()
-            .append('line')
-            .attr({
-                x1: function (d) { return d.x1; },
-                y1: function (d) { return d.y1; },
-                x2: function (d) { return d.x2; },
-                y2: function (d) { return d.y2; },
-                stroke: config.topo.linkInColor,
-                'stroke-width': config.topo.linkInWidth
-            });
-
-        // augment links
-        entering.each(function (d) {
-            var link = d3.select(this);
-            // provide ref to element selection from backing data....
-            d.el = link;
-            restyleLinkElement(d);
-            if (d.type() === 'hostLink') {
-                showHostVis(link);
-            }
-        });
-
-        // operate on both existing and new links, if necessary
-        //link .foo() .bar() ...
-
-        // apply or remove labels
-        var labelData = getLabelData();
-        applyLinkLabels(labelData);
-
-        // operate on exiting links:
-        link.exit()
-            .attr('stroke-dasharray', '3 3')
-            .style('opacity', 0.5)
-            .transition()
-            .duration(1500)
-            .attr({
-                'stroke-dasharray': '3 12',
-                stroke: config.topo.linkOutColor,
-                'stroke-width': config.topo.linkOutWidth
-            })
-            .style('opacity', 0.0)
-            .remove();
-
-        // NOTE: invoke a single tick to force the labels to position
-        //        onto their links.
-        tick();
-    }
-
-    function getLabelData() {
-        // create the backing data for showing labels..
-        var data = [];
-        link.each(function (d) {
-            if (d.label) {
-                data.push({
-                    id: 'lab-' + d.key,
-                    key: d.key,
-                    label: d.label,
-                    ldata: d
-                });
-            }
-        });
-        return data;
-    }
-
-    var linkLabelOffset = '0.3em';
-
-    function applyLinkLabels(data) {
-        var entering;
-
-        linkLabel = linkLabelG.selectAll('.linkLabel')
-            .data(data, function (d) { return d.id; });
-
-        // for elements already existing, we need to update the text
-        // and adjust the rectangle size to fit
-        linkLabel.each(function (d) {
-            var el = d3.select(this),
-                rect = el.select('rect'),
-                text = el.select('text');
-            text.text(d.label);
-            rect.attr(rectAroundText(el));
-        });
-
-        entering = linkLabel.enter().append('g')
-            .classed('linkLabel', true)
-            .attr('id', function (d) { return d.id; });
-
-        entering.each(function (d) {
-            var el = d3.select(this),
-                rect,
-                text,
-                parms = {
-                    x1: d.ldata.x1,
-                    y1: d.ldata.y1,
-                    x2: d.ldata.x2,
-                    y2: d.ldata.y2
-                };
-
-            d.el = el;
-            rect = el.append('rect');
-            text = el.append('text').text(d.label);
-            rect.attr(rectAroundText(el));
-            text.attr('dy', linkLabelOffset);
-
-            el.attr('transform', transformLabel(parms));
-        });
-
-        // Remove any labels that are no longer required.
-        linkLabel.exit().remove();
-    }
-
-    function rectAroundText(el) {
-        var text = el.select('text'),
-            box = text.node().getBBox();
-
-        // translate the bbox so that it is centered on [x,y]
-        box.x = -box.width / 2;
-        box.y = -box.height / 2;
-
-        // add padding
-        box.x -= 1;
-        box.width += 2;
-        return box;
-    }
-
-    function transformLabel(p) {
-        var dx = p.x2 - p.x1,
-            dy = p.y2 - p.y1,
-            xMid = dx/2 + p.x1,
-            yMid = dy/2 + p.y1;
-        return translate(xMid, yMid);
-    }
-
-    function createDeviceNode(device) {
-        // start with the object as is
-        var node = device,
-            type = device.type,
-            svgCls = type ? 'node device ' + type : 'node device';
-
-        // Augment as needed...
-        node.class = 'device';
-        node.svgClass = device.online ? svgCls + ' online' : svgCls;
-        positionNode(node);
-        return node;
-    }
-
-    function createHostNode(host) {
-        // start with the object as is
-        var node = host;
-
-        // Augment as needed...
-        node.class = 'host';
-        if (!node.type) {
-            node.type = 'endstation';
-        }
-        node.svgClass = 'node host ' + node.type;
-        positionNode(node);
-        return node;
-    }
-
-    function positionNode(node, forUpdate) {
-        var meta = node.metaUi,
-            x = meta && meta.x,
-            y = meta && meta.y,
-            xy;
-
-        // If we have [x,y] already, use that...
-        if (x && y) {
-            node.fixed = true;
-            node.px = node.x = x;
-            node.py = node.y = y;
-            return;
-        }
-
-        var location = node.location;
-        if (location && location.type === 'latlng') {
-            var coord = geoMapProj([location.lng, location.lat]);
-            node.fixed = true;
-            node.px = node.x = coord[0];
-            node.py = node.y = coord[1];
-            return true;
-        }
-
-        // if this is a node update (not a node add).. skip randomizer
-        if (forUpdate) {
-            return;
-        }
-
-        // Note: Placing incoming unpinned nodes at exactly the same point
-        //        (center of the view) causes them to explode outwards when
-        //        the force layout kicks in. So, we spread them out a bit
-        //        initially, to provide a more serene layout convergence.
-        //       Additionally, if the node is a host, we place it near
-        //        the device it is connected to.
-
-        function spread(s) {
-            return Math.floor((Math.random() * s) - s/2);
-        }
-
-        function randDim(dim) {
-            return dim / 2 + spread(dim * 0.7071);
-        }
-
-        function rand() {
-            return {
-                x: randDim(network.view.width()),
-                y: randDim(network.view.height())
-            };
-        }
-
-        function near(node) {
-            var min = 12,
-                dx = spread(12),
-                dy = spread(12);
-            return {
-                x: node.x + min + dx,
-                y: node.y + min + dy
-            };
-        }
-
-        function getDevice(cp) {
-            var d = network.lookup[cp.device];
-            return d || rand();
-        }
-
-        xy = (node.class === 'host') ? near(getDevice(node.cp)) : rand();
-        $.extend(node, xy);
-    }
-
-
-    function iconGlyphUrl(d) {
-        var which = d.type || 'unknown';
-        return '#' + which;
-    }
-
-    // returns the newly computed bounding box of the rectangle
-    function adjustRectToFitText(n) {
-        var text = n.select('text'),
-            box = text.node().getBBox(),
-            lab = config.labels;
-
-        text.attr('text-anchor', 'middle')
-            .attr('y', '-0.8em')
-            .attr('x', lab.imgPad/2);
-
-        // translate the bbox so that it is centered on [x,y]
-        box.x = -box.width / 2;
-        box.y = -box.height / 2;
-
-        // add padding
-        box.x -= (lab.padLR + lab.imgPad/2);
-        box.width += lab.padLR * 2 + lab.imgPad;
-        box.y -= lab.padTB;
-        box.height += lab.padTB * 2;
-
-        return box;
-    }
-
-    function mkSvgClass(d) {
-        return d.fixed ? d.svgClass + ' fixed' : d.svgClass;
-    }
-
-    function hostLabel(d) {
-        var idx = (hostLabelIndex < d.labels.length) ? hostLabelIndex : 0;
-        return d.labels[idx];
-    }
-    function deviceLabel(d) {
-        var idx = (deviceLabelIndex < d.labels.length) ? deviceLabelIndex : 0;
-        return d.labels[idx];
-    }
-    function trimLabel(label) {
-        return (label && label.trim()) || '';
-    }
-
-    function emptyBox() {
-        return {
-            x: -2,
-            y: -2,
-            width: 4,
-            height: 4
-        };
-    }
-
-    function updateDeviceLabel(d) {
-        var label = trimLabel(deviceLabel(d)),
-            noLabel = !label,
-            node = d.el,
-            box,
-            dx,
-            dy,
-            cfg = config.icons.device;
-
-        node.select('text')
-            .text(label)
-            .style('opacity', 0)
-            .transition()
-            .style('opacity', 1);
-
-        if (noLabel) {
-            box = emptyBox();
-            dx = -cfg.dim/2;
-            dy = -cfg.dim/2;
-        } else {
-            box = adjustRectToFitText(node);
-            dx = box.x + cfg.xoff;
-            dy = box.y + cfg.yoff;
-        }
-
-        node.select('rect')
-            .transition()
-            .attr(box);
-
-        node.select('g.deviceIcon')
-            .transition()
-            .attr('transform', translate(dx, dy));
-    }
-
-    function updateHostLabel(d) {
-        var label = trimLabel(hostLabel(d));
-        d.el.select('text').text(label);
-    }
-
-    function updateHostVisibility() {
-        var v = visVal(showHosts);
-        nodeG.selectAll('.host').style('visibility', v);
-        linkG.selectAll('.hostLink').style('visibility', v);
-    }
-
-    function findOfflineNodes() {
-        var a = [];
-        network.nodes.forEach(function (d) {
-            if (d.class === 'device' && !d.online) {
-                a.push(d);
-            }
-        });
-        return a;
-    }
-
-    function updateOfflineVisibility(dev) {
-        var so = showOffline,
-            sh = showHosts,
-            vb = 'visibility',
-            v, off, al, ah, db, b;
-
-        function updAtt(show) {
-            al.forEach(function (d) {
-                b = show && ((d.type() !== 'hostLink') || sh);
-                d.el.style(vb, visVal(b));
-            });
-            ah.forEach(function (d) {
-                b = show && sh;
-                d.el.style(vb, visVal(b));
-            });
-        }
-
-        if (dev) {
-            // updating a specific device that just toggled off/on-line
-            db = dev.online || so;
-            dev.el.style(vb, visVal(db));
-            al = findAttachedLinks(dev.id);
-            ah = findAttachedHosts(dev.id);
-            updAtt(db);
-        } else {
-            // updating all offline devices
-            v = visVal(so);
-            off = findOfflineNodes();
-            off.forEach(function (d) {
-                d.el.style(vb, v);
-                al = findAttachedLinks(d.id);
-                ah = findAttachedHosts(d.id);
-                updAtt(so);
-            });
-        }
-    }
-
-    function nodeMouseOver(d) {
-        if (hovered != d) {
-            hovered = d;
-            requestTrafficForMode();
-        }
-    }
-
-    function nodeMouseOut(d) {
-        if (hovered != null) {
-            hovered = null;
-            requestTrafficForMode();
-        }
-    }
-
-    function addHostIcon(node, radius, iid) {
-        var dim = radius * 1.5,
-            xlate = -dim / 2;
-
-        node.append('use').attr({
-            class: 'glyphIcon hostIcon',
-            transform: translate(xlate,xlate),
-            'xlink:href': iid,
-            width: dim,
-            height: dim
-        });
-    }
-
-    function updateNodes() {
-        node = nodeG.selectAll('.node')
-            .data(network.nodes, function (d) { return d.id; });
-
-        // operate on existing nodes...
-        node.filter('.device').each(function (d) {
-            var node = d.el;
-            node.classed('online', d.online);
-            updateDeviceLabel(d);
-            positionNode(d, true);
-        });
-
-        node.filter('.host').each(function (d) {
-            updateHostLabel(d);
-            positionNode(d, true);
-        });
-
-        // operate on entering nodes:
-        var entering = node.enter()
-            .append('g')
-            .attr({
-                id: function (d) { return safeId(d.id); },
-                class: mkSvgClass,
-                transform: function (d) { return translate(d.x, d.y); },
-                opacity: 0
-            })
-            .call(network.drag)
-            .on('mouseover', nodeMouseOver)
-            .on('mouseout', nodeMouseOut)
-            .transition()
-            .attr('opacity', 1);
-
-        // augment device nodes...
-        entering.filter('.device').each(function (d) {
-            var node = d3.select(this),
-                label = trimLabel(deviceLabel(d)),
-                noLabel = !label,
-                box;
-
-            // provide ref to element from backing data....
-            d.el = node;
-
-            node.append('rect').attr({ rx: 5, ry: 5 });
-            node.append('text').text(label).attr('dy', '1.1em');
-            box = adjustRectToFitText(node);
-            node.select('rect').attr(box);
-            addDeviceIcon(node, box, noLabel, iconGlyphUrl(d));
-        });
-
-        // augment host nodes...
-        entering.filter('.host').each(function (d) {
-            var node = d3.select(this),
-                cfg = config.icons.host,
-                r = cfg.radius[d.type] || cfg.defaultRadius,
-                textDy = r + 10,
-                iid = iconGlyphUrl(d);
-
-            // provide ref to element from backing data....
-            d.el = node;
-            showHostVis(node);
-
-            node.append('circle').attr('r', r);
-            if (iid) {
-                addHostIcon(node, r, iid);
-            }
-            node.append('text')
-                .text(hostLabel)
-                .attr('dy', textDy)
-                .attr('text-anchor', 'middle');
-        });
-
-        // operate on both existing and new nodes, if necessary
-        updateDeviceColors();
-
-        // operate on exiting nodes:
-        // Note that the node is removed after 2 seconds.
-        // Sub element animations should be shorter than 2 seconds.
-        var exiting = node.exit()
-            .transition()
-            .duration(2000)
-            .style('opacity', 0)
-            .remove();
-
-        // host node exits....
-        exiting.filter('.host').each(function (d) {
-            var node = d.el;
-            node.select('use')
-                .style('opacity', 0.5)
-                .transition()
-                .duration(800)
-                .style('opacity', 0);
-
-            node.select('text')
-                .style('opacity', 0.5)
-                .transition()
-                .duration(800)
-                .style('opacity', 0);
-
-            node.select('circle')
-                .style('stroke-fill', '#555')
-                .style('fill', '#888')
-                .style('opacity', 0.5)
-                .transition()
-                .duration(1500)
-                .attr('r', 0);
-        });
-
-        // device node exits....
-        exiting.filter('.device').each(function (d) {
-            var node = d.el;
-            node.select('use')
-                .style('opacity', 0.5)
-                .transition()
-                .duration(800)
-                .style('opacity', 0);
-
-            node.selectAll('rect')
-                .style('stroke-fill', '#555')
-                .style('fill', '#888')
-                .style('opacity', 0.5);
-        });
-        fResume();
-    }
-
-    var dCol = {
-        black: '#000',
-        paleblue: '#acf',
-        offwhite: '#ddd',
-        midgrey: '#888',
-        lightgrey: '#bbb',
-        orange: '#f90'
-    };
-
-    // note: these are the device icon colors without affinity
-    var dColTheme = {
-        light: {
-            online: {
-                glyph: dCol.black,
-                rect: dCol.paleblue
-            },
-            offline: {
-                glyph: dCol.midgrey,
-                rect: dCol.lightgrey
-            }
-        },
-        // TODO: theme
-        dark: {
-            online: {
-                glyph: dCol.black,
-                rect: dCol.paleblue
-            },
-            offline: {
-                glyph: dCol.midgrey,
-                rect: dCol.lightgrey
-            }
-        }
-    };
-
-    function devBaseColor(d) {
-        var t = network.view.getTheme(),
-            o = d.online ? 'online' : 'offline';
-        return dColTheme[t][o];
-    }
-
-    function setDeviceColor(d) {
-        var o = d.online,
-            s = d.el.classed('selected'),
-            c = devBaseColor(d),
-            a = instColor(d.master, o),
-            g, r,
-            icon = d.el.select('g.deviceIcon');
-
-        if (s) {
-            g = c.glyph;
-            r = dColTheme.sel;
-        } else if (colorAffinity) {
-            g = o ? a : c.glyph;
-            r = o ? dCol.offwhite : a;
-        } else {
-            g = c.glyph;
-            r = c.rect;
-        }
-
-        icon.select('use')
-            .style('fill', g);
-        icon.select('rect')
-            .style('fill', r);
-    }
-
-    function addDeviceIcon(node, box, noLabel, iid) {
-        var cfg = config.icons.device,
-            dx,
-            dy,
-            g;
-
-        if (noLabel) {
-            dx = -cfg.dim/2;
-            dy = -cfg.dim/2;
-        } else {
-            box = adjustRectToFitText(node);
-            dx = box.x + cfg.xoff;
-            dy = box.y + cfg.yoff;
-        }
-
-        g = node.append('g')
-                .attr('class', 'glyphIcon deviceIcon')
-                .attr('transform', translate(dx, dy));
-
-        g.append('rect').attr({
-            x: 0,
-            y: 0,
-            rx: cfg.rx,
-            width: cfg.dim,
-            height: cfg.dim
-        });
-
-        g.append('use').attr({
-            'xlink:href': iid,
-            width: cfg.dim,
-            height: cfg.dim
-        });
-
-    }
-
-    function find(key, array, tag) {
-        var _tag = tag || 'id',
-            idx, n, d;
-        for (idx = 0, n = array.length; idx < n; idx++) {
-            d = array[idx];
-            if (d[_tag] === key) {
-                return idx;
-            }
-        }
-        return -1;
-    }
-
-    function removeLinkElement(d) {
-        var idx = find(d.key, network.links, 'key'),
-            removed;
-        if (idx >=0) {
-            // remove from links array
-            removed = network.links.splice(idx, 1);
-            // remove from lookup cache
-            delete network.lookup[removed[0].key];
-            updateLinks();
-            fResume();
-        }
-    }
-
-    function removeHostElement(d, upd) {
-        var lu = network.lookup;
-        // first, remove associated hostLink...
-        removeLinkElement(d.linkData);
-
-        // remove hostLink bindings
-        delete lu[d.ingress];
-        delete lu[d.egress];
-
-        // remove from lookup cache
-        delete lu[d.id];
-        // remove from nodes array
-        var idx = find(d.id, network.nodes);
-        network.nodes.splice(idx, 1);
-        // remove from SVG
-        // NOTE: upd is false if we were called from removeDeviceElement()
-        if (upd) {
-            updateNodes();
-            fResume();
-        }
-    }
-
-
-    function removeDeviceElement(d) {
-        var id = d.id;
-        // first, remove associated hosts and links..
-        findAttachedHosts(id).forEach(removeHostElement);
-        findAttachedLinks(id).forEach(removeLinkElement);
-
-        // remove from lookup cache
-        delete network.lookup[id];
-        // remove from nodes array
-        var idx = find(id, network.nodes);
-        network.nodes.splice(idx, 1);
-
-        if (!network.nodes.length) {
-            showNoDevs(true);
-        }
-
-        // remove from SVG
-        updateNodes();
-        fResume();
-    }
-
-    function findAttachedHosts(devId) {
-        var hosts = [];
-        network.nodes.forEach(function (d) {
-            if (d.class === 'host' && d.cp.device === devId) {
-                hosts.push(d);
-            }
-        });
-        return hosts;
-    }
-
-    function findAttachedLinks(devId) {
-        var links = [];
-        network.links.forEach(function (d) {
-            if (d.source.id === devId || d.target.id === devId) {
-                links.push(d);
-            }
-        });
-        return links;
-    }
-
-    function fResume() {
-        if (!oblique) {
-            network.force.resume();
-        }
-    }
-
-    function fStart() {
-        if (!oblique) {
-            network.force.start();
-        }
-    }
-
-    var tickStuff = {
-        nodeAttr: {
-            transform: function (d) { return translate(d.x, d.y); }
-        },
-        linkAttr: {
-            x1: function (d) { return d.source.x; },
-            y1: function (d) { return d.source.y; },
-            x2: function (d) { return d.target.x; },
-            y2: function (d) { return d.target.y; }
-        },
-        linkLabelAttr: {
-            transform: function (d) {
-                var lnk = findLinkById(d.key);
-
-                if (lnk) {
-                    var parms = {
-                        x1: lnk.source.x,
-                        y1: lnk.source.y,
-                        x2: lnk.target.x,
-                        y2: lnk.target.y
-                    };
-                    return transformLabel(parms);
-                }
-            }
-        }
-    };
-
-    function tick() {
-        node.attr(tickStuff.nodeAttr);
-        link.attr(tickStuff.linkAttr);
-        linkLabel.attr(tickStuff.linkLabelAttr);
-    }
-
-    // ==============================
-    // Web-Socket for live data
-
-    function findGuiSuccessor() {
-        var idx = -1;
-        onosOrder.forEach(function (d, i) {
-            if (d.uiAttached) {
-                idx = i;
-            }
-        });
-
-        for (var i = 0; i < onosOrder.length - 1; i++) {
-            var ni = (idx + 1 + i) % onosOrder.length;
-            if (onosOrder[ni].online) {
-                return onosOrder[ni].ip;
-            }
-        }
-        return null;
-    }
-
-    function webSockUrl() {
-        var url = document.location.toString()
-                .replace(/\#.*/, '')
-                .replace('http://', 'ws://')
-                .replace('https://', 'wss://')
-                .replace('index.html', config.webSockUrl);
-        if (guiSuccessor) {
-            url = url.replace(location.hostname, guiSuccessor);
-        }
-        return url;
-    }
-
-    webSock = {
-        ws : null,
-        retries: 0,
-
-        connect : function() {
-            webSock.ws = new WebSocket(webSockUrl());
-
-            webSock.ws.onopen = function() {
-                noWebSock(false);
-                requestSummary();
-                showInstances();
-                webSock.retries = 0;
-            };
-
-            webSock.ws.onmessage = function(m) {
-                if (m.data) {
-                    wsTraceRx(m.data);
-                    handleServerEvent(JSON.parse(m.data));
-                }
-            };
-
-            webSock.ws.onclose = function(m) {
-                webSock.ws = null;
-                guiSuccessor = findGuiSuccessor();
-                if (guiSuccessor && webSock.retries < onosOrder.length) {
-                    webSock.retries++;
-                    webSock.connect();
-                } else {
-                    noWebSock(true);
-                }
-            };
-        },
-
-        send : function(text) {
-            if (text != null) {
-                webSock._send(text);
-            }
-        },
-
-        _send : function(message) {
-            if (webSock.ws) {
-                webSock.ws.send(message);
-            } else if (config.useLiveData) {
-                console.warn('no web socket open', message);
-            } else {
-                console.log('WS Send: ', message);
-            }
-        }
-
-    };
-
-    function noWebSock(b) {
-        mask.style('display',b ? 'block' : 'none');
-    }
-
-    function sendMessage(evType, payload) {
-        var p = payload || {},
-            toSend = {
-                event: evType,
-                sid: ++sid,
-                payload: p
-            },
-            asText = JSON.stringify(toSend);
-        wsTraceTx(asText);
-        webSock.send(asText);
-
-        // Temporary measure for debugging UI behavior ...
-        if (!config.useLiveData) {
-            handleTestSend(toSend);
-        }
-    }
-
-    function wsTraceTx(msg) {
-        wsTrace('tx', msg);
-    }
-    function wsTraceRx(msg) {
-        wsTrace('rx', msg);
-    }
-    function wsTrace(rxtx, msg) {
-        // console.log('[' + rxtx + '] ' + msg);
-    }
-
-    function handleTestSend(msg) { }
-
-    // ==============================
-    // Selection stuff
-
-    function selectObject(obj, el) {
-        var n,
-            ev = d3.event.sourceEvent;
-
-        // if the meta or alt key is pressed, we are panning/zooming, so ignore
-        if (ev.metaKey || ev.altKey) {
-            return;
-        }
-
-        if (el) {
-            n = d3.select(el);
-        } else {
-            node.each(function(d) {
-                if (d == obj) {
-                    n = d3.select(el = this);
-                }
-            });
-        }
-        if (!n) return;
-
-        if (ev.shiftKey && n.classed('selected')) {
-            deselectObject(obj.id);
-            updateDetailPane();
-            return;
-        }
-
-        if (!ev.shiftKey) {
-            deselectAll();
-        }
-
-        selections[obj.id] = { obj: obj, el: el };
-        selectOrder.push(obj.id);
-
-        n.classed('selected', true);
-        updateDeviceColors(obj);
-        updateDetailPane();
-    }
-
-    function deselectObject(id) {
-        var obj = selections[id],
-            idx;
-        if (obj) {
-            d3.select(obj.el).classed('selected', false);
-            delete selections[id];
-            idx = $.inArray(id, selectOrder);
-            if (idx >= 0) {
-                selectOrder.splice(idx, 1);
-            }
-            updateDeviceColors(obj.obj);
-        }
-    }
-
-    function deselectAll() {
-        // deselect all nodes in the network...
-        node.classed('selected', false);
-        selections = {};
-        selectOrder = [];
-        updateDeviceColors();
-        updateDetailPane();
-    }
-
-    function updateDeviceColors(d) {
-        if (d) {
-            setDeviceColor(d);
-        } else {
-            node.filter('.device').each(function (d) {
-                setDeviceColor(d);
-            });
-        }
-    }
-
-    // update the state of the detail pane, based on current selections
-    function updateDetailPane() {
-        var nSel = selectOrder.length;
-        if (!nSel) {
-            emptySelect();
-        } else if (nSel === 1) {
-            singleSelect();
-        } else {
-            multiSelect();
-        }
-    }
-
-    function emptySelect() {
-        haveDetails = false;
-        hideDetailPane();
-        cancelTraffic();
-    }
-
-    function singleSelect() {
-        // NOTE: detail is shown from showDetails event callback
-        requestDetails();
-        cancelTraffic();
-        requestTrafficForMode();
-    }
-
-    function multiSelect() {
-        haveDetails = true;
-        populateMultiSelect();
-        cancelTraffic();
-        requestTrafficForMode();
-    }
-
-    function addSep(tbody) {
-        var tr = tbody.append('tr');
-        $('<hr>').appendTo(tr.append('td').attr('colspan', 2));
-    }
-
-    function addProp(tbody, label, value) {
-        var tr = tbody.append('tr');
-
-        tr.append('td')
-            .attr('class', 'label')
-            .text(label + ' :');
-
-        tr.append('td')
-            .attr('class', 'value')
-            .text(value);
-    }
-
-    function populateMultiSelect() {
-        detailPane.empty();
-
-        var title = detailPane.append('h3'),
-            table = detailPane.append('table'),
-            tbody = table.append('tbody');
-
-        title.text('Selected Nodes');
-
-        selectOrder.forEach(function (d, i) {
-            addProp(tbody, i+1, d);
-        });
-
-        addMultiSelectActions();
-    }
-
-    function populateSummary(data) {
-        summaryPane.empty();
-
-        var svg = summaryPane.append('svg'),
-            iid = iconGlyphUrl(data);
-
-        var title = summaryPane.append('h2'),
-            table = summaryPane.append('table'),
-            tbody = table.append('tbody');
-
-        appendGlyph(svg, 0, 0, 40, iid);
-
-        svg.append('use')
-            .attr({
-                class: 'birdBadge',
-                transform: translate(8,12),
-                'xlink:href': '#bird',
-                width: 24,
-                height: 24,
-                fill: '#fff'
-            });
-
-        title.text('ONOS Summary');
-
-        data.propOrder.forEach(function(p) {
-            if (p === '-') {
-                addSep(tbody);
-            } else {
-                addProp(tbody, p, data.props[p]);
-            }
-        });
-    }
-
-    function populateDetails(data) {
-        detailPane.empty();
-
-        var svg = detailPane.append('svg'),
-            iid = iconGlyphUrl(data);
-
-        var title = detailPane.append('h2'),
-            table = detailPane.append('table'),
-            tbody = table.append('tbody');
-
-        appendGlyph(svg, 0, 0, 40, iid);
-        title.text(data.id);
-
-        data.propOrder.forEach(function(p) {
-            if (p === '-') {
-                addSep(tbody);
-            } else {
-                addProp(tbody, p, data.props[p]);
-            }
-        });
-
-        addSingleSelectActions(data);
-    }
-
-    function addSingleSelectActions(data) {
-        detailPane.append('hr');
-        // always want to allow 'show traffic'
-        addAction(detailPane, 'Show Related Traffic', showRelatedIntentsAction);
-
-        if (data.type === 'switch') {
-            addAction(detailPane, 'Show Device Flows', showDeviceLinkFlowsAction);
-        }
-    }
-
-    function addMultiSelectActions() {
-        detailPane.append('hr');
-        // always want to allow 'show traffic'
-        addAction(detailPane, 'Show Related Traffic', showRelatedIntentsAction);
-        // if exactly two hosts are selected, also want 'add host intent'
-        if (nSel() === 2 && allSelectionsClass('host')) {
-            addAction(detailPane, 'Create Host-to-Host Flow', addHostIntentAction);
-        } else if (nSel() >= 2 && allSelectionsClass('host')) {
-            addAction(detailPane, 'Create Multi-Source Flow', addMultiSourceIntentAction);
-        }
-    }
-
-    function addAction(panel, text, cb) {
-        panel.append('div')
-            .classed('actionBtn', true)
-            .text(text)
-            .on('click', cb);
-    }
-
-
-    // === Pan and Zoom behaviors...
-
-    function panZoom(translate, scale) {
-        panZoomContainer.attr('transform',
-            'translate(' + translate + ')scale(' + scale + ')');
-        // keep the map lines constant width while zooming
-        bgImg.style('stroke-width', 2.0 / scale + 'px');
-    }
-
-    function resetPanZoom() {
-        panZoom([0,0], 1);
-        zoom.translate([0,0]).scale(1);
-    }
-
-    function setupPanZoom() {
-        function zoomed() {
-            var ev = d3.event.sourceEvent;
-            // pan/zoom active when meta or alt key is pressed...
-            if (ev.metaKey || ev.altKey) {
-                panZoom(d3.event.translate, d3.event.scale);
-            }
-        }
-
-        zoom = d3.behavior.zoom()
-            .translate([0, 0])
-            .scale(1)
-            .scaleExtent([0.25, 10])
-            .on("zoom", zoomed);
-
-        svg.call(zoom);
-    }
-
-
-    function setupNoDevices() {
-        var g = noDevices.append('g');
-        appendBadge(g, 0, 0, 100, '#bird', 'noDevsBird');
-        var text = g.append('text')
-            .text('No devices are connected')
-            .attr({ x: 120, y: 80});
-    }
-
-    function repositionNoDevices() {
-        var g = noDevices.select('g');
-        var box = g.node().getBBox();
-        box.x -= box.width/2;
-        box.y -= box.height/2;
-        g.attr('transform', translate(box.x, box.y));
-    }
-
-
-    // ==============================
-    // Test harness code
-
-    function prepareScenario(view, ctx, dbg) {
-        var sc = scenario,
-            urlSc = sc.evDir + ctx + sc.evScenario;
-
-        if (!ctx) {
-            view.alert("No scenario specified (null ctx)");
-            return;
-        }
-
-        sc.view = view;
-        sc.ctx = ctx;
-        sc.debug = dbg;
-        sc.evNumber = 0;
-
-        d3.json(urlSc, function(err, data) {
-            var p = data && data.params || {},
-                desc = data && data.description || null,
-                intro = data && data.title;
-
-            if (err) {
-                view.alert('No scenario found:\n\n' + urlSc + '\n\n' + err);
-            } else {
-                sc.params = p;
-                if (desc) {
-                    intro += '\n\n  ' + desc.join('\n  ');
-                }
-                view.alert(intro);
-            }
-        });
-
-    }
-
-    function setupDefs(svg) {
-        var defs = svg.append('defs');
-        gly.loadDefs(defs);
-        d3u.loadGlow(defs);
-    }
-
-    function sendUpdateMeta(d, store) {
-        var metaUi = {},
-            ll;
-
-        if (store) {
-            ll = geoMapProj.invert([d.x, d.y]);
-            metaUi = {
-                x: d.x,
-                y: d.y,
-                lng: ll[0],
-                lat: ll[1]
-            };
-        }
-        d.metaUi = metaUi;
-        sendMessage('updateMeta', {
-            id: d.id,
-            'class': d.class,
-            memento: metaUi
-        });
-    }
-
-    // ==============================
-    // View life-cycle callbacks
-
-    function init(view, ctx, flags) {
-        var w = view.width(),
-            h = view.height(),
-            logSize = config.logicalSize,
-            fcfg = config.force;
-
-        // NOTE: view.$div is a D3 selection of the view's div
-        var viewBox = '0 0 ' + logSize + ' ' + logSize;
-        svg = view.$div.append('svg').attr('viewBox', viewBox);
-        setSize(svg, view);
-
-        // load glyphs, filters, and other definitions...
-        setupDefs(svg);
-
-        panZoomContainer = svg.append('g').attr('id', 'panZoomContainer');
-        setupPanZoom();
-
-        noDevices = svg.append('g')
-            .attr('class', 'noDevsLayer')
-            .attr('transform', translate(logSize/2, logSize/2));
-        setupNoDevices();
-
-        // group for the topology
-        topoG = panZoomContainer.append('g')
-            .attr('id', 'topo-G');
-
-        // subgroups for links, link labels, and nodes
-        linkG = topoG.append('g').attr('id', 'links');
-        linkLabelG = topoG.append('g').attr('id', 'linkLabels');
-        nodeG = topoG.append('g').attr('id', 'nodes');
-
-        // selection of links, linkLabels, and nodes
-        link = linkG.selectAll('.link');
-        linkLabel = linkLabelG.selectAll('.linkLabel');
-        node = nodeG.selectAll('.node');
-
-        function chrg(d) {
-            return fcfg.charge[d.class] || -12000;
-        }
-        function ldist(d) {
-            return fcfg.linkDistance[d.type] || 50;
-        }
-        function lstrg(d) {
-            // 0.0 - 1.0
-            return fcfg.linkStrength[d.type] || 1.0;
-        }
-
-        function selectCb(d, self) {
-            selectObject(d, self);
-        }
-
-        function atDragEnd(d, self) {
-            // once we've finished moving, pin the node in position
-            d.fixed = true;
-            d3.select(self).classed('fixed', true);
-            if (config.useLiveData) {
-                sendUpdateMeta(d, true);
-            } else {
-                console.log('Moving node ' + d.id + ' to [' + d.x + ',' + d.y + ']');
-            }
-        }
-
-        // predicate that indicates when dragging is active
-        function dragEnabled() {
-            var ev = d3.event.sourceEvent;
-            // nodeLock means we aren't allowing nodes to be dragged...
-            // meta or alt key pressed means we are zooming/panning...
-            return !nodeLock && !(ev.metaKey || ev.altKey);
-        }
-
-        // predicate that indicates when clicking is active
-        function clickEnabled() {
-            return true;
-        }
-
-        // set up the force layout
-        network.force = d3.layout.force()
-            .size([w, h])
-            .nodes(network.nodes)
-            .links(network.links)
-            .gravity(0.4)
-            .friction(0.7)
-            .charge(chrg)
-            .linkDistance(ldist)
-            .linkStrength(lstrg)
-            .on('tick', tick);
-
-        network.drag = d3u.createDragBehavior(network.force,
-            selectCb, atDragEnd, dragEnabled, clickEnabled);
-
-
-        // create mask layer for when we lose connection to server.
-        // TODO: this should be part of the framework
-
-        function para(sel, text) {
-            sel.append('p').text(text);
-        }
-
-        mask = view.$div.append('div').attr('id','topo-mask');
-        para(mask, 'Oops!');
-        para(mask, 'Web-socket connection to server closed...');
-        para(mask, 'Try refreshing the page.');
-
-        mask.append('svg')
-            .attr({
-                id: 'mask-bird',
-                width: w,
-                height: h
-            })
-            .append('g')
-            .attr('transform', birdTranslate(w, h))
-            .style('opacity', 0.3)
-            .append('use')
-                .attr({
-                    'xlink:href': '#bird',
-                    width: config.birdDim,
-                    height: config.birdDim,
-                    fill: '#111'
-                })
-    }
-
-
-    function load(view, ctx, flags) {
-        // resize, in case the window was resized while we were not loaded
-        resize(view, ctx, flags);
-
-        // cache the view token, so network topo functions can access it
-        network.view = view;
-        config.useLiveData = !flags.local;
-
-        if (!config.useLiveData) {
-            prepareScenario(view, ctx, flags.debug);
-        }
-
-        // set our radio buttons and key bindings
-        layerBtnSet = view.setRadio(layerButtons);
-        view.setKeys(keyDispatch);
-        view.setGestures(gestures);
-
-        // Load map data asynchronously; complete startup after that..
-        loadGeoJsonData();
-    }
-
-    function startAntTimer() {
-        // Note: disabled until traffic can be allotted to intents properly
-        if (false && !antTimer) {
-            var pulses = [5, 3, 1.2, 3],
-                pulse = 0;
-            antTimer = setInterval(function () {
-                pulse = pulse + 1;
-                pulse = pulse === pulses.length ? 0 : pulse;
-                d3.selectAll('.animated').style('stroke-width', pulses[pulse]);
-            }, 200);
-        }
-    }
-
-    function stopAntTimer() {
-        if (antTimer) {
-            clearInterval(antTimer);
-            antTimer = null;
-        }
-    }
-
-    function unload(view, ctx, flags) {
-        stopAntTimer();
-    }
-
-    var geoJsonUrl = 'continental_us.json',
-        geoJson;
-
-    function loadGeoJsonData() {
-        d3.json(geoJsonUrl, function (err, data) {
-            if (err) {
-                console.error('failed to load Map data', err);
-            } else {
-                geoJson = data;
-                loadGeoMap();
-            }
-
-            repositionNoDevices();
-            showNoDevs(true);
-
-            // finally, connect to the server...
-            if (config.useLiveData) {
-                webSock.connect();
-            }
-        });
-    }
-
-    function setProjForView(path, topoData) {
-        var dim = config.logicalSize;
-
-        // start with unit scale, no translation..
-        geoMapProj.scale(1).translate([0, 0]);
-
-        // figure out dimensions of map data..
-        var b = path.bounds(topoData),
-            x1 = b[0][0],
-            y1 = b[0][1],
-            x2 = b[1][0],
-            y2 = b[1][1],
-            dx = x2 - x1,
-            dy = y2 - y1,
-            x = (x1 + x2) / 2,
-            y = (y1 + y2) / 2;
-
-        // size map to 95% of minimum dimension to fill space..
-        var s = .95 / Math.min(dx / dim, dy / dim);
-        var t = [dim / 2 - s * x, dim / 2 - s * y];
-
-        // set new scale, translation on the projection..
-        geoMapProj.scale(s).translate(t);
-    }
-
-    function loadGeoMap() {
-        fnTrace('loadGeoMap', geoJsonUrl);
-
-        // extracts the topojson data into geocoordinate-based geometry
-        var topoData = topojson.feature(geoJson, geoJson.objects.states);
-
-        // see: http://bl.ocks.org/mbostock/4707858
-        geoMapProj = d3.geo.mercator();
-        var path = d3.geo.path().projection(geoMapProj);
-
-        setProjForView(path, topoData);
-
-        bgImg = panZoomContainer.insert("g", '#topo-G');
-        bgImg.attr('id', 'map').selectAll('path')
-            .data(topoData.features)
-            .enter()
-            .append('path')
-            .attr('d', path);
-    }
-
-    function resize(view, ctx, flags) {
-        var w = view.width(),
-            h = view.height();
-
-        setSize(svg, view);
-
-        d3.select('#mask-bird').attr({ width: w, height: h})
-            .select('g').attr('transform', birdTranslate(w, h));
-    }
-
-    function theme(view, ctx, flags) {
-        updateInstances();
-        updateDeviceColors();
-    }
-
-    function birdTranslate(w, h) {
-        var bdim = config.birdDim;
-        return 'translate('+((w-bdim)*.4)+','+((h-bdim)*.1)+')';
-    }
-
-    function isF(f) { return $.isFunction(f) ? f : null; }
-    function noop() {}
-
-    function augmentDetailPane() {
-        var dp = detailPane;
-        dp.ypos = { up: 64, down: 320, current: 320};
-
-        dp._move = function (y, cb) {
-            var endCb = isF(cb) || noop,
-                yp = dp.ypos;
-            if (yp.current !== y) {
-                yp.current = y;
-                dp.el.transition().duration(300)
-                    .each('end', endCb)
-                    .style('top', yp.current + 'px');
-            } else {
-                endCb();
-            }
-        };
-
-        dp.down = function (cb) { dp._move(dp.ypos.down, cb); };
-        dp.up = function (cb) { dp._move(dp.ypos.up, cb); };
-    }
-
-    // ==============================
-    // View registration
-
-    onos.ui.addView('topo', {
-        init: init,
-        load: load,
-        unload: unload,
-        resize: resize,
-        theme: theme
-    });
-
-    summaryPane = onos.ui.addFloatingPanel('topo-summary');
-    detailPane = onos.ui.addFloatingPanel('topo-detail');
-    augmentDetailPane();
-    oiBox = onos.ui.addFloatingPanel('topo-oibox', 'TL');
-    oiBox.width(20);
-
-}(ONOS));
diff --git a/web/gui/src/test/java/org/onosproject/ui/README.txt b/web/gui/src/test/java/org/onosproject/ui/impl/README.txt
similarity index 100%
rename from web/gui/src/test/java/org/onosproject/ui/README.txt
rename to web/gui/src/test/java/org/onosproject/ui/impl/README.txt
diff --git a/web/gui/src/test/java/org/onosproject/ui/impl/TopologyViewWebSocketTest.java b/web/gui/src/test/java/org/onosproject/ui/impl/TopologyViewWebSocketTest.java
deleted file mode 100644
index 8937971..0000000
--- a/web/gui/src/test/java/org/onosproject/ui/impl/TopologyViewWebSocketTest.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableSet;
-import org.junit.Before;
-import org.junit.Test;
-import org.onlab.osgi.ServiceDirectory;
-import org.onlab.osgi.TestServiceDirectory;
-import org.onlab.packet.ChassisId;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.VlanId;
-import org.onosproject.cluster.ClusterService;
-import org.onosproject.cluster.ClusterServiceAdapter;
-import org.onosproject.core.CoreService;
-import org.onosproject.core.CoreServiceAdapter;
-import org.onosproject.core.Version;
-import org.onosproject.mastership.MastershipService;
-import org.onosproject.mastership.MastershipServiceAdapter;
-import org.onosproject.net.DefaultDevice;
-import org.onosproject.net.DefaultHost;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.Port;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.device.DeviceServiceAdapter;
-import org.onosproject.net.flow.FlowEntry;
-import org.onosproject.net.flow.FlowRuleService;
-import org.onosproject.net.flow.FlowRuleServiceAdapter;
-import org.onosproject.net.host.HostService;
-import org.onosproject.net.host.HostServiceAdapter;
-import org.onosproject.net.intent.IntentService;
-import org.onosproject.net.intent.IntentServiceAdapter;
-import org.onosproject.net.link.LinkService;
-import org.onosproject.net.link.LinkServiceAdapter;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.statistic.StatisticService;
-import org.onosproject.net.statistic.StatisticServiceAdapter;
-import org.onosproject.net.topology.TopologyService;
-import org.onosproject.net.topology.TopologyServiceAdapter;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import static org.junit.Assert.assertEquals;
-
-public class TopologyViewWebSocketTest {
-
-    private static final ProviderId PID = new ProviderId("of", "foo.bar");
-    private static final ChassisId CHID = new ChassisId(123L);
-    private static final MacAddress MAC = MacAddress.valueOf("00:00:00:00:00:19");
-    private static final DeviceId DID = DeviceId.deviceId("of:foo");
-    private static final Set<IpAddress> IPS = ImmutableSet.of(IpAddress.valueOf("1.2.3.4"));
-
-    private TestWebSocket ws;
-    private TestServiceDirectory sd;
-
-    @Before
-    public void setUp() {
-        sd = new TestServiceDirectory();
-        sd.add(DeviceService.class, new TestDeviceService());
-        sd.add(ClusterService.class, new ClusterServiceAdapter());
-        sd.add(LinkService.class, new LinkServiceAdapter());
-        sd.add(HostService.class, new TestHostService());
-        sd.add(MastershipService.class, new MastershipServiceAdapter());
-        sd.add(IntentService.class, new IntentServiceAdapter());
-        sd.add(FlowRuleService.class, new TestFlowService());
-        sd.add(StatisticService.class, new StatisticServiceAdapter());
-        sd.add(TopologyService.class, new TopologyServiceAdapter());
-        sd.add(CoreService.class, new TestCoreService());
-        ws = new TestWebSocket(sd);
-    }
-
-    @Test
-    public void requestDetailsDevice() {
-        // build the request
-        String request = "{\"event\":\"requestDetails\", \"sid\":0, "
-                + "\"payload\":{\"id\":\"of:000001\",\"class\":\"device\"}}";
-        ws.onMessage(request);
-        // look at the ws reply, and verify that it is correct
-        assertEquals("incorrect id", "of:000001", ws.reply.path("payload").path("id").asText());
-        assertEquals("incorrect mfr", "foo", ws.reply.path("payload").path("props").path("Vendor").asText());
-    }
-
-    @Test
-    public void requestDetailsHost() {
-        // build the request
-        String request = "{\"event\":\"requestDetails\", \"sid\":0, "
-                + "\"payload\":{\"id\":\"00:00:00:00:00:19/-1\",\"class\":\"host\"}}";
-        ws.onMessage(request);
-        // look at the ws reply, and verify that it is correct
-        assertEquals("incorrect id", "00:00:00:00:00:19/-1", ws.reply.path("payload").path("id").asText());
-        assertEquals("incorrect ip address", "1.2.3.4", ws.reply.path("payload").path("props").path("IP").asText());
-    }
-
-    private class TestWebSocket extends TopologyViewWebSocket {
-
-        private ObjectNode reply;
-
-        /**
-         * Creates a new web-socket for serving data to GUI topology view.
-         *
-         * @param directory service directory
-         */
-        public TestWebSocket(ServiceDirectory directory) {
-            super(directory);
-        }
-
-        @Override
-        protected synchronized void sendMessage(ObjectNode data) {
-            reply = data;
-        }
-    }
-
-    private class TestCoreService extends CoreServiceAdapter {
-        @Override
-        public Version version() {
-            return Version.version("1.2.3");
-        }
-    }
-
-    private class TestDeviceService extends DeviceServiceAdapter {
-
-        @Override
-        public Device getDevice(DeviceId deviceId) {
-            return new DefaultDevice(PID, deviceId, Device.Type.SWITCH,
-                                     "foo", "hw", "sw", "sn", CHID);
-        }
-
-        @Override
-        public List<Port> getPorts(DeviceId deviceId) {
-            return new ArrayList<>();
-        }
-    }
-
-    private class TestFlowService extends FlowRuleServiceAdapter {
-        @Override
-        public Iterable<FlowEntry> getFlowEntries(DeviceId deviceId) {
-            return new ArrayList<>();
-        }
-    }
-
-    private class TestHostService extends HostServiceAdapter {
-        @Override
-        public Host getHost(HostId hostId) {
-            return new DefaultHost(PID, hostId, MAC, VlanId.NONE,
-                                   new HostLocation(DID, PortNumber.P0, 123L), IPS);
-        }
-    }
-}
\ No newline at end of file