From 5e6925463a8e70c26be0bce320c56773b10b591a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C3=A9on=20Victor?= <leon.victor@kitware.com>
Date: Wed, 24 Jul 2024 14:53:27 +0200
Subject: [PATCH] Add vtkImplicitConeWidget test

---
 .../Widgets/Testing/Cxx/CMakeLists.txt        |    1 +
 .../Testing/Cxx/TestImplicitConeWidget.cxx    | 1095 +++++++++++++++++
 2 files changed, 1096 insertions(+)
 create mode 100644 Interaction/Widgets/Testing/Cxx/TestImplicitConeWidget.cxx

diff --git a/Interaction/Widgets/Testing/Cxx/CMakeLists.txt b/Interaction/Widgets/Testing/Cxx/CMakeLists.txt
index e6e04e0abd0..ad3d562f50a 100644
--- a/Interaction/Widgets/Testing/Cxx/CMakeLists.txt
+++ b/Interaction/Widgets/Testing/Cxx/CMakeLists.txt
@@ -34,6 +34,7 @@ vtk_add_test_cxx(vtkInteractionWidgetsCxxTests tests
   TestHandleWidget.cxx
   TestHandleWidget2D.cxx
   TestImageActorContourWidget.cxx
+  TestImplicitConeWidget.cxx
   TestImplicitCylinderWidget.cxx
   TestImplicitCylinderWidget2.cxx
   TestImplicitPlaneWidget.cxx
diff --git a/Interaction/Widgets/Testing/Cxx/TestImplicitConeWidget.cxx b/Interaction/Widgets/Testing/Cxx/TestImplicitConeWidget.cxx
new file mode 100644
index 00000000000..b5703ff142a
--- /dev/null
+++ b/Interaction/Widgets/Testing/Cxx/TestImplicitConeWidget.cxx
@@ -0,0 +1,1095 @@
+// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+// SPDX-License-Identifier: BSD-3-Clause
+
+#include "vtkActor.h"
+#include "vtkAppendPolyData.h"
+#include "vtkCamera.h"
+#include "vtkClipPolyData.h"
+#include "vtkCommand.h"
+#include "vtkCone.h"
+#include "vtkConeSource.h"
+#include "vtkGlyph3D.h"
+#include "vtkImplicitConeRepresentation.h"
+#include "vtkImplicitConeWidget.h"
+#include "vtkInteractorEventRecorder.h"
+#include "vtkLODActor.h"
+#include "vtkPolyData.h"
+#include "vtkPolyDataMapper.h"
+#include "vtkProperty.h"
+#include "vtkRenderWindow.h"
+#include "vtkRenderWindowInteractor.h"
+#include "vtkRenderer.h"
+#include "vtkSphereSource.h"
+
+namespace
+{
+
+const char eventLog[] = "# StreamVersion 1.2\n"
+                        "ExposeEvent 0 299 0 0 0 0 0\n"
+                        "MouseWheelBackwardEvent 123 155 0 0 0 0 0\n"
+
+                        "MouseWheelBackwardEvent 123 155 0 0 1 0 0\n"
+
+                        "MouseWheelBackwardEvent 123 155 0 0 0 0 0\n"
+
+                        "MouseWheelBackwardEvent 123 155 0 0 1 0 0\n"
+
+                        "MouseWheelBackwardEvent 123 155 0 0 0 0 0\n"
+
+                        "MouseWheelBackwardEvent 123 155 0 0 1 0 0\n"
+
+                        "MouseWheelBackwardEvent 123 155 0 0 0 0 0\n"
+
+                        "MouseWheelBackwardEvent 123 155 0 0 1 0 0\n"
+
+                        "MouseWheelBackwardEvent 123 155 0 0 0 0 0\n"
+
+                        "MouseWheelBackwardEvent 123 155 0 0 1 0 0\n"
+
+                        "MouseWheelBackwardEvent 123 155 0 0 0 0 0\n"
+                        "StartInteractionEvent 123 155 0 0 0 0 0\n"
+                        "RenderEvent 123 155 0 0 0 0 0\n"
+                        "EndInteractionEvent 123 155 0 0 0 0 0\n"
+                        "RenderEvent 123 155 0 0 0 0 0\n"
+                        "MouseMoveEvent 124 155 0 0 0 0 0\n"
+                        "RenderEvent 124 155 0 0 0 0 0\n"
+                        "MouseMoveEvent 128 155 0 0 0 0 0\n"
+                        "MouseMoveEvent 132 155 0 0 0 0 0\n"
+                        "MouseMoveEvent 137 156 0 0 0 0 0\n"
+                        "MouseMoveEvent 143 156 0 0 0 0 0\n"
+                        "MouseMoveEvent 151 157 0 0 0 0 0\n"
+                        "MouseMoveEvent 159 157 0 0 0 0 0\n"
+                        "RenderEvent 159 157 0 0 0 0 0\n"
+                        "MouseMoveEvent 166 157 0 0 0 0 0\n"
+                        "RenderEvent 166 157 0 0 0 0 0\n"
+                        "MouseMoveEvent 172 158 0 0 0 0 0\n"
+                        "RenderEvent 172 158 0 0 0 0 0\n"
+                        "MouseMoveEvent 177 158 0 0 0 0 0\n"
+                        "RenderEvent 177 158 0 0 0 0 0\n"
+                        "MouseMoveEvent 181 159 0 0 0 0 0\n"
+                        "RenderEvent 181 159 0 0 0 0 0\n"
+                        "MouseMoveEvent 184 159 0 0 0 0 0\n"
+                        "RenderEvent 184 159 0 0 0 0 0\n"
+                        "MouseMoveEvent 185 159 0 0 0 0 0\n"
+                        "RenderEvent 185 159 0 0 0 0 0\n"
+                        "MouseMoveEvent 188 161 0 0 0 0 0\n"
+                        "RenderEvent 188 161 0 0 0 0 0\n"
+                        "MouseMoveEvent 190 163 0 0 0 0 0\n"
+                        "RenderEvent 190 163 0 0 0 0 0\n"
+                        "MouseMoveEvent 191 163 0 0 0 0 0\n"
+                        "RenderEvent 191 163 0 0 0 0 0\n"
+                        "MouseMoveEvent 193 163 0 0 0 0 0\n"
+                        "RenderEvent 193 163 0 0 0 0 0\n"
+                        "MouseMoveEvent 194 163 0 0 0 0 0\n"
+                        "RenderEvent 194 163 0 0 0 0 0\n"
+                        "MouseMoveEvent 196 163 0 0 0 0 0\n"
+                        "RenderEvent 196 163 0 0 0 0 0\n"
+                        "MouseMoveEvent 196 162 0 0 0 0 0\n"
+                        "RenderEvent 196 162 0 0 0 0 0\n"
+                        "MouseMoveEvent 197 162 0 0 0 0 0\n"
+                        "RenderEvent 197 162 0 0 0 0 0\n"
+                        "MouseMoveEvent 197 161 0 0 0 0 0\n"
+                        "RenderEvent 197 161 0 0 0 0 0\n"
+                        "MouseMoveEvent 197 160 0 0 0 0 0\n"
+                        "RenderEvent 197 160 0 0 0 0 0\n"
+                        "LeftButtonPressEvent 197 160 0 0 0 0 0\n"
+                        "RenderEvent 197 160 0 0 0 0 0\n"
+                        "MouseMoveEvent 196 160 0 0 0 0 0\n"
+                        "RenderEvent 196 160 0 0 0 0 0\n"
+                        "MouseMoveEvent 193 162 0 0 0 0 0\n"
+                        "RenderEvent 193 162 0 0 0 0 0\n"
+                        "MouseMoveEvent 190 165 0 0 0 0 0\n"
+                        "RenderEvent 190 165 0 0 0 0 0\n"
+                        "MouseMoveEvent 187 168 0 0 0 0 0\n"
+                        "RenderEvent 187 168 0 0 0 0 0\n"
+                        "MouseMoveEvent 183 171 0 0 0 0 0\n"
+                        "RenderEvent 183 171 0 0 0 0 0\n"
+                        "MouseMoveEvent 179 175 0 0 0 0 0\n"
+                        "RenderEvent 179 175 0 0 0 0 0\n"
+                        "MouseMoveEvent 178 175 0 0 0 0 0\n"
+                        "RenderEvent 178 175 0 0 0 0 0\n"
+                        "MouseMoveEvent 177 176 0 0 0 0 0\n"
+                        "RenderEvent 177 176 0 0 0 0 0\n"
+                        "MouseMoveEvent 176 176 0 0 0 0 0\n"
+                        "RenderEvent 176 176 0 0 0 0 0\n"
+                        "MouseMoveEvent 175 177 0 0 0 0 0\n"
+                        "RenderEvent 175 177 0 0 0 0 0\n"
+                        "MouseMoveEvent 174 177 0 0 0 0 0\n"
+                        "RenderEvent 174 177 0 0 0 0 0\n"
+                        "MouseMoveEvent 173 178 0 0 0 0 0\n"
+                        "RenderEvent 173 178 0 0 0 0 0\n"
+                        "MouseMoveEvent 170 179 0 0 0 0 0\n"
+                        "RenderEvent 170 179 0 0 0 0 0\n"
+                        "MouseMoveEvent 168 181 0 0 0 0 0\n"
+                        "RenderEvent 168 181 0 0 0 0 0\n"
+                        "MouseMoveEvent 167 181 0 0 0 0 0\n"
+                        "RenderEvent 167 181 0 0 0 0 0\n"
+                        "MouseMoveEvent 166 182 0 0 0 0 0\n"
+                        "RenderEvent 166 182 0 0 0 0 0\n"
+                        "MouseMoveEvent 164 184 0 0 0 0 0\n"
+                        "RenderEvent 164 184 0 0 0 0 0\n"
+                        "MouseMoveEvent 162 186 0 0 0 0 0\n"
+                        "RenderEvent 162 186 0 0 0 0 0\n"
+                        "MouseMoveEvent 160 187 0 0 0 0 0\n"
+                        "RenderEvent 160 187 0 0 0 0 0\n"
+                        "MouseMoveEvent 159 187 0 0 0 0 0\n"
+                        "RenderEvent 159 187 0 0 0 0 0\n"
+                        "MouseMoveEvent 159 188 0 0 0 0 0\n"
+                        "RenderEvent 159 188 0 0 0 0 0\n"
+                        "MouseMoveEvent 157 189 0 0 0 0 0\n"
+                        "RenderEvent 157 189 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 189 0 0 0 0 0\n"
+                        "RenderEvent 156 189 0 0 0 0 0\n"
+                        "MouseMoveEvent 155 190 0 0 0 0 0\n"
+                        "RenderEvent 155 190 0 0 0 0 0\n"
+                        "MouseMoveEvent 154 190 0 0 0 0 0\n"
+                        "RenderEvent 154 190 0 0 0 0 0\n"
+                        "MouseMoveEvent 154 191 0 0 0 0 0\n"
+                        "RenderEvent 154 191 0 0 0 0 0\n"
+                        "MouseMoveEvent 153 191 0 0 0 0 0\n"
+                        "RenderEvent 153 191 0 0 0 0 0\n"
+                        "MouseMoveEvent 154 190 0 0 0 0 0\n"
+                        "RenderEvent 154 190 0 0 0 0 0\n"
+                        "MouseMoveEvent 155 189 0 0 0 0 0\n"
+                        "RenderEvent 155 189 0 0 0 0 0\n"
+                        "MouseMoveEvent 155 188 0 0 0 0 0\n"
+                        "RenderEvent 155 188 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 187 0 0 0 0 0\n"
+                        "RenderEvent 156 187 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 186 0 0 0 0 0\n"
+                        "RenderEvent 156 186 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 185 0 0 0 0 0\n"
+                        "RenderEvent 156 185 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 184 0 0 0 0 0\n"
+                        "RenderEvent 156 184 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 182 0 0 0 0 0\n"
+                        "RenderEvent 156 182 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 181 0 0 0 0 0\n"
+                        "RenderEvent 156 181 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 180 0 0 0 0 0\n"
+                        "RenderEvent 156 180 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 179 0 0 0 0 0\n"
+                        "RenderEvent 156 179 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 178 0 0 0 0 0\n"
+                        "RenderEvent 156 178 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 174 0 0 0 0 0\n"
+                        "RenderEvent 156 174 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 171 0 0 0 0 0\n"
+                        "RenderEvent 156 171 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 169 0 0 0 0 0\n"
+                        "RenderEvent 156 169 0 0 0 0 0\n"
+                        "MouseMoveEvent 155 167 0 0 0 0 0\n"
+                        "RenderEvent 155 167 0 0 0 0 0\n"
+                        "MouseMoveEvent 155 165 0 0 0 0 0\n"
+                        "RenderEvent 155 165 0 0 0 0 0\n"
+                        "MouseMoveEvent 155 164 0 0 0 0 0\n"
+                        "RenderEvent 155 164 0 0 0 0 0\n"
+                        "MouseMoveEvent 155 162 0 0 0 0 0\n"
+                        "RenderEvent 155 162 0 0 0 0 0\n"
+                        "MouseMoveEvent 155 161 0 0 0 0 0\n"
+                        "RenderEvent 155 161 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 161 0 0 0 0 0\n"
+                        "RenderEvent 156 161 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 160 0 0 0 0 0\n"
+                        "RenderEvent 156 160 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 160 0 0 0 0 0\n"
+                        "RenderEvent 156 160 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 160 0 0 0 0 0\n"
+                        "RenderEvent 156 160 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 159 0 0 0 0 0\n"
+                        "RenderEvent 156 159 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 159 0 0 0 0 0\n"
+                        "RenderEvent 156 159 0 0 0 0 0\n"
+                        "MouseMoveEvent 155 159 0 0 0 0 0\n"
+                        "RenderEvent 155 159 0 0 0 0 0\n"
+                        "MouseMoveEvent 155 158 0 0 0 0 0\n"
+                        "RenderEvent 155 158 0 0 0 0 0\n"
+                        "MouseMoveEvent 154 158 0 0 0 0 0\n"
+                        "RenderEvent 154 158 0 0 0 0 0\n"
+                        "MouseMoveEvent 153 157 0 0 0 0 0\n"
+                        "RenderEvent 153 157 0 0 0 0 0\n"
+                        "LeftButtonReleaseEvent 153 157 0 0 0 0 0\n"
+                        "RenderEvent 153 157 0 0 0 0 0\n"
+                        "MouseMoveEvent 152 157 0 0 0 0 0\n"
+                        "RenderEvent 152 157 0 0 0 0 0\n"
+                        "MouseMoveEvent 151 156 0 0 0 0 0\n"
+                        "RenderEvent 151 156 0 0 0 0 0\n"
+                        "MouseMoveEvent 148 155 0 0 0 0 0\n"
+                        "RenderEvent 148 155 0 0 0 0 0\n"
+                        "MouseMoveEvent 146 154 0 0 0 0 0\n"
+                        "RenderEvent 146 154 0 0 0 0 0\n"
+                        "MouseMoveEvent 142 153 0 0 0 0 0\n"
+                        "RenderEvent 142 153 0 0 0 0 0\n"
+                        "MouseMoveEvent 139 152 0 0 0 0 0\n"
+                        "RenderEvent 139 152 0 0 0 0 0\n"
+                        "MouseMoveEvent 133 150 0 0 0 0 0\n"
+                        "RenderEvent 133 150 0 0 0 0 0\n"
+                        "MouseMoveEvent 129 148 0 0 0 0 0\n"
+                        "RenderEvent 129 148 0 0 0 0 0\n"
+                        "MouseMoveEvent 125 147 0 0 0 0 0\n"
+                        "RenderEvent 125 147 0 0 0 0 0\n"
+                        "MouseMoveEvent 124 147 0 0 0 0 0\n"
+                        "RenderEvent 124 147 0 0 0 0 0\n"
+                        "MouseMoveEvent 123 147 0 0 0 0 0\n"
+                        "RenderEvent 123 147 0 0 0 0 0\n"
+                        "MouseMoveEvent 122 147 0 0 0 0 0\n"
+                        "RenderEvent 122 147 0 0 0 0 0\n"
+                        "MouseMoveEvent 117 147 0 0 0 0 0\n"
+                        "RenderEvent 117 147 0 0 0 0 0\n"
+                        "MouseMoveEvent 112 147 0 0 0 0 0\n"
+                        "RenderEvent 112 147 0 0 0 0 0\n"
+                        "MouseMoveEvent 109 146 0 0 0 0 0\n"
+                        "RenderEvent 109 146 0 0 0 0 0\n"
+                        "MouseMoveEvent 107 146 0 0 0 0 0\n"
+                        "RenderEvent 107 146 0 0 0 0 0\n"
+                        "MouseMoveEvent 106 146 0 0 0 0 0\n"
+                        "RenderEvent 106 146 0 0 0 0 0\n"
+                        "MouseMoveEvent 105 146 0 0 0 0 0\n"
+                        "RenderEvent 105 146 0 0 0 0 0\n"
+                        "MouseMoveEvent 104 146 0 0 0 0 0\n"
+                        "RenderEvent 104 146 0 0 0 0 0\n"
+                        "MouseMoveEvent 103 146 0 0 0 0 0\n"
+                        "RenderEvent 103 146 0 0 0 0 0\n"
+                        "MouseMoveEvent 101 147 0 0 0 0 0\n"
+                        "RenderEvent 101 147 0 0 0 0 0\n"
+                        "MouseMoveEvent 99 147 0 0 0 0 0\n"
+                        "RenderEvent 99 147 0 0 0 0 0\n"
+                        "MouseMoveEvent 98 147 0 0 0 0 0\n"
+                        "RenderEvent 98 147 0 0 0 0 0\n"
+                        "LeftButtonPressEvent 98 147 0 0 0 0 0\n"
+                        "RenderEvent 98 147 0 0 0 0 0\n"
+                        "MouseMoveEvent 98 145 0 0 0 0 0\n"
+                        "RenderEvent 98 145 0 0 0 0 0\n"
+                        "MouseMoveEvent 98 143 0 0 0 0 0\n"
+                        "RenderEvent 98 143 0 0 0 0 0\n"
+                        "MouseMoveEvent 98 140 0 0 0 0 0\n"
+                        "RenderEvent 98 140 0 0 0 0 0\n"
+                        "MouseMoveEvent 98 138 0 0 0 0 0\n"
+                        "RenderEvent 98 138 0 0 0 0 0\n"
+                        "MouseMoveEvent 98 135 0 0 0 0 0\n"
+                        "RenderEvent 98 135 0 0 0 0 0\n"
+                        "MouseMoveEvent 98 133 0 0 0 0 0\n"
+                        "RenderEvent 98 133 0 0 0 0 0\n"
+                        "MouseMoveEvent 98 131 0 0 0 0 0\n"
+                        "RenderEvent 98 131 0 0 0 0 0\n"
+                        "MouseMoveEvent 98 125 0 0 0 0 0\n"
+                        "RenderEvent 98 125 0 0 0 0 0\n"
+                        "MouseMoveEvent 98 123 0 0 0 0 0\n"
+                        "RenderEvent 98 123 0 0 0 0 0\n"
+                        "MouseMoveEvent 98 122 0 0 0 0 0\n"
+                        "RenderEvent 98 122 0 0 0 0 0\n"
+                        "MouseMoveEvent 97 121 0 0 0 0 0\n"
+                        "RenderEvent 97 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 97 121 0 0 0 0 0\n"
+                        "RenderEvent 97 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 96 121 0 0 0 0 0\n"
+                        "RenderEvent 96 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 95 121 0 0 0 0 0\n"
+                        "RenderEvent 95 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 94 121 0 0 0 0 0\n"
+                        "RenderEvent 94 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 93 121 0 0 0 0 0\n"
+                        "RenderEvent 93 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 92 121 0 0 0 0 0\n"
+                        "RenderEvent 92 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 91 121 0 0 0 0 0\n"
+                        "RenderEvent 91 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 90 121 0 0 0 0 0\n"
+                        "RenderEvent 90 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 89 121 0 0 0 0 0\n"
+                        "RenderEvent 89 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 89 121 0 0 0 0 0\n"
+                        "RenderEvent 89 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 88 121 0 0 0 0 0\n"
+                        "RenderEvent 88 121 0 0 0 0 0\n"
+                        "LeftButtonReleaseEvent 88 121 0 0 0 0 0\n"
+                        "RenderEvent 88 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 89 121 0 0 0 0 0\n"
+                        "RenderEvent 89 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 90 120 0 0 0 0 0\n"
+                        "MouseMoveEvent 92 120 0 0 0 0 0\n"
+                        "MouseMoveEvent 93 119 0 0 0 0 0\n"
+                        "MouseMoveEvent 95 119 0 0 0 0 0\n"
+                        "MouseMoveEvent 97 118 0 0 0 0 0\n"
+                        "MouseMoveEvent 99 118 0 0 0 0 0\n"
+                        "RenderEvent 99 118 0 0 0 0 0\n"
+                        "MouseMoveEvent 100 117 0 0 0 0 0\n"
+                        "RenderEvent 100 117 0 0 0 0 0\n"
+                        "MouseMoveEvent 102 117 0 0 0 0 0\n"
+                        "RenderEvent 102 117 0 0 0 0 0\n"
+                        "MouseMoveEvent 104 116 0 0 0 0 0\n"
+                        "RenderEvent 104 116 0 0 0 0 0\n"
+                        "MouseMoveEvent 105 116 0 0 0 0 0\n"
+                        "RenderEvent 105 116 0 0 0 0 0\n"
+                        "MouseMoveEvent 106 116 0 0 0 0 0\n"
+                        "RenderEvent 106 116 0 0 0 0 0\n"
+                        "MouseMoveEvent 107 116 0 0 0 0 0\n"
+                        "RenderEvent 107 116 0 0 0 0 0\n"
+                        "MouseMoveEvent 109 117 0 0 0 0 0\n"
+                        "RenderEvent 109 117 0 0 0 0 0\n"
+                        "MouseMoveEvent 110 118 0 0 0 0 0\n"
+                        "RenderEvent 110 118 0 0 0 0 0\n"
+                        "MouseMoveEvent 111 119 0 0 0 0 0\n"
+                        "RenderEvent 111 119 0 0 0 0 0\n"
+                        "MouseMoveEvent 111 120 0 0 0 0 0\n"
+                        "RenderEvent 111 120 0 0 0 0 0\n"
+                        "MouseMoveEvent 112 121 0 0 0 0 0\n"
+                        "RenderEvent 112 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 113 122 0 0 0 0 0\n"
+                        "RenderEvent 113 122 0 0 0 0 0\n"
+                        "MouseMoveEvent 114 123 0 0 0 0 0\n"
+                        "RenderEvent 114 123 0 0 0 0 0\n"
+                        "MouseMoveEvent 115 123 0 0 0 0 0\n"
+                        "RenderEvent 115 123 0 0 0 0 0\n"
+                        "MouseMoveEvent 116 124 0 0 0 0 0\n"
+                        "RenderEvent 116 124 0 0 0 0 0\n"
+                        "MouseMoveEvent 117 125 0 0 0 0 0\n"
+                        "RenderEvent 117 125 0 0 0 0 0\n"
+                        "MouseMoveEvent 118 126 0 0 0 0 0\n"
+                        "RenderEvent 118 126 0 0 0 0 0\n"
+                        "MouseMoveEvent 119 126 0 0 0 0 0\n"
+                        "RenderEvent 119 126 0 0 0 0 0\n"
+                        "LeftButtonPressEvent 119 126 0 0 0 0 0\n"
+                        "RenderEvent 119 126 0 0 0 0 0\n"
+                        "LeftButtonReleaseEvent 119 126 0 0 0 0 0\n"
+                        "RenderEvent 119 126 0 0 0 0 0\n"
+                        "MouseMoveEvent 119 125 0 0 0 0 0\n"
+                        "RenderEvent 119 125 0 0 0 0 0\n"
+                        "MouseMoveEvent 119 125 0 0 0 0 0\n"
+                        "MouseMoveEvent 119 124 0 0 0 0 0\n"
+                        "MouseMoveEvent 119 123 0 0 0 0 0\n"
+                        "RenderEvent 119 123 0 0 0 0 0\n"
+                        "MouseMoveEvent 120 123 0 0 0 0 0\n"
+                        "RenderEvent 120 123 0 0 0 0 0\n"
+                        "MouseMoveEvent 120 122 0 0 0 0 0\n"
+                        "RenderEvent 120 122 0 0 0 0 0\n"
+                        "MouseMoveEvent 120 121 0 0 0 0 0\n"
+                        "RenderEvent 120 121 0 0 0 0 0\n"
+                        "LeftButtonPressEvent 120 121 0 0 0 0 0\n"
+                        "RenderEvent 120 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 120 121 0 0 0 0 0\n"
+                        "RenderEvent 120 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 120 124 0 0 0 0 0\n"
+                        "RenderEvent 120 124 0 0 0 0 0\n"
+                        "MouseMoveEvent 120 126 0 0 0 0 0\n"
+                        "RenderEvent 120 126 0 0 0 0 0\n"
+                        "MouseMoveEvent 120 128 0 0 0 0 0\n"
+                        "RenderEvent 120 128 0 0 0 0 0\n"
+                        "MouseMoveEvent 120 130 0 0 0 0 0\n"
+                        "RenderEvent 120 130 0 0 0 0 0\n"
+                        "MouseMoveEvent 120 132 0 0 0 0 0\n"
+                        "RenderEvent 120 132 0 0 0 0 0\n"
+                        "MouseMoveEvent 120 134 0 0 0 0 0\n"
+                        "RenderEvent 120 134 0 0 0 0 0\n"
+                        "MouseMoveEvent 120 135 0 0 0 0 0\n"
+                        "RenderEvent 120 135 0 0 0 0 0\n"
+                        "MouseMoveEvent 119 136 0 0 0 0 0\n"
+                        "RenderEvent 119 136 0 0 0 0 0\n"
+                        "MouseMoveEvent 119 137 0 0 0 0 0\n"
+                        "RenderEvent 119 137 0 0 0 0 0\n"
+                        "MouseMoveEvent 118 137 0 0 0 0 0\n"
+                        "RenderEvent 118 137 0 0 0 0 0\n"
+                        "MouseMoveEvent 118 138 0 0 0 0 0\n"
+                        "RenderEvent 118 138 0 0 0 0 0\n"
+                        "MouseMoveEvent 118 140 0 0 0 0 0\n"
+                        "RenderEvent 118 140 0 0 0 0 0\n"
+                        "MouseMoveEvent 117 141 0 0 0 0 0\n"
+                        "RenderEvent 117 141 0 0 0 0 0\n"
+                        "MouseMoveEvent 117 142 0 0 0 0 0\n"
+                        "RenderEvent 117 142 0 0 0 0 0\n"
+                        "MouseMoveEvent 117 145 0 0 0 0 0\n"
+                        "RenderEvent 117 145 0 0 0 0 0\n"
+                        "MouseMoveEvent 117 148 0 0 0 0 0\n"
+                        "RenderEvent 117 148 0 0 0 0 0\n"
+                        "MouseMoveEvent 116 151 0 0 0 0 0\n"
+                        "RenderEvent 116 151 0 0 0 0 0\n"
+                        "MouseMoveEvent 116 153 0 0 0 0 0\n"
+                        "RenderEvent 116 153 0 0 0 0 0\n"
+                        "MouseMoveEvent 115 154 0 0 0 0 0\n"
+                        "RenderEvent 115 154 0 0 0 0 0\n"
+                        "MouseMoveEvent 115 155 0 0 0 0 0\n"
+                        "RenderEvent 115 155 0 0 0 0 0\n"
+                        "MouseMoveEvent 115 158 0 0 0 0 0\n"
+                        "RenderEvent 115 158 0 0 0 0 0\n"
+                        "MouseMoveEvent 115 159 0 0 0 0 0\n"
+                        "RenderEvent 115 159 0 0 0 0 0\n"
+                        "MouseMoveEvent 115 163 0 0 0 0 0\n"
+                        "RenderEvent 115 163 0 0 0 0 0\n"
+                        "MouseMoveEvent 115 166 0 0 0 0 0\n"
+                        "RenderEvent 115 166 0 0 0 0 0\n"
+                        "MouseMoveEvent 115 168 0 0 0 0 0\n"
+                        "RenderEvent 115 168 0 0 0 0 0\n"
+                        "MouseMoveEvent 115 170 0 0 0 0 0\n"
+                        "RenderEvent 115 170 0 0 0 0 0\n"
+                        "MouseMoveEvent 115 172 0 0 0 0 0\n"
+                        "RenderEvent 115 172 0 0 0 0 0\n"
+                        "MouseMoveEvent 115 173 0 0 0 0 0\n"
+                        "RenderEvent 115 173 0 0 0 0 0\n"
+                        "MouseMoveEvent 115 176 0 0 0 0 0\n"
+                        "RenderEvent 115 176 0 0 0 0 0\n"
+                        "MouseMoveEvent 114 179 0 0 0 0 0\n"
+                        "RenderEvent 114 179 0 0 0 0 0\n"
+                        "MouseMoveEvent 113 184 0 0 0 0 0\n"
+                        "RenderEvent 113 184 0 0 0 0 0\n"
+                        "MouseMoveEvent 112 188 0 0 0 0 0\n"
+                        "RenderEvent 112 188 0 0 0 0 0\n"
+                        "MouseMoveEvent 112 191 0 0 0 0 0\n"
+                        "RenderEvent 112 191 0 0 0 0 0\n"
+                        "MouseMoveEvent 111 193 0 0 0 0 0\n"
+                        "RenderEvent 111 193 0 0 0 0 0\n"
+                        "MouseMoveEvent 111 194 0 0 0 0 0\n"
+                        "RenderEvent 111 194 0 0 0 0 0\n"
+                        "MouseMoveEvent 110 197 0 0 0 0 0\n"
+                        "RenderEvent 110 197 0 0 0 0 0\n"
+                        "MouseMoveEvent 109 201 0 0 0 0 0\n"
+                        "RenderEvent 109 201 0 0 0 0 0\n"
+                        "MouseMoveEvent 107 204 0 0 0 0 0\n"
+                        "RenderEvent 107 204 0 0 0 0 0\n"
+                        "MouseMoveEvent 104 208 0 0 0 0 0\n"
+                        "RenderEvent 104 208 0 0 0 0 0\n"
+                        "MouseMoveEvent 102 212 0 0 0 0 0\n"
+                        "RenderEvent 102 212 0 0 0 0 0\n"
+                        "MouseMoveEvent 99 216 0 0 0 0 0\n"
+                        "RenderEvent 99 216 0 0 0 0 0\n"
+                        "MouseMoveEvent 96 221 0 0 0 0 0\n"
+                        "RenderEvent 96 221 0 0 0 0 0\n"
+                        "MouseMoveEvent 93 225 0 0 0 0 0\n"
+                        "RenderEvent 93 225 0 0 0 0 0\n"
+                        "MouseMoveEvent 90 230 0 0 0 0 0\n"
+                        "RenderEvent 90 230 0 0 0 0 0\n"
+                        "MouseMoveEvent 87 237 0 0 0 0 0\n"
+                        "RenderEvent 87 237 0 0 0 0 0\n"
+                        "MouseMoveEvent 86 239 0 0 0 0 0\n"
+                        "RenderEvent 86 239 0 0 0 0 0\n"
+                        "MouseMoveEvent 84 245 0 0 0 0 0\n"
+                        "RenderEvent 84 245 0 0 0 0 0\n"
+                        "MouseMoveEvent 84 249 0 0 0 0 0\n"
+                        "RenderEvent 84 249 0 0 0 0 0\n"
+                        "MouseMoveEvent 83 254 0 0 0 0 0\n"
+                        "RenderEvent 83 254 0 0 0 0 0\n"
+                        "MouseMoveEvent 82 258 0 0 0 0 0\n"
+                        "RenderEvent 82 258 0 0 0 0 0\n"
+                        "MouseMoveEvent 81 261 0 0 0 0 0\n"
+                        "RenderEvent 81 261 0 0 0 0 0\n"
+                        "MouseMoveEvent 80 265 0 0 0 0 0\n"
+                        "RenderEvent 80 265 0 0 0 0 0\n"
+                        "MouseMoveEvent 79 270 0 0 0 0 0\n"
+                        "RenderEvent 79 270 0 0 0 0 0\n"
+                        "MouseMoveEvent 78 273 0 0 0 0 0\n"
+                        "RenderEvent 78 273 0 0 0 0 0\n"
+                        "MouseMoveEvent 77 276 0 0 0 0 0\n"
+                        "RenderEvent 77 276 0 0 0 0 0\n"
+                        "MouseMoveEvent 77 277 0 0 0 0 0\n"
+                        "RenderEvent 77 277 0 0 0 0 0\n"
+                        "MouseMoveEvent 77 277 0 0 0 0 0\n"
+                        "RenderEvent 77 277 0 0 0 0 0\n"
+                        "MouseMoveEvent 77 279 0 0 0 0 0\n"
+                        "RenderEvent 77 279 0 0 0 0 0\n"
+                        "MouseMoveEvent 76 285 0 0 0 0 0\n"
+                        "RenderEvent 76 285 0 0 0 0 0\n"
+                        "MouseMoveEvent 76 288 0 0 0 0 0\n"
+                        "RenderEvent 76 288 0 0 0 0 0\n"
+                        "MouseMoveEvent 76 290 0 0 0 0 0\n"
+                        "RenderEvent 76 290 0 0 0 0 0\n"
+                        "MouseMoveEvent 76 292 0 0 0 0 0\n"
+                        "RenderEvent 76 292 0 0 0 0 0\n"
+                        "MouseMoveEvent 76 294 0 0 0 0 0\n"
+                        "RenderEvent 76 294 0 0 0 0 0\n"
+                        "MouseMoveEvent 76 301 0 0 0 0 0\n"
+                        "RenderEvent 76 301 0 0 0 0 0\n"
+                        "LeaveEvent 76 301 0 0 0 0 0\n"
+                        "MouseMoveEvent 76 310 0 0 0 0 0\n"
+                        "RenderEvent 76 310 0 0 0 0 0\n"
+                        "MouseMoveEvent 75 318 0 0 0 0 0\n"
+                        "RenderEvent 75 318 0 0 0 0 0\n"
+                        "MouseMoveEvent 74 327 0 0 0 0 0\n"
+                        "RenderEvent 74 327 0 0 0 0 0\n"
+                        "MouseMoveEvent 73 334 0 0 0 0 0\n"
+                        "RenderEvent 73 334 0 0 0 0 0\n"
+                        "MouseMoveEvent 72 341 0 0 0 0 0\n"
+                        "RenderEvent 72 341 0 0 0 0 0\n"
+                        "MouseMoveEvent 71 342 0 0 0 0 0\n"
+                        "RenderEvent 71 342 0 0 0 0 0\n"
+                        "MouseMoveEvent 69 347 0 0 0 0 0\n"
+                        "RenderEvent 69 347 0 0 0 0 0\n"
+                        "MouseMoveEvent 69 349 0 0 0 0 0\n"
+                        "RenderEvent 69 349 0 0 0 0 0\n"
+                        "MouseMoveEvent 68 353 0 0 0 0 0\n"
+                        "RenderEvent 68 353 0 0 0 0 0\n"
+                        "MouseMoveEvent 67 353 0 0 0 0 0\n"
+                        "RenderEvent 67 353 0 0 0 0 0\n"
+                        "MouseMoveEvent 67 353 0 0 0 0 0\n"
+                        "RenderEvent 67 353 0 0 0 0 0\n"
+                        "MouseMoveEvent 65 354 0 0 0 0 0\n"
+                        "RenderEvent 65 354 0 0 0 0 0\n"
+                        "MouseMoveEvent 64 356 0 0 0 0 0\n"
+                        "RenderEvent 64 356 0 0 0 0 0\n"
+                        "MouseMoveEvent 61 359 0 0 0 0 0\n"
+                        "RenderEvent 61 359 0 0 0 0 0\n"
+                        "MouseMoveEvent 59 360 0 0 0 0 0\n"
+                        "RenderEvent 59 360 0 0 0 0 0\n"
+                        "MouseMoveEvent 59 361 0 0 0 0 0\n"
+                        "RenderEvent 59 361 0 0 0 0 0\n"
+                        "MouseMoveEvent 58 361 0 0 0 0 0\n"
+                        "RenderEvent 58 361 0 0 0 0 0\n"
+                        "MouseMoveEvent 59 361 0 0 0 0 0\n"
+                        "RenderEvent 59 361 0 0 0 0 0\n"
+                        "MouseMoveEvent 63 359 0 0 0 0 0\n"
+                        "RenderEvent 63 359 0 0 0 0 0\n"
+                        "MouseMoveEvent 66 358 0 0 0 0 0\n"
+                        "RenderEvent 66 358 0 0 0 0 0\n"
+                        "MouseMoveEvent 70 357 0 0 0 0 0\n"
+                        "RenderEvent 70 357 0 0 0 0 0\n"
+                        "MouseMoveEvent 72 356 0 0 0 0 0\n"
+                        "RenderEvent 72 356 0 0 0 0 0\n"
+                        "MouseMoveEvent 76 356 0 0 0 0 0\n"
+                        "RenderEvent 76 356 0 0 0 0 0\n"
+                        "MouseMoveEvent 79 355 0 0 0 0 0\n"
+                        "RenderEvent 79 355 0 0 0 0 0\n"
+                        "MouseMoveEvent 81 353 0 0 0 0 0\n"
+                        "RenderEvent 81 353 0 0 0 0 0\n"
+                        "MouseMoveEvent 85 351 0 0 0 0 0\n"
+                        "RenderEvent 85 351 0 0 0 0 0\n"
+                        "MouseMoveEvent 90 348 0 0 0 0 0\n"
+                        "RenderEvent 90 348 0 0 0 0 0\n"
+                        "MouseMoveEvent 95 344 0 0 0 0 0\n"
+                        "RenderEvent 95 344 0 0 0 0 0\n"
+                        "MouseMoveEvent 102 342 0 0 0 0 0\n"
+                        "RenderEvent 102 342 0 0 0 0 0\n"
+                        "MouseMoveEvent 104 340 0 0 0 0 0\n"
+                        "RenderEvent 104 340 0 0 0 0 0\n"
+                        "MouseMoveEvent 108 338 0 0 0 0 0\n"
+                        "RenderEvent 108 338 0 0 0 0 0\n"
+                        "MouseMoveEvent 114 332 0 0 0 0 0\n"
+                        "RenderEvent 114 332 0 0 0 0 0\n"
+                        "MouseMoveEvent 118 328 0 0 0 0 0\n"
+                        "RenderEvent 118 328 0 0 0 0 0\n"
+                        "MouseMoveEvent 123 325 0 0 0 0 0\n"
+                        "RenderEvent 123 325 0 0 0 0 0\n"
+                        "MouseMoveEvent 126 322 0 0 0 0 0\n"
+                        "RenderEvent 126 322 0 0 0 0 0\n"
+                        "MouseMoveEvent 129 320 0 0 0 0 0\n"
+                        "RenderEvent 129 320 0 0 0 0 0\n"
+                        "MouseMoveEvent 130 318 0 0 0 0 0\n"
+                        "RenderEvent 130 318 0 0 0 0 0\n"
+                        "MouseMoveEvent 131 318 0 0 0 0 0\n"
+                        "RenderEvent 131 318 0 0 0 0 0\n"
+                        "MouseMoveEvent 131 317 0 0 0 0 0\n"
+                        "RenderEvent 131 317 0 0 0 0 0\n"
+                        "MouseMoveEvent 131 317 0 0 0 0 0\n"
+                        "RenderEvent 131 317 0 0 0 0 0\n"
+                        "MouseMoveEvent 130 317 0 0 0 0 0\n"
+                        "RenderEvent 130 317 0 0 0 0 0\n"
+                        "MouseMoveEvent 129 315 0 0 0 0 0\n"
+                        "RenderEvent 129 315 0 0 0 0 0\n"
+                        "MouseMoveEvent 127 314 0 0 0 0 0\n"
+                        "RenderEvent 127 314 0 0 0 0 0\n"
+                        "MouseMoveEvent 127 313 0 0 0 0 0\n"
+                        "RenderEvent 127 313 0 0 0 0 0\n"
+                        "MouseMoveEvent 127 312 0 0 0 0 0\n"
+                        "RenderEvent 127 312 0 0 0 0 0\n"
+                        "MouseMoveEvent 126 312 0 0 0 0 0\n"
+                        "RenderEvent 126 312 0 0 0 0 0\n"
+                        "MouseMoveEvent 125 311 0 0 0 0 0\n"
+                        "RenderEvent 125 311 0 0 0 0 0\n"
+                        "LeftButtonReleaseEvent 125 311 0 0 0 0 0\n"
+                        "RenderEvent 125 311 0 0 0 0 0\n"
+                        "LeaveEvent 125 311 0 0 0 0 0\n"
+                        "EnterEvent 121 298 0 0 0 0 0\n"
+                        "MouseMoveEvent 121 298 0 0 0 0 0\n"
+                        "RenderEvent 121 298 0 0 0 0 0\n"
+                        "MouseMoveEvent 120 292 0 0 0 0 0\n"
+                        "RenderEvent 120 292 0 0 0 0 0\n"
+                        "MouseMoveEvent 118 286 0 0 0 0 0\n"
+                        "RenderEvent 118 286 0 0 0 0 0\n"
+                        "MouseMoveEvent 116 280 0 0 0 0 0\n"
+                        "RenderEvent 116 280 0 0 0 0 0\n"
+                        "MouseMoveEvent 114 273 0 0 0 0 0\n"
+                        "RenderEvent 114 273 0 0 0 0 0\n"
+                        "MouseMoveEvent 112 265 0 0 0 0 0\n"
+                        "RenderEvent 112 265 0 0 0 0 0\n"
+                        "MouseMoveEvent 112 248 0 0 0 0 0\n"
+                        "RenderEvent 112 248 0 0 0 0 0\n"
+                        "MouseMoveEvent 112 230 0 0 0 0 0\n"
+                        "RenderEvent 112 230 0 0 0 0 0\n"
+                        "MouseMoveEvent 114 215 0 0 0 0 0\n"
+                        "RenderEvent 114 215 0 0 0 0 0\n"
+                        "MouseMoveEvent 115 204 0 0 0 0 0\n"
+                        "RenderEvent 115 204 0 0 0 0 0\n"
+                        "MouseMoveEvent 116 197 0 0 0 0 0\n"
+                        "RenderEvent 116 197 0 0 0 0 0\n"
+                        "MouseMoveEvent 116 191 0 0 0 0 0\n"
+                        "RenderEvent 116 191 0 0 0 0 0\n"
+                        "MouseMoveEvent 116 187 0 0 0 0 0\n"
+                        "RenderEvent 116 187 0 0 0 0 0\n"
+                        "MouseMoveEvent 117 184 0 0 0 0 0\n"
+                        "RenderEvent 117 184 0 0 0 0 0\n"
+                        "MouseMoveEvent 117 181 0 0 0 0 0\n"
+                        "RenderEvent 117 181 0 0 0 0 0\n"
+                        "MouseMoveEvent 118 175 0 0 0 0 0\n"
+                        "RenderEvent 118 175 0 0 0 0 0\n"
+                        "MouseMoveEvent 118 173 0 0 0 0 0\n"
+                        "RenderEvent 118 173 0 0 0 0 0\n"
+                        "MouseMoveEvent 118 172 0 0 0 0 0\n"
+                        "RenderEvent 118 172 0 0 0 0 0\n"
+                        "MouseMoveEvent 117 172 0 0 0 0 0\n"
+                        "RenderEvent 117 172 0 0 0 0 0\n"
+                        "MouseMoveEvent 115 172 0 0 0 0 0\n"
+                        "RenderEvent 115 172 0 0 0 0 0\n"
+                        "MouseMoveEvent 112 174 0 0 0 0 0\n"
+                        "RenderEvent 112 174 0 0 0 0 0\n"
+                        "MouseMoveEvent 109 176 0 0 0 0 0\n"
+                        "RenderEvent 109 176 0 0 0 0 0\n"
+                        "MouseMoveEvent 107 179 0 0 0 0 0\n"
+                        "RenderEvent 107 179 0 0 0 0 0\n"
+                        "MouseMoveEvent 105 182 0 0 0 0 0\n"
+                        "RenderEvent 105 182 0 0 0 0 0\n"
+                        "MouseMoveEvent 105 185 0 0 0 0 0\n"
+                        "RenderEvent 105 185 0 0 0 0 0\n"
+                        "MouseMoveEvent 104 186 0 0 0 0 0\n"
+                        "RenderEvent 104 186 0 0 0 0 0\n"
+                        "LeftButtonPressEvent 104 186 0 0 0 0 0\n"
+                        "RenderEvent 104 186 0 0 0 0 0\n"
+                        "MouseMoveEvent 105 186 0 0 0 0 0\n"
+                        "RenderEvent 105 186 0 0 0 0 0\n"
+                        "MouseMoveEvent 105 186 0 0 0 0 0\n"
+                        "RenderEvent 105 186 0 0 0 0 0\n"
+                        "MouseMoveEvent 106 186 0 0 0 0 0\n"
+                        "RenderEvent 106 186 0 0 0 0 0\n"
+                        "MouseMoveEvent 107 186 0 0 0 0 0\n"
+                        "RenderEvent 107 186 0 0 0 0 0\n"
+                        "MouseMoveEvent 108 186 0 0 0 0 0\n"
+                        "RenderEvent 108 186 0 0 0 0 0\n"
+                        "MouseMoveEvent 109 186 0 0 0 0 0\n"
+                        "RenderEvent 109 186 0 0 0 0 0\n"
+                        "MouseMoveEvent 110 186 0 0 0 0 0\n"
+                        "RenderEvent 110 186 0 0 0 0 0\n"
+                        "MouseMoveEvent 110 185 0 0 0 0 0\n"
+                        "RenderEvent 110 185 0 0 0 0 0\n"
+                        "MouseMoveEvent 111 185 0 0 0 0 0\n"
+                        "RenderEvent 111 185 0 0 0 0 0\n"
+                        "MouseMoveEvent 112 184 0 0 0 0 0\n"
+                        "RenderEvent 112 184 0 0 0 0 0\n"
+                        "MouseMoveEvent 113 183 0 0 0 0 0\n"
+                        "RenderEvent 113 183 0 0 0 0 0\n"
+                        "MouseMoveEvent 114 182 0 0 0 0 0\n"
+                        "RenderEvent 114 182 0 0 0 0 0\n"
+                        "MouseMoveEvent 117 180 0 0 0 0 0\n"
+                        "RenderEvent 117 180 0 0 0 0 0\n"
+                        "MouseMoveEvent 120 178 0 0 0 0 0\n"
+                        "RenderEvent 120 178 0 0 0 0 0\n"
+                        "MouseMoveEvent 122 175 0 0 0 0 0\n"
+                        "RenderEvent 122 175 0 0 0 0 0\n"
+                        "MouseMoveEvent 123 174 0 0 0 0 0\n"
+                        "RenderEvent 123 174 0 0 0 0 0\n"
+                        "MouseMoveEvent 124 173 0 0 0 0 0\n"
+                        "RenderEvent 124 173 0 0 0 0 0\n"
+                        "MouseMoveEvent 126 171 0 0 0 0 0\n"
+                        "RenderEvent 126 171 0 0 0 0 0\n"
+                        "MouseMoveEvent 127 170 0 0 0 0 0\n"
+                        "RenderEvent 127 170 0 0 0 0 0\n"
+                        "MouseMoveEvent 128 168 0 0 0 0 0\n"
+                        "RenderEvent 128 168 0 0 0 0 0\n"
+                        "MouseMoveEvent 130 166 0 0 0 0 0\n"
+                        "RenderEvent 130 166 0 0 0 0 0\n"
+                        "MouseMoveEvent 131 164 0 0 0 0 0\n"
+                        "RenderEvent 131 164 0 0 0 0 0\n"
+                        "MouseMoveEvent 133 163 0 0 0 0 0\n"
+                        "RenderEvent 133 163 0 0 0 0 0\n"
+                        "MouseMoveEvent 134 160 0 0 0 0 0\n"
+                        "RenderEvent 134 160 0 0 0 0 0\n"
+                        "MouseMoveEvent 135 156 0 0 0 0 0\n"
+                        "RenderEvent 135 156 0 0 0 0 0\n"
+                        "MouseMoveEvent 136 153 0 0 0 0 0\n"
+                        "RenderEvent 136 153 0 0 0 0 0\n"
+                        "MouseMoveEvent 136 149 0 0 0 0 0\n"
+                        "RenderEvent 136 149 0 0 0 0 0\n"
+                        "MouseMoveEvent 138 144 0 0 0 0 0\n"
+                        "RenderEvent 138 144 0 0 0 0 0\n"
+                        "MouseMoveEvent 140 140 0 0 0 0 0\n"
+                        "RenderEvent 140 140 0 0 0 0 0\n"
+                        "MouseMoveEvent 141 138 0 0 0 0 0\n"
+                        "RenderEvent 141 138 0 0 0 0 0\n"
+                        "MouseMoveEvent 142 135 0 0 0 0 0\n"
+                        "RenderEvent 142 135 0 0 0 0 0\n"
+                        "MouseMoveEvent 142 133 0 0 0 0 0\n"
+                        "RenderEvent 142 133 0 0 0 0 0\n"
+                        "MouseMoveEvent 143 131 0 0 0 0 0\n"
+                        "RenderEvent 143 131 0 0 0 0 0\n"
+                        "MouseMoveEvent 143 129 0 0 0 0 0\n"
+                        "RenderEvent 143 129 0 0 0 0 0\n"
+                        "MouseMoveEvent 143 126 0 0 0 0 0\n"
+                        "RenderEvent 143 126 0 0 0 0 0\n"
+                        "MouseMoveEvent 143 123 0 0 0 0 0\n"
+                        "RenderEvent 143 123 0 0 0 0 0\n"
+                        "MouseMoveEvent 144 121 0 0 0 0 0\n"
+                        "RenderEvent 144 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 145 119 0 0 0 0 0\n"
+                        "RenderEvent 145 119 0 0 0 0 0\n"
+                        "MouseMoveEvent 145 116 0 0 0 0 0\n"
+                        "RenderEvent 145 116 0 0 0 0 0\n"
+                        "MouseMoveEvent 146 113 0 0 0 0 0\n"
+                        "RenderEvent 146 113 0 0 0 0 0\n"
+                        "MouseMoveEvent 146 110 0 0 0 0 0\n"
+                        "RenderEvent 146 110 0 0 0 0 0\n"
+                        "MouseMoveEvent 147 107 0 0 0 0 0\n"
+                        "RenderEvent 147 107 0 0 0 0 0\n"
+                        "MouseMoveEvent 148 105 0 0 0 0 0\n"
+                        "RenderEvent 148 105 0 0 0 0 0\n"
+                        "MouseMoveEvent 149 103 0 0 0 0 0\n"
+                        "RenderEvent 149 103 0 0 0 0 0\n"
+                        "MouseMoveEvent 149 101 0 0 0 0 0\n"
+                        "RenderEvent 149 101 0 0 0 0 0\n"
+                        "MouseMoveEvent 150 99 0 0 0 0 0\n"
+                        "RenderEvent 150 99 0 0 0 0 0\n"
+                        "MouseMoveEvent 150 98 0 0 0 0 0\n"
+                        "RenderEvent 150 98 0 0 0 0 0\n"
+                        "MouseMoveEvent 150 98 0 0 0 0 0\n"
+                        "RenderEvent 150 98 0 0 0 0 0\n"
+                        "MouseMoveEvent 150 97 0 0 0 0 0\n"
+                        "RenderEvent 150 97 0 0 0 0 0\n"
+                        "MouseMoveEvent 150 95 0 0 0 0 0\n"
+                        "RenderEvent 150 95 0 0 0 0 0\n"
+                        "MouseMoveEvent 150 94 0 0 0 0 0\n"
+                        "RenderEvent 150 94 0 0 0 0 0\n"
+                        "MouseMoveEvent 150 93 0 0 0 0 0\n"
+                        "RenderEvent 150 93 0 0 0 0 0\n"
+                        "MouseMoveEvent 150 92 0 0 0 0 0\n"
+                        "RenderEvent 150 92 0 0 0 0 0\n"
+                        "MouseMoveEvent 150 91 0 0 0 0 0\n"
+                        "RenderEvent 150 91 0 0 0 0 0\n"
+                        "MouseMoveEvent 150 90 0 0 0 0 0\n"
+                        "RenderEvent 150 90 0 0 0 0 0\n"
+                        "MouseMoveEvent 151 88 0 0 0 0 0\n"
+                        "RenderEvent 151 88 0 0 0 0 0\n"
+                        "MouseMoveEvent 151 87 0 0 0 0 0\n"
+                        "RenderEvent 151 87 0 0 0 0 0\n"
+                        "MouseMoveEvent 151 85 0 0 0 0 0\n"
+                        "RenderEvent 151 85 0 0 0 0 0\n"
+                        "MouseMoveEvent 151 84 0 0 0 0 0\n"
+                        "RenderEvent 151 84 0 0 0 0 0\n"
+                        "MouseMoveEvent 151 82 0 0 0 0 0\n"
+                        "RenderEvent 151 82 0 0 0 0 0\n"
+                        "MouseMoveEvent 151 81 0 0 0 0 0\n"
+                        "RenderEvent 151 81 0 0 0 0 0\n"
+                        "MouseMoveEvent 151 79 0 0 0 0 0\n"
+                        "RenderEvent 151 79 0 0 0 0 0\n"
+                        "MouseMoveEvent 151 78 0 0 0 0 0\n"
+                        "RenderEvent 151 78 0 0 0 0 0\n"
+                        "MouseMoveEvent 151 75 0 0 0 0 0\n"
+                        "RenderEvent 151 75 0 0 0 0 0\n"
+                        "MouseMoveEvent 152 71 0 0 0 0 0\n"
+                        "RenderEvent 152 71 0 0 0 0 0\n"
+                        "MouseMoveEvent 152 68 0 0 0 0 0\n"
+                        "RenderEvent 152 68 0 0 0 0 0\n"
+                        "MouseMoveEvent 152 65 0 0 0 0 0\n"
+                        "RenderEvent 152 65 0 0 0 0 0\n"
+                        "MouseMoveEvent 152 63 0 0 0 0 0\n"
+                        "RenderEvent 152 63 0 0 0 0 0\n"
+                        "MouseMoveEvent 152 61 0 0 0 0 0\n"
+                        "RenderEvent 152 61 0 0 0 0 0\n"
+                        "MouseMoveEvent 153 59 0 0 0 0 0\n"
+                        "RenderEvent 153 59 0 0 0 0 0\n"
+                        "MouseMoveEvent 153 57 0 0 0 0 0\n"
+                        "RenderEvent 153 57 0 0 0 0 0\n"
+                        "MouseMoveEvent 153 55 0 0 0 0 0\n"
+                        "RenderEvent 153 55 0 0 0 0 0\n"
+                        "MouseMoveEvent 154 53 0 0 0 0 0\n"
+                        "RenderEvent 154 53 0 0 0 0 0\n"
+                        "MouseMoveEvent 154 52 0 0 0 0 0\n"
+                        "RenderEvent 154 52 0 0 0 0 0\n"
+                        "MouseMoveEvent 154 50 0 0 0 0 0\n"
+                        "RenderEvent 154 50 0 0 0 0 0\n"
+                        "MouseMoveEvent 154 48 0 0 0 0 0\n"
+                        "RenderEvent 154 48 0 0 0 0 0\n"
+                        "MouseMoveEvent 154 47 0 0 0 0 0\n"
+                        "RenderEvent 154 47 0 0 0 0 0\n"
+                        "MouseMoveEvent 154 46 0 0 0 0 0\n"
+                        "RenderEvent 154 46 0 0 0 0 0\n"
+                        "MouseMoveEvent 155 45 0 0 0 0 0\n"
+                        "RenderEvent 155 45 0 0 0 0 0\n"
+                        "MouseMoveEvent 155 45 0 0 0 0 0\n"
+                        "RenderEvent 155 45 0 0 0 0 0\n"
+                        "LeftButtonReleaseEvent 155 45 0 0 0 0 0\n"
+                        "RenderEvent 155 45 0 0 0 0 0\n"
+                        "MouseMoveEvent 155 46 0 0 0 0 0\n"
+                        "RenderEvent 155 46 0 0 0 0 0\n"
+                        "MouseMoveEvent 156 49 0 0 0 0 0\n"
+                        "RenderEvent 156 49 0 0 0 0 0\n"
+                        "MouseMoveEvent 157 51 0 0 0 0 0\n"
+                        "RenderEvent 157 51 0 0 0 0 0\n"
+                        "MouseMoveEvent 159 53 0 0 0 0 0\n"
+                        "RenderEvent 159 53 0 0 0 0 0\n"
+                        "MouseMoveEvent 160 56 0 0 0 0 0\n"
+                        "RenderEvent 160 56 0 0 0 0 0\n"
+                        "MouseMoveEvent 162 58 0 0 0 0 0\n"
+                        "RenderEvent 162 58 0 0 0 0 0\n"
+                        "MouseMoveEvent 166 64 0 0 0 0 0\n"
+                        "RenderEvent 166 64 0 0 0 0 0\n"
+                        "MouseMoveEvent 173 73 0 0 0 0 0\n"
+                        "RenderEvent 173 73 0 0 0 0 0\n"
+                        "MouseMoveEvent 182 83 0 0 0 0 0\n"
+                        "RenderEvent 182 83 0 0 0 0 0\n"
+                        "MouseMoveEvent 187 88 0 0 0 0 0\n"
+                        "RenderEvent 187 88 0 0 0 0 0\n"
+                        "MouseMoveEvent 194 95 0 0 0 0 0\n"
+                        "RenderEvent 194 95 0 0 0 0 0\n"
+                        "MouseMoveEvent 198 99 0 0 0 0 0\n"
+                        "RenderEvent 198 99 0 0 0 0 0\n"
+                        "MouseMoveEvent 202 102 0 0 0 0 0\n"
+                        "RenderEvent 202 102 0 0 0 0 0\n"
+                        "MouseMoveEvent 207 106 0 0 0 0 0\n"
+                        "RenderEvent 207 106 0 0 0 0 0\n"
+                        "MouseMoveEvent 211 109 0 0 0 0 0\n"
+                        "RenderEvent 211 109 0 0 0 0 0\n"
+                        "MouseMoveEvent 215 113 0 0 0 0 0\n"
+                        "RenderEvent 215 113 0 0 0 0 0\n"
+                        "MouseMoveEvent 219 116 0 0 0 0 0\n"
+                        "RenderEvent 219 116 0 0 0 0 0\n"
+                        "MouseMoveEvent 221 120 0 0 0 0 0\n"
+                        "RenderEvent 221 120 0 0 0 0 0\n"
+                        "MouseMoveEvent 222 124 0 0 0 0 0\n"
+                        "RenderEvent 222 124 0 0 0 0 0\n"
+                        "MouseMoveEvent 223 127 0 0 0 0 0\n"
+                        "RenderEvent 223 127 0 0 0 0 0\n"
+                        "MouseMoveEvent 223 128 0 0 0 0 0\n"
+                        "RenderEvent 223 128 0 0 0 0 0\n"
+                        "MouseMoveEvent 224 130 0 0 0 0 0\n"
+                        "RenderEvent 224 130 0 0 0 0 0\n"
+                        "MouseMoveEvent 225 131 0 0 0 0 0\n"
+                        "RenderEvent 225 131 0 0 0 0 0\n"
+                        "MouseMoveEvent 225 132 0 0 0 0 0\n"
+                        "RenderEvent 225 132 0 0 0 0 0\n"
+                        "MouseMoveEvent 225 133 0 0 0 0 0\n"
+                        "RenderEvent 225 133 0 0 0 0 0\n"
+                        "MouseMoveEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "LeftButtonPressEvent 226 133 0 0 0 0 0\n"
+                        "StartInteractionEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "TimerEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "LeftButtonReleaseEvent 226 133 0 0 0 0 0\n"
+                        "EndInteractionEvent 226 133 0 0 0 0 0\n"
+                        "RenderEvent 226 133 0 0 0 0 0\n"
+                        "MouseMoveEvent 225 131 0 0 0 0 0\n"
+                        "MouseMoveEvent 224 127 0 0 0 0 0\n"
+                        "MouseMoveEvent 223 124 0 0 0 0 0\n"
+                        "MouseMoveEvent 222 121 0 0 0 0 0\n"
+                        "MouseMoveEvent 220 117 0 0 0 0 0\n"
+                        "MouseMoveEvent 218 114 0 0 0 0 0\n"
+                        "MouseMoveEvent 218 111 0 0 0 0 0\n"
+                        "MouseMoveEvent 218 109 0 0 0 0 0\n"
+                        "MouseMoveEvent 217 106 0 0 0 0 0\n"
+                        "MouseMoveEvent 217 104 0 0 0 0 0\n"
+                        "MouseMoveEvent 216 101 0 0 0 0 0\n"
+                        "MouseMoveEvent 215 99 0 0 0 0 0\n"
+                        "MouseMoveEvent 213 97 0 0 0 0 0\n"
+                        "MouseMoveEvent 212 95 0 0 0 0 0\n"
+                        "MouseMoveEvent 211 93 0 0 0 0 0\n"
+                        "MouseMoveEvent 209 91 0 0 0 0 0\n"
+                        "MouseMoveEvent 208 90 0 0 0 0 0\n"
+                        "MouseMoveEvent 207 88 0 0 0 0 0\n"
+                        "MouseMoveEvent 207 87 0 0 0 0 0\n"
+                        "MouseMoveEvent 206 86 0 0 0 0 0\n"
+                        "MouseMoveEvent 205 84 0 0 0 0 0\n"
+                        "MouseMoveEvent 204 83 0 0 0 0 0\n"
+                        "MouseMoveEvent 203 82 0 0 0 0 0\n"
+                        "MouseMoveEvent 203 80 0 0 0 0 0\n"
+                        "MouseMoveEvent 202 79 0 0 0 0 0\n"
+                        "MouseMoveEvent 202 77 0 0 0 0 0\n"
+                        "MouseMoveEvent 202 76 0 0 0 0 0\n"
+                        "MouseMoveEvent 201 74 0 0 0 0 0\n"
+                        "MouseMoveEvent 201 72 0 0 0 0 0\n"
+                        "MouseMoveEvent 200 71 0 0 0 0 0\n"
+                        "MouseMoveEvent 200 70 0 0 0 0 0\n"
+                        "MouseMoveEvent 199 69 0 0 0 0 0\n"
+                        "MouseMoveEvent 199 67 0 0 0 0 0\n"
+                        "RenderEvent 199 67 0 0 0 0 0\n"
+                        "MouseMoveEvent 199 66 0 0 0 0 0\n"
+                        "RenderEvent 199 66 0 0 0 0 0\n"
+                        "MouseMoveEvent 198 65 0 0 0 0 0\n"
+                        "RenderEvent 198 65 0 0 0 0 0\n"
+                        "MouseMoveEvent 198 64 0 0 0 0 0\n"
+                        "RenderEvent 198 64 0 0 0 0 0\n"
+                        "MouseMoveEvent 198 63 0 0 0 0 0\n"
+                        "RenderEvent 198 63 0 0 0 0 0\n"
+                        "MouseMoveEvent 198 62 0 0 0 0 0\n"
+                        "RenderEvent 198 62 0 0 0 0 0\n"
+                        "MouseMoveEvent 197 58 0 0 0 0 0\n"
+                        "RenderEvent 197 58 0 0 0 0 0\n"
+                        "MouseMoveEvent 197 54 0 0 0 0 0\n"
+                        "MouseMoveEvent 196 53 0 0 0 0 0\n"
+                        "MouseMoveEvent 196 51 0 0 0 0 0\n"
+                        "RenderEvent 196 51 0 0 0 0 0\n"
+                        "MouseMoveEvent 196 49 0 0 0 0 0\n"
+                        "RenderEvent 196 49 0 0 0 0 0\n"
+                        "MouseMoveEvent 196 47 0 0 0 0 0\n"
+                        "RenderEvent 196 47 0 0 0 0 0\n";
+
+// This does the actual work: updates the vtkCone implicit function.
+// This in turn causes the pipeline to update and clip the object.
+// Callback for the interaction
+class vtkTICWCallback : public vtkCommand
+{
+public:
+  static vtkTICWCallback* New() { return new vtkTICWCallback; }
+
+  void Execute(vtkObject* caller, unsigned long, void*) override
+  {
+    vtkImplicitConeWidget* coneWidget = reinterpret_cast<vtkImplicitConeWidget*>(caller);
+    vtkImplicitConeRepresentation* rep =
+      reinterpret_cast<vtkImplicitConeRepresentation*>(coneWidget->GetRepresentation());
+    rep->GetCone(this->Cone);
+    this->Actor->VisibilityOn();
+  }
+
+  vtkCone* Cone = nullptr;
+  vtkActor* Actor = nullptr;
+};
+
+} // anonymous namespace
+
+int TestImplicitConeWidget(int vtkNotUsed(argc), char* vtkNotUsed(argv)[])
+{
+  // Create a mace out of filters.
+  vtkNew<vtkSphereSource> sphere;
+  vtkNew<vtkConeSource> coneSource;
+  vtkNew<vtkGlyph3D> glyph;
+  glyph->SetInputConnection(sphere->GetOutputPort());
+  glyph->SetSourceConnection(coneSource->GetOutputPort());
+  glyph->SetVectorModeToUseNormal();
+  glyph->SetScaleModeToScaleByVector();
+  glyph->SetScaleFactor(0.25);
+  glyph->Update();
+
+  // The sphere and spikes are appended into a single polydata.
+  // This just makes things simpler to manage.
+  vtkNew<vtkAppendPolyData> apd;
+  apd->AddInputConnection(glyph->GetOutputPort());
+  apd->AddInputConnection(sphere->GetOutputPort());
+
+  vtkNew<vtkPolyDataMapper> maceMapper;
+  maceMapper->SetInputConnection(apd->GetOutputPort());
+
+  vtkNew<vtkLODActor> maceActor;
+  maceActor->SetMapper(maceMapper);
+  maceActor->VisibilityOn();
+
+  // This portion of the code clips the mace with the vtkCones
+  // implicit function. The clipped region is colored green.
+  vtkNew<vtkCone> cone;
+  cone->SetIsDoubleCone(false);
+
+  vtkNew<vtkClipPolyData> clipper;
+  clipper->SetInputConnection(apd->GetOutputPort());
+  clipper->SetClipFunction(cone);
+  clipper->InsideOutOn();
+
+  vtkNew<vtkPolyDataMapper> selectMapper;
+  selectMapper->SetInputConnection(clipper->GetOutputPort());
+
+  vtkNew<vtkLODActor> selectActor;
+  selectActor->SetMapper(selectMapper);
+  selectActor->GetProperty()->SetColor(0, 1, 0);
+  selectActor->VisibilityOff();
+  selectActor->SetScale(1.01, 1.01, 1.01);
+
+  // Create the RenderWindow, Renderer and both Actors
+  vtkNew<vtkRenderer> renderer;
+  renderer->AddActor(maceActor);
+  renderer->AddActor(selectActor);
+  renderer->SetBackground(0.1, 0.2, 0.4);
+
+  vtkNew<vtkRenderWindow> renWin;
+  renWin->SetMultiSamples(0);
+  renWin->SetSize(300, 300);
+  renWin->AddRenderer(renderer);
+
+  vtkNew<vtkRenderWindowInteractor> interactor;
+  renWin->SetInteractor(interactor);
+
+  // The SetInteractor method is how 3D widgets are associated with the render
+  // window interactor. Internally, SetInteractor sets up a bunch of callbacks
+  // using the Command/Observer mechanism (AddObserver()).
+  vtkNew<vtkTICWCallback> myCallback;
+  myCallback->Cone = cone;
+  myCallback->Actor = selectActor;
+
+  vtkNew<vtkImplicitConeRepresentation> rep;
+  rep->SetPlaceFactor(1.25);
+  rep->PlaceWidget(glyph->GetOutput()->GetBounds());
+
+  vtkNew<vtkImplicitConeWidget> coneWidget;
+  coneWidget->SetInteractor(interactor);
+  coneWidget->SetRepresentation(rep);
+  coneWidget->AddObserver(vtkCommand::InteractionEvent, myCallback);
+  coneWidget->SetEnabled(true);
+
+  vtkNew<vtkInteractorEventRecorder> recorder;
+  recorder->SetInteractor(interactor);
+
+#if 0 // uncomment if recording
+  recorder->SetFileName("./record.log");
+  recorder->Record();
+
+  interactor->Initialize();
+  renWin->Render();
+  recorder->On();
+
+  interactor->Start();
+  recorder->Stop();
+
+#else
+  recorder->ReadFromInputStringOn();
+  recorder->SetInputString(eventLog);
+
+  // render the image
+  interactor->Initialize();
+  renWin->Render();
+  recorder->Play();
+
+  // Remove the observers so we can go interactive. Without this the "-I"
+  // testing option fails.
+  recorder->Off();
+
+  interactor->Start();
+#endif
+
+  return EXIT_SUCCESS;
+}
-- 
GitLab