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
