Skia Compute core files

Bug: skia:
Change-Id: I4bba49cf20eff013e581800a3f114c85acd8498c
Reviewed-on: https://skia-review.googlesource.com/135782
Reviewed-by: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
diff --git a/src/compute/color/color.c b/src/compute/color/color.c
new file mode 100644
index 0000000..3e4b1c8
--- /dev/null
+++ b/src/compute/color/color.c
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <math.h>
+#include "color.h"
+
+//
+// COLOR UTILITIES
+//
+
+//
+// CONVERT FROM 0xAARRGGBB WORD ORDER INTO f32[4]
+//
+
+void
+color_rgb32_to_rgba_f32(float rgba[4], const uint32_t rgb, const float opacity)
+{
+  rgba[2] = (float)(rgb        & 0xFF) / 255.0f; // b
+  rgba[1] = (float)(rgb  >> 8  & 0xFF) / 255.0f; // g
+  rgba[0] = (float)(rgb  >> 16 & 0xFF) / 255.0f; // r
+  rgba[3] = opacity;
+}
+
+void
+color_argb32_to_rgba_f32(float rgba[4], const uint32_t argb)
+{
+  rgba[2] = (float)(argb       & 0xFF) / 255.0f; // b
+  rgba[1] = (float)(argb >> 8  & 0xFF) / 255.0f; // g
+  rgba[0] = (float)(argb >> 16 & 0xFF) / 255.0f; // r
+  rgba[3] = (float)(argb >> 24 & 0xFF) / 255.0f; // a
+}
+
+//
+// { r, g, b, a } ==> { r*a, g*a, b*a, a }
+//
+
+void
+color_premultiply_rgba_f32(float rgba[4])
+{
+  if (rgba[3] < 1.0f)
+    {
+      for (uint32_t ii=0; ii<3; ii++)
+        rgba[ii] = rgba[ii] * rgba[3];
+    }
+}
+
+//
+// EXT_framebuffer_sRGB:
+// https://www.opengl.org/registry/specs/EXT/framebuffer_sRGB.txt
+//
+//        {  cs / 12.92,                 cs <= 0.04045
+//   cl = {
+//        {  ((cs + 0.055)/1.055)^2.4,   cs >  0.04045
+//
+//
+//        {  0.0,                          0         <= cl
+//        {  12.92 * cl,                   0         <  cl <  0.0031308
+//   cs = {  1.055 * cl^0.41666 - 0.055,   0.0031308 <= cl <  1
+//        {  1.0,                                       cl >= 1
+//
+
+void
+color_srgb_to_linear_rgb_f32(float rgb[3])
+{
+  for (uint32_t ii=0; ii<3; ii++)
+    {
+      if (rgb[ii] <= 0.04045f)
+        {
+          rgb[ii] = rgb[ii] / 12.92f;
+        }
+      else
+        {
+          rgb[ii] = powf((rgb[ii] + 0.055f) / 1.055f, 2.4f);
+        }
+    }
+}
+
+void
+color_linear_to_srgb_rgb_f32(float rgb[3])
+{
+  for (uint32_t ii=0; ii<3; ii++)
+    {
+      if (rgb[ii] < 0.0031308f)
+        {
+          rgb[ii] = rgb[ii] * 12.92f;
+        }
+      else
+        {
+          rgb[ii] = powf(rgb[ii], 0.41666f) * 1.044f - 0.055f;
+        }
+    }
+}
+
+//
+//
+//
+
+static 
+float 
+lerpf(float const a, float const b, float const t)
+{
+  return fmaf(t, b, fmaf(-t, a, a));
+}
+
+//
+//
+//
+
+void 
+color_linear_lerp_rgba_f32(float       rgba_m[4], 
+                           float const rgba_a[4],
+                           float const rgba_b[4],
+                           float const t)
+{
+  for (int32_t ii=0; ii<4; ii++)
+    rgba_m[ii] = lerpf(rgba_a[ii],rgba_b[ii],t);
+}
+
+//
+//
+//
diff --git a/src/compute/color/color.h b/src/compute/color/color.h
new file mode 100644
index 0000000..36f1293
--- /dev/null
+++ b/src/compute/color/color.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+// COLOR UTILITIES
+//
+
+#pragma once
+
+//
+//
+//
+
+#include <stdint.h>
+
+//
+// CONVERT FROM 0xAARRGGBB WORD ORDER INTO f32[4]
+//
+
+void color_rgb32_to_rgba_f32(float rgba[4], const uint32_t rgb, const float opacity);
+
+void color_argb32_to_rgba_f32(float rgba[4], const uint32_t argb);
+
+//
+// PREMULTIPLY
+//
+// { r, g, b, a } ==> { r*a, g*a, b*a, a }
+//
+
+void color_premultiply_rgba_f32(float rgba[4]);
+
+//
+// SRGB<>LINEAR
+//
+// EXT_framebuffer_sRGB:
+// https://www.opengl.org/registry/specs/EXT/framebuffer_sRGB.txt
+//
+//        {  cs / 12.92,                 cs <= 0.04045
+//   cl = {
+//        {  ((cs + 0.055)/1.055)^2.4,   cs >  0.04045
+//
+//
+//        {  0.0,                          0         <= cl
+//        {  12.92 * cl,                   0         <  cl <  0.0031308
+//   cs = {  1.055 * cl^0.41666 - 0.055,   0.0031308 <= cl <  1
+//        {  1.0,                                       cl >= 1
+//
+
+void color_srgb_to_linear_rgb_f32(float rgb[3]);
+
+void color_linear_to_srgb_rgb_f32(float rgb[3]);
+
+//
+//
+//
+
+void color_linear_lerp_rgba_f32(float       rgba_m[4], 
+                                float const rgba_a[4],
+                                float const rgba_b[4],
+                                float const t);
+
+//
+//
+//
diff --git a/src/compute/common/cl/assert_cl.c b/src/compute/common/cl/assert_cl.c
new file mode 100644
index 0000000..91e5620
--- /dev/null
+++ b/src/compute/common/cl/assert_cl.c
@@ -0,0 +1,222 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <stdlib.h>
+#include <stdio.h>
+
+//
+//
+//
+
+#include "assert_cl.h"
+
+//
+//
+//
+
+#define CL_VAL_TO_STRING(err) case err: return #err
+
+//
+//
+//
+
+#define CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR  -1000
+
+//
+//
+//
+
+char const *
+cl_get_error_string(cl_int const err)
+{
+  switch (err)
+    {
+      CL_VAL_TO_STRING(CL_SUCCESS);
+      CL_VAL_TO_STRING(CL_DEVICE_NOT_FOUND);
+      CL_VAL_TO_STRING(CL_DEVICE_NOT_AVAILABLE);
+      CL_VAL_TO_STRING(CL_COMPILER_NOT_AVAILABLE);
+      CL_VAL_TO_STRING(CL_MEM_OBJECT_ALLOCATION_FAILURE);
+      CL_VAL_TO_STRING(CL_OUT_OF_RESOURCES);
+      CL_VAL_TO_STRING(CL_OUT_OF_HOST_MEMORY);
+      CL_VAL_TO_STRING(CL_PROFILING_INFO_NOT_AVAILABLE);
+      CL_VAL_TO_STRING(CL_MEM_COPY_OVERLAP);
+      CL_VAL_TO_STRING(CL_IMAGE_FORMAT_MISMATCH);
+      CL_VAL_TO_STRING(CL_IMAGE_FORMAT_NOT_SUPPORTED);
+      CL_VAL_TO_STRING(CL_BUILD_PROGRAM_FAILURE);
+      CL_VAL_TO_STRING(CL_MAP_FAILURE);
+      CL_VAL_TO_STRING(CL_MISALIGNED_SUB_BUFFER_OFFSET);
+      CL_VAL_TO_STRING(CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST);
+      CL_VAL_TO_STRING(CL_COMPILE_PROGRAM_FAILURE);
+      CL_VAL_TO_STRING(CL_LINKER_NOT_AVAILABLE);
+      CL_VAL_TO_STRING(CL_LINK_PROGRAM_FAILURE);
+      CL_VAL_TO_STRING(CL_DEVICE_PARTITION_FAILED);
+      CL_VAL_TO_STRING(CL_KERNEL_ARG_INFO_NOT_AVAILABLE);
+      CL_VAL_TO_STRING(CL_INVALID_VALUE);
+      CL_VAL_TO_STRING(CL_INVALID_DEVICE_TYPE);
+      CL_VAL_TO_STRING(CL_INVALID_PLATFORM);
+      CL_VAL_TO_STRING(CL_INVALID_DEVICE);
+      CL_VAL_TO_STRING(CL_INVALID_CONTEXT);
+      CL_VAL_TO_STRING(CL_INVALID_QUEUE_PROPERTIES);
+      CL_VAL_TO_STRING(CL_INVALID_COMMAND_QUEUE);
+      CL_VAL_TO_STRING(CL_INVALID_HOST_PTR);
+      CL_VAL_TO_STRING(CL_INVALID_MEM_OBJECT);
+      CL_VAL_TO_STRING(CL_INVALID_IMAGE_FORMAT_DESCRIPTOR);
+      CL_VAL_TO_STRING(CL_INVALID_IMAGE_SIZE);
+      CL_VAL_TO_STRING(CL_INVALID_SAMPLER);
+      CL_VAL_TO_STRING(CL_INVALID_BINARY);
+      CL_VAL_TO_STRING(CL_INVALID_BUILD_OPTIONS);
+      CL_VAL_TO_STRING(CL_INVALID_PROGRAM);
+      CL_VAL_TO_STRING(CL_INVALID_PROGRAM_EXECUTABLE);
+      CL_VAL_TO_STRING(CL_INVALID_KERNEL_NAME);
+      CL_VAL_TO_STRING(CL_INVALID_KERNEL_DEFINITION);
+      CL_VAL_TO_STRING(CL_INVALID_KERNEL);
+      CL_VAL_TO_STRING(CL_INVALID_ARG_INDEX);
+      CL_VAL_TO_STRING(CL_INVALID_ARG_VALUE);
+      CL_VAL_TO_STRING(CL_INVALID_ARG_SIZE);
+      CL_VAL_TO_STRING(CL_INVALID_KERNEL_ARGS);
+      CL_VAL_TO_STRING(CL_INVALID_WORK_DIMENSION);
+      CL_VAL_TO_STRING(CL_INVALID_WORK_GROUP_SIZE);
+      CL_VAL_TO_STRING(CL_INVALID_WORK_ITEM_SIZE);
+      CL_VAL_TO_STRING(CL_INVALID_GLOBAL_OFFSET);
+      CL_VAL_TO_STRING(CL_INVALID_EVENT_WAIT_LIST);
+      CL_VAL_TO_STRING(CL_INVALID_EVENT);
+      CL_VAL_TO_STRING(CL_INVALID_OPERATION);
+      CL_VAL_TO_STRING(CL_INVALID_GL_OBJECT);
+      CL_VAL_TO_STRING(CL_INVALID_BUFFER_SIZE);
+      CL_VAL_TO_STRING(CL_INVALID_MIP_LEVEL);
+      CL_VAL_TO_STRING(CL_INVALID_GLOBAL_WORK_SIZE);
+      CL_VAL_TO_STRING(CL_INVALID_PROPERTY);
+      CL_VAL_TO_STRING(CL_INVALID_IMAGE_DESCRIPTOR);
+      CL_VAL_TO_STRING(CL_INVALID_COMPILER_OPTIONS);
+      CL_VAL_TO_STRING(CL_INVALID_LINKER_OPTIONS);
+      CL_VAL_TO_STRING(CL_INVALID_DEVICE_PARTITION_COUNT);
+      // CL_VAL_TO_STRING(CL_INVALID_PIPE_SIZE);
+      // CL_VAL_TO_STRING(CL_INVALID_DEVICE_QUEUE);
+
+      //
+      // Extensions:
+      //
+      //   cl_khr_gl_sharing
+      //
+      CL_VAL_TO_STRING(CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR);
+
+      //
+      //
+      //
+    default:
+      return "UNKNOWN ERROR CODE";
+    }
+}
+
+//
+//
+//
+
+cl_int
+assert_cl(cl_int const code, char const * const file, int const line, bool const abort)
+{
+  if (code != CL_SUCCESS)
+    {
+      char const * const cl_err_str = cl_get_error_string(code);
+
+      fprintf(stderr,
+              "\"%s\", line %d: cl_assert (%d) = \"%s\"",
+              file,line,code,cl_err_str);
+
+      if (abort)
+        {
+          // stop profiling and reset device here if necessary
+          exit(code);
+        }
+    }
+
+  return code;
+}
+
+//
+//
+//
+
+void
+cl_get_event_info(cl_event                event, 
+                  cl_int          * const status,
+                  cl_command_type * const type)
+{
+  if (status != NULL) {
+    cl(GetEventInfo(event,
+                    CL_EVENT_COMMAND_EXECUTION_STATUS,
+                    sizeof(*status),
+                    status,
+                    NULL));
+  }
+
+  if (type != NULL) {
+    cl(GetEventInfo(event,
+                    CL_EVENT_COMMAND_TYPE,
+                    sizeof(*type),
+                    type,
+                    NULL));
+  }
+}
+
+
+char const * 
+cl_get_event_command_status_string(cl_int const status)
+{
+  switch (status)
+    {
+      CL_VAL_TO_STRING(CL_QUEUED);
+      CL_VAL_TO_STRING(CL_SUBMITTED);
+      CL_VAL_TO_STRING(CL_RUNNING);
+      CL_VAL_TO_STRING(CL_COMPLETE);                       
+
+    default:
+      return "UNKNOWN COMMAND STATUS";
+    } 
+}
+
+char const * 
+cl_get_event_command_type_string(cl_command_type const type)
+{
+  switch (type)
+    {
+      CL_VAL_TO_STRING(CL_COMMAND_NDRANGE_KERNEL);
+      CL_VAL_TO_STRING(CL_COMMAND_TASK);
+      CL_VAL_TO_STRING(CL_COMMAND_NATIVE_KERNEL);
+      CL_VAL_TO_STRING(CL_COMMAND_READ_BUFFER);
+      CL_VAL_TO_STRING(CL_COMMAND_WRITE_BUFFER);
+      CL_VAL_TO_STRING(CL_COMMAND_COPY_BUFFER);
+      CL_VAL_TO_STRING(CL_COMMAND_READ_IMAGE);
+      CL_VAL_TO_STRING(CL_COMMAND_WRITE_IMAGE);
+      CL_VAL_TO_STRING(CL_COMMAND_COPY_IMAGE);
+      CL_VAL_TO_STRING(CL_COMMAND_COPY_BUFFER_TO_IMAGE);
+      CL_VAL_TO_STRING(CL_COMMAND_COPY_IMAGE_TO_BUFFER);
+      CL_VAL_TO_STRING(CL_COMMAND_MAP_BUFFER);
+      CL_VAL_TO_STRING(CL_COMMAND_MAP_IMAGE);
+      CL_VAL_TO_STRING(CL_COMMAND_UNMAP_MEM_OBJECT);
+      CL_VAL_TO_STRING(CL_COMMAND_MARKER);
+      CL_VAL_TO_STRING(CL_COMMAND_ACQUIRE_GL_OBJECTS);
+      CL_VAL_TO_STRING(CL_COMMAND_RELEASE_GL_OBJECTS);
+      CL_VAL_TO_STRING(CL_COMMAND_READ_BUFFER_RECT);
+      CL_VAL_TO_STRING(CL_COMMAND_WRITE_BUFFER_RECT);
+      CL_VAL_TO_STRING(CL_COMMAND_COPY_BUFFER_RECT);
+      CL_VAL_TO_STRING(CL_COMMAND_USER);
+      CL_VAL_TO_STRING(CL_COMMAND_BARRIER);
+      CL_VAL_TO_STRING(CL_COMMAND_MIGRATE_MEM_OBJECTS);
+      CL_VAL_TO_STRING(CL_COMMAND_FILL_BUFFER);
+      CL_VAL_TO_STRING(CL_COMMAND_FILL_IMAGE);
+      CL_VAL_TO_STRING(CL_COMMAND_GL_FENCE_SYNC_OBJECT_KHR);
+
+    default:
+      return "UNKNOWN EVENT COMMAND TYPE";
+    }
+}
diff --git a/src/compute/common/cl/assert_cl.h b/src/compute/common/cl/assert_cl.h
new file mode 100644
index 0000000..5481f38
--- /dev/null
+++ b/src/compute/common/cl/assert_cl.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include <CL/opencl.h>
+#include <stdbool.h>
+
+//
+//
+//
+
+char const * 
+cl_get_error_string(cl_int const err);
+
+cl_int 
+assert_cl(cl_int       const code, 
+          char const * const file, 
+          int          const line, 
+          bool         const abort);
+
+//
+//
+//
+
+#define cl(...)    assert_cl((cl##__VA_ARGS__), __FILE__, __LINE__, true);
+#define cl_ok(err) assert_cl(err,               __FILE__, __LINE__, true);
+
+//
+//
+//
+
+void
+cl_get_event_info(cl_event                event, 
+                  cl_int          * const status,
+                  cl_command_type * const type);
+
+char const * 
+cl_get_event_command_status_string(cl_int const status);
+
+char const * 
+cl_get_event_command_type_string(cl_command_type const type);
+
+//
+//
+//
+
diff --git a/src/compute/common/cl/find_cl.c b/src/compute/common/cl/find_cl.c
new file mode 100644
index 0000000..613d2b9
--- /dev/null
+++ b/src/compute/common/cl/find_cl.c
@@ -0,0 +1,210 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+//
+//
+//
+
+#include "find_cl.h"
+#include "assert_cl.h"
+#include "macros.h"
+
+//
+// search platforms and devices for a match
+//
+
+cl_int
+clFindIdsByName(char const     * const target_platform_substring,
+                char const     * const target_device_substring,
+                cl_platform_id * const platform_id,
+                cl_device_id   * const device_id,
+                size_t           const matched_device_name_size,
+                char           * const matched_device_name,
+                size_t         * const matched_device_name_size_ret,
+                bool             const is_verbose)
+{
+  bool match_platform=false, match_device=false;
+
+  //
+  // get number of platforms
+  //
+  cl_uint platform_count;
+  
+  cl(GetPlatformIDs(0,NULL,&platform_count));
+
+  cl_platform_id * const platform_ids = ALLOCA(sizeof(*platform_ids) * platform_count);
+
+  cl(GetPlatformIDs(platform_count,platform_ids,NULL));
+
+  //
+  // search platforms
+  //
+  for (cl_uint ii=0; ii<platform_count; ii++)
+    {
+      size_t platform_name_size;
+
+      cl(GetPlatformInfo(platform_ids[ii],
+                         CL_PLATFORM_NAME,
+                         0,
+                         NULL,
+                         &platform_name_size));
+
+      char * const platform_name = ALLOCA(platform_name_size);
+
+      cl(GetPlatformInfo(platform_ids[ii],
+                         CL_PLATFORM_NAME,
+                         platform_name_size,
+                         platform_name,
+                         NULL));
+
+
+      if (!match_platform && (strstr(platform_name,target_platform_substring) != NULL))
+        {
+          match_platform = true;
+          *platform_id   = platform_ids[ii];
+        }
+
+      if (is_verbose) {
+        fprintf(stdout,"%2u: %s\n",ii,platform_name);
+      }
+
+      //
+      // find devices for current platform
+      //
+      cl_uint device_count;
+      cl_int  cl_err;
+
+      cl_err = clGetDeviceIDs(platform_ids[ii],
+                              CL_DEVICE_TYPE_ALL,
+                              0,
+                              NULL,
+                              &device_count);
+
+      cl_device_id * const device_ids = ALLOCA(sizeof(*device_ids) * device_count);
+      
+      cl_err = clGetDeviceIDs(platform_ids[ii],
+                              CL_DEVICE_TYPE_ALL,
+                              device_count,
+                              device_ids,
+                              NULL);
+      
+      if (cl_err != CL_DEVICE_NOT_FOUND)
+        cl_ok(cl_err);
+
+      for (cl_uint jj=0; jj<device_count; jj++)
+        {
+          size_t device_name_size;
+          size_t driver_version_size;
+
+          cl(GetDeviceInfo(device_ids[jj],
+                           CL_DEVICE_NAME,
+                           0,
+                           NULL,
+                           &device_name_size));
+
+          cl(GetDeviceInfo(device_ids[jj],
+                           CL_DRIVER_VERSION,
+                           0,
+                           NULL,
+                           &driver_version_size));
+
+          char * const device_name    = ALLOCA(device_name_size);
+          char * const driver_version = ALLOCA(driver_version_size);
+
+          cl(GetDeviceInfo(device_ids[jj],
+                           CL_DEVICE_NAME,
+                           device_name_size,
+                           device_name,
+                           NULL));
+
+          cl(GetDeviceInfo(device_ids[jj],
+                           CL_DRIVER_VERSION,
+                           driver_version_size,
+                           driver_version,
+                           NULL));
+          
+          if (!match_device && match_platform && (strstr(device_name,target_device_substring) != NULL))
+            {
+              match_device = true;
+              *device_id   = device_ids[jj];
+
+              if (matched_device_name != NULL)
+                {
+                  size_t bytes = 0;
+
+                  if (matched_device_name_size >= 1)
+                    matched_device_name[matched_device_name_size-1] = 0;
+
+                  if (matched_device_name_size > 1)                  
+                    {
+                      bytes = MIN_MACRO(device_name_size,matched_device_name_size-1);
+
+                      memcpy(matched_device_name,device_name,bytes);
+                    }
+
+                  if (matched_device_name_size_ret != NULL)
+                    *matched_device_name_size_ret = bytes;
+                }
+
+              if (is_verbose) {
+                fprintf(stdout," >>>");
+              }
+            }
+          else if (is_verbose)
+            {
+              fprintf(stdout,"    ");
+            }
+
+          if (is_verbose)
+            {
+              fprintf(stdout,
+                      " %1u: %s [ %s ]\n",
+                      jj,
+                      device_name,
+                      driver_version);
+            }
+        }
+    }
+
+  if (is_verbose) {
+    fprintf(stdout,"\n");
+  }
+
+  //
+  // get target platform and device
+  //
+  if (!match_platform)
+    {
+      if (is_verbose)
+        fprintf(stderr,"no match for target platform substring %s\n",target_platform_substring);
+
+      return CL_INVALID_PLATFORM;
+    }
+  if (!match_device)
+    {
+      if (is_verbose)
+        fprintf(stderr,"no match for target device substring %s\n",target_device_substring);
+
+      return CL_DEVICE_NOT_FOUND;
+    }
+
+  return CL_SUCCESS;
+} 
+
+//
+//
+//
+
diff --git a/src/compute/common/cl/find_cl.h b/src/compute/common/cl/find_cl.h
new file mode 100644
index 0000000..5143e39
--- /dev/null
+++ b/src/compute/common/cl/find_cl.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include <CL/opencl.h>
+#include <stdbool.h>
+
+//
+//
+//
+
+cl_int
+clFindIdsByName(char const     * const target_platform_substring,
+                char const     * const target_device_substring,
+                cl_platform_id * const platform_id,
+                cl_device_id   * const device_id,
+                size_t           const matched_device_name_size,
+                char           * const matched_device_name,
+                size_t         * const matched_device_name_size_ret,
+                bool             const is_verbose);
+
+//
+//
+//
+
diff --git a/src/compute/common/macros.h b/src/compute/common/macros.h
new file mode 100644
index 0000000..35f658f
--- /dev/null
+++ b/src/compute/common/macros.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#define ARRAY_LENGTH(x) (sizeof(x)/sizeof(x[0]))
+
+//
+//
+//
+
+#define MAX_MACRO(a,b)  (((a) > (b)) ? (a) : (b))
+#define MIN_MACRO(a,b)  (((a) < (b)) ? (a) : (b))
+#define GTE_MACRO(a,b)  ((a) >= (b))
+#define LT_MACRO(a,b)   ((a) <  (b))
+
+//
+//
+//
+
+#define BITS_TO_MASK(n)         (((uint32_t)1<<(n))-1)
+#define BITS_TO_MASK_64(n)      (((uint64_t)1<<(n))-1)
+
+#define BITS_TO_MASK_AT(n,b)    (BITS_TO_MASK(n)<<(b))
+#define BITS_TO_MASK_AT_64(n,b) (BITS_TO_MASK_64(n)<<(b))
+
+//
+//
+//
+
+#define ALLOCA(n)  _alloca(n)
+
+//
+//
+//
diff --git a/src/compute/common/util.c b/src/compute/common/util.c
new file mode 100644
index 0000000..6971012
--- /dev/null
+++ b/src/compute/common/util.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ */
+
+#include <intrin.h> 
+
+//
+//
+//
+
+#include "util.h"
+
+//
+//
+//
+
+bool
+is_pow2_u32(uint32_t n)
+{
+  return (n & (n-1)) == 0;
+}
+
+//
+//
+//
+
+uint32_t
+pow2_ru_u32(uint32_t n)
+{
+  n--;
+  n |= n >> 1;
+  n |= n >> 2;
+  n |= n >> 4;
+  n |= n >> 8;
+  n |= n >> 16;
+  n++;
+
+  return n;
+}
+
+//
+//
+//
+
+uint32_t
+pow2_rd_u32(uint32_t n)
+{
+  return 1u << msb_idx_u32(n);
+}
+
+//
+// ASSUMES NON-ZERO
+//
+
+uint32_t
+msb_idx_u32(uint32_t n)
+{
+
+#ifdef _MSC_VER
+
+  uint32_t index;
+
+  _BitScanReverse(&index,n);
+
+  return index;
+
+#elif defined(__GNUC__)
+
+#error "BUSTED msb_index()"
+  return 31 - __builtin_clz(mask);
+
+#else
+
+#error "No msb_index()"
+
+#endif
+
+}
+
+//
+//
+//
diff --git a/src/compute/common/util.h b/src/compute/common/util.h
new file mode 100644
index 0000000..7d5a7b4
--- /dev/null
+++ b/src/compute/common/util.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include <stdint.h>
+#include <stdbool.h>
+
+//
+//
+//
+
+bool     is_pow2_u32(uint32_t n);
+uint32_t pow2_ru_u32(uint32_t n);
+uint32_t pow2_rd_u32(uint32_t n);
+uint32_t msb_idx_u32(uint32_t n); // 0-based bit position
+
+//
+//
+//
+
+
diff --git a/src/compute/hs/cl/bench/main.c b/src/compute/hs/cl/bench/main.c
new file mode 100644
index 0000000..3b9ef6e
--- /dev/null
+++ b/src/compute/hs/cl/bench/main.c
@@ -0,0 +1,678 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+//
+// CPU bench
+//
+
+#ifdef _MSC_VER
+#include <windows.h>
+#else
+#include <sys/time.h>
+#endif
+
+//
+// squelch OpenCL 1.2 deprecation warning
+//
+
+#ifndef CL_USE_DEPRECATED_OPENCL_1_2_APIS
+#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
+#endif
+
+#include "macros.h"
+#include "assert_cl.h"
+#include "find_cl.h"
+#include "hs_cl_launcher.h"
+
+//
+// The quality of the RNG doesn't matter.  The same number of
+// instructions will be run no matter what the key distribution looks
+// like.  So here is something small and fast.
+//
+
+static
+uint32_t
+hs_rand_u32()
+{
+  static uint32_t seed = 0xDEADBEEF;
+
+  // Numerical Recipes
+  seed = seed * 1664525 + 1013904223;
+
+  return seed;
+}
+
+//
+//
+//
+
+static
+void
+hs_fill_rand(uint32_t * vin_h, uint32_t const count, uint32_t const words)
+{
+#if   1
+  for (uint32_t ii=0; ii<count*words; ii++)
+    vin_h[ii] = hs_rand_u32();
+#elif 0 // in-order
+  memset(vin_h,0,count*words*sizeof(uint32_t));
+  for (uint32_t ii=0; ii<count; ii++)
+    vin_h[ii*words] = ii;
+#else   // reverse order
+  memset(vin_h,0,count*words*sizeof(uint32_t));
+  for (uint32_t ii=0; ii<count; ii++)
+    vin_h[ii*words] = count - 1 - ii;
+#endif
+}
+
+//
+//
+//
+
+char const * hs_cpu_sort_u32(uint32_t * a, uint32_t const count);
+char const * hs_cpu_sort_u64(uint64_t * a, uint32_t const count);
+
+//
+//
+//
+
+static
+char const *
+hs_cpu_sort(void                *  sorted_h,
+            uint32_t               const count,
+            struct hs_info const * const info,
+            double               * const cpu_ns)
+{
+  char const * algo;
+
+  LARGE_INTEGER t0,t1,freq;
+
+  QueryPerformanceCounter(&t0);
+
+  if (info->words == 1)
+    algo = hs_cpu_sort_u32(sorted_h,count);
+  else
+    algo = hs_cpu_sort_u64(sorted_h,count);
+
+  QueryPerformanceCounter(&t1);
+  QueryPerformanceFrequency(&freq);
+
+  // nanoseconds
+  *cpu_ns = (double)((t1.QuadPart - t0.QuadPart) * 1000 * 1000 * 1000) / (double)freq.QuadPart;
+
+  return algo;
+}
+
+static
+bool
+hs_verify_linear(void * sorted_h, void * vout_h, const uint32_t count, struct hs_info const * const info)
+{
+  return memcmp(sorted_h, vout_h, sizeof(uint32_t) * info->words * count) == 0;
+}
+
+static
+void
+hs_transpose_slabs_u32(uint32_t * vout_h, const uint32_t count, struct hs_info const * const info)
+{
+  uint32_t   const slab_keys  = info->keys * info->lanes;
+  size_t     const slab_size  = sizeof(uint32_t) * info->words * slab_keys;
+  uint32_t * const slab       = _alloca(slab_size);
+  uint32_t         slab_count = count / slab_keys;
+
+  while (slab_count-- > 0)
+    {
+      memcpy(slab,vout_h,slab_size);
+
+      for (uint32_t row=0; row<info->keys; row++)
+        for (uint32_t col=0; col<info->lanes; col++)
+          vout_h[col * info->keys + row] = slab[row * info->lanes + col];
+
+      vout_h += slab_keys;
+    }
+}
+
+static
+void
+hs_transpose_slabs_u64(uint64_t * vout_h, const uint32_t count, struct hs_info const * const info)
+{
+  uint32_t   const slab_keys  = info->keys * info->lanes;
+  size_t     const slab_size  = sizeof(uint32_t) * info->words * slab_keys;
+  uint64_t * const slab       = _alloca(slab_size);
+  uint32_t         slab_count = count / slab_keys;
+
+  while (slab_count-- > 0)
+    {
+      memcpy(slab,vout_h,slab_size);
+
+      for (uint32_t row=0; row<info->keys; row++)
+        for (uint32_t col=0; col<info->lanes; col++)
+          vout_h[col * info->keys + row] = slab[row * info->lanes + col];
+
+      vout_h += slab_keys;
+    }
+}
+
+static
+void
+hs_transpose_slabs(void * vout_h, const uint32_t count, struct hs_info const * const info)
+{
+  if (info->words == 1)
+    hs_transpose_slabs_u32(vout_h,count,info);
+  else
+    hs_transpose_slabs_u64(vout_h,count,info);
+}
+
+//
+//
+//
+
+static
+void
+hs_debug_u32(
+             uint32_t       const *       vout_h,
+             uint32_t               const count,
+             struct hs_info const * const info)
+{
+  uint32_t const slab  = info->keys * info->lanes;
+  uint32_t const slabs = (count + slab - 1) / slab;
+
+  for (uint32_t ss=0; ss<slabs; ss++) {
+    fprintf(stderr,"%u\n",ss);
+    for (uint32_t cc=0; cc<info->keys; cc++) {
+      for (uint32_t rr=0; rr<info->lanes; rr++)
+        fprintf(stderr,"%8X ",*vout_h++);
+      fprintf(stderr,"\n");
+    }
+  }
+}
+
+static
+void
+hs_debug_u64(uint64_t       const *       vout_h,
+             uint32_t               const count,
+             struct hs_info const * const info)
+{
+  uint32_t const slab  = info->keys * info->lanes;
+  uint32_t const slabs = (count + slab - 1) / slab;
+
+  for (uint32_t ss=0; ss<slabs; ss++) {
+    fprintf(stderr,"%u\n",ss);
+    for (uint32_t cc=0; cc<info->keys; cc++) {
+      for (uint32_t rr=0; rr<info->lanes; rr++)
+        fprintf(stderr,"%16llX ",*vout_h++);
+      fprintf(stderr,"\n");
+    }
+  }
+}
+
+//
+// Used for benchmarking on out-of-order queues.  Attaching an event
+// to a kernel on an OOQ with profiling enabled will result in a
+// synchronization point and block concurrent execution of kernels.
+//
+// The workaround that enables measuring the entire runtime of the
+// sort is to launch a dummy kernel with an event, a barrier without
+// an event, then the call to hs_sort(), followed by a final dummy
+// kernel with an event.
+//
+// The end time of the first dummy and start time of the second dummy
+// will provide a conservative estimate of the total execution time of
+// the hs_sort() routine.
+//
+// Note that once kernels are enqueued they are scheduled with only
+// microseconds between them so this should only be a small number of
+// microseconds longer than the true hs_sort() execution time.
+//
+
+#define HS_DUMMY_KERNEL_PROGRAM "kernel void hs_dummy_kernel() { ; }"
+
+static cl_kernel hs_dummy_kernel;
+
+static
+void
+hs_dummy_kernel_create(cl_context context, cl_device_id device_id)
+{
+  cl_int err;
+
+  char   const * strings[]        = { HS_DUMMY_KERNEL_PROGRAM };
+  size_t const   strings_sizeof[] = { sizeof(HS_DUMMY_KERNEL_PROGRAM) + 1 };
+
+  cl_program program = clCreateProgramWithSource(context,
+                                                 1,
+                                                 strings,
+                                                 strings_sizeof,
+                                                 &err); cl_ok(err);
+  cl(BuildProgram(program,
+                  1,
+                  &device_id,
+                  NULL,
+                  NULL,
+                  NULL));
+
+  hs_dummy_kernel = clCreateKernel(program,"hs_dummy_kernel",&err); cl_ok(err);
+
+  cl(ReleaseProgram(program));
+}
+
+static
+void
+hs_dummy_kernel_release()
+{
+  cl(ReleaseKernel(hs_dummy_kernel));
+}
+
+static
+void
+hs_dummy_kernel_enqueue(cl_command_queue cq, cl_event * const event)
+{
+  size_t const global_work_size = 1;
+
+  cl(EnqueueNDRangeKernel(cq,
+                          hs_dummy_kernel,
+                          1,
+                          NULL,
+                          &global_work_size,
+                          NULL,
+                          0,
+                          NULL,
+                          event));
+}
+
+//
+//
+//
+
+static
+void
+hs_bench(cl_context                   context,
+         cl_command_queue             cq,
+         char           const * const device_name,
+         struct hs_info const * const info,
+         uint32_t               const count_lo,
+         uint32_t               const count_hi,
+         uint32_t               const count_step,
+         uint32_t               const loops,
+         uint32_t               const warmup,
+         bool                   const linearize)
+{
+  //
+  // return if nothing to do
+  //
+  if (count_hi <= 1)
+    return;
+
+  //
+  // size the arrays
+  //
+  uint32_t count_hi_padded_in, count_hi_padded_out;
+
+  hs_pad(count_hi,&count_hi_padded_in,&count_hi_padded_out);
+
+  //
+  // SIZE
+  //
+  size_t const key_size    = sizeof(uint32_t)    * info->words;
+
+  size_t const size_hi     = count_hi            * key_size;
+  size_t const size_hi_in  = count_hi_padded_in  * key_size;
+  size_t const size_hi_out = count_hi_padded_out * key_size;
+
+  //
+  // ALLOCATE
+  //
+  cl_int cl_err;
+
+  void * sorted_h = malloc(size_hi_in);
+
+  cl_mem random   = clCreateBuffer(context,
+                                   CL_MEM_READ_ONLY  | CL_MEM_ALLOC_HOST_PTR,
+                                   size_hi_in,
+                                   NULL,&cl_err); cl_ok(cl_err);
+
+  cl_mem vin      = clCreateBuffer(context,
+                                   CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR,
+                                   size_hi_in,
+                                   NULL,&cl_err); cl_ok(cl_err);
+
+  cl_mem vout     = clCreateBuffer(context,
+                                   CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR,
+                                   size_hi_out,
+                                   NULL,&cl_err); cl_ok(cl_err);
+  //
+  // BLOCKING MAP AND INIT KEYS
+  //
+  {
+    void * random_h = clEnqueueMapBuffer(cq,
+                                         random,
+                                         CL_TRUE,
+                                         CL_MAP_WRITE_INVALIDATE_REGION,
+                                         0,size_hi_in,
+                                         0,NULL,NULL,
+                                         &cl_err); cl_ok(cl_err);
+
+    // fill with random numbers
+    hs_fill_rand(random_h,count_hi,info->words);
+
+    //
+    // UNMAP
+    //
+    cl(EnqueueUnmapMemObject(cq,random,random_h,0,NULL,NULL));
+  }
+
+  //
+  // BENCHMARK
+  //
+  for (uint32_t count=count_lo; count<=count_hi; count+=count_step)
+    {
+      // compute padding before sorting
+      uint32_t count_padded_in, count_padded_out;
+
+      hs_pad(count,&count_padded_in,&count_padded_out);
+
+      cl_ulong elapsed_ns_min = ULONG_MAX;
+      cl_ulong elapsed_ns_max = 0;
+      cl_ulong elapsed_ns_sum = 0;
+
+#if 1
+          cl(EnqueueCopyBuffer(cq,random,vin,0,0,count * key_size,0,NULL,NULL));
+          cl(Finish(cq));
+#endif
+
+      for (uint32_t ii=0; ii<warmup+loops; ii++)
+        {
+          if (ii == warmup)
+            {
+              elapsed_ns_min = ULONG_MAX;
+              elapsed_ns_max = 0;
+              elapsed_ns_sum = 0;
+            }
+
+          //
+          // initialize vin on every loop -- shouldn't need to do this
+          //
+#if 0
+          cl(EnqueueCopyBuffer(cq,random,vin,0,0,count * key_size,0,NULL,NULL));
+          cl(Finish(cq));
+#endif
+
+          //
+          // sort vin
+          //
+          cl_event start, end;
+
+          hs_dummy_kernel_enqueue(cq,&start);
+
+          cl(EnqueueBarrierWithWaitList(cq,0,NULL,NULL));
+
+          // note hs_sort enqueues a final barrier
+          hs_sort(cq,
+                  vin,vout,
+                  count,
+                  count_padded_in,
+                  count_padded_out,
+                  linearize);
+
+          hs_dummy_kernel_enqueue(cq,&end);
+
+          cl(Finish(cq));
+
+          //
+          // measure duration
+          //
+          cl_ulong t_start=0, t_end=0;
+
+          // start
+          cl(GetEventProfilingInfo(start,
+                                   CL_PROFILING_COMMAND_END,
+                                   sizeof(cl_ulong),
+                                   &t_start,
+                                   NULL));
+          cl(ReleaseEvent(start));
+
+          // end
+          cl(GetEventProfilingInfo(end,
+                                   CL_PROFILING_COMMAND_START,
+                                   sizeof(cl_ulong),
+                                   &t_end,
+                                   NULL));
+          cl(ReleaseEvent(end));
+
+          cl_ulong const t = t_end - t_start;
+
+          elapsed_ns_min  = MIN_MACRO(elapsed_ns_min,t);
+          elapsed_ns_max  = MAX_MACRO(elapsed_ns_max,t);
+          elapsed_ns_sum += t;
+        }
+
+      //
+      // COPY KEYS BACK FOR VERIFICATION
+      //
+      size_t const size_padded_in = count_padded_in * key_size;
+
+      void * vin_h = clEnqueueMapBuffer(cq,
+                                        vin,
+                                        CL_FALSE,
+                                        CL_MAP_READ,
+                                        0,size_padded_in,
+                                        0,NULL,NULL,
+                                        &cl_err); cl_ok(cl_err);
+
+      void * vout_h = clEnqueueMapBuffer(cq,
+                                         vout,
+                                         CL_FALSE,
+                                         CL_MAP_READ,
+                                         0,size_padded_in,
+                                         0,NULL,NULL,
+                                         &cl_err); cl_ok(cl_err);
+      cl(Finish(cq));
+
+      //
+      // SORT THE UNTOUCHED RANDOM INPUT
+      //
+      memcpy(sorted_h,vin_h,size_padded_in);
+
+      double cpu_ns;
+
+      char const * const algo = hs_cpu_sort(sorted_h,count_padded_in,info,&cpu_ns);
+
+      //
+      // EXPLICITLY TRANSPOSE THE CPU SORTED SLABS IF NOT LINEARIZING
+      //
+      if (!linearize) {
+        hs_transpose_slabs(vout_h,count_padded_in,info);
+      }
+
+      //
+      // VERIFY
+      //
+      bool const verified = hs_verify_linear(sorted_h,vout_h,count_padded_in,info);
+
+#ifndef NDEBUG
+      if (!verified)
+        {
+          if (info->words == 1)
+            hs_debug_u32(vout_h,count,info);
+          else // ulong
+            hs_debug_u64(vout_h,count,info);
+        }
+#endif
+
+      cl(EnqueueUnmapMemObject(cq,vin, vin_h, 0,NULL,NULL));
+      cl(EnqueueUnmapMemObject(cq,vout,vout_h,0,NULL,NULL));
+
+      cl(Finish(cq));
+
+      //
+      // REPORT
+      //
+      fprintf(stdout,"%s, %s, %s, %s, %8u, %8u, %8u, CPU, %s, %9.2f, %6.2f, GPU, %9u, %7.3f, %7.3f, %7.3f, %6.2f, %6.2f\n",
+              device_name,
+              (info->words == 1) ? "uint" : "ulong",
+              linearize ? "linear" : "slab",
+              verified ? "  OK  " : "*FAIL*",
+              count,
+              count_padded_in,
+              count_padded_out,
+              // CPU
+              algo,
+              cpu_ns / 1000000.0,                       // milliseconds
+              1000.0 * count / cpu_ns,                  // mkeys / sec
+              // GPU
+              loops,
+              elapsed_ns_sum / 1000000.0 / loops,       // avg msecs
+              elapsed_ns_min / 1000000.0,               // min msecs
+              elapsed_ns_max / 1000000.0,               // max msecs
+              1000.0 * count * loops / elapsed_ns_sum,  // mkeys / sec - avg
+              1000.0 * count         / elapsed_ns_min); // mkeys / sec - max
+
+      // quit early if not verified
+      if (!verified)
+        break;
+    }
+
+  //
+  // dispose
+  //
+  cl(ReleaseMemObject(vout));
+  cl(ReleaseMemObject(vin));
+  cl(ReleaseMemObject(random));
+  free(sorted_h);
+}
+
+//
+//
+//
+
+int
+main(int argc, char** argv)
+{
+  char const * const target_platform_substring = "Intel";
+  char const * const target_device_substring   = "Graphics";
+
+  //
+  // find platform and device ids
+  //
+  cl_platform_id platform_id;
+  cl_device_id   device_id;
+
+#define HS_DEVICE_NAME_SIZE  64
+
+  char   device_name[HS_DEVICE_NAME_SIZE];
+  size_t device_name_size;
+
+  cl(FindIdsByName(target_platform_substring,
+                   target_device_substring,
+                   &platform_id,
+                   &device_id,
+                   HS_DEVICE_NAME_SIZE,
+                   device_name,
+                   &device_name_size,
+                   true));
+  //
+  // create context
+  //
+  cl_context_properties context_properties[] =
+    {
+      CL_CONTEXT_PLATFORM, (cl_context_properties)platform_id,
+      0
+    };
+
+  cl_int     cl_err;
+  cl_context context = clCreateContext(context_properties,
+                                       1,
+                                       &device_id,
+                                       NULL,
+                                       NULL,
+                                       &cl_err);
+  cl_ok(cl_err);
+
+  //
+  // create command queue
+  //
+  cl_command_queue_properties const props = CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_PROFILING_ENABLE;
+
+#if 0 // OPENCL 2.0
+  cl_queue_properties queue_properties[] =
+    {
+      CL_QUEUE_PROPERTIES, (cl_queue_properties)props,
+      0
+    };
+
+  cl_command_queue cq = clCreateCommandQueueWithProperties(context,
+                                                           device_id,
+                                                           queue_properties,
+                                                           &cl_err); cl_ok(cl_err);
+#else // OPENCL 1.2
+  cl_command_queue cq = clCreateCommandQueue(context,
+                                             device_id,
+                                             props,
+                                             &cl_err); cl_ok(cl_err);
+#endif
+
+  //
+  // create kernels
+  //
+  fprintf(stdout,"Creating... ");
+
+  struct hs_info info;
+
+  hs_create(context,device_id,&info);
+
+  fprintf(stdout,"done.\n");
+
+  //
+  // create dummy kernel for profiling
+  //
+  hs_dummy_kernel_create(context,device_id);
+
+  //
+  //
+  //
+#ifdef NDEBUG
+#define HS_BENCH_LOOPS   50
+#define HS_BENCH_WARMUP  10
+#else
+#define HS_BENCH_LOOPS   1
+#define HS_BENCH_WARMUP  0
+#endif
+
+  //
+  // sort sizes and loops
+  //
+  uint32_t const kpb        = info.keys * info.lanes;
+
+  uint32_t const count_lo   = (argc <= 1) ? kpb             : strtoul(argv[1],NULL,0);
+  uint32_t const count_hi   = (argc <= 2) ? count_lo        : strtoul(argv[2],NULL,0);
+  uint32_t const count_step = (argc <= 3) ? count_lo        : strtoul(argv[3],NULL,0);
+  uint32_t const loops      = (argc <= 4) ? HS_BENCH_LOOPS  : strtoul(argv[4],NULL,0);
+  uint32_t const warmup     = (argc <= 5) ? HS_BENCH_WARMUP : strtoul(argv[5],NULL,0);
+  bool     const linearize  = (argc <= 6) ? true            : strtoul(argv[6],NULL,0);
+
+  //
+  // benchmark
+  //
+  hs_bench(context,cq,device_name,&info,count_lo,count_hi,count_step,loops,warmup,linearize);
+
+  //
+  // release everything
+  //
+  hs_dummy_kernel_release();
+  hs_release();
+
+  cl(ReleaseCommandQueue(cq));
+  cl(ReleaseContext(context));
+
+  return 0;
+}
diff --git a/src/compute/hs/cl/bench/sort.cpp b/src/compute/hs/cl/bench/sort.cpp
new file mode 100644
index 0000000..861c498
--- /dev/null
+++ b/src/compute/hs/cl/bench/sort.cpp
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+// Sort 1m 64-bit keys:
+//
+// std::sort(std::execution::par_unseq)() :  23 msecs
+// std::sort()                            :  88 msecs
+// qsort()                                : 166 msecs
+//
+
+#define HS_USE_PARALLEL_SORT
+// #define HS_USE_STD_SORT
+// #define HS_USE_QSORT
+
+//
+//
+//
+
+#if   defined ( HS_USE_PARALLEL_SORT )
+#include <execution>
+#elif defined ( HS_USE_STD_SORT )
+#include <algorithm>
+#elif defined ( HS_USE_QSORT )
+#include <stdlib.h>
+#include <stdint.h>
+#endif
+
+//
+// qsort comparators
+//
+
+#if defined ( HS_USE_QSORT )
+
+static
+int
+hs_qsort_compare_u32(void const * a, void const * b)
+{
+  if      (*(uint32_t*)a == *(uint32_t*)b)
+    return  0;
+  else if (*(uint32_t*)a <  *(uint32_t*)b)
+    return -1;
+  else
+    return  1;
+}
+
+static
+int
+hs_qsort_compare_u64(void const * a, void const * b)
+{
+  if      (*(uint64_t*)a == *(uint64_t*)b)
+    return  0;
+  else if (*(uint64_t*)a <  *(uint64_t*)b)
+    return -1;
+  else
+    return  1;
+}
+
+#endif
+
+//
+//
+//
+
+extern "C"
+char const *
+hs_cpu_sort_u32(uint32_t * a, uint32_t const count)
+{
+#if   defined ( HS_USE_PARALLEL_SORT )
+  std::sort(std::execution::par_unseq,a,a+count);
+  return "std::sort(std::execution::par_unseq)()";
+#elif defined ( HS_USE_STD_SORT )
+  std::sort(a,a+count);
+  return "std:sort()";
+#elif defined ( HS_USE_QSORT )
+  qsort(a,count,sizeof(*a),hs_qsort_compare_u32);
+  return "qsort()";
+#endif
+}
+
+extern "C"
+char const * 
+hs_cpu_sort_u64(uint64_t * a, uint32_t const count)
+{
+#if   defined ( HS_USE_PARALLEL_SORT )
+  std::sort(std::execution::par_unseq,a,a+count);  
+  return "std::sort(std::execution::par_unseq)()";
+#elif defined ( HS_USE_STD_SORT )
+  std::sort(a,a+count);
+  return "std::sort()";
+#elif defined ( HS_USE_QSORT )
+  qsort(a,count,sizeof(*a),hs_qsort_compare_u64);
+  return "qsort()";
+#endif
+}
+
+//
+//
+//
diff --git a/src/compute/hs/cl/gen9/make_all.bat b/src/compute/hs/cl/gen9/make_all.bat
new file mode 100644
index 0000000..fac82b4
--- /dev/null
+++ b/src/compute/hs/cl/gen9/make_all.bat
@@ -0,0 +1,16 @@
+@ECHO OFF

+

+SET HS_GEN=..\..\..\..\spinel\bin\x64\Debug\hs_gen 

+

+REM --- 32-bit keys ---

+

+REM CMD /C %HS_GEN% -a 2 -t 1 -w 8 -r 24 -s 32768 -S 65536 -b 28 -B 56 -m 1 -M 1 -f 1 -F 1 -c 1 -C 1 -z

+REM CMD /C %HS_GEN% -a 2 -t 1 -w 8 -r 32 -s 21504 -S 65536 -b 16 -B 48 -m 1 -M 1 -f 1 -F 1 -c 1 -C 1 -z

+REM CMD /C %HS_GEN% -a 2 -t 1 -w 8 -r 32 -s 8192  -S 65536 -b 8  -B 56 -m 1 -M 1 -f 0 -F 0 -c 0 -C 0 -z

+

+REM --- 64-bit keys

+

+CMD /C %HS_GEN% -a 2 -t 2 -w 8 -r 16 -s 21504 -S 65536 -b 16 -B 48 -m 1 -M 1 -f 1 -F 1 -c 1 -C 1 -z

+REM CMD /C %HS_GEN% -a 2 -t 2 -w 8 -r 16 -s 32768 -S 65536 -b 28 -B 56 -m 1 -M 1 -f 0 -F 0 -c 0 -C 0 -z 

+

+CMD /C make_inl_cl.bat hs_cl.cl

diff --git a/src/compute/hs/cl/gen9/make_inl_cl.bat b/src/compute/hs/cl/gen9/make_inl_cl.bat
new file mode 100644
index 0000000..76cb6e5
--- /dev/null
+++ b/src/compute/hs/cl/gen9/make_inl_cl.bat
@@ -0,0 +1,78 @@
+

+@ECHO OFF

+

+::

+::

+::

+

+SET OPENCL_STD=-cl-std=CL1.2

+SET OPENCL_PRE=__OPENCL_C_VERSION__=120

+

+:: SET OPENCL_STD=-cl-std=CL2.0

+:: SET OPENCL_PRE=__OPENCL_C_VERSION__=200

+

+::

+::

+::

+

+SET IOC=ioc64

+

+::

+::

+::

+

+SET IOC_IR_OPTS_OPT=%OPENCL_STD% -cl-single-precision-constant -cl-denorms-are-zero -cl-mad-enable -cl-no-signed-zeros -cl-fast-relaxed-math -cl-kernel-arg-info

+

+SET IOC_IR_OPTS_DBG=%OPENCL_STD% -cl-kernel-arg-info -g

+

+SET IOC_IR_OPTS=%IOC_IR_OPTS_OPT%

+

+::

+::

+::

+

+SET PRE_DIR=%~p1

+

+CD %PRE_DIR%

+

+SET PRE_CL=%~n1

+SET PRE_CL=%PRE_CL%.pre.cl

+

+SET PRE_SRC_INL=%~n1

+SET PRE_SRC_INL=%PRE_SRC_INL%.pre.src.inl

+

+SET PRE_BIN_IR=%~n1

+SET PRE_BIN_IR=%PRE_BIN_IR%.pre.ir

+

+SET PRE_BIN_INL=%~n1

+SET PRE_BIN_INL=%PRE_BIN_INL%.pre.bin.inl

+

+::

+:: *.pre.cl

+:: *.pre.src.inl

+::

+

+CMD /C clang-format -style=Mozilla -i %1

+CMD /C cl -I . -I "%INTELOCLSDKROOT%\include" -D %OPENCL_PRE% -EP %1 -P -Fi"%PRE_CL%"

+CMD /C clang-format -style=Mozilla -i %PRE_CL%

+CMD /C dos2unix -q %PRE_CL%

+CMD /C xxd -i %PRE_CL% %PRE_SRC_INL%

+

+echo %PRE_CL%

+echo %PRE_SRC_INL%

+

+::

+:: *.pre.cl

+:: *.pre.src.inl

+::

+

+CMD /C touch %PRE_BIN_IR%

+ECHO ON

+@CMD /C %IOC% -cmd=build -bo="%IOC_IR_OPTS%" -device=gpu -input=%PRE_CL% -ir=%PRE_BIN_IR%

+@ECHO OFF

+CMD /C xxd -i %PRE_BIN_IR% %PRE_BIN_INL%

+

+echo %PRE_BIN_IR%

+echo %PRE_BIN_INL%

+

+

diff --git a/src/compute/hs/cl/hs_cl_launcher.c b/src/compute/hs/cl/hs_cl_launcher.c
new file mode 100644
index 0000000..b0b9e40
--- /dev/null
+++ b/src/compute/hs/cl/hs_cl_launcher.c
@@ -0,0 +1,1141 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <stdlib.h>
+
+//
+//
+//
+
+#include "hs_cl_launcher.h"
+#include "assert_cl.h"
+#include "macros.h"
+#include "util.h"
+
+//
+//
+//
+
+typedef uint32_t uint;
+typedef uint64_t ulong;
+
+//
+//
+//
+
+#include "hs_cl.h"
+
+//
+//
+//
+
+#if 0 // #ifndef NDEBUG
+#define HS_KERNEL_SOURCE
+#else
+#define HS_KERNEL_BINARY
+#endif
+
+//
+// #define HS_KERNEL_SPIRV
+//
+
+//
+//
+//
+
+#ifdef NDEBUG
+
+#define HS_LAUNCH_TRACE(k,g,l)
+
+#else
+
+#include <stdio.h>
+
+#define HS_KERNEL_NAME_MAX 20
+
+static
+void
+hs_launch_trace(cl_kernel    kernel,
+                size_t const global_work_size,
+                size_t const local_work_size)
+{
+  if (kernel == NULL)
+    return;
+
+  char name[HS_KERNEL_NAME_MAX];
+
+  cl(GetKernelInfo(kernel,CL_KERNEL_FUNCTION_NAME,HS_KERNEL_NAME_MAX,name,NULL));
+
+  fprintf(stderr,"%-19s ( %6zu, %4zu )\n",name,global_work_size,local_work_size);
+}
+
+#define HS_LAUNCH_TRACE(k,g,l)  hs_launch_trace(k,g,l)
+
+#endif
+
+//
+//
+//
+
+#ifdef NDEBUG
+
+#define HS_EVENT_NEXT()      NULL
+#define HS_EVENT_PROFILE(cq)
+
+#else
+
+#define HS_EVENTS_MAX   128
+
+static cl_event events[HS_EVENTS_MAX];
+static uint32_t events_count;
+
+static
+cl_event *
+hs_event_next()
+{
+  if (events_count + 1 >= HS_EVENTS_MAX) // no events can be recorded?
+    {
+      return NULL;
+    }
+  else // return next event slot
+    {
+      return events + events_count++;
+    }
+}
+
+static
+void
+hs_event_profile(cl_command_queue cq)
+{
+  cl(Finish(cq));
+
+  cl_command_queue_properties props;
+
+  cl(GetCommandQueueInfo(cq,
+                         CL_QUEUE_PROPERTIES,
+                         sizeof(props),
+                         &props,
+                         NULL));
+
+  cl_ulong t_min=UINT64_MAX, t_max=0;
+
+  for (uint32_t ee=0; ee<events_count; ee++)
+    {
+      cl_event event = events[ee];
+
+      //
+      // profiling
+      //
+      cl_ulong t_start=0, t_end=0;
+
+      if (props & CL_QUEUE_PROFILING_ENABLE)
+        {
+          // start
+          cl(GetEventProfilingInfo(event,
+                                   CL_PROFILING_COMMAND_START,
+                                   sizeof(cl_ulong),
+                                   &t_start,
+                                   NULL));
+          // end
+          cl(GetEventProfilingInfo(event,
+                                   CL_PROFILING_COMMAND_END,
+                                   sizeof(cl_ulong),
+                                   &t_end,
+                                   NULL));
+
+          t_min = MIN_MACRO(t_min,t_start);
+          t_max = MAX_MACRO(t_max,t_end);
+        }
+
+      //
+      // status
+      //
+      cl_int          status;
+      cl_command_type type;
+
+      cl_get_event_info(event,&status,&type);
+
+      fprintf(stdout,"%-3u, %-13s, %-28s, %20llu, %20llu, %20llu, %20llu\n",
+              ee,
+              cl_get_event_command_status_string(status),
+              cl_get_event_command_type_string(type),
+              t_start,t_end,t_end-t_start,t_max-t_min);
+
+      // release
+      cl(ReleaseEvent(event));
+    }
+}
+
+#define HS_EVENT_NEXT()      hs_event_next()
+#define HS_EVENT_PROFILE(cq) hs_event_profile(cq);
+
+#endif
+
+//
+//
+//
+
+struct hs_state
+{
+  cl_mem       vin;
+  cl_mem       vout;
+
+  // bx.ru is number of rounded up warps in vin
+  struct {
+    uint32_t   ru;
+  } bx;
+
+  // these values change on each iteration
+  union {
+    struct {
+      uint32_t full;
+      uint32_t frac;
+    } bs; // warps
+    struct {
+      uint32_t full;
+      uint32_t na;
+    } bc; // warps
+    struct {
+      uint32_t full;
+      uint32_t frac;
+    } fm; // rows
+  };
+};
+
+//
+//
+//
+
+#define HS_THREADS_PER_BLOCK  (HS_BS_WARPS           * HS_LANES_PER_WARP)
+#define HS_KEYS_PER_WARP      (HS_KEYS_PER_LANE      * HS_LANES_PER_WARP)
+
+#define HS_BS_KEYS_PER_BLOCK  (HS_KEYS_PER_WARP      * HS_BS_WARPS)
+#define HS_BS_BLOCK_SIZE      (HS_BS_KEYS_PER_BLOCK  * sizeof(HS_KEY_TYPE))
+
+#define HS_BC_KEYS_PER_BLOCK  (HS_KEYS_PER_WARP << HS_BC_WARPS_LOG2_MAX)
+#define HS_BC_BLOCK_SIZE      (HS_BC_KEYS_PER_BLOCK  * sizeof(HS_KEY_TYPE))
+
+//
+//
+//
+
+#if   defined( HS_KERNEL_SOURCE )
+
+#include "hs_cl.pre.src.inl"
+
+#elif defined( HS_KERNEL_BINARY )
+
+#include "hs_cl.pre.bin.inl"
+
+#elif defined( HS_KERNEL_SPIRV )
+
+#include "hs_cl.pre.spv.inl"
+
+#endif
+
+//
+//
+//
+
+struct hs_transpose_kernel
+{
+  cl_kernel    kernel;
+  char const * name;
+};
+
+#define HS_TRANSPOSE_KERNEL_DECLARE(n) { .name = #n }
+
+static struct hs_transpose_kernel transpose_kernels[] =
+  {
+    HS_TRANSPOSE_KERNEL_DECLARE(hs_kernel_transpose)
+  };
+
+//
+//
+//
+
+struct hs_bs_kernel
+{
+  cl_kernel    kernel;
+  char const * name;
+};
+
+#define HS_BS_KERNEL_DECLARE(n) { .name = #n }
+
+static struct hs_bs_kernel bs_kernels[] =
+  {
+#if 0 <= HS_BS_WARPS_LOG2_RU
+    HS_BS_KERNEL_DECLARE(hs_kernel_bs_0),
+#endif
+#if 1 <= HS_BS_WARPS_LOG2_RU
+    HS_BS_KERNEL_DECLARE(hs_kernel_bs_1),
+#endif
+#if 2 <= HS_BS_WARPS_LOG2_RU
+    HS_BS_KERNEL_DECLARE(hs_kernel_bs_2),
+#endif
+#if 3 <= HS_BS_WARPS_LOG2_RU
+    HS_BS_KERNEL_DECLARE(hs_kernel_bs_3),
+#endif
+#if 4 <= HS_BS_WARPS_LOG2_RU
+    HS_BS_KERNEL_DECLARE(hs_kernel_bs_4),
+#endif
+#if 5 <= HS_BS_WARPS_LOG2_RU
+    HS_BS_KERNEL_DECLARE(hs_kernel_bs_5),
+#endif
+#if 6 <= HS_BS_WARPS_LOG2_RU
+    HS_BS_KERNEL_DECLARE(hs_kernel_bs_6),
+#endif
+#if 7 <= HS_BS_WARPS_LOG2_RU
+    HS_BS_KERNEL_DECLARE(hs_kernel_bs_7),
+#endif
+  };
+
+//
+//
+//
+
+struct hs_bc_kernel
+{
+  cl_kernel    kernel;
+  char const * name;
+};
+
+#define HS_BC_KERNEL_DECLARE(n) { .name = #n }
+
+static struct hs_bc_kernel bc_kernels[] =
+  {
+#if (0 >= HS_BC_WARPS_LOG2_MIN) && (0 <= HS_BC_WARPS_LOG2_MAX)
+    HS_BC_KERNEL_DECLARE(hs_kernel_bc_0),
+#endif
+#if (1 >= HS_BC_WARPS_LOG2_MIN) && (1 <= HS_BC_WARPS_LOG2_MAX)
+    HS_BC_KERNEL_DECLARE(hs_kernel_bc_1),
+#endif
+#if (2 >= HS_BC_WARPS_LOG2_MIN) && (2 <= HS_BC_WARPS_LOG2_MAX)
+    HS_BC_KERNEL_DECLARE(hs_kernel_bc_2),
+#endif
+#if (3 >= HS_BC_WARPS_LOG2_MIN) && (3 <= HS_BC_WARPS_LOG2_MAX)
+    HS_BC_KERNEL_DECLARE(hs_kernel_bc_3),
+#endif
+#if (4 >= HS_BC_WARPS_LOG2_MIN) && (4 <= HS_BC_WARPS_LOG2_MAX)
+    HS_BC_KERNEL_DECLARE(hs_kernel_bc_4),
+#endif
+#if (5 >= HS_BC_WARPS_LOG2_MIN) && (5 <= HS_BC_WARPS_LOG2_MAX)
+    HS_BC_KERNEL_DECLARE(hs_kernel_bc_5),
+#endif
+#if (6 >= HS_BC_WARPS_LOG2_MIN) && (6 <= HS_BC_WARPS_LOG2_MAX)
+    HS_BC_KERNEL_DECLARE(hs_kernel_bc_6),
+#endif
+#if (7 >= HS_BC_WARPS_LOG2_MIN) && (7 <= HS_BC_WARPS_LOG2_MAX)
+    HS_BC_KERNEL_DECLARE(hs_kernel_bc_7),
+#endif
+  };
+
+//
+//
+//
+
+struct hs_fm_kernel
+{
+  cl_kernel        kernel;
+  char     const * name;
+  uint32_t const   log2;
+};
+
+#define HS_FM_KERNEL_DECLARE(n,l) { .name = #n, .log2 = l }
+
+static struct hs_fm_kernel fm_kernels[] =
+  {
+#ifdef HS_FM_BLOCKS_LOG2_0
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_0,HS_FM_BLOCKS_LOG2_0),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_1
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_1,HS_FM_BLOCKS_LOG2_1),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_2
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_2,HS_FM_BLOCKS_LOG2_2),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_3
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_3,HS_FM_BLOCKS_LOG2_3),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_4
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_4,HS_FM_BLOCKS_LOG2_4),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_5
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_5,HS_FM_BLOCKS_LOG2_5),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_6
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_6,HS_FM_BLOCKS_LOG2_6),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_7
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_7,HS_FM_BLOCKS_LOG2_7),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_8
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_8,HS_FM_BLOCKS_LOG2_8),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_9
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_9,HS_FM_BLOCKS_LOG2_9),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_10
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_10,HS_FM_BLOCKS_LOG2_10),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_11
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_11,HS_FM_BLOCKS_LOG2_11),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_12
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_12,HS_FM_BLOCKS_LOG2_12),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_13
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_13,HS_FM_BLOCKS_LOG2_13),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_14
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_14,HS_FM_BLOCKS_LOG2_14),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_15
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_15,HS_FM_BLOCKS_LOG2_15),
+#endif
+#ifdef HS_FM_BLOCKS_LOG2_16
+    HS_FM_KERNEL_DECLARE(hs_kernel_fm_16,HS_FM_BLOCKS_LOG2_16),
+#endif
+  };
+
+//
+//
+//
+
+struct hs_hm_kernel
+{
+  cl_kernel        kernel;
+  char     const * name;
+  uint32_t const   log2;
+};
+
+#define HS_HM_KERNEL_DECLARE(n,l) { .name = #n, .log2 = l }
+
+static struct hs_hm_kernel hm_kernels[] =
+  {
+#ifdef HS_HM_BLOCKS_LOG2_0
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_0,HS_HM_BLOCKS_LOG2_0),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_1
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_1,HS_HM_BLOCKS_LOG2_1),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_2
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_2,HS_HM_BLOCKS_LOG2_2),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_3
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_3,HS_HM_BLOCKS_LOG2_3),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_4
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_4,HS_HM_BLOCKS_LOG2_4),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_5
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_5,HS_HM_BLOCKS_LOG2_5),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_6
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_6,HS_HM_BLOCKS_LOG2_6),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_7
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_7,HS_HM_BLOCKS_LOG2_7),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_8
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_8,HS_HM_BLOCKS_LOG2_8),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_9
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_9,HS_HM_BLOCKS_LOG2_9),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_10
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_10,HS_HM_BLOCKS_LOG2_10),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_11
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_11,HS_HM_BLOCKS_LOG2_11),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_12
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_12,HS_HM_BLOCKS_LOG2_12),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_13
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_13,HS_HM_BLOCKS_LOG2_13),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_14
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_14,HS_HM_BLOCKS_LOG2_14),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_15
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_15,HS_HM_BLOCKS_LOG2_15),
+#endif
+#ifdef HS_HM_BLOCKS_LOG2_16
+    HS_HM_KERNEL_DECLARE(hs_kernel_hm_16,HS_HM_BLOCKS_LOG2_16),
+#endif
+  };
+
+//
+//
+//
+
+static
+void
+hs_barrier(cl_command_queue cq)
+{
+  cl(EnqueueBarrierWithWaitList(cq,0,NULL,NULL));
+}
+
+//
+//
+//
+
+static
+void
+hs_launch_transpose(struct hs_state const * const state,
+                    cl_command_queue              cq,
+                    cl_kernel                     kernel,
+                    size_t                  const global_work_size,
+                    size_t                  const local_work_size)
+{
+  HS_LAUNCH_TRACE(kernel,global_work_size,local_work_size);
+
+  cl(SetKernelArg(kernel,0,sizeof(state->vout),&state->vout));
+
+  cl(EnqueueNDRangeKernel(cq,
+                          kernel,
+                          1,
+                          NULL,
+                          &global_work_size,
+                          &local_work_size,
+                          0,
+                          NULL,
+                          HS_EVENT_NEXT()));
+}
+
+//
+//
+//
+
+static
+void
+hs_launch_bs(struct hs_state const * const state,
+             cl_command_queue              cq,
+             cl_kernel                     kernel_full,
+             cl_kernel                     kernel_frac,
+             size_t                  const global_work_size_full,
+             size_t                  const local_work_size_full,
+             size_t                  const local_work_size_frac)
+
+{
+  HS_LAUNCH_TRACE(kernel_full,global_work_size_full,local_work_size_full);
+  HS_LAUNCH_TRACE(kernel_frac,local_work_size_frac,local_work_size_frac);
+
+  if (kernel_full != NULL)
+    {
+      cl(SetKernelArg(kernel_full,0,sizeof(state->vin), &state->vin));
+      cl(SetKernelArg(kernel_full,1,sizeof(state->vout),&state->vout));
+
+      cl(EnqueueNDRangeKernel(cq,
+                              kernel_full,
+                              1,
+                              NULL,
+                              &global_work_size_full,
+                              &local_work_size_full,
+                              0,
+                              NULL,
+                              HS_EVENT_NEXT()));
+    }
+
+  if (kernel_frac != NULL)
+    {
+      cl(SetKernelArg(kernel_frac,0,sizeof(state->vin), &state->vin));
+      cl(SetKernelArg(kernel_frac,1,sizeof(state->vout),&state->vout));
+
+      cl(EnqueueNDRangeKernel(cq,
+                              kernel_frac,
+                              1,
+                              &global_work_size_full,
+                              &local_work_size_frac,
+                              &local_work_size_frac,
+                              0,
+                              NULL,
+                              HS_EVENT_NEXT()));
+    }
+}
+
+//
+//
+//
+
+static
+void
+hs_launch_bc(struct hs_state const * const state,
+             cl_command_queue              cq,
+             cl_kernel                     kernel,
+             size_t                  const global_work_size,
+             size_t                  const local_work_size)
+{
+  HS_LAUNCH_TRACE(kernel,global_work_size,local_work_size);
+
+  cl(SetKernelArg(kernel,0,sizeof(state->vout),&state->vout));
+
+  cl(EnqueueNDRangeKernel(cq,
+                          kernel,
+                          1,
+                          NULL,
+                          &global_work_size,
+                          &local_work_size,
+                          0,
+                          NULL,
+                          HS_EVENT_NEXT()));
+}
+
+//
+//
+//
+
+static
+void
+hs_launch_fm(struct hs_state const * const state,
+             cl_command_queue              cq,
+             cl_kernel                     kernel,
+             size_t                  const global_work_size)
+{
+  HS_LAUNCH_TRACE(kernel,global_work_size,0);
+
+  cl(SetKernelArg(kernel,0,sizeof(state->vout),   &state->vout));
+  cl(SetKernelArg(kernel,1,sizeof(state->fm.full),&state->fm.full));
+  cl(SetKernelArg(kernel,2,sizeof(state->fm.frac),&state->fm.frac));
+
+  cl(EnqueueNDRangeKernel(cq,
+                          kernel,
+                          1,
+                          NULL,
+                          &global_work_size,
+                          NULL,
+                          0,
+                          NULL,
+                          HS_EVENT_NEXT()));
+}
+
+//
+//
+//
+
+static
+void
+hs_launch_hm(struct hs_state const * const state,
+             cl_command_queue              cq,
+             cl_kernel                     kernel,
+             size_t                  const global_work_size)
+{
+  HS_LAUNCH_TRACE(kernel,global_work_size,0);
+
+  cl(SetKernelArg(kernel,0,sizeof(state->vout),&state->vout));
+
+  cl(EnqueueNDRangeKernel(cq,
+                          kernel,
+                          1,
+                          NULL,
+                          &global_work_size,
+                          NULL,
+                          0,
+                          NULL,
+                          HS_EVENT_NEXT()));
+}
+
+//
+//
+//
+
+static
+void
+hs_transpose_launcher(struct hs_state * const state,
+                      cl_command_queue        cq)
+{
+  // transpose each slab
+  size_t const global_work_size = state->bx.ru * HS_LANES_PER_WARP;
+  size_t const local_work_size  = HS_LANES_PER_WARP; // FIXME -- might not always want to specify this
+
+  hs_launch_transpose(state,
+                      cq,
+                      transpose_kernels[0].kernel,
+                      global_work_size,
+                      local_work_size);
+}
+
+//
+//
+//
+
+static
+void
+hs_bs_launcher(struct hs_state * const state,
+               uint32_t          const warps_in,
+               cl_command_queue        cq)
+{
+  // warps_in is already rounded up
+  uint32_t const full = (warps_in / HS_BS_WARPS) * HS_BS_WARPS;
+  uint32_t const frac = warps_in - full;
+
+  //
+  // FIXME -- launch on different queues
+  //
+  cl_kernel kernel_full = (full == 0) ? NULL : bs_kernels[HS_BS_WARPS_LOG2_RU].kernel;
+  cl_kernel kernel_frac = (frac == 0) ? NULL : bs_kernels[msb_idx_u32(frac)].kernel;
+
+  hs_launch_bs(state,
+               cq,
+               kernel_full,
+               kernel_frac,
+               full        * HS_LANES_PER_WARP,
+               HS_BS_WARPS * HS_LANES_PER_WARP,
+               frac        * HS_LANES_PER_WARP);
+}
+
+//
+//
+//
+
+static
+void
+hs_bc_launcher(struct hs_state * const state,
+               uint32_t          const down_warps,
+               uint32_t          const down_warps_log2,
+               cl_command_queue        cq)
+{
+  // block clean the minimal number of down_warps_log2 spans
+  uint32_t const frac_ru          = (1u << down_warps_log2) - 1;
+  state->bc.full                  = (down_warps + frac_ru) & ~frac_ru;
+
+  // launch block slab sorting grid
+  size_t   const global_work_size = state->bc.full * HS_LANES_PER_WARP;
+  size_t   const local_work_size  = HS_LANES_PER_WARP << down_warps_log2;
+
+  //
+  // we better be capable of cleaning at least two warps !!!
+  //
+  hs_launch_bc(state,
+               cq,
+               bc_kernels[down_warps_log2].kernel,
+               global_work_size,
+               local_work_size);
+}
+
+//
+//
+//
+
+static
+uint32_t
+hs_hm_launcher(struct hs_state * const state,
+               uint32_t          const down_warps,
+               uint32_t          const down_warps_log2_in,
+               cl_command_queue        cq)
+{
+  // how many scaled half-merge spans are there?
+  uint32_t const frac_ru  = (1 << down_warps_log2_in) - 1;
+  uint32_t const spans_ru = (down_warps + frac_ru) >> down_warps_log2_in;
+
+  // get the kernel record
+  struct hs_hm_kernel const * const hm = hm_kernels + down_warps_log2_in - HS_BC_WARPS_LOG2_MAX - 1;
+
+  // how large is the grid?
+  size_t const global_work_size = HS_LANES_PER_WARP * HS_KEYS_PER_LANE * (spans_ru << hm->log2);
+  size_t const local_work_size  = HS_LANES_PER_WARP;
+
+  // launch the hm kernel
+  hs_launch_hm(state,
+               cq,
+               hm->kernel,
+               global_work_size);
+
+  return hm->log2;
+}
+
+//
+// FIXME -- some of this logic can be skipped if BS is a power-of-two
+//
+
+static
+uint32_t
+hs_fm_launcher(struct hs_state * const state,
+               uint32_t          const up_scale_log2,
+               uint32_t        * const down_warps,
+               cl_command_queue        cq)
+{
+  // get the kernel record
+  struct hs_fm_kernel const * const fm = fm_kernels + up_scale_log2 - 1;
+
+  // number of warps in a full-sized scaled flip-merge span
+  uint32_t const full_span_warps = HS_BS_WARPS << up_scale_log2;
+
+  // how many full-sized scaled flip-merge spans are there?
+  state->fm.full = state->bx.ru / full_span_warps;
+  state->fm.frac = 0;
+  
+  // initialize down_warps
+  *down_warps    = state->fm.full * full_span_warps;
+
+  // how many half-size scaled + fractional scaled spans are there?
+  uint32_t const span_rem        = state->bx.ru - state->fm.full * full_span_warps;
+  uint32_t const half_span_warps = full_span_warps >> 1;
+
+  if (span_rem > half_span_warps)
+    {
+      uint32_t const frac_rem      = span_rem - half_span_warps;
+      uint32_t const frac_rem_pow2 = pow2_ru_u32(frac_rem);
+
+      if (frac_rem_pow2 >= half_span_warps) 
+        {
+          *down_warps    += full_span_warps;
+          state->fm.full += 1;      
+        }
+      else
+        {
+          uint32_t const frac_interleaved = frac_rem_pow2 >> fm->log2;
+
+          *down_warps    += half_span_warps + frac_rem_pow2;
+          state->fm.frac  = MAX_MACRO(1,frac_interleaved);
+        }
+    }
+
+  // size the grid
+  uint32_t const spans_frac       = MIN_MACRO(state->fm.frac,1);
+  uint32_t const spans_total      = state->fm.full + spans_frac;
+  uint32_t const scale            = spans_total << fm->log2;
+  size_t   const global_work_size = HS_LANES_PER_WARP * HS_KEYS_PER_LANE * scale;
+  size_t   const local_work_size  = HS_LANES_PER_WARP;
+
+  //
+  // launch the fm kernel
+  //
+  hs_launch_fm(state,
+               cq,
+               fm->kernel,
+               global_work_size);
+
+  return fm->log2;
+}
+
+//
+//
+//
+
+static
+void
+hs_keyset_launcher(cl_mem           mem,
+                   uint32_t   const offset,
+                   uint32_t   const span,
+                   cl_command_queue cq)
+{
+
+
+  //
+  // DOES NOT TEST FOR SPAN = 0
+  //
+  HS_KEY_TYPE const pattern = (HS_KEY_TYPE)-1L;
+
+  cl(EnqueueFillBuffer(cq,
+                       mem,
+                       &pattern,
+                       sizeof(HS_KEY_TYPE),
+                       offset * sizeof(HS_KEY_TYPE),
+                       span   * sizeof(HS_KEY_TYPE),
+                       0,
+                       NULL,
+                       HS_EVENT_NEXT()));
+}
+
+//
+// all grids will be computed as a function of the minimum number of warps
+//
+
+void
+hs_pad(uint32_t   const count,
+       uint32_t * const count_padded_in,
+       uint32_t * const count_padded_out)
+{
+  //
+  // round up the count to warps
+  //
+  uint32_t const warps_ru     = (count + HS_KEYS_PER_WARP - 1) / HS_KEYS_PER_WARP;
+  uint32_t const blocks       = warps_ru / HS_BS_WARPS;
+  uint32_t const warps_mod    = warps_ru % HS_BS_WARPS;
+  uint32_t const warps_mod_ru = MIN_MACRO(pow2_ru_u32(warps_mod),HS_BS_WARPS);
+
+  *count_padded_in  = (blocks * HS_BS_WARPS + warps_mod_ru) * HS_KEYS_PER_WARP;
+  *count_padded_out = *count_padded_in;
+
+  //
+  // more than a single block sort?
+  //
+  if (warps_ru > HS_BS_WARPS)
+    {
+      // more than one block
+      uint32_t const blocks_lo = pow2_rd_u32(blocks);
+      uint32_t const warps_lo  = blocks_lo * HS_BS_WARPS;
+      uint32_t const warps_rem = warps_ru - warps_lo;
+
+      if (warps_rem > 0)
+        {
+          uint32_t const warps_rem_ru     = pow2_ru_u32(warps_rem);
+          uint32_t const warps_hi         = MAX_MACRO(warps_rem_ru,blocks_lo << HS_FM_BLOCKS_LOG2_1);
+          uint32_t const warps_padded_out = MIN_MACRO(warps_lo+warps_hi,warps_lo*2); // clamp non-pow2 blocks
+
+          *count_padded_out = warps_padded_out * HS_KEYS_PER_WARP;
+        }
+    }
+}
+
+//
+//
+//
+
+void
+hs_sort(cl_command_queue cq, // out-of-order cq
+        cl_mem           vin,        
+        cl_mem           vout,
+        uint32_t   const count,
+        uint32_t   const count_padded_in,
+        uint32_t   const count_padded_out,
+        bool       const linearize)
+{
+#ifndef NDEBUG
+  events_count = 0;
+#endif
+
+  //
+  // FIXME -- get rid of this vestigial structure
+  //
+  struct hs_state state = { .vin = vin, .vout = vout };
+
+  // how many rounded-up key slabs are there?
+  state.bx.ru = (count + HS_KEYS_PER_WARP - 1) / HS_KEYS_PER_WARP;
+
+  //
+  // init padding with max-valued keys
+  //
+  bool const split  = state.vout != state.vin; // FIXME -- careful this comparison might not always be correct
+  bool       keyset = false;
+
+  if (!split)
+    {
+      uint32_t const vin_span = count_padded_out - count;
+
+      if (vin_span > 0)
+        {
+          hs_keyset_launcher(state.vin,
+                             count,vin_span,
+                             cq);
+          keyset = true;
+        }
+    }
+  else
+    {
+      uint32_t const vin_span = count_padded_in - count;
+
+      if (vin_span > 0)
+        {
+          hs_keyset_launcher(state.vin,
+                             count,vin_span,
+                             cq);
+          keyset = true;
+        }
+
+      uint32_t const vout_span = count_padded_out - count_padded_in;
+
+      if (vout_span > 0)
+        {
+          hs_keyset_launcher(state.vout,
+                             count_padded_in,vout_span,
+                             cq);
+          keyset = true;
+        }
+    }
+
+  if (keyset)
+    {
+      hs_barrier(cq);
+    }
+
+  //
+  // sort blocks
+  //
+  uint32_t const warps_in = count_padded_in / HS_KEYS_PER_WARP;
+
+  hs_bs_launcher(&state,warps_in,cq);
+
+  hs_barrier(cq);
+
+  //
+  // we're done if only a single bs kernel block was required
+  //
+  if (state.bx.ru > HS_BS_WARPS)
+    {
+      //
+      // otherwise... merge sorted spans of warps until done
+      //
+      uint32_t up_scale_log2 = 1;
+
+      while (true)
+        {
+          uint32_t down_warps;
+
+          // flip merge warps -- return span of warps that must be cleaned
+          uint32_t down_warps_log2 = hs_fm_launcher(&state,
+                                                    up_scale_log2,
+                                                    &down_warps,
+                                                    cq);
+
+          hs_barrier(cq);
+
+          // if span is gt largest slab block cleaner then half merge
+          while (down_warps_log2 > HS_BC_WARPS_LOG2_MAX)
+            {
+              down_warps_log2 = hs_hm_launcher(&state,
+                                               down_warps,
+                                               down_warps_log2,
+                                               cq);
+
+              hs_barrier(cq);
+            }
+
+               // launch clean slab grid -- is it the final launch?
+          hs_bc_launcher(&state,
+                         down_warps,
+                         down_warps_log2,
+                         cq);
+
+          hs_barrier(cq);
+
+          // was this the final block clean?
+          if (((uint32_t)HS_BS_WARPS << up_scale_log2) >= state.bx.ru)
+            break;
+
+          // otherwise, merge twice as many slabs
+          up_scale_log2 += 1;
+        }
+    }
+
+  if (linearize) 
+    {
+      // launch linearize;
+      hs_transpose_launcher(&state,cq);
+
+      hs_barrier(cq);
+    }
+
+  HS_EVENT_PROFILE(cq);
+}
+
+//
+//
+//
+
+void
+hs_create(cl_context             context,
+          cl_device_id           device_id,
+          struct hs_info * const info)
+{
+  //
+  // create and build the program from source or a precompiled binary
+  //
+  if (info != NULL)
+    {
+      info->words = HS_KEY_WORDS;
+      info->keys  = HS_KEYS_PER_LANE;
+      info->lanes = HS_LANES_PER_WARP;
+    }
+
+#if defined( HS_KERNEL_SOURCE )
+
+  cl_int err;
+
+  size_t const   strings_sizeof[] = { sizeof(hs_cl_pre_cl) };
+  char   const * strings[]        = { (char*)hs_cl_pre_cl  };
+
+  cl_program program = clCreateProgramWithSource(context,
+                                                 1,
+                                                 strings,
+                                                 strings_sizeof,
+                                                 &err);
+  cl_ok(err);
+
+  char const * const options =
+    "-cl-std=CL2.0 -cl-fast-relaxed-math "
+    "-cl-no-signed-zeros -cl-mad-enable "
+    "-cl-denorms-are-zero "
+    "-cl-kernel-arg-info";
+
+  cl(BuildProgram(program,
+                  1,
+                  &device_id,
+                  options,
+                  NULL,
+                  NULL));
+
+#elif defined( HS_KERNEL_BINARY )
+
+  cl_int status, err;
+
+  size_t        const   bins_sizeof[] = { sizeof(hs_cl_pre_ir) };
+  unsigned char const * bins[]        = { hs_cl_pre_ir };
+
+  cl_program program = clCreateProgramWithBinary(context,
+                                                 1,
+                                                 &device_id,
+                                                 bins_sizeof,
+                                                 bins,
+                                                 &status,
+                                                 &err);
+  cl_ok(err);
+
+  cl(BuildProgram(program,
+                  1,
+                  &device_id,
+                  NULL,
+                  NULL,
+                  NULL));
+#endif
+
+  //
+  // create all the kernels and release the program
+  //
+#define HS_CREATE_KERNELS(ks)                                   \
+  for (uint32_t ii=0; ii<ARRAY_LENGTH(ks); ii++) {              \
+    ks[ii].kernel = clCreateKernel(program,ks[ii].name,&err);   \
+    cl_ok(err);                                                 \
+  }
+
+  HS_CREATE_KERNELS(bs_kernels);
+  HS_CREATE_KERNELS(bc_kernels);
+  HS_CREATE_KERNELS(fm_kernels);
+  HS_CREATE_KERNELS(hm_kernels);
+  HS_CREATE_KERNELS(transpose_kernels);  
+
+  cl(ReleaseProgram(program));
+}
+
+//
+//
+//
+
+void
+hs_release()
+{
+#define HS_RELEASE_KERNELS(ks)                          \
+  for (uint32_t ii=0; ii<ARRAY_LENGTH(ks); ii++)        \
+    cl(ReleaseKernel(ks[ii].kernel))
+
+  HS_RELEASE_KERNELS(bs_kernels);
+  HS_RELEASE_KERNELS(bc_kernels);
+  HS_RELEASE_KERNELS(fm_kernels);
+  HS_RELEASE_KERNELS(hm_kernels);
+  HS_RELEASE_KERNELS(transpose_kernels);
+}
+
+//
+//
+//
diff --git a/src/compute/hs/cl/hs_cl_launcher.h b/src/compute/hs/cl/hs_cl_launcher.h
new file mode 100644
index 0000000..049657c
--- /dev/null
+++ b/src/compute/hs/cl/hs_cl_launcher.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include <CL/opencl.h>
+#include <stdint.h>
+#include <stdbool.h>
+
+//
+// Returns some useful info about algorithm's configuration for the
+// target architecture.
+//
+
+struct hs_info
+{
+  uint32_t words; // words-per-key (1 = uint, 2 = ulong)
+  uint32_t keys;  // keys-per-lane
+  uint32_t lanes; // lanes-per-warp
+};
+
+//
+//
+//
+
+void
+hs_create(cl_context             context,
+          cl_device_id           device_id,
+          struct hs_info * const info);
+
+//
+//
+//
+
+void
+hs_release();
+
+//
+// Size the buffers.
+//
+
+void
+hs_pad(uint32_t   const count,
+       uint32_t * const count_padded_in,
+       uint32_t * const count_padded_out);
+
+//
+// Sort the keys in the vin buffer and store them in the vout buffer.
+//
+// The vin and vout buffers can be the same buffer.
+//
+// If it is necessary, a barrier should be enqueued before running
+// hs_sort().
+//
+// A final barrier will enqueued before returning.
+//
+
+void
+hs_sort(cl_command_queue cq, // out-of-order cq
+        cl_mem           vin,
+        cl_mem           vout,
+        uint32_t   const count,
+        uint32_t   const count_padded_in,
+        uint32_t   const count_padded_out,
+        bool       const linearize);
+
+//
+//
+//
diff --git a/src/compute/hs/gen/Makefile b/src/compute/hs/gen/Makefile
new file mode 100644
index 0000000..4370f9e
--- /dev/null
+++ b/src/compute/hs/gen/Makefile
@@ -0,0 +1,30 @@
+#

+# Copyright 2016 Google Inc.

+#

+# Use of this source code is governed by a BSD-style license that can

+# be found in the LICENSE file.

+#

+

+#BINS	= hotsort_cuda.cubin hotsort_igp.hsw.ir hotsort_igp.bdw.ir

+#SRCS	= hotsort_cuda.cu    hotsort_igp.hsw.cl hotsort_igp.bdw.cl

+

+GEN_SRCS	= hs_igp.cl hs_igp.h

+GEN_BINS	= hs_igp.ir

+

+#

+#

+#

+

+all:		$(GEN_BINS)

+

+clean:

+		-rm -f $(GEN_SRCS) $(GEN_BINS)

+

+$(GEN_SRCS):

+		..\bin\x64\Debug\hs_gen -a 2 -s 32768 -w 8 -t 2 -b 28 -r 16 -f 1 -F 2 -c 1 -C 2 -z

+		astyle -ns2 $(addprefix ./, $(GEN_SRCS))

+

+

+hs_igp.ir:	hs_igp.cl

+		ioc32 -cmd=build -input=hs_igp.cl -device=gpu

+

diff --git a/src/compute/hs/gen/gen.h b/src/compute/hs/gen/gen.h
new file mode 100644
index 0000000..4043a8d
--- /dev/null
+++ b/src/compute/hs/gen/gen.h
@@ -0,0 +1,312 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include <stdio.h>
+#include <stdint.h>
+
+//
+//
+//
+
+#define MERGE_LEVELS_MAX_LOG2  7                            // merge up to 128 warps
+#define MERGE_LEVELS_MAX_SIZE  (1 << MERGE_LEVELS_MAX_LOG2) // ((1 << MERGE_MAX_LOG2) - 1) // incorrect debug error
+
+//
+//
+//
+
+struct hsg_config
+{
+  struct {
+
+    struct {
+      uint32_t  lo;
+      uint32_t  hi;
+    } flip;
+
+    struct {
+      uint32_t  lo;
+      uint32_t  hi;
+    } half;
+
+    uint32_t    max_log2;
+
+  } merge;
+
+  struct {
+    uint32_t    warps_min;
+    uint32_t    warps_max;
+    uint32_t    warps_mod;
+
+    uint32_t    smem_min;
+    uint32_t    smem_quantum;
+
+    uint32_t    smem_bs;
+    uint32_t    smem_bc;
+  } block;
+
+  struct {
+    uint32_t    lanes;
+    uint32_t    skpw_bs;
+  } warp;
+
+  struct {
+    uint32_t    regs;
+    uint32_t    xtra;
+  } thread;
+
+  struct {
+    uint32_t    words;
+  } type;
+};
+
+//
+//
+//
+
+struct hsg_level
+{
+  uint32_t    count; // networks >= 2
+
+  uint32_t    diffs        [2];
+  uint32_t    diff_masks   [2];
+  uint32_t    evenodds     [2];
+  uint32_t    evenodd_masks[2];
+  uint32_t    networks     [2];
+
+  union {
+    uint64_t  b64;
+    uint32_t  b32a2[2];
+  } active;
+};
+
+
+struct hsg_merge
+{
+  uint32_t         offsets [MERGE_LEVELS_MAX_SIZE];
+  uint32_t         networks[MERGE_LEVELS_MAX_SIZE];
+
+  struct hsg_level levels[MERGE_LEVELS_MAX_LOG2];
+
+  uint32_t         index;
+
+  uint32_t         warps;
+
+  uint32_t         rows_bs;
+  uint32_t         rows_bc;
+
+  uint32_t         skpw_bc;
+};
+
+//
+//
+//
+
+#define HSG_FILE_NAME_SIZE  80
+
+struct hsg_file
+{
+  FILE       * file;
+  char const * prefix;
+  char         name[HSG_FILE_NAME_SIZE];
+};
+
+//
+//
+//
+
+typedef enum hsg_kernel_type {
+
+  HSG_KERNEL_TYPE_SORT_BLOCK,
+
+  HSG_KERNEL_TYPE_COUNT
+
+} hsg_kernel_type;
+
+//
+//
+//
+
+typedef enum hsg_file_type {
+
+  HSG_FILE_TYPE_HEADER,
+  HSG_FILE_TYPE_SOURCE,
+
+  HSG_FILE_TYPE_COUNT
+
+} hsg_file_type;
+
+//
+//
+//
+
+#define HSG_OP_EXPAND_ALL()                                     \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_EXIT)                             \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_END)                              \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BEGIN)                            \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_ELSE)                             \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_FILE_HEADER)                      \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_FILE_FOOTER)                      \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_DUMMY_KERNEL)                     \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_TRANSPOSE_KERNEL_PROTO)           \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_TRANSPOSE_KERNEL_PREAMBLE)        \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_TRANSPOSE_KERNEL_BODY)            \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BS_KERNEL_PROTO)                  \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BS_KERNEL_PREAMBLE)               \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BC_KERNEL_PROTO)                  \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BC_KERNEL_PREAMBLE)               \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_FM_KERNEL_PROTO)                  \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_FM_KERNEL_PREAMBLE)               \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_HM_KERNEL_PROTO)                  \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_HM_KERNEL_PREAMBLE)               \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BX_REG_GLOBAL_LOAD)               \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BX_REG_GLOBAL_STORE)              \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_FM_REG_GLOBAL_LOAD_LEFT)          \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_FM_REG_GLOBAL_STORE_LEFT)         \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_FM_REG_GLOBAL_LOAD_RIGHT)         \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_FM_REG_GLOBAL_STORE_RIGHT)        \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_HM_REG_GLOBAL_LOAD)               \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_HM_REG_GLOBAL_STORE)              \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_WARP_FLIP)                        \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_WARP_HALF)                        \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_CMP_FLIP)                         \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_CMP_HALF)                         \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_CMP_XCHG)                         \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BS_REG_SHARED_STORE_V)            \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BS_REG_SHARED_LOAD_V)             \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BC_REG_SHARED_LOAD_V)             \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BX_REG_SHARED_STORE_LEFT)         \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BS_REG_SHARED_STORE_RIGHT)        \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BS_REG_SHARED_LOAD_LEFT)          \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BS_REG_SHARED_LOAD_RIGHT)         \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BC_REG_GLOBAL_LOAD_LEFT)          \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BLOCK_SYNC)                       \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BS_FRAC_PRED)                     \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BS_MERGE_H_PREAMBLE)              \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BC_MERGE_H_PREAMBLE)              \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BX_MERGE_H_PRED)                  \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_BS_ACTIVE_PRED)                   \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_FM_MERGE_RIGHT_PRED)              \
+                                                                \
+  HSG_OP_EXPAND_X(HSG_OP_TYPE_COUNT)
+
+//
+//
+//
+
+#undef  HSG_OP_EXPAND_X
+#define HSG_OP_EXPAND_X(t) t ,
+
+typedef enum hsg_op_type {
+
+  HSG_OP_EXPAND_ALL()
+
+} hsg_op_type;
+
+//
+//
+//
+
+struct hsg_op
+{
+  hsg_op_type  type;
+
+  union {
+
+    struct {
+      int32_t  a;
+      int32_t  b;
+      int32_t  c;
+    };
+
+    struct {
+      int32_t  n;
+      int32_t  v;
+    };
+
+    struct {
+      int32_t  m;
+      int32_t  w;
+    };
+
+  };
+};
+
+//
+//
+//
+
+typedef void (*hsg_target_pfn)(struct hsg_file        * const files,
+                               struct hsg_merge const * const merge,
+                               struct hsg_op    const * const ops,
+                               uint32_t                 const depth);
+
+//
+//
+//
+
+extern struct hsg_config hsg_config;
+extern struct hsg_merge  hsg_merge[MERGE_LEVELS_MAX_LOG2];
+
+//
+//
+//
+
+extern
+void
+hsg_target_debug    (struct hsg_file        * const files,
+                     struct hsg_merge const * const merge,
+                     struct hsg_op    const * const ops,
+                     uint32_t                 const depth);
+
+extern
+void
+hsg_target_cuda_sm3x(struct hsg_file        * const files,
+                     struct hsg_merge const * const merge,
+                     struct hsg_op    const * const ops,
+                     uint32_t                 const depth);
+
+extern
+void
+hsg_target_igp_genx (struct hsg_file        * const files,
+                     struct hsg_merge const * const merge,
+                     struct hsg_op    const * const ops,
+                     uint32_t                 const depth);
+//
+//
+//
diff --git a/src/compute/hs/gen/main.c b/src/compute/hs/gen/main.c
new file mode 100644
index 0000000..a79c34c
--- /dev/null
+++ b/src/compute/hs/gen/main.c
@@ -0,0 +1,1842 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <stdlib.h>
+#include <stdbool.h>
+#include <string.h>
+#include <getopt.h>
+
+//
+//
+//
+
+#include "networks.h"
+#include "macros.h"
+#include "util.h"
+
+//
+//
+//
+
+#define HSG_INDENT  2
+
+//
+//
+//
+
+#undef  HSG_OP_EXPAND_X
+#define HSG_OP_EXPAND_X(t) #t ,
+
+static
+char const * const
+hsg_op_type_string[] =
+  {
+    HSG_OP_EXPAND_ALL()
+  };
+
+//
+//
+//
+
+#define EXIT()                            (struct hsg_op){ HSG_OP_TYPE_EXIT                                     }
+
+#define END()                             (struct hsg_op){ HSG_OP_TYPE_END                                      }
+#define BEGIN()                           (struct hsg_op){ HSG_OP_TYPE_BEGIN                                    }
+#define ELSE()                            (struct hsg_op){ HSG_OP_TYPE_ELSE                                     }
+
+#define STORE_SLAB_EARLY_EXIT()           (struct hsg_op){ HSG_OP_TYPE_STORE_SLAB_EARLY_EXIT                    }
+
+#define FILE_HEADER()                     (struct hsg_op){ HSG_OP_TYPE_FILE_HEADER                              }
+#define FILE_FOOTER()                     (struct hsg_op){ HSG_OP_TYPE_FILE_FOOTER                              }
+
+#define TRANSPOSE_KERNEL_PROTO()          (struct hsg_op){ HSG_OP_TYPE_TRANSPOSE_KERNEL_PROTO                   }
+#define TRANSPOSE_KERNEL_PREAMBLE()       (struct hsg_op){ HSG_OP_TYPE_TRANSPOSE_KERNEL_PREAMBLE                }
+#define TRANSPOSE_KERNEL_BODY()           (struct hsg_op){ HSG_OP_TYPE_TRANSPOSE_KERNEL_BODY                    }
+
+#define BS_KERNEL_PROTO(i)                (struct hsg_op){ HSG_OP_TYPE_BS_KERNEL_PROTO,             { i       } }
+#define BS_KERNEL_PREAMBLE(i)             (struct hsg_op){ HSG_OP_TYPE_BS_KERNEL_PREAMBLE,          { i       } }
+
+#define BC_KERNEL_PROTO(i)                (struct hsg_op){ HSG_OP_TYPE_BC_KERNEL_PROTO,             { i       } }
+#define BC_KERNEL_PREAMBLE(i)             (struct hsg_op){ HSG_OP_TYPE_BC_KERNEL_PREAMBLE,          { i       } }
+
+#define FM_KERNEL_PROTO(l,s)              (struct hsg_op){ HSG_OP_TYPE_FM_KERNEL_PROTO,             { l, s    } }
+#define FM_KERNEL_PREAMBLE(w,s)           (struct hsg_op){ HSG_OP_TYPE_FM_KERNEL_PREAMBLE,          { w, s    } }
+
+#define HM_KERNEL_PROTO(d,w)              (struct hsg_op){ HSG_OP_TYPE_HM_KERNEL_PROTO,             { d, w    } }
+#define HM_KERNEL_PREAMBLE(w,s)           (struct hsg_op){ HSG_OP_TYPE_HM_KERNEL_PREAMBLE,          { w, s    } }
+
+#define BX_REG_GLOBAL_LOAD(n,v)           (struct hsg_op){ HSG_OP_TYPE_BX_REG_GLOBAL_LOAD,          { n, v    } }
+#define BX_REG_GLOBAL_STORE(n)            (struct hsg_op){ HSG_OP_TYPE_BX_REG_GLOBAL_STORE,         { n       } }
+
+#define FM_REG_GLOBAL_LOAD_LEFT(n,i)      (struct hsg_op){ HSG_OP_TYPE_FM_REG_GLOBAL_LOAD_LEFT,     { n, i    } }
+#define FM_REG_GLOBAL_STORE_LEFT(n,i)     (struct hsg_op){ HSG_OP_TYPE_FM_REG_GLOBAL_STORE_LEFT,    { n, i    } }
+#define FM_REG_GLOBAL_LOAD_RIGHT(n,i)     (struct hsg_op){ HSG_OP_TYPE_FM_REG_GLOBAL_LOAD_RIGHT,    { n, i    } }
+#define FM_REG_GLOBAL_STORE_RIGHT(n,i)    (struct hsg_op){ HSG_OP_TYPE_FM_REG_GLOBAL_STORE_RIGHT,   { n, i    } }
+
+#define HM_REG_GLOBAL_LOAD(n,i)           (struct hsg_op){ HSG_OP_TYPE_HM_REG_GLOBAL_LOAD,          { n, i    } }
+#define HM_REG_GLOBAL_STORE(n,i)          (struct hsg_op){ HSG_OP_TYPE_HM_REG_GLOBAL_STORE,         { n, i    } }
+
+#define WARP_FLIP(f)                      (struct hsg_op){ HSG_OP_TYPE_WARP_FLIP,                   { f       } }
+#define WARP_HALF(h)                      (struct hsg_op){ HSG_OP_TYPE_WARP_HALF,                   { h       } }
+
+#define CMP_FLIP(a,b,c)                   (struct hsg_op){ HSG_OP_TYPE_CMP_FLIP,                    { a, b, c } }
+#define CMP_HALF(a,b)                     (struct hsg_op){ HSG_OP_TYPE_CMP_HALF,                    { a, b    } }
+
+#define CMP_XCHG(a,b,p)                   (struct hsg_op){ HSG_OP_TYPE_CMP_XCHG,                    { a, b, p } }
+
+#define BS_REG_SHARED_STORE_V(m,i,r)      (struct hsg_op){ HSG_OP_TYPE_BS_REG_SHARED_STORE_V,       { m, i, r } }
+#define BS_REG_SHARED_LOAD_V(m,i,r)       (struct hsg_op){ HSG_OP_TYPE_BS_REG_SHARED_LOAD_V,        { m, i, r } }
+#define BC_REG_SHARED_LOAD_V(m,i,r)       (struct hsg_op){ HSG_OP_TYPE_BC_REG_SHARED_LOAD_V,        { m, i, r } }
+
+#define BX_REG_SHARED_STORE_LEFT(r,i,p)   (struct hsg_op){ HSG_OP_TYPE_BX_REG_SHARED_STORE_LEFT,    { r, i, p } }
+#define BS_REG_SHARED_STORE_RIGHT(r,i,p)  (struct hsg_op){ HSG_OP_TYPE_BS_REG_SHARED_STORE_RIGHT,   { r, i, p } }
+
+#define BS_REG_SHARED_LOAD_LEFT(r,i,p)    (struct hsg_op){ HSG_OP_TYPE_BS_REG_SHARED_LOAD_LEFT,     { r, i, p } }
+#define BS_REG_SHARED_LOAD_RIGHT(r,i,p)   (struct hsg_op){ HSG_OP_TYPE_BS_REG_SHARED_LOAD_RIGHT,    { r, i, p } }
+
+#define BC_REG_GLOBAL_LOAD_LEFT(r,i,p)    (struct hsg_op){ HSG_OP_TYPE_BC_REG_GLOBAL_LOAD_LEFT,     { r, i, p } }
+
+#define REG_F_PREAMBLE(s)                 (struct hsg_op){ HSG_OP_TYPE_REG_F_PREAMBLE,              { s       } }
+#define REG_SHARED_STORE_F(r,i,s)         (struct hsg_op){ HSG_OP_TYPE_REG_SHARED_STORE_F,          { r, i, s } }
+#define REG_SHARED_LOAD_F(r,i,s)          (struct hsg_op){ HSG_OP_TYPE_REG_SHARED_LOAD_F,           { r, i, s } }
+#define REG_GLOBAL_STORE_F(r,i,s)         (struct hsg_op){ HSG_OP_TYPE_REG_GLOBAL_STORE_F,          { r, i, s } }
+
+#define BLOCK_SYNC()                      (struct hsg_op){ HSG_OP_TYPE_BLOCK_SYNC                               }
+
+#define BS_FRAC_PRED(m,w)                 (struct hsg_op){ HSG_OP_TYPE_BS_FRAC_PRED,                { m, w    } }
+
+#define BS_MERGE_H_PREAMBLE(i)            (struct hsg_op){ HSG_OP_TYPE_BS_MERGE_H_PREAMBLE,         { i       } }
+#define BC_MERGE_H_PREAMBLE(i)            (struct hsg_op){ HSG_OP_TYPE_BC_MERGE_H_PREAMBLE,         { i       } }
+
+#define BX_MERGE_H_PRED(p)                (struct hsg_op){ HSG_OP_TYPE_BX_MERGE_H_PRED,             { p       } }
+
+#define BS_ACTIVE_PRED(m,l)               (struct hsg_op){ HSG_OP_TYPE_BS_ACTIVE_PRED,              { m, l    } }
+
+#define FM_MERGE_RIGHT_PRED(n,s)          (struct hsg_op){ HSG_OP_TYPE_FM_MERGE_RIGHT_PRED,         { n, s    } }
+
+//
+// DEFAULTS
+//
+
+struct hsg_config hsg_config = // FIXME -- how useful is this?
+  {
+    .merge  = {
+      .flip = {
+        .lo         = 1,
+        .hi         = 1
+      },
+      .half =  {
+        .lo         = 1,
+        .hi         = 1
+      },
+
+      .max_log2     = 27 // 2^27th = 128m
+    },
+
+    .block  = {
+      .warps_min    = 1,          // min warps for a block that uses smem barriers
+      .warps_max    = UINT32_MAX, // max warps for the entire multiprocessor
+      .warps_mod    = 2,          // the number of warps necessary to load balance horizontal merging
+
+      .smem_min     = 0,
+      .smem_quantum = 1,
+
+      .smem_bs      = 49152,
+      .smem_bc      = UINT32_MAX  // implies field not set
+    },
+
+    .warp   = {
+      .lanes        = 32,
+    },
+
+    .thread = {
+      .regs         = 24,
+      .xtra         = 0
+    },
+
+    .type   = {
+      .words        = 2
+    }
+  };
+
+//
+// ZERO HSG_MERGE STRUCT
+//
+
+struct hsg_merge hsg_merge[MERGE_LEVELS_MAX_LOG2] = { 0 };
+
+//
+//
+//
+
+static const hsg_target_pfn hsg_target_pfns[] =
+  {
+    hsg_target_debug,
+    hsg_target_cuda_sm3x,
+    hsg_target_igp_genx,
+    // hsg_target_adreno_5xx,
+    // hsg_target_amd_gcn,
+    // hsg_target_x86_sse,
+    // hsg_target_x86_avx2,
+  };
+
+static const char * hsg_target_pfn_string[] =
+  {
+    "hs_debug",
+    "hs_cuda",
+    "hs_cl"
+  };
+
+static const char * hsg_file_type_string[][2] =
+  {
+    { ".h", ".txt" },
+    { ".h", ".cu"  },
+    { ".h", ".cl"  }
+  };
+
+//
+//
+//
+
+#define HSG_TARGET_PFN_COUNT  ARRAY_LENGTH(hsg_target_pfns)
+
+//
+//
+//
+
+static hsg_op_type hsg_op_type_counts[HSG_OP_TYPE_COUNT] = { 0 };
+
+//
+//
+//
+
+static
+void
+hsg_op_debug()
+{
+  for (hsg_op_type t=HSG_OP_TYPE_EXIT; t<HSG_OP_TYPE_COUNT; t++)
+    fprintf(stderr,"%-37s : %u\n",hsg_op_type_string[t],hsg_op_type_counts[t]);
+}
+
+//
+//
+//
+
+static
+void
+hsg_config_init_shared()
+{
+  //
+  // The assumption here is that a proper smem_bs value was provided
+  // that represents the maximum fraction of the multiprocessor's
+  // available shared memory that can be accessed by the initial block
+  // sorting kernel.
+  //
+  // With CUDA devices this is 48KB out of 48KB, 64KB or 96KB.
+  //
+  // Intel subslices are a little trickier and the minimum allocation
+  // is 4KB and the maximum is 64KB on pre-Skylake IGPs.  Sizes are
+  // allocated in 1KB increments.  If a maximum of two block sorters
+  // can occupy a subslice then each should be assigned 32KB of shared
+  // memory.
+  //
+  // News Flash: apparently GEN9+ IGPs can allocate 1KB of SMEM per
+  // workgroup so all the previously written logic to support this
+  // issue is being removed.
+  //
+  uint32_t const bs_keys = hsg_config.block.smem_bs / (hsg_config.type.words * sizeof(uint32_t));
+
+  hsg_config.warp.skpw_bs = bs_keys / hsg_merge[0].warps;
+}
+
+static
+void
+hsg_merge_levels_init_shared(struct hsg_merge * const merge)
+{
+  {
+    //
+    // What is the max amount of shared in each possible bs block config?
+    //
+    // The provided smem_bs size will be allocated for each sorting block.
+    //
+    uint32_t const bs_threads   = merge->warps * hsg_config.warp.lanes;
+    uint32_t const bs_keys      = hsg_config.block.smem_bs / (hsg_config.type.words * sizeof(uint32_t));
+    uint32_t const bs_kpt       = bs_keys / bs_threads;
+    uint32_t const bs_kpt_mod   = (bs_kpt / hsg_config.block.warps_mod) * hsg_config.block.warps_mod;
+    uint32_t const bs_rows_even = bs_kpt_mod & ~1; // must be even because flip merge only works on row pairs
+
+    // this is a showstopper
+    if (bs_rows_even < 2)
+      {
+        fprintf(stderr,"Error: need at least 2 rows of shared memory.\n");
+        exit(-1);
+      }
+
+    // clamp to number of registers
+    merge->rows_bs = min(bs_rows_even, hsg_config.thread.regs);
+  }
+
+  //
+  // smem key allocation rule for BC kernels is that a single block
+  // can't allocate more than smem_bs and must allocate at least
+  // smem_min in smem_quantum steps.
+  //
+  // Note that BC blocks will always be less than or equal to BS
+  // blocks.
+  //
+  {
+    //
+    // if merge->warps is not pow2 then we're going to skip creating a bc elsewhere
+    //
+    uint32_t const bc_warps_min  = max(merge->warps,hsg_config.block.warps_min);
+    uint32_t const bc_threads    = bc_warps_min * hsg_config.warp.lanes;
+    uint32_t const bc_block_rd   = (((hsg_config.block.smem_bc * bc_warps_min) / hsg_config.block.warps_max) /
+                                    hsg_config.block.smem_quantum) * hsg_config.block.smem_quantum;
+    uint32_t const bc_block_max  = max(bc_block_rd,hsg_config.block.smem_min);
+    uint32_t const bc_block_smem = min(bc_block_max,hsg_config.block.smem_bs);
+
+    // what is the max amount of shared in each possible bc block config?
+    uint32_t const bc_keys       = bc_block_smem / (hsg_config.type.words * sizeof(uint32_t));
+    uint32_t const bc_kpt        = bc_keys / bc_threads;
+    uint32_t const bc_kpt_mod    = (bc_kpt / hsg_config.block.warps_mod) * hsg_config.block.warps_mod;
+
+    merge->rows_bc = min(bc_kpt_mod, hsg_config.thread.regs);
+    merge->skpw_bc = bc_keys / bc_warps_min;
+  }
+}
+
+//
+//
+//
+
+static
+void
+hsg_merge_levels_init_1(struct hsg_merge * const merge, uint32_t const warps, uint32_t const level, uint32_t const offset)
+{
+  uint32_t const even_odd = warps & 1;
+
+  merge->levels[level].evenodds[even_odd]++;
+  merge->levels[level].networks[even_odd] = warps;
+
+  if (warps == 1)
+    return;
+
+  merge->levels[level].active.b64 |= BITS_TO_MASK_AT_64(warps,offset);
+
+  uint32_t const count = merge->levels[level].count++;
+  uint32_t const index = (1 << level) + count;
+  uint32_t const bit   = 1 << count;
+
+  merge->levels[level].evenodd_masks[even_odd] |= bit;
+
+  if (count > 0)
+    {
+      // offset from network to left of this network
+      uint32_t const diff   = offset - merge->offsets[index-1];
+
+      uint32_t const diff_0 = merge->levels[level].diffs[0];
+      uint32_t const diff_1 = merge->levels[level].diffs[1];
+
+      uint32_t diff_idx = UINT32_MAX;
+
+      if        ((diff_0 == 0) || (diff_0 == diff)) {
+        diff_idx = 0;
+      } else if ((diff_1 == 0) || (diff_1 == diff)) {
+        diff_idx = 1;
+      } else {
+        fprintf(stderr, "*** MORE THAN TWO DIFFS ***\n");
+        exit(-1);
+      }
+
+      merge->levels[level].diffs     [diff_idx]  = diff;
+      merge->levels[level].diff_masks[diff_idx] |= 1 << (count-1);
+    }
+
+  merge->networks[index] = warps;
+  merge->offsets [index] = offset;
+
+  uint32_t const l = (warps+1)/2; // lower/larger  on left
+  uint32_t const r = (warps+0)/2; // higher/smaller on right
+
+  hsg_merge_levels_init_1(merge,l,level+1,offset);
+  hsg_merge_levels_init_1(merge,r,level+1,offset+l);
+}
+
+static
+void
+hsg_merge_levels_debug(struct hsg_merge * const merge)
+{
+  for (uint32_t level=0; level<MERGE_LEVELS_MAX_LOG2; level++)
+    {
+      uint32_t count = merge->levels[level].count;
+
+      if (count == 0)
+        break;
+
+      fprintf(stderr,
+              "%-4u : %016llX \n",
+              count,
+              merge->levels[level].active.b64);
+
+      fprintf(stderr,
+              "%-4u : %08X (%2u)\n"
+              "%-4u : %08X (%2u)\n",
+              merge->levels[level].diffs[0],
+              merge->levels[level].diff_masks[0],
+              __popcnt(merge->levels[level].diff_masks[0]),
+              merge->levels[level].diffs[1],
+              merge->levels[level].diff_masks[1],
+              __popcnt(merge->levels[level].diff_masks[1]));
+
+      fprintf(stderr,
+              "EVEN : %08X (%2u)\n"
+              "ODD  : %08X (%2u)\n",
+              merge->levels[level].evenodd_masks[0],
+              __popcnt(merge->levels[level].evenodd_masks[0]),
+              merge->levels[level].evenodd_masks[1],
+              __popcnt(merge->levels[level].evenodd_masks[1]));
+
+      for (uint32_t ii=0; ii<2; ii++)
+        {
+          if (merge->levels[level].networks[ii] > 1)
+            {
+              fprintf(stderr,
+                      "%-4s : ( %2u x %2u )\n",
+                      (ii == 0) ? "EVEN" : "ODD",
+                      merge->levels[level].evenodds[ii],
+                      merge->levels[level].networks[ii]);
+            }
+        }
+
+      uint32_t index = 1 << level;
+
+      while (count-- > 0)
+        {
+          fprintf(stderr,
+                  "[ %2u %2u ] ",
+                  merge->offsets [index],
+                  merge->networks[index]);
+
+          index += 1;
+        }
+
+      fprintf(stderr,"\n\n");
+    }
+}
+
+static
+void
+hsg_merge_levels_hint(struct hsg_merge * const merge, bool const autotune)
+{
+  // clamp against merge levels
+  for (uint32_t level=0; level<MERGE_LEVELS_MAX_LOG2; level++)
+    {
+      // max network
+      uint32_t const n_max = max(merge->levels[level].networks[0],
+                                 merge->levels[level].networks[1]);
+
+      if (n_max <= (merge->rows_bs + hsg_config.thread.xtra))
+        break;
+
+      if (autotune)
+        {
+          hsg_config.thread.xtra = n_max - merge->rows_bs;
+
+          uint32_t const r_total = hsg_config.thread.regs + hsg_config.thread.xtra;
+          uint32_t const r_limit = (hsg_config.type.words == 1) ? 120 : 58;
+
+          if (r_total <= r_limit)
+            {
+              fprintf(stderr,"autotune: %u + %u\n",
+                      hsg_config.thread.regs,
+                      hsg_config.thread.xtra);
+              break;
+            }
+          else
+            {
+              fprintf(stderr,"skipping autotune: %u + %u > %u\n",
+                      hsg_config.thread.regs,
+                      hsg_config.thread.xtra,
+                      r_limit);
+              exit(-1);
+            }
+        }
+
+      fprintf(stderr,"*** HINT *** Try extra registers: %u\n",
+              n_max - merge->rows_bs);
+
+      exit(-1);
+    }
+}
+
+//
+//
+//
+
+static
+struct hsg_op *
+hsg_op(struct hsg_op * ops, struct hsg_op const opcode)
+{
+  hsg_op_type_counts[opcode.type] += 1;
+
+  *ops = opcode;
+
+  return ops+1;
+}
+
+static
+struct hsg_op *
+hsg_exit(struct hsg_op * ops)
+{
+  return hsg_op(ops,EXIT());
+}
+
+static
+struct hsg_op *
+hsg_end(struct hsg_op * ops)
+{
+  return hsg_op(ops,END());
+}
+
+static
+struct hsg_op *
+hsg_begin(struct hsg_op * ops)
+{
+  return hsg_op(ops,BEGIN());
+}
+
+static
+struct hsg_op *
+hsg_else(struct hsg_op * ops)
+{
+  return hsg_op(ops,ELSE());
+}
+
+static
+struct hsg_op *
+hsg_network_copy(struct hsg_op            *       ops,
+                 struct hsg_network const * const nets,
+                 uint32_t                   const idx,
+                 uint32_t                   const prefix)
+{
+  uint32_t              const len = nets[idx].length;
+  struct hsg_op const * const cxa = nets[idx].network;
+
+  for (uint32_t ii=0; ii<len; ii++)
+    {
+      const struct hsg_op * const cx = cxa + ii;
+
+      ops = hsg_op(ops,CMP_XCHG(cx->a,cx->b,prefix));
+    }
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_thread_sort(struct hsg_op * ops)
+{
+  uint32_t const idx = hsg_config.thread.regs / 2 - 1;
+
+  return hsg_network_copy(ops,hsg_networks_sorting,idx,UINT32_MAX);
+}
+
+static
+struct hsg_op *
+hsg_thread_merge_prefix(struct hsg_op * ops, uint32_t const network, uint32_t const prefix)
+{
+  if (network <= 1)
+    return ops;
+
+  return hsg_network_copy(ops,hsg_networks_merging,network-2,prefix);
+}
+
+static
+struct hsg_op *
+hsg_thread_merge(struct hsg_op * ops, uint32_t const network)
+{
+  return hsg_thread_merge_prefix(ops,network,UINT32_MAX);
+}
+
+static
+struct hsg_op *
+hsg_thread_merge_offset_prefix(struct hsg_op * ops, uint32_t const offset, uint32_t const network, uint32_t const prefix)
+{
+  if (network <= 1)
+    return ops;
+
+  uint32_t                  const idx = network - 2;
+  uint32_t                  const len = hsg_networks_merging[idx].length;
+  struct hsg_op const * const cxa = hsg_networks_merging[idx].network;
+
+  for (uint32_t ii=0; ii<len; ii++)
+    {
+      struct hsg_op const * const cx = cxa + ii;
+
+      ops = hsg_op(ops,CMP_XCHG(offset + cx->a,offset + cx->b,prefix));
+    }
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_thread_merge_offset(struct hsg_op * ops, uint32_t const offset, uint32_t const network)
+{
+  return hsg_thread_merge_offset_prefix(ops,offset,network,UINT32_MAX);
+}
+
+static
+struct hsg_op *
+hsg_thread_merge_left_right_prefix(struct hsg_op * ops, uint32_t const left, uint32_t const right, uint32_t const prefix)
+{
+  for (uint32_t l=left,r=left+1; r<=left+right; l--,r++)
+    {
+      ops = hsg_op(ops,CMP_XCHG(l,r,prefix));
+    }
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_thread_merge_left_right(struct hsg_op * ops, uint32_t const left, uint32_t const right)
+{
+  return hsg_thread_merge_left_right_prefix(ops,left,right,UINT32_MAX);
+}
+
+static
+struct hsg_op *
+hsg_warp_half_network(struct hsg_op * ops)
+{
+  uint32_t const n = hsg_config.thread.regs;
+
+  for (uint32_t r=1; r<=n; r++)
+    ops = hsg_op(ops,CMP_HALF(r-1,r));
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_warp_half_downto(struct hsg_op * ops, uint32_t h)
+{
+  //
+  // *** from h: downto[f/2,1)
+  // **** lane_half(h)
+  //
+  for (; h > 1; h/=2)
+    {
+      ops = hsg_begin(ops);
+
+      ops = hsg_op(ops,WARP_HALF(h));
+      ops = hsg_warp_half_network(ops);
+
+      ops = hsg_end(ops);
+    }
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_warp_flip_network(struct hsg_op * ops)
+{
+  uint32_t const n = hsg_config.thread.regs;
+
+  for (uint32_t r=1; r<=n/2; r++)
+    ops = hsg_op(ops,CMP_FLIP(r-1,r,n+1-r));
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_warp_flip(struct hsg_op * ops, uint32_t f)
+{
+  ops = hsg_begin(ops);
+
+  ops = hsg_op(ops,WARP_FLIP(f));
+  ops = hsg_warp_flip_network(ops);
+
+  ops = hsg_end(ops);
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_bx_warp_load(struct hsg_op * ops, const int32_t vin_or_vout)
+{
+  uint32_t const n = hsg_config.thread.regs;
+
+  for (uint32_t r=1; r<=n; r++)
+    ops = hsg_op(ops,BX_REG_GLOBAL_LOAD(r,vin_or_vout));
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_bx_warp_store(struct hsg_op * ops)
+{
+  uint32_t const n = hsg_config.thread.regs;
+
+  for (uint32_t r=1; r<=n; r++)
+    ops = hsg_op(ops,BX_REG_GLOBAL_STORE(r));
+
+  return ops;
+}
+
+//
+//
+//
+
+static
+struct hsg_op *
+hsg_warp_transpose(struct hsg_op * ops)
+{
+  // func proto
+  ops = hsg_op(ops,TRANSPOSE_KERNEL_PROTO());
+
+  // begin
+  ops = hsg_begin(ops);
+
+  // preamble
+  ops = hsg_op(ops,TRANSPOSE_KERNEL_PREAMBLE());
+
+  // load
+  ops = hsg_bx_warp_load(ops,1); // 1 = load from vout[]
+
+  // emit transpose blend and remap macros ...
+  ops = hsg_op(ops,TRANSPOSE_KERNEL_BODY());
+
+  // ... done!
+  ops = hsg_end(ops);
+
+  return ops;
+}
+
+//
+//
+//
+
+static
+struct hsg_op *
+hsg_warp_half(struct hsg_op * ops, uint32_t const h)
+{
+  //
+  // *** from h: downto[f/2,1)
+  // **** lane_half(h)
+  // *** thread_merge
+  //
+  ops = hsg_warp_half_downto(ops,h);
+  ops = hsg_thread_merge(ops,hsg_config.thread.regs);
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_warp_merge(struct hsg_op * ops)
+{
+  //
+  // * from f: upto[2,warp.lanes]
+  // ** lane_flip(f)
+  // *** from h: downto[f/2,1)
+  // **** lane_half(h)
+  // *** thread_merge
+  //
+  uint32_t const level = hsg_config.warp.lanes;
+
+  for (uint32_t f=2; f<=level; f*=2)
+    {
+      ops = hsg_warp_flip(ops,f);
+      ops = hsg_warp_half(ops,f/2);
+    }
+
+  return ops;
+}
+
+//
+//
+//
+
+static
+struct hsg_op *
+hsg_bc_half_merge_level(struct hsg_op          *       ops,
+                        struct hsg_merge const * const merge,
+                        uint32_t                 const r_lo,
+                        uint32_t                 const s_count)
+{
+  // guaranteed to be an even network
+  uint32_t const net_even = merge->levels[0].networks[0];
+
+  // min of warps in block and remaining horizontal rows
+  uint32_t const active = min(s_count, net_even);
+
+  // conditional on blockIdx.x
+  if (active < merge->warps)
+    ops = hsg_op(ops,BX_MERGE_H_PRED(active)); // FIXME BX_MERGE
+
+  // body begin
+  ops = hsg_begin(ops);
+
+  // scale for min block
+  uint32_t const scale = net_even >= hsg_config.block.warps_min ? 1 : hsg_config.block.warps_min / net_even;
+
+  // loop if more smem rows than warps
+  for (uint32_t rr=0; rr<s_count; rr+=active)
+    {
+      // body begin
+      ops = hsg_begin(ops);
+
+      // skip down slab
+      uint32_t const gmem_base = r_lo - 1 + rr;
+
+      // load registers horizontally -- striding across slabs
+      for (uint32_t ll=1; ll<=net_even; ll++)
+        ops = hsg_op(ops,BC_REG_GLOBAL_LOAD_LEFT(ll,gmem_base+(ll-1)*hsg_config.thread.regs,0));
+
+      // merge all registers
+      ops = hsg_thread_merge_prefix(ops,net_even,0);
+
+      // if we're looping then there is a base
+      uint32_t const smem_base = rr * net_even * scale;
+
+      // store all registers
+      for (uint32_t ll=1; ll<=net_even; ll++)
+        ops = hsg_op(ops,BX_REG_SHARED_STORE_LEFT(ll,smem_base+ll-1,0));
+
+      // body end
+      ops = hsg_end(ops);
+    }
+
+  // body end
+  ops = hsg_end(ops);
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_bc_half_merge(struct hsg_op * ops, struct hsg_merge const * const merge)
+{
+  //
+  // will only be called with merge->warps >= 2
+  //
+  uint32_t const warps    = max(merge->warps,hsg_config.block.warps_min);
+
+  // guaranteed to be an even network
+  uint32_t const net_even = merge->levels[0].networks[0];
+
+  // set up left SMEM pointer
+  ops = hsg_op(ops,BC_MERGE_H_PREAMBLE(merge->index));
+
+  // trim to number of warps in block -- FIXME -- try make this a
+  // multiple of local processor count (Intel = 8, NVIDIA = 4)
+  uint32_t const s_max = merge->rows_bc;
+
+  // for all the registers
+  for (uint32_t r_lo = 1; r_lo <= hsg_config.thread.regs; r_lo += s_max)
+    {
+      // compute store count
+      uint32_t const r_rem   = hsg_config.thread.regs + 1 - r_lo;
+      uint32_t const s_count = min(s_max,r_rem);
+
+      // block sync -- can skip if first
+      if (r_lo > 1)
+        ops = hsg_op(ops,BLOCK_SYNC());
+
+      // merge loop
+      ops = hsg_bc_half_merge_level(ops,merge,r_lo,s_count);
+
+      // block sync
+      ops = hsg_op(ops,BLOCK_SYNC());
+
+      // load rows from shared
+      for (uint32_t c=0; c<s_count; c++)
+        ops = hsg_op(ops,BC_REG_SHARED_LOAD_V(warps,r_lo+c,c));
+    }
+
+  return ops;
+}
+
+//
+//
+//
+
+static
+struct hsg_op *
+hsg_bs_flip_merge_level(struct hsg_op          *       ops,
+                        struct hsg_merge const * const merge,
+                        uint32_t                 const level,
+                        uint32_t                 const s_pairs)
+{
+  // 
+  // Note there are a number of ways to flip merge these warps.  There
+  // is a magic number in the merge structure that indicates which
+  // warp to activate as well as what network size to invoke.
+  //
+  // This more complex scheme was used in the past.
+  //
+  // The newest scheme is far dumber/simpler and simply directs a warp
+  // to gather up the network associated with a row and merge them.
+  //
+  // This scheme may use more registers per thread but not all
+  // compilers are high quality.
+  //
+  // If there are more warps than smem row pairs to merge then we
+  // disable the spare warps.
+  //
+  // If there are more row pairs than warps then each warp works on
+  // an equal number of rows.
+  //
+  // Note that it takes two warps to flip merge two smem rows.
+  //
+  // FIXME -- We may want to apply the warp smem "mod" value here to
+  // attempt to balance the load>merge>store operations across the
+  // multiprocessor cores.
+  //
+  // FIXME -- the old scheme attempted to keep all the warps active
+  // but the iteration logic was more complex.  See 2016 checkins.
+  //
+
+  // where are we in computed merge?
+  uint32_t const count  = merge->levels[level].count;
+  uint32_t const index  = 1 << level;
+
+  uint32_t       s_rows = s_pairs * 2;
+  uint32_t       base   = 0;
+  
+  while (s_rows > 0)
+    {
+      uint32_t active = merge->warps;
+
+      // disable warps if necessary
+      if (merge->warps > s_rows) {
+        active = s_rows;
+        ops    = hsg_op(ops,BX_MERGE_H_PRED(active));
+      }
+
+      // body begin
+      ops = hsg_begin(ops);
+
+      // how many equal number of rows to merge?
+      uint32_t loops = s_rows / active;
+
+      // decrement 
+      s_rows -= loops * active;
+
+      for (uint32_t ss=0; ss<loops; ss++)
+        {
+          // load all registers
+          for (uint32_t ii=0; ii<count; ii++)
+            {
+              // body begin
+              ops = hsg_begin(ops);
+
+              uint32_t const offset  = merge->offsets [index+ii];
+              uint32_t const network = merge->networks[index+ii];
+              uint32_t const lo      = (network + 1) / 2;
+
+              for (uint32_t ll=1; ll<=lo; ll++)
+                ops = hsg_op(ops,BS_REG_SHARED_LOAD_LEFT(ll,base+offset+ll-1,ii));
+
+              for (uint32_t rr=lo+1; rr<=network; rr++)
+                ops = hsg_op(ops,BS_REG_SHARED_LOAD_RIGHT(rr,base+offset+rr-1,ii));
+
+              // compare left and right
+              ops = hsg_thread_merge_left_right_prefix(ops,lo,network-lo,ii);
+
+              // right merging network
+              ops = hsg_thread_merge_offset_prefix(ops,lo,network-lo,ii);
+
+              // left merging network
+              ops = hsg_thread_merge_prefix(ops,lo,ii);
+
+              for (uint32_t ll=1; ll<=lo; ll++)
+                ops = hsg_op(ops,BX_REG_SHARED_STORE_LEFT(ll,base+offset+ll-1,ii));
+
+              for (uint32_t rr=lo+1; rr<=network; rr++)
+                ops = hsg_op(ops,BS_REG_SHARED_STORE_RIGHT(rr,base+offset+rr-1,ii));
+
+              // body end
+              ops = hsg_end(ops);
+            }
+
+          base += active * merge->warps;
+        }
+
+      // body end
+      ops = hsg_end(ops);
+    }
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_bs_flip_merge(struct hsg_op * ops, struct hsg_merge const * const merge)
+{
+  // set up horizontal smem pointer
+  ops = hsg_op(ops,BS_MERGE_H_PREAMBLE(merge->index));
+
+  // begin merge
+  uint32_t level = MERGE_LEVELS_MAX_LOG2;
+
+  while (level-- > 0)
+    {
+      uint32_t const count = merge->levels[level].count;
+
+      if (count == 0) 
+        continue;
+
+      uint32_t const r_mid       = hsg_config.thread.regs/2 + 1;
+      uint32_t const s_pairs_max = merge->rows_bs/2; // this is warp mod
+
+      // for all the registers
+      for (uint32_t r_lo=1; r_lo<r_mid; r_lo+=s_pairs_max)
+        {
+          uint32_t r_hi = hsg_config.thread.regs + 1 - r_lo;
+
+          // compute store count
+          uint32_t const s_pairs = min(s_pairs_max,r_mid - r_lo);
+
+          // store rows to shared
+          for (uint32_t c=0; c<s_pairs; c++)
+            {
+              ops = hsg_op(ops,BS_REG_SHARED_STORE_V(merge->index,r_lo+c,c*2+0));
+              ops = hsg_op(ops,BS_REG_SHARED_STORE_V(merge->index,r_hi-c,c*2+1));
+            }
+
+          // block sync
+          ops = hsg_op(ops,BLOCK_SYNC());
+
+          // merge loop
+          ops = hsg_bs_flip_merge_level(ops,merge,level,s_pairs);
+
+          // block sync
+          ops = hsg_op(ops,BLOCK_SYNC());
+
+          // load rows from shared
+          for (uint32_t c=0; c<s_pairs; c++)
+            {
+              ops = hsg_op(ops,BS_REG_SHARED_LOAD_V(merge->index,r_lo+c,c*2+0));
+              ops = hsg_op(ops,BS_REG_SHARED_LOAD_V(merge->index,r_hi-c,c*2+1));
+            }
+        }
+
+      // conditionally clean -- no-op if equal to number of warps/block
+      if (merge->levels[level].active.b64 != BITS_TO_MASK_64(merge->warps))
+        ops = hsg_op(ops,BS_ACTIVE_PRED(merge->index,level));
+
+      // clean warp
+      ops = hsg_begin(ops);
+      ops = hsg_warp_half(ops,hsg_config.warp.lanes);
+      ops = hsg_end(ops);
+    }
+
+  return ops;
+}
+
+/*
+
+//
+// DELETE ME WHEN READY
+//
+
+static
+struct hsg_op *
+hsg_bs_flip_merge_all(struct hsg_op * ops, const struct hsg_merge * const merge)
+{
+  for (uint32_t merge_idx=0; merge_idx<MERGE_LEVELS_MAX_LOG2; merge_idx++)
+    {
+      const struct hsg_merge* const m = merge + merge_idx;
+
+      if (m->warps < 2)
+        break;
+
+      ops = hsg_op(ops,BS_FRAC_PRED(merge_idx,m->warps));
+      ops = hsg_begin(ops);
+      ops = hsg_bs_flip_merge(ops,m);
+      ops = hsg_end(ops);
+    }
+
+  return ops;
+}
+*/
+
+//
+// GENERATE SORT KERNEL
+//
+
+static
+struct hsg_op *
+hsg_bs_sort(struct hsg_op * ops, const struct hsg_merge * const merge)
+{
+  // func proto
+  ops = hsg_op(ops,BS_KERNEL_PROTO(merge->index));
+
+  // begin
+  ops = hsg_begin(ops);
+
+  // shared declare
+  ops = hsg_op(ops,BS_KERNEL_PREAMBLE(merge->index));
+
+  // load
+  ops = hsg_bx_warp_load(ops,0); // 0 = load from vin[]
+
+  // thread sorting network
+  ops = hsg_thread_sort(ops);
+
+  // warp merging network
+  ops = hsg_warp_merge(ops);
+
+  // slab merging network
+  if (merge->warps > 1)
+    ops = hsg_bs_flip_merge(ops,merge);
+
+  // store
+  ops = hsg_bx_warp_store(ops);
+
+  // end
+  ops = hsg_end(ops);
+
+  return ops;
+}
+
+//
+// GENERATE SORT KERNELS
+//
+
+static
+struct hsg_op *
+hsg_bs_sort_all(struct hsg_op * ops)
+{
+  for (uint32_t merge_idx=0; merge_idx<MERGE_LEVELS_MAX_LOG2; merge_idx++)
+    {
+      const struct hsg_merge* const m = hsg_merge + merge_idx;
+
+      if (m->warps == 0)
+        break;
+
+      ops = hsg_bs_sort(ops,m);
+    }
+
+  return ops;
+}
+
+//
+// GENERATE CLEAN KERNEL FOR A POWER-OF-TWO
+//
+
+static
+struct hsg_op *
+hsg_bc_clean(struct hsg_op * ops, const struct hsg_merge * const merge)
+{
+  // func proto
+  ops = hsg_op(ops,BC_KERNEL_PROTO(merge->index));
+
+  // begin
+  ops = hsg_begin(ops);
+
+  // shared declare
+  ops = hsg_op(ops,BC_KERNEL_PREAMBLE(merge->index));
+
+  // if warps == 1 then smem isn't used for merging
+  if (merge->warps == 1)
+    {
+      // load slab directly
+      ops = hsg_bx_warp_load(ops,1); // load from vout[]
+    }
+  else
+    {
+      // block merging network -- strided load of slabs
+      ops = hsg_bc_half_merge(ops,merge);
+    }
+
+  // clean warp
+  ops = hsg_begin(ops);
+  ops = hsg_warp_half(ops,hsg_config.warp.lanes);
+  ops = hsg_end(ops);
+
+  // store
+  ops = hsg_bx_warp_store(ops);
+
+  // end
+  ops = hsg_end(ops);
+
+  return ops;
+}
+
+//
+// GENERATE CLEAN KERNELS
+//
+
+static
+struct hsg_op *
+hsg_bc_clean_all(struct hsg_op * ops)
+{
+  for (uint32_t merge_idx=0; merge_idx<MERGE_LEVELS_MAX_LOG2; merge_idx++)
+    {
+      const struct hsg_merge* const m = hsg_merge + merge_idx;
+
+      if (m->warps == 0)
+        break;
+
+      // only generate pow2 clean kernels less than or equal to max
+      // warps in block with the assumption that we would've generated
+      // a wider sort kernel if we could've so a wider clean kernel
+      // isn't a feasible size
+      if (!is_pow2_u32(m->warps))
+        continue;
+
+      ops = hsg_bc_clean(ops,m);
+    }
+
+  return ops;
+}
+
+//
+// GENERATE FLIP MERGE KERNEL
+//
+
+static
+struct hsg_op *
+hsg_fm_thread_load_left(struct hsg_op * ops, uint32_t const n)
+{
+  uint32_t const mid = n/2;
+
+  for (uint32_t r=1; r<=mid; r++)
+    ops = hsg_op(ops,FM_REG_GLOBAL_LOAD_LEFT(r,r-1));
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_fm_thread_store_left(struct hsg_op * ops, uint32_t const n)
+{
+  uint32_t const mid = n/2;
+
+  for (uint32_t r=mid; r>=1; r--)
+    ops = hsg_op(ops,FM_REG_GLOBAL_STORE_LEFT(r,r-1));
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_fm_thread_load_right(struct hsg_op * ops, uint32_t const n, uint32_t const span_right)
+{
+  uint32_t const mid   = n / 2;
+  uint32_t const first = mid + 1;
+  uint32_t const last  = mid + span_right;
+
+  for (uint32_t r=first; r<=last; r++)
+    ops = hsg_op(ops,FM_REG_GLOBAL_LOAD_RIGHT(r,r-first));
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_fm_thread_store_right(struct hsg_op * ops, uint32_t const n, uint32_t const span_right)
+{
+  uint32_t const mid   = n / 2;
+  uint32_t const first = mid + 1;
+  uint32_t const last  = mid + span_right;
+
+  for (uint32_t r=last; r>=first; r--)
+    ops = hsg_op(ops,FM_REG_GLOBAL_STORE_RIGHT(r,r-first));
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_fm_thread_merge_right(struct hsg_op * ops, uint32_t const n, uint32_t const span_right)
+{
+  // conditional
+  ops = hsg_op(ops,FM_MERGE_RIGHT_PRED(n/2,span_right));
+
+  // begin
+  ops = hsg_begin(ops);
+
+  // load
+  ops = hsg_fm_thread_load_right(ops,n,span_right);
+
+  // compare left and right
+  ops = hsg_thread_merge_left_right(ops,n/2,span_right);
+
+  // right merging network
+  ops = hsg_thread_merge_offset(ops,n/2,span_right);
+
+  // store
+  ops = hsg_fm_thread_store_right(ops,n,span_right);
+
+  // end
+  ops = hsg_end(ops);
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_fm_thread_merge_right_all(struct hsg_op * ops, uint32_t const span)
+{
+  ops = hsg_fm_thread_merge_right(ops,span,span/2);
+
+  for (uint32_t span_pow2 = pow2_ru_u32(span) / 4; span_pow2 >= 1; span_pow2 /= 2)
+    {
+      ops = hsg_fm_thread_merge_right(ops,span,span_pow2);
+    }
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_fm_merge(struct hsg_op * ops, uint32_t const level, uint32_t const span, uint32_t const fm_scale)
+{
+  // func proto
+  ops = hsg_op(ops,FM_KERNEL_PROTO(level,fm_scale));
+
+  // begin
+  ops = hsg_begin(ops);
+
+  // shared declare
+  ops = hsg_op(ops,FM_KERNEL_PREAMBLE(span,fm_scale));
+
+  // load
+  ops = hsg_fm_thread_load_left(ops,span);
+
+  // right merging network
+  ops = hsg_fm_thread_merge_right_all(ops,span);
+
+  // left merging network
+  ops = hsg_thread_merge(ops,span/2);
+
+  // store
+  ops = hsg_fm_thread_store_left(ops,span);
+
+  // end
+  ops = hsg_end(ops);
+
+  return ops;
+}
+
+//
+// GENERATE HALF MERGE KERNELS
+//
+
+static
+struct hsg_op *
+hsg_hm_thread_load(struct hsg_op * ops, uint32_t const n)
+{
+  for (uint32_t r=1; r<=n; r++)
+    ops = hsg_op(ops,HM_REG_GLOBAL_LOAD(r,r-1));
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_hm_thread_store(struct hsg_op * ops, uint32_t const n)
+{
+  for (uint32_t r=n; r>=1; r--)
+    ops = hsg_op(ops,HM_REG_GLOBAL_STORE(r,r-1));
+
+  return ops;
+}
+
+static
+struct hsg_op *
+hsg_hm_merge(struct hsg_op * ops, uint32_t const level, uint32_t const span, uint32_t const hm_scale)
+{
+  // func proto
+  ops = hsg_op(ops,HM_KERNEL_PROTO(level,level-msb_idx_u32(span)));
+
+  // begin
+  ops = hsg_begin(ops);
+
+  // declarations
+  ops = hsg_op(ops,HM_KERNEL_PREAMBLE(span,hm_scale));
+
+  // load
+  ops = hsg_hm_thread_load(ops,span);
+
+  // thread merging network
+  ops = hsg_thread_merge(ops,span);
+
+  // store
+  ops = hsg_hm_thread_store(ops,span);
+
+  // end
+  ops = hsg_end(ops);
+
+  return ops;
+}
+
+//
+//
+//
+
+static
+struct hsg_op *
+hsg_fm_merge_level(struct hsg_op * ops, uint32_t const level)
+{
+  uint32_t const bc_max      = pow2_rd_u32(hsg_merge[0].warps);
+  uint32_t const bc_max_log2 = msb_idx_u32(bc_max);
+
+  uint32_t const fm_level    = (level <= bc_max_log2) ? hsg_config.merge.flip.lo : min(level - bc_max_log2,hsg_config.merge.flip.hi);
+  uint32_t const fm_scale    = level - fm_level;
+
+  ops = hsg_fm_merge(ops,
+                     level,
+                     hsg_merge[0].warps * (1u << fm_level),
+                     fm_scale);
+
+  return ops;
+}
+
+//
+//
+//
+
+static
+struct hsg_op *
+hsg_hm_merge_level(struct hsg_op * ops, uint32_t const level)
+{
+  uint32_t const bc_max      = pow2_rd_u32(hsg_merge[0].warps);
+  uint32_t const bc_max_log2 = msb_idx_u32(bc_max);
+
+  uint32_t const fm_log2_max = bc_max_log2 + hsg_config.merge.flip.hi;
+
+  if (level > fm_log2_max)
+    {
+      uint32_t const down_warps_log2 = level - fm_log2_max;
+      uint32_t const hm_level        = max(hsg_config.merge.half.lo,min(hsg_config.merge.half.hi,down_warps_log2));
+
+      ops = hsg_hm_merge(ops,
+                         level - hsg_config.merge.flip.hi,
+                         bc_max * (1u << hm_level),
+                         down_warps_log2 - hm_level);
+    }
+
+  return ops;
+}
+
+//
+// GENERATE MERGE KERNELS
+//
+
+static
+struct hsg_op *
+hsg_xm_merge_all(struct hsg_op * ops)
+{
+  uint32_t const keys_per_block = hsg_merge[0].warps * hsg_config.warp.lanes * hsg_config.thread.regs;
+  uint32_t const blocks         = ((1U << hsg_config.merge.max_log2) + keys_per_block - 1) / keys_per_block;
+  uint32_t const blocks_ru      = pow2_ru_u32(blocks);
+  uint32_t const blocks_log2    = msb_idx_u32(blocks_ru);
+
+  for (uint32_t level=1; level<=blocks_log2; level+=1)
+    {
+      //
+      // GENERATE FLIP MERGE KERNELS
+      //
+      ops = hsg_fm_merge_level(ops,level);
+
+      //
+      // GENERATE HALF MERGE KERNELS
+      //
+      ops = hsg_hm_merge_level(ops,level);
+    }
+
+  return ops;
+}
+
+//
+//
+//
+
+void
+hsg_target_indent(struct hsg_file * const files, uint32_t const depth)
+{
+  fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+          "%*s",
+          depth*HSG_INDENT,"");
+}
+
+void
+hsg_target_debug(struct hsg_file        * const files,
+                 const struct hsg_merge * const merge,
+                 const struct hsg_op    * const ops,
+                 uint32_t                     const depth)
+{
+
+  hsg_target_indent(files,depth);
+
+  fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+          "%s\n",
+          hsg_op_type_string[ops->type]);
+}
+
+//
+//
+//
+
+static
+struct hsg_file*
+hsg_files_open(const char * prefix, const char ** suffix)
+{
+#define STR_BUF_SIZE 80
+
+  struct hsg_file * files = malloc(sizeof(struct hsg_file) * HSG_FILE_TYPE_COUNT);
+
+  for (int32_t ii=0; ii<HSG_FILE_TYPE_COUNT; ii++)
+    {
+      char * name = files[ii].name;
+
+      // save prefix
+      files[ii].prefix = prefix;
+
+      // build filename
+      strcpy_s(name,STR_BUF_SIZE,prefix);
+      strcat_s(name,STR_BUF_SIZE,suffix[ii]);
+
+      // open file
+      fopen_s(&files[ii].file,name,"w+");
+    }
+
+  return files;
+}
+
+static
+void
+hsg_files_close(struct hsg_file * files)
+{
+  for (int32_t ii=0; ii<HSG_FILE_TYPE_COUNT; ii++)
+    fclose(files[ii].file);
+}
+
+//
+//
+//
+
+static
+const struct hsg_op *
+hsg_op_translate_depth(hsg_target_pfn                 target_pfn,
+                       struct hsg_file        * const files,
+                       const struct hsg_merge * const merge,
+                       const struct hsg_op    *       ops,
+                       uint32_t                     const depth)
+{
+  while (ops->type != HSG_OP_TYPE_EXIT)
+    {
+      switch (ops->type)
+        {
+        case HSG_OP_TYPE_END:
+          target_pfn(files,merge,ops,depth-1);
+          return ops + 1;
+
+        case HSG_OP_TYPE_BEGIN:
+          target_pfn(files,merge,ops,depth);
+          ops = hsg_op_translate_depth(target_pfn,files,merge,ops+1,depth+1);
+          break;
+
+        default:
+          target_pfn(files,merge,ops++,depth);
+        }
+    }
+
+  return ops;
+}
+
+static
+void
+hsg_op_translate(hsg_target_pfn                 target_pfn,
+                 struct hsg_file        * const files,
+                 const struct hsg_merge * const merge,
+                 const struct hsg_op    *       ops)
+{
+  hsg_op_translate_depth(target_pfn,files,merge,ops,0);
+}
+
+//
+//
+//
+
+int
+main(int argc, char * argv[])
+{
+  //
+  // INIT
+  //
+  for (uint32_t ii=0; ii<=MERGE_LEVELS_MAX_LOG2; ii++)
+    {
+      hsg_merge[ii].index = ii;
+      hsg_merge[ii].warps = 32 / (1u << ii);
+    }
+
+  //
+  // PROCESS OPTIONS
+  //
+  int32_t arch     = 0;
+  int32_t opt      = 0;
+
+  bool    quiet    = false;
+  bool    autotune = false;
+
+  while ((opt = getopt(argc,argv,"hqa:g:G:s:S:w:b:B:m:M:k:r:x:t:f:F:c:C:z")) != EOF)
+    {
+      switch (opt)
+        {
+        case 'h':
+          fprintf(stderr,"Help goes here...\n");
+          return -1;
+
+        case 'q':
+          quiet = true;
+          break;
+
+        case 'a':
+          arch = atoi(optarg);
+          break;
+
+        case 'g':
+          hsg_config.block.smem_min = atoi(optarg);
+          break;
+
+        case 'G':
+          hsg_config.block.smem_quantum = atoi(optarg);
+          break;
+
+        case 's':
+          hsg_config.block.smem_bs = atoi(optarg);
+
+          // set smem_bc if not already set
+          if (hsg_config.block.smem_bc == UINT32_MAX)
+            hsg_config.block.smem_bc = hsg_config.block.smem_bs;
+          break;
+
+        case 'S':
+          hsg_config.block.smem_bc = atoi(optarg);
+          break;
+
+        case 'w':
+          hsg_config.warp.lanes = atoi(optarg);
+          break;
+
+        case 'b':
+          // maximum warps in a workgroup / cta / thread block
+          {
+            uint32_t const warps         = atoi(optarg);
+            uint32_t const warps_ru_pow2 = pow2_ru_u32(warps);
+
+            // set warps_max if not already set
+            if (hsg_config.block.warps_max == UINT32_MAX)
+              hsg_config.block.warps_max = warps_ru_pow2;
+
+            // must always be even
+            if ((warps&1) != 0)
+              {
+                fprintf(stderr,"Error: -b must be even.\n");
+                exit(-1);
+              }
+
+            hsg_merge[0].warps = warps;
+
+            for (uint32_t ii=1; ii<=MERGE_LEVELS_MAX_LOG2; ii++)
+              hsg_merge[ii].warps = warps_ru_pow2 / (1u << ii);
+          }
+          break;
+
+        case 'B':
+          // maximum warps that can fit in a multiprocessor
+          hsg_config.block.warps_max = atoi(optarg);
+          break;
+
+        case 'm':
+          // blocks using smem barriers must at least this many warps
+          hsg_config.block.warps_min = atoi(optarg);
+          break;
+
+        case 'M':
+          // the number of warps necessary to load balance horizontal merging
+          hsg_config.block.warps_mod = atoi(optarg);
+          break;
+
+        case 'k':
+          hsg_config.merge.max_log2 = atoi(optarg);
+          break;
+
+        case 'r':
+          {
+            uint32_t const regs = atoi(optarg);
+
+            if ((regs&1) != 0)
+              {
+                fprintf(stderr,"Error: -r must be even.\n");
+                exit(-1);
+              }
+
+            hsg_config.thread.regs = regs;
+          }
+          break;
+
+        case 'x':
+          hsg_config.thread.xtra   = atoi(optarg);
+          break;
+
+        case 't':
+          hsg_config.type.words    = atoi(optarg);
+          break;
+
+        case 'f':
+          hsg_config.merge.flip.lo = atoi(optarg);
+          break;
+
+        case 'F':
+          hsg_config.merge.flip.hi = atoi(optarg);
+          break;
+
+        case 'c':
+          hsg_config.merge.half.lo = atoi(optarg);
+          break;
+
+        case 'C':
+          hsg_config.merge.half.hi = atoi(optarg);
+          break;
+
+        case 'z':
+          autotune = true;
+          break;
+        }
+    }
+
+  //
+  // WHICH ARCH TARGET?
+  //
+  hsg_target_pfn hsg_target_pfn = (arch < HSG_TARGET_PFN_COUNT) ? hsg_target_pfns[arch] : hsg_target_debug;
+
+  //
+  // OPEN FILES
+  //
+  struct hsg_file * files = hsg_files_open(hsg_target_pfn_string[arch],hsg_file_type_string[arch]);
+
+  //
+  // INIT F_KEYS
+  //
+  hsg_config_init_shared();
+
+  //
+  // INIT MERGE MAGIC
+  //
+  for (uint32_t ii=0; ii<MERGE_LEVELS_MAX_LOG2; ii++)
+    {
+      struct hsg_merge * const merge = hsg_merge + ii;
+
+      if (merge->warps == 0)
+        break;
+
+      fprintf(stderr,">>> Generating: %1u %5u %5u %3u %3u ...\n",
+              hsg_config.type.words,
+              hsg_config.block.smem_bs,
+              hsg_config.block.smem_bc,
+              hsg_config.thread.regs,
+              merge->warps);
+
+      hsg_merge_levels_init_shared(merge);
+
+      hsg_merge_levels_init_1(merge,merge->warps,0,0);
+
+      hsg_merge_levels_hint(merge,autotune);
+
+      //
+      // THESE ARE FOR DEBUG/INSPECTION
+      //
+
+      if (!quiet)
+        {
+          hsg_merge_levels_debug(merge);
+        }
+    }
+
+  if (!quiet)
+    fprintf(stderr,"\n\n");
+
+  //
+  //
+  //
+  uint32_t        const op_count  = 1024*1024; // 2^20 ops for now!
+  struct hsg_op * const ops_begin = malloc(op_count * sizeof(*ops_begin));
+  struct hsg_op *       ops       = ops_begin;
+
+  //
+  // APPEND HEADER
+  //
+  ops = hsg_op(ops,FILE_HEADER());
+
+  //
+  // GENERATE TRANSPOSE KERNEL
+  //
+  ops = hsg_warp_transpose(ops);
+
+  //
+  // GENERATE SORT KERNEL
+  //
+  ops = hsg_bs_sort_all(ops);
+
+  //
+  // GENERATE CLEAN KERNELS
+  //
+  ops = hsg_bc_clean_all(ops);
+
+  //
+  // GENERATE MERGE KERNELS
+  //
+  ops = hsg_xm_merge_all(ops);
+
+  //
+  // APPEND FOOTER
+  //
+  ops = hsg_op(ops,FILE_FOOTER());
+
+  //
+  // ... WE'RE DONE!
+  //
+  ops = hsg_exit(ops);
+
+  //
+  // APPLY TARGET TRANSLATOR TO ACCUMULATED OPS
+  //
+  hsg_op_translate(hsg_target_pfn,files,hsg_merge,ops_begin);
+
+  //
+  //
+  //
+  if (!quiet)
+    hsg_op_debug();
+
+  //
+  //
+  //
+  hsg_files_close(files);
+
+  return 0;
+}
+
+//
+//
+//
diff --git a/src/compute/hs/gen/networks.h b/src/compute/hs/gen/networks.h
new file mode 100644
index 0000000..4a71891
--- /dev/null
+++ b/src/compute/hs/gen/networks.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#pragma once
+
+//
+//
+//
+
+#include "gen.h"
+
+//
+//
+//
+
+struct hsg_network
+{
+  uint32_t      const   length;
+  struct hsg_op const * network;
+};
+
+//
+//
+//
+
+extern struct hsg_network const hsg_networks_sorting[];
+extern struct hsg_network const hsg_networks_merging[];
+
+//
+//
+//
diff --git a/src/compute/hs/gen/networks_merging.c b/src/compute/hs/gen/networks_merging.c
new file mode 100644
index 0000000..90dca03
--- /dev/null
+++ b/src/compute/hs/gen/networks_merging.c
@@ -0,0 +1,23708 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+// This file was generated using the odd-merge rule.
+//
+
+#include "networks.h"
+#include "macros.h"
+
+//
+//
+//
+
+#define M(n)   static struct hsg_op const mn##n[]
+#define X(a,b) { HSG_OP_TYPE_CMP_XCHG, { a, b }}
+
+//
+//
+//
+
+#define LM(n)  { ARRAY_LENGTH(mn##n), mn##n }
+
+//
+//
+//
+
+M(2) = {
+  X(1,2)
+};
+M(3) = {
+  X(1,2), X(2,3), X(1,2)
+};
+M(4) = {
+  X(1,3), X(2,4), X(1,2), X(3,4)
+};
+M(5) = {
+  X(1,3), X(3,5), X(1,3), X(2,4), X(2,3), X(4,5), X(1,2), X(3,4)
+};
+M(6) = {
+  X(1,3), X(3,5), X(1,3), X(2,4), X(4,6), X(2,4), X(1,2), X(3,4), X(5,6)
+};
+M(7) = {
+  X(1,5), X(3,7), X(1,3), X(5,7), X(2,4), X(4,6), X(2,4), X(2,3), X(4,5),
+  X(6,7), X(1,2), X(3,4), X(5,6)
+};
+M(8) = {
+  X(1,5), X(3,7), X(1,3), X(5,7), X(2,6), X(4,8), X(2,4), X(6,8), X(1,2),
+  X(3,4), X(5,6), X(7,8)
+};
+M(9) = {
+  X(1,5), X(5,9), X(1,5), X(3,7), X(3,5), X(7,9), X(1,3), X(5,7), X(2,6),
+  X(4,8), X(2,4), X(6,8), X(2,3), X(4,5), X(6,7), X(8,9), X(1,2), X(3,4), X(5,6),
+  X(7,8)
+};
+M(10) = {
+  X(1,5), X(5,9), X(1,5), X(3,7), X(3,5), X(7,9), X(1,3), X(5,7), X(2,6),
+  X(6,10), X(2,6), X(4,8), X(4,6), X(8,10), X(2,4), X(6,8), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10)
+};
+M(11) = {
+  X(1,5), X(5,9), X(1,5), X(3,7), X(7,11), X(3,7), X(1,3), X(5,7), X(9,11),
+  X(2,6), X(6,10), X(2,6), X(4,8), X(4,6), X(8,10), X(2,4), X(6,8), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10)
+};
+M(12) = {
+  X(1,5), X(5,9), X(1,5), X(3,7), X(7,11), X(3,7), X(1,3), X(5,7), X(9,11),
+  X(2,6), X(6,10), X(2,6), X(4,8), X(8,12), X(4,8), X(2,4), X(6,8), X(10,12),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12)
+};
+M(13) = {
+  X(1,9), X(5,13), X(1,5), X(9,13), X(3,7), X(7,11), X(3,7), X(3,5), X(7,9),
+  X(11,13), X(1,3), X(5,7), X(9,11), X(2,6), X(6,10), X(2,6), X(4,8), X(8,12),
+  X(4,8), X(2,4), X(6,8), X(10,12), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12)
+};
+M(14) = {
+  X(1,9), X(5,13), X(1,5), X(9,13), X(3,7), X(7,11), X(3,7), X(3,5), X(7,9),
+  X(11,13), X(1,3), X(5,7), X(9,11), X(2,10), X(6,14), X(2,6), X(10,14), X(4,8),
+  X(8,12), X(4,8), X(4,6), X(8,10), X(12,14), X(2,4), X(6,8), X(10,12), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14)
+};
+M(15) = {
+  X(1,9), X(5,13), X(1,5), X(9,13), X(3,11), X(7,15), X(3,7), X(11,15), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(2,10), X(6,14), X(2,6), X(10,14), X(4,8), X(8,12),
+  X(4,8), X(4,6), X(8,10), X(12,14), X(2,4), X(6,8), X(10,12), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14)
+};
+M(16) = {
+  X(1,9), X(5,13), X(1,5), X(9,13), X(3,11), X(7,15), X(3,7), X(11,15), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(2,10), X(6,14), X(2,6), X(10,14), X(4,12),
+  X(8,16), X(4,8), X(12,16), X(2,4), X(6,8), X(10,12), X(14,16), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16)
+};
+M(17) = {
+  X(1,9), X(9,17), X(1,9), X(5,13), X(5,9), X(13,17), X(1,5), X(9,13), X(3,11),
+  X(7,15), X(3,7), X(11,15), X(3,5), X(7,9), X(11,13), X(15,17), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(2,10), X(6,14), X(2,6), X(10,14), X(4,12), X(8,16),
+  X(4,8), X(12,16), X(2,4), X(6,8), X(10,12), X(14,16), X(2,3), X(4,5), X(6,7),
+  X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16)
+};
+M(18) = {
+  X(1,9), X(9,17), X(1,9), X(5,13), X(5,9), X(13,17), X(1,5), X(9,13), X(3,11),
+  X(7,15), X(3,7), X(11,15), X(3,5), X(7,9), X(11,13), X(15,17), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(2,10), X(10,18), X(2,10), X(6,14), X(6,10), X(14,18),
+  X(2,6), X(10,14), X(4,12), X(8,16), X(4,8), X(12,16), X(4,6), X(8,10),
+  X(12,14), X(16,18), X(2,4), X(6,8), X(10,12), X(14,16), X(1,2), X(3,4), X(5,6),
+  X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18)
+};
+M(19) = {
+  X(1,9), X(9,17), X(1,9), X(5,13), X(5,9), X(13,17), X(1,5), X(9,13), X(3,11),
+  X(11,19), X(3,11), X(7,15), X(7,11), X(15,19), X(3,7), X(11,15), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(2,10), X(10,18), X(2,10), X(6,14),
+  X(6,10), X(14,18), X(2,6), X(10,14), X(4,12), X(8,16), X(4,8), X(12,16),
+  X(4,6), X(8,10), X(12,14), X(16,18), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18)
+};
+M(20) = {
+  X(1,9), X(9,17), X(1,9), X(5,13), X(5,9), X(13,17), X(1,5), X(9,13), X(3,11),
+  X(11,19), X(3,11), X(7,15), X(7,11), X(15,19), X(3,7), X(11,15), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(2,10), X(10,18), X(2,10), X(6,14),
+  X(6,10), X(14,18), X(2,6), X(10,14), X(4,12), X(12,20), X(4,12), X(8,16),
+  X(8,12), X(16,20), X(4,8), X(12,16), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20)
+};
+M(21) = {
+  X(1,9), X(9,17), X(1,9), X(5,13), X(13,21), X(5,13), X(1,5), X(9,13),
+  X(17,21), X(3,11), X(11,19), X(3,11), X(7,15), X(7,11), X(15,19), X(3,7),
+  X(11,15), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(2,10), X(10,18), X(2,10), X(6,14), X(6,10),
+  X(14,18), X(2,6), X(10,14), X(4,12), X(12,20), X(4,12), X(8,16), X(8,12),
+  X(16,20), X(4,8), X(12,16), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20)
+};
+M(22) = {
+  X(1,9), X(9,17), X(1,9), X(5,13), X(13,21), X(5,13), X(1,5), X(9,13),
+  X(17,21), X(3,11), X(11,19), X(3,11), X(7,15), X(7,11), X(15,19), X(3,7),
+  X(11,15), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(2,10), X(10,18), X(2,10), X(6,14), X(14,22),
+  X(6,14), X(2,6), X(10,14), X(18,22), X(4,12), X(12,20), X(4,12), X(8,16),
+  X(8,12), X(16,20), X(4,8), X(12,16), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(1,2), X(3,4), X(5,6),
+  X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22)
+};
+M(23) = {
+  X(1,9), X(9,17), X(1,9), X(5,13), X(13,21), X(5,13), X(1,5), X(9,13),
+  X(17,21), X(3,11), X(11,19), X(3,11), X(7,15), X(15,23), X(7,15), X(3,7),
+  X(11,15), X(19,23), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(2,10), X(10,18), X(2,10), X(6,14), X(14,22), X(6,14), X(2,6), X(10,14),
+  X(18,22), X(4,12), X(12,20), X(4,12), X(8,16), X(8,12), X(16,20), X(4,8),
+  X(12,16), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22)
+};
+M(24) = {
+  X(1,9), X(9,17), X(1,9), X(5,13), X(13,21), X(5,13), X(1,5), X(9,13),
+  X(17,21), X(3,11), X(11,19), X(3,11), X(7,15), X(15,23), X(7,15), X(3,7),
+  X(11,15), X(19,23), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(2,10), X(10,18), X(2,10), X(6,14), X(14,22), X(6,14), X(2,6), X(10,14),
+  X(18,22), X(4,12), X(12,20), X(4,12), X(8,16), X(16,24), X(8,16), X(4,8),
+  X(12,16), X(20,24), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24)
+};
+M(25) = {
+  X(1,17), X(9,25), X(1,9), X(17,25), X(5,13), X(13,21), X(5,13), X(5,9),
+  X(13,17), X(21,25), X(1,5), X(9,13), X(17,21), X(3,11), X(11,19), X(3,11),
+  X(7,15), X(15,23), X(7,15), X(3,7), X(11,15), X(19,23), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(2,10), X(10,18), X(2,10), X(6,14), X(14,22), X(6,14),
+  X(2,6), X(10,14), X(18,22), X(4,12), X(12,20), X(4,12), X(8,16), X(16,24),
+  X(8,16), X(4,8), X(12,16), X(20,24), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24)
+};
+M(26) = {
+  X(1,17), X(9,25), X(1,9), X(17,25), X(5,13), X(13,21), X(5,13), X(5,9),
+  X(13,17), X(21,25), X(1,5), X(9,13), X(17,21), X(3,11), X(11,19), X(3,11),
+  X(7,15), X(15,23), X(7,15), X(3,7), X(11,15), X(19,23), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(2,18), X(10,26), X(2,10), X(18,26), X(6,14), X(14,22),
+  X(6,14), X(6,10), X(14,18), X(22,26), X(2,6), X(10,14), X(18,22), X(4,12),
+  X(12,20), X(4,12), X(8,16), X(16,24), X(8,16), X(4,8), X(12,16), X(20,24),
+  X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26)
+};
+M(27) = {
+  X(1,17), X(9,25), X(1,9), X(17,25), X(5,13), X(13,21), X(5,13), X(5,9),
+  X(13,17), X(21,25), X(1,5), X(9,13), X(17,21), X(3,19), X(11,27), X(3,11),
+  X(19,27), X(7,15), X(15,23), X(7,15), X(7,11), X(15,19), X(23,27), X(3,7),
+  X(11,15), X(19,23), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(2,18), X(10,26), X(2,10), X(18,26), X(6,14), X(14,22), X(6,14),
+  X(6,10), X(14,18), X(22,26), X(2,6), X(10,14), X(18,22), X(4,12), X(12,20),
+  X(4,12), X(8,16), X(16,24), X(8,16), X(4,8), X(12,16), X(20,24), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26)
+};
+M(28) = {
+  X(1,17), X(9,25), X(1,9), X(17,25), X(5,13), X(13,21), X(5,13), X(5,9),
+  X(13,17), X(21,25), X(1,5), X(9,13), X(17,21), X(3,19), X(11,27), X(3,11),
+  X(19,27), X(7,15), X(15,23), X(7,15), X(7,11), X(15,19), X(23,27), X(3,7),
+  X(11,15), X(19,23), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(2,18), X(10,26), X(2,10), X(18,26), X(6,14), X(14,22), X(6,14),
+  X(6,10), X(14,18), X(22,26), X(2,6), X(10,14), X(18,22), X(4,20), X(12,28),
+  X(4,12), X(20,28), X(8,16), X(16,24), X(8,16), X(8,12), X(16,20), X(24,28),
+  X(4,8), X(12,16), X(20,24), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20),
+  X(22,24), X(26,28), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28)
+};
+M(29) = {
+  X(1,17), X(9,25), X(1,9), X(17,25), X(5,21), X(13,29), X(5,13), X(21,29),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(3,19), X(11,27), X(3,11), X(19,27),
+  X(7,15), X(15,23), X(7,15), X(7,11), X(15,19), X(23,27), X(3,7), X(11,15),
+  X(19,23), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(2,18),
+  X(10,26), X(2,10), X(18,26), X(6,14), X(14,22), X(6,14), X(6,10), X(14,18),
+  X(22,26), X(2,6), X(10,14), X(18,22), X(4,20), X(12,28), X(4,12), X(20,28),
+  X(8,16), X(16,24), X(8,16), X(8,12), X(16,20), X(24,28), X(4,8), X(12,16),
+  X(20,24), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28)
+};
+M(30) = {
+  X(1,17), X(9,25), X(1,9), X(17,25), X(5,21), X(13,29), X(5,13), X(21,29),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(3,19), X(11,27), X(3,11), X(19,27),
+  X(7,15), X(15,23), X(7,15), X(7,11), X(15,19), X(23,27), X(3,7), X(11,15),
+  X(19,23), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(2,18),
+  X(10,26), X(2,10), X(18,26), X(6,22), X(14,30), X(6,14), X(22,30), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(4,20), X(12,28), X(4,12), X(20,28), X(8,16),
+  X(16,24), X(8,16), X(8,12), X(16,20), X(24,28), X(4,8), X(12,16), X(20,24),
+  X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30)
+};
+M(31) = {
+  X(1,17), X(9,25), X(1,9), X(17,25), X(5,21), X(13,29), X(5,13), X(21,29),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(3,19), X(11,27), X(3,11), X(19,27),
+  X(7,23), X(15,31), X(7,15), X(23,31), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(2,18), X(10,26), X(2,10), X(18,26), X(6,22), X(14,30), X(6,14), X(22,30),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(4,20), X(12,28), X(4,12), X(20,28),
+  X(8,16), X(16,24), X(8,16), X(8,12), X(16,20), X(24,28), X(4,8), X(12,16),
+  X(20,24), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30)
+};
+M(32) = {
+  X(1,17), X(9,25), X(1,9), X(17,25), X(5,21), X(13,29), X(5,13), X(21,29),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(3,19), X(11,27), X(3,11), X(19,27),
+  X(7,23), X(15,31), X(7,15), X(23,31), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(2,18), X(10,26), X(2,10), X(18,26), X(6,22), X(14,30), X(6,14), X(22,30),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(4,20), X(12,28), X(4,12), X(20,28),
+  X(8,24), X(16,32), X(8,16), X(24,32), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32)
+};
+M(33) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(9,17), X(25,33), X(1,9), X(17,25),
+  X(5,21), X(13,29), X(5,13), X(21,29), X(5,9), X(13,17), X(21,25), X(29,33),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(3,19), X(11,27), X(3,11), X(19,27),
+  X(7,23), X(15,31), X(7,15), X(23,31), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(2,18), X(10,26), X(2,10), X(18,26), X(6,22), X(14,30), X(6,14), X(22,30),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(4,20), X(12,28), X(4,12), X(20,28),
+  X(8,24), X(16,32), X(8,16), X(24,32), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32)
+};
+M(34) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(9,17), X(25,33), X(1,9), X(17,25),
+  X(5,21), X(13,29), X(5,13), X(21,29), X(5,9), X(13,17), X(21,25), X(29,33),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(3,19), X(11,27), X(3,11), X(19,27),
+  X(7,23), X(15,31), X(7,15), X(23,31), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(2,18), X(18,34), X(2,18), X(10,26), X(10,18), X(26,34), X(2,10), X(18,26),
+  X(6,22), X(14,30), X(6,14), X(22,30), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(4,20), X(12,28), X(4,12), X(20,28),
+  X(8,24), X(16,32), X(8,16), X(24,32), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34)
+};
+M(35) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(9,17), X(25,33), X(1,9), X(17,25),
+  X(5,21), X(13,29), X(5,13), X(21,29), X(5,9), X(13,17), X(21,25), X(29,33),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(3,19), X(19,35), X(3,19), X(11,27),
+  X(11,19), X(27,35), X(3,11), X(19,27), X(7,23), X(15,31), X(7,15), X(23,31),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(2,18), X(18,34), X(2,18), X(10,26), X(10,18), X(26,34), X(2,10),
+  X(18,26), X(6,22), X(14,30), X(6,14), X(22,30), X(6,10), X(14,18), X(22,26),
+  X(30,34), X(2,6), X(10,14), X(18,22), X(26,30), X(4,20), X(12,28), X(4,12),
+  X(20,28), X(8,24), X(16,32), X(8,16), X(24,32), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30),
+  X(32,34), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34)
+};
+M(36) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(9,17), X(25,33), X(1,9), X(17,25),
+  X(5,21), X(13,29), X(5,13), X(21,29), X(5,9), X(13,17), X(21,25), X(29,33),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(3,19), X(19,35), X(3,19), X(11,27),
+  X(11,19), X(27,35), X(3,11), X(19,27), X(7,23), X(15,31), X(7,15), X(23,31),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(2,18), X(18,34), X(2,18), X(10,26), X(10,18), X(26,34), X(2,10),
+  X(18,26), X(6,22), X(14,30), X(6,14), X(22,30), X(6,10), X(14,18), X(22,26),
+  X(30,34), X(2,6), X(10,14), X(18,22), X(26,30), X(4,20), X(20,36), X(4,20),
+  X(12,28), X(12,20), X(28,36), X(4,12), X(20,28), X(8,24), X(16,32), X(8,16),
+  X(24,32), X(8,12), X(16,20), X(24,28), X(32,36), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36)
+};
+M(37) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(9,17), X(25,33), X(1,9), X(17,25),
+  X(5,21), X(21,37), X(5,21), X(13,29), X(13,21), X(29,37), X(5,13), X(21,29),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(3,19), X(19,35), X(3,19),
+  X(11,27), X(11,19), X(27,35), X(3,11), X(19,27), X(7,23), X(15,31), X(7,15),
+  X(23,31), X(7,11), X(15,19), X(23,27), X(31,35), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(31,33), X(35,37), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(2,18), X(18,34), X(2,18), X(10,26), X(10,18),
+  X(26,34), X(2,10), X(18,26), X(6,22), X(14,30), X(6,14), X(22,30), X(6,10),
+  X(14,18), X(22,26), X(30,34), X(2,6), X(10,14), X(18,22), X(26,30), X(4,20),
+  X(20,36), X(4,20), X(12,28), X(12,20), X(28,36), X(4,12), X(20,28), X(8,24),
+  X(16,32), X(8,16), X(24,32), X(8,12), X(16,20), X(24,28), X(32,36), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20),
+  X(22,24), X(26,28), X(30,32), X(34,36), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36)
+};
+M(38) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(9,17), X(25,33), X(1,9), X(17,25),
+  X(5,21), X(21,37), X(5,21), X(13,29), X(13,21), X(29,37), X(5,13), X(21,29),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(3,19), X(19,35), X(3,19),
+  X(11,27), X(11,19), X(27,35), X(3,11), X(19,27), X(7,23), X(15,31), X(7,15),
+  X(23,31), X(7,11), X(15,19), X(23,27), X(31,35), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(31,33), X(35,37), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(2,18), X(18,34), X(2,18), X(10,26), X(10,18),
+  X(26,34), X(2,10), X(18,26), X(6,22), X(22,38), X(6,22), X(14,30), X(14,22),
+  X(30,38), X(6,14), X(22,30), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(4,20), X(20,36), X(4,20), X(12,28), X(12,20), X(28,36), X(4,12), X(20,28),
+  X(8,24), X(16,32), X(8,16), X(24,32), X(8,12), X(16,20), X(24,28), X(32,36),
+  X(4,8), X(12,16), X(20,24), X(28,32), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38)
+};
+M(39) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(9,17), X(25,33), X(1,9), X(17,25),
+  X(5,21), X(21,37), X(5,21), X(13,29), X(13,21), X(29,37), X(5,13), X(21,29),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(3,19), X(19,35), X(3,19),
+  X(11,27), X(11,19), X(27,35), X(3,11), X(19,27), X(7,23), X(23,39), X(7,23),
+  X(15,31), X(15,23), X(31,39), X(7,15), X(23,31), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(2,18), X(18,34), X(2,18), X(10,26),
+  X(10,18), X(26,34), X(2,10), X(18,26), X(6,22), X(22,38), X(6,22), X(14,30),
+  X(14,22), X(30,38), X(6,14), X(22,30), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(4,20), X(20,36), X(4,20), X(12,28), X(12,20), X(28,36), X(4,12),
+  X(20,28), X(8,24), X(16,32), X(8,16), X(24,32), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(4,8), X(12,16), X(20,24), X(28,32), X(4,6), X(8,10), X(12,14),
+  X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38)
+};
+M(40) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(9,17), X(25,33), X(1,9), X(17,25),
+  X(5,21), X(21,37), X(5,21), X(13,29), X(13,21), X(29,37), X(5,13), X(21,29),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(3,19), X(19,35), X(3,19),
+  X(11,27), X(11,19), X(27,35), X(3,11), X(19,27), X(7,23), X(23,39), X(7,23),
+  X(15,31), X(15,23), X(31,39), X(7,15), X(23,31), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(2,18), X(18,34), X(2,18), X(10,26),
+  X(10,18), X(26,34), X(2,10), X(18,26), X(6,22), X(22,38), X(6,22), X(14,30),
+  X(14,22), X(30,38), X(6,14), X(22,30), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(4,20), X(20,36), X(4,20), X(12,28), X(12,20), X(28,36), X(4,12),
+  X(20,28), X(8,24), X(24,40), X(8,24), X(16,32), X(16,24), X(32,40), X(8,16),
+  X(24,32), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40)
+};
+M(41) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(25,41), X(9,25), X(1,9), X(17,25),
+  X(33,41), X(5,21), X(21,37), X(5,21), X(13,29), X(13,21), X(29,37), X(5,13),
+  X(21,29), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(3,19), X(19,35), X(3,19), X(11,27), X(11,19),
+  X(27,35), X(3,11), X(19,27), X(7,23), X(23,39), X(7,23), X(15,31), X(15,23),
+  X(31,39), X(7,15), X(23,31), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33),
+  X(35,37), X(39,41), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(2,18), X(18,34), X(2,18), X(10,26),
+  X(10,18), X(26,34), X(2,10), X(18,26), X(6,22), X(22,38), X(6,22), X(14,30),
+  X(14,22), X(30,38), X(6,14), X(22,30), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(4,20), X(20,36), X(4,20), X(12,28), X(12,20), X(28,36), X(4,12),
+  X(20,28), X(8,24), X(24,40), X(8,24), X(16,32), X(16,24), X(32,40), X(8,16),
+  X(24,32), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33),
+  X(34,35), X(36,37), X(38,39), X(40,41), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40)
+};
+M(42) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(25,41), X(9,25), X(1,9), X(17,25),
+  X(33,41), X(5,21), X(21,37), X(5,21), X(13,29), X(13,21), X(29,37), X(5,13),
+  X(21,29), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(3,19), X(19,35), X(3,19), X(11,27), X(11,19),
+  X(27,35), X(3,11), X(19,27), X(7,23), X(23,39), X(7,23), X(15,31), X(15,23),
+  X(31,39), X(7,15), X(23,31), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33),
+  X(35,37), X(39,41), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(2,18), X(18,34), X(2,18), X(10,26),
+  X(26,42), X(10,26), X(2,10), X(18,26), X(34,42), X(6,22), X(22,38), X(6,22),
+  X(14,30), X(14,22), X(30,38), X(6,14), X(22,30), X(6,10), X(14,18), X(22,26),
+  X(30,34), X(38,42), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(4,20),
+  X(20,36), X(4,20), X(12,28), X(12,20), X(28,36), X(4,12), X(20,28), X(8,24),
+  X(24,40), X(8,24), X(16,32), X(16,24), X(32,40), X(8,16), X(24,32), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42)
+};
+M(43) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(25,41), X(9,25), X(1,9), X(17,25),
+  X(33,41), X(5,21), X(21,37), X(5,21), X(13,29), X(13,21), X(29,37), X(5,13),
+  X(21,29), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(3,19), X(19,35), X(3,19), X(11,27), X(27,43),
+  X(11,27), X(3,11), X(19,27), X(35,43), X(7,23), X(23,39), X(7,23), X(15,31),
+  X(15,23), X(31,39), X(7,15), X(23,31), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(2,18), X(18,34), X(2,18), X(10,26), X(26,42), X(10,26), X(2,10),
+  X(18,26), X(34,42), X(6,22), X(22,38), X(6,22), X(14,30), X(14,22), X(30,38),
+  X(6,14), X(22,30), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(4,20), X(20,36), X(4,20), X(12,28),
+  X(12,20), X(28,36), X(4,12), X(20,28), X(8,24), X(24,40), X(8,24), X(16,32),
+  X(16,24), X(32,40), X(8,16), X(24,32), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30),
+  X(32,34), X(36,38), X(40,42), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20),
+  X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(2,3), X(4,5), X(6,7),
+  X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23),
+  X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39),
+  X(40,41), X(42,43), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42)
+};
+M(44) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(25,41), X(9,25), X(1,9), X(17,25),
+  X(33,41), X(5,21), X(21,37), X(5,21), X(13,29), X(13,21), X(29,37), X(5,13),
+  X(21,29), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(3,19), X(19,35), X(3,19), X(11,27), X(27,43),
+  X(11,27), X(3,11), X(19,27), X(35,43), X(7,23), X(23,39), X(7,23), X(15,31),
+  X(15,23), X(31,39), X(7,15), X(23,31), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(2,18), X(18,34), X(2,18), X(10,26), X(26,42), X(10,26), X(2,10),
+  X(18,26), X(34,42), X(6,22), X(22,38), X(6,22), X(14,30), X(14,22), X(30,38),
+  X(6,14), X(22,30), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(4,20), X(20,36), X(4,20), X(12,28),
+  X(28,44), X(12,28), X(4,12), X(20,28), X(36,44), X(8,24), X(24,40), X(8,24),
+  X(16,32), X(16,24), X(32,40), X(8,16), X(24,32), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44)
+};
+M(45) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(25,41), X(9,25), X(1,9), X(17,25),
+  X(33,41), X(5,21), X(21,37), X(5,21), X(13,29), X(29,45), X(13,29), X(5,13),
+  X(21,29), X(37,45), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(3,19), X(19,35), X(3,19), X(11,27), X(27,43), X(11,27), X(3,11), X(19,27),
+  X(35,43), X(7,23), X(23,39), X(7,23), X(15,31), X(15,23), X(31,39), X(7,15),
+  X(23,31), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21),
+  X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(2,18), X(18,34), X(2,18), X(10,26), X(26,42), X(10,26), X(2,10),
+  X(18,26), X(34,42), X(6,22), X(22,38), X(6,22), X(14,30), X(14,22), X(30,38),
+  X(6,14), X(22,30), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(4,20), X(20,36), X(4,20), X(12,28),
+  X(28,44), X(12,28), X(4,12), X(20,28), X(36,44), X(8,24), X(24,40), X(8,24),
+  X(16,32), X(16,24), X(32,40), X(8,16), X(24,32), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44)
+};
+M(46) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(25,41), X(9,25), X(1,9), X(17,25),
+  X(33,41), X(5,21), X(21,37), X(5,21), X(13,29), X(29,45), X(13,29), X(5,13),
+  X(21,29), X(37,45), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(3,19), X(19,35), X(3,19), X(11,27), X(27,43), X(11,27), X(3,11), X(19,27),
+  X(35,43), X(7,23), X(23,39), X(7,23), X(15,31), X(15,23), X(31,39), X(7,15),
+  X(23,31), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21),
+  X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(2,18), X(18,34), X(2,18), X(10,26), X(26,42), X(10,26), X(2,10),
+  X(18,26), X(34,42), X(6,22), X(22,38), X(6,22), X(14,30), X(30,46), X(14,30),
+  X(6,14), X(22,30), X(38,46), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(4,20), X(20,36), X(4,20), X(12,28), X(28,44), X(12,28), X(4,12),
+  X(20,28), X(36,44), X(8,24), X(24,40), X(8,24), X(16,32), X(16,24), X(32,40),
+  X(8,16), X(24,32), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46)
+};
+M(47) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(25,41), X(9,25), X(1,9), X(17,25),
+  X(33,41), X(5,21), X(21,37), X(5,21), X(13,29), X(29,45), X(13,29), X(5,13),
+  X(21,29), X(37,45), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(3,19), X(19,35), X(3,19), X(11,27), X(27,43), X(11,27), X(3,11), X(19,27),
+  X(35,43), X(7,23), X(23,39), X(7,23), X(15,31), X(31,47), X(15,31), X(7,15),
+  X(23,31), X(39,47), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(2,18), X(18,34), X(2,18), X(10,26),
+  X(26,42), X(10,26), X(2,10), X(18,26), X(34,42), X(6,22), X(22,38), X(6,22),
+  X(14,30), X(30,46), X(14,30), X(6,14), X(22,30), X(38,46), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(4,20), X(20,36), X(4,20), X(12,28),
+  X(28,44), X(12,28), X(4,12), X(20,28), X(36,44), X(8,24), X(24,40), X(8,24),
+  X(16,32), X(16,24), X(32,40), X(8,16), X(24,32), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(2,3), X(4,5), X(6,7),
+  X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23),
+  X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39),
+  X(40,41), X(42,43), X(44,45), X(46,47), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46)
+};
+M(48) = {
+  X(1,17), X(17,33), X(1,17), X(9,25), X(25,41), X(9,25), X(1,9), X(17,25),
+  X(33,41), X(5,21), X(21,37), X(5,21), X(13,29), X(29,45), X(13,29), X(5,13),
+  X(21,29), X(37,45), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(3,19), X(19,35), X(3,19), X(11,27), X(27,43), X(11,27), X(3,11), X(19,27),
+  X(35,43), X(7,23), X(23,39), X(7,23), X(15,31), X(31,47), X(15,31), X(7,15),
+  X(23,31), X(39,47), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(2,18), X(18,34), X(2,18), X(10,26),
+  X(26,42), X(10,26), X(2,10), X(18,26), X(34,42), X(6,22), X(22,38), X(6,22),
+  X(14,30), X(30,46), X(14,30), X(6,14), X(22,30), X(38,46), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(4,20), X(20,36), X(4,20), X(12,28),
+  X(28,44), X(12,28), X(4,12), X(20,28), X(36,44), X(8,24), X(24,40), X(8,24),
+  X(16,32), X(32,48), X(16,32), X(8,16), X(24,32), X(40,48), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48)
+};
+M(49) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,25), X(25,41), X(9,25), X(9,17),
+  X(25,33), X(41,49), X(1,9), X(17,25), X(33,41), X(5,21), X(21,37), X(5,21),
+  X(13,29), X(29,45), X(13,29), X(5,13), X(21,29), X(37,45), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(1,5), X(9,13), X(17,21), X(25,29),
+  X(33,37), X(41,45), X(3,19), X(19,35), X(3,19), X(11,27), X(27,43), X(11,27),
+  X(3,11), X(19,27), X(35,43), X(7,23), X(23,39), X(7,23), X(15,31), X(31,47),
+  X(15,31), X(7,15), X(23,31), X(39,47), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(2,18), X(18,34), X(2,18), X(10,26), X(26,42), X(10,26),
+  X(2,10), X(18,26), X(34,42), X(6,22), X(22,38), X(6,22), X(14,30), X(30,46),
+  X(14,30), X(6,14), X(22,30), X(38,46), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(4,20), X(20,36), X(4,20), X(12,28), X(28,44), X(12,28),
+  X(4,12), X(20,28), X(36,44), X(8,24), X(24,40), X(8,24), X(16,32), X(32,48),
+  X(16,32), X(8,16), X(24,32), X(40,48), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48)
+};
+M(50) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,25), X(25,41), X(9,25), X(9,17),
+  X(25,33), X(41,49), X(1,9), X(17,25), X(33,41), X(5,21), X(21,37), X(5,21),
+  X(13,29), X(29,45), X(13,29), X(5,13), X(21,29), X(37,45), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(1,5), X(9,13), X(17,21), X(25,29),
+  X(33,37), X(41,45), X(3,19), X(19,35), X(3,19), X(11,27), X(27,43), X(11,27),
+  X(3,11), X(19,27), X(35,43), X(7,23), X(23,39), X(7,23), X(15,31), X(31,47),
+  X(15,31), X(7,15), X(23,31), X(39,47), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(2,34), X(18,50), X(2,18), X(34,50), X(10,26), X(26,42),
+  X(10,26), X(10,18), X(26,34), X(42,50), X(2,10), X(18,26), X(34,42), X(6,22),
+  X(22,38), X(6,22), X(14,30), X(30,46), X(14,30), X(6,14), X(22,30), X(38,46),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(4,20), X(20,36), X(4,20), X(12,28),
+  X(28,44), X(12,28), X(4,12), X(20,28), X(36,44), X(8,24), X(24,40), X(8,24),
+  X(16,32), X(32,48), X(16,32), X(8,16), X(24,32), X(40,48), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(34,36), X(38,40), X(42,44), X(46,48), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50)
+};
+M(51) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,25), X(25,41), X(9,25), X(9,17),
+  X(25,33), X(41,49), X(1,9), X(17,25), X(33,41), X(5,21), X(21,37), X(5,21),
+  X(13,29), X(29,45), X(13,29), X(5,13), X(21,29), X(37,45), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(1,5), X(9,13), X(17,21), X(25,29),
+  X(33,37), X(41,45), X(3,35), X(19,51), X(3,19), X(35,51), X(11,27), X(27,43),
+  X(11,27), X(11,19), X(27,35), X(43,51), X(3,11), X(19,27), X(35,43), X(7,23),
+  X(23,39), X(7,23), X(15,31), X(31,47), X(15,31), X(7,15), X(23,31), X(39,47),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(2,34), X(18,50), X(2,18), X(34,50), X(10,26), X(26,42), X(10,26),
+  X(10,18), X(26,34), X(42,50), X(2,10), X(18,26), X(34,42), X(6,22), X(22,38),
+  X(6,22), X(14,30), X(30,46), X(14,30), X(6,14), X(22,30), X(38,46), X(6,10),
+  X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(4,20), X(20,36), X(4,20), X(12,28), X(28,44),
+  X(12,28), X(4,12), X(20,28), X(36,44), X(8,24), X(24,40), X(8,24), X(16,32),
+  X(32,48), X(16,32), X(8,16), X(24,32), X(40,48), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50)
+};
+M(52) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,25), X(25,41), X(9,25), X(9,17),
+  X(25,33), X(41,49), X(1,9), X(17,25), X(33,41), X(5,21), X(21,37), X(5,21),
+  X(13,29), X(29,45), X(13,29), X(5,13), X(21,29), X(37,45), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(1,5), X(9,13), X(17,21), X(25,29),
+  X(33,37), X(41,45), X(3,35), X(19,51), X(3,19), X(35,51), X(11,27), X(27,43),
+  X(11,27), X(11,19), X(27,35), X(43,51), X(3,11), X(19,27), X(35,43), X(7,23),
+  X(23,39), X(7,23), X(15,31), X(31,47), X(15,31), X(7,15), X(23,31), X(39,47),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(2,34), X(18,50), X(2,18), X(34,50), X(10,26), X(26,42), X(10,26),
+  X(10,18), X(26,34), X(42,50), X(2,10), X(18,26), X(34,42), X(6,22), X(22,38),
+  X(6,22), X(14,30), X(30,46), X(14,30), X(6,14), X(22,30), X(38,46), X(6,10),
+  X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(4,36), X(20,52), X(4,20), X(36,52), X(12,28),
+  X(28,44), X(12,28), X(12,20), X(28,36), X(44,52), X(4,12), X(20,28), X(36,44),
+  X(8,24), X(24,40), X(8,24), X(16,32), X(32,48), X(16,32), X(8,16), X(24,32),
+  X(40,48), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52)
+};
+M(53) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,25), X(25,41), X(9,25), X(9,17),
+  X(25,33), X(41,49), X(1,9), X(17,25), X(33,41), X(5,37), X(21,53), X(5,21),
+  X(37,53), X(13,29), X(29,45), X(13,29), X(13,21), X(29,37), X(45,53), X(5,13),
+  X(21,29), X(37,45), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(3,35), X(19,51), X(3,19), X(35,51), X(11,27), X(27,43), X(11,27),
+  X(11,19), X(27,35), X(43,51), X(3,11), X(19,27), X(35,43), X(7,23), X(23,39),
+  X(7,23), X(15,31), X(31,47), X(15,31), X(7,15), X(23,31), X(39,47), X(7,11),
+  X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21),
+  X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(2,34), X(18,50), X(2,18),
+  X(34,50), X(10,26), X(26,42), X(10,26), X(10,18), X(26,34), X(42,50), X(2,10),
+  X(18,26), X(34,42), X(6,22), X(22,38), X(6,22), X(14,30), X(30,46), X(14,30),
+  X(6,14), X(22,30), X(38,46), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42),
+  X(46,50), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(4,36),
+  X(20,52), X(4,20), X(36,52), X(12,28), X(28,44), X(12,28), X(12,20), X(28,36),
+  X(44,52), X(4,12), X(20,28), X(36,44), X(8,24), X(24,40), X(8,24), X(16,32),
+  X(32,48), X(16,32), X(8,16), X(24,32), X(40,48), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52)
+};
+M(54) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,25), X(25,41), X(9,25), X(9,17),
+  X(25,33), X(41,49), X(1,9), X(17,25), X(33,41), X(5,37), X(21,53), X(5,21),
+  X(37,53), X(13,29), X(29,45), X(13,29), X(13,21), X(29,37), X(45,53), X(5,13),
+  X(21,29), X(37,45), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(3,35), X(19,51), X(3,19), X(35,51), X(11,27), X(27,43), X(11,27),
+  X(11,19), X(27,35), X(43,51), X(3,11), X(19,27), X(35,43), X(7,23), X(23,39),
+  X(7,23), X(15,31), X(31,47), X(15,31), X(7,15), X(23,31), X(39,47), X(7,11),
+  X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21),
+  X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(2,34), X(18,50), X(2,18),
+  X(34,50), X(10,26), X(26,42), X(10,26), X(10,18), X(26,34), X(42,50), X(2,10),
+  X(18,26), X(34,42), X(6,38), X(22,54), X(6,22), X(38,54), X(14,30), X(30,46),
+  X(14,30), X(14,22), X(30,38), X(46,54), X(6,14), X(22,30), X(38,46), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(4,36), X(20,52),
+  X(4,20), X(36,52), X(12,28), X(28,44), X(12,28), X(12,20), X(28,36), X(44,52),
+  X(4,12), X(20,28), X(36,44), X(8,24), X(24,40), X(8,24), X(16,32), X(32,48),
+  X(16,32), X(8,16), X(24,32), X(40,48), X(8,12), X(16,20), X(24,28), X(32,36),
+  X(40,44), X(48,52), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48),
+  X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34),
+  X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54)
+};
+M(55) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,25), X(25,41), X(9,25), X(9,17),
+  X(25,33), X(41,49), X(1,9), X(17,25), X(33,41), X(5,37), X(21,53), X(5,21),
+  X(37,53), X(13,29), X(29,45), X(13,29), X(13,21), X(29,37), X(45,53), X(5,13),
+  X(21,29), X(37,45), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(3,35), X(19,51), X(3,19), X(35,51), X(11,27), X(27,43), X(11,27),
+  X(11,19), X(27,35), X(43,51), X(3,11), X(19,27), X(35,43), X(7,39), X(23,55),
+  X(7,23), X(39,55), X(15,31), X(31,47), X(15,31), X(15,23), X(31,39), X(47,55),
+  X(7,15), X(23,31), X(39,47), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(2,34), X(18,50), X(2,18), X(34,50), X(10,26), X(26,42), X(10,26), X(10,18),
+  X(26,34), X(42,50), X(2,10), X(18,26), X(34,42), X(6,38), X(22,54), X(6,22),
+  X(38,54), X(14,30), X(30,46), X(14,30), X(14,22), X(30,38), X(46,54), X(6,14),
+  X(22,30), X(38,46), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46),
+  X(50,54), X(4,36), X(20,52), X(4,20), X(36,52), X(12,28), X(28,44), X(12,28),
+  X(12,20), X(28,36), X(44,52), X(4,12), X(20,28), X(36,44), X(8,24), X(24,40),
+  X(8,24), X(16,32), X(32,48), X(16,32), X(8,16), X(24,32), X(40,48), X(8,12),
+  X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(2,3), X(4,5), X(6,7),
+  X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23),
+  X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39),
+  X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54)
+};
+M(56) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,25), X(25,41), X(9,25), X(9,17),
+  X(25,33), X(41,49), X(1,9), X(17,25), X(33,41), X(5,37), X(21,53), X(5,21),
+  X(37,53), X(13,29), X(29,45), X(13,29), X(13,21), X(29,37), X(45,53), X(5,13),
+  X(21,29), X(37,45), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(3,35), X(19,51), X(3,19), X(35,51), X(11,27), X(27,43), X(11,27),
+  X(11,19), X(27,35), X(43,51), X(3,11), X(19,27), X(35,43), X(7,39), X(23,55),
+  X(7,23), X(39,55), X(15,31), X(31,47), X(15,31), X(15,23), X(31,39), X(47,55),
+  X(7,15), X(23,31), X(39,47), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(2,34), X(18,50), X(2,18), X(34,50), X(10,26), X(26,42), X(10,26), X(10,18),
+  X(26,34), X(42,50), X(2,10), X(18,26), X(34,42), X(6,38), X(22,54), X(6,22),
+  X(38,54), X(14,30), X(30,46), X(14,30), X(14,22), X(30,38), X(46,54), X(6,14),
+  X(22,30), X(38,46), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46),
+  X(50,54), X(4,36), X(20,52), X(4,20), X(36,52), X(12,28), X(28,44), X(12,28),
+  X(12,20), X(28,36), X(44,52), X(4,12), X(20,28), X(36,44), X(8,40), X(24,56),
+  X(8,24), X(40,56), X(16,32), X(32,48), X(16,32), X(16,24), X(32,40), X(48,56),
+  X(8,16), X(24,32), X(40,48), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56)
+};
+M(57) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,41), X(25,57), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(21,53), X(5,21), X(37,53),
+  X(13,29), X(29,45), X(13,29), X(13,21), X(29,37), X(45,53), X(5,13), X(21,29),
+  X(37,45), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(3,35),
+  X(19,51), X(3,19), X(35,51), X(11,27), X(27,43), X(11,27), X(11,19), X(27,35),
+  X(43,51), X(3,11), X(19,27), X(35,43), X(7,39), X(23,55), X(7,23), X(39,55),
+  X(15,31), X(31,47), X(15,31), X(15,23), X(31,39), X(47,55), X(7,15), X(23,31),
+  X(39,47), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33),
+  X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(2,34), X(18,50), X(2,18), X(34,50),
+  X(10,26), X(26,42), X(10,26), X(10,18), X(26,34), X(42,50), X(2,10), X(18,26),
+  X(34,42), X(6,38), X(22,54), X(6,22), X(38,54), X(14,30), X(30,46), X(14,30),
+  X(14,22), X(30,38), X(46,54), X(6,14), X(22,30), X(38,46), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(4,36), X(20,52), X(4,20),
+  X(36,52), X(12,28), X(28,44), X(12,28), X(12,20), X(28,36), X(44,52), X(4,12),
+  X(20,28), X(36,44), X(8,40), X(24,56), X(8,24), X(40,56), X(16,32), X(32,48),
+  X(16,32), X(16,24), X(32,40), X(48,56), X(8,16), X(24,32), X(40,48), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56)
+};
+M(58) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,41), X(25,57), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(21,53), X(5,21), X(37,53),
+  X(13,29), X(29,45), X(13,29), X(13,21), X(29,37), X(45,53), X(5,13), X(21,29),
+  X(37,45), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(3,35),
+  X(19,51), X(3,19), X(35,51), X(11,27), X(27,43), X(11,27), X(11,19), X(27,35),
+  X(43,51), X(3,11), X(19,27), X(35,43), X(7,39), X(23,55), X(7,23), X(39,55),
+  X(15,31), X(31,47), X(15,31), X(15,23), X(31,39), X(47,55), X(7,15), X(23,31),
+  X(39,47), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33),
+  X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(2,34), X(18,50), X(2,18), X(34,50),
+  X(10,42), X(26,58), X(10,26), X(42,58), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(6,38), X(22,54), X(6,22), X(38,54), X(14,30), X(30,46), X(14,30), X(14,22),
+  X(30,38), X(46,54), X(6,14), X(22,30), X(38,46), X(6,10), X(14,18), X(22,26),
+  X(30,34), X(38,42), X(46,50), X(54,58), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(4,36), X(20,52), X(4,20), X(36,52), X(12,28),
+  X(28,44), X(12,28), X(12,20), X(28,36), X(44,52), X(4,12), X(20,28), X(36,44),
+  X(8,40), X(24,56), X(8,24), X(40,56), X(16,32), X(32,48), X(16,32), X(16,24),
+  X(32,40), X(48,56), X(8,16), X(24,32), X(40,48), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58)
+};
+M(59) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,41), X(25,57), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(21,53), X(5,21), X(37,53),
+  X(13,29), X(29,45), X(13,29), X(13,21), X(29,37), X(45,53), X(5,13), X(21,29),
+  X(37,45), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(3,35),
+  X(19,51), X(3,19), X(35,51), X(11,43), X(27,59), X(11,27), X(43,59), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(7,39), X(23,55), X(7,23), X(39,55), X(15,31),
+  X(31,47), X(15,31), X(15,23), X(31,39), X(47,55), X(7,15), X(23,31), X(39,47),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(2,34), X(18,50), X(2,18),
+  X(34,50), X(10,42), X(26,58), X(10,26), X(42,58), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(6,38), X(22,54), X(6,22), X(38,54), X(14,30), X(30,46), X(14,30),
+  X(14,22), X(30,38), X(46,54), X(6,14), X(22,30), X(38,46), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(4,36), X(20,52), X(4,20), X(36,52),
+  X(12,28), X(28,44), X(12,28), X(12,20), X(28,36), X(44,52), X(4,12), X(20,28),
+  X(36,44), X(8,40), X(24,56), X(8,24), X(40,56), X(16,32), X(32,48), X(16,32),
+  X(16,24), X(32,40), X(48,56), X(8,16), X(24,32), X(40,48), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(4,6), X(8,10), X(12,14),
+  X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46),
+  X(48,50), X(52,54), X(56,58), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20),
+  X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52),
+  X(54,56), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58)
+};
+M(60) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,41), X(25,57), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(21,53), X(5,21), X(37,53),
+  X(13,29), X(29,45), X(13,29), X(13,21), X(29,37), X(45,53), X(5,13), X(21,29),
+  X(37,45), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(3,35),
+  X(19,51), X(3,19), X(35,51), X(11,43), X(27,59), X(11,27), X(43,59), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(7,39), X(23,55), X(7,23), X(39,55), X(15,31),
+  X(31,47), X(15,31), X(15,23), X(31,39), X(47,55), X(7,15), X(23,31), X(39,47),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(2,34), X(18,50), X(2,18),
+  X(34,50), X(10,42), X(26,58), X(10,26), X(42,58), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(6,38), X(22,54), X(6,22), X(38,54), X(14,30), X(30,46), X(14,30),
+  X(14,22), X(30,38), X(46,54), X(6,14), X(22,30), X(38,46), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(4,36), X(20,52), X(4,20), X(36,52),
+  X(12,44), X(28,60), X(12,28), X(44,60), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(8,40), X(24,56), X(8,24), X(40,56), X(16,32), X(32,48), X(16,32), X(16,24),
+  X(32,40), X(48,56), X(8,16), X(24,32), X(40,48), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20),
+  X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52),
+  X(54,56), X(58,60), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60)
+};
+M(61) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,41), X(25,57), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(21,53), X(5,21), X(37,53),
+  X(13,45), X(29,61), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(3,35), X(19,51), X(3,19), X(35,51), X(11,43), X(27,59), X(11,27), X(43,59),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(7,39), X(23,55), X(7,23), X(39,55),
+  X(15,31), X(31,47), X(15,31), X(15,23), X(31,39), X(47,55), X(7,15), X(23,31),
+  X(39,47), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(2,34), X(18,50), X(2,18),
+  X(34,50), X(10,42), X(26,58), X(10,26), X(42,58), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(6,38), X(22,54), X(6,22), X(38,54), X(14,30), X(30,46), X(14,30),
+  X(14,22), X(30,38), X(46,54), X(6,14), X(22,30), X(38,46), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(4,36), X(20,52), X(4,20), X(36,52),
+  X(12,44), X(28,60), X(12,28), X(44,60), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(8,40), X(24,56), X(8,24), X(40,56), X(16,32), X(32,48), X(16,32), X(16,24),
+  X(32,40), X(48,56), X(8,16), X(24,32), X(40,48), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20),
+  X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52),
+  X(54,56), X(58,60), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60)
+};
+M(62) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,41), X(25,57), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(21,53), X(5,21), X(37,53),
+  X(13,45), X(29,61), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(3,35), X(19,51), X(3,19), X(35,51), X(11,43), X(27,59), X(11,27), X(43,59),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(7,39), X(23,55), X(7,23), X(39,55),
+  X(15,31), X(31,47), X(15,31), X(15,23), X(31,39), X(47,55), X(7,15), X(23,31),
+  X(39,47), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(2,34), X(18,50), X(2,18),
+  X(34,50), X(10,42), X(26,58), X(10,26), X(42,58), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(6,38), X(22,54), X(6,22), X(38,54), X(14,46), X(30,62), X(14,30),
+  X(46,62), X(6,14), X(22,30), X(38,46), X(54,62), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(4,36), X(20,52), X(4,20),
+  X(36,52), X(12,44), X(28,60), X(12,28), X(44,60), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(8,40), X(24,56), X(8,24), X(40,56), X(16,32), X(32,48), X(16,32),
+  X(16,24), X(32,40), X(48,56), X(8,16), X(24,32), X(40,48), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20),
+  X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52),
+  X(54,56), X(58,60), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62)
+};
+M(63) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,41), X(25,57), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(21,53), X(5,21), X(37,53),
+  X(13,45), X(29,61), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(3,35), X(19,51), X(3,19), X(35,51), X(11,43), X(27,59), X(11,27), X(43,59),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(7,39), X(23,55), X(7,23), X(39,55),
+  X(15,47), X(31,63), X(15,31), X(47,63), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(2,34), X(18,50), X(2,18), X(34,50), X(10,42), X(26,58), X(10,26), X(42,58),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(6,38), X(22,54), X(6,22), X(38,54),
+  X(14,46), X(30,62), X(14,30), X(46,62), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(4,36), X(20,52), X(4,20), X(36,52), X(12,44), X(28,60), X(12,28), X(44,60),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(8,40), X(24,56), X(8,24), X(40,56),
+  X(16,32), X(32,48), X(16,32), X(16,24), X(32,40), X(48,56), X(8,16), X(24,32),
+  X(40,48), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60),
+  X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(2,3), X(4,5), X(6,7),
+  X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23),
+  X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39),
+  X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55),
+  X(56,57), X(58,59), X(60,61), X(62,63), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62)
+};
+M(64) = {
+  X(1,33), X(17,49), X(1,17), X(33,49), X(9,41), X(25,57), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(21,53), X(5,21), X(37,53),
+  X(13,45), X(29,61), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(3,35), X(19,51), X(3,19), X(35,51), X(11,43), X(27,59), X(11,27), X(43,59),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(7,39), X(23,55), X(7,23), X(39,55),
+  X(15,47), X(31,63), X(15,31), X(47,63), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(2,34), X(18,50), X(2,18), X(34,50), X(10,42), X(26,58), X(10,26), X(42,58),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(6,38), X(22,54), X(6,22), X(38,54),
+  X(14,46), X(30,62), X(14,30), X(46,62), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(4,36), X(20,52), X(4,20), X(36,52), X(12,44), X(28,60), X(12,28), X(44,60),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(8,40), X(24,56), X(8,24), X(40,56),
+  X(16,48), X(32,64), X(16,32), X(48,64), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64)
+};
+M(65) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(25,57), X(9,25), X(41,57), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(21,53), X(5,21), X(37,53),
+  X(13,45), X(29,61), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(3,35), X(19,51), X(3,19), X(35,51), X(11,43), X(27,59), X(11,27), X(43,59),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(7,39), X(23,55), X(7,23), X(39,55),
+  X(15,47), X(31,63), X(15,31), X(47,63), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63),
+  X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33),
+  X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(2,34), X(18,50), X(2,18), X(34,50), X(10,42), X(26,58), X(10,26), X(42,58),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(6,38), X(22,54), X(6,22), X(38,54),
+  X(14,46), X(30,62), X(14,30), X(46,62), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(4,36), X(20,52), X(4,20), X(36,52), X(12,44), X(28,60), X(12,28), X(44,60),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(8,40), X(24,56), X(8,24), X(40,56),
+  X(16,48), X(32,64), X(16,32), X(48,64), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33),
+  X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49),
+  X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64)
+};
+M(66) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(25,57), X(9,25), X(41,57), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(21,53), X(5,21), X(37,53),
+  X(13,45), X(29,61), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(3,35), X(19,51), X(3,19), X(35,51), X(11,43), X(27,59), X(11,27), X(43,59),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(7,39), X(23,55), X(7,23), X(39,55),
+  X(15,47), X(31,63), X(15,31), X(47,63), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63),
+  X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33),
+  X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(2,34), X(34,66), X(2,34), X(18,50), X(18,34), X(50,66), X(2,18), X(34,50),
+  X(10,42), X(26,58), X(10,26), X(42,58), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(6,38), X(22,54), X(6,22), X(38,54),
+  X(14,46), X(30,62), X(14,30), X(46,62), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(4,36), X(20,52), X(4,20), X(36,52), X(12,44), X(28,60), X(12,28), X(44,60),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(8,40), X(24,56), X(8,24), X(40,56),
+  X(16,48), X(32,64), X(16,32), X(48,64), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64),
+  X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34),
+  X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66)
+};
+M(67) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(25,57), X(9,25), X(41,57), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(21,53), X(5,21), X(37,53),
+  X(13,45), X(29,61), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(3,35), X(35,67), X(3,35), X(19,51), X(19,35), X(51,67), X(3,19), X(35,51),
+  X(11,43), X(27,59), X(11,27), X(43,59), X(11,19), X(27,35), X(43,51), X(59,67),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(7,39), X(23,55), X(7,23), X(39,55),
+  X(15,47), X(31,63), X(15,31), X(47,63), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(65,67), X(2,34), X(34,66), X(2,34), X(18,50), X(18,34), X(50,66), X(2,18),
+  X(34,50), X(10,42), X(26,58), X(10,26), X(42,58), X(10,18), X(26,34), X(42,50),
+  X(58,66), X(2,10), X(18,26), X(34,42), X(50,58), X(6,38), X(22,54), X(6,22),
+  X(38,54), X(14,46), X(30,62), X(14,30), X(46,62), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58),
+  X(62,66), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(4,36), X(20,52), X(4,20), X(36,52), X(12,44), X(28,60), X(12,28),
+  X(44,60), X(4,12), X(20,28), X(36,44), X(52,60), X(8,40), X(24,56), X(8,24),
+  X(40,56), X(16,48), X(32,64), X(16,32), X(48,64), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30),
+  X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62),
+  X(64,66), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66)
+};
+M(68) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(25,57), X(9,25), X(41,57), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(21,53), X(5,21), X(37,53),
+  X(13,45), X(29,61), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(3,35), X(35,67), X(3,35), X(19,51), X(19,35), X(51,67), X(3,19), X(35,51),
+  X(11,43), X(27,59), X(11,27), X(43,59), X(11,19), X(27,35), X(43,51), X(59,67),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(7,39), X(23,55), X(7,23), X(39,55),
+  X(15,47), X(31,63), X(15,31), X(47,63), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(65,67), X(2,34), X(34,66), X(2,34), X(18,50), X(18,34), X(50,66), X(2,18),
+  X(34,50), X(10,42), X(26,58), X(10,26), X(42,58), X(10,18), X(26,34), X(42,50),
+  X(58,66), X(2,10), X(18,26), X(34,42), X(50,58), X(6,38), X(22,54), X(6,22),
+  X(38,54), X(14,46), X(30,62), X(14,30), X(46,62), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58),
+  X(62,66), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(4,36), X(36,68), X(4,36), X(20,52), X(20,36), X(52,68), X(4,20),
+  X(36,52), X(12,44), X(28,60), X(12,28), X(44,60), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(4,12), X(20,28), X(36,44), X(52,60), X(8,40), X(24,56), X(8,24),
+  X(40,56), X(16,48), X(32,64), X(16,32), X(48,64), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60),
+  X(64,68), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68)
+};
+M(69) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(25,57), X(9,25), X(41,57), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(37,69), X(5,37), X(21,53),
+  X(21,37), X(53,69), X(5,21), X(37,53), X(13,45), X(29,61), X(13,29), X(45,61),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(65,69), X(3,35), X(35,67), X(3,35), X(19,51), X(19,35), X(51,67), X(3,19),
+  X(35,51), X(11,43), X(27,59), X(11,27), X(43,59), X(11,19), X(27,35), X(43,51),
+  X(59,67), X(3,11), X(19,27), X(35,43), X(51,59), X(7,39), X(23,55), X(7,23),
+  X(39,55), X(15,47), X(31,63), X(15,31), X(47,63), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59),
+  X(63,67), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61),
+  X(63,65), X(67,69), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(2,34), X(34,66), X(2,34), X(18,50), X(18,34),
+  X(50,66), X(2,18), X(34,50), X(10,42), X(26,58), X(10,26), X(42,58), X(10,18),
+  X(26,34), X(42,50), X(58,66), X(2,10), X(18,26), X(34,42), X(50,58), X(6,38),
+  X(22,54), X(6,22), X(38,54), X(14,46), X(30,62), X(14,30), X(46,62), X(6,14),
+  X(22,30), X(38,46), X(54,62), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42),
+  X(46,50), X(54,58), X(62,66), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(4,36), X(36,68), X(4,36), X(20,52), X(20,36),
+  X(52,68), X(4,20), X(36,52), X(12,44), X(28,60), X(12,28), X(44,60), X(12,20),
+  X(28,36), X(44,52), X(60,68), X(4,12), X(20,28), X(36,44), X(52,60), X(8,40),
+  X(24,56), X(8,24), X(40,56), X(16,48), X(32,64), X(16,32), X(48,64), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44),
+  X(48,52), X(56,60), X(64,68), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20),
+  X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52),
+  X(54,56), X(58,60), X(62,64), X(66,68), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68)
+};
+M(70) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(25,57), X(9,25), X(41,57), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(37,69), X(5,37), X(21,53),
+  X(21,37), X(53,69), X(5,21), X(37,53), X(13,45), X(29,61), X(13,29), X(45,61),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(65,69), X(3,35), X(35,67), X(3,35), X(19,51), X(19,35), X(51,67), X(3,19),
+  X(35,51), X(11,43), X(27,59), X(11,27), X(43,59), X(11,19), X(27,35), X(43,51),
+  X(59,67), X(3,11), X(19,27), X(35,43), X(51,59), X(7,39), X(23,55), X(7,23),
+  X(39,55), X(15,47), X(31,63), X(15,31), X(47,63), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59),
+  X(63,67), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61),
+  X(63,65), X(67,69), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(2,34), X(34,66), X(2,34), X(18,50), X(18,34),
+  X(50,66), X(2,18), X(34,50), X(10,42), X(26,58), X(10,26), X(42,58), X(10,18),
+  X(26,34), X(42,50), X(58,66), X(2,10), X(18,26), X(34,42), X(50,58), X(6,38),
+  X(38,70), X(6,38), X(22,54), X(22,38), X(54,70), X(6,22), X(38,54), X(14,46),
+  X(30,62), X(14,30), X(46,62), X(14,22), X(30,38), X(46,54), X(62,70), X(6,14),
+  X(22,30), X(38,46), X(54,62), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(4,36), X(36,68), X(4,36), X(20,52),
+  X(20,36), X(52,68), X(4,20), X(36,52), X(12,44), X(28,60), X(12,28), X(44,60),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(8,40), X(24,56), X(8,24), X(40,56), X(16,48), X(32,64), X(16,32), X(48,64),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(8,12), X(16,20), X(24,28), X(32,36),
+  X(40,44), X(48,52), X(56,60), X(64,68), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70)
+};
+M(71) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(25,57), X(9,25), X(41,57), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(37,69), X(5,37), X(21,53),
+  X(21,37), X(53,69), X(5,21), X(37,53), X(13,45), X(29,61), X(13,29), X(45,61),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(65,69), X(3,35), X(35,67), X(3,35), X(19,51), X(19,35), X(51,67), X(3,19),
+  X(35,51), X(11,43), X(27,59), X(11,27), X(43,59), X(11,19), X(27,35), X(43,51),
+  X(59,67), X(3,11), X(19,27), X(35,43), X(51,59), X(7,39), X(39,71), X(7,39),
+  X(23,55), X(23,39), X(55,71), X(7,23), X(39,55), X(15,47), X(31,63), X(15,31),
+  X(47,63), X(15,23), X(31,39), X(47,55), X(63,71), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(2,34), X(34,66), X(2,34), X(18,50),
+  X(18,34), X(50,66), X(2,18), X(34,50), X(10,42), X(26,58), X(10,26), X(42,58),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(6,38), X(38,70), X(6,38), X(22,54), X(22,38), X(54,70), X(6,22), X(38,54),
+  X(14,46), X(30,62), X(14,30), X(46,62), X(14,22), X(30,38), X(46,54), X(62,70),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(4,36), X(36,68), X(4,36),
+  X(20,52), X(20,36), X(52,68), X(4,20), X(36,52), X(12,44), X(28,60), X(12,28),
+  X(44,60), X(12,20), X(28,36), X(44,52), X(60,68), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(8,40), X(24,56), X(8,24), X(40,56), X(16,48), X(32,64), X(16,32),
+  X(48,64), X(8,16), X(24,32), X(40,48), X(56,64), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(4,6), X(8,10), X(12,14),
+  X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46),
+  X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70)
+};
+M(72) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(25,57), X(9,25), X(41,57), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(5,37), X(37,69), X(5,37), X(21,53),
+  X(21,37), X(53,69), X(5,21), X(37,53), X(13,45), X(29,61), X(13,29), X(45,61),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(65,69), X(3,35), X(35,67), X(3,35), X(19,51), X(19,35), X(51,67), X(3,19),
+  X(35,51), X(11,43), X(27,59), X(11,27), X(43,59), X(11,19), X(27,35), X(43,51),
+  X(59,67), X(3,11), X(19,27), X(35,43), X(51,59), X(7,39), X(39,71), X(7,39),
+  X(23,55), X(23,39), X(55,71), X(7,23), X(39,55), X(15,47), X(31,63), X(15,31),
+  X(47,63), X(15,23), X(31,39), X(47,55), X(63,71), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(2,34), X(34,66), X(2,34), X(18,50),
+  X(18,34), X(50,66), X(2,18), X(34,50), X(10,42), X(26,58), X(10,26), X(42,58),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(6,38), X(38,70), X(6,38), X(22,54), X(22,38), X(54,70), X(6,22), X(38,54),
+  X(14,46), X(30,62), X(14,30), X(46,62), X(14,22), X(30,38), X(46,54), X(62,70),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(4,36), X(36,68), X(4,36),
+  X(20,52), X(20,36), X(52,68), X(4,20), X(36,52), X(12,44), X(28,60), X(12,28),
+  X(44,60), X(12,20), X(28,36), X(44,52), X(60,68), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(8,40), X(40,72), X(8,40), X(24,56), X(24,40), X(56,72), X(8,24),
+  X(40,56), X(16,48), X(32,64), X(16,32), X(48,64), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(8,16), X(24,32), X(40,48), X(56,64), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66), X(67,68), X(69,70), X(71,72)
+};
+M(73) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37),
+  X(21,53), X(21,37), X(53,69), X(5,21), X(37,53), X(13,45), X(29,61), X(13,29),
+  X(45,61), X(13,21), X(29,37), X(45,53), X(61,69), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57),
+  X(61,65), X(69,73), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(3,35), X(35,67), X(3,35), X(19,51), X(19,35),
+  X(51,67), X(3,19), X(35,51), X(11,43), X(27,59), X(11,27), X(43,59), X(11,19),
+  X(27,35), X(43,51), X(59,67), X(3,11), X(19,27), X(35,43), X(51,59), X(7,39),
+  X(39,71), X(7,39), X(23,55), X(23,39), X(55,71), X(7,23), X(39,55), X(15,47),
+  X(31,63), X(15,31), X(47,63), X(15,23), X(31,39), X(47,55), X(63,71), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(3,5), X(7,9), X(11,13), X(15,17),
+  X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49),
+  X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(2,34), X(34,66), X(2,34), X(18,50), X(18,34), X(50,66), X(2,18), X(34,50),
+  X(10,42), X(26,58), X(10,26), X(42,58), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(6,38), X(38,70), X(6,38), X(22,54),
+  X(22,38), X(54,70), X(6,22), X(38,54), X(14,46), X(30,62), X(14,30), X(46,62),
+  X(14,22), X(30,38), X(46,54), X(62,70), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(66,70), X(4,36), X(36,68), X(4,36), X(20,52), X(20,36), X(52,68), X(4,20),
+  X(36,52), X(12,44), X(28,60), X(12,28), X(44,60), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(4,12), X(20,28), X(36,44), X(52,60), X(8,40), X(40,72), X(8,40),
+  X(24,56), X(24,40), X(56,72), X(8,24), X(40,56), X(16,48), X(32,64), X(16,32),
+  X(48,64), X(16,24), X(32,40), X(48,56), X(64,72), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66), X(67,68), X(69,70), X(71,72)
+};
+M(74) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37),
+  X(21,53), X(21,37), X(53,69), X(5,21), X(37,53), X(13,45), X(29,61), X(13,29),
+  X(45,61), X(13,21), X(29,37), X(45,53), X(61,69), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57),
+  X(61,65), X(69,73), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(3,35), X(35,67), X(3,35), X(19,51), X(19,35),
+  X(51,67), X(3,19), X(35,51), X(11,43), X(27,59), X(11,27), X(43,59), X(11,19),
+  X(27,35), X(43,51), X(59,67), X(3,11), X(19,27), X(35,43), X(51,59), X(7,39),
+  X(39,71), X(7,39), X(23,55), X(23,39), X(55,71), X(7,23), X(39,55), X(15,47),
+  X(31,63), X(15,31), X(47,63), X(15,23), X(31,39), X(47,55), X(63,71), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(3,5), X(7,9), X(11,13), X(15,17),
+  X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49),
+  X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(2,34), X(34,66), X(2,34), X(18,50), X(18,34), X(50,66), X(2,18), X(34,50),
+  X(10,42), X(42,74), X(10,42), X(26,58), X(26,42), X(58,74), X(10,26), X(42,58),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(6,38), X(38,70), X(6,38),
+  X(22,54), X(22,38), X(54,70), X(6,22), X(38,54), X(14,46), X(30,62), X(14,30),
+  X(46,62), X(14,22), X(30,38), X(46,54), X(62,70), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58),
+  X(62,66), X(70,74), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46),
+  X(50,54), X(58,62), X(66,70), X(4,36), X(36,68), X(4,36), X(20,52), X(20,36),
+  X(52,68), X(4,20), X(36,52), X(12,44), X(28,60), X(12,28), X(44,60), X(12,20),
+  X(28,36), X(44,52), X(60,68), X(4,12), X(20,28), X(36,44), X(52,60), X(8,40),
+  X(40,72), X(8,40), X(24,56), X(24,40), X(56,72), X(8,24), X(40,56), X(16,48),
+  X(32,64), X(16,32), X(48,64), X(16,24), X(32,40), X(48,56), X(64,72), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66), X(67,68), X(69,70), X(71,72), X(73,74)
+};
+M(75) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37),
+  X(21,53), X(21,37), X(53,69), X(5,21), X(37,53), X(13,45), X(29,61), X(13,29),
+  X(45,61), X(13,21), X(29,37), X(45,53), X(61,69), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57),
+  X(61,65), X(69,73), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(3,35), X(35,67), X(3,35), X(19,51), X(19,35),
+  X(51,67), X(3,19), X(35,51), X(11,43), X(43,75), X(11,43), X(27,59), X(27,43),
+  X(59,75), X(11,27), X(43,59), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(7,39), X(39,71), X(7,39), X(23,55), X(23,39), X(55,71), X(7,23), X(39,55),
+  X(15,47), X(31,63), X(15,31), X(47,63), X(15,23), X(31,39), X(47,55), X(63,71),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(2,34), X(34,66), X(2,34), X(18,50), X(18,34), X(50,66), X(2,18),
+  X(34,50), X(10,42), X(42,74), X(10,42), X(26,58), X(26,42), X(58,74), X(10,26),
+  X(42,58), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(6,38), X(38,70),
+  X(6,38), X(22,54), X(22,38), X(54,70), X(6,22), X(38,54), X(14,46), X(30,62),
+  X(14,30), X(46,62), X(14,22), X(30,38), X(46,54), X(62,70), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50),
+  X(54,58), X(62,66), X(70,74), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(4,36), X(36,68), X(4,36), X(20,52),
+  X(20,36), X(52,68), X(4,20), X(36,52), X(12,44), X(28,60), X(12,28), X(44,60),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(8,40), X(40,72), X(8,40), X(24,56), X(24,40), X(56,72), X(8,24), X(40,56),
+  X(16,48), X(32,64), X(16,32), X(48,64), X(16,24), X(32,40), X(48,56), X(64,72),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(4,6), X(8,10), X(12,14),
+  X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46),
+  X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74)
+};
+M(76) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37),
+  X(21,53), X(21,37), X(53,69), X(5,21), X(37,53), X(13,45), X(29,61), X(13,29),
+  X(45,61), X(13,21), X(29,37), X(45,53), X(61,69), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57),
+  X(61,65), X(69,73), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(3,35), X(35,67), X(3,35), X(19,51), X(19,35),
+  X(51,67), X(3,19), X(35,51), X(11,43), X(43,75), X(11,43), X(27,59), X(27,43),
+  X(59,75), X(11,27), X(43,59), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(7,39), X(39,71), X(7,39), X(23,55), X(23,39), X(55,71), X(7,23), X(39,55),
+  X(15,47), X(31,63), X(15,31), X(47,63), X(15,23), X(31,39), X(47,55), X(63,71),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(2,34), X(34,66), X(2,34), X(18,50), X(18,34), X(50,66), X(2,18),
+  X(34,50), X(10,42), X(42,74), X(10,42), X(26,58), X(26,42), X(58,74), X(10,26),
+  X(42,58), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(6,38), X(38,70),
+  X(6,38), X(22,54), X(22,38), X(54,70), X(6,22), X(38,54), X(14,46), X(30,62),
+  X(14,30), X(46,62), X(14,22), X(30,38), X(46,54), X(62,70), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50),
+  X(54,58), X(62,66), X(70,74), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(4,36), X(36,68), X(4,36), X(20,52),
+  X(20,36), X(52,68), X(4,20), X(36,52), X(12,44), X(44,76), X(12,44), X(28,60),
+  X(28,44), X(60,76), X(12,28), X(44,60), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(8,40), X(40,72), X(8,40), X(24,56), X(24,40), X(56,72), X(8,24),
+  X(40,56), X(16,48), X(32,64), X(16,32), X(48,64), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(8,16), X(24,32), X(40,48), X(56,64), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76)
+};
+M(77) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37),
+  X(21,53), X(21,37), X(53,69), X(5,21), X(37,53), X(13,45), X(45,77), X(13,45),
+  X(29,61), X(29,45), X(61,77), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(73,77), X(3,35), X(35,67), X(3,35), X(19,51),
+  X(19,35), X(51,67), X(3,19), X(35,51), X(11,43), X(43,75), X(11,43), X(27,59),
+  X(27,43), X(59,75), X(11,27), X(43,59), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(7,39), X(39,71), X(7,39), X(23,55), X(23,39), X(55,71), X(7,23),
+  X(39,55), X(15,47), X(31,63), X(15,31), X(47,63), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(7,15), X(23,31), X(39,47), X(55,63), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(2,34), X(34,66), X(2,34),
+  X(18,50), X(18,34), X(50,66), X(2,18), X(34,50), X(10,42), X(42,74), X(10,42),
+  X(26,58), X(26,42), X(58,74), X(10,26), X(42,58), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(6,38), X(38,70), X(6,38), X(22,54), X(22,38), X(54,70),
+  X(6,22), X(38,54), X(14,46), X(30,62), X(14,30), X(46,62), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(6,14), X(22,30), X(38,46), X(54,62), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(4,36), X(36,68), X(4,36), X(20,52), X(20,36), X(52,68), X(4,20), X(36,52),
+  X(12,44), X(44,76), X(12,44), X(28,60), X(28,44), X(60,76), X(12,28), X(44,60),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(8,40), X(40,72), X(8,40),
+  X(24,56), X(24,40), X(56,72), X(8,24), X(40,56), X(16,48), X(32,64), X(16,32),
+  X(48,64), X(16,24), X(32,40), X(48,56), X(64,72), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60),
+  X(64,68), X(72,76), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48),
+  X(52,56), X(60,64), X(68,72), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20),
+  X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52),
+  X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76)
+};
+M(78) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37),
+  X(21,53), X(21,37), X(53,69), X(5,21), X(37,53), X(13,45), X(45,77), X(13,45),
+  X(29,61), X(29,45), X(61,77), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(73,77), X(3,35), X(35,67), X(3,35), X(19,51),
+  X(19,35), X(51,67), X(3,19), X(35,51), X(11,43), X(43,75), X(11,43), X(27,59),
+  X(27,43), X(59,75), X(11,27), X(43,59), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(7,39), X(39,71), X(7,39), X(23,55), X(23,39), X(55,71), X(7,23),
+  X(39,55), X(15,47), X(31,63), X(15,31), X(47,63), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(7,15), X(23,31), X(39,47), X(55,63), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(2,34), X(34,66), X(2,34),
+  X(18,50), X(18,34), X(50,66), X(2,18), X(34,50), X(10,42), X(42,74), X(10,42),
+  X(26,58), X(26,42), X(58,74), X(10,26), X(42,58), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(6,38), X(38,70), X(6,38), X(22,54), X(22,38), X(54,70),
+  X(6,22), X(38,54), X(14,46), X(46,78), X(14,46), X(30,62), X(30,46), X(62,78),
+  X(14,30), X(46,62), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(4,36), X(36,68), X(4,36), X(20,52), X(20,36), X(52,68), X(4,20),
+  X(36,52), X(12,44), X(44,76), X(12,44), X(28,60), X(28,44), X(60,76), X(12,28),
+  X(44,60), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(8,40), X(40,72),
+  X(8,40), X(24,56), X(24,40), X(56,72), X(8,24), X(40,56), X(16,48), X(32,64),
+  X(16,32), X(48,64), X(16,24), X(32,40), X(48,56), X(64,72), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78)
+};
+M(79) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37),
+  X(21,53), X(21,37), X(53,69), X(5,21), X(37,53), X(13,45), X(45,77), X(13,45),
+  X(29,61), X(29,45), X(61,77), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(73,77), X(3,35), X(35,67), X(3,35), X(19,51),
+  X(19,35), X(51,67), X(3,19), X(35,51), X(11,43), X(43,75), X(11,43), X(27,59),
+  X(27,43), X(59,75), X(11,27), X(43,59), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(7,39), X(39,71), X(7,39), X(23,55), X(23,39), X(55,71), X(7,23),
+  X(39,55), X(15,47), X(47,79), X(15,47), X(31,63), X(31,47), X(63,79), X(15,31),
+  X(47,63), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(65,67), X(69,71), X(73,75), X(77,79), X(2,34), X(34,66), X(2,34), X(18,50),
+  X(18,34), X(50,66), X(2,18), X(34,50), X(10,42), X(42,74), X(10,42), X(26,58),
+  X(26,42), X(58,74), X(10,26), X(42,58), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(6,38), X(38,70), X(6,38), X(22,54), X(22,38), X(54,70), X(6,22),
+  X(38,54), X(14,46), X(46,78), X(14,46), X(30,62), X(30,46), X(62,78), X(14,30),
+  X(46,62), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(4,36), X(36,68), X(4,36), X(20,52), X(20,36), X(52,68), X(4,20), X(36,52),
+  X(12,44), X(44,76), X(12,44), X(28,60), X(28,44), X(60,76), X(12,28), X(44,60),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(8,40), X(40,72), X(8,40),
+  X(24,56), X(24,40), X(56,72), X(8,24), X(40,56), X(16,48), X(32,64), X(16,32),
+  X(48,64), X(16,24), X(32,40), X(48,56), X(64,72), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60),
+  X(64,68), X(72,76), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48),
+  X(52,56), X(60,64), X(68,72), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78)
+};
+M(80) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(17,33), X(49,65), X(1,17), X(33,49),
+  X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25), X(41,57),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37),
+  X(21,53), X(21,37), X(53,69), X(5,21), X(37,53), X(13,45), X(45,77), X(13,45),
+  X(29,61), X(29,45), X(61,77), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(73,77), X(3,35), X(35,67), X(3,35), X(19,51),
+  X(19,35), X(51,67), X(3,19), X(35,51), X(11,43), X(43,75), X(11,43), X(27,59),
+  X(27,43), X(59,75), X(11,27), X(43,59), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(7,39), X(39,71), X(7,39), X(23,55), X(23,39), X(55,71), X(7,23),
+  X(39,55), X(15,47), X(47,79), X(15,47), X(31,63), X(31,47), X(63,79), X(15,31),
+  X(47,63), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(65,67), X(69,71), X(73,75), X(77,79), X(2,34), X(34,66), X(2,34), X(18,50),
+  X(18,34), X(50,66), X(2,18), X(34,50), X(10,42), X(42,74), X(10,42), X(26,58),
+  X(26,42), X(58,74), X(10,26), X(42,58), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(6,38), X(38,70), X(6,38), X(22,54), X(22,38), X(54,70), X(6,22),
+  X(38,54), X(14,46), X(46,78), X(14,46), X(30,62), X(30,46), X(62,78), X(14,30),
+  X(46,62), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(4,36), X(36,68), X(4,36), X(20,52), X(20,36), X(52,68), X(4,20), X(36,52),
+  X(12,44), X(44,76), X(12,44), X(28,60), X(28,44), X(60,76), X(12,28), X(44,60),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(8,40), X(40,72), X(8,40),
+  X(24,56), X(24,40), X(56,72), X(8,24), X(40,56), X(16,48), X(48,80), X(16,48),
+  X(32,64), X(32,48), X(64,80), X(16,32), X(48,64), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48),
+  X(52,56), X(60,64), X(68,72), X(76,80), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80)
+};
+M(81) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25),
+  X(41,57), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37), X(21,53), X(21,37),
+  X(53,69), X(5,21), X(37,53), X(13,45), X(45,77), X(13,45), X(29,61), X(29,45),
+  X(61,77), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65),
+  X(69,73), X(77,81), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(73,77), X(3,35), X(35,67), X(3,35), X(19,51),
+  X(19,35), X(51,67), X(3,19), X(35,51), X(11,43), X(43,75), X(11,43), X(27,59),
+  X(27,43), X(59,75), X(11,27), X(43,59), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(7,39), X(39,71), X(7,39), X(23,55), X(23,39), X(55,71), X(7,23),
+  X(39,55), X(15,47), X(47,79), X(15,47), X(31,63), X(31,47), X(63,79), X(15,31),
+  X(47,63), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33),
+  X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65),
+  X(67,69), X(71,73), X(75,77), X(79,81), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(2,34), X(34,66), X(2,34), X(18,50), X(18,34), X(50,66), X(2,18), X(34,50),
+  X(10,42), X(42,74), X(10,42), X(26,58), X(26,42), X(58,74), X(10,26), X(42,58),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(6,38), X(38,70), X(6,38),
+  X(22,54), X(22,38), X(54,70), X(6,22), X(38,54), X(14,46), X(46,78), X(14,46),
+  X(30,62), X(30,46), X(62,78), X(14,30), X(46,62), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46),
+  X(50,54), X(58,62), X(66,70), X(74,78), X(4,36), X(36,68), X(4,36), X(20,52),
+  X(20,36), X(52,68), X(4,20), X(36,52), X(12,44), X(44,76), X(12,44), X(28,60),
+  X(28,44), X(60,76), X(12,28), X(44,60), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(8,40), X(40,72), X(8,40), X(24,56), X(24,40), X(56,72), X(8,24),
+  X(40,56), X(16,48), X(48,80), X(16,48), X(32,64), X(32,48), X(64,80), X(16,32),
+  X(48,64), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64),
+  X(66,68), X(70,72), X(74,76), X(78,80), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80)
+};
+M(82) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25),
+  X(41,57), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37), X(21,53), X(21,37),
+  X(53,69), X(5,21), X(37,53), X(13,45), X(45,77), X(13,45), X(29,61), X(29,45),
+  X(61,77), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65),
+  X(69,73), X(77,81), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(73,77), X(3,35), X(35,67), X(3,35), X(19,51),
+  X(19,35), X(51,67), X(3,19), X(35,51), X(11,43), X(43,75), X(11,43), X(27,59),
+  X(27,43), X(59,75), X(11,27), X(43,59), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(7,39), X(39,71), X(7,39), X(23,55), X(23,39), X(55,71), X(7,23),
+  X(39,55), X(15,47), X(47,79), X(15,47), X(31,63), X(31,47), X(63,79), X(15,31),
+  X(47,63), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33),
+  X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65),
+  X(67,69), X(71,73), X(75,77), X(79,81), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(2,34), X(34,66), X(2,34), X(18,50), X(50,82), X(18,50), X(2,18), X(34,50),
+  X(66,82), X(10,42), X(42,74), X(10,42), X(26,58), X(26,42), X(58,74), X(10,26),
+  X(42,58), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(6,38), X(38,70), X(6,38), X(22,54), X(22,38),
+  X(54,70), X(6,22), X(38,54), X(14,46), X(46,78), X(14,46), X(30,62), X(30,46),
+  X(62,78), X(14,30), X(46,62), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46),
+  X(50,54), X(58,62), X(66,70), X(74,78), X(4,36), X(36,68), X(4,36), X(20,52),
+  X(20,36), X(52,68), X(4,20), X(36,52), X(12,44), X(44,76), X(12,44), X(28,60),
+  X(28,44), X(60,76), X(12,28), X(44,60), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(8,40), X(40,72), X(8,40), X(24,56), X(24,40), X(56,72), X(8,24),
+  X(40,56), X(16,48), X(48,80), X(16,48), X(32,64), X(32,48), X(64,80), X(16,32),
+  X(48,64), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34),
+  X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66),
+  X(68,70), X(72,74), X(76,78), X(80,82), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80),
+  X(81,82)
+};
+M(83) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25),
+  X(41,57), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37), X(21,53), X(21,37),
+  X(53,69), X(5,21), X(37,53), X(13,45), X(45,77), X(13,45), X(29,61), X(29,45),
+  X(61,77), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65),
+  X(69,73), X(77,81), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(73,77), X(3,35), X(35,67), X(3,35), X(19,51),
+  X(51,83), X(19,51), X(3,19), X(35,51), X(67,83), X(11,43), X(43,75), X(11,43),
+  X(27,59), X(27,43), X(59,75), X(11,27), X(43,59), X(11,19), X(27,35), X(43,51),
+  X(59,67), X(75,83), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(7,39),
+  X(39,71), X(7,39), X(23,55), X(23,39), X(55,71), X(7,23), X(39,55), X(15,47),
+  X(47,79), X(15,47), X(31,63), X(31,47), X(63,79), X(15,31), X(47,63), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(2,34), X(34,66), X(2,34),
+  X(18,50), X(50,82), X(18,50), X(2,18), X(34,50), X(66,82), X(10,42), X(42,74),
+  X(10,42), X(26,58), X(26,42), X(58,74), X(10,26), X(42,58), X(10,18), X(26,34),
+  X(42,50), X(58,66), X(74,82), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(6,38), X(38,70), X(6,38), X(22,54), X(22,38), X(54,70), X(6,22), X(38,54),
+  X(14,46), X(46,78), X(14,46), X(30,62), X(30,46), X(62,78), X(14,30), X(46,62),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(6,10), X(14,18), X(22,26),
+  X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(4,36), X(36,68), X(4,36), X(20,52), X(20,36), X(52,68), X(4,20),
+  X(36,52), X(12,44), X(44,76), X(12,44), X(28,60), X(28,44), X(60,76), X(12,28),
+  X(44,60), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(8,40), X(40,72),
+  X(8,40), X(24,56), X(24,40), X(56,72), X(8,24), X(40,56), X(16,48), X(48,80),
+  X(16,48), X(32,64), X(32,48), X(64,80), X(16,32), X(48,64), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(4,6), X(8,10), X(12,14),
+  X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46),
+  X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78),
+  X(80,82), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(2,3), X(4,5), X(6,7),
+  X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23),
+  X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39),
+  X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55),
+  X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71),
+  X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82)
+};
+M(84) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25),
+  X(41,57), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37), X(21,53), X(21,37),
+  X(53,69), X(5,21), X(37,53), X(13,45), X(45,77), X(13,45), X(29,61), X(29,45),
+  X(61,77), X(13,29), X(45,61), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65),
+  X(69,73), X(77,81), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(73,77), X(3,35), X(35,67), X(3,35), X(19,51),
+  X(51,83), X(19,51), X(3,19), X(35,51), X(67,83), X(11,43), X(43,75), X(11,43),
+  X(27,59), X(27,43), X(59,75), X(11,27), X(43,59), X(11,19), X(27,35), X(43,51),
+  X(59,67), X(75,83), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(7,39),
+  X(39,71), X(7,39), X(23,55), X(23,39), X(55,71), X(7,23), X(39,55), X(15,47),
+  X(47,79), X(15,47), X(31,63), X(31,47), X(63,79), X(15,31), X(47,63), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(2,34), X(34,66), X(2,34),
+  X(18,50), X(50,82), X(18,50), X(2,18), X(34,50), X(66,82), X(10,42), X(42,74),
+  X(10,42), X(26,58), X(26,42), X(58,74), X(10,26), X(42,58), X(10,18), X(26,34),
+  X(42,50), X(58,66), X(74,82), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(6,38), X(38,70), X(6,38), X(22,54), X(22,38), X(54,70), X(6,22), X(38,54),
+  X(14,46), X(46,78), X(14,46), X(30,62), X(30,46), X(62,78), X(14,30), X(46,62),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(6,10), X(14,18), X(22,26),
+  X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(4,36), X(36,68), X(4,36), X(20,52), X(52,84), X(20,52), X(4,20),
+  X(36,52), X(68,84), X(12,44), X(44,76), X(12,44), X(28,60), X(28,44), X(60,76),
+  X(12,28), X(44,60), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(8,40), X(40,72), X(8,40), X(24,56),
+  X(24,40), X(56,72), X(8,24), X(40,56), X(16,48), X(48,80), X(16,48), X(32,64),
+  X(32,48), X(64,80), X(16,32), X(48,64), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60),
+  X(64,68), X(72,76), X(80,84), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84)
+};
+M(85) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25),
+  X(41,57), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37), X(21,53), X(53,85),
+  X(21,53), X(5,21), X(37,53), X(69,85), X(13,45), X(45,77), X(13,45), X(29,61),
+  X(29,45), X(61,77), X(13,29), X(45,61), X(13,21), X(29,37), X(45,53), X(61,69),
+  X(77,85), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(3,35), X(35,67), X(3,35), X(19,51), X(51,83), X(19,51), X(3,19),
+  X(35,51), X(67,83), X(11,43), X(43,75), X(11,43), X(27,59), X(27,43), X(59,75),
+  X(11,27), X(43,59), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(7,39), X(39,71), X(7,39), X(23,55),
+  X(23,39), X(55,71), X(7,23), X(39,55), X(15,47), X(47,79), X(15,47), X(31,63),
+  X(31,47), X(63,79), X(15,31), X(47,63), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59),
+  X(63,67), X(71,75), X(79,83), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(2,34),
+  X(34,66), X(2,34), X(18,50), X(50,82), X(18,50), X(2,18), X(34,50), X(66,82),
+  X(10,42), X(42,74), X(10,42), X(26,58), X(26,42), X(58,74), X(10,26), X(42,58),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(6,38), X(38,70), X(6,38), X(22,54), X(22,38), X(54,70),
+  X(6,22), X(38,54), X(14,46), X(46,78), X(14,46), X(30,62), X(30,46), X(62,78),
+  X(14,30), X(46,62), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(6,10),
+  X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74),
+  X(78,82), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(4,36), X(36,68), X(4,36), X(20,52), X(52,84),
+  X(20,52), X(4,20), X(36,52), X(68,84), X(12,44), X(44,76), X(12,44), X(28,60),
+  X(28,44), X(60,76), X(12,28), X(44,60), X(12,20), X(28,36), X(44,52), X(60,68),
+  X(76,84), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(8,40), X(40,72),
+  X(8,40), X(24,56), X(24,40), X(56,72), X(8,24), X(40,56), X(16,48), X(48,80),
+  X(16,48), X(32,64), X(32,48), X(64,80), X(16,32), X(48,64), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44),
+  X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84)
+};
+M(86) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25),
+  X(41,57), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37), X(21,53), X(53,85),
+  X(21,53), X(5,21), X(37,53), X(69,85), X(13,45), X(45,77), X(13,45), X(29,61),
+  X(29,45), X(61,77), X(13,29), X(45,61), X(13,21), X(29,37), X(45,53), X(61,69),
+  X(77,85), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(3,35), X(35,67), X(3,35), X(19,51), X(51,83), X(19,51), X(3,19),
+  X(35,51), X(67,83), X(11,43), X(43,75), X(11,43), X(27,59), X(27,43), X(59,75),
+  X(11,27), X(43,59), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(7,39), X(39,71), X(7,39), X(23,55),
+  X(23,39), X(55,71), X(7,23), X(39,55), X(15,47), X(47,79), X(15,47), X(31,63),
+  X(31,47), X(63,79), X(15,31), X(47,63), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59),
+  X(63,67), X(71,75), X(79,83), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(2,34),
+  X(34,66), X(2,34), X(18,50), X(50,82), X(18,50), X(2,18), X(34,50), X(66,82),
+  X(10,42), X(42,74), X(10,42), X(26,58), X(26,42), X(58,74), X(10,26), X(42,58),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(6,38), X(38,70), X(6,38), X(22,54), X(54,86), X(22,54),
+  X(6,22), X(38,54), X(70,86), X(14,46), X(46,78), X(14,46), X(30,62), X(30,46),
+  X(62,78), X(14,30), X(46,62), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(4,36), X(36,68), X(4,36), X(20,52), X(52,84), X(20,52), X(4,20), X(36,52),
+  X(68,84), X(12,44), X(44,76), X(12,44), X(28,60), X(28,44), X(60,76), X(12,28),
+  X(44,60), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(8,40), X(40,72), X(8,40), X(24,56), X(24,40),
+  X(56,72), X(8,24), X(40,56), X(16,48), X(48,80), X(16,48), X(32,64), X(32,48),
+  X(64,80), X(16,32), X(48,64), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68),
+  X(72,76), X(80,84), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48),
+  X(52,56), X(60,64), X(68,72), X(76,80), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82),
+  X(84,86), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86)
+};
+M(87) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25),
+  X(41,57), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37), X(21,53), X(53,85),
+  X(21,53), X(5,21), X(37,53), X(69,85), X(13,45), X(45,77), X(13,45), X(29,61),
+  X(29,45), X(61,77), X(13,29), X(45,61), X(13,21), X(29,37), X(45,53), X(61,69),
+  X(77,85), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(3,35), X(35,67), X(3,35), X(19,51), X(51,83), X(19,51), X(3,19),
+  X(35,51), X(67,83), X(11,43), X(43,75), X(11,43), X(27,59), X(27,43), X(59,75),
+  X(11,27), X(43,59), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(7,39), X(39,71), X(7,39), X(23,55),
+  X(55,87), X(23,55), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47),
+  X(31,63), X(31,47), X(63,79), X(15,31), X(47,63), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(79,87), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(2,34), X(34,66), X(2,34), X(18,50), X(50,82), X(18,50), X(2,18), X(34,50),
+  X(66,82), X(10,42), X(42,74), X(10,42), X(26,58), X(26,42), X(58,74), X(10,26),
+  X(42,58), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(6,38), X(38,70), X(6,38), X(22,54), X(54,86),
+  X(22,54), X(6,22), X(38,54), X(70,86), X(14,46), X(46,78), X(14,46), X(30,62),
+  X(30,46), X(62,78), X(14,30), X(46,62), X(14,22), X(30,38), X(46,54), X(62,70),
+  X(78,86), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(4,36), X(36,68), X(4,36), X(20,52), X(52,84), X(20,52), X(4,20),
+  X(36,52), X(68,84), X(12,44), X(44,76), X(12,44), X(28,60), X(28,44), X(60,76),
+  X(12,28), X(44,60), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(8,40), X(40,72), X(8,40), X(24,56),
+  X(24,40), X(56,72), X(8,24), X(40,56), X(16,48), X(48,80), X(16,48), X(32,64),
+  X(32,48), X(64,80), X(16,32), X(48,64), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60),
+  X(64,68), X(72,76), X(80,84), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(4,6), X(8,10), X(12,14),
+  X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46),
+  X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78),
+  X(80,82), X(84,86), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86)
+};
+M(88) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(25,41), X(57,73), X(9,25),
+  X(41,57), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(5,37), X(37,69), X(5,37), X(21,53), X(53,85),
+  X(21,53), X(5,21), X(37,53), X(69,85), X(13,45), X(45,77), X(13,45), X(29,61),
+  X(29,45), X(61,77), X(13,29), X(45,61), X(13,21), X(29,37), X(45,53), X(61,69),
+  X(77,85), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(3,35), X(35,67), X(3,35), X(19,51), X(51,83), X(19,51), X(3,19),
+  X(35,51), X(67,83), X(11,43), X(43,75), X(11,43), X(27,59), X(27,43), X(59,75),
+  X(11,27), X(43,59), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(7,39), X(39,71), X(7,39), X(23,55),
+  X(55,87), X(23,55), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47),
+  X(31,63), X(31,47), X(63,79), X(15,31), X(47,63), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(79,87), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(2,34), X(34,66), X(2,34), X(18,50), X(50,82), X(18,50), X(2,18), X(34,50),
+  X(66,82), X(10,42), X(42,74), X(10,42), X(26,58), X(26,42), X(58,74), X(10,26),
+  X(42,58), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(6,38), X(38,70), X(6,38), X(22,54), X(54,86),
+  X(22,54), X(6,22), X(38,54), X(70,86), X(14,46), X(46,78), X(14,46), X(30,62),
+  X(30,46), X(62,78), X(14,30), X(46,62), X(14,22), X(30,38), X(46,54), X(62,70),
+  X(78,86), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(4,36), X(36,68), X(4,36), X(20,52), X(52,84), X(20,52), X(4,20),
+  X(36,52), X(68,84), X(12,44), X(44,76), X(12,44), X(28,60), X(28,44), X(60,76),
+  X(12,28), X(44,60), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(8,40), X(40,72), X(8,40), X(24,56),
+  X(56,88), X(24,56), X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48),
+  X(32,64), X(32,48), X(64,80), X(16,32), X(48,64), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80),
+  X(81,82), X(83,84), X(85,86), X(87,88)
+};
+M(89) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(57,89), X(25,57), X(9,25),
+  X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(5,37), X(37,69), X(5,37), X(21,53), X(53,85), X(21,53), X(5,21), X(37,53),
+  X(69,85), X(13,45), X(45,77), X(13,45), X(29,61), X(29,45), X(61,77), X(13,29),
+  X(45,61), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(3,35), X(35,67), X(3,35), X(19,51), X(51,83), X(19,51), X(3,19),
+  X(35,51), X(67,83), X(11,43), X(43,75), X(11,43), X(27,59), X(27,43), X(59,75),
+  X(11,27), X(43,59), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(7,39), X(39,71), X(7,39), X(23,55),
+  X(55,87), X(23,55), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47),
+  X(31,63), X(31,47), X(63,79), X(15,31), X(47,63), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(79,87), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(2,34), X(34,66),
+  X(2,34), X(18,50), X(50,82), X(18,50), X(2,18), X(34,50), X(66,82), X(10,42),
+  X(42,74), X(10,42), X(26,58), X(26,42), X(58,74), X(10,26), X(42,58), X(10,18),
+  X(26,34), X(42,50), X(58,66), X(74,82), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(6,38), X(38,70), X(6,38), X(22,54), X(54,86), X(22,54), X(6,22),
+  X(38,54), X(70,86), X(14,46), X(46,78), X(14,46), X(30,62), X(30,46), X(62,78),
+  X(14,30), X(46,62), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(6,14),
+  X(22,30), X(38,46), X(54,62), X(70,78), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(4,36),
+  X(36,68), X(4,36), X(20,52), X(52,84), X(20,52), X(4,20), X(36,52), X(68,84),
+  X(12,44), X(44,76), X(12,44), X(28,60), X(28,44), X(60,76), X(12,28), X(44,60),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(8,40), X(40,72), X(8,40), X(24,56), X(56,88), X(24,56),
+  X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48), X(32,64), X(32,48),
+  X(64,80), X(16,32), X(48,64), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64),
+  X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88)
+};
+M(90) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(57,89), X(25,57), X(9,25),
+  X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(5,37), X(37,69), X(5,37), X(21,53), X(53,85), X(21,53), X(5,21), X(37,53),
+  X(69,85), X(13,45), X(45,77), X(13,45), X(29,61), X(29,45), X(61,77), X(13,29),
+  X(45,61), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(3,35), X(35,67), X(3,35), X(19,51), X(51,83), X(19,51), X(3,19),
+  X(35,51), X(67,83), X(11,43), X(43,75), X(11,43), X(27,59), X(27,43), X(59,75),
+  X(11,27), X(43,59), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(7,39), X(39,71), X(7,39), X(23,55),
+  X(55,87), X(23,55), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47),
+  X(31,63), X(31,47), X(63,79), X(15,31), X(47,63), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(79,87), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(2,34), X(34,66),
+  X(2,34), X(18,50), X(50,82), X(18,50), X(2,18), X(34,50), X(66,82), X(10,42),
+  X(42,74), X(10,42), X(26,58), X(58,90), X(26,58), X(10,26), X(42,58), X(74,90),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(6,38), X(38,70),
+  X(6,38), X(22,54), X(54,86), X(22,54), X(6,22), X(38,54), X(70,86), X(14,46),
+  X(46,78), X(14,46), X(30,62), X(30,46), X(62,78), X(14,30), X(46,62), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58),
+  X(62,66), X(70,74), X(78,82), X(86,90), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(4,36),
+  X(36,68), X(4,36), X(20,52), X(52,84), X(20,52), X(4,20), X(36,52), X(68,84),
+  X(12,44), X(44,76), X(12,44), X(28,60), X(28,44), X(60,76), X(12,28), X(44,60),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(8,40), X(40,72), X(8,40), X(24,56), X(56,88), X(24,56),
+  X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48), X(32,64), X(32,48),
+  X(64,80), X(16,32), X(48,64), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34),
+  X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66),
+  X(68,70), X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90)
+};
+M(91) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(57,89), X(25,57), X(9,25),
+  X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(5,37), X(37,69), X(5,37), X(21,53), X(53,85), X(21,53), X(5,21), X(37,53),
+  X(69,85), X(13,45), X(45,77), X(13,45), X(29,61), X(29,45), X(61,77), X(13,29),
+  X(45,61), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(3,35), X(35,67), X(3,35), X(19,51), X(51,83), X(19,51), X(3,19),
+  X(35,51), X(67,83), X(11,43), X(43,75), X(11,43), X(27,59), X(59,91), X(27,59),
+  X(11,27), X(43,59), X(75,91), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(7,39), X(39,71), X(7,39), X(23,55), X(55,87), X(23,55), X(7,23),
+  X(39,55), X(71,87), X(15,47), X(47,79), X(15,47), X(31,63), X(31,47), X(63,79),
+  X(15,31), X(47,63), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(2,34), X(34,66), X(2,34), X(18,50), X(50,82), X(18,50), X(2,18),
+  X(34,50), X(66,82), X(10,42), X(42,74), X(10,42), X(26,58), X(58,90), X(26,58),
+  X(10,26), X(42,58), X(74,90), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(6,38), X(38,70), X(6,38), X(22,54), X(54,86), X(22,54), X(6,22),
+  X(38,54), X(70,86), X(14,46), X(46,78), X(14,46), X(30,62), X(30,46), X(62,78),
+  X(14,30), X(46,62), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(6,14),
+  X(22,30), X(38,46), X(54,62), X(70,78), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(4,36), X(36,68), X(4,36), X(20,52), X(52,84), X(20,52),
+  X(4,20), X(36,52), X(68,84), X(12,44), X(44,76), X(12,44), X(28,60), X(28,44),
+  X(60,76), X(12,28), X(44,60), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(8,40), X(40,72), X(8,40),
+  X(24,56), X(56,88), X(24,56), X(8,24), X(40,56), X(72,88), X(16,48), X(48,80),
+  X(16,48), X(32,64), X(32,48), X(64,80), X(16,32), X(48,64), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64),
+  X(68,72), X(76,80), X(84,88), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90)
+};
+M(92) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(57,89), X(25,57), X(9,25),
+  X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(5,37), X(37,69), X(5,37), X(21,53), X(53,85), X(21,53), X(5,21), X(37,53),
+  X(69,85), X(13,45), X(45,77), X(13,45), X(29,61), X(29,45), X(61,77), X(13,29),
+  X(45,61), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(3,35), X(35,67), X(3,35), X(19,51), X(51,83), X(19,51), X(3,19),
+  X(35,51), X(67,83), X(11,43), X(43,75), X(11,43), X(27,59), X(59,91), X(27,59),
+  X(11,27), X(43,59), X(75,91), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(7,39), X(39,71), X(7,39), X(23,55), X(55,87), X(23,55), X(7,23),
+  X(39,55), X(71,87), X(15,47), X(47,79), X(15,47), X(31,63), X(31,47), X(63,79),
+  X(15,31), X(47,63), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(2,34), X(34,66), X(2,34), X(18,50), X(50,82), X(18,50), X(2,18),
+  X(34,50), X(66,82), X(10,42), X(42,74), X(10,42), X(26,58), X(58,90), X(26,58),
+  X(10,26), X(42,58), X(74,90), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(6,38), X(38,70), X(6,38), X(22,54), X(54,86), X(22,54), X(6,22),
+  X(38,54), X(70,86), X(14,46), X(46,78), X(14,46), X(30,62), X(30,46), X(62,78),
+  X(14,30), X(46,62), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(6,14),
+  X(22,30), X(38,46), X(54,62), X(70,78), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(4,36), X(36,68), X(4,36), X(20,52), X(52,84), X(20,52),
+  X(4,20), X(36,52), X(68,84), X(12,44), X(44,76), X(12,44), X(28,60), X(60,92),
+  X(28,60), X(12,28), X(44,60), X(76,92), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(8,40), X(40,72), X(8,40), X(24,56), X(56,88), X(24,56),
+  X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48), X(32,64), X(32,48),
+  X(64,80), X(16,32), X(48,64), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64),
+  X(68,72), X(76,80), X(84,88), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20),
+  X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52),
+  X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84),
+  X(86,88), X(90,92), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92)
+};
+M(93) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(57,89), X(25,57), X(9,25),
+  X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(5,37), X(37,69), X(5,37), X(21,53), X(53,85), X(21,53), X(5,21), X(37,53),
+  X(69,85), X(13,45), X(45,77), X(13,45), X(29,61), X(61,93), X(29,61), X(13,29),
+  X(45,61), X(77,93), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(65,69), X(73,77), X(81,85), X(89,93), X(3,35), X(35,67), X(3,35), X(19,51),
+  X(51,83), X(19,51), X(3,19), X(35,51), X(67,83), X(11,43), X(43,75), X(11,43),
+  X(27,59), X(59,91), X(27,59), X(11,27), X(43,59), X(75,91), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(7,39), X(39,71), X(7,39), X(23,55),
+  X(55,87), X(23,55), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47),
+  X(31,63), X(31,47), X(63,79), X(15,31), X(47,63), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(79,87), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(7,11),
+  X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75),
+  X(79,83), X(87,91), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47),
+  X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(2,34), X(34,66), X(2,34), X(18,50), X(50,82),
+  X(18,50), X(2,18), X(34,50), X(66,82), X(10,42), X(42,74), X(10,42), X(26,58),
+  X(58,90), X(26,58), X(10,26), X(42,58), X(74,90), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(6,38), X(38,70), X(6,38), X(22,54), X(54,86),
+  X(22,54), X(6,22), X(38,54), X(70,86), X(14,46), X(46,78), X(14,46), X(30,62),
+  X(30,46), X(62,78), X(14,30), X(46,62), X(14,22), X(30,38), X(46,54), X(62,70),
+  X(78,86), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(4,36), X(36,68), X(4,36), X(20,52),
+  X(52,84), X(20,52), X(4,20), X(36,52), X(68,84), X(12,44), X(44,76), X(12,44),
+  X(28,60), X(60,92), X(28,60), X(12,28), X(44,60), X(76,92), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(8,40), X(40,72), X(8,40), X(24,56),
+  X(56,88), X(24,56), X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48),
+  X(32,64), X(32,48), X(64,80), X(16,32), X(48,64), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(8,12),
+  X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76),
+  X(80,84), X(88,92), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48),
+  X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92)
+};
+M(94) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(57,89), X(25,57), X(9,25),
+  X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(5,37), X(37,69), X(5,37), X(21,53), X(53,85), X(21,53), X(5,21), X(37,53),
+  X(69,85), X(13,45), X(45,77), X(13,45), X(29,61), X(61,93), X(29,61), X(13,29),
+  X(45,61), X(77,93), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(65,69), X(73,77), X(81,85), X(89,93), X(3,35), X(35,67), X(3,35), X(19,51),
+  X(51,83), X(19,51), X(3,19), X(35,51), X(67,83), X(11,43), X(43,75), X(11,43),
+  X(27,59), X(59,91), X(27,59), X(11,27), X(43,59), X(75,91), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(7,39), X(39,71), X(7,39), X(23,55),
+  X(55,87), X(23,55), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47),
+  X(31,63), X(31,47), X(63,79), X(15,31), X(47,63), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(79,87), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(7,11),
+  X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75),
+  X(79,83), X(87,91), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47),
+  X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(2,34), X(34,66), X(2,34), X(18,50), X(50,82),
+  X(18,50), X(2,18), X(34,50), X(66,82), X(10,42), X(42,74), X(10,42), X(26,58),
+  X(58,90), X(26,58), X(10,26), X(42,58), X(74,90), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(6,38), X(38,70), X(6,38), X(22,54), X(54,86),
+  X(22,54), X(6,22), X(38,54), X(70,86), X(14,46), X(46,78), X(14,46), X(30,62),
+  X(62,94), X(30,62), X(14,30), X(46,62), X(78,94), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(4,36),
+  X(36,68), X(4,36), X(20,52), X(52,84), X(20,52), X(4,20), X(36,52), X(68,84),
+  X(12,44), X(44,76), X(12,44), X(28,60), X(60,92), X(28,60), X(12,28), X(44,60),
+  X(76,92), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(8,40),
+  X(40,72), X(8,40), X(24,56), X(56,88), X(24,56), X(8,24), X(40,56), X(72,88),
+  X(16,48), X(48,80), X(16,48), X(32,64), X(32,48), X(64,80), X(16,32), X(48,64),
+  X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34),
+  X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66),
+  X(68,70), X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94)
+};
+M(95) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(57,89), X(25,57), X(9,25),
+  X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(5,37), X(37,69), X(5,37), X(21,53), X(53,85), X(21,53), X(5,21), X(37,53),
+  X(69,85), X(13,45), X(45,77), X(13,45), X(29,61), X(61,93), X(29,61), X(13,29),
+  X(45,61), X(77,93), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(65,69), X(73,77), X(81,85), X(89,93), X(3,35), X(35,67), X(3,35), X(19,51),
+  X(51,83), X(19,51), X(3,19), X(35,51), X(67,83), X(11,43), X(43,75), X(11,43),
+  X(27,59), X(59,91), X(27,59), X(11,27), X(43,59), X(75,91), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(7,39), X(39,71), X(7,39), X(23,55),
+  X(55,87), X(23,55), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47),
+  X(31,63), X(63,95), X(31,63), X(15,31), X(47,63), X(79,95), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95),
+  X(2,34), X(34,66), X(2,34), X(18,50), X(50,82), X(18,50), X(2,18), X(34,50),
+  X(66,82), X(10,42), X(42,74), X(10,42), X(26,58), X(58,90), X(26,58), X(10,26),
+  X(42,58), X(74,90), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(6,38), X(38,70), X(6,38), X(22,54), X(54,86), X(22,54), X(6,22), X(38,54),
+  X(70,86), X(14,46), X(46,78), X(14,46), X(30,62), X(62,94), X(30,62), X(14,30),
+  X(46,62), X(78,94), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(66,70), X(74,78), X(82,86), X(90,94), X(4,36), X(36,68), X(4,36), X(20,52),
+  X(52,84), X(20,52), X(4,20), X(36,52), X(68,84), X(12,44), X(44,76), X(12,44),
+  X(28,60), X(60,92), X(28,60), X(12,28), X(44,60), X(76,92), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(8,40), X(40,72), X(8,40), X(24,56),
+  X(56,88), X(24,56), X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48),
+  X(32,64), X(32,48), X(64,80), X(16,32), X(48,64), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(8,12),
+  X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76),
+  X(80,84), X(88,92), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48),
+  X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(4,6), X(8,10), X(12,14),
+  X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46),
+  X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78),
+  X(80,82), X(84,86), X(88,90), X(92,94), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94)
+};
+M(96) = {
+  X(1,33), X(33,65), X(1,33), X(17,49), X(49,81), X(17,49), X(1,17), X(33,49),
+  X(65,81), X(9,41), X(41,73), X(9,41), X(25,57), X(57,89), X(25,57), X(9,25),
+  X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(5,37), X(37,69), X(5,37), X(21,53), X(53,85), X(21,53), X(5,21), X(37,53),
+  X(69,85), X(13,45), X(45,77), X(13,45), X(29,61), X(61,93), X(29,61), X(13,29),
+  X(45,61), X(77,93), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61),
+  X(65,69), X(73,77), X(81,85), X(89,93), X(3,35), X(35,67), X(3,35), X(19,51),
+  X(51,83), X(19,51), X(3,19), X(35,51), X(67,83), X(11,43), X(43,75), X(11,43),
+  X(27,59), X(59,91), X(27,59), X(11,27), X(43,59), X(75,91), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(7,39), X(39,71), X(7,39), X(23,55),
+  X(55,87), X(23,55), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47),
+  X(31,63), X(63,95), X(31,63), X(15,31), X(47,63), X(79,95), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95),
+  X(2,34), X(34,66), X(2,34), X(18,50), X(50,82), X(18,50), X(2,18), X(34,50),
+  X(66,82), X(10,42), X(42,74), X(10,42), X(26,58), X(58,90), X(26,58), X(10,26),
+  X(42,58), X(74,90), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(6,38), X(38,70), X(6,38), X(22,54), X(54,86), X(22,54), X(6,22), X(38,54),
+  X(70,86), X(14,46), X(46,78), X(14,46), X(30,62), X(62,94), X(30,62), X(14,30),
+  X(46,62), X(78,94), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(66,70), X(74,78), X(82,86), X(90,94), X(4,36), X(36,68), X(4,36), X(20,52),
+  X(52,84), X(20,52), X(4,20), X(36,52), X(68,84), X(12,44), X(44,76), X(12,44),
+  X(28,60), X(60,92), X(28,60), X(12,28), X(44,60), X(76,92), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(8,40), X(40,72), X(8,40), X(24,56),
+  X(56,88), X(24,56), X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48),
+  X(32,64), X(64,96), X(32,64), X(16,32), X(48,64), X(80,96), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64),
+  X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80),
+  X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96)
+};
+M(97) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,41), X(41,73), X(9,41),
+  X(25,57), X(57,89), X(25,57), X(9,25), X(41,57), X(73,89), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(5,37), X(37,69), X(5,37), X(21,53), X(53,85), X(21,53),
+  X(5,21), X(37,53), X(69,85), X(13,45), X(45,77), X(13,45), X(29,61), X(61,93),
+  X(29,61), X(13,29), X(45,61), X(77,93), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49),
+  X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(3,35), X(35,67), X(3,35), X(19,51), X(51,83), X(19,51),
+  X(3,19), X(35,51), X(67,83), X(11,43), X(43,75), X(11,43), X(27,59), X(59,91),
+  X(27,59), X(11,27), X(43,59), X(75,91), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(7,39), X(39,71), X(7,39), X(23,55), X(55,87), X(23,55),
+  X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47), X(31,63), X(63,95),
+  X(31,63), X(15,31), X(47,63), X(79,95), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47),
+  X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41),
+  X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73),
+  X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(2,34), X(34,66),
+  X(2,34), X(18,50), X(50,82), X(18,50), X(2,18), X(34,50), X(66,82), X(10,42),
+  X(42,74), X(10,42), X(26,58), X(58,90), X(26,58), X(10,26), X(42,58), X(74,90),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(6,38), X(38,70),
+  X(6,38), X(22,54), X(54,86), X(22,54), X(6,22), X(38,54), X(70,86), X(14,46),
+  X(46,78), X(14,46), X(30,62), X(62,94), X(30,62), X(14,30), X(46,62), X(78,94),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(4,36), X(36,68), X(4,36), X(20,52), X(52,84), X(20,52),
+  X(4,20), X(36,52), X(68,84), X(12,44), X(44,76), X(12,44), X(28,60), X(60,92),
+  X(28,60), X(12,28), X(44,60), X(76,92), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(8,40), X(40,72), X(8,40), X(24,56), X(56,88), X(24,56),
+  X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48), X(32,64), X(64,96),
+  X(32,64), X(16,32), X(48,64), X(80,96), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48),
+  X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96)
+};
+M(98) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,41), X(41,73), X(9,41),
+  X(25,57), X(57,89), X(25,57), X(9,25), X(41,57), X(73,89), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(5,37), X(37,69), X(5,37), X(21,53), X(53,85), X(21,53),
+  X(5,21), X(37,53), X(69,85), X(13,45), X(45,77), X(13,45), X(29,61), X(61,93),
+  X(29,61), X(13,29), X(45,61), X(77,93), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49),
+  X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(3,35), X(35,67), X(3,35), X(19,51), X(51,83), X(19,51),
+  X(3,19), X(35,51), X(67,83), X(11,43), X(43,75), X(11,43), X(27,59), X(59,91),
+  X(27,59), X(11,27), X(43,59), X(75,91), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(7,39), X(39,71), X(7,39), X(23,55), X(55,87), X(23,55),
+  X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47), X(31,63), X(63,95),
+  X(31,63), X(15,31), X(47,63), X(79,95), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47),
+  X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41),
+  X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73),
+  X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(2,66), X(34,98),
+  X(2,34), X(66,98), X(18,50), X(50,82), X(18,50), X(18,34), X(50,66), X(82,98),
+  X(2,18), X(34,50), X(66,82), X(10,42), X(42,74), X(10,42), X(26,58), X(58,90),
+  X(26,58), X(10,26), X(42,58), X(74,90), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(74,82), X(90,98), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(6,38), X(38,70), X(6,38), X(22,54), X(54,86), X(22,54), X(6,22), X(38,54),
+  X(70,86), X(14,46), X(46,78), X(14,46), X(30,62), X(62,94), X(30,62), X(14,30),
+  X(46,62), X(78,94), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(4,36), X(36,68), X(4,36), X(20,52), X(52,84), X(20,52), X(4,20), X(36,52),
+  X(68,84), X(12,44), X(44,76), X(12,44), X(28,60), X(60,92), X(28,60), X(12,28),
+  X(44,60), X(76,92), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(8,40), X(40,72), X(8,40), X(24,56), X(56,88), X(24,56), X(8,24), X(40,56),
+  X(72,88), X(16,48), X(48,80), X(16,48), X(32,64), X(64,96), X(32,64), X(16,32),
+  X(48,64), X(80,96), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64),
+  X(68,72), X(76,80), X(84,88), X(92,96), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82),
+  X(84,86), X(88,90), X(92,94), X(96,98), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98)
+};
+M(99) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,41), X(41,73), X(9,41),
+  X(25,57), X(57,89), X(25,57), X(9,25), X(41,57), X(73,89), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(5,37), X(37,69), X(5,37), X(21,53), X(53,85), X(21,53),
+  X(5,21), X(37,53), X(69,85), X(13,45), X(45,77), X(13,45), X(29,61), X(61,93),
+  X(29,61), X(13,29), X(45,61), X(77,93), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49),
+  X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(3,67), X(35,99), X(3,35), X(67,99), X(19,51), X(51,83),
+  X(19,51), X(19,35), X(51,67), X(83,99), X(3,19), X(35,51), X(67,83), X(11,43),
+  X(43,75), X(11,43), X(27,59), X(59,91), X(27,59), X(11,27), X(43,59), X(75,91),
+  X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(7,39), X(39,71), X(7,39), X(23,55),
+  X(55,87), X(23,55), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47),
+  X(31,63), X(63,95), X(31,63), X(15,31), X(47,63), X(79,95), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63),
+  X(67,71), X(75,79), X(83,87), X(91,95), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(2,66), X(34,98), X(2,34),
+  X(66,98), X(18,50), X(50,82), X(18,50), X(18,34), X(50,66), X(82,98), X(2,18),
+  X(34,50), X(66,82), X(10,42), X(42,74), X(10,42), X(26,58), X(58,90), X(26,58),
+  X(10,26), X(42,58), X(74,90), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82),
+  X(90,98), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(6,38),
+  X(38,70), X(6,38), X(22,54), X(54,86), X(22,54), X(6,22), X(38,54), X(70,86),
+  X(14,46), X(46,78), X(14,46), X(30,62), X(62,94), X(30,62), X(14,30), X(46,62),
+  X(78,94), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(6,10),
+  X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74),
+  X(78,82), X(86,90), X(94,98), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(4,36),
+  X(36,68), X(4,36), X(20,52), X(52,84), X(20,52), X(4,20), X(36,52), X(68,84),
+  X(12,44), X(44,76), X(12,44), X(28,60), X(60,92), X(28,60), X(12,28), X(44,60),
+  X(76,92), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(8,40),
+  X(40,72), X(8,40), X(24,56), X(56,88), X(24,56), X(8,24), X(40,56), X(72,88),
+  X(16,48), X(48,80), X(16,48), X(32,64), X(64,96), X(32,64), X(16,32), X(48,64),
+  X(80,96), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20),
+  X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52),
+  X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84),
+  X(86,88), X(90,92), X(94,96), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98)
+};
+M(100) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,41), X(41,73), X(9,41),
+  X(25,57), X(57,89), X(25,57), X(9,25), X(41,57), X(73,89), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(5,37), X(37,69), X(5,37), X(21,53), X(53,85), X(21,53),
+  X(5,21), X(37,53), X(69,85), X(13,45), X(45,77), X(13,45), X(29,61), X(61,93),
+  X(29,61), X(13,29), X(45,61), X(77,93), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49),
+  X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(3,67), X(35,99), X(3,35), X(67,99), X(19,51), X(51,83),
+  X(19,51), X(19,35), X(51,67), X(83,99), X(3,19), X(35,51), X(67,83), X(11,43),
+  X(43,75), X(11,43), X(27,59), X(59,91), X(27,59), X(11,27), X(43,59), X(75,91),
+  X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(7,39), X(39,71), X(7,39), X(23,55),
+  X(55,87), X(23,55), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47),
+  X(31,63), X(63,95), X(31,63), X(15,31), X(47,63), X(79,95), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63),
+  X(67,71), X(75,79), X(83,87), X(91,95), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(2,66), X(34,98), X(2,34),
+  X(66,98), X(18,50), X(50,82), X(18,50), X(18,34), X(50,66), X(82,98), X(2,18),
+  X(34,50), X(66,82), X(10,42), X(42,74), X(10,42), X(26,58), X(58,90), X(26,58),
+  X(10,26), X(42,58), X(74,90), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82),
+  X(90,98), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(6,38),
+  X(38,70), X(6,38), X(22,54), X(54,86), X(22,54), X(6,22), X(38,54), X(70,86),
+  X(14,46), X(46,78), X(14,46), X(30,62), X(62,94), X(30,62), X(14,30), X(46,62),
+  X(78,94), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(6,10),
+  X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74),
+  X(78,82), X(86,90), X(94,98), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(4,68),
+  X(36,100), X(4,36), X(68,100), X(20,52), X(52,84), X(20,52), X(20,36),
+  X(52,68), X(84,100), X(4,20), X(36,52), X(68,84), X(12,44), X(44,76), X(12,44),
+  X(28,60), X(60,92), X(28,60), X(12,28), X(44,60), X(76,92), X(12,20), X(28,36),
+  X(44,52), X(60,68), X(76,84), X(92,100), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(8,40), X(40,72), X(8,40), X(24,56), X(56,88), X(24,56),
+  X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48), X(32,64), X(64,96),
+  X(32,64), X(16,32), X(48,64), X(80,96), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100)
+};
+M(101) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,41), X(41,73), X(9,41),
+  X(25,57), X(57,89), X(25,57), X(9,25), X(41,57), X(73,89), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53), X(53,85),
+  X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85), X(13,45),
+  X(45,77), X(13,45), X(29,61), X(61,93), X(29,61), X(13,29), X(45,61), X(77,93),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(1,5), X(9,13), X(17,21), X(25,29),
+  X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(3,67), X(35,99), X(3,35), X(67,99), X(19,51), X(51,83), X(19,51),
+  X(19,35), X(51,67), X(83,99), X(3,19), X(35,51), X(67,83), X(11,43), X(43,75),
+  X(11,43), X(27,59), X(59,91), X(27,59), X(11,27), X(43,59), X(75,91), X(11,19),
+  X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(3,11), X(19,27), X(35,43),
+  X(51,59), X(67,75), X(83,91), X(7,39), X(39,71), X(7,39), X(23,55), X(55,87),
+  X(23,55), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47), X(31,63),
+  X(63,95), X(31,63), X(15,31), X(47,63), X(79,95), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43),
+  X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21),
+  X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53),
+  X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85),
+  X(87,89), X(91,93), X(95,97), X(99,101), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(2,66), X(34,98), X(2,34),
+  X(66,98), X(18,50), X(50,82), X(18,50), X(18,34), X(50,66), X(82,98), X(2,18),
+  X(34,50), X(66,82), X(10,42), X(42,74), X(10,42), X(26,58), X(58,90), X(26,58),
+  X(10,26), X(42,58), X(74,90), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82),
+  X(90,98), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(6,38),
+  X(38,70), X(6,38), X(22,54), X(54,86), X(22,54), X(6,22), X(38,54), X(70,86),
+  X(14,46), X(46,78), X(14,46), X(30,62), X(62,94), X(30,62), X(14,30), X(46,62),
+  X(78,94), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(6,10),
+  X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74),
+  X(78,82), X(86,90), X(94,98), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(4,68),
+  X(36,100), X(4,36), X(68,100), X(20,52), X(52,84), X(20,52), X(20,36),
+  X(52,68), X(84,100), X(4,20), X(36,52), X(68,84), X(12,44), X(44,76), X(12,44),
+  X(28,60), X(60,92), X(28,60), X(12,28), X(44,60), X(76,92), X(12,20), X(28,36),
+  X(44,52), X(60,68), X(76,84), X(92,100), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(8,40), X(40,72), X(8,40), X(24,56), X(56,88), X(24,56),
+  X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48), X(32,64), X(64,96),
+  X(32,64), X(16,32), X(48,64), X(80,96), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(1,2), X(3,4), X(5,6),
+  X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22),
+  X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38),
+  X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54),
+  X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70),
+  X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86),
+  X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100)
+};
+M(102) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,41), X(41,73), X(9,41),
+  X(25,57), X(57,89), X(25,57), X(9,25), X(41,57), X(73,89), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53), X(53,85),
+  X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85), X(13,45),
+  X(45,77), X(13,45), X(29,61), X(61,93), X(29,61), X(13,29), X(45,61), X(77,93),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(1,5), X(9,13), X(17,21), X(25,29),
+  X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(3,67), X(35,99), X(3,35), X(67,99), X(19,51), X(51,83), X(19,51),
+  X(19,35), X(51,67), X(83,99), X(3,19), X(35,51), X(67,83), X(11,43), X(43,75),
+  X(11,43), X(27,59), X(59,91), X(27,59), X(11,27), X(43,59), X(75,91), X(11,19),
+  X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(3,11), X(19,27), X(35,43),
+  X(51,59), X(67,75), X(83,91), X(7,39), X(39,71), X(7,39), X(23,55), X(55,87),
+  X(23,55), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47), X(31,63),
+  X(63,95), X(31,63), X(15,31), X(47,63), X(79,95), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43),
+  X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21),
+  X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53),
+  X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85),
+  X(87,89), X(91,93), X(95,97), X(99,101), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(2,66), X(34,98), X(2,34),
+  X(66,98), X(18,50), X(50,82), X(18,50), X(18,34), X(50,66), X(82,98), X(2,18),
+  X(34,50), X(66,82), X(10,42), X(42,74), X(10,42), X(26,58), X(58,90), X(26,58),
+  X(10,26), X(42,58), X(74,90), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82),
+  X(90,98), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(6,70),
+  X(38,102), X(6,38), X(70,102), X(22,54), X(54,86), X(22,54), X(22,38),
+  X(54,70), X(86,102), X(6,22), X(38,54), X(70,86), X(14,46), X(46,78), X(14,46),
+  X(30,62), X(62,94), X(30,62), X(14,30), X(46,62), X(78,94), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(78,86), X(94,102), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46),
+  X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(4,68),
+  X(36,100), X(4,36), X(68,100), X(20,52), X(52,84), X(20,52), X(20,36),
+  X(52,68), X(84,100), X(4,20), X(36,52), X(68,84), X(12,44), X(44,76), X(12,44),
+  X(28,60), X(60,92), X(28,60), X(12,28), X(44,60), X(76,92), X(12,20), X(28,36),
+  X(44,52), X(60,68), X(76,84), X(92,100), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(8,40), X(40,72), X(8,40), X(24,56), X(56,88), X(24,56),
+  X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48), X(32,64), X(64,96),
+  X(32,64), X(16,32), X(48,64), X(80,96), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26),
+  X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58),
+  X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86), X(88,90),
+  X(92,94), X(96,98), X(100,102), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20),
+  X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52),
+  X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84),
+  X(86,88), X(90,92), X(94,96), X(98,100), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102)
+};
+M(103) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,41), X(41,73), X(9,41),
+  X(25,57), X(57,89), X(25,57), X(9,25), X(41,57), X(73,89), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53), X(53,85),
+  X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85), X(13,45),
+  X(45,77), X(13,45), X(29,61), X(61,93), X(29,61), X(13,29), X(45,61), X(77,93),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(1,5), X(9,13), X(17,21), X(25,29),
+  X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(3,67), X(35,99), X(3,35), X(67,99), X(19,51), X(51,83), X(19,51),
+  X(19,35), X(51,67), X(83,99), X(3,19), X(35,51), X(67,83), X(11,43), X(43,75),
+  X(11,43), X(27,59), X(59,91), X(27,59), X(11,27), X(43,59), X(75,91), X(11,19),
+  X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(3,11), X(19,27), X(35,43),
+  X(51,59), X(67,75), X(83,91), X(7,71), X(39,103), X(7,39), X(71,103), X(23,55),
+  X(55,87), X(23,55), X(23,39), X(55,71), X(87,103), X(7,23), X(39,55), X(71,87),
+  X(15,47), X(47,79), X(15,47), X(31,63), X(63,95), X(31,63), X(15,31), X(47,63),
+  X(79,95), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(2,66), X(34,98), X(2,34), X(66,98),
+  X(18,50), X(50,82), X(18,50), X(18,34), X(50,66), X(82,98), X(2,18), X(34,50),
+  X(66,82), X(10,42), X(42,74), X(10,42), X(26,58), X(58,90), X(26,58), X(10,26),
+  X(42,58), X(74,90), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(6,70), X(38,102),
+  X(6,38), X(70,102), X(22,54), X(54,86), X(22,54), X(22,38), X(54,70),
+  X(86,102), X(6,22), X(38,54), X(70,86), X(14,46), X(46,78), X(14,46), X(30,62),
+  X(62,94), X(30,62), X(14,30), X(46,62), X(78,94), X(14,22), X(30,38), X(46,54),
+  X(62,70), X(78,86), X(94,102), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(4,68),
+  X(36,100), X(4,36), X(68,100), X(20,52), X(52,84), X(20,52), X(20,36),
+  X(52,68), X(84,100), X(4,20), X(36,52), X(68,84), X(12,44), X(44,76), X(12,44),
+  X(28,60), X(60,92), X(28,60), X(12,28), X(44,60), X(76,92), X(12,20), X(28,36),
+  X(44,52), X(60,68), X(76,84), X(92,100), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(8,40), X(40,72), X(8,40), X(24,56), X(56,88), X(24,56),
+  X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48), X(32,64), X(64,96),
+  X(32,64), X(16,32), X(48,64), X(80,96), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26),
+  X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58),
+  X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86), X(88,90),
+  X(92,94), X(96,98), X(100,102), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20),
+  X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52),
+  X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84),
+  X(86,88), X(90,92), X(94,96), X(98,100), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80),
+  X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96),
+  X(97,98), X(99,100), X(101,102)
+};
+M(104) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,41), X(41,73), X(9,41),
+  X(25,57), X(57,89), X(25,57), X(9,25), X(41,57), X(73,89), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53), X(53,85),
+  X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85), X(13,45),
+  X(45,77), X(13,45), X(29,61), X(61,93), X(29,61), X(13,29), X(45,61), X(77,93),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(1,5), X(9,13), X(17,21), X(25,29),
+  X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(3,67), X(35,99), X(3,35), X(67,99), X(19,51), X(51,83), X(19,51),
+  X(19,35), X(51,67), X(83,99), X(3,19), X(35,51), X(67,83), X(11,43), X(43,75),
+  X(11,43), X(27,59), X(59,91), X(27,59), X(11,27), X(43,59), X(75,91), X(11,19),
+  X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(3,11), X(19,27), X(35,43),
+  X(51,59), X(67,75), X(83,91), X(7,71), X(39,103), X(7,39), X(71,103), X(23,55),
+  X(55,87), X(23,55), X(23,39), X(55,71), X(87,103), X(7,23), X(39,55), X(71,87),
+  X(15,47), X(47,79), X(15,47), X(31,63), X(63,95), X(31,63), X(15,31), X(47,63),
+  X(79,95), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(2,66), X(34,98), X(2,34), X(66,98),
+  X(18,50), X(50,82), X(18,50), X(18,34), X(50,66), X(82,98), X(2,18), X(34,50),
+  X(66,82), X(10,42), X(42,74), X(10,42), X(26,58), X(58,90), X(26,58), X(10,26),
+  X(42,58), X(74,90), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(6,70), X(38,102),
+  X(6,38), X(70,102), X(22,54), X(54,86), X(22,54), X(22,38), X(54,70),
+  X(86,102), X(6,22), X(38,54), X(70,86), X(14,46), X(46,78), X(14,46), X(30,62),
+  X(62,94), X(30,62), X(14,30), X(46,62), X(78,94), X(14,22), X(30,38), X(46,54),
+  X(62,70), X(78,86), X(94,102), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(4,68),
+  X(36,100), X(4,36), X(68,100), X(20,52), X(52,84), X(20,52), X(20,36),
+  X(52,68), X(84,100), X(4,20), X(36,52), X(68,84), X(12,44), X(44,76), X(12,44),
+  X(28,60), X(60,92), X(28,60), X(12,28), X(44,60), X(76,92), X(12,20), X(28,36),
+  X(44,52), X(60,68), X(76,84), X(92,100), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(8,72), X(40,104), X(8,40), X(72,104), X(24,56), X(56,88),
+  X(24,56), X(24,40), X(56,72), X(88,104), X(8,24), X(40,56), X(72,88), X(16,48),
+  X(48,80), X(16,48), X(32,64), X(64,96), X(32,64), X(16,32), X(48,64), X(80,96),
+  X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104)
+};
+M(105) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73),
+  X(81,89), X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53),
+  X(53,85), X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85),
+  X(13,45), X(45,77), X(13,45), X(29,61), X(61,93), X(29,61), X(13,29), X(45,61),
+  X(77,93), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(5,9), X(13,17), X(21,25),
+  X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89),
+  X(93,97), X(101,105), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(3,67),
+  X(35,99), X(3,35), X(67,99), X(19,51), X(51,83), X(19,51), X(19,35), X(51,67),
+  X(83,99), X(3,19), X(35,51), X(67,83), X(11,43), X(43,75), X(11,43), X(27,59),
+  X(59,91), X(27,59), X(11,27), X(43,59), X(75,91), X(11,19), X(27,35), X(43,51),
+  X(59,67), X(75,83), X(91,99), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(7,71), X(39,103), X(7,39), X(71,103), X(23,55), X(55,87), X(23,55),
+  X(23,39), X(55,71), X(87,103), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79),
+  X(15,47), X(31,63), X(63,95), X(31,63), X(15,31), X(47,63), X(79,95), X(15,23),
+  X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61),
+  X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93),
+  X(95,97), X(99,101), X(103,105), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19),
+  X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51),
+  X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83),
+  X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(2,66), X(34,98), X(2,34),
+  X(66,98), X(18,50), X(50,82), X(18,50), X(18,34), X(50,66), X(82,98), X(2,18),
+  X(34,50), X(66,82), X(10,42), X(42,74), X(10,42), X(26,58), X(58,90), X(26,58),
+  X(10,26), X(42,58), X(74,90), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82),
+  X(90,98), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(6,70),
+  X(38,102), X(6,38), X(70,102), X(22,54), X(54,86), X(22,54), X(22,38),
+  X(54,70), X(86,102), X(6,22), X(38,54), X(70,86), X(14,46), X(46,78), X(14,46),
+  X(30,62), X(62,94), X(30,62), X(14,30), X(46,62), X(78,94), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(78,86), X(94,102), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46),
+  X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(4,68),
+  X(36,100), X(4,36), X(68,100), X(20,52), X(52,84), X(20,52), X(20,36),
+  X(52,68), X(84,100), X(4,20), X(36,52), X(68,84), X(12,44), X(44,76), X(12,44),
+  X(28,60), X(60,92), X(28,60), X(12,28), X(44,60), X(76,92), X(12,20), X(28,36),
+  X(44,52), X(60,68), X(76,84), X(92,100), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(8,72), X(40,104), X(8,40), X(72,104), X(24,56), X(56,88),
+  X(24,56), X(24,40), X(56,72), X(88,104), X(8,24), X(40,56), X(72,88), X(16,48),
+  X(48,80), X(16,48), X(32,64), X(64,96), X(32,64), X(16,32), X(48,64), X(80,96),
+  X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80),
+  X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96),
+  X(97,98), X(99,100), X(101,102), X(103,104)
+};
+M(106) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73),
+  X(81,89), X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53),
+  X(53,85), X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85),
+  X(13,45), X(45,77), X(13,45), X(29,61), X(61,93), X(29,61), X(13,29), X(45,61),
+  X(77,93), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(5,9), X(13,17), X(21,25),
+  X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89),
+  X(93,97), X(101,105), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(3,67),
+  X(35,99), X(3,35), X(67,99), X(19,51), X(51,83), X(19,51), X(19,35), X(51,67),
+  X(83,99), X(3,19), X(35,51), X(67,83), X(11,43), X(43,75), X(11,43), X(27,59),
+  X(59,91), X(27,59), X(11,27), X(43,59), X(75,91), X(11,19), X(27,35), X(43,51),
+  X(59,67), X(75,83), X(91,99), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(7,71), X(39,103), X(7,39), X(71,103), X(23,55), X(55,87), X(23,55),
+  X(23,39), X(55,71), X(87,103), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79),
+  X(15,47), X(31,63), X(63,95), X(31,63), X(15,31), X(47,63), X(79,95), X(15,23),
+  X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61),
+  X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93),
+  X(95,97), X(99,101), X(103,105), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19),
+  X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51),
+  X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83),
+  X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(2,66), X(34,98), X(2,34),
+  X(66,98), X(18,50), X(50,82), X(18,50), X(18,34), X(50,66), X(82,98), X(2,18),
+  X(34,50), X(66,82), X(10,74), X(42,106), X(10,42), X(74,106), X(26,58),
+  X(58,90), X(26,58), X(26,42), X(58,74), X(90,106), X(10,26), X(42,58),
+  X(74,90), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(6,70), X(38,102), X(6,38), X(70,102), X(22,54), X(54,86), X(22,54), X(22,38),
+  X(54,70), X(86,102), X(6,22), X(38,54), X(70,86), X(14,46), X(46,78), X(14,46),
+  X(30,62), X(62,94), X(30,62), X(14,30), X(46,62), X(78,94), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(78,86), X(94,102), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50),
+  X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(4,68), X(36,100), X(4,36),
+  X(68,100), X(20,52), X(52,84), X(20,52), X(20,36), X(52,68), X(84,100),
+  X(4,20), X(36,52), X(68,84), X(12,44), X(44,76), X(12,44), X(28,60), X(60,92),
+  X(28,60), X(12,28), X(44,60), X(76,92), X(12,20), X(28,36), X(44,52), X(60,68),
+  X(76,84), X(92,100), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(8,72), X(40,104), X(8,40), X(72,104), X(24,56), X(56,88), X(24,56), X(24,40),
+  X(56,72), X(88,104), X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48),
+  X(32,64), X(64,96), X(32,64), X(16,32), X(48,64), X(80,96), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48),
+  X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106)
+};
+M(107) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73),
+  X(81,89), X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53),
+  X(53,85), X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85),
+  X(13,45), X(45,77), X(13,45), X(29,61), X(61,93), X(29,61), X(13,29), X(45,61),
+  X(77,93), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(5,9), X(13,17), X(21,25),
+  X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89),
+  X(93,97), X(101,105), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(3,67),
+  X(35,99), X(3,35), X(67,99), X(19,51), X(51,83), X(19,51), X(19,35), X(51,67),
+  X(83,99), X(3,19), X(35,51), X(67,83), X(11,75), X(43,107), X(11,43),
+  X(75,107), X(27,59), X(59,91), X(27,59), X(27,43), X(59,75), X(91,107),
+  X(11,27), X(43,59), X(75,91), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(7,71), X(39,103), X(7,39), X(71,103), X(23,55),
+  X(55,87), X(23,55), X(23,39), X(55,71), X(87,103), X(7,23), X(39,55), X(71,87),
+  X(15,47), X(47,79), X(15,47), X(31,63), X(63,95), X(31,63), X(15,31), X(47,63),
+  X(79,95), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47),
+  X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(2,66), X(34,98), X(2,34), X(66,98), X(18,50),
+  X(50,82), X(18,50), X(18,34), X(50,66), X(82,98), X(2,18), X(34,50), X(66,82),
+  X(10,74), X(42,106), X(10,42), X(74,106), X(26,58), X(58,90), X(26,58),
+  X(26,42), X(58,74), X(90,106), X(10,26), X(42,58), X(74,90), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(6,70), X(38,102), X(6,38),
+  X(70,102), X(22,54), X(54,86), X(22,54), X(22,38), X(54,70), X(86,102),
+  X(6,22), X(38,54), X(70,86), X(14,46), X(46,78), X(14,46), X(30,62), X(62,94),
+  X(30,62), X(14,30), X(46,62), X(78,94), X(14,22), X(30,38), X(46,54), X(62,70),
+  X(78,86), X(94,102), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(4,68), X(36,100), X(4,36), X(68,100), X(20,52),
+  X(52,84), X(20,52), X(20,36), X(52,68), X(84,100), X(4,20), X(36,52), X(68,84),
+  X(12,44), X(44,76), X(12,44), X(28,60), X(60,92), X(28,60), X(12,28), X(44,60),
+  X(76,92), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(8,72), X(40,104), X(8,40),
+  X(72,104), X(24,56), X(56,88), X(24,56), X(24,40), X(56,72), X(88,104),
+  X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48), X(32,64), X(64,96),
+  X(32,64), X(16,32), X(48,64), X(80,96), X(16,24), X(32,40), X(48,56), X(64,72),
+  X(80,88), X(96,104), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64),
+  X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(4,6), X(8,10), X(12,14),
+  X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46),
+  X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78),
+  X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64),
+  X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80),
+  X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96),
+  X(97,98), X(99,100), X(101,102), X(103,104), X(105,106)
+};
+M(108) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73),
+  X(81,89), X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53),
+  X(53,85), X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85),
+  X(13,45), X(45,77), X(13,45), X(29,61), X(61,93), X(29,61), X(13,29), X(45,61),
+  X(77,93), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(5,9), X(13,17), X(21,25),
+  X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89),
+  X(93,97), X(101,105), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45),
+  X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(3,67),
+  X(35,99), X(3,35), X(67,99), X(19,51), X(51,83), X(19,51), X(19,35), X(51,67),
+  X(83,99), X(3,19), X(35,51), X(67,83), X(11,75), X(43,107), X(11,43),
+  X(75,107), X(27,59), X(59,91), X(27,59), X(27,43), X(59,75), X(91,107),
+  X(11,27), X(43,59), X(75,91), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(7,71), X(39,103), X(7,39), X(71,103), X(23,55),
+  X(55,87), X(23,55), X(23,39), X(55,71), X(87,103), X(7,23), X(39,55), X(71,87),
+  X(15,47), X(47,79), X(15,47), X(31,63), X(63,95), X(31,63), X(15,31), X(47,63),
+  X(79,95), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47),
+  X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(2,66), X(34,98), X(2,34), X(66,98), X(18,50),
+  X(50,82), X(18,50), X(18,34), X(50,66), X(82,98), X(2,18), X(34,50), X(66,82),
+  X(10,74), X(42,106), X(10,42), X(74,106), X(26,58), X(58,90), X(26,58),
+  X(26,42), X(58,74), X(90,106), X(10,26), X(42,58), X(74,90), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(6,70), X(38,102), X(6,38),
+  X(70,102), X(22,54), X(54,86), X(22,54), X(22,38), X(54,70), X(86,102),
+  X(6,22), X(38,54), X(70,86), X(14,46), X(46,78), X(14,46), X(30,62), X(62,94),
+  X(30,62), X(14,30), X(46,62), X(78,94), X(14,22), X(30,38), X(46,54), X(62,70),
+  X(78,86), X(94,102), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(4,68), X(36,100), X(4,36), X(68,100), X(20,52),
+  X(52,84), X(20,52), X(20,36), X(52,68), X(84,100), X(4,20), X(36,52), X(68,84),
+  X(12,76), X(44,108), X(12,44), X(76,108), X(28,60), X(60,92), X(28,60),
+  X(28,44), X(60,76), X(92,108), X(12,28), X(44,60), X(76,92), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(8,72), X(40,104),
+  X(8,40), X(72,104), X(24,56), X(56,88), X(24,56), X(24,40), X(56,72),
+  X(88,104), X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48), X(32,64),
+  X(64,96), X(32,64), X(16,32), X(48,64), X(80,96), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(96,104), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60),
+  X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(104,108), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80),
+  X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96),
+  X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108)
+};
+M(109) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73),
+  X(81,89), X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53),
+  X(53,85), X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85),
+  X(13,77), X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61),
+  X(29,45), X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(3,67), X(35,99), X(3,35), X(67,99),
+  X(19,51), X(51,83), X(19,51), X(19,35), X(51,67), X(83,99), X(3,19), X(35,51),
+  X(67,83), X(11,75), X(43,107), X(11,43), X(75,107), X(27,59), X(59,91),
+  X(27,59), X(27,43), X(59,75), X(91,107), X(11,27), X(43,59), X(75,91), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(7,71),
+  X(39,103), X(7,39), X(71,103), X(23,55), X(55,87), X(23,55), X(23,39),
+  X(55,71), X(87,103), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47),
+  X(31,63), X(63,95), X(31,63), X(15,31), X(47,63), X(79,95), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51),
+  X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(3,5), X(7,9), X(11,13), X(15,17),
+  X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49),
+  X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81),
+  X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105), X(107,109),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95),
+  X(97,99), X(101,103), X(105,107), X(2,66), X(34,98), X(2,34), X(66,98),
+  X(18,50), X(50,82), X(18,50), X(18,34), X(50,66), X(82,98), X(2,18), X(34,50),
+  X(66,82), X(10,74), X(42,106), X(10,42), X(74,106), X(26,58), X(58,90),
+  X(26,58), X(26,42), X(58,74), X(90,106), X(10,26), X(42,58), X(74,90), X(2,10),
+  X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(6,70),
+  X(38,102), X(6,38), X(70,102), X(22,54), X(54,86), X(22,54), X(22,38),
+  X(54,70), X(86,102), X(6,22), X(38,54), X(70,86), X(14,46), X(46,78), X(14,46),
+  X(30,62), X(62,94), X(30,62), X(14,30), X(46,62), X(78,94), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(78,86), X(94,102), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50),
+  X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(4,68), X(36,100), X(4,36),
+  X(68,100), X(20,52), X(52,84), X(20,52), X(20,36), X(52,68), X(84,100),
+  X(4,20), X(36,52), X(68,84), X(12,76), X(44,108), X(12,44), X(76,108),
+  X(28,60), X(60,92), X(28,60), X(28,44), X(60,76), X(92,108), X(12,28),
+  X(44,60), X(76,92), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(8,72), X(40,104), X(8,40), X(72,104), X(24,56), X(56,88),
+  X(24,56), X(24,40), X(56,72), X(88,104), X(8,24), X(40,56), X(72,88), X(16,48),
+  X(48,80), X(16,48), X(32,64), X(64,96), X(32,64), X(16,32), X(48,64), X(80,96),
+  X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(8,12), X(16,20), X(24,28), X(32,36),
+  X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108)
+};
+M(110) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73),
+  X(81,89), X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53),
+  X(53,85), X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85),
+  X(13,77), X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61),
+  X(29,45), X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(3,67), X(35,99), X(3,35), X(67,99),
+  X(19,51), X(51,83), X(19,51), X(19,35), X(51,67), X(83,99), X(3,19), X(35,51),
+  X(67,83), X(11,75), X(43,107), X(11,43), X(75,107), X(27,59), X(59,91),
+  X(27,59), X(27,43), X(59,75), X(91,107), X(11,27), X(43,59), X(75,91), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(7,71),
+  X(39,103), X(7,39), X(71,103), X(23,55), X(55,87), X(23,55), X(23,39),
+  X(55,71), X(87,103), X(7,23), X(39,55), X(71,87), X(15,47), X(47,79), X(15,47),
+  X(31,63), X(63,95), X(31,63), X(15,31), X(47,63), X(79,95), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51),
+  X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(3,5), X(7,9), X(11,13), X(15,17),
+  X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49),
+  X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81),
+  X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105), X(107,109),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95),
+  X(97,99), X(101,103), X(105,107), X(2,66), X(34,98), X(2,34), X(66,98),
+  X(18,50), X(50,82), X(18,50), X(18,34), X(50,66), X(82,98), X(2,18), X(34,50),
+  X(66,82), X(10,74), X(42,106), X(10,42), X(74,106), X(26,58), X(58,90),
+  X(26,58), X(26,42), X(58,74), X(90,106), X(10,26), X(42,58), X(74,90), X(2,10),
+  X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(6,70),
+  X(38,102), X(6,38), X(70,102), X(22,54), X(54,86), X(22,54), X(22,38),
+  X(54,70), X(86,102), X(6,22), X(38,54), X(70,86), X(14,78), X(46,110),
+  X(14,46), X(78,110), X(30,62), X(62,94), X(30,62), X(30,46), X(62,78),
+  X(94,110), X(14,30), X(46,62), X(78,94), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(4,68), X(36,100), X(4,36), X(68,100), X(20,52),
+  X(52,84), X(20,52), X(20,36), X(52,68), X(84,100), X(4,20), X(36,52), X(68,84),
+  X(12,76), X(44,108), X(12,44), X(76,108), X(28,60), X(60,92), X(28,60),
+  X(28,44), X(60,76), X(92,108), X(12,28), X(44,60), X(76,92), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(8,72), X(40,104),
+  X(8,40), X(72,104), X(24,56), X(56,88), X(24,56), X(24,40), X(56,72),
+  X(88,104), X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48), X(32,64),
+  X(64,96), X(32,64), X(16,32), X(48,64), X(80,96), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(96,104), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60),
+  X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(104,108), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82),
+  X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64),
+  X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110)
+};
+M(111) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73),
+  X(81,89), X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53),
+  X(53,85), X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85),
+  X(13,77), X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61),
+  X(29,45), X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(3,67), X(35,99), X(3,35), X(67,99),
+  X(19,51), X(51,83), X(19,51), X(19,35), X(51,67), X(83,99), X(3,19), X(35,51),
+  X(67,83), X(11,75), X(43,107), X(11,43), X(75,107), X(27,59), X(59,91),
+  X(27,59), X(27,43), X(59,75), X(91,107), X(11,27), X(43,59), X(75,91), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(7,71),
+  X(39,103), X(7,39), X(71,103), X(23,55), X(55,87), X(23,55), X(23,39),
+  X(55,71), X(87,103), X(7,23), X(39,55), X(71,87), X(15,79), X(47,111),
+  X(15,47), X(79,111), X(31,63), X(63,95), X(31,63), X(31,47), X(63,79),
+  X(95,111), X(15,31), X(47,63), X(79,95), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(103,111), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(2,66),
+  X(34,98), X(2,34), X(66,98), X(18,50), X(50,82), X(18,50), X(18,34), X(50,66),
+  X(82,98), X(2,18), X(34,50), X(66,82), X(10,74), X(42,106), X(10,42),
+  X(74,106), X(26,58), X(58,90), X(26,58), X(26,42), X(58,74), X(90,106),
+  X(10,26), X(42,58), X(74,90), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(6,70), X(38,102), X(6,38), X(70,102), X(22,54),
+  X(54,86), X(22,54), X(22,38), X(54,70), X(86,102), X(6,22), X(38,54), X(70,86),
+  X(14,78), X(46,110), X(14,46), X(78,110), X(30,62), X(62,94), X(30,62),
+  X(30,46), X(62,78), X(94,110), X(14,30), X(46,62), X(78,94), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(4,68), X(36,100), X(4,36), X(68,100),
+  X(20,52), X(52,84), X(20,52), X(20,36), X(52,68), X(84,100), X(4,20), X(36,52),
+  X(68,84), X(12,76), X(44,108), X(12,44), X(76,108), X(28,60), X(60,92),
+  X(28,60), X(28,44), X(60,76), X(92,108), X(12,28), X(44,60), X(76,92), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(8,72),
+  X(40,104), X(8,40), X(72,104), X(24,56), X(56,88), X(24,56), X(24,40),
+  X(56,72), X(88,104), X(8,24), X(40,56), X(72,88), X(16,48), X(48,80), X(16,48),
+  X(32,64), X(64,96), X(32,64), X(16,32), X(48,64), X(80,96), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(104,108),
+  X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64),
+  X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(4,6), X(8,10), X(12,14),
+  X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46),
+  X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78),
+  X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106),
+  X(108,110), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110)
+};
+M(112) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,49), X(49,81), X(17,49), X(17,33),
+  X(49,65), X(81,97), X(1,17), X(33,49), X(65,81), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73),
+  X(81,89), X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53),
+  X(53,85), X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85),
+  X(13,77), X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61),
+  X(29,45), X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(3,67), X(35,99), X(3,35), X(67,99),
+  X(19,51), X(51,83), X(19,51), X(19,35), X(51,67), X(83,99), X(3,19), X(35,51),
+  X(67,83), X(11,75), X(43,107), X(11,43), X(75,107), X(27,59), X(59,91),
+  X(27,59), X(27,43), X(59,75), X(91,107), X(11,27), X(43,59), X(75,91), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(7,71),
+  X(39,103), X(7,39), X(71,103), X(23,55), X(55,87), X(23,55), X(23,39),
+  X(55,71), X(87,103), X(7,23), X(39,55), X(71,87), X(15,79), X(47,111),
+  X(15,47), X(79,111), X(31,63), X(63,95), X(31,63), X(31,47), X(63,79),
+  X(95,111), X(15,31), X(47,63), X(79,95), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(103,111), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(2,66),
+  X(34,98), X(2,34), X(66,98), X(18,50), X(50,82), X(18,50), X(18,34), X(50,66),
+  X(82,98), X(2,18), X(34,50), X(66,82), X(10,74), X(42,106), X(10,42),
+  X(74,106), X(26,58), X(58,90), X(26,58), X(26,42), X(58,74), X(90,106),
+  X(10,26), X(42,58), X(74,90), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(6,70), X(38,102), X(6,38), X(70,102), X(22,54),
+  X(54,86), X(22,54), X(22,38), X(54,70), X(86,102), X(6,22), X(38,54), X(70,86),
+  X(14,78), X(46,110), X(14,46), X(78,110), X(30,62), X(62,94), X(30,62),
+  X(30,46), X(62,78), X(94,110), X(14,30), X(46,62), X(78,94), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(4,68), X(36,100), X(4,36), X(68,100),
+  X(20,52), X(52,84), X(20,52), X(20,36), X(52,68), X(84,100), X(4,20), X(36,52),
+  X(68,84), X(12,76), X(44,108), X(12,44), X(76,108), X(28,60), X(60,92),
+  X(28,60), X(28,44), X(60,76), X(92,108), X(12,28), X(44,60), X(76,92), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(8,72),
+  X(40,104), X(8,40), X(72,104), X(24,56), X(56,88), X(24,56), X(24,40),
+  X(56,72), X(88,104), X(8,24), X(40,56), X(72,88), X(16,80), X(48,112),
+  X(16,48), X(80,112), X(32,64), X(64,96), X(32,64), X(32,48), X(64,80),
+  X(96,112), X(16,32), X(48,64), X(80,96), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112)
+};
+M(113) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53), X(53,85),
+  X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85), X(13,77),
+  X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61), X(29,45),
+  X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(5,9), X(13,17), X(21,25), X(29,33),
+  X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(3,67), X(35,99), X(3,35), X(67,99), X(19,51),
+  X(51,83), X(19,51), X(19,35), X(51,67), X(83,99), X(3,19), X(35,51), X(67,83),
+  X(11,75), X(43,107), X(11,43), X(75,107), X(27,59), X(59,91), X(27,59),
+  X(27,43), X(59,75), X(91,107), X(11,27), X(43,59), X(75,91), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(7,71), X(39,103), X(7,39),
+  X(71,103), X(23,55), X(55,87), X(23,55), X(23,39), X(55,71), X(87,103),
+  X(7,23), X(39,55), X(71,87), X(15,79), X(47,111), X(15,47), X(79,111),
+  X(31,63), X(63,95), X(31,63), X(31,47), X(63,79), X(95,111), X(15,31),
+  X(47,63), X(79,95), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33),
+  X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65),
+  X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(2,66), X(34,98), X(2,34), X(66,98), X(18,50),
+  X(50,82), X(18,50), X(18,34), X(50,66), X(82,98), X(2,18), X(34,50), X(66,82),
+  X(10,74), X(42,106), X(10,42), X(74,106), X(26,58), X(58,90), X(26,58),
+  X(26,42), X(58,74), X(90,106), X(10,26), X(42,58), X(74,90), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(6,70), X(38,102), X(6,38),
+  X(70,102), X(22,54), X(54,86), X(22,54), X(22,38), X(54,70), X(86,102),
+  X(6,22), X(38,54), X(70,86), X(14,78), X(46,110), X(14,46), X(78,110),
+  X(30,62), X(62,94), X(30,62), X(30,46), X(62,78), X(94,110), X(14,30),
+  X(46,62), X(78,94), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(4,68), X(36,100), X(4,36), X(68,100), X(20,52), X(52,84), X(20,52), X(20,36),
+  X(52,68), X(84,100), X(4,20), X(36,52), X(68,84), X(12,76), X(44,108),
+  X(12,44), X(76,108), X(28,60), X(60,92), X(28,60), X(28,44), X(60,76),
+  X(92,108), X(12,28), X(44,60), X(76,92), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(8,72), X(40,104), X(8,40), X(72,104),
+  X(24,56), X(56,88), X(24,56), X(24,40), X(56,72), X(88,104), X(8,24), X(40,56),
+  X(72,88), X(16,80), X(48,112), X(16,48), X(80,112), X(32,64), X(64,96),
+  X(32,64), X(32,48), X(64,80), X(96,112), X(16,32), X(48,64), X(80,96), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(110,112), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112)
+};
+M(114) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53), X(53,85),
+  X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85), X(13,77),
+  X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61), X(29,45),
+  X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(5,9), X(13,17), X(21,25), X(29,33),
+  X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(3,67), X(35,99), X(3,35), X(67,99), X(19,51),
+  X(51,83), X(19,51), X(19,35), X(51,67), X(83,99), X(3,19), X(35,51), X(67,83),
+  X(11,75), X(43,107), X(11,43), X(75,107), X(27,59), X(59,91), X(27,59),
+  X(27,43), X(59,75), X(91,107), X(11,27), X(43,59), X(75,91), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(7,71), X(39,103), X(7,39),
+  X(71,103), X(23,55), X(55,87), X(23,55), X(23,39), X(55,71), X(87,103),
+  X(7,23), X(39,55), X(71,87), X(15,79), X(47,111), X(15,47), X(79,111),
+  X(31,63), X(63,95), X(31,63), X(31,47), X(63,79), X(95,111), X(15,31),
+  X(47,63), X(79,95), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33),
+  X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65),
+  X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(2,66), X(34,98), X(2,34), X(66,98), X(18,82),
+  X(50,114), X(18,50), X(82,114), X(2,18), X(34,50), X(66,82), X(98,114),
+  X(10,74), X(42,106), X(10,42), X(74,106), X(26,58), X(58,90), X(26,58),
+  X(26,42), X(58,74), X(90,106), X(10,26), X(42,58), X(74,90), X(10,18),
+  X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114), X(2,10),
+  X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(6,70),
+  X(38,102), X(6,38), X(70,102), X(22,54), X(54,86), X(22,54), X(22,38),
+  X(54,70), X(86,102), X(6,22), X(38,54), X(70,86), X(14,78), X(46,110),
+  X(14,46), X(78,110), X(30,62), X(62,94), X(30,62), X(30,46), X(62,78),
+  X(94,110), X(14,30), X(46,62), X(78,94), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(4,68), X(36,100), X(4,36), X(68,100), X(20,52),
+  X(52,84), X(20,52), X(20,36), X(52,68), X(84,100), X(4,20), X(36,52), X(68,84),
+  X(12,76), X(44,108), X(12,44), X(76,108), X(28,60), X(60,92), X(28,60),
+  X(28,44), X(60,76), X(92,108), X(12,28), X(44,60), X(76,92), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(8,72), X(40,104),
+  X(8,40), X(72,104), X(24,56), X(56,88), X(24,56), X(24,40), X(56,72),
+  X(88,104), X(8,24), X(40,56), X(72,88), X(16,80), X(48,112), X(16,48),
+  X(80,112), X(32,64), X(64,96), X(32,64), X(32,48), X(64,80), X(96,112),
+  X(16,32), X(48,64), X(80,96), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(104,112), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48),
+  X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104),
+  X(108,112), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30),
+  X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62),
+  X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94),
+  X(96,98), X(100,102), X(104,106), X(108,110), X(112,114), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114)
+};
+M(115) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53), X(53,85),
+  X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85), X(13,77),
+  X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61), X(29,45),
+  X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(5,9), X(13,17), X(21,25), X(29,33),
+  X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(3,67), X(35,99), X(3,35), X(67,99), X(19,83),
+  X(51,115), X(19,51), X(83,115), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(11,75), X(43,107), X(11,43), X(75,107), X(27,59), X(59,91), X(27,59),
+  X(27,43), X(59,75), X(91,107), X(11,27), X(43,59), X(75,91), X(11,19),
+  X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(107,115), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(7,71),
+  X(39,103), X(7,39), X(71,103), X(23,55), X(55,87), X(23,55), X(23,39),
+  X(55,71), X(87,103), X(7,23), X(39,55), X(71,87), X(15,79), X(47,111),
+  X(15,47), X(79,111), X(31,63), X(63,95), X(31,63), X(31,47), X(63,79),
+  X(95,111), X(15,31), X(47,63), X(79,95), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(103,111), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99),
+  X(103,107), X(111,115), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(2,66), X(34,98), X(2,34), X(66,98), X(18,82), X(50,114), X(18,50), X(82,114),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(10,74), X(42,106), X(10,42),
+  X(74,106), X(26,58), X(58,90), X(26,58), X(26,42), X(58,74), X(90,106),
+  X(10,26), X(42,58), X(74,90), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82),
+  X(90,98), X(106,114), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(6,70), X(38,102), X(6,38), X(70,102), X(22,54),
+  X(54,86), X(22,54), X(22,38), X(54,70), X(86,102), X(6,22), X(38,54), X(70,86),
+  X(14,78), X(46,110), X(14,46), X(78,110), X(30,62), X(62,94), X(30,62),
+  X(30,46), X(62,78), X(94,110), X(14,30), X(46,62), X(78,94), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(94,98), X(102,106), X(110,114), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(4,68), X(36,100), X(4,36), X(68,100),
+  X(20,52), X(52,84), X(20,52), X(20,36), X(52,68), X(84,100), X(4,20), X(36,52),
+  X(68,84), X(12,76), X(44,108), X(12,44), X(76,108), X(28,60), X(60,92),
+  X(28,60), X(28,44), X(60,76), X(92,108), X(12,28), X(44,60), X(76,92), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(8,72),
+  X(40,104), X(8,40), X(72,104), X(24,56), X(56,88), X(24,56), X(24,40),
+  X(56,72), X(88,104), X(8,24), X(40,56), X(72,88), X(16,80), X(48,112),
+  X(16,48), X(80,112), X(32,64), X(64,96), X(32,64), X(32,48), X(64,80),
+  X(96,112), X(16,32), X(48,64), X(80,96), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64),
+  X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114)
+};
+M(116) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,53), X(53,85),
+  X(21,53), X(21,37), X(53,69), X(85,101), X(5,21), X(37,53), X(69,85), X(13,77),
+  X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61), X(29,45),
+  X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(5,9), X(13,17), X(21,25), X(29,33),
+  X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(3,67), X(35,99), X(3,35), X(67,99), X(19,83),
+  X(51,115), X(19,51), X(83,115), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(11,75), X(43,107), X(11,43), X(75,107), X(27,59), X(59,91), X(27,59),
+  X(27,43), X(59,75), X(91,107), X(11,27), X(43,59), X(75,91), X(11,19),
+  X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(107,115), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(7,71),
+  X(39,103), X(7,39), X(71,103), X(23,55), X(55,87), X(23,55), X(23,39),
+  X(55,71), X(87,103), X(7,23), X(39,55), X(71,87), X(15,79), X(47,111),
+  X(15,47), X(79,111), X(31,63), X(63,95), X(31,63), X(31,47), X(63,79),
+  X(95,111), X(15,31), X(47,63), X(79,95), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(103,111), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99),
+  X(103,107), X(111,115), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(2,66), X(34,98), X(2,34), X(66,98), X(18,82), X(50,114), X(18,50), X(82,114),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(10,74), X(42,106), X(10,42),
+  X(74,106), X(26,58), X(58,90), X(26,58), X(26,42), X(58,74), X(90,106),
+  X(10,26), X(42,58), X(74,90), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82),
+  X(90,98), X(106,114), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(6,70), X(38,102), X(6,38), X(70,102), X(22,54),
+  X(54,86), X(22,54), X(22,38), X(54,70), X(86,102), X(6,22), X(38,54), X(70,86),
+  X(14,78), X(46,110), X(14,46), X(78,110), X(30,62), X(62,94), X(30,62),
+  X(30,46), X(62,78), X(94,110), X(14,30), X(46,62), X(78,94), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(94,98), X(102,106), X(110,114), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(4,68), X(36,100), X(4,36), X(68,100),
+  X(20,84), X(52,116), X(20,52), X(84,116), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(12,76), X(44,108), X(12,44), X(76,108), X(28,60), X(60,92),
+  X(28,60), X(28,44), X(60,76), X(92,108), X(12,28), X(44,60), X(76,92),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(8,72),
+  X(40,104), X(8,40), X(72,104), X(24,56), X(56,88), X(24,56), X(24,40),
+  X(56,72), X(88,104), X(8,24), X(40,56), X(72,88), X(16,80), X(48,112),
+  X(16,48), X(80,112), X(32,64), X(64,96), X(32,64), X(32,48), X(64,80),
+  X(96,112), X(16,32), X(48,64), X(80,96), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(8,12), X(16,20), X(24,28), X(32,36),
+  X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80),
+  X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96),
+  X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116)
+};
+M(117) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,85), X(53,117),
+  X(21,53), X(85,117), X(5,21), X(37,53), X(69,85), X(101,117), X(13,77),
+  X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61), X(29,45),
+  X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(3,67), X(35,99), X(3,35),
+  X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(11,75), X(43,107), X(11,43), X(75,107), X(27,59),
+  X(59,91), X(27,59), X(27,43), X(59,75), X(91,107), X(11,27), X(43,59),
+  X(75,91), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(7,71), X(39,103), X(7,39), X(71,103), X(23,55), X(55,87),
+  X(23,55), X(23,39), X(55,71), X(87,103), X(7,23), X(39,55), X(71,87), X(15,79),
+  X(47,111), X(15,47), X(79,111), X(31,63), X(63,95), X(31,63), X(31,47),
+  X(63,79), X(95,111), X(15,31), X(47,63), X(79,95), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(111,115), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95),
+  X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(2,66), X(34,98),
+  X(2,34), X(66,98), X(18,82), X(50,114), X(18,50), X(82,114), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(10,74), X(42,106), X(10,42), X(74,106), X(26,58),
+  X(58,90), X(26,58), X(26,42), X(58,74), X(90,106), X(10,26), X(42,58),
+  X(74,90), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(106,114), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(6,70), X(38,102), X(6,38), X(70,102), X(22,54), X(54,86),
+  X(22,54), X(22,38), X(54,70), X(86,102), X(6,22), X(38,54), X(70,86), X(14,78),
+  X(46,110), X(14,46), X(78,110), X(30,62), X(62,94), X(30,62), X(30,46),
+  X(62,78), X(94,110), X(14,30), X(46,62), X(78,94), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(6,10), X(14,18), X(22,26),
+  X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90),
+  X(94,98), X(102,106), X(110,114), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(4,68), X(36,100), X(4,36), X(68,100), X(20,84),
+  X(52,116), X(20,52), X(84,116), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(12,76), X(44,108), X(12,44), X(76,108), X(28,60), X(60,92), X(28,60),
+  X(28,44), X(60,76), X(92,108), X(12,28), X(44,60), X(76,92), X(12,20),
+  X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(8,72),
+  X(40,104), X(8,40), X(72,104), X(24,56), X(56,88), X(24,56), X(24,40),
+  X(56,72), X(88,104), X(8,24), X(40,56), X(72,88), X(16,80), X(48,112),
+  X(16,48), X(80,112), X(32,64), X(64,96), X(32,64), X(32,48), X(64,80),
+  X(96,112), X(16,32), X(48,64), X(80,96), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(8,12), X(16,20), X(24,28), X(32,36),
+  X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33),
+  X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49),
+  X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65),
+  X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81),
+  X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97),
+  X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116)
+};
+M(118) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,85), X(53,117),
+  X(21,53), X(85,117), X(5,21), X(37,53), X(69,85), X(101,117), X(13,77),
+  X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61), X(29,45),
+  X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(3,67), X(35,99), X(3,35),
+  X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(11,75), X(43,107), X(11,43), X(75,107), X(27,59),
+  X(59,91), X(27,59), X(27,43), X(59,75), X(91,107), X(11,27), X(43,59),
+  X(75,91), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(7,71), X(39,103), X(7,39), X(71,103), X(23,55), X(55,87),
+  X(23,55), X(23,39), X(55,71), X(87,103), X(7,23), X(39,55), X(71,87), X(15,79),
+  X(47,111), X(15,47), X(79,111), X(31,63), X(63,95), X(31,63), X(31,47),
+  X(63,79), X(95,111), X(15,31), X(47,63), X(79,95), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(111,115), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31),
+  X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63),
+  X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95),
+  X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(2,66), X(34,98),
+  X(2,34), X(66,98), X(18,82), X(50,114), X(18,50), X(82,114), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(10,74), X(42,106), X(10,42), X(74,106), X(26,58),
+  X(58,90), X(26,58), X(26,42), X(58,74), X(90,106), X(10,26), X(42,58),
+  X(74,90), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(106,114), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(6,70), X(38,102), X(6,38), X(70,102), X(22,86), X(54,118),
+  X(22,54), X(86,118), X(6,22), X(38,54), X(70,86), X(102,118), X(14,78),
+  X(46,110), X(14,46), X(78,110), X(30,62), X(62,94), X(30,62), X(30,46),
+  X(62,78), X(94,110), X(14,30), X(46,62), X(78,94), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(4,68), X(36,100), X(4,36),
+  X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(12,76), X(44,108), X(12,44), X(76,108), X(28,60),
+  X(60,92), X(28,60), X(28,44), X(60,76), X(92,108), X(12,28), X(44,60),
+  X(76,92), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100),
+  X(108,116), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(8,72), X(40,104), X(8,40), X(72,104), X(24,56), X(56,88),
+  X(24,56), X(24,40), X(56,72), X(88,104), X(8,24), X(40,56), X(72,88), X(16,80),
+  X(48,112), X(16,48), X(80,112), X(32,64), X(64,96), X(32,64), X(32,48),
+  X(64,80), X(96,112), X(16,32), X(48,64), X(80,96), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118)
+};
+M(119) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,85), X(53,117),
+  X(21,53), X(85,117), X(5,21), X(37,53), X(69,85), X(101,117), X(13,77),
+  X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61), X(29,45),
+  X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(3,67), X(35,99), X(3,35),
+  X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(11,75), X(43,107), X(11,43), X(75,107), X(27,59),
+  X(59,91), X(27,59), X(27,43), X(59,75), X(91,107), X(11,27), X(43,59),
+  X(75,91), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(7,71), X(39,103), X(7,39), X(71,103), X(23,87), X(55,119),
+  X(23,55), X(87,119), X(7,23), X(39,55), X(71,87), X(103,119), X(15,79),
+  X(47,111), X(15,47), X(79,111), X(31,63), X(63,95), X(31,63), X(31,47),
+  X(63,79), X(95,111), X(15,31), X(47,63), X(79,95), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(2,66), X(34,98), X(2,34), X(66,98),
+  X(18,82), X(50,114), X(18,50), X(82,114), X(2,18), X(34,50), X(66,82),
+  X(98,114), X(10,74), X(42,106), X(10,42), X(74,106), X(26,58), X(58,90),
+  X(26,58), X(26,42), X(58,74), X(90,106), X(10,26), X(42,58), X(74,90),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(6,70),
+  X(38,102), X(6,38), X(70,102), X(22,86), X(54,118), X(22,54), X(86,118),
+  X(6,22), X(38,54), X(70,86), X(102,118), X(14,78), X(46,110), X(14,46),
+  X(78,110), X(30,62), X(62,94), X(30,62), X(30,46), X(62,78), X(94,110),
+  X(14,30), X(46,62), X(78,94), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86),
+  X(94,102), X(110,118), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46),
+  X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102),
+  X(106,110), X(114,118), X(4,68), X(36,100), X(4,36), X(68,100), X(20,84),
+  X(52,116), X(20,52), X(84,116), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(12,76), X(44,108), X(12,44), X(76,108), X(28,60), X(60,92), X(28,60),
+  X(28,44), X(60,76), X(92,108), X(12,28), X(44,60), X(76,92), X(12,20),
+  X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(8,72),
+  X(40,104), X(8,40), X(72,104), X(24,56), X(56,88), X(24,56), X(24,40),
+  X(56,72), X(88,104), X(8,24), X(40,56), X(72,88), X(16,80), X(48,112),
+  X(16,48), X(80,112), X(32,64), X(64,96), X(32,64), X(32,48), X(64,80),
+  X(96,112), X(16,32), X(48,64), X(80,96), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(8,12), X(16,20), X(24,28), X(32,36),
+  X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118)
+};
+M(120) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,57), X(57,89), X(25,57), X(25,41), X(57,73), X(89,105),
+  X(9,25), X(41,57), X(73,89), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(5,69), X(37,101), X(5,37), X(69,101), X(21,85), X(53,117),
+  X(21,53), X(85,117), X(5,21), X(37,53), X(69,85), X(101,117), X(13,77),
+  X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61), X(29,45),
+  X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(3,67), X(35,99), X(3,35),
+  X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(11,75), X(43,107), X(11,43), X(75,107), X(27,59),
+  X(59,91), X(27,59), X(27,43), X(59,75), X(91,107), X(11,27), X(43,59),
+  X(75,91), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(7,71), X(39,103), X(7,39), X(71,103), X(23,87), X(55,119),
+  X(23,55), X(87,119), X(7,23), X(39,55), X(71,87), X(103,119), X(15,79),
+  X(47,111), X(15,47), X(79,111), X(31,63), X(63,95), X(31,63), X(31,47),
+  X(63,79), X(95,111), X(15,31), X(47,63), X(79,95), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(2,66), X(34,98), X(2,34), X(66,98),
+  X(18,82), X(50,114), X(18,50), X(82,114), X(2,18), X(34,50), X(66,82),
+  X(98,114), X(10,74), X(42,106), X(10,42), X(74,106), X(26,58), X(58,90),
+  X(26,58), X(26,42), X(58,74), X(90,106), X(10,26), X(42,58), X(74,90),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(6,70),
+  X(38,102), X(6,38), X(70,102), X(22,86), X(54,118), X(22,54), X(86,118),
+  X(6,22), X(38,54), X(70,86), X(102,118), X(14,78), X(46,110), X(14,46),
+  X(78,110), X(30,62), X(62,94), X(30,62), X(30,46), X(62,78), X(94,110),
+  X(14,30), X(46,62), X(78,94), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86),
+  X(94,102), X(110,118), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46),
+  X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102),
+  X(106,110), X(114,118), X(4,68), X(36,100), X(4,36), X(68,100), X(20,84),
+  X(52,116), X(20,52), X(84,116), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(12,76), X(44,108), X(12,44), X(76,108), X(28,60), X(60,92), X(28,60),
+  X(28,44), X(60,76), X(92,108), X(12,28), X(44,60), X(76,92), X(12,20),
+  X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(8,72),
+  X(40,104), X(8,40), X(72,104), X(24,88), X(56,120), X(24,56), X(88,120),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(16,80), X(48,112), X(16,48),
+  X(80,112), X(32,64), X(64,96), X(32,64), X(32,48), X(64,80), X(96,112),
+  X(16,32), X(48,64), X(80,96), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88),
+  X(96,104), X(112,120), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(104,112), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48),
+  X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104),
+  X(108,112), X(116,120), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120)
+};
+M(121) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(5,69), X(37,101), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(13,77), X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61),
+  X(29,45), X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(13,21),
+  X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81),
+  X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(3,67), X(35,99),
+  X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(11,75), X(43,107), X(11,43), X(75,107), X(27,59),
+  X(59,91), X(27,59), X(27,43), X(59,75), X(91,107), X(11,27), X(43,59),
+  X(75,91), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(7,71), X(39,103), X(7,39), X(71,103), X(23,87), X(55,119),
+  X(23,55), X(87,119), X(7,23), X(39,55), X(71,87), X(103,119), X(15,79),
+  X(47,111), X(15,47), X(79,111), X(31,63), X(63,95), X(31,63), X(31,47),
+  X(63,79), X(95,111), X(15,31), X(47,63), X(79,95), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105),
+  X(107,109), X(111,113), X(115,117), X(119,121), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(2,66), X(34,98), X(2,34),
+  X(66,98), X(18,82), X(50,114), X(18,50), X(82,114), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(10,74), X(42,106), X(10,42), X(74,106), X(26,58),
+  X(58,90), X(26,58), X(26,42), X(58,74), X(90,106), X(10,26), X(42,58),
+  X(74,90), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(106,114), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(6,70), X(38,102), X(6,38), X(70,102), X(22,86), X(54,118),
+  X(22,54), X(86,118), X(6,22), X(38,54), X(70,86), X(102,118), X(14,78),
+  X(46,110), X(14,46), X(78,110), X(30,62), X(62,94), X(30,62), X(30,46),
+  X(62,78), X(94,110), X(14,30), X(46,62), X(78,94), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(4,68), X(36,100), X(4,36),
+  X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(12,76), X(44,108), X(12,44), X(76,108), X(28,60),
+  X(60,92), X(28,60), X(28,44), X(60,76), X(92,108), X(12,28), X(44,60),
+  X(76,92), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100),
+  X(108,116), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(8,72), X(40,104), X(8,40), X(72,104), X(24,88), X(56,120),
+  X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120), X(16,80),
+  X(48,112), X(16,48), X(80,112), X(32,64), X(64,96), X(32,64), X(32,48),
+  X(64,80), X(96,112), X(16,32), X(48,64), X(80,96), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(112,113), X(114,115),
+  X(116,117), X(118,119), X(120,121), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120)
+};
+M(122) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(5,69), X(37,101), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(13,77), X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61),
+  X(29,45), X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(13,21),
+  X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81),
+  X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(3,67), X(35,99),
+  X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(11,75), X(43,107), X(11,43), X(75,107), X(27,59),
+  X(59,91), X(27,59), X(27,43), X(59,75), X(91,107), X(11,27), X(43,59),
+  X(75,91), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(7,71), X(39,103), X(7,39), X(71,103), X(23,87), X(55,119),
+  X(23,55), X(87,119), X(7,23), X(39,55), X(71,87), X(103,119), X(15,79),
+  X(47,111), X(15,47), X(79,111), X(31,63), X(63,95), X(31,63), X(31,47),
+  X(63,79), X(95,111), X(15,31), X(47,63), X(79,95), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105),
+  X(107,109), X(111,113), X(115,117), X(119,121), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(2,66), X(34,98), X(2,34),
+  X(66,98), X(18,82), X(50,114), X(18,50), X(82,114), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(10,74), X(42,106), X(10,42), X(74,106), X(26,90),
+  X(58,122), X(26,58), X(90,122), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(6,70), X(38,102), X(6,38), X(70,102), X(22,86), X(54,118),
+  X(22,54), X(86,118), X(6,22), X(38,54), X(70,86), X(102,118), X(14,78),
+  X(46,110), X(14,46), X(78,110), X(30,62), X(62,94), X(30,62), X(30,46),
+  X(62,78), X(94,110), X(14,30), X(46,62), X(78,94), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(4,68), X(36,100),
+  X(4,36), X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(12,76), X(44,108), X(12,44), X(76,108),
+  X(28,60), X(60,92), X(28,60), X(28,44), X(60,76), X(92,108), X(12,28),
+  X(44,60), X(76,92), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84),
+  X(92,100), X(108,116), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(8,72), X(40,104), X(8,40), X(72,104), X(24,88),
+  X(56,120), X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(16,80), X(48,112), X(16,48), X(80,112), X(32,64), X(64,96), X(32,64),
+  X(32,48), X(64,80), X(96,112), X(16,32), X(48,64), X(80,96), X(16,24),
+  X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(4,6), X(8,10),
+  X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42),
+  X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74),
+  X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102),
+  X(104,106), X(108,110), X(112,114), X(116,118), X(120,122), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122)
+};
+M(123) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(5,69), X(37,101), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(13,77), X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61),
+  X(29,45), X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(13,21),
+  X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81),
+  X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(3,67), X(35,99),
+  X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(11,75), X(43,107), X(11,43), X(75,107), X(27,91),
+  X(59,123), X(27,59), X(91,123), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(7,71), X(39,103), X(7,39), X(71,103), X(23,87), X(55,119),
+  X(23,55), X(87,119), X(7,23), X(39,55), X(71,87), X(103,119), X(15,79),
+  X(47,111), X(15,47), X(79,111), X(31,63), X(63,95), X(31,63), X(31,47),
+  X(63,79), X(95,111), X(15,31), X(47,63), X(79,95), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(2,66), X(34,98),
+  X(2,34), X(66,98), X(18,82), X(50,114), X(18,50), X(82,114), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(10,74), X(42,106), X(10,42), X(74,106), X(26,90),
+  X(58,122), X(26,58), X(90,122), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(6,70), X(38,102), X(6,38), X(70,102), X(22,86), X(54,118),
+  X(22,54), X(86,118), X(6,22), X(38,54), X(70,86), X(102,118), X(14,78),
+  X(46,110), X(14,46), X(78,110), X(30,62), X(62,94), X(30,62), X(30,46),
+  X(62,78), X(94,110), X(14,30), X(46,62), X(78,94), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(4,68), X(36,100),
+  X(4,36), X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(12,76), X(44,108), X(12,44), X(76,108),
+  X(28,60), X(60,92), X(28,60), X(28,44), X(60,76), X(92,108), X(12,28),
+  X(44,60), X(76,92), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84),
+  X(92,100), X(108,116), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(8,72), X(40,104), X(8,40), X(72,104), X(24,88),
+  X(56,120), X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(16,80), X(48,112), X(16,48), X(80,112), X(32,64), X(64,96), X(32,64),
+  X(32,48), X(64,80), X(96,112), X(16,32), X(48,64), X(80,96), X(16,24),
+  X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(4,6), X(8,10),
+  X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42),
+  X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74),
+  X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102),
+  X(104,106), X(108,110), X(112,114), X(116,118), X(120,122), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122)
+};
+M(124) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(5,69), X(37,101), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(13,77), X(45,109), X(13,45), X(77,109), X(29,61), X(61,93), X(29,61),
+  X(29,45), X(61,77), X(93,109), X(13,29), X(45,61), X(77,93), X(13,21),
+  X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81),
+  X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(3,67), X(35,99),
+  X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(11,75), X(43,107), X(11,43), X(75,107), X(27,91),
+  X(59,123), X(27,59), X(91,123), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(7,71), X(39,103), X(7,39), X(71,103), X(23,87), X(55,119),
+  X(23,55), X(87,119), X(7,23), X(39,55), X(71,87), X(103,119), X(15,79),
+  X(47,111), X(15,47), X(79,111), X(31,63), X(63,95), X(31,63), X(31,47),
+  X(63,79), X(95,111), X(15,31), X(47,63), X(79,95), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(2,66), X(34,98),
+  X(2,34), X(66,98), X(18,82), X(50,114), X(18,50), X(82,114), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(10,74), X(42,106), X(10,42), X(74,106), X(26,90),
+  X(58,122), X(26,58), X(90,122), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(6,70), X(38,102), X(6,38), X(70,102), X(22,86), X(54,118),
+  X(22,54), X(86,118), X(6,22), X(38,54), X(70,86), X(102,118), X(14,78),
+  X(46,110), X(14,46), X(78,110), X(30,62), X(62,94), X(30,62), X(30,46),
+  X(62,78), X(94,110), X(14,30), X(46,62), X(78,94), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(4,68), X(36,100),
+  X(4,36), X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(12,76), X(44,108), X(12,44), X(76,108),
+  X(28,92), X(60,124), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(8,72), X(40,104), X(8,40), X(72,104), X(24,88),
+  X(56,120), X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(16,80), X(48,112), X(16,48), X(80,112), X(32,64), X(64,96), X(32,64),
+  X(32,48), X(64,80), X(96,112), X(16,32), X(48,64), X(80,96), X(16,24),
+  X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(8,12),
+  X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76),
+  X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124)
+};
+M(125) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(5,69), X(37,101), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(13,77), X(45,109), X(13,45), X(77,109), X(29,93), X(61,125), X(29,61),
+  X(93,125), X(13,29), X(45,61), X(77,93), X(109,125), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(3,67), X(35,99), X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115),
+  X(3,19), X(35,51), X(67,83), X(99,115), X(11,75), X(43,107), X(11,43),
+  X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(7,71), X(39,103), X(7,39), X(71,103),
+  X(23,87), X(55,119), X(23,55), X(87,119), X(7,23), X(39,55), X(71,87),
+  X(103,119), X(15,79), X(47,111), X(15,47), X(79,111), X(31,63), X(63,95),
+  X(31,63), X(31,47), X(63,79), X(95,111), X(15,31), X(47,63), X(79,95),
+  X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(111,119),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(7,11),
+  X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75),
+  X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27),
+  X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59),
+  X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91),
+  X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(117,119),
+  X(121,123), X(2,66), X(34,98), X(2,34), X(66,98), X(18,82), X(50,114),
+  X(18,50), X(82,114), X(2,18), X(34,50), X(66,82), X(98,114), X(10,74),
+  X(42,106), X(10,42), X(74,106), X(26,90), X(58,122), X(26,58), X(90,122),
+  X(10,26), X(42,58), X(74,90), X(106,122), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(6,70), X(38,102),
+  X(6,38), X(70,102), X(22,86), X(54,118), X(22,54), X(86,118), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(14,78), X(46,110), X(14,46), X(78,110),
+  X(30,62), X(62,94), X(30,62), X(30,46), X(62,78), X(94,110), X(14,30),
+  X(46,62), X(78,94), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86),
+  X(94,102), X(110,118), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42),
+  X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(4,68), X(36,100), X(4,36), X(68,100),
+  X(20,84), X(52,116), X(20,52), X(84,116), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(12,76), X(44,108), X(12,44), X(76,108), X(28,92), X(60,124),
+  X(28,60), X(92,124), X(12,28), X(44,60), X(76,92), X(108,124), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124),
+  X(8,72), X(40,104), X(8,40), X(72,104), X(24,88), X(56,120), X(24,56),
+  X(88,120), X(8,24), X(40,56), X(72,88), X(104,120), X(16,80), X(48,112),
+  X(16,48), X(80,112), X(32,64), X(64,96), X(32,64), X(32,48), X(64,80),
+  X(96,112), X(16,32), X(48,64), X(80,96), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(96,104), X(112,120), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124)
+};
+M(126) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(5,69), X(37,101), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(13,77), X(45,109), X(13,45), X(77,109), X(29,93), X(61,125), X(29,61),
+  X(93,125), X(13,29), X(45,61), X(77,93), X(109,125), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(3,67), X(35,99), X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115),
+  X(3,19), X(35,51), X(67,83), X(99,115), X(11,75), X(43,107), X(11,43),
+  X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(7,71), X(39,103), X(7,39), X(71,103),
+  X(23,87), X(55,119), X(23,55), X(87,119), X(7,23), X(39,55), X(71,87),
+  X(103,119), X(15,79), X(47,111), X(15,47), X(79,111), X(31,63), X(63,95),
+  X(31,63), X(31,47), X(63,79), X(95,111), X(15,31), X(47,63), X(79,95),
+  X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(111,119),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(7,11),
+  X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75),
+  X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27),
+  X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59),
+  X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91),
+  X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(117,119),
+  X(121,123), X(2,66), X(34,98), X(2,34), X(66,98), X(18,82), X(50,114),
+  X(18,50), X(82,114), X(2,18), X(34,50), X(66,82), X(98,114), X(10,74),
+  X(42,106), X(10,42), X(74,106), X(26,90), X(58,122), X(26,58), X(90,122),
+  X(10,26), X(42,58), X(74,90), X(106,122), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(6,70), X(38,102),
+  X(6,38), X(70,102), X(22,86), X(54,118), X(22,54), X(86,118), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(14,78), X(46,110), X(14,46), X(78,110),
+  X(30,94), X(62,126), X(30,62), X(94,126), X(14,30), X(46,62), X(78,94),
+  X(110,126), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(4,68), X(36,100), X(4,36),
+  X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(12,76), X(44,108), X(12,44), X(76,108), X(28,92),
+  X(60,124), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(8,72), X(40,104), X(8,40), X(72,104), X(24,88), X(56,120),
+  X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120), X(16,80),
+  X(48,112), X(16,48), X(80,112), X(32,64), X(64,96), X(32,64), X(32,48),
+  X(64,80), X(96,112), X(16,32), X(48,64), X(80,96), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84),
+  X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(4,6), X(8,10),
+  X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42),
+  X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74),
+  X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102),
+  X(104,106), X(108,110), X(112,114), X(116,118), X(120,122), X(124,126), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126)
+};
+M(127) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(5,69), X(37,101), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(13,77), X(45,109), X(13,45), X(77,109), X(29,93), X(61,125), X(29,61),
+  X(93,125), X(13,29), X(45,61), X(77,93), X(109,125), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(3,67), X(35,99), X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115),
+  X(3,19), X(35,51), X(67,83), X(99,115), X(11,75), X(43,107), X(11,43),
+  X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(7,71), X(39,103), X(7,39), X(71,103),
+  X(23,87), X(55,119), X(23,55), X(87,119), X(7,23), X(39,55), X(71,87),
+  X(103,119), X(15,79), X(47,111), X(15,47), X(79,111), X(31,95), X(63,127),
+  X(31,63), X(95,127), X(15,31), X(47,63), X(79,95), X(111,127), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63),
+  X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119),
+  X(123,127), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27),
+  X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59),
+  X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91),
+  X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(117,119),
+  X(121,123), X(125,127), X(2,66), X(34,98), X(2,34), X(66,98), X(18,82),
+  X(50,114), X(18,50), X(82,114), X(2,18), X(34,50), X(66,82), X(98,114),
+  X(10,74), X(42,106), X(10,42), X(74,106), X(26,90), X(58,122), X(26,58),
+  X(90,122), X(10,26), X(42,58), X(74,90), X(106,122), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(6,70),
+  X(38,102), X(6,38), X(70,102), X(22,86), X(54,118), X(22,54), X(86,118),
+  X(6,22), X(38,54), X(70,86), X(102,118), X(14,78), X(46,110), X(14,46),
+  X(78,110), X(30,94), X(62,126), X(30,62), X(94,126), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(4,68), X(36,100), X(4,36),
+  X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(12,76), X(44,108), X(12,44), X(76,108), X(28,92),
+  X(60,124), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(8,72), X(40,104), X(8,40), X(72,104), X(24,88), X(56,120),
+  X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120), X(16,80),
+  X(48,112), X(16,48), X(80,112), X(32,64), X(64,96), X(32,64), X(32,48),
+  X(64,80), X(96,112), X(16,32), X(48,64), X(80,96), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84),
+  X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(4,6), X(8,10),
+  X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42),
+  X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74),
+  X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102),
+  X(104,106), X(108,110), X(112,114), X(116,118), X(120,122), X(124,126), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126)
+};
+M(128) = {
+  X(1,65), X(33,97), X(1,33), X(65,97), X(17,81), X(49,113), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105), X(9,41),
+  X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(5,69), X(37,101), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(13,77), X(45,109), X(13,45), X(77,109), X(29,93), X(61,125), X(29,61),
+  X(93,125), X(13,29), X(45,61), X(77,93), X(109,125), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(3,67), X(35,99), X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115),
+  X(3,19), X(35,51), X(67,83), X(99,115), X(11,75), X(43,107), X(11,43),
+  X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(7,71), X(39,103), X(7,39), X(71,103),
+  X(23,87), X(55,119), X(23,55), X(87,119), X(7,23), X(39,55), X(71,87),
+  X(103,119), X(15,79), X(47,111), X(15,47), X(79,111), X(31,95), X(63,127),
+  X(31,63), X(95,127), X(15,31), X(47,63), X(79,95), X(111,127), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63),
+  X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119),
+  X(123,127), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27),
+  X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59),
+  X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91),
+  X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(117,119),
+  X(121,123), X(125,127), X(2,66), X(34,98), X(2,34), X(66,98), X(18,82),
+  X(50,114), X(18,50), X(82,114), X(2,18), X(34,50), X(66,82), X(98,114),
+  X(10,74), X(42,106), X(10,42), X(74,106), X(26,90), X(58,122), X(26,58),
+  X(90,122), X(10,26), X(42,58), X(74,90), X(106,122), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(6,70),
+  X(38,102), X(6,38), X(70,102), X(22,86), X(54,118), X(22,54), X(86,118),
+  X(6,22), X(38,54), X(70,86), X(102,118), X(14,78), X(46,110), X(14,46),
+  X(78,110), X(30,94), X(62,126), X(30,62), X(94,126), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(4,68), X(36,100), X(4,36),
+  X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(12,76), X(44,108), X(12,44), X(76,108), X(28,92),
+  X(60,124), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(8,72), X(40,104), X(8,40), X(72,104), X(24,88), X(56,120),
+  X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120), X(16,80),
+  X(48,112), X(16,48), X(80,112), X(32,96), X(64,128), X(32,64), X(96,128),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128)
+};
+M(129) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105),
+  X(9,41), X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(73,81), X(89,97), X(105,113), X(121,129), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(5,69), X(37,101),
+  X(5,37), X(69,101), X(21,85), X(53,117), X(21,53), X(85,117), X(5,21),
+  X(37,53), X(69,85), X(101,117), X(13,77), X(45,109), X(13,45), X(77,109),
+  X(29,93), X(61,125), X(29,61), X(93,125), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(101,109), X(117,125), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(3,67), X(35,99),
+  X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(11,75), X(43,107), X(11,43), X(75,107), X(27,91),
+  X(59,123), X(27,59), X(91,123), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(7,71), X(39,103), X(7,39), X(71,103), X(23,87), X(55,119),
+  X(23,55), X(87,119), X(7,23), X(39,55), X(71,87), X(103,119), X(15,79),
+  X(47,111), X(15,47), X(79,111), X(31,95), X(63,127), X(31,63), X(95,127),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(127,129), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(2,66), X(34,98), X(2,34), X(66,98),
+  X(18,82), X(50,114), X(18,50), X(82,114), X(2,18), X(34,50), X(66,82),
+  X(98,114), X(10,74), X(42,106), X(10,42), X(74,106), X(26,90), X(58,122),
+  X(26,58), X(90,122), X(10,26), X(42,58), X(74,90), X(106,122), X(2,10),
+  X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122),
+  X(6,70), X(38,102), X(6,38), X(70,102), X(22,86), X(54,118), X(22,54),
+  X(86,118), X(6,22), X(38,54), X(70,86), X(102,118), X(14,78), X(46,110),
+  X(14,46), X(78,110), X(30,94), X(62,126), X(30,62), X(94,126), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(4,68), X(36,100),
+  X(4,36), X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(12,76), X(44,108), X(12,44), X(76,108),
+  X(28,92), X(60,124), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(8,72), X(40,104), X(8,40), X(72,104), X(24,88),
+  X(56,120), X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(16,80), X(48,112), X(16,48), X(80,112), X(32,96), X(64,128), X(32,64),
+  X(96,128), X(16,32), X(48,64), X(80,96), X(112,128), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64),
+  X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128)
+};
+M(130) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105),
+  X(9,41), X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(73,81), X(89,97), X(105,113), X(121,129), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(5,69), X(37,101),
+  X(5,37), X(69,101), X(21,85), X(53,117), X(21,53), X(85,117), X(5,21),
+  X(37,53), X(69,85), X(101,117), X(13,77), X(45,109), X(13,45), X(77,109),
+  X(29,93), X(61,125), X(29,61), X(93,125), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(101,109), X(117,125), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(3,67), X(35,99),
+  X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(11,75), X(43,107), X(11,43), X(75,107), X(27,91),
+  X(59,123), X(27,59), X(91,123), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(7,71), X(39,103), X(7,39), X(71,103), X(23,87), X(55,119),
+  X(23,55), X(87,119), X(7,23), X(39,55), X(71,87), X(103,119), X(15,79),
+  X(47,111), X(15,47), X(79,111), X(31,95), X(63,127), X(31,63), X(95,127),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(127,129), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(2,66), X(66,130), X(2,66), X(34,98),
+  X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114), X(18,50),
+  X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(10,74), X(42,106), X(10,42), X(74,106), X(26,90),
+  X(58,122), X(26,58), X(90,122), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114),
+  X(122,130), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(6,70), X(38,102), X(6,38), X(70,102), X(22,86),
+  X(54,118), X(22,54), X(86,118), X(6,22), X(38,54), X(70,86), X(102,118),
+  X(14,78), X(46,110), X(14,46), X(78,110), X(30,94), X(62,126), X(30,62),
+  X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(6,10),
+  X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74),
+  X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(126,130),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118),
+  X(122,126), X(4,68), X(36,100), X(4,36), X(68,100), X(20,84), X(52,116),
+  X(20,52), X(84,116), X(4,20), X(36,52), X(68,84), X(100,116), X(12,76),
+  X(44,108), X(12,44), X(76,108), X(28,92), X(60,124), X(28,60), X(92,124),
+  X(12,28), X(44,60), X(76,92), X(108,124), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(8,72), X(40,104),
+  X(8,40), X(72,104), X(24,88), X(56,120), X(24,56), X(88,120), X(8,24),
+  X(40,56), X(72,88), X(104,120), X(16,80), X(48,112), X(16,48), X(80,112),
+  X(32,96), X(64,128), X(32,64), X(96,128), X(16,32), X(48,64), X(80,96),
+  X(112,128), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(4,6), X(8,10), X(12,14),
+  X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46),
+  X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78),
+  X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106),
+  X(108,110), X(112,114), X(116,118), X(120,122), X(124,126), X(128,130), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130)
+};
+M(131) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105),
+  X(9,41), X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(73,81), X(89,97), X(105,113), X(121,129), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(5,69), X(37,101),
+  X(5,37), X(69,101), X(21,85), X(53,117), X(21,53), X(85,117), X(5,21),
+  X(37,53), X(69,85), X(101,117), X(13,77), X(45,109), X(13,45), X(77,109),
+  X(29,93), X(61,125), X(29,61), X(93,125), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(101,109), X(117,125), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(3,67), X(67,131),
+  X(3,67), X(35,99), X(35,67), X(99,131), X(3,35), X(67,99), X(19,83), X(51,115),
+  X(19,51), X(83,115), X(19,35), X(51,67), X(83,99), X(115,131), X(3,19),
+  X(35,51), X(67,83), X(99,115), X(11,75), X(43,107), X(11,43), X(75,107),
+  X(27,91), X(59,123), X(27,59), X(91,123), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(7,71), X(39,103), X(7,39), X(71,103),
+  X(23,87), X(55,119), X(23,55), X(87,119), X(7,23), X(39,55), X(71,87),
+  X(103,119), X(15,79), X(47,111), X(15,47), X(79,111), X(31,95), X(63,127),
+  X(31,63), X(95,127), X(15,31), X(47,63), X(79,95), X(111,127), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114),
+  X(18,50), X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(10,74), X(42,106), X(10,42), X(74,106),
+  X(26,90), X(58,122), X(26,58), X(90,122), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(106,114), X(122,130), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(6,70), X(38,102), X(6,38), X(70,102),
+  X(22,86), X(54,118), X(22,54), X(86,118), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(14,78), X(46,110), X(14,46), X(78,110), X(30,94), X(62,126),
+  X(30,62), X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(6,14),
+  X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(4,68), X(36,100), X(4,36), X(68,100), X(20,84),
+  X(52,116), X(20,52), X(84,116), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(12,76), X(44,108), X(12,44), X(76,108), X(28,92), X(60,124), X(28,60),
+  X(92,124), X(12,28), X(44,60), X(76,92), X(108,124), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(8,72),
+  X(40,104), X(8,40), X(72,104), X(24,88), X(56,120), X(24,56), X(88,120),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(16,80), X(48,112), X(16,48),
+  X(80,112), X(32,96), X(64,128), X(32,64), X(96,128), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(104,112), X(120,128), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(4,6), X(8,10), X(12,14),
+  X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46),
+  X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78),
+  X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106),
+  X(108,110), X(112,114), X(116,118), X(120,122), X(124,126), X(128,130), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130)
+};
+M(132) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105),
+  X(9,41), X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(73,81), X(89,97), X(105,113), X(121,129), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(5,69), X(37,101),
+  X(5,37), X(69,101), X(21,85), X(53,117), X(21,53), X(85,117), X(5,21),
+  X(37,53), X(69,85), X(101,117), X(13,77), X(45,109), X(13,45), X(77,109),
+  X(29,93), X(61,125), X(29,61), X(93,125), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(101,109), X(117,125), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(3,67), X(67,131),
+  X(3,67), X(35,99), X(35,67), X(99,131), X(3,35), X(67,99), X(19,83), X(51,115),
+  X(19,51), X(83,115), X(19,35), X(51,67), X(83,99), X(115,131), X(3,19),
+  X(35,51), X(67,83), X(99,115), X(11,75), X(43,107), X(11,43), X(75,107),
+  X(27,91), X(59,123), X(27,59), X(91,123), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(7,71), X(39,103), X(7,39), X(71,103),
+  X(23,87), X(55,119), X(23,55), X(87,119), X(7,23), X(39,55), X(71,87),
+  X(103,119), X(15,79), X(47,111), X(15,47), X(79,111), X(31,95), X(63,127),
+  X(31,63), X(95,127), X(15,31), X(47,63), X(79,95), X(111,127), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114),
+  X(18,50), X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(10,74), X(42,106), X(10,42), X(74,106),
+  X(26,90), X(58,122), X(26,58), X(90,122), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(106,114), X(122,130), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(6,70), X(38,102), X(6,38), X(70,102),
+  X(22,86), X(54,118), X(22,54), X(86,118), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(14,78), X(46,110), X(14,46), X(78,110), X(30,94), X(62,126),
+  X(30,62), X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(6,14),
+  X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(4,68), X(68,132), X(4,68), X(36,100), X(36,68),
+  X(100,132), X(4,36), X(68,100), X(20,84), X(52,116), X(20,52), X(84,116),
+  X(20,36), X(52,68), X(84,100), X(116,132), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(12,76), X(44,108), X(12,44), X(76,108), X(28,92), X(60,124),
+  X(28,60), X(92,124), X(12,28), X(44,60), X(76,92), X(108,124), X(12,20),
+  X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116), X(124,132),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(8,72), X(40,104), X(8,40), X(72,104), X(24,88), X(56,120),
+  X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120), X(16,80),
+  X(48,112), X(16,48), X(80,112), X(32,96), X(64,128), X(32,64), X(96,128),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84),
+  X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32),
+  X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64),
+  X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132)
+};
+M(133) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105),
+  X(9,41), X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(73,81), X(89,97), X(105,113), X(121,129), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(5,69), X(69,133),
+  X(5,69), X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(13,77), X(45,109), X(13,45),
+  X(77,109), X(29,93), X(61,125), X(29,61), X(93,125), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85),
+  X(93,101), X(109,117), X(125,133), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(3,67),
+  X(67,131), X(3,67), X(35,99), X(35,67), X(99,131), X(3,35), X(67,99), X(19,83),
+  X(51,115), X(19,51), X(83,115), X(19,35), X(51,67), X(83,99), X(115,131),
+  X(3,19), X(35,51), X(67,83), X(99,115), X(11,75), X(43,107), X(11,43),
+  X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(7,71), X(39,103), X(7,39),
+  X(71,103), X(23,87), X(55,119), X(23,55), X(87,119), X(7,23), X(39,55),
+  X(71,87), X(103,119), X(15,79), X(47,111), X(15,47), X(79,111), X(31,95),
+  X(63,127), X(31,63), X(95,127), X(15,31), X(47,63), X(79,95), X(111,127),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51),
+  X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99), X(103,107),
+  X(111,115), X(119,123), X(127,131), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105),
+  X(107,109), X(111,113), X(115,117), X(119,121), X(123,125), X(127,129),
+  X(131,133), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27),
+  X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59),
+  X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91),
+  X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(117,119),
+  X(121,123), X(125,127), X(129,131), X(2,66), X(66,130), X(2,66), X(34,98),
+  X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114), X(18,50),
+  X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(10,74), X(42,106), X(10,42), X(74,106), X(26,90),
+  X(58,122), X(26,58), X(90,122), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114),
+  X(122,130), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(6,70), X(38,102), X(6,38), X(70,102), X(22,86),
+  X(54,118), X(22,54), X(86,118), X(6,22), X(38,54), X(70,86), X(102,118),
+  X(14,78), X(46,110), X(14,46), X(78,110), X(30,94), X(62,126), X(30,62),
+  X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(6,10),
+  X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74),
+  X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(126,130),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118),
+  X(122,126), X(4,68), X(68,132), X(4,68), X(36,100), X(36,68), X(100,132),
+  X(4,36), X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(20,36),
+  X(52,68), X(84,100), X(116,132), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(12,76), X(44,108), X(12,44), X(76,108), X(28,92), X(60,124), X(28,60),
+  X(92,124), X(12,28), X(44,60), X(76,92), X(108,124), X(12,20), X(28,36),
+  X(44,52), X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124),
+  X(8,72), X(40,104), X(8,40), X(72,104), X(24,88), X(56,120), X(24,56),
+  X(88,120), X(8,24), X(40,56), X(72,88), X(104,120), X(16,80), X(48,112),
+  X(16,48), X(80,112), X(32,96), X(64,128), X(32,64), X(96,128), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132)
+};
+M(134) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105),
+  X(9,41), X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(73,81), X(89,97), X(105,113), X(121,129), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(5,69), X(69,133),
+  X(5,69), X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(13,77), X(45,109), X(13,45),
+  X(77,109), X(29,93), X(61,125), X(29,61), X(93,125), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85),
+  X(93,101), X(109,117), X(125,133), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(3,67),
+  X(67,131), X(3,67), X(35,99), X(35,67), X(99,131), X(3,35), X(67,99), X(19,83),
+  X(51,115), X(19,51), X(83,115), X(19,35), X(51,67), X(83,99), X(115,131),
+  X(3,19), X(35,51), X(67,83), X(99,115), X(11,75), X(43,107), X(11,43),
+  X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(7,71), X(39,103), X(7,39),
+  X(71,103), X(23,87), X(55,119), X(23,55), X(87,119), X(7,23), X(39,55),
+  X(71,87), X(103,119), X(15,79), X(47,111), X(15,47), X(79,111), X(31,95),
+  X(63,127), X(31,63), X(95,127), X(15,31), X(47,63), X(79,95), X(111,127),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51),
+  X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99), X(103,107),
+  X(111,115), X(119,123), X(127,131), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105),
+  X(107,109), X(111,113), X(115,117), X(119,121), X(123,125), X(127,129),
+  X(131,133), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27),
+  X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59),
+  X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91),
+  X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(117,119),
+  X(121,123), X(125,127), X(129,131), X(2,66), X(66,130), X(2,66), X(34,98),
+  X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114), X(18,50),
+  X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(10,74), X(42,106), X(10,42), X(74,106), X(26,90),
+  X(58,122), X(26,58), X(90,122), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114),
+  X(122,130), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(6,70), X(70,134), X(6,70), X(38,102), X(38,70),
+  X(102,134), X(6,38), X(70,102), X(22,86), X(54,118), X(22,54), X(86,118),
+  X(22,38), X(54,70), X(86,102), X(118,134), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(14,78), X(46,110), X(14,46), X(78,110), X(30,94), X(62,126),
+  X(30,62), X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(4,68), X(68,132), X(4,68), X(36,100),
+  X(36,68), X(100,132), X(4,36), X(68,100), X(20,84), X(52,116), X(20,52),
+  X(84,116), X(20,36), X(52,68), X(84,100), X(116,132), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(12,76), X(44,108), X(12,44), X(76,108), X(28,92),
+  X(60,124), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(8,72), X(40,104), X(8,40), X(72,104), X(24,88),
+  X(56,120), X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(16,80), X(48,112), X(16,48), X(80,112), X(32,96), X(64,128), X(32,64),
+  X(96,128), X(16,32), X(48,64), X(80,96), X(112,128), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(8,12),
+  X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76),
+  X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64),
+  X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120),
+  X(124,128), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30),
+  X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62),
+  X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94),
+  X(96,98), X(100,102), X(104,106), X(108,110), X(112,114), X(116,118),
+  X(120,122), X(124,126), X(128,130), X(132,134), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134)
+};
+M(135) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105),
+  X(9,41), X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(73,81), X(89,97), X(105,113), X(121,129), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(5,69), X(69,133),
+  X(5,69), X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(13,77), X(45,109), X(13,45),
+  X(77,109), X(29,93), X(61,125), X(29,61), X(93,125), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85),
+  X(93,101), X(109,117), X(125,133), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(3,67),
+  X(67,131), X(3,67), X(35,99), X(35,67), X(99,131), X(3,35), X(67,99), X(19,83),
+  X(51,115), X(19,51), X(83,115), X(19,35), X(51,67), X(83,99), X(115,131),
+  X(3,19), X(35,51), X(67,83), X(99,115), X(11,75), X(43,107), X(11,43),
+  X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(7,71), X(71,135), X(7,71),
+  X(39,103), X(39,71), X(103,135), X(7,39), X(71,103), X(23,87), X(55,119),
+  X(23,55), X(87,119), X(23,39), X(55,71), X(87,103), X(119,135), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(15,79), X(47,111), X(15,47), X(79,111),
+  X(31,95), X(63,127), X(31,63), X(95,127), X(15,31), X(47,63), X(79,95),
+  X(111,127), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103),
+  X(111,119), X(127,135), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79),
+  X(87,95), X(103,111), X(119,127), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(2,66), X(66,130), X(2,66), X(34,98),
+  X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114), X(18,50),
+  X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(10,74), X(42,106), X(10,42), X(74,106), X(26,90),
+  X(58,122), X(26,58), X(90,122), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114),
+  X(122,130), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(6,70), X(70,134), X(6,70), X(38,102), X(38,70),
+  X(102,134), X(6,38), X(70,102), X(22,86), X(54,118), X(22,54), X(86,118),
+  X(22,38), X(54,70), X(86,102), X(118,134), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(14,78), X(46,110), X(14,46), X(78,110), X(30,94), X(62,126),
+  X(30,62), X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(4,68), X(68,132), X(4,68), X(36,100),
+  X(36,68), X(100,132), X(4,36), X(68,100), X(20,84), X(52,116), X(20,52),
+  X(84,116), X(20,36), X(52,68), X(84,100), X(116,132), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(12,76), X(44,108), X(12,44), X(76,108), X(28,92),
+  X(60,124), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(8,72), X(40,104), X(8,40), X(72,104), X(24,88),
+  X(56,120), X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(16,80), X(48,112), X(16,48), X(80,112), X(32,96), X(64,128), X(32,64),
+  X(96,128), X(16,32), X(48,64), X(80,96), X(112,128), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(8,12),
+  X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76),
+  X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64),
+  X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120),
+  X(124,128), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30),
+  X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62),
+  X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94),
+  X(96,98), X(100,102), X(104,106), X(108,110), X(112,114), X(116,118),
+  X(120,122), X(124,126), X(128,130), X(132,134), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(132,133),
+  X(134,135), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134)
+};
+M(136) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(41,105),
+  X(9,41), X(73,105), X(25,89), X(57,121), X(25,57), X(89,121), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(9,17), X(25,33), X(41,49), X(57,65),
+  X(73,81), X(89,97), X(105,113), X(121,129), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(5,69), X(69,133),
+  X(5,69), X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(13,77), X(45,109), X(13,45),
+  X(77,109), X(29,93), X(61,125), X(29,61), X(93,125), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85),
+  X(93,101), X(109,117), X(125,133), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(3,67),
+  X(67,131), X(3,67), X(35,99), X(35,67), X(99,131), X(3,35), X(67,99), X(19,83),
+  X(51,115), X(19,51), X(83,115), X(19,35), X(51,67), X(83,99), X(115,131),
+  X(3,19), X(35,51), X(67,83), X(99,115), X(11,75), X(43,107), X(11,43),
+  X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(7,71), X(71,135), X(7,71),
+  X(39,103), X(39,71), X(103,135), X(7,39), X(71,103), X(23,87), X(55,119),
+  X(23,55), X(87,119), X(23,39), X(55,71), X(87,103), X(119,135), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(15,79), X(47,111), X(15,47), X(79,111),
+  X(31,95), X(63,127), X(31,63), X(95,127), X(15,31), X(47,63), X(79,95),
+  X(111,127), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103),
+  X(111,119), X(127,135), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79),
+  X(87,95), X(103,111), X(119,127), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(2,66), X(66,130), X(2,66), X(34,98),
+  X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114), X(18,50),
+  X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(10,74), X(42,106), X(10,42), X(74,106), X(26,90),
+  X(58,122), X(26,58), X(90,122), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114),
+  X(122,130), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(6,70), X(70,134), X(6,70), X(38,102), X(38,70),
+  X(102,134), X(6,38), X(70,102), X(22,86), X(54,118), X(22,54), X(86,118),
+  X(22,38), X(54,70), X(86,102), X(118,134), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(14,78), X(46,110), X(14,46), X(78,110), X(30,94), X(62,126),
+  X(30,62), X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(4,68), X(68,132), X(4,68), X(36,100),
+  X(36,68), X(100,132), X(4,36), X(68,100), X(20,84), X(52,116), X(20,52),
+  X(84,116), X(20,36), X(52,68), X(84,100), X(116,132), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(12,76), X(44,108), X(12,44), X(76,108), X(28,92),
+  X(60,124), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(8,72), X(72,136), X(8,72), X(40,104), X(40,72),
+  X(104,136), X(8,40), X(72,104), X(24,88), X(56,120), X(24,56), X(88,120),
+  X(24,40), X(56,72), X(88,104), X(120,136), X(8,24), X(40,56), X(72,88),
+  X(104,120), X(16,80), X(48,112), X(16,48), X(80,112), X(32,96), X(64,128),
+  X(32,64), X(96,128), X(16,32), X(48,64), X(80,96), X(112,128), X(16,24),
+  X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(110,112), X(114,116), X(118,120), X(122,124), X(126,128), X(130,132),
+  X(134,136), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136)
+};
+M(137) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105), X(121,137),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(5,69), X(69,133),
+  X(5,69), X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(13,77), X(45,109), X(13,45),
+  X(77,109), X(29,93), X(61,125), X(29,61), X(93,125), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85),
+  X(93,101), X(109,117), X(125,133), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(5,9), X(13,17), X(21,25),
+  X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89),
+  X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67), X(99,131),
+  X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(19,35),
+  X(51,67), X(83,99), X(115,131), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(11,75), X(43,107), X(11,43), X(75,107), X(27,91), X(59,123), X(27,59),
+  X(91,123), X(11,27), X(43,59), X(75,91), X(107,123), X(11,19), X(27,35),
+  X(43,51), X(59,67), X(75,83), X(91,99), X(107,115), X(123,131), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123),
+  X(7,71), X(71,135), X(7,71), X(39,103), X(39,71), X(103,135), X(7,39),
+  X(71,103), X(23,87), X(55,119), X(23,55), X(87,119), X(23,39), X(55,71),
+  X(87,103), X(119,135), X(7,23), X(39,55), X(71,87), X(103,119), X(15,79),
+  X(47,111), X(15,47), X(79,111), X(31,95), X(63,127), X(31,63), X(95,127),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61),
+  X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93),
+  X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(2,66), X(66,130), X(2,66), X(34,98),
+  X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114), X(18,50),
+  X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(10,74), X(42,106), X(10,42), X(74,106), X(26,90),
+  X(58,122), X(26,58), X(90,122), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114),
+  X(122,130), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(6,70), X(70,134), X(6,70), X(38,102), X(38,70),
+  X(102,134), X(6,38), X(70,102), X(22,86), X(54,118), X(22,54), X(86,118),
+  X(22,38), X(54,70), X(86,102), X(118,134), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(14,78), X(46,110), X(14,46), X(78,110), X(30,94), X(62,126),
+  X(30,62), X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(4,68), X(68,132), X(4,68), X(36,100),
+  X(36,68), X(100,132), X(4,36), X(68,100), X(20,84), X(52,116), X(20,52),
+  X(84,116), X(20,36), X(52,68), X(84,100), X(116,132), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(12,76), X(44,108), X(12,44), X(76,108), X(28,92),
+  X(60,124), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(8,72), X(72,136), X(8,72), X(40,104), X(40,72),
+  X(104,136), X(8,40), X(72,104), X(24,88), X(56,120), X(24,56), X(88,120),
+  X(24,40), X(56,72), X(88,104), X(120,136), X(8,24), X(40,56), X(72,88),
+  X(104,120), X(16,80), X(48,112), X(16,48), X(80,112), X(32,96), X(64,128),
+  X(32,64), X(96,128), X(16,32), X(48,64), X(80,96), X(112,128), X(16,24),
+  X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(110,112), X(114,116), X(118,120), X(122,124), X(126,128), X(130,132),
+  X(134,136), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(132,133),
+  X(134,135), X(136,137), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136)
+};
+M(138) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105), X(121,137),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(5,69), X(69,133),
+  X(5,69), X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(13,77), X(45,109), X(13,45),
+  X(77,109), X(29,93), X(61,125), X(29,61), X(93,125), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85),
+  X(93,101), X(109,117), X(125,133), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(5,9), X(13,17), X(21,25),
+  X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89),
+  X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67), X(99,131),
+  X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(19,35),
+  X(51,67), X(83,99), X(115,131), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(11,75), X(43,107), X(11,43), X(75,107), X(27,91), X(59,123), X(27,59),
+  X(91,123), X(11,27), X(43,59), X(75,91), X(107,123), X(11,19), X(27,35),
+  X(43,51), X(59,67), X(75,83), X(91,99), X(107,115), X(123,131), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123),
+  X(7,71), X(71,135), X(7,71), X(39,103), X(39,71), X(103,135), X(7,39),
+  X(71,103), X(23,87), X(55,119), X(23,55), X(87,119), X(23,39), X(55,71),
+  X(87,103), X(119,135), X(7,23), X(39,55), X(71,87), X(103,119), X(15,79),
+  X(47,111), X(15,47), X(79,111), X(31,95), X(63,127), X(31,63), X(95,127),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61),
+  X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93),
+  X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(2,66), X(66,130), X(2,66), X(34,98),
+  X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114), X(18,50),
+  X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(10,74), X(74,138), X(10,74), X(42,106), X(42,74),
+  X(106,138), X(10,42), X(74,106), X(26,90), X(58,122), X(26,58), X(90,122),
+  X(26,42), X(58,74), X(90,106), X(122,138), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(6,70), X(70,134), X(6,70), X(38,102),
+  X(38,70), X(102,134), X(6,38), X(70,102), X(22,86), X(54,118), X(22,54),
+  X(86,118), X(22,38), X(54,70), X(86,102), X(118,134), X(6,22), X(38,54),
+  X(70,86), X(102,118), X(14,78), X(46,110), X(14,46), X(78,110), X(30,94),
+  X(62,126), X(30,62), X(94,126), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118),
+  X(126,134), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42),
+  X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(4,68), X(68,132), X(4,68), X(36,100), X(36,68), X(100,132), X(4,36),
+  X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(20,36), X(52,68),
+  X(84,100), X(116,132), X(4,20), X(36,52), X(68,84), X(100,116), X(12,76),
+  X(44,108), X(12,44), X(76,108), X(28,92), X(60,124), X(28,60), X(92,124),
+  X(12,28), X(44,60), X(76,92), X(108,124), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(8,72),
+  X(72,136), X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104),
+  X(24,88), X(56,120), X(24,56), X(88,120), X(24,40), X(56,72), X(88,104),
+  X(120,136), X(8,24), X(40,56), X(72,88), X(104,120), X(16,80), X(48,112),
+  X(16,48), X(80,112), X(32,96), X(64,128), X(32,64), X(96,128), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(16,24), X(32,40), X(48,56), X(64,72),
+  X(80,88), X(96,104), X(112,120), X(128,136), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34),
+  X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66),
+  X(68,70), X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138)
+};
+M(139) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105), X(121,137),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(5,69), X(69,133),
+  X(5,69), X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(13,77), X(45,109), X(13,45),
+  X(77,109), X(29,93), X(61,125), X(29,61), X(93,125), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85),
+  X(93,101), X(109,117), X(125,133), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(5,9), X(13,17), X(21,25),
+  X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89),
+  X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67), X(99,131),
+  X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(19,35),
+  X(51,67), X(83,99), X(115,131), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(11,75), X(75,139), X(11,75), X(43,107), X(43,75), X(107,139), X(11,43),
+  X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(27,43), X(59,75),
+  X(91,107), X(123,139), X(11,27), X(43,59), X(75,91), X(107,123), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123),
+  X(131,139), X(7,71), X(71,135), X(7,71), X(39,103), X(39,71), X(103,135),
+  X(7,39), X(71,103), X(23,87), X(55,119), X(23,55), X(87,119), X(23,39),
+  X(55,71), X(87,103), X(119,135), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(15,79), X(47,111), X(15,47), X(79,111), X(31,95), X(63,127), X(31,63),
+  X(95,127), X(15,31), X(47,63), X(79,95), X(111,127), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114),
+  X(18,50), X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(10,74), X(74,138), X(10,74), X(42,106),
+  X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(58,122), X(26,58),
+  X(90,122), X(26,42), X(58,74), X(90,106), X(122,138), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(130,138), X(6,70), X(70,134), X(6,70),
+  X(38,102), X(38,70), X(102,134), X(6,38), X(70,102), X(22,86), X(54,118),
+  X(22,54), X(86,118), X(22,38), X(54,70), X(86,102), X(118,134), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(14,78), X(46,110), X(14,46), X(78,110),
+  X(30,94), X(62,126), X(30,62), X(94,126), X(14,30), X(46,62), X(78,94),
+  X(110,126), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102),
+  X(110,118), X(126,134), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(4,68), X(68,132), X(4,68), X(36,100), X(36,68), X(100,132), X(4,36),
+  X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(20,36), X(52,68),
+  X(84,100), X(116,132), X(4,20), X(36,52), X(68,84), X(100,116), X(12,76),
+  X(44,108), X(12,44), X(76,108), X(28,92), X(60,124), X(28,60), X(92,124),
+  X(12,28), X(44,60), X(76,92), X(108,124), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(8,72),
+  X(72,136), X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104),
+  X(24,88), X(56,120), X(24,56), X(88,120), X(24,40), X(56,72), X(88,104),
+  X(120,136), X(8,24), X(40,56), X(72,88), X(104,120), X(16,80), X(48,112),
+  X(16,48), X(80,112), X(32,96), X(64,128), X(32,64), X(96,128), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(16,24), X(32,40), X(48,56), X(64,72),
+  X(80,88), X(96,104), X(112,120), X(128,136), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34),
+  X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66),
+  X(68,70), X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138)
+};
+M(140) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105), X(121,137),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(5,69), X(69,133),
+  X(5,69), X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(13,77), X(45,109), X(13,45),
+  X(77,109), X(29,93), X(61,125), X(29,61), X(93,125), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85),
+  X(93,101), X(109,117), X(125,133), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(5,9), X(13,17), X(21,25),
+  X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89),
+  X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67), X(99,131),
+  X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(19,35),
+  X(51,67), X(83,99), X(115,131), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(11,75), X(75,139), X(11,75), X(43,107), X(43,75), X(107,139), X(11,43),
+  X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(27,43), X(59,75),
+  X(91,107), X(123,139), X(11,27), X(43,59), X(75,91), X(107,123), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123),
+  X(131,139), X(7,71), X(71,135), X(7,71), X(39,103), X(39,71), X(103,135),
+  X(7,39), X(71,103), X(23,87), X(55,119), X(23,55), X(87,119), X(23,39),
+  X(55,71), X(87,103), X(119,135), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(15,79), X(47,111), X(15,47), X(79,111), X(31,95), X(63,127), X(31,63),
+  X(95,127), X(15,31), X(47,63), X(79,95), X(111,127), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114),
+  X(18,50), X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(10,74), X(74,138), X(10,74), X(42,106),
+  X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(58,122), X(26,58),
+  X(90,122), X(26,42), X(58,74), X(90,106), X(122,138), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(130,138), X(6,70), X(70,134), X(6,70),
+  X(38,102), X(38,70), X(102,134), X(6,38), X(70,102), X(22,86), X(54,118),
+  X(22,54), X(86,118), X(22,38), X(54,70), X(86,102), X(118,134), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(14,78), X(46,110), X(14,46), X(78,110),
+  X(30,94), X(62,126), X(30,62), X(94,126), X(14,30), X(46,62), X(78,94),
+  X(110,126), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102),
+  X(110,118), X(126,134), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(4,68), X(68,132), X(4,68), X(36,100), X(36,68), X(100,132), X(4,36),
+  X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(20,36), X(52,68),
+  X(84,100), X(116,132), X(4,20), X(36,52), X(68,84), X(100,116), X(12,76),
+  X(76,140), X(12,76), X(44,108), X(44,76), X(108,140), X(12,44), X(76,108),
+  X(28,92), X(60,124), X(28,60), X(92,124), X(28,44), X(60,76), X(92,108),
+  X(124,140), X(12,28), X(44,60), X(76,92), X(108,124), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(8,72), X(72,136), X(8,72), X(40,104), X(40,72), X(104,136), X(8,40),
+  X(72,104), X(24,88), X(56,120), X(24,56), X(88,120), X(24,40), X(56,72),
+  X(88,104), X(120,136), X(8,24), X(40,56), X(72,88), X(104,120), X(16,80),
+  X(48,112), X(16,48), X(80,112), X(32,96), X(64,128), X(32,64), X(96,128),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(8,12),
+  X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76),
+  X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(136,140), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(110,112), X(114,116), X(118,120), X(122,124), X(126,128), X(130,132),
+  X(134,136), X(138,140), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140)
+};
+M(141) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105), X(121,137),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(5,69), X(69,133),
+  X(5,69), X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(13,77), X(77,141), X(13,77),
+  X(45,109), X(45,77), X(109,141), X(13,45), X(77,109), X(29,93), X(61,125),
+  X(29,61), X(93,125), X(29,45), X(61,77), X(93,109), X(125,141), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67), X(99,131),
+  X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(19,35),
+  X(51,67), X(83,99), X(115,131), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(11,75), X(75,139), X(11,75), X(43,107), X(43,75), X(107,139), X(11,43),
+  X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(27,43), X(59,75),
+  X(91,107), X(123,139), X(11,27), X(43,59), X(75,91), X(107,123), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123),
+  X(131,139), X(7,71), X(71,135), X(7,71), X(39,103), X(39,71), X(103,135),
+  X(7,39), X(71,103), X(23,87), X(55,119), X(23,55), X(87,119), X(23,39),
+  X(55,71), X(87,103), X(119,135), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(15,79), X(47,111), X(15,47), X(79,111), X(31,95), X(63,127), X(31,63),
+  X(95,127), X(15,31), X(47,63), X(79,95), X(111,127), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41),
+  X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73),
+  X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101),
+  X(103,105), X(107,109), X(111,113), X(115,117), X(119,121), X(123,125),
+  X(127,129), X(131,133), X(135,137), X(139,141), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(2,66), X(66,130), X(2,66), X(34,98),
+  X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114), X(18,50),
+  X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(10,74), X(74,138), X(10,74), X(42,106), X(42,74),
+  X(106,138), X(10,42), X(74,106), X(26,90), X(58,122), X(26,58), X(90,122),
+  X(26,42), X(58,74), X(90,106), X(122,138), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(6,70), X(70,134), X(6,70), X(38,102),
+  X(38,70), X(102,134), X(6,38), X(70,102), X(22,86), X(54,118), X(22,54),
+  X(86,118), X(22,38), X(54,70), X(86,102), X(118,134), X(6,22), X(38,54),
+  X(70,86), X(102,118), X(14,78), X(46,110), X(14,46), X(78,110), X(30,94),
+  X(62,126), X(30,62), X(94,126), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118),
+  X(126,134), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42),
+  X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(4,68), X(68,132), X(4,68), X(36,100), X(36,68), X(100,132), X(4,36),
+  X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(20,36), X(52,68),
+  X(84,100), X(116,132), X(4,20), X(36,52), X(68,84), X(100,116), X(12,76),
+  X(76,140), X(12,76), X(44,108), X(44,76), X(108,140), X(12,44), X(76,108),
+  X(28,92), X(60,124), X(28,60), X(92,124), X(28,44), X(60,76), X(92,108),
+  X(124,140), X(12,28), X(44,60), X(76,92), X(108,124), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(8,72), X(72,136), X(8,72), X(40,104), X(40,72), X(104,136), X(8,40),
+  X(72,104), X(24,88), X(56,120), X(24,56), X(88,120), X(24,40), X(56,72),
+  X(88,104), X(120,136), X(8,24), X(40,56), X(72,88), X(104,120), X(16,80),
+  X(48,112), X(16,48), X(80,112), X(32,96), X(64,128), X(32,64), X(96,128),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(8,12),
+  X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76),
+  X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(136,140), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(110,112), X(114,116), X(118,120), X(122,124), X(126,128), X(130,132),
+  X(134,136), X(138,140), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140)
+};
+M(142) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105), X(121,137),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(5,69), X(69,133),
+  X(5,69), X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(13,77), X(77,141), X(13,77),
+  X(45,109), X(45,77), X(109,141), X(13,45), X(77,109), X(29,93), X(61,125),
+  X(29,61), X(93,125), X(29,45), X(61,77), X(93,109), X(125,141), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67), X(99,131),
+  X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(19,35),
+  X(51,67), X(83,99), X(115,131), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(11,75), X(75,139), X(11,75), X(43,107), X(43,75), X(107,139), X(11,43),
+  X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(27,43), X(59,75),
+  X(91,107), X(123,139), X(11,27), X(43,59), X(75,91), X(107,123), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123),
+  X(131,139), X(7,71), X(71,135), X(7,71), X(39,103), X(39,71), X(103,135),
+  X(7,39), X(71,103), X(23,87), X(55,119), X(23,55), X(87,119), X(23,39),
+  X(55,71), X(87,103), X(119,135), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(15,79), X(47,111), X(15,47), X(79,111), X(31,95), X(63,127), X(31,63),
+  X(95,127), X(15,31), X(47,63), X(79,95), X(111,127), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41),
+  X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73),
+  X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101),
+  X(103,105), X(107,109), X(111,113), X(115,117), X(119,121), X(123,125),
+  X(127,129), X(131,133), X(135,137), X(139,141), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(2,66), X(66,130), X(2,66), X(34,98),
+  X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114), X(18,50),
+  X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(10,74), X(74,138), X(10,74), X(42,106), X(42,74),
+  X(106,138), X(10,42), X(74,106), X(26,90), X(58,122), X(26,58), X(90,122),
+  X(26,42), X(58,74), X(90,106), X(122,138), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(6,70), X(70,134), X(6,70), X(38,102),
+  X(38,70), X(102,134), X(6,38), X(70,102), X(22,86), X(54,118), X(22,54),
+  X(86,118), X(22,38), X(54,70), X(86,102), X(118,134), X(6,22), X(38,54),
+  X(70,86), X(102,118), X(14,78), X(78,142), X(14,78), X(46,110), X(46,78),
+  X(110,142), X(14,46), X(78,110), X(30,94), X(62,126), X(30,62), X(94,126),
+  X(30,46), X(62,78), X(94,110), X(126,142), X(14,30), X(46,62), X(78,94),
+  X(110,126), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(134,142), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142), X(4,68),
+  X(68,132), X(4,68), X(36,100), X(36,68), X(100,132), X(4,36), X(68,100),
+  X(20,84), X(52,116), X(20,52), X(84,116), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(4,20), X(36,52), X(68,84), X(100,116), X(12,76), X(76,140),
+  X(12,76), X(44,108), X(44,76), X(108,140), X(12,44), X(76,108), X(28,92),
+  X(60,124), X(28,60), X(92,124), X(28,44), X(60,76), X(92,108), X(124,140),
+  X(12,28), X(44,60), X(76,92), X(108,124), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(8,72),
+  X(72,136), X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104),
+  X(24,88), X(56,120), X(24,56), X(88,120), X(24,40), X(56,72), X(88,104),
+  X(120,136), X(8,24), X(40,56), X(72,88), X(104,120), X(16,80), X(48,112),
+  X(16,48), X(80,112), X(32,96), X(64,128), X(32,64), X(96,128), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(16,24), X(32,40), X(48,56), X(64,72),
+  X(80,88), X(96,104), X(112,120), X(128,136), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84),
+  X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(136,140), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82),
+  X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110),
+  X(112,114), X(116,118), X(120,122), X(124,126), X(128,130), X(132,134),
+  X(136,138), X(140,142), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142)
+};
+M(143) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105), X(121,137),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(5,69), X(69,133),
+  X(5,69), X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(13,77), X(77,141), X(13,77),
+  X(45,109), X(45,77), X(109,141), X(13,45), X(77,109), X(29,93), X(61,125),
+  X(29,61), X(93,125), X(29,45), X(61,77), X(93,109), X(125,141), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67), X(99,131),
+  X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(19,35),
+  X(51,67), X(83,99), X(115,131), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(11,75), X(75,139), X(11,75), X(43,107), X(43,75), X(107,139), X(11,43),
+  X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(27,43), X(59,75),
+  X(91,107), X(123,139), X(11,27), X(43,59), X(75,91), X(107,123), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123),
+  X(131,139), X(7,71), X(71,135), X(7,71), X(39,103), X(39,71), X(103,135),
+  X(7,39), X(71,103), X(23,87), X(55,119), X(23,55), X(87,119), X(23,39),
+  X(55,71), X(87,103), X(119,135), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(15,79), X(79,143), X(15,79), X(47,111), X(47,79), X(111,143), X(15,47),
+  X(79,111), X(31,95), X(63,127), X(31,63), X(95,127), X(31,47), X(63,79),
+  X(95,111), X(127,143), X(15,31), X(47,63), X(79,95), X(111,127), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(141,143), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114),
+  X(18,50), X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(10,74), X(74,138), X(10,74), X(42,106),
+  X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(58,122), X(26,58),
+  X(90,122), X(26,42), X(58,74), X(90,106), X(122,138), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(130,138), X(6,70), X(70,134), X(6,70),
+  X(38,102), X(38,70), X(102,134), X(6,38), X(70,102), X(22,86), X(54,118),
+  X(22,54), X(86,118), X(22,38), X(54,70), X(86,102), X(118,134), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(14,78), X(78,142), X(14,78), X(46,110),
+  X(46,78), X(110,142), X(14,46), X(78,110), X(30,94), X(62,126), X(30,62),
+  X(94,126), X(30,46), X(62,78), X(94,110), X(126,142), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(134,142), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(4,68), X(68,132), X(4,68), X(36,100), X(36,68), X(100,132),
+  X(4,36), X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(20,36),
+  X(52,68), X(84,100), X(116,132), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(12,76), X(76,140), X(12,76), X(44,108), X(44,76), X(108,140), X(12,44),
+  X(76,108), X(28,92), X(60,124), X(28,60), X(92,124), X(28,44), X(60,76),
+  X(92,108), X(124,140), X(12,28), X(44,60), X(76,92), X(108,124), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124),
+  X(132,140), X(8,72), X(72,136), X(8,72), X(40,104), X(40,72), X(104,136),
+  X(8,40), X(72,104), X(24,88), X(56,120), X(24,56), X(88,120), X(24,40),
+  X(56,72), X(88,104), X(120,136), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(16,80), X(48,112), X(16,48), X(80,112), X(32,96), X(64,128), X(32,64),
+  X(96,128), X(16,32), X(48,64), X(80,96), X(112,128), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68),
+  X(72,76), X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124),
+  X(128,132), X(136,140), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(4,6), X(8,10),
+  X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42),
+  X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74),
+  X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102),
+  X(104,106), X(108,110), X(112,114), X(116,118), X(120,122), X(124,126),
+  X(128,130), X(132,134), X(136,138), X(140,142), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142)
+};
+M(144) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(49,113), X(17,49), X(81,113), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(1,17), X(33,49), X(65,81), X(97,113), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105), X(121,137),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(5,69), X(69,133),
+  X(5,69), X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85),
+  X(53,117), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(13,77), X(77,141), X(13,77),
+  X(45,109), X(45,77), X(109,141), X(13,45), X(77,109), X(29,93), X(61,125),
+  X(29,61), X(93,125), X(29,45), X(61,77), X(93,109), X(125,141), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67), X(99,131),
+  X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115), X(19,35),
+  X(51,67), X(83,99), X(115,131), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(11,75), X(75,139), X(11,75), X(43,107), X(43,75), X(107,139), X(11,43),
+  X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(27,43), X(59,75),
+  X(91,107), X(123,139), X(11,27), X(43,59), X(75,91), X(107,123), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123),
+  X(131,139), X(7,71), X(71,135), X(7,71), X(39,103), X(39,71), X(103,135),
+  X(7,39), X(71,103), X(23,87), X(55,119), X(23,55), X(87,119), X(23,39),
+  X(55,71), X(87,103), X(119,135), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(15,79), X(79,143), X(15,79), X(47,111), X(47,79), X(111,143), X(15,47),
+  X(79,111), X(31,95), X(63,127), X(31,63), X(95,127), X(31,47), X(63,79),
+  X(95,111), X(127,143), X(15,31), X(47,63), X(79,95), X(111,127), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(141,143), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114),
+  X(18,50), X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(10,74), X(74,138), X(10,74), X(42,106),
+  X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(58,122), X(26,58),
+  X(90,122), X(26,42), X(58,74), X(90,106), X(122,138), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(130,138), X(6,70), X(70,134), X(6,70),
+  X(38,102), X(38,70), X(102,134), X(6,38), X(70,102), X(22,86), X(54,118),
+  X(22,54), X(86,118), X(22,38), X(54,70), X(86,102), X(118,134), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(14,78), X(78,142), X(14,78), X(46,110),
+  X(46,78), X(110,142), X(14,46), X(78,110), X(30,94), X(62,126), X(30,62),
+  X(94,126), X(30,46), X(62,78), X(94,110), X(126,142), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(134,142), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(4,68), X(68,132), X(4,68), X(36,100), X(36,68), X(100,132),
+  X(4,36), X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(20,36),
+  X(52,68), X(84,100), X(116,132), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(12,76), X(76,140), X(12,76), X(44,108), X(44,76), X(108,140), X(12,44),
+  X(76,108), X(28,92), X(60,124), X(28,60), X(92,124), X(28,44), X(60,76),
+  X(92,108), X(124,140), X(12,28), X(44,60), X(76,92), X(108,124), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124),
+  X(132,140), X(8,72), X(72,136), X(8,72), X(40,104), X(40,72), X(104,136),
+  X(8,40), X(72,104), X(24,88), X(56,120), X(24,56), X(88,120), X(24,40),
+  X(56,72), X(88,104), X(120,136), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(16,80), X(80,144), X(16,80), X(48,112), X(48,80), X(112,144), X(16,48),
+  X(80,112), X(32,96), X(64,128), X(32,64), X(96,128), X(32,48), X(64,80),
+  X(96,112), X(128,144), X(16,32), X(48,64), X(80,96), X(112,128), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144)
+};
+M(145) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105),
+  X(121,137), X(9,25), X(41,57), X(73,89), X(105,121), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105),
+  X(113,121), X(129,137), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(53,117), X(21,53), X(85,117),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77), X(109,141),
+  X(13,45), X(77,109), X(29,93), X(61,125), X(29,61), X(93,125), X(29,45),
+  X(61,77), X(93,109), X(125,141), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67),
+  X(99,131), X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115),
+  X(19,35), X(51,67), X(83,99), X(115,131), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75), X(107,139),
+  X(11,43), X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(27,43),
+  X(59,75), X(91,107), X(123,139), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(131,139), X(7,71), X(71,135), X(7,71), X(39,103), X(39,71),
+  X(103,135), X(7,39), X(71,103), X(23,87), X(55,119), X(23,55), X(87,119),
+  X(23,39), X(55,71), X(87,103), X(119,135), X(7,23), X(39,55), X(71,87),
+  X(103,119), X(15,79), X(79,143), X(15,79), X(47,111), X(47,79), X(111,143),
+  X(15,47), X(79,111), X(31,95), X(63,127), X(31,63), X(95,127), X(31,47),
+  X(63,79), X(95,111), X(127,143), X(15,31), X(47,63), X(79,95), X(111,127),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(127,129), X(131,133), X(135,137), X(139,141), X(143,145), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(2,66), X(66,130),
+  X(2,66), X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(50,114),
+  X(18,50), X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(10,74), X(74,138), X(10,74), X(42,106),
+  X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(58,122), X(26,58),
+  X(90,122), X(26,42), X(58,74), X(90,106), X(122,138), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(130,138), X(6,70), X(70,134), X(6,70),
+  X(38,102), X(38,70), X(102,134), X(6,38), X(70,102), X(22,86), X(54,118),
+  X(22,54), X(86,118), X(22,38), X(54,70), X(86,102), X(118,134), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(14,78), X(78,142), X(14,78), X(46,110),
+  X(46,78), X(110,142), X(14,46), X(78,110), X(30,94), X(62,126), X(30,62),
+  X(94,126), X(30,46), X(62,78), X(94,110), X(126,142), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(134,142), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(4,68), X(68,132), X(4,68), X(36,100), X(36,68), X(100,132),
+  X(4,36), X(68,100), X(20,84), X(52,116), X(20,52), X(84,116), X(20,36),
+  X(52,68), X(84,100), X(116,132), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(12,76), X(76,140), X(12,76), X(44,108), X(44,76), X(108,140), X(12,44),
+  X(76,108), X(28,92), X(60,124), X(28,60), X(92,124), X(28,44), X(60,76),
+  X(92,108), X(124,140), X(12,28), X(44,60), X(76,92), X(108,124), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124),
+  X(132,140), X(8,72), X(72,136), X(8,72), X(40,104), X(40,72), X(104,136),
+  X(8,40), X(72,104), X(24,88), X(56,120), X(24,56), X(88,120), X(24,40),
+  X(56,72), X(88,104), X(120,136), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(16,80), X(80,144), X(16,80), X(48,112), X(48,80), X(112,144), X(16,48),
+  X(80,112), X(32,96), X(64,128), X(32,64), X(96,128), X(32,48), X(64,80),
+  X(96,112), X(128,144), X(16,32), X(48,64), X(80,96), X(112,128), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(112,113), X(114,115),
+  X(116,117), X(118,119), X(120,121), X(122,123), X(124,125), X(126,127),
+  X(128,129), X(130,131), X(132,133), X(134,135), X(136,137), X(138,139),
+  X(140,141), X(142,143), X(144,145), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144)
+};
+M(146) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105),
+  X(121,137), X(9,25), X(41,57), X(73,89), X(105,121), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105),
+  X(113,121), X(129,137), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(53,117), X(21,53), X(85,117),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77), X(109,141),
+  X(13,45), X(77,109), X(29,93), X(61,125), X(29,61), X(93,125), X(29,45),
+  X(61,77), X(93,109), X(125,141), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67),
+  X(99,131), X(3,35), X(67,99), X(19,83), X(51,115), X(19,51), X(83,115),
+  X(19,35), X(51,67), X(83,99), X(115,131), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75), X(107,139),
+  X(11,43), X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(27,43),
+  X(59,75), X(91,107), X(123,139), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(131,139), X(7,71), X(71,135), X(7,71), X(39,103), X(39,71),
+  X(103,135), X(7,39), X(71,103), X(23,87), X(55,119), X(23,55), X(87,119),
+  X(23,39), X(55,71), X(87,103), X(119,135), X(7,23), X(39,55), X(71,87),
+  X(103,119), X(15,79), X(79,143), X(15,79), X(47,111), X(47,79), X(111,143),
+  X(15,47), X(79,111), X(31,95), X(63,127), X(31,63), X(95,127), X(31,47),
+  X(63,79), X(95,111), X(127,143), X(15,31), X(47,63), X(79,95), X(111,127),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(127,129), X(131,133), X(135,137), X(139,141), X(143,145), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(2,66), X(66,130),
+  X(2,66), X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(50,82), X(114,146), X(18,50), X(82,114), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(58,122),
+  X(26,58), X(90,122), X(26,42), X(58,74), X(90,106), X(122,138), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(6,70), X(70,134), X(6,70), X(38,102), X(38,70), X(102,134), X(6,38),
+  X(70,102), X(22,86), X(54,118), X(22,54), X(86,118), X(22,38), X(54,70),
+  X(86,102), X(118,134), X(6,22), X(38,54), X(70,86), X(102,118), X(14,78),
+  X(78,142), X(14,78), X(46,110), X(46,78), X(110,142), X(14,46), X(78,110),
+  X(30,94), X(62,126), X(30,62), X(94,126), X(30,46), X(62,78), X(94,110),
+  X(126,142), X(14,30), X(46,62), X(78,94), X(110,126), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142), X(4,68),
+  X(68,132), X(4,68), X(36,100), X(36,68), X(100,132), X(4,36), X(68,100),
+  X(20,84), X(52,116), X(20,52), X(84,116), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(4,20), X(36,52), X(68,84), X(100,116), X(12,76), X(76,140),
+  X(12,76), X(44,108), X(44,76), X(108,140), X(12,44), X(76,108), X(28,92),
+  X(60,124), X(28,60), X(92,124), X(28,44), X(60,76), X(92,108), X(124,140),
+  X(12,28), X(44,60), X(76,92), X(108,124), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(8,72),
+  X(72,136), X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104),
+  X(24,88), X(56,120), X(24,56), X(88,120), X(24,40), X(56,72), X(88,104),
+  X(120,136), X(8,24), X(40,56), X(72,88), X(104,120), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96),
+  X(64,128), X(32,64), X(96,128), X(32,48), X(64,80), X(96,112), X(128,144),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(132,136), X(140,144), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(120,122), X(124,126), X(128,130), X(132,134), X(136,138),
+  X(140,142), X(144,146), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146)
+};
+M(147) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105),
+  X(121,137), X(9,25), X(41,57), X(73,89), X(105,121), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105),
+  X(113,121), X(129,137), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(53,117), X(21,53), X(85,117),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77), X(109,141),
+  X(13,45), X(77,109), X(29,93), X(61,125), X(29,61), X(93,125), X(29,45),
+  X(61,77), X(93,109), X(125,141), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67),
+  X(99,131), X(3,35), X(67,99), X(19,83), X(83,147), X(19,83), X(51,115),
+  X(51,83), X(115,147), X(19,51), X(83,115), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75),
+  X(107,139), X(11,43), X(75,107), X(27,91), X(59,123), X(27,59), X(91,123),
+  X(27,43), X(59,75), X(91,107), X(123,139), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(7,71), X(71,135),
+  X(7,71), X(39,103), X(39,71), X(103,135), X(7,39), X(71,103), X(23,87),
+  X(55,119), X(23,55), X(87,119), X(23,39), X(55,71), X(87,103), X(119,135),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(47,79), X(111,143), X(15,47), X(79,111), X(31,95), X(63,127),
+  X(31,63), X(95,127), X(31,47), X(63,79), X(95,111), X(127,143), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(141,143), X(145,147), X(2,66), X(66,130),
+  X(2,66), X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(50,82), X(114,146), X(18,50), X(82,114), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(58,122),
+  X(26,58), X(90,122), X(26,42), X(58,74), X(90,106), X(122,138), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(6,70), X(70,134), X(6,70), X(38,102), X(38,70), X(102,134), X(6,38),
+  X(70,102), X(22,86), X(54,118), X(22,54), X(86,118), X(22,38), X(54,70),
+  X(86,102), X(118,134), X(6,22), X(38,54), X(70,86), X(102,118), X(14,78),
+  X(78,142), X(14,78), X(46,110), X(46,78), X(110,142), X(14,46), X(78,110),
+  X(30,94), X(62,126), X(30,62), X(94,126), X(30,46), X(62,78), X(94,110),
+  X(126,142), X(14,30), X(46,62), X(78,94), X(110,126), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142), X(4,68),
+  X(68,132), X(4,68), X(36,100), X(36,68), X(100,132), X(4,36), X(68,100),
+  X(20,84), X(52,116), X(20,52), X(84,116), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(4,20), X(36,52), X(68,84), X(100,116), X(12,76), X(76,140),
+  X(12,76), X(44,108), X(44,76), X(108,140), X(12,44), X(76,108), X(28,92),
+  X(60,124), X(28,60), X(92,124), X(28,44), X(60,76), X(92,108), X(124,140),
+  X(12,28), X(44,60), X(76,92), X(108,124), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(8,72),
+  X(72,136), X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104),
+  X(24,88), X(56,120), X(24,56), X(88,120), X(24,40), X(56,72), X(88,104),
+  X(120,136), X(8,24), X(40,56), X(72,88), X(104,120), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96),
+  X(64,128), X(32,64), X(96,128), X(32,48), X(64,80), X(96,112), X(128,144),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(132,136), X(140,144), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(120,122), X(124,126), X(128,130), X(132,134), X(136,138),
+  X(140,142), X(144,146), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(132,133),
+  X(134,135), X(136,137), X(138,139), X(140,141), X(142,143), X(144,145),
+  X(146,147), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146)
+};
+M(148) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105),
+  X(121,137), X(9,25), X(41,57), X(73,89), X(105,121), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105),
+  X(113,121), X(129,137), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(53,117), X(21,53), X(85,117),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77), X(109,141),
+  X(13,45), X(77,109), X(29,93), X(61,125), X(29,61), X(93,125), X(29,45),
+  X(61,77), X(93,109), X(125,141), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67),
+  X(99,131), X(3,35), X(67,99), X(19,83), X(83,147), X(19,83), X(51,115),
+  X(51,83), X(115,147), X(19,51), X(83,115), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75),
+  X(107,139), X(11,43), X(75,107), X(27,91), X(59,123), X(27,59), X(91,123),
+  X(27,43), X(59,75), X(91,107), X(123,139), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(7,71), X(71,135),
+  X(7,71), X(39,103), X(39,71), X(103,135), X(7,39), X(71,103), X(23,87),
+  X(55,119), X(23,55), X(87,119), X(23,39), X(55,71), X(87,103), X(119,135),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(47,79), X(111,143), X(15,47), X(79,111), X(31,95), X(63,127),
+  X(31,63), X(95,127), X(31,47), X(63,79), X(95,111), X(127,143), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(141,143), X(145,147), X(2,66), X(66,130),
+  X(2,66), X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(50,82), X(114,146), X(18,50), X(82,114), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(58,122),
+  X(26,58), X(90,122), X(26,42), X(58,74), X(90,106), X(122,138), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(6,70), X(70,134), X(6,70), X(38,102), X(38,70), X(102,134), X(6,38),
+  X(70,102), X(22,86), X(54,118), X(22,54), X(86,118), X(22,38), X(54,70),
+  X(86,102), X(118,134), X(6,22), X(38,54), X(70,86), X(102,118), X(14,78),
+  X(78,142), X(14,78), X(46,110), X(46,78), X(110,142), X(14,46), X(78,110),
+  X(30,94), X(62,126), X(30,62), X(94,126), X(30,46), X(62,78), X(94,110),
+  X(126,142), X(14,30), X(46,62), X(78,94), X(110,126), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142), X(4,68),
+  X(68,132), X(4,68), X(36,100), X(36,68), X(100,132), X(4,36), X(68,100),
+  X(20,84), X(84,148), X(20,84), X(52,116), X(52,84), X(116,148), X(20,52),
+  X(84,116), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(12,76),
+  X(76,140), X(12,76), X(44,108), X(44,76), X(108,140), X(12,44), X(76,108),
+  X(28,92), X(60,124), X(28,60), X(92,124), X(28,44), X(60,76), X(92,108),
+  X(124,140), X(12,28), X(44,60), X(76,92), X(108,124), X(12,20), X(28,36),
+  X(44,52), X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(8,72), X(72,136), X(8,72), X(40,104), X(40,72),
+  X(104,136), X(8,40), X(72,104), X(24,88), X(56,120), X(24,56), X(88,120),
+  X(24,40), X(56,72), X(88,104), X(120,136), X(8,24), X(40,56), X(72,88),
+  X(104,120), X(16,80), X(80,144), X(16,80), X(48,112), X(48,80), X(112,144),
+  X(16,48), X(80,112), X(32,96), X(64,128), X(32,64), X(96,128), X(32,48),
+  X(64,80), X(96,112), X(128,144), X(16,32), X(48,64), X(80,96), X(112,128),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(136,144), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44),
+  X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100),
+  X(104,108), X(112,116), X(120,124), X(128,132), X(136,140), X(144,148), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(132,136), X(140,144), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148)
+};
+M(149) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105),
+  X(121,137), X(9,25), X(41,57), X(73,89), X(105,121), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105),
+  X(113,121), X(129,137), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77),
+  X(109,141), X(13,45), X(77,109), X(29,93), X(61,125), X(29,61), X(93,125),
+  X(29,45), X(61,77), X(93,109), X(125,141), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101),
+  X(109,117), X(125,133), X(141,149), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67),
+  X(99,131), X(3,35), X(67,99), X(19,83), X(83,147), X(19,83), X(51,115),
+  X(51,83), X(115,147), X(19,51), X(83,115), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75),
+  X(107,139), X(11,43), X(75,107), X(27,91), X(59,123), X(27,59), X(91,123),
+  X(27,43), X(59,75), X(91,107), X(123,139), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(7,71), X(71,135),
+  X(7,71), X(39,103), X(39,71), X(103,135), X(7,39), X(71,103), X(23,87),
+  X(55,119), X(23,55), X(87,119), X(23,39), X(55,71), X(87,103), X(119,135),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(47,79), X(111,143), X(15,47), X(79,111), X(31,95), X(63,127),
+  X(31,63), X(95,127), X(31,47), X(63,79), X(95,111), X(127,143), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105),
+  X(107,109), X(111,113), X(115,117), X(119,121), X(123,125), X(127,129),
+  X(131,133), X(135,137), X(139,141), X(143,145), X(147,149), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(2,66), X(66,130), X(2,66), X(34,98), X(34,66), X(98,130), X(2,34), X(66,98),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(50,82), X(114,146), X(18,50),
+  X(82,114), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(10,74),
+  X(74,138), X(10,74), X(42,106), X(42,74), X(106,138), X(10,42), X(74,106),
+  X(26,90), X(58,122), X(26,58), X(90,122), X(26,42), X(58,74), X(90,106),
+  X(122,138), X(10,26), X(42,58), X(74,90), X(106,122), X(10,18), X(26,34),
+  X(42,50), X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(6,70), X(70,134), X(6,70), X(38,102), X(38,70),
+  X(102,134), X(6,38), X(70,102), X(22,86), X(54,118), X(22,54), X(86,118),
+  X(22,38), X(54,70), X(86,102), X(118,134), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(14,78), X(78,142), X(14,78), X(46,110), X(46,78), X(110,142),
+  X(14,46), X(78,110), X(30,94), X(62,126), X(30,62), X(94,126), X(30,46),
+  X(62,78), X(94,110), X(126,142), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42),
+  X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(4,68), X(68,132), X(4,68), X(36,100), X(36,68),
+  X(100,132), X(4,36), X(68,100), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(52,84), X(116,148), X(20,52), X(84,116), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(12,76), X(76,140), X(12,76), X(44,108), X(44,76),
+  X(108,140), X(12,44), X(76,108), X(28,92), X(60,124), X(28,60), X(92,124),
+  X(28,44), X(60,76), X(92,108), X(124,140), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100),
+  X(108,116), X(124,132), X(140,148), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(8,72), X(72,136),
+  X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104), X(24,88),
+  X(56,120), X(24,56), X(88,120), X(24,40), X(56,72), X(88,104), X(120,136),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(16,80), X(80,144), X(16,80),
+  X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96), X(64,128),
+  X(32,64), X(96,128), X(32,48), X(64,80), X(96,112), X(128,144), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84),
+  X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(136,140), X(144,148), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(132,133),
+  X(134,135), X(136,137), X(138,139), X(140,141), X(142,143), X(144,145),
+  X(146,147), X(148,149), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148)
+};
+M(150) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105),
+  X(121,137), X(9,25), X(41,57), X(73,89), X(105,121), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105),
+  X(113,121), X(129,137), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77),
+  X(109,141), X(13,45), X(77,109), X(29,93), X(61,125), X(29,61), X(93,125),
+  X(29,45), X(61,77), X(93,109), X(125,141), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101),
+  X(109,117), X(125,133), X(141,149), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67),
+  X(99,131), X(3,35), X(67,99), X(19,83), X(83,147), X(19,83), X(51,115),
+  X(51,83), X(115,147), X(19,51), X(83,115), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75),
+  X(107,139), X(11,43), X(75,107), X(27,91), X(59,123), X(27,59), X(91,123),
+  X(27,43), X(59,75), X(91,107), X(123,139), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(7,71), X(71,135),
+  X(7,71), X(39,103), X(39,71), X(103,135), X(7,39), X(71,103), X(23,87),
+  X(55,119), X(23,55), X(87,119), X(23,39), X(55,71), X(87,103), X(119,135),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(47,79), X(111,143), X(15,47), X(79,111), X(31,95), X(63,127),
+  X(31,63), X(95,127), X(31,47), X(63,79), X(95,111), X(127,143), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105),
+  X(107,109), X(111,113), X(115,117), X(119,121), X(123,125), X(127,129),
+  X(131,133), X(135,137), X(139,141), X(143,145), X(147,149), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(2,66), X(66,130), X(2,66), X(34,98), X(34,66), X(98,130), X(2,34), X(66,98),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(50,82), X(114,146), X(18,50),
+  X(82,114), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(10,74),
+  X(74,138), X(10,74), X(42,106), X(42,74), X(106,138), X(10,42), X(74,106),
+  X(26,90), X(58,122), X(26,58), X(90,122), X(26,42), X(58,74), X(90,106),
+  X(122,138), X(10,26), X(42,58), X(74,90), X(106,122), X(10,18), X(26,34),
+  X(42,50), X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(6,70), X(70,134), X(6,70), X(38,102), X(38,70),
+  X(102,134), X(6,38), X(70,102), X(22,86), X(86,150), X(22,86), X(54,118),
+  X(54,86), X(118,150), X(22,54), X(86,118), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(14,78), X(78,142), X(14,78), X(46,110), X(46,78),
+  X(110,142), X(14,46), X(78,110), X(30,94), X(62,126), X(30,62), X(94,126),
+  X(30,46), X(62,78), X(94,110), X(126,142), X(14,30), X(46,62), X(78,94),
+  X(110,126), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102),
+  X(110,118), X(126,134), X(142,150), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(4,68), X(68,132), X(4,68), X(36,100), X(36,68),
+  X(100,132), X(4,36), X(68,100), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(52,84), X(116,148), X(20,52), X(84,116), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(12,76), X(76,140), X(12,76), X(44,108), X(44,76),
+  X(108,140), X(12,44), X(76,108), X(28,92), X(60,124), X(28,60), X(92,124),
+  X(28,44), X(60,76), X(92,108), X(124,140), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100),
+  X(108,116), X(124,132), X(140,148), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(8,72), X(72,136),
+  X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104), X(24,88),
+  X(56,120), X(24,56), X(88,120), X(24,40), X(56,72), X(88,104), X(120,136),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(16,80), X(80,144), X(16,80),
+  X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96), X(64,128),
+  X(32,64), X(96,128), X(32,48), X(64,80), X(96,112), X(128,144), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84),
+  X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(136,140), X(144,148), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(140,142), X(144,146),
+  X(148,150), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150)
+};
+M(151) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105),
+  X(121,137), X(9,25), X(41,57), X(73,89), X(105,121), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105),
+  X(113,121), X(129,137), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77),
+  X(109,141), X(13,45), X(77,109), X(29,93), X(61,125), X(29,61), X(93,125),
+  X(29,45), X(61,77), X(93,109), X(125,141), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101),
+  X(109,117), X(125,133), X(141,149), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67),
+  X(99,131), X(3,35), X(67,99), X(19,83), X(83,147), X(19,83), X(51,115),
+  X(51,83), X(115,147), X(19,51), X(83,115), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75),
+  X(107,139), X(11,43), X(75,107), X(27,91), X(59,123), X(27,59), X(91,123),
+  X(27,43), X(59,75), X(91,107), X(123,139), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(7,71), X(71,135),
+  X(7,71), X(39,103), X(39,71), X(103,135), X(7,39), X(71,103), X(23,87),
+  X(87,151), X(23,87), X(55,119), X(55,87), X(119,151), X(23,55), X(87,119),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79), X(79,143),
+  X(15,79), X(47,111), X(47,79), X(111,143), X(15,47), X(79,111), X(31,95),
+  X(63,127), X(31,63), X(95,127), X(31,47), X(63,79), X(95,111), X(127,143),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(2,66), X(66,130), X(2,66), X(34,98), X(34,66), X(98,130),
+  X(2,34), X(66,98), X(18,82), X(82,146), X(18,82), X(50,114), X(50,82),
+  X(114,146), X(18,50), X(82,114), X(2,18), X(34,50), X(66,82), X(98,114),
+  X(130,146), X(10,74), X(74,138), X(10,74), X(42,106), X(42,74), X(106,138),
+  X(10,42), X(74,106), X(26,90), X(58,122), X(26,58), X(90,122), X(26,42),
+  X(58,74), X(90,106), X(122,138), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114),
+  X(122,130), X(138,146), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(130,138), X(6,70), X(70,134), X(6,70),
+  X(38,102), X(38,70), X(102,134), X(6,38), X(70,102), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(54,86), X(118,150), X(22,54), X(86,118), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(14,78), X(78,142), X(14,78),
+  X(46,110), X(46,78), X(110,142), X(14,46), X(78,110), X(30,94), X(62,126),
+  X(30,62), X(94,126), X(30,46), X(62,78), X(94,110), X(126,142), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(14,22), X(30,38), X(46,54), X(62,70),
+  X(78,86), X(94,102), X(110,118), X(126,134), X(142,150), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118),
+  X(122,126), X(130,134), X(138,142), X(146,150), X(4,68), X(68,132), X(4,68),
+  X(36,100), X(36,68), X(100,132), X(4,36), X(68,100), X(20,84), X(84,148),
+  X(20,84), X(52,116), X(52,84), X(116,148), X(20,52), X(84,116), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(132,148), X(12,76), X(76,140), X(12,76),
+  X(44,108), X(44,76), X(108,140), X(12,44), X(76,108), X(28,92), X(60,124),
+  X(28,60), X(92,124), X(28,44), X(60,76), X(92,108), X(124,140), X(12,28),
+  X(44,60), X(76,92), X(108,124), X(12,20), X(28,36), X(44,52), X(60,68),
+  X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(8,72), X(72,136), X(8,72), X(40,104), X(40,72), X(104,136), X(8,40),
+  X(72,104), X(24,88), X(56,120), X(24,56), X(88,120), X(24,40), X(56,72),
+  X(88,104), X(120,136), X(8,24), X(40,56), X(72,88), X(104,120), X(16,80),
+  X(80,144), X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112),
+  X(32,96), X(64,128), X(32,64), X(96,128), X(32,48), X(64,80), X(96,112),
+  X(128,144), X(16,32), X(48,64), X(80,96), X(112,128), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68),
+  X(72,76), X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124),
+  X(128,132), X(136,140), X(144,148), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(140,142), X(144,146),
+  X(148,150), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(142,143),
+  X(144,145), X(146,147), X(148,149), X(150,151), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150)
+};
+M(152) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(57,121), X(25,57), X(89,121), X(25,41), X(57,73), X(89,105),
+  X(121,137), X(9,25), X(41,57), X(73,89), X(105,121), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105),
+  X(113,121), X(129,137), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77),
+  X(109,141), X(13,45), X(77,109), X(29,93), X(61,125), X(29,61), X(93,125),
+  X(29,45), X(61,77), X(93,109), X(125,141), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101),
+  X(109,117), X(125,133), X(141,149), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67),
+  X(99,131), X(3,35), X(67,99), X(19,83), X(83,147), X(19,83), X(51,115),
+  X(51,83), X(115,147), X(19,51), X(83,115), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75),
+  X(107,139), X(11,43), X(75,107), X(27,91), X(59,123), X(27,59), X(91,123),
+  X(27,43), X(59,75), X(91,107), X(123,139), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(7,71), X(71,135),
+  X(7,71), X(39,103), X(39,71), X(103,135), X(7,39), X(71,103), X(23,87),
+  X(87,151), X(23,87), X(55,119), X(55,87), X(119,151), X(23,55), X(87,119),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79), X(79,143),
+  X(15,79), X(47,111), X(47,79), X(111,143), X(15,47), X(79,111), X(31,95),
+  X(63,127), X(31,63), X(95,127), X(31,47), X(63,79), X(95,111), X(127,143),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(2,66), X(66,130), X(2,66), X(34,98), X(34,66), X(98,130),
+  X(2,34), X(66,98), X(18,82), X(82,146), X(18,82), X(50,114), X(50,82),
+  X(114,146), X(18,50), X(82,114), X(2,18), X(34,50), X(66,82), X(98,114),
+  X(130,146), X(10,74), X(74,138), X(10,74), X(42,106), X(42,74), X(106,138),
+  X(10,42), X(74,106), X(26,90), X(58,122), X(26,58), X(90,122), X(26,42),
+  X(58,74), X(90,106), X(122,138), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114),
+  X(122,130), X(138,146), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(130,138), X(6,70), X(70,134), X(6,70),
+  X(38,102), X(38,70), X(102,134), X(6,38), X(70,102), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(54,86), X(118,150), X(22,54), X(86,118), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(14,78), X(78,142), X(14,78),
+  X(46,110), X(46,78), X(110,142), X(14,46), X(78,110), X(30,94), X(62,126),
+  X(30,62), X(94,126), X(30,46), X(62,78), X(94,110), X(126,142), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(14,22), X(30,38), X(46,54), X(62,70),
+  X(78,86), X(94,102), X(110,118), X(126,134), X(142,150), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118),
+  X(122,126), X(130,134), X(138,142), X(146,150), X(4,68), X(68,132), X(4,68),
+  X(36,100), X(36,68), X(100,132), X(4,36), X(68,100), X(20,84), X(84,148),
+  X(20,84), X(52,116), X(52,84), X(116,148), X(20,52), X(84,116), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(132,148), X(12,76), X(76,140), X(12,76),
+  X(44,108), X(44,76), X(108,140), X(12,44), X(76,108), X(28,92), X(60,124),
+  X(28,60), X(92,124), X(28,44), X(60,76), X(92,108), X(124,140), X(12,28),
+  X(44,60), X(76,92), X(108,124), X(12,20), X(28,36), X(44,52), X(60,68),
+  X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(8,72), X(72,136), X(8,72), X(40,104), X(40,72), X(104,136), X(8,40),
+  X(72,104), X(24,88), X(88,152), X(24,88), X(56,120), X(56,88), X(120,152),
+  X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152),
+  X(16,80), X(80,144), X(16,80), X(48,112), X(48,80), X(112,144), X(16,48),
+  X(80,112), X(32,96), X(64,128), X(32,64), X(96,128), X(32,48), X(64,80),
+  X(96,112), X(128,144), X(16,32), X(48,64), X(80,96), X(112,128), X(16,24),
+  X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136),
+  X(144,152), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152)
+};
+M(153) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(1,9),
+  X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121),
+  X(129,137), X(145,153), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77),
+  X(109,141), X(13,45), X(77,109), X(29,93), X(61,125), X(29,61), X(93,125),
+  X(29,45), X(61,77), X(93,109), X(125,141), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101),
+  X(109,117), X(125,133), X(141,149), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81),
+  X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137),
+  X(141,145), X(149,153), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67), X(99,131),
+  X(3,35), X(67,99), X(19,83), X(83,147), X(19,83), X(51,115), X(51,83),
+  X(115,147), X(19,51), X(83,115), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75), X(107,139),
+  X(11,43), X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(27,43),
+  X(59,75), X(91,107), X(123,139), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(107,115),
+  X(123,131), X(139,147), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(7,71), X(71,135), X(7,71),
+  X(39,103), X(39,71), X(103,135), X(7,39), X(71,103), X(23,87), X(87,151),
+  X(23,87), X(55,119), X(55,87), X(119,151), X(23,55), X(87,119), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(47,79), X(111,143), X(15,47), X(79,111), X(31,95), X(63,127),
+  X(31,63), X(95,127), X(31,47), X(63,79), X(95,111), X(127,143), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(15,23), X(31,39), X(47,55), X(63,71),
+  X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63),
+  X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119),
+  X(123,127), X(131,135), X(139,143), X(147,151), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105),
+  X(107,109), X(111,113), X(115,117), X(119,121), X(123,125), X(127,129),
+  X(131,133), X(135,137), X(139,141), X(143,145), X(147,149), X(151,153), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(2,66), X(66,130), X(2,66), X(34,98), X(34,66), X(98,130),
+  X(2,34), X(66,98), X(18,82), X(82,146), X(18,82), X(50,114), X(50,82),
+  X(114,146), X(18,50), X(82,114), X(2,18), X(34,50), X(66,82), X(98,114),
+  X(130,146), X(10,74), X(74,138), X(10,74), X(42,106), X(42,74), X(106,138),
+  X(10,42), X(74,106), X(26,90), X(58,122), X(26,58), X(90,122), X(26,42),
+  X(58,74), X(90,106), X(122,138), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114),
+  X(122,130), X(138,146), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(130,138), X(6,70), X(70,134), X(6,70),
+  X(38,102), X(38,70), X(102,134), X(6,38), X(70,102), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(54,86), X(118,150), X(22,54), X(86,118), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(14,78), X(78,142), X(14,78),
+  X(46,110), X(46,78), X(110,142), X(14,46), X(78,110), X(30,94), X(62,126),
+  X(30,62), X(94,126), X(30,46), X(62,78), X(94,110), X(126,142), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(14,22), X(30,38), X(46,54), X(62,70),
+  X(78,86), X(94,102), X(110,118), X(126,134), X(142,150), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118),
+  X(122,126), X(130,134), X(138,142), X(146,150), X(4,68), X(68,132), X(4,68),
+  X(36,100), X(36,68), X(100,132), X(4,36), X(68,100), X(20,84), X(84,148),
+  X(20,84), X(52,116), X(52,84), X(116,148), X(20,52), X(84,116), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(132,148), X(12,76), X(76,140), X(12,76),
+  X(44,108), X(44,76), X(108,140), X(12,44), X(76,108), X(28,92), X(60,124),
+  X(28,60), X(92,124), X(28,44), X(60,76), X(92,108), X(124,140), X(12,28),
+  X(44,60), X(76,92), X(108,124), X(12,20), X(28,36), X(44,52), X(60,68),
+  X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(8,72), X(72,136), X(8,72), X(40,104), X(40,72), X(104,136), X(8,40),
+  X(72,104), X(24,88), X(88,152), X(24,88), X(56,120), X(56,88), X(120,152),
+  X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152),
+  X(16,80), X(80,144), X(16,80), X(48,112), X(48,80), X(112,144), X(16,48),
+  X(80,112), X(32,96), X(64,128), X(32,64), X(96,128), X(32,48), X(64,80),
+  X(96,112), X(128,144), X(16,32), X(48,64), X(80,96), X(112,128), X(16,24),
+  X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136),
+  X(144,152), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152)
+};
+M(154) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(1,9),
+  X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121),
+  X(129,137), X(145,153), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77),
+  X(109,141), X(13,45), X(77,109), X(29,93), X(61,125), X(29,61), X(93,125),
+  X(29,45), X(61,77), X(93,109), X(125,141), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101),
+  X(109,117), X(125,133), X(141,149), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81),
+  X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137),
+  X(141,145), X(149,153), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67), X(99,131),
+  X(3,35), X(67,99), X(19,83), X(83,147), X(19,83), X(51,115), X(51,83),
+  X(115,147), X(19,51), X(83,115), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75), X(107,139),
+  X(11,43), X(75,107), X(27,91), X(59,123), X(27,59), X(91,123), X(27,43),
+  X(59,75), X(91,107), X(123,139), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(107,115),
+  X(123,131), X(139,147), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(7,71), X(71,135), X(7,71),
+  X(39,103), X(39,71), X(103,135), X(7,39), X(71,103), X(23,87), X(87,151),
+  X(23,87), X(55,119), X(55,87), X(119,151), X(23,55), X(87,119), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(47,79), X(111,143), X(15,47), X(79,111), X(31,95), X(63,127),
+  X(31,63), X(95,127), X(31,47), X(63,79), X(95,111), X(127,143), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(15,23), X(31,39), X(47,55), X(63,71),
+  X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63),
+  X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119),
+  X(123,127), X(131,135), X(139,143), X(147,151), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105),
+  X(107,109), X(111,113), X(115,117), X(119,121), X(123,125), X(127,129),
+  X(131,133), X(135,137), X(139,141), X(143,145), X(147,149), X(151,153), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(2,66), X(66,130), X(2,66), X(34,98), X(34,66), X(98,130),
+  X(2,34), X(66,98), X(18,82), X(82,146), X(18,82), X(50,114), X(50,82),
+  X(114,146), X(18,50), X(82,114), X(2,18), X(34,50), X(66,82), X(98,114),
+  X(130,146), X(10,74), X(74,138), X(10,74), X(42,106), X(42,74), X(106,138),
+  X(10,42), X(74,106), X(26,90), X(90,154), X(26,90), X(58,122), X(58,90),
+  X(122,154), X(26,58), X(90,122), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(138,154), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(146,154), X(6,70), X(70,134), X(6,70),
+  X(38,102), X(38,70), X(102,134), X(6,38), X(70,102), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(54,86), X(118,150), X(22,54), X(86,118), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(14,78), X(78,142), X(14,78),
+  X(46,110), X(46,78), X(110,142), X(14,46), X(78,110), X(30,94), X(62,126),
+  X(30,62), X(94,126), X(30,46), X(62,78), X(94,110), X(126,142), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(14,22), X(30,38), X(46,54), X(62,70),
+  X(78,86), X(94,102), X(110,118), X(126,134), X(142,150), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(4,68), X(68,132), X(4,68), X(36,100), X(36,68),
+  X(100,132), X(4,36), X(68,100), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(52,84), X(116,148), X(20,52), X(84,116), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(12,76), X(76,140), X(12,76), X(44,108), X(44,76),
+  X(108,140), X(12,44), X(76,108), X(28,92), X(60,124), X(28,60), X(92,124),
+  X(28,44), X(60,76), X(92,108), X(124,140), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100),
+  X(108,116), X(124,132), X(140,148), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(8,72), X(72,136),
+  X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104), X(24,88),
+  X(88,152), X(24,88), X(56,120), X(56,88), X(120,152), X(24,56), X(88,120),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96),
+  X(64,128), X(32,64), X(96,128), X(32,48), X(64,80), X(96,112), X(128,144),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(4,6), X(8,10),
+  X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42),
+  X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74),
+  X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102),
+  X(104,106), X(108,110), X(112,114), X(116,118), X(120,122), X(124,126),
+  X(128,130), X(132,134), X(136,138), X(140,142), X(144,146), X(148,150),
+  X(152,154), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154)
+};
+M(155) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(1,9),
+  X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121),
+  X(129,137), X(145,153), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77),
+  X(109,141), X(13,45), X(77,109), X(29,93), X(61,125), X(29,61), X(93,125),
+  X(29,45), X(61,77), X(93,109), X(125,141), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101),
+  X(109,117), X(125,133), X(141,149), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81),
+  X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137),
+  X(141,145), X(149,153), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67), X(99,131),
+  X(3,35), X(67,99), X(19,83), X(83,147), X(19,83), X(51,115), X(51,83),
+  X(115,147), X(19,51), X(83,115), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75), X(107,139),
+  X(11,43), X(75,107), X(27,91), X(91,155), X(27,91), X(59,123), X(59,91),
+  X(123,155), X(27,59), X(91,123), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(7,71), X(71,135), X(7,71),
+  X(39,103), X(39,71), X(103,135), X(7,39), X(71,103), X(23,87), X(87,151),
+  X(23,87), X(55,119), X(55,87), X(119,151), X(23,55), X(87,119), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(47,79), X(111,143), X(15,47), X(79,111), X(31,95), X(63,127),
+  X(31,63), X(95,127), X(31,47), X(63,79), X(95,111), X(127,143), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(15,23), X(31,39), X(47,55), X(63,71),
+  X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(143,147), X(151,155), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(50,82), X(114,146), X(18,50), X(82,114), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(90,154),
+  X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(6,70), X(70,134), X(6,70), X(38,102), X(38,70), X(102,134), X(6,38),
+  X(70,102), X(22,86), X(86,150), X(22,86), X(54,118), X(54,86), X(118,150),
+  X(22,54), X(86,118), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(14,78), X(78,142), X(14,78), X(46,110), X(46,78), X(110,142), X(14,46),
+  X(78,110), X(30,94), X(62,126), X(30,62), X(94,126), X(30,46), X(62,78),
+  X(94,110), X(126,142), X(14,30), X(46,62), X(78,94), X(110,126), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134),
+  X(142,150), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(134,142), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(4,68), X(68,132),
+  X(4,68), X(36,100), X(36,68), X(100,132), X(4,36), X(68,100), X(20,84),
+  X(84,148), X(20,84), X(52,116), X(52,84), X(116,148), X(20,52), X(84,116),
+  X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(12,76), X(76,140),
+  X(12,76), X(44,108), X(44,76), X(108,140), X(12,44), X(76,108), X(28,92),
+  X(60,124), X(28,60), X(92,124), X(28,44), X(60,76), X(92,108), X(124,140),
+  X(12,28), X(44,60), X(76,92), X(108,124), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124),
+  X(132,140), X(8,72), X(72,136), X(8,72), X(40,104), X(40,72), X(104,136),
+  X(8,40), X(72,104), X(24,88), X(88,152), X(24,88), X(56,120), X(56,88),
+  X(120,152), X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(16,80), X(80,144), X(16,80), X(48,112), X(48,80), X(112,144),
+  X(16,48), X(80,112), X(32,96), X(64,128), X(32,64), X(96,128), X(32,48),
+  X(64,80), X(96,112), X(128,144), X(16,32), X(48,64), X(80,96), X(112,128),
+  X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120),
+  X(128,136), X(144,152), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(104,112), X(120,128), X(136,144), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(120,122), X(124,126), X(128,130), X(132,134), X(136,138),
+  X(140,142), X(144,146), X(148,150), X(152,154), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154)
+};
+M(156) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(1,9),
+  X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121),
+  X(129,137), X(145,153), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77),
+  X(109,141), X(13,45), X(77,109), X(29,93), X(61,125), X(29,61), X(93,125),
+  X(29,45), X(61,77), X(93,109), X(125,141), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101),
+  X(109,117), X(125,133), X(141,149), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81),
+  X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137),
+  X(141,145), X(149,153), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(3,67), X(67,131), X(3,67), X(35,99), X(35,67), X(99,131),
+  X(3,35), X(67,99), X(19,83), X(83,147), X(19,83), X(51,115), X(51,83),
+  X(115,147), X(19,51), X(83,115), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75), X(107,139),
+  X(11,43), X(75,107), X(27,91), X(91,155), X(27,91), X(59,123), X(59,91),
+  X(123,155), X(27,59), X(91,123), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(7,71), X(71,135), X(7,71),
+  X(39,103), X(39,71), X(103,135), X(7,39), X(71,103), X(23,87), X(87,151),
+  X(23,87), X(55,119), X(55,87), X(119,151), X(23,55), X(87,119), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(47,79), X(111,143), X(15,47), X(79,111), X(31,95), X(63,127),
+  X(31,63), X(95,127), X(31,47), X(63,79), X(95,111), X(127,143), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(15,23), X(31,39), X(47,55), X(63,71),
+  X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(143,147), X(151,155), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(50,82), X(114,146), X(18,50), X(82,114), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(90,154),
+  X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(6,70), X(70,134), X(6,70), X(38,102), X(38,70), X(102,134), X(6,38),
+  X(70,102), X(22,86), X(86,150), X(22,86), X(54,118), X(54,86), X(118,150),
+  X(22,54), X(86,118), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(14,78), X(78,142), X(14,78), X(46,110), X(46,78), X(110,142), X(14,46),
+  X(78,110), X(30,94), X(62,126), X(30,62), X(94,126), X(30,46), X(62,78),
+  X(94,110), X(126,142), X(14,30), X(46,62), X(78,94), X(110,126), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134),
+  X(142,150), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(134,142), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(4,68), X(68,132),
+  X(4,68), X(36,100), X(36,68), X(100,132), X(4,36), X(68,100), X(20,84),
+  X(84,148), X(20,84), X(52,116), X(52,84), X(116,148), X(20,52), X(84,116),
+  X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(12,76), X(76,140),
+  X(12,76), X(44,108), X(44,76), X(108,140), X(12,44), X(76,108), X(28,92),
+  X(92,156), X(28,92), X(60,124), X(60,92), X(124,156), X(28,60), X(92,124),
+  X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(148,156), X(8,72), X(72,136), X(8,72), X(40,104), X(40,72), X(104,136),
+  X(8,40), X(72,104), X(24,88), X(88,152), X(24,88), X(56,120), X(56,88),
+  X(120,152), X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(16,80), X(80,144), X(16,80), X(48,112), X(48,80), X(112,144),
+  X(16,48), X(80,112), X(32,96), X(64,128), X(32,64), X(96,128), X(32,48),
+  X(64,80), X(96,112), X(128,144), X(16,32), X(48,64), X(80,96), X(112,128),
+  X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120),
+  X(128,136), X(144,152), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(104,112), X(120,128), X(136,144), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156)
+};
+M(157) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(1,9),
+  X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121),
+  X(129,137), X(145,153), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77),
+  X(109,141), X(13,45), X(77,109), X(29,93), X(93,157), X(29,93), X(61,125),
+  X(61,93), X(125,157), X(29,61), X(93,125), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(141,157), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(35,67), X(99,131), X(3,35), X(67,99), X(19,83), X(83,147), X(19,83),
+  X(51,115), X(51,83), X(115,147), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107),
+  X(43,75), X(107,139), X(11,43), X(75,107), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(139,155), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(39,71), X(103,135), X(7,39), X(71,103),
+  X(23,87), X(87,151), X(23,87), X(55,119), X(55,87), X(119,151), X(23,55),
+  X(87,119), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79),
+  X(79,143), X(15,79), X(47,111), X(47,79), X(111,143), X(15,47), X(79,111),
+  X(31,95), X(63,127), X(31,63), X(95,127), X(31,47), X(63,79), X(95,111),
+  X(127,143), X(15,31), X(47,63), X(79,95), X(111,127), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43),
+  X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99),
+  X(103,107), X(111,115), X(119,123), X(127,131), X(135,139), X(143,147),
+  X(151,155), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41),
+  X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73),
+  X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101),
+  X(103,105), X(107,109), X(111,113), X(115,117), X(119,121), X(123,125),
+  X(127,129), X(131,133), X(135,137), X(139,141), X(143,145), X(147,149),
+  X(151,153), X(155,157), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(50,82), X(114,146), X(18,50), X(82,114), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(90,154),
+  X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(6,70), X(70,134), X(6,70), X(38,102), X(38,70), X(102,134), X(6,38),
+  X(70,102), X(22,86), X(86,150), X(22,86), X(54,118), X(54,86), X(118,150),
+  X(22,54), X(86,118), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(14,78), X(78,142), X(14,78), X(46,110), X(46,78), X(110,142), X(14,46),
+  X(78,110), X(30,94), X(62,126), X(30,62), X(94,126), X(30,46), X(62,78),
+  X(94,110), X(126,142), X(14,30), X(46,62), X(78,94), X(110,126), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134),
+  X(142,150), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(134,142), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(4,68), X(68,132),
+  X(4,68), X(36,100), X(36,68), X(100,132), X(4,36), X(68,100), X(20,84),
+  X(84,148), X(20,84), X(52,116), X(52,84), X(116,148), X(20,52), X(84,116),
+  X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(12,76), X(76,140),
+  X(12,76), X(44,108), X(44,76), X(108,140), X(12,44), X(76,108), X(28,92),
+  X(92,156), X(28,92), X(60,124), X(60,92), X(124,156), X(28,60), X(92,124),
+  X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(148,156), X(8,72), X(72,136), X(8,72), X(40,104), X(40,72), X(104,136),
+  X(8,40), X(72,104), X(24,88), X(88,152), X(24,88), X(56,120), X(56,88),
+  X(120,152), X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(16,80), X(80,144), X(16,80), X(48,112), X(48,80), X(112,144),
+  X(16,48), X(80,112), X(32,96), X(64,128), X(32,64), X(96,128), X(32,48),
+  X(64,80), X(96,112), X(128,144), X(16,32), X(48,64), X(80,96), X(112,128),
+  X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120),
+  X(128,136), X(144,152), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(104,112), X(120,128), X(136,144), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(112,113), X(114,115),
+  X(116,117), X(118,119), X(120,121), X(122,123), X(124,125), X(126,127),
+  X(128,129), X(130,131), X(132,133), X(134,135), X(136,137), X(138,139),
+  X(140,141), X(142,143), X(144,145), X(146,147), X(148,149), X(150,151),
+  X(152,153), X(154,155), X(156,157), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156)
+};
+M(158) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(1,9),
+  X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121),
+  X(129,137), X(145,153), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77),
+  X(109,141), X(13,45), X(77,109), X(29,93), X(93,157), X(29,93), X(61,125),
+  X(61,93), X(125,157), X(29,61), X(93,125), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(141,157), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(35,67), X(99,131), X(3,35), X(67,99), X(19,83), X(83,147), X(19,83),
+  X(51,115), X(51,83), X(115,147), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107),
+  X(43,75), X(107,139), X(11,43), X(75,107), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(139,155), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(39,71), X(103,135), X(7,39), X(71,103),
+  X(23,87), X(87,151), X(23,87), X(55,119), X(55,87), X(119,151), X(23,55),
+  X(87,119), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79),
+  X(79,143), X(15,79), X(47,111), X(47,79), X(111,143), X(15,47), X(79,111),
+  X(31,95), X(63,127), X(31,63), X(95,127), X(31,47), X(63,79), X(95,111),
+  X(127,143), X(15,31), X(47,63), X(79,95), X(111,127), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43),
+  X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99),
+  X(103,107), X(111,115), X(119,123), X(127,131), X(135,139), X(143,147),
+  X(151,155), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41),
+  X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73),
+  X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101),
+  X(103,105), X(107,109), X(111,113), X(115,117), X(119,121), X(123,125),
+  X(127,129), X(131,133), X(135,137), X(139,141), X(143,145), X(147,149),
+  X(151,153), X(155,157), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(50,82), X(114,146), X(18,50), X(82,114), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(90,154),
+  X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(6,70), X(70,134), X(6,70), X(38,102), X(38,70), X(102,134), X(6,38),
+  X(70,102), X(22,86), X(86,150), X(22,86), X(54,118), X(54,86), X(118,150),
+  X(22,54), X(86,118), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(14,78), X(78,142), X(14,78), X(46,110), X(46,78), X(110,142), X(14,46),
+  X(78,110), X(30,94), X(94,158), X(30,94), X(62,126), X(62,94), X(126,158),
+  X(30,62), X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(4,68), X(68,132), X(4,68), X(36,100), X(36,68),
+  X(100,132), X(4,36), X(68,100), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(52,84), X(116,148), X(20,52), X(84,116), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(12,76), X(76,140), X(12,76), X(44,108), X(44,76),
+  X(108,140), X(12,44), X(76,108), X(28,92), X(92,156), X(28,92), X(60,124),
+  X(60,92), X(124,156), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(8,72), X(72,136),
+  X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104), X(24,88),
+  X(88,152), X(24,88), X(56,120), X(56,88), X(120,152), X(24,56), X(88,120),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96),
+  X(64,128), X(32,64), X(96,128), X(32,48), X(64,80), X(96,112), X(128,144),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(104,108),
+  X(112,116), X(120,124), X(128,132), X(136,140), X(144,148), X(152,156), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(132,136), X(140,144), X(148,152), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82),
+  X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110),
+  X(112,114), X(116,118), X(120,122), X(124,126), X(128,130), X(132,134),
+  X(136,138), X(140,142), X(144,146), X(148,150), X(152,154), X(156,158), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(150,152), X(154,156), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158)
+};
+M(159) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(1,9),
+  X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121),
+  X(129,137), X(145,153), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77),
+  X(109,141), X(13,45), X(77,109), X(29,93), X(93,157), X(29,93), X(61,125),
+  X(61,93), X(125,157), X(29,61), X(93,125), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(141,157), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(35,67), X(99,131), X(3,35), X(67,99), X(19,83), X(83,147), X(19,83),
+  X(51,115), X(51,83), X(115,147), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107),
+  X(43,75), X(107,139), X(11,43), X(75,107), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(139,155), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(39,71), X(103,135), X(7,39), X(71,103),
+  X(23,87), X(87,151), X(23,87), X(55,119), X(55,87), X(119,151), X(23,55),
+  X(87,119), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79),
+  X(79,143), X(15,79), X(47,111), X(47,79), X(111,143), X(15,47), X(79,111),
+  X(31,95), X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63),
+  X(95,127), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(2,66), X(66,130),
+  X(2,66), X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(50,82), X(114,146), X(18,50), X(82,114), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(90,154),
+  X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(6,70), X(70,134), X(6,70), X(38,102), X(38,70), X(102,134), X(6,38),
+  X(70,102), X(22,86), X(86,150), X(22,86), X(54,118), X(54,86), X(118,150),
+  X(22,54), X(86,118), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(14,78), X(78,142), X(14,78), X(46,110), X(46,78), X(110,142), X(14,46),
+  X(78,110), X(30,94), X(94,158), X(30,94), X(62,126), X(62,94), X(126,158),
+  X(30,62), X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(4,68), X(68,132), X(4,68), X(36,100), X(36,68),
+  X(100,132), X(4,36), X(68,100), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(52,84), X(116,148), X(20,52), X(84,116), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(12,76), X(76,140), X(12,76), X(44,108), X(44,76),
+  X(108,140), X(12,44), X(76,108), X(28,92), X(92,156), X(28,92), X(60,124),
+  X(60,92), X(124,156), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(8,72), X(72,136),
+  X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104), X(24,88),
+  X(88,152), X(24,88), X(56,120), X(56,88), X(120,152), X(24,56), X(88,120),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96),
+  X(64,128), X(32,64), X(96,128), X(32,48), X(64,80), X(96,112), X(128,144),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(104,108),
+  X(112,116), X(120,124), X(128,132), X(136,140), X(144,148), X(152,156), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(132,136), X(140,144), X(148,152), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82),
+  X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110),
+  X(112,114), X(116,118), X(120,122), X(124,126), X(128,130), X(132,134),
+  X(136,138), X(140,142), X(144,146), X(148,150), X(152,154), X(156,158), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(150,152), X(154,156), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153),
+  X(154,155), X(156,157), X(158,159), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158)
+};
+M(160) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(33,65), X(97,129), X(1,33), X(65,97),
+  X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145), X(17,49),
+  X(81,113), X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(1,9),
+  X(17,25), X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121),
+  X(129,137), X(145,153), X(5,69), X(69,133), X(5,69), X(37,101), X(37,69),
+  X(101,133), X(5,37), X(69,101), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(45,77),
+  X(109,141), X(13,45), X(77,109), X(29,93), X(93,157), X(29,93), X(61,125),
+  X(61,93), X(125,157), X(29,61), X(93,125), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(141,157), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(35,67), X(99,131), X(3,35), X(67,99), X(19,83), X(83,147), X(19,83),
+  X(51,115), X(51,83), X(115,147), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107),
+  X(43,75), X(107,139), X(11,43), X(75,107), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(139,155), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(39,71), X(103,135), X(7,39), X(71,103),
+  X(23,87), X(87,151), X(23,87), X(55,119), X(55,87), X(119,151), X(23,55),
+  X(87,119), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79),
+  X(79,143), X(15,79), X(47,111), X(47,79), X(111,143), X(15,47), X(79,111),
+  X(31,95), X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63),
+  X(95,127), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(2,66), X(66,130),
+  X(2,66), X(34,98), X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(50,82), X(114,146), X(18,50), X(82,114), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(90,154),
+  X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(6,70), X(70,134), X(6,70), X(38,102), X(38,70), X(102,134), X(6,38),
+  X(70,102), X(22,86), X(86,150), X(22,86), X(54,118), X(54,86), X(118,150),
+  X(22,54), X(86,118), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(14,78), X(78,142), X(14,78), X(46,110), X(46,78), X(110,142), X(14,46),
+  X(78,110), X(30,94), X(94,158), X(30,94), X(62,126), X(62,94), X(126,158),
+  X(30,62), X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(4,68), X(68,132), X(4,68), X(36,100), X(36,68),
+  X(100,132), X(4,36), X(68,100), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(52,84), X(116,148), X(20,52), X(84,116), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(12,76), X(76,140), X(12,76), X(44,108), X(44,76),
+  X(108,140), X(12,44), X(76,108), X(28,92), X(92,156), X(28,92), X(60,124),
+  X(60,92), X(124,156), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(8,72), X(72,136),
+  X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104), X(24,88),
+  X(88,152), X(24,88), X(56,120), X(56,88), X(120,152), X(24,56), X(88,120),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(64,96), X(128,160), X(32,64), X(96,128),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(150,152), X(154,156), X(158,160), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160)
+};
+M(161) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57), X(89,121),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(153,161), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(5,69), X(69,133), X(5,69),
+  X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85), X(85,149),
+  X(21,85), X(53,117), X(53,85), X(117,149), X(21,53), X(85,117), X(5,21),
+  X(37,53), X(69,85), X(101,117), X(133,149), X(13,77), X(77,141), X(13,77),
+  X(45,109), X(45,77), X(109,141), X(13,45), X(77,109), X(29,93), X(93,157),
+  X(29,93), X(61,125), X(61,93), X(125,157), X(29,61), X(93,125), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157),
+  X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65),
+  X(69,73), X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121),
+  X(125,129), X(133,137), X(141,145), X(149,153), X(157,161), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(35,67), X(99,131), X(3,35), X(67,99), X(19,83), X(83,147), X(19,83),
+  X(51,115), X(51,83), X(115,147), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107),
+  X(43,75), X(107,139), X(11,43), X(75,107), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(139,155), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(39,71), X(103,135), X(7,39), X(71,103),
+  X(23,87), X(87,151), X(23,87), X(55,119), X(55,87), X(119,151), X(23,55),
+  X(87,119), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79),
+  X(79,143), X(15,79), X(47,111), X(47,79), X(111,143), X(15,47), X(79,111),
+  X(31,95), X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63),
+  X(95,127), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(2,66), X(66,130), X(2,66), X(34,98),
+  X(34,66), X(98,130), X(2,34), X(66,98), X(18,82), X(82,146), X(18,82),
+  X(50,114), X(50,82), X(114,146), X(18,50), X(82,114), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74), X(42,106),
+  X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(90,154), X(26,90),
+  X(58,122), X(58,90), X(122,154), X(26,58), X(90,122), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(6,70),
+  X(70,134), X(6,70), X(38,102), X(38,70), X(102,134), X(6,38), X(70,102),
+  X(22,86), X(86,150), X(22,86), X(54,118), X(54,86), X(118,150), X(22,54),
+  X(86,118), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(14,78),
+  X(78,142), X(14,78), X(46,110), X(46,78), X(110,142), X(14,46), X(78,110),
+  X(30,94), X(94,158), X(30,94), X(62,126), X(62,94), X(126,158), X(30,62),
+  X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(6,14),
+  X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126),
+  X(134,142), X(150,158), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(4,68), X(68,132), X(4,68), X(36,100), X(36,68),
+  X(100,132), X(4,36), X(68,100), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(52,84), X(116,148), X(20,52), X(84,116), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(12,76), X(76,140), X(12,76), X(44,108), X(44,76),
+  X(108,140), X(12,44), X(76,108), X(28,92), X(92,156), X(28,92), X(60,124),
+  X(60,92), X(124,156), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(8,72), X(72,136),
+  X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104), X(24,88),
+  X(88,152), X(24,88), X(56,120), X(56,88), X(120,152), X(24,56), X(88,120),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(64,96), X(128,160), X(32,64), X(96,128),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(150,152), X(154,156), X(158,160), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(112,113), X(114,115),
+  X(116,117), X(118,119), X(120,121), X(122,123), X(124,125), X(126,127),
+  X(128,129), X(130,131), X(132,133), X(134,135), X(136,137), X(138,139),
+  X(140,141), X(142,143), X(144,145), X(146,147), X(148,149), X(150,151),
+  X(152,153), X(154,155), X(156,157), X(158,159), X(160,161), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160)
+};
+M(162) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57), X(89,121),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(153,161), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(5,69), X(69,133), X(5,69),
+  X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85), X(85,149),
+  X(21,85), X(53,117), X(53,85), X(117,149), X(21,53), X(85,117), X(5,21),
+  X(37,53), X(69,85), X(101,117), X(133,149), X(13,77), X(77,141), X(13,77),
+  X(45,109), X(45,77), X(109,141), X(13,45), X(77,109), X(29,93), X(93,157),
+  X(29,93), X(61,125), X(61,93), X(125,157), X(29,61), X(93,125), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157),
+  X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65),
+  X(69,73), X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121),
+  X(125,129), X(133,137), X(141,145), X(149,153), X(157,161), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(35,67), X(99,131), X(3,35), X(67,99), X(19,83), X(83,147), X(19,83),
+  X(51,115), X(51,83), X(115,147), X(19,51), X(83,115), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107),
+  X(43,75), X(107,139), X(11,43), X(75,107), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(139,155), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(39,71), X(103,135), X(7,39), X(71,103),
+  X(23,87), X(87,151), X(23,87), X(55,119), X(55,87), X(119,151), X(23,55),
+  X(87,119), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79),
+  X(79,143), X(15,79), X(47,111), X(47,79), X(111,143), X(15,47), X(79,111),
+  X(31,95), X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63),
+  X(95,127), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(2,66), X(66,130), X(2,66), X(34,98),
+  X(98,162), X(34,98), X(2,34), X(66,98), X(130,162), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(50,82), X(114,146), X(18,50), X(82,114), X(18,34),
+  X(50,66), X(82,98), X(114,130), X(146,162), X(2,18), X(34,50), X(66,82),
+  X(98,114), X(130,146), X(10,74), X(74,138), X(10,74), X(42,106), X(42,74),
+  X(106,138), X(10,42), X(74,106), X(26,90), X(90,154), X(26,90), X(58,122),
+  X(58,90), X(122,154), X(26,58), X(90,122), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(138,154), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82),
+  X(90,98), X(106,114), X(122,130), X(138,146), X(154,162), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(6,70), X(70,134), X(6,70), X(38,102), X(38,70), X(102,134),
+  X(6,38), X(70,102), X(22,86), X(86,150), X(22,86), X(54,118), X(54,86),
+  X(118,150), X(22,54), X(86,118), X(6,22), X(38,54), X(70,86), X(102,118),
+  X(134,150), X(14,78), X(78,142), X(14,78), X(46,110), X(46,78), X(110,142),
+  X(14,46), X(78,110), X(30,94), X(94,158), X(30,94), X(62,126), X(62,94),
+  X(126,158), X(30,62), X(94,126), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(142,158), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(134,142), X(150,158), X(6,10), X(14,18), X(22,26),
+  X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90),
+  X(94,98), X(102,106), X(110,114), X(118,122), X(126,130), X(134,138),
+  X(142,146), X(150,154), X(158,162), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(4,68), X(68,132), X(4,68), X(36,100), X(36,68),
+  X(100,132), X(4,36), X(68,100), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(52,84), X(116,148), X(20,52), X(84,116), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(12,76), X(76,140), X(12,76), X(44,108), X(44,76),
+  X(108,140), X(12,44), X(76,108), X(28,92), X(92,156), X(28,92), X(60,124),
+  X(60,92), X(124,156), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(8,72), X(72,136),
+  X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104), X(24,88),
+  X(88,152), X(24,88), X(56,120), X(56,88), X(120,152), X(24,56), X(88,120),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(64,96), X(128,160), X(32,64), X(96,128),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(140,142), X(144,146),
+  X(148,150), X(152,154), X(156,158), X(160,162), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162)
+};
+M(163) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57), X(89,121),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(153,161), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(5,69), X(69,133), X(5,69),
+  X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85), X(85,149),
+  X(21,85), X(53,117), X(53,85), X(117,149), X(21,53), X(85,117), X(5,21),
+  X(37,53), X(69,85), X(101,117), X(133,149), X(13,77), X(77,141), X(13,77),
+  X(45,109), X(45,77), X(109,141), X(13,45), X(77,109), X(29,93), X(93,157),
+  X(29,93), X(61,125), X(61,93), X(125,157), X(29,61), X(93,125), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157),
+  X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65),
+  X(69,73), X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121),
+  X(125,129), X(133,137), X(141,145), X(149,153), X(157,161), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147),
+  X(19,83), X(51,115), X(51,83), X(115,147), X(19,51), X(83,115), X(19,35),
+  X(51,67), X(83,99), X(115,131), X(147,163), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75),
+  X(107,139), X(11,43), X(75,107), X(27,91), X(91,155), X(27,91), X(59,123),
+  X(59,91), X(123,155), X(27,59), X(91,123), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139),
+  X(147,155), X(7,71), X(71,135), X(7,71), X(39,103), X(39,71), X(103,135),
+  X(7,39), X(71,103), X(23,87), X(87,151), X(23,87), X(55,119), X(55,87),
+  X(119,151), X(23,55), X(87,119), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(15,79), X(79,143), X(15,79), X(47,111), X(47,79), X(111,143),
+  X(15,47), X(79,111), X(31,95), X(95,159), X(31,95), X(63,127), X(63,95),
+  X(127,159), X(31,63), X(95,127), X(15,31), X(47,63), X(79,95), X(111,127),
+  X(143,159), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(2,66), X(66,130), X(2,66), X(34,98), X(98,162), X(34,98), X(2,34), X(66,98),
+  X(130,162), X(18,82), X(82,146), X(18,82), X(50,114), X(50,82), X(114,146),
+  X(18,50), X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138),
+  X(10,74), X(42,106), X(42,74), X(106,138), X(10,42), X(74,106), X(26,90),
+  X(90,154), X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122),
+  X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(10,18), X(26,34),
+  X(42,50), X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146),
+  X(154,162), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(146,154), X(6,70), X(70,134), X(6,70),
+  X(38,102), X(38,70), X(102,134), X(6,38), X(70,102), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(54,86), X(118,150), X(22,54), X(86,118), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(14,78), X(78,142), X(14,78),
+  X(46,110), X(46,78), X(110,142), X(14,46), X(78,110), X(30,94), X(94,158),
+  X(30,94), X(62,126), X(62,94), X(126,158), X(30,62), X(94,126), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(142,158), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(158,162), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(4,68), X(68,132), X(4,68), X(36,100),
+  X(36,68), X(100,132), X(4,36), X(68,100), X(20,84), X(84,148), X(20,84),
+  X(52,116), X(52,84), X(116,148), X(20,52), X(84,116), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(12,76), X(76,140), X(12,76), X(44,108),
+  X(44,76), X(108,140), X(12,44), X(76,108), X(28,92), X(92,156), X(28,92),
+  X(60,124), X(60,92), X(124,156), X(28,60), X(92,124), X(12,28), X(44,60),
+  X(76,92), X(108,124), X(140,156), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(8,72),
+  X(72,136), X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104),
+  X(24,88), X(88,152), X(24,88), X(56,120), X(56,88), X(120,152), X(24,56),
+  X(88,120), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(16,80),
+  X(80,144), X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112),
+  X(32,96), X(96,160), X(32,96), X(64,128), X(64,96), X(128,160), X(32,64),
+  X(96,128), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(152,160), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(120,122), X(124,126), X(128,130), X(132,134), X(136,138),
+  X(140,142), X(144,146), X(148,150), X(152,154), X(156,158), X(160,162), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(150,152), X(154,156), X(158,160), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(112,113), X(114,115),
+  X(116,117), X(118,119), X(120,121), X(122,123), X(124,125), X(126,127),
+  X(128,129), X(130,131), X(132,133), X(134,135), X(136,137), X(138,139),
+  X(140,141), X(142,143), X(144,145), X(146,147), X(148,149), X(150,151),
+  X(152,153), X(154,155), X(156,157), X(158,159), X(160,161), X(162,163), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162)
+};
+M(164) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57), X(89,121),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(153,161), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(5,69), X(69,133), X(5,69),
+  X(37,101), X(37,69), X(101,133), X(5,37), X(69,101), X(21,85), X(85,149),
+  X(21,85), X(53,117), X(53,85), X(117,149), X(21,53), X(85,117), X(5,21),
+  X(37,53), X(69,85), X(101,117), X(133,149), X(13,77), X(77,141), X(13,77),
+  X(45,109), X(45,77), X(109,141), X(13,45), X(77,109), X(29,93), X(93,157),
+  X(29,93), X(61,125), X(61,93), X(125,157), X(29,61), X(93,125), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157),
+  X(5,9), X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65),
+  X(69,73), X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121),
+  X(125,129), X(133,137), X(141,145), X(149,153), X(157,161), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147),
+  X(19,83), X(51,115), X(51,83), X(115,147), X(19,51), X(83,115), X(19,35),
+  X(51,67), X(83,99), X(115,131), X(147,163), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75),
+  X(107,139), X(11,43), X(75,107), X(27,91), X(91,155), X(27,91), X(59,123),
+  X(59,91), X(123,155), X(27,59), X(91,123), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139),
+  X(147,155), X(7,71), X(71,135), X(7,71), X(39,103), X(39,71), X(103,135),
+  X(7,39), X(71,103), X(23,87), X(87,151), X(23,87), X(55,119), X(55,87),
+  X(119,151), X(23,55), X(87,119), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(15,79), X(79,143), X(15,79), X(47,111), X(47,79), X(111,143),
+  X(15,47), X(79,111), X(31,95), X(95,159), X(31,95), X(63,127), X(63,95),
+  X(127,159), X(31,63), X(95,127), X(15,31), X(47,63), X(79,95), X(111,127),
+  X(143,159), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(2,66), X(66,130), X(2,66), X(34,98), X(98,162), X(34,98), X(2,34), X(66,98),
+  X(130,162), X(18,82), X(82,146), X(18,82), X(50,114), X(50,82), X(114,146),
+  X(18,50), X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138),
+  X(10,74), X(42,106), X(42,74), X(106,138), X(10,42), X(74,106), X(26,90),
+  X(90,154), X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122),
+  X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(10,18), X(26,34),
+  X(42,50), X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146),
+  X(154,162), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(146,154), X(6,70), X(70,134), X(6,70),
+  X(38,102), X(38,70), X(102,134), X(6,38), X(70,102), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(54,86), X(118,150), X(22,54), X(86,118), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(14,78), X(78,142), X(14,78),
+  X(46,110), X(46,78), X(110,142), X(14,46), X(78,110), X(30,94), X(94,158),
+  X(30,94), X(62,126), X(62,94), X(126,158), X(30,62), X(94,126), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(142,158), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(158,162), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(4,68), X(68,132), X(4,68), X(36,100),
+  X(100,164), X(36,100), X(4,36), X(68,100), X(132,164), X(20,84), X(84,148),
+  X(20,84), X(52,116), X(52,84), X(116,148), X(20,52), X(84,116), X(20,36),
+  X(52,68), X(84,100), X(116,132), X(148,164), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(12,76), X(76,140), X(12,76), X(44,108), X(44,76),
+  X(108,140), X(12,44), X(76,108), X(28,92), X(92,156), X(28,92), X(60,124),
+  X(60,92), X(124,156), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84),
+  X(92,100), X(108,116), X(124,132), X(140,148), X(156,164), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(148,156), X(8,72), X(72,136), X(8,72), X(40,104), X(40,72), X(104,136),
+  X(8,40), X(72,104), X(24,88), X(88,152), X(24,88), X(56,120), X(56,88),
+  X(120,152), X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(16,80), X(80,144), X(16,80), X(48,112), X(48,80), X(112,144),
+  X(16,48), X(80,112), X(32,96), X(96,160), X(32,96), X(64,128), X(64,96),
+  X(128,160), X(32,64), X(96,128), X(16,32), X(48,64), X(80,96), X(112,128),
+  X(144,160), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(152,160), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164)
+};
+M(165) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57), X(89,121),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(153,161), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(5,69), X(69,133), X(5,69),
+  X(37,101), X(101,165), X(37,101), X(5,37), X(69,101), X(133,165), X(21,85),
+  X(85,149), X(21,85), X(53,117), X(53,85), X(117,149), X(21,53), X(85,117),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(5,21), X(37,53),
+  X(69,85), X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109),
+  X(45,77), X(109,141), X(13,45), X(77,109), X(29,93), X(93,157), X(29,93),
+  X(61,125), X(61,93), X(125,157), X(29,61), X(93,125), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(13,21), X(29,37), X(45,53), X(61,69),
+  X(77,85), X(93,101), X(109,117), X(125,133), X(141,149), X(157,165), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147),
+  X(19,83), X(51,115), X(51,83), X(115,147), X(19,51), X(83,115), X(19,35),
+  X(51,67), X(83,99), X(115,131), X(147,163), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75),
+  X(107,139), X(11,43), X(75,107), X(27,91), X(91,155), X(27,91), X(59,123),
+  X(59,91), X(123,155), X(27,59), X(91,123), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139),
+  X(147,155), X(7,71), X(71,135), X(7,71), X(39,103), X(39,71), X(103,135),
+  X(7,39), X(71,103), X(23,87), X(87,151), X(23,87), X(55,119), X(55,87),
+  X(119,151), X(23,55), X(87,119), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(15,79), X(79,143), X(15,79), X(47,111), X(47,79), X(111,143),
+  X(15,47), X(79,111), X(31,95), X(95,159), X(31,95), X(63,127), X(63,95),
+  X(127,159), X(31,63), X(95,127), X(15,31), X(47,63), X(79,95), X(111,127),
+  X(143,159), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(98,162), X(34,98), X(2,34), X(66,98), X(130,162), X(18,82),
+  X(82,146), X(18,82), X(50,114), X(50,82), X(114,146), X(18,50), X(82,114),
+  X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74), X(42,106),
+  X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(90,154), X(26,90),
+  X(58,122), X(58,90), X(122,154), X(26,58), X(90,122), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162), X(2,10),
+  X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122),
+  X(130,138), X(146,154), X(6,70), X(70,134), X(6,70), X(38,102), X(38,70),
+  X(102,134), X(6,38), X(70,102), X(22,86), X(86,150), X(22,86), X(54,118),
+  X(54,86), X(118,150), X(22,54), X(86,118), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(14,78), X(78,142), X(14,78), X(46,110), X(46,78),
+  X(110,142), X(14,46), X(78,110), X(30,94), X(94,158), X(30,94), X(62,126),
+  X(62,94), X(126,158), X(30,62), X(94,126), X(14,30), X(46,62), X(78,94),
+  X(110,126), X(142,158), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(126,130), X(134,138),
+  X(142,146), X(150,154), X(158,162), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164),
+  X(36,100), X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84),
+  X(52,116), X(52,84), X(116,148), X(20,52), X(84,116), X(20,36), X(52,68),
+  X(84,100), X(116,132), X(148,164), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(132,148), X(12,76), X(76,140), X(12,76), X(44,108), X(44,76), X(108,140),
+  X(12,44), X(76,108), X(28,92), X(92,156), X(28,92), X(60,124), X(60,92),
+  X(124,156), X(28,60), X(92,124), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(140,156), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100),
+  X(108,116), X(124,132), X(140,148), X(156,164), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156),
+  X(8,72), X(72,136), X(8,72), X(40,104), X(40,72), X(104,136), X(8,40),
+  X(72,104), X(24,88), X(88,152), X(24,88), X(56,120), X(56,88), X(120,152),
+  X(24,56), X(88,120), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152),
+  X(16,80), X(80,144), X(16,80), X(48,112), X(48,80), X(112,144), X(16,48),
+  X(80,112), X(32,96), X(96,160), X(32,96), X(64,128), X(64,96), X(128,160),
+  X(32,64), X(96,128), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(136,144), X(152,160), X(8,12), X(16,20), X(24,28), X(32,36),
+  X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164)
+};
+M(166) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57), X(89,121),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(153,161), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(5,69), X(69,133), X(5,69),
+  X(37,101), X(101,165), X(37,101), X(5,37), X(69,101), X(133,165), X(21,85),
+  X(85,149), X(21,85), X(53,117), X(53,85), X(117,149), X(21,53), X(85,117),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(5,21), X(37,53),
+  X(69,85), X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109),
+  X(45,77), X(109,141), X(13,45), X(77,109), X(29,93), X(93,157), X(29,93),
+  X(61,125), X(61,93), X(125,157), X(29,61), X(93,125), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(13,21), X(29,37), X(45,53), X(61,69),
+  X(77,85), X(93,101), X(109,117), X(125,133), X(141,149), X(157,165), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147),
+  X(19,83), X(51,115), X(51,83), X(115,147), X(19,51), X(83,115), X(19,35),
+  X(51,67), X(83,99), X(115,131), X(147,163), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75),
+  X(107,139), X(11,43), X(75,107), X(27,91), X(91,155), X(27,91), X(59,123),
+  X(59,91), X(123,155), X(27,59), X(91,123), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139),
+  X(147,155), X(7,71), X(71,135), X(7,71), X(39,103), X(39,71), X(103,135),
+  X(7,39), X(71,103), X(23,87), X(87,151), X(23,87), X(55,119), X(55,87),
+  X(119,151), X(23,55), X(87,119), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(15,79), X(79,143), X(15,79), X(47,111), X(47,79), X(111,143),
+  X(15,47), X(79,111), X(31,95), X(95,159), X(31,95), X(63,127), X(63,95),
+  X(127,159), X(31,63), X(95,127), X(15,31), X(47,63), X(79,95), X(111,127),
+  X(143,159), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(98,162), X(34,98), X(2,34), X(66,98), X(130,162), X(18,82),
+  X(82,146), X(18,82), X(50,114), X(50,82), X(114,146), X(18,50), X(82,114),
+  X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74), X(42,106),
+  X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(90,154), X(26,90),
+  X(58,122), X(58,90), X(122,154), X(26,58), X(90,122), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162), X(2,10),
+  X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122),
+  X(130,138), X(146,154), X(6,70), X(70,134), X(6,70), X(38,102), X(102,166),
+  X(38,102), X(6,38), X(70,102), X(134,166), X(22,86), X(86,150), X(22,86),
+  X(54,118), X(54,86), X(118,150), X(22,54), X(86,118), X(22,38), X(54,70),
+  X(86,102), X(118,134), X(150,166), X(6,22), X(38,54), X(70,86), X(102,118),
+  X(134,150), X(14,78), X(78,142), X(14,78), X(46,110), X(46,78), X(110,142),
+  X(14,46), X(78,110), X(30,94), X(94,158), X(30,94), X(62,126), X(62,94),
+  X(126,158), X(30,62), X(94,126), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(142,158), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102),
+  X(110,118), X(126,134), X(142,150), X(158,166), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118),
+  X(122,126), X(130,134), X(138,142), X(146,150), X(154,158), X(162,166),
+  X(4,68), X(68,132), X(4,68), X(36,100), X(100,164), X(36,100), X(4,36),
+  X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116), X(52,84),
+  X(116,148), X(20,52), X(84,116), X(20,36), X(52,68), X(84,100), X(116,132),
+  X(148,164), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(12,76),
+  X(76,140), X(12,76), X(44,108), X(44,76), X(108,140), X(12,44), X(76,108),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(60,92), X(124,156), X(28,60),
+  X(92,124), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(12,20),
+  X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116), X(124,132),
+  X(140,148), X(156,164), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(8,72), X(72,136),
+  X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104), X(24,88),
+  X(88,152), X(24,88), X(56,120), X(56,88), X(120,152), X(24,56), X(88,120),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(64,96), X(128,160), X(32,64), X(96,128),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(104,108),
+  X(112,116), X(120,124), X(128,132), X(136,140), X(144,148), X(152,156),
+  X(160,164), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(140,142), X(144,146),
+  X(148,150), X(152,154), X(156,158), X(160,162), X(164,166), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166)
+};
+M(167) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57), X(89,121),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(153,161), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(5,69), X(69,133), X(5,69),
+  X(37,101), X(101,165), X(37,101), X(5,37), X(69,101), X(133,165), X(21,85),
+  X(85,149), X(21,85), X(53,117), X(53,85), X(117,149), X(21,53), X(85,117),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(5,21), X(37,53),
+  X(69,85), X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109),
+  X(45,77), X(109,141), X(13,45), X(77,109), X(29,93), X(93,157), X(29,93),
+  X(61,125), X(61,93), X(125,157), X(29,61), X(93,125), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(13,21), X(29,37), X(45,53), X(61,69),
+  X(77,85), X(93,101), X(109,117), X(125,133), X(141,149), X(157,165), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147),
+  X(19,83), X(51,115), X(51,83), X(115,147), X(19,51), X(83,115), X(19,35),
+  X(51,67), X(83,99), X(115,131), X(147,163), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75),
+  X(107,139), X(11,43), X(75,107), X(27,91), X(91,155), X(27,91), X(59,123),
+  X(59,91), X(123,155), X(27,59), X(91,123), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139),
+  X(147,155), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103),
+  X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119),
+  X(55,87), X(119,151), X(23,55), X(87,119), X(23,39), X(55,71), X(87,103),
+  X(119,135), X(151,167), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151),
+  X(15,79), X(79,143), X(15,79), X(47,111), X(47,79), X(111,143), X(15,47),
+  X(79,111), X(31,95), X(95,159), X(31,95), X(63,127), X(63,95), X(127,159),
+  X(31,63), X(95,127), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159),
+  X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(111,119),
+  X(127,135), X(143,151), X(159,167), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(2,66), X(66,130),
+  X(2,66), X(34,98), X(98,162), X(34,98), X(2,34), X(66,98), X(130,162),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(50,82), X(114,146), X(18,50),
+  X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(90,154),
+  X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(10,18), X(26,34), X(42,50),
+  X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(6,70), X(70,134), X(6,70), X(38,102),
+  X(102,166), X(38,102), X(6,38), X(70,102), X(134,166), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(54,86), X(118,150), X(22,54), X(86,118), X(22,38),
+  X(54,70), X(86,102), X(118,134), X(150,166), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(14,78), X(78,142), X(14,78), X(46,110), X(46,78),
+  X(110,142), X(14,46), X(78,110), X(30,94), X(94,158), X(30,94), X(62,126),
+  X(62,94), X(126,158), X(30,62), X(94,126), X(14,30), X(46,62), X(78,94),
+  X(110,126), X(142,158), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86),
+  X(94,102), X(110,118), X(126,134), X(142,150), X(158,166), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(154,158),
+  X(162,166), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164), X(36,100),
+  X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(52,84), X(116,148), X(20,52), X(84,116), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(12,76), X(76,140), X(12,76), X(44,108), X(44,76), X(108,140), X(12,44),
+  X(76,108), X(28,92), X(92,156), X(28,92), X(60,124), X(60,92), X(124,156),
+  X(28,60), X(92,124), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(140,148), X(156,164), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(8,72),
+  X(72,136), X(8,72), X(40,104), X(40,72), X(104,136), X(8,40), X(72,104),
+  X(24,88), X(88,152), X(24,88), X(56,120), X(56,88), X(120,152), X(24,56),
+  X(88,120), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(16,80),
+  X(80,144), X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112),
+  X(32,96), X(96,160), X(32,96), X(64,128), X(64,96), X(128,160), X(32,64),
+  X(96,128), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(152,160), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44),
+  X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100),
+  X(104,108), X(112,116), X(120,124), X(128,132), X(136,140), X(144,148),
+  X(152,156), X(160,164), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(120,122), X(124,126), X(128,130), X(132,134), X(136,138),
+  X(140,142), X(144,146), X(148,150), X(152,154), X(156,158), X(160,162),
+  X(164,166), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166)
+};
+M(168) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(41,73), X(105,137), X(9,41), X(73,105), X(25,89),
+  X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57), X(89,121),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(9,17), X(25,33),
+  X(41,49), X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145),
+  X(153,161), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(5,69), X(69,133), X(5,69),
+  X(37,101), X(101,165), X(37,101), X(5,37), X(69,101), X(133,165), X(21,85),
+  X(85,149), X(21,85), X(53,117), X(53,85), X(117,149), X(21,53), X(85,117),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(5,21), X(37,53),
+  X(69,85), X(101,117), X(133,149), X(13,77), X(77,141), X(13,77), X(45,109),
+  X(45,77), X(109,141), X(13,45), X(77,109), X(29,93), X(93,157), X(29,93),
+  X(61,125), X(61,93), X(125,157), X(29,61), X(93,125), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(13,21), X(29,37), X(45,53), X(61,69),
+  X(77,85), X(93,101), X(109,117), X(125,133), X(141,149), X(157,165), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147),
+  X(19,83), X(51,115), X(51,83), X(115,147), X(19,51), X(83,115), X(19,35),
+  X(51,67), X(83,99), X(115,131), X(147,163), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107), X(43,75),
+  X(107,139), X(11,43), X(75,107), X(27,91), X(91,155), X(27,91), X(59,123),
+  X(59,91), X(123,155), X(27,59), X(91,123), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139),
+  X(147,155), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103),
+  X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119),
+  X(55,87), X(119,151), X(23,55), X(87,119), X(23,39), X(55,71), X(87,103),
+  X(119,135), X(151,167), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151),
+  X(15,79), X(79,143), X(15,79), X(47,111), X(47,79), X(111,143), X(15,47),
+  X(79,111), X(31,95), X(95,159), X(31,95), X(63,127), X(63,95), X(127,159),
+  X(31,63), X(95,127), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159),
+  X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(111,119),
+  X(127,135), X(143,151), X(159,167), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(2,66), X(66,130),
+  X(2,66), X(34,98), X(98,162), X(34,98), X(2,34), X(66,98), X(130,162),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(50,82), X(114,146), X(18,50),
+  X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(90,154),
+  X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(10,18), X(26,34), X(42,50),
+  X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(6,70), X(70,134), X(6,70), X(38,102),
+  X(102,166), X(38,102), X(6,38), X(70,102), X(134,166), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(54,86), X(118,150), X(22,54), X(86,118), X(22,38),
+  X(54,70), X(86,102), X(118,134), X(150,166), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(14,78), X(78,142), X(14,78), X(46,110), X(46,78),
+  X(110,142), X(14,46), X(78,110), X(30,94), X(94,158), X(30,94), X(62,126),
+  X(62,94), X(126,158), X(30,62), X(94,126), X(14,30), X(46,62), X(78,94),
+  X(110,126), X(142,158), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86),
+  X(94,102), X(110,118), X(126,134), X(142,150), X(158,166), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(154,158),
+  X(162,166), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164), X(36,100),
+  X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(52,84), X(116,148), X(20,52), X(84,116), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(12,76), X(76,140), X(12,76), X(44,108), X(44,76), X(108,140), X(12,44),
+  X(76,108), X(28,92), X(92,156), X(28,92), X(60,124), X(60,92), X(124,156),
+  X(28,60), X(92,124), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(140,148), X(156,164), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(8,72),
+  X(72,136), X(8,72), X(40,104), X(104,168), X(40,104), X(8,40), X(72,104),
+  X(136,168), X(24,88), X(88,152), X(24,88), X(56,120), X(56,88), X(120,152),
+  X(24,56), X(88,120), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(64,96), X(128,160), X(32,64), X(96,128),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152),
+  X(160,168), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(152,160), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168)
+};
+M(169) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105), X(137,169),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153),
+  X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165), X(37,101),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101),
+  X(117,133), X(149,165), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149),
+  X(13,77), X(77,141), X(13,77), X(45,109), X(45,77), X(109,141), X(13,45),
+  X(77,109), X(29,93), X(93,157), X(29,93), X(61,125), X(61,93), X(125,157),
+  X(29,61), X(93,125), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117),
+  X(125,133), X(141,149), X(157,165), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(3,67), X(67,131), X(3,67),
+  X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83),
+  X(83,147), X(19,83), X(51,115), X(51,83), X(115,147), X(19,51), X(83,115),
+  X(19,35), X(51,67), X(83,99), X(115,131), X(147,163), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107),
+  X(43,75), X(107,139), X(11,43), X(75,107), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(139,155), X(11,19), X(27,35), X(43,51), X(59,67),
+  X(75,83), X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123),
+  X(131,139), X(147,155), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167),
+  X(39,103), X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87),
+  X(55,119), X(55,87), X(119,151), X(23,55), X(87,119), X(23,39), X(55,71),
+  X(87,103), X(119,135), X(151,167), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(15,79), X(79,143), X(15,79), X(47,111), X(47,79), X(111,143),
+  X(15,47), X(79,111), X(31,95), X(95,159), X(31,95), X(63,127), X(63,95),
+  X(127,159), X(31,63), X(95,127), X(15,31), X(47,63), X(79,95), X(111,127),
+  X(143,159), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103),
+  X(111,119), X(127,135), X(143,151), X(159,167), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63),
+  X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119),
+  X(123,127), X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(127,129), X(131,133), X(135,137), X(139,141), X(143,145),
+  X(147,149), X(151,153), X(155,157), X(159,161), X(163,165), X(167,169), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(2,66), X(66,130),
+  X(2,66), X(34,98), X(98,162), X(34,98), X(2,34), X(66,98), X(130,162),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(50,82), X(114,146), X(18,50),
+  X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(42,74), X(106,138), X(10,42), X(74,106), X(26,90), X(90,154),
+  X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(10,18), X(26,34), X(42,50),
+  X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(6,70), X(70,134), X(6,70), X(38,102),
+  X(102,166), X(38,102), X(6,38), X(70,102), X(134,166), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(54,86), X(118,150), X(22,54), X(86,118), X(22,38),
+  X(54,70), X(86,102), X(118,134), X(150,166), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(14,78), X(78,142), X(14,78), X(46,110), X(46,78),
+  X(110,142), X(14,46), X(78,110), X(30,94), X(94,158), X(30,94), X(62,126),
+  X(62,94), X(126,158), X(30,62), X(94,126), X(14,30), X(46,62), X(78,94),
+  X(110,126), X(142,158), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86),
+  X(94,102), X(110,118), X(126,134), X(142,150), X(158,166), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(154,158),
+  X(162,166), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164), X(36,100),
+  X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(52,84), X(116,148), X(20,52), X(84,116), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(12,76), X(76,140), X(12,76), X(44,108), X(44,76), X(108,140), X(12,44),
+  X(76,108), X(28,92), X(92,156), X(28,92), X(60,124), X(60,92), X(124,156),
+  X(28,60), X(92,124), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(140,148), X(156,164), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(8,72),
+  X(72,136), X(8,72), X(40,104), X(104,168), X(40,104), X(8,40), X(72,104),
+  X(136,168), X(24,88), X(88,152), X(24,88), X(56,120), X(56,88), X(120,152),
+  X(24,56), X(88,120), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(64,96), X(128,160), X(32,64), X(96,128),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152),
+  X(160,168), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(152,160), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(112,113), X(114,115),
+  X(116,117), X(118,119), X(120,121), X(122,123), X(124,125), X(126,127),
+  X(128,129), X(130,131), X(132,133), X(134,135), X(136,137), X(138,139),
+  X(140,141), X(142,143), X(144,145), X(146,147), X(148,149), X(150,151),
+  X(152,153), X(154,155), X(156,157), X(158,159), X(160,161), X(162,163),
+  X(164,165), X(166,167), X(168,169), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168)
+};
+M(170) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105), X(137,169),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153),
+  X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165), X(37,101),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101),
+  X(117,133), X(149,165), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149),
+  X(13,77), X(77,141), X(13,77), X(45,109), X(45,77), X(109,141), X(13,45),
+  X(77,109), X(29,93), X(93,157), X(29,93), X(61,125), X(61,93), X(125,157),
+  X(29,61), X(93,125), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117),
+  X(125,133), X(141,149), X(157,165), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(3,67), X(67,131), X(3,67),
+  X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83),
+  X(83,147), X(19,83), X(51,115), X(51,83), X(115,147), X(19,51), X(83,115),
+  X(19,35), X(51,67), X(83,99), X(115,131), X(147,163), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107),
+  X(43,75), X(107,139), X(11,43), X(75,107), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(139,155), X(11,19), X(27,35), X(43,51), X(59,67),
+  X(75,83), X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(3,11),
+  X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123),
+  X(131,139), X(147,155), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167),
+  X(39,103), X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87),
+  X(55,119), X(55,87), X(119,151), X(23,55), X(87,119), X(23,39), X(55,71),
+  X(87,103), X(119,135), X(151,167), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(15,79), X(79,143), X(15,79), X(47,111), X(47,79), X(111,143),
+  X(15,47), X(79,111), X(31,95), X(95,159), X(31,95), X(63,127), X(63,95),
+  X(127,159), X(31,63), X(95,127), X(15,31), X(47,63), X(79,95), X(111,127),
+  X(143,159), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103),
+  X(111,119), X(127,135), X(143,151), X(159,167), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159),
+  X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63),
+  X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119),
+  X(123,127), X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(127,129), X(131,133), X(135,137), X(139,141), X(143,145),
+  X(147,149), X(151,153), X(155,157), X(159,161), X(163,165), X(167,169), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(2,66), X(66,130),
+  X(2,66), X(34,98), X(98,162), X(34,98), X(2,34), X(66,98), X(130,162),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(50,82), X(114,146), X(18,50),
+  X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(106,170), X(42,106), X(10,42), X(74,106), X(138,170), X(26,90),
+  X(90,154), X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122),
+  X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(6,70), X(70,134), X(6,70), X(38,102), X(102,166), X(38,102), X(6,38),
+  X(70,102), X(134,166), X(22,86), X(86,150), X(22,86), X(54,118), X(54,86),
+  X(118,150), X(22,54), X(86,118), X(22,38), X(54,70), X(86,102), X(118,134),
+  X(150,166), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(14,78),
+  X(78,142), X(14,78), X(46,110), X(46,78), X(110,142), X(14,46), X(78,110),
+  X(30,94), X(94,158), X(30,94), X(62,126), X(62,94), X(126,158), X(30,62),
+  X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134),
+  X(142,150), X(158,166), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(126,130), X(134,138),
+  X(142,146), X(150,154), X(158,162), X(166,170), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(4,68), X(68,132), X(4,68),
+  X(36,100), X(100,164), X(36,100), X(4,36), X(68,100), X(132,164), X(20,84),
+  X(84,148), X(20,84), X(52,116), X(52,84), X(116,148), X(20,52), X(84,116),
+  X(20,36), X(52,68), X(84,100), X(116,132), X(148,164), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(12,76), X(76,140), X(12,76), X(44,108),
+  X(44,76), X(108,140), X(12,44), X(76,108), X(28,92), X(92,156), X(28,92),
+  X(60,124), X(60,92), X(124,156), X(28,60), X(92,124), X(12,28), X(44,60),
+  X(76,92), X(108,124), X(140,156), X(12,20), X(28,36), X(44,52), X(60,68),
+  X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124),
+  X(132,140), X(148,156), X(8,72), X(72,136), X(8,72), X(40,104), X(104,168),
+  X(40,104), X(8,40), X(72,104), X(136,168), X(24,88), X(88,152), X(24,88),
+  X(56,120), X(56,88), X(120,152), X(24,56), X(88,120), X(24,40), X(56,72),
+  X(88,104), X(120,136), X(152,168), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(16,80), X(80,144), X(16,80), X(48,112), X(48,80), X(112,144),
+  X(16,48), X(80,112), X(32,96), X(96,160), X(32,96), X(64,128), X(64,96),
+  X(128,160), X(32,64), X(96,128), X(16,32), X(48,64), X(80,96), X(112,128),
+  X(144,160), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104),
+  X(112,120), X(128,136), X(144,152), X(160,168), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160),
+  X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64),
+  X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120),
+  X(124,128), X(132,136), X(140,144), X(148,152), X(156,160), X(164,168), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(140,142), X(144,146),
+  X(148,150), X(152,154), X(156,158), X(160,162), X(164,166), X(168,170), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170)
+};
+M(171) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105), X(137,169),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153),
+  X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165), X(37,101),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101),
+  X(117,133), X(149,165), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149),
+  X(13,77), X(77,141), X(13,77), X(45,109), X(45,77), X(109,141), X(13,45),
+  X(77,109), X(29,93), X(93,157), X(29,93), X(61,125), X(61,93), X(125,157),
+  X(29,61), X(93,125), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117),
+  X(125,133), X(141,149), X(157,165), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(3,67), X(67,131), X(3,67),
+  X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83),
+  X(83,147), X(19,83), X(51,115), X(51,83), X(115,147), X(19,51), X(83,115),
+  X(19,35), X(51,67), X(83,99), X(115,131), X(147,163), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107),
+  X(107,171), X(43,107), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155),
+  X(27,91), X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(27,43),
+  X(59,75), X(91,107), X(123,139), X(155,171), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(103,167), X(39,103), X(7,39), X(71,103),
+  X(135,167), X(23,87), X(87,151), X(23,87), X(55,119), X(55,87), X(119,151),
+  X(23,55), X(87,119), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79), X(79,143),
+  X(15,79), X(47,111), X(47,79), X(111,143), X(15,47), X(79,111), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63), X(95,127),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(141,143), X(145,147), X(149,151),
+  X(153,155), X(157,159), X(161,163), X(165,167), X(169,171), X(2,66), X(66,130),
+  X(2,66), X(34,98), X(98,162), X(34,98), X(2,34), X(66,98), X(130,162),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(50,82), X(114,146), X(18,50),
+  X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(106,170), X(42,106), X(10,42), X(74,106), X(138,170), X(26,90),
+  X(90,154), X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122),
+  X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(6,70), X(70,134), X(6,70), X(38,102), X(102,166), X(38,102), X(6,38),
+  X(70,102), X(134,166), X(22,86), X(86,150), X(22,86), X(54,118), X(54,86),
+  X(118,150), X(22,54), X(86,118), X(22,38), X(54,70), X(86,102), X(118,134),
+  X(150,166), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(14,78),
+  X(78,142), X(14,78), X(46,110), X(46,78), X(110,142), X(14,46), X(78,110),
+  X(30,94), X(94,158), X(30,94), X(62,126), X(62,94), X(126,158), X(30,62),
+  X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134),
+  X(142,150), X(158,166), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(126,130), X(134,138),
+  X(142,146), X(150,154), X(158,162), X(166,170), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(4,68), X(68,132), X(4,68),
+  X(36,100), X(100,164), X(36,100), X(4,36), X(68,100), X(132,164), X(20,84),
+  X(84,148), X(20,84), X(52,116), X(52,84), X(116,148), X(20,52), X(84,116),
+  X(20,36), X(52,68), X(84,100), X(116,132), X(148,164), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(12,76), X(76,140), X(12,76), X(44,108),
+  X(44,76), X(108,140), X(12,44), X(76,108), X(28,92), X(92,156), X(28,92),
+  X(60,124), X(60,92), X(124,156), X(28,60), X(92,124), X(12,28), X(44,60),
+  X(76,92), X(108,124), X(140,156), X(12,20), X(28,36), X(44,52), X(60,68),
+  X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124),
+  X(132,140), X(148,156), X(8,72), X(72,136), X(8,72), X(40,104), X(104,168),
+  X(40,104), X(8,40), X(72,104), X(136,168), X(24,88), X(88,152), X(24,88),
+  X(56,120), X(56,88), X(120,152), X(24,56), X(88,120), X(24,40), X(56,72),
+  X(88,104), X(120,136), X(152,168), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(16,80), X(80,144), X(16,80), X(48,112), X(48,80), X(112,144),
+  X(16,48), X(80,112), X(32,96), X(96,160), X(32,96), X(64,128), X(64,96),
+  X(128,160), X(32,64), X(96,128), X(16,32), X(48,64), X(80,96), X(112,128),
+  X(144,160), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104),
+  X(112,120), X(128,136), X(144,152), X(160,168), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160),
+  X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64),
+  X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120),
+  X(124,128), X(132,136), X(140,144), X(148,152), X(156,160), X(164,168), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(140,142), X(144,146),
+  X(148,150), X(152,154), X(156,158), X(160,162), X(164,166), X(168,170), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170)
+};
+M(172) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105), X(137,169),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153),
+  X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165), X(37,101),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101),
+  X(117,133), X(149,165), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149),
+  X(13,77), X(77,141), X(13,77), X(45,109), X(45,77), X(109,141), X(13,45),
+  X(77,109), X(29,93), X(93,157), X(29,93), X(61,125), X(61,93), X(125,157),
+  X(29,61), X(93,125), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117),
+  X(125,133), X(141,149), X(157,165), X(5,13), X(21,29), X(37,45), X(53,61),
+  X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(3,67), X(67,131), X(3,67),
+  X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83),
+  X(83,147), X(19,83), X(51,115), X(51,83), X(115,147), X(19,51), X(83,115),
+  X(19,35), X(51,67), X(83,99), X(115,131), X(147,163), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107),
+  X(107,171), X(43,107), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155),
+  X(27,91), X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(27,43),
+  X(59,75), X(91,107), X(123,139), X(155,171), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(103,167), X(39,103), X(7,39), X(71,103),
+  X(135,167), X(23,87), X(87,151), X(23,87), X(55,119), X(55,87), X(119,151),
+  X(23,55), X(87,119), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79), X(79,143),
+  X(15,79), X(47,111), X(47,79), X(111,143), X(15,47), X(79,111), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63), X(95,127),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(141,143), X(145,147), X(149,151),
+  X(153,155), X(157,159), X(161,163), X(165,167), X(169,171), X(2,66), X(66,130),
+  X(2,66), X(34,98), X(98,162), X(34,98), X(2,34), X(66,98), X(130,162),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(50,82), X(114,146), X(18,50),
+  X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(106,170), X(42,106), X(10,42), X(74,106), X(138,170), X(26,90),
+  X(90,154), X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122),
+  X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(6,70), X(70,134), X(6,70), X(38,102), X(102,166), X(38,102), X(6,38),
+  X(70,102), X(134,166), X(22,86), X(86,150), X(22,86), X(54,118), X(54,86),
+  X(118,150), X(22,54), X(86,118), X(22,38), X(54,70), X(86,102), X(118,134),
+  X(150,166), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(14,78),
+  X(78,142), X(14,78), X(46,110), X(46,78), X(110,142), X(14,46), X(78,110),
+  X(30,94), X(94,158), X(30,94), X(62,126), X(62,94), X(126,158), X(30,62),
+  X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134),
+  X(142,150), X(158,166), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(126,130), X(134,138),
+  X(142,146), X(150,154), X(158,162), X(166,170), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(4,68), X(68,132), X(4,68),
+  X(36,100), X(100,164), X(36,100), X(4,36), X(68,100), X(132,164), X(20,84),
+  X(84,148), X(20,84), X(52,116), X(52,84), X(116,148), X(20,52), X(84,116),
+  X(20,36), X(52,68), X(84,100), X(116,132), X(148,164), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(12,76), X(76,140), X(12,76), X(44,108),
+  X(108,172), X(44,108), X(12,44), X(76,108), X(140,172), X(28,92), X(92,156),
+  X(28,92), X(60,124), X(60,92), X(124,156), X(28,60), X(92,124), X(28,44),
+  X(60,76), X(92,108), X(124,140), X(156,172), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172), X(8,72),
+  X(72,136), X(8,72), X(40,104), X(104,168), X(40,104), X(8,40), X(72,104),
+  X(136,168), X(24,88), X(88,152), X(24,88), X(56,120), X(56,88), X(120,152),
+  X(24,56), X(88,120), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(64,96), X(128,160), X(32,64), X(96,128),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152),
+  X(160,168), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(152,160), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(168,172), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172)
+};
+M(173) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105), X(137,169),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153),
+  X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165), X(37,101),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101),
+  X(117,133), X(149,165), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149),
+  X(13,77), X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45),
+  X(77,109), X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(61,93),
+  X(125,157), X(29,61), X(93,125), X(29,45), X(61,77), X(93,109), X(125,141),
+  X(157,173), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(165,173), X(1,5), X(9,13), X(17,21), X(25,29),
+  X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(3,67), X(67,131), X(3,67),
+  X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83),
+  X(83,147), X(19,83), X(51,115), X(51,83), X(115,147), X(19,51), X(83,115),
+  X(19,35), X(51,67), X(83,99), X(115,131), X(147,163), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107),
+  X(107,171), X(43,107), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155),
+  X(27,91), X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(27,43),
+  X(59,75), X(91,107), X(123,139), X(155,171), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(103,167), X(39,103), X(7,39), X(71,103),
+  X(135,167), X(23,87), X(87,151), X(23,87), X(55,119), X(55,87), X(119,151),
+  X(23,55), X(87,119), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79), X(79,143),
+  X(15,79), X(47,111), X(47,79), X(111,143), X(15,47), X(79,111), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63), X(95,127),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105),
+  X(107,109), X(111,113), X(115,117), X(119,121), X(123,125), X(127,129),
+  X(131,133), X(135,137), X(139,141), X(143,145), X(147,149), X(151,153),
+  X(155,157), X(159,161), X(163,165), X(167,169), X(171,173), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(2,66), X(66,130), X(2,66), X(34,98), X(98,162), X(34,98), X(2,34), X(66,98),
+  X(130,162), X(18,82), X(82,146), X(18,82), X(50,114), X(50,82), X(114,146),
+  X(18,50), X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138),
+  X(10,74), X(42,106), X(106,170), X(42,106), X(10,42), X(74,106), X(138,170),
+  X(26,90), X(90,154), X(26,90), X(58,122), X(58,90), X(122,154), X(26,58),
+  X(90,122), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(162,170), X(6,70), X(70,134), X(6,70), X(38,102), X(102,166), X(38,102),
+  X(6,38), X(70,102), X(134,166), X(22,86), X(86,150), X(22,86), X(54,118),
+  X(54,86), X(118,150), X(22,54), X(86,118), X(22,38), X(54,70), X(86,102),
+  X(118,134), X(150,166), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(14,78), X(78,142), X(14,78), X(46,110), X(46,78), X(110,142), X(14,46),
+  X(78,110), X(30,94), X(94,158), X(30,94), X(62,126), X(62,94), X(126,158),
+  X(30,62), X(94,126), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158),
+  X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118),
+  X(126,134), X(142,150), X(158,166), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(6,10),
+  X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74),
+  X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(126,130),
+  X(134,138), X(142,146), X(150,154), X(158,162), X(166,170), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(4,68), X(68,132), X(4,68),
+  X(36,100), X(100,164), X(36,100), X(4,36), X(68,100), X(132,164), X(20,84),
+  X(84,148), X(20,84), X(52,116), X(52,84), X(116,148), X(20,52), X(84,116),
+  X(20,36), X(52,68), X(84,100), X(116,132), X(148,164), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(12,76), X(76,140), X(12,76), X(44,108),
+  X(108,172), X(44,108), X(12,44), X(76,108), X(140,172), X(28,92), X(92,156),
+  X(28,92), X(60,124), X(60,92), X(124,156), X(28,60), X(92,124), X(28,44),
+  X(60,76), X(92,108), X(124,140), X(156,172), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172), X(8,72),
+  X(72,136), X(8,72), X(40,104), X(104,168), X(40,104), X(8,40), X(72,104),
+  X(136,168), X(24,88), X(88,152), X(24,88), X(56,120), X(56,88), X(120,152),
+  X(24,56), X(88,120), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(64,96), X(128,160), X(32,64), X(96,128),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152),
+  X(160,168), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(152,160), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(168,172), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172)
+};
+M(174) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105), X(137,169),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153),
+  X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165), X(37,101),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101),
+  X(117,133), X(149,165), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149),
+  X(13,77), X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45),
+  X(77,109), X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(61,93),
+  X(125,157), X(29,61), X(93,125), X(29,45), X(61,77), X(93,109), X(125,141),
+  X(157,173), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(165,173), X(1,5), X(9,13), X(17,21), X(25,29),
+  X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(3,67), X(67,131), X(3,67),
+  X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83),
+  X(83,147), X(19,83), X(51,115), X(51,83), X(115,147), X(19,51), X(83,115),
+  X(19,35), X(51,67), X(83,99), X(115,131), X(147,163), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107),
+  X(107,171), X(43,107), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155),
+  X(27,91), X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(27,43),
+  X(59,75), X(91,107), X(123,139), X(155,171), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(103,167), X(39,103), X(7,39), X(71,103),
+  X(135,167), X(23,87), X(87,151), X(23,87), X(55,119), X(55,87), X(119,151),
+  X(23,55), X(87,119), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79), X(79,143),
+  X(15,79), X(47,111), X(47,79), X(111,143), X(15,47), X(79,111), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63), X(95,127),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105),
+  X(107,109), X(111,113), X(115,117), X(119,121), X(123,125), X(127,129),
+  X(131,133), X(135,137), X(139,141), X(143,145), X(147,149), X(151,153),
+  X(155,157), X(159,161), X(163,165), X(167,169), X(171,173), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(2,66), X(66,130), X(2,66), X(34,98), X(98,162), X(34,98), X(2,34), X(66,98),
+  X(130,162), X(18,82), X(82,146), X(18,82), X(50,114), X(50,82), X(114,146),
+  X(18,50), X(82,114), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(10,74), X(74,138),
+  X(10,74), X(42,106), X(106,170), X(42,106), X(10,42), X(74,106), X(138,170),
+  X(26,90), X(90,154), X(26,90), X(58,122), X(58,90), X(122,154), X(26,58),
+  X(90,122), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(162,170), X(6,70), X(70,134), X(6,70), X(38,102), X(102,166), X(38,102),
+  X(6,38), X(70,102), X(134,166), X(22,86), X(86,150), X(22,86), X(54,118),
+  X(54,86), X(118,150), X(22,54), X(86,118), X(22,38), X(54,70), X(86,102),
+  X(118,134), X(150,166), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(14,78), X(78,142), X(14,78), X(46,110), X(110,174), X(46,110), X(14,46),
+  X(78,110), X(142,174), X(30,94), X(94,158), X(30,94), X(62,126), X(62,94),
+  X(126,158), X(30,62), X(94,126), X(30,46), X(62,78), X(94,110), X(126,142),
+  X(158,174), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(6,14),
+  X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126),
+  X(134,142), X(150,158), X(166,174), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(4,68), X(68,132), X(4,68),
+  X(36,100), X(100,164), X(36,100), X(4,36), X(68,100), X(132,164), X(20,84),
+  X(84,148), X(20,84), X(52,116), X(52,84), X(116,148), X(20,52), X(84,116),
+  X(20,36), X(52,68), X(84,100), X(116,132), X(148,164), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(12,76), X(76,140), X(12,76), X(44,108),
+  X(108,172), X(44,108), X(12,44), X(76,108), X(140,172), X(28,92), X(92,156),
+  X(28,92), X(60,124), X(60,92), X(124,156), X(28,60), X(92,124), X(28,44),
+  X(60,76), X(92,108), X(124,140), X(156,172), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172), X(8,72),
+  X(72,136), X(8,72), X(40,104), X(104,168), X(40,104), X(8,40), X(72,104),
+  X(136,168), X(24,88), X(88,152), X(24,88), X(56,120), X(56,88), X(120,152),
+  X(24,56), X(88,120), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(48,80), X(112,144), X(16,48), X(80,112), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(64,96), X(128,160), X(32,64), X(96,128),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152),
+  X(160,168), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(152,160), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(168,172), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(4,6), X(8,10), X(12,14),
+  X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46),
+  X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78),
+  X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106),
+  X(108,110), X(112,114), X(116,118), X(120,122), X(124,126), X(128,130),
+  X(132,134), X(136,138), X(140,142), X(144,146), X(148,150), X(152,154),
+  X(156,158), X(160,162), X(164,166), X(168,170), X(172,174), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174)
+};
+M(175) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105), X(137,169),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153),
+  X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165), X(37,101),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101),
+  X(117,133), X(149,165), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149),
+  X(13,77), X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45),
+  X(77,109), X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(61,93),
+  X(125,157), X(29,61), X(93,125), X(29,45), X(61,77), X(93,109), X(125,141),
+  X(157,173), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(165,173), X(1,5), X(9,13), X(17,21), X(25,29),
+  X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(3,67), X(67,131), X(3,67),
+  X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83),
+  X(83,147), X(19,83), X(51,115), X(51,83), X(115,147), X(19,51), X(83,115),
+  X(19,35), X(51,67), X(83,99), X(115,131), X(147,163), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107),
+  X(107,171), X(43,107), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155),
+  X(27,91), X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(27,43),
+  X(59,75), X(91,107), X(123,139), X(155,171), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(103,167), X(39,103), X(7,39), X(71,103),
+  X(135,167), X(23,87), X(87,151), X(23,87), X(55,119), X(55,87), X(119,151),
+  X(23,55), X(87,119), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79), X(79,143),
+  X(15,79), X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175),
+  X(31,95), X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63),
+  X(95,127), X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159),
+  X(167,175), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(155,159),
+  X(163,167), X(171,175), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(2,66), X(66,130), X(2,66), X(34,98),
+  X(98,162), X(34,98), X(2,34), X(66,98), X(130,162), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(50,82), X(114,146), X(18,50), X(82,114), X(18,34),
+  X(50,66), X(82,98), X(114,130), X(146,162), X(2,18), X(34,50), X(66,82),
+  X(98,114), X(130,146), X(10,74), X(74,138), X(10,74), X(42,106), X(106,170),
+  X(42,106), X(10,42), X(74,106), X(138,170), X(26,90), X(90,154), X(26,90),
+  X(58,122), X(58,90), X(122,154), X(26,58), X(90,122), X(26,42), X(58,74),
+  X(90,106), X(122,138), X(154,170), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(138,154), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(146,154), X(162,170), X(6,70), X(70,134),
+  X(6,70), X(38,102), X(102,166), X(38,102), X(6,38), X(70,102), X(134,166),
+  X(22,86), X(86,150), X(22,86), X(54,118), X(54,86), X(118,150), X(22,54),
+  X(86,118), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(14,78), X(78,142), X(14,78),
+  X(46,110), X(110,174), X(46,110), X(14,46), X(78,110), X(142,174), X(30,94),
+  X(94,158), X(30,94), X(62,126), X(62,94), X(126,158), X(30,62), X(94,126),
+  X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118),
+  X(122,126), X(130,134), X(138,142), X(146,150), X(154,158), X(162,166),
+  X(170,174), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164), X(36,100),
+  X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(52,84), X(116,148), X(20,52), X(84,116), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(12,76), X(76,140), X(12,76), X(44,108), X(108,172), X(44,108), X(12,44),
+  X(76,108), X(140,172), X(28,92), X(92,156), X(28,92), X(60,124), X(60,92),
+  X(124,156), X(28,60), X(92,124), X(28,44), X(60,76), X(92,108), X(124,140),
+  X(156,172), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124),
+  X(132,140), X(148,156), X(164,172), X(8,72), X(72,136), X(8,72), X(40,104),
+  X(104,168), X(40,104), X(8,40), X(72,104), X(136,168), X(24,88), X(88,152),
+  X(24,88), X(56,120), X(56,88), X(120,152), X(24,56), X(88,120), X(24,40),
+  X(56,72), X(88,104), X(120,136), X(152,168), X(8,24), X(40,56), X(72,88),
+  X(104,120), X(136,152), X(16,80), X(80,144), X(16,80), X(48,112), X(48,80),
+  X(112,144), X(16,48), X(80,112), X(32,96), X(96,160), X(32,96), X(64,128),
+  X(64,96), X(128,160), X(32,64), X(96,128), X(16,32), X(48,64), X(80,96),
+  X(112,128), X(144,160), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88),
+  X(96,104), X(112,120), X(128,136), X(144,152), X(160,168), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(104,108),
+  X(112,116), X(120,124), X(128,132), X(136,140), X(144,148), X(152,156),
+  X(160,164), X(168,172), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82),
+  X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110),
+  X(112,114), X(116,118), X(120,122), X(124,126), X(128,130), X(132,134),
+  X(136,138), X(140,142), X(144,146), X(148,150), X(152,154), X(156,158),
+  X(160,162), X(164,166), X(168,170), X(172,174), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174)
+};
+M(176) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(49,81), X(113,145),
+  X(17,49), X(81,113), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(9,73), X(73,137),
+  X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105), X(137,169),
+  X(25,89), X(89,153), X(25,89), X(57,121), X(57,89), X(121,153), X(25,57),
+  X(89,121), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(1,9), X(17,25), X(33,41),
+  X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153),
+  X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165), X(37,101),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(53,85), X(117,149), X(21,53), X(85,117), X(21,37), X(53,69), X(85,101),
+  X(117,133), X(149,165), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149),
+  X(13,77), X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45),
+  X(77,109), X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(61,93),
+  X(125,157), X(29,61), X(93,125), X(29,45), X(61,77), X(93,109), X(125,141),
+  X(157,173), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(165,173), X(1,5), X(9,13), X(17,21), X(25,29),
+  X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(3,67), X(67,131), X(3,67),
+  X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83),
+  X(83,147), X(19,83), X(51,115), X(51,83), X(115,147), X(19,51), X(83,115),
+  X(19,35), X(51,67), X(83,99), X(115,131), X(147,163), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75), X(43,107),
+  X(107,171), X(43,107), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155),
+  X(27,91), X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(27,43),
+  X(59,75), X(91,107), X(123,139), X(155,171), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(103,167), X(39,103), X(7,39), X(71,103),
+  X(135,167), X(23,87), X(87,151), X(23,87), X(55,119), X(55,87), X(119,151),
+  X(23,55), X(87,119), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79), X(79,143),
+  X(15,79), X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175),
+  X(31,95), X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63),
+  X(95,127), X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159),
+  X(167,175), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(155,159),
+  X(163,167), X(171,175), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(2,66), X(66,130), X(2,66), X(34,98),
+  X(98,162), X(34,98), X(2,34), X(66,98), X(130,162), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(50,82), X(114,146), X(18,50), X(82,114), X(18,34),
+  X(50,66), X(82,98), X(114,130), X(146,162), X(2,18), X(34,50), X(66,82),
+  X(98,114), X(130,146), X(10,74), X(74,138), X(10,74), X(42,106), X(106,170),
+  X(42,106), X(10,42), X(74,106), X(138,170), X(26,90), X(90,154), X(26,90),
+  X(58,122), X(58,90), X(122,154), X(26,58), X(90,122), X(26,42), X(58,74),
+  X(90,106), X(122,138), X(154,170), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(138,154), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(146,154), X(162,170), X(6,70), X(70,134),
+  X(6,70), X(38,102), X(102,166), X(38,102), X(6,38), X(70,102), X(134,166),
+  X(22,86), X(86,150), X(22,86), X(54,118), X(54,86), X(118,150), X(22,54),
+  X(86,118), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(14,78), X(78,142), X(14,78),
+  X(46,110), X(110,174), X(46,110), X(14,46), X(78,110), X(142,174), X(30,94),
+  X(94,158), X(30,94), X(62,126), X(62,94), X(126,158), X(30,62), X(94,126),
+  X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118),
+  X(122,126), X(130,134), X(138,142), X(146,150), X(154,158), X(162,166),
+  X(170,174), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164), X(36,100),
+  X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(52,84), X(116,148), X(20,52), X(84,116), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(12,76), X(76,140), X(12,76), X(44,108), X(108,172), X(44,108), X(12,44),
+  X(76,108), X(140,172), X(28,92), X(92,156), X(28,92), X(60,124), X(60,92),
+  X(124,156), X(28,60), X(92,124), X(28,44), X(60,76), X(92,108), X(124,140),
+  X(156,172), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124),
+  X(132,140), X(148,156), X(164,172), X(8,72), X(72,136), X(8,72), X(40,104),
+  X(104,168), X(40,104), X(8,40), X(72,104), X(136,168), X(24,88), X(88,152),
+  X(24,88), X(56,120), X(56,88), X(120,152), X(24,56), X(88,120), X(24,40),
+  X(56,72), X(88,104), X(120,136), X(152,168), X(8,24), X(40,56), X(72,88),
+  X(104,120), X(136,152), X(16,80), X(80,144), X(16,80), X(48,112), X(112,176),
+  X(48,112), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160), X(32,96),
+  X(64,128), X(64,96), X(128,160), X(32,64), X(96,128), X(32,48), X(64,80),
+  X(96,112), X(128,144), X(160,176), X(16,32), X(48,64), X(80,96), X(112,128),
+  X(144,160), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(152,160), X(168,176), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176)
+};
+M(177) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(57,89), X(121,153), X(25,57), X(89,121), X(25,41), X(57,73),
+  X(89,105), X(121,137), X(153,169), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165),
+  X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85),
+  X(53,117), X(53,85), X(117,149), X(21,53), X(85,117), X(21,37), X(53,69),
+  X(85,101), X(117,133), X(149,165), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(109,173), X(45,109),
+  X(13,45), X(77,109), X(141,173), X(29,93), X(93,157), X(29,93), X(61,125),
+  X(61,93), X(125,157), X(29,61), X(93,125), X(29,45), X(61,77), X(93,109),
+  X(125,141), X(157,173), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(5,9), X(13,17), X(21,25),
+  X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89),
+  X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137),
+  X(141,145), X(149,153), X(157,161), X(165,169), X(173,177), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(3,67), X(67,131),
+  X(3,67), X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163),
+  X(19,83), X(83,147), X(19,83), X(51,115), X(51,83), X(115,147), X(19,51),
+  X(83,115), X(19,35), X(51,67), X(83,99), X(115,131), X(147,163), X(3,19),
+  X(35,51), X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75),
+  X(43,107), X(107,171), X(43,107), X(11,43), X(75,107), X(139,171), X(27,91),
+  X(91,155), X(27,91), X(59,123), X(59,91), X(123,155), X(27,59), X(91,123),
+  X(27,43), X(59,75), X(91,107), X(123,139), X(155,171), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(139,155), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103), X(7,39),
+  X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119), X(55,87),
+  X(119,151), X(23,55), X(87,119), X(23,39), X(55,71), X(87,103), X(119,135),
+  X(151,167), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79),
+  X(79,143), X(15,79), X(47,111), X(111,175), X(47,111), X(15,47), X(79,111),
+  X(143,175), X(31,95), X(95,159), X(31,95), X(63,127), X(63,95), X(127,159),
+  X(31,63), X(95,127), X(31,47), X(63,79), X(95,111), X(127,143), X(159,175),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105),
+  X(107,109), X(111,113), X(115,117), X(119,121), X(123,125), X(127,129),
+  X(131,133), X(135,137), X(139,141), X(143,145), X(147,149), X(151,153),
+  X(155,157), X(159,161), X(163,165), X(167,169), X(171,173), X(175,177), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(2,66), X(66,130), X(2,66), X(34,98), X(98,162), X(34,98),
+  X(2,34), X(66,98), X(130,162), X(18,82), X(82,146), X(18,82), X(50,114),
+  X(50,82), X(114,146), X(18,50), X(82,114), X(18,34), X(50,66), X(82,98),
+  X(114,130), X(146,162), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146),
+  X(10,74), X(74,138), X(10,74), X(42,106), X(106,170), X(42,106), X(10,42),
+  X(74,106), X(138,170), X(26,90), X(90,154), X(26,90), X(58,122), X(58,90),
+  X(122,154), X(26,58), X(90,122), X(26,42), X(58,74), X(90,106), X(122,138),
+  X(154,170), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(2,10),
+  X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122),
+  X(130,138), X(146,154), X(162,170), X(6,70), X(70,134), X(6,70), X(38,102),
+  X(102,166), X(38,102), X(6,38), X(70,102), X(134,166), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(54,86), X(118,150), X(22,54), X(86,118), X(22,38),
+  X(54,70), X(86,102), X(118,134), X(150,166), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(14,78), X(78,142), X(14,78), X(46,110), X(110,174),
+  X(46,110), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94),
+  X(62,126), X(62,94), X(126,158), X(30,62), X(94,126), X(30,46), X(62,78),
+  X(94,110), X(126,142), X(158,174), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(142,158), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(134,142), X(150,158), X(166,174), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(4,68), X(68,132),
+  X(4,68), X(36,100), X(100,164), X(36,100), X(4,36), X(68,100), X(132,164),
+  X(20,84), X(84,148), X(20,84), X(52,116), X(52,84), X(116,148), X(20,52),
+  X(84,116), X(20,36), X(52,68), X(84,100), X(116,132), X(148,164), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(132,148), X(12,76), X(76,140), X(12,76),
+  X(44,108), X(108,172), X(44,108), X(12,44), X(76,108), X(140,172), X(28,92),
+  X(92,156), X(28,92), X(60,124), X(60,92), X(124,156), X(28,60), X(92,124),
+  X(28,44), X(60,76), X(92,108), X(124,140), X(156,172), X(12,28), X(44,60),
+  X(76,92), X(108,124), X(140,156), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(8,72), X(72,136), X(8,72), X(40,104), X(104,168), X(40,104), X(8,40),
+  X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120), X(56,88),
+  X(120,152), X(24,56), X(88,120), X(24,40), X(56,72), X(88,104), X(120,136),
+  X(152,168), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(16,80),
+  X(80,144), X(16,80), X(48,112), X(112,176), X(48,112), X(16,48), X(80,112),
+  X(144,176), X(32,96), X(96,160), X(32,96), X(64,128), X(64,96), X(128,160),
+  X(32,64), X(96,128), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(168,176), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(174,176), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176)
+};
+M(178) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(57,89), X(121,153), X(25,57), X(89,121), X(25,41), X(57,73),
+  X(89,105), X(121,137), X(153,169), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165),
+  X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85),
+  X(53,117), X(53,85), X(117,149), X(21,53), X(85,117), X(21,37), X(53,69),
+  X(85,101), X(117,133), X(149,165), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(109,173), X(45,109),
+  X(13,45), X(77,109), X(141,173), X(29,93), X(93,157), X(29,93), X(61,125),
+  X(61,93), X(125,157), X(29,61), X(93,125), X(29,45), X(61,77), X(93,109),
+  X(125,141), X(157,173), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(5,9), X(13,17), X(21,25),
+  X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89),
+  X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137),
+  X(141,145), X(149,153), X(157,161), X(165,169), X(173,177), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(3,67), X(67,131),
+  X(3,67), X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163),
+  X(19,83), X(83,147), X(19,83), X(51,115), X(51,83), X(115,147), X(19,51),
+  X(83,115), X(19,35), X(51,67), X(83,99), X(115,131), X(147,163), X(3,19),
+  X(35,51), X(67,83), X(99,115), X(131,147), X(11,75), X(75,139), X(11,75),
+  X(43,107), X(107,171), X(43,107), X(11,43), X(75,107), X(139,171), X(27,91),
+  X(91,155), X(27,91), X(59,123), X(59,91), X(123,155), X(27,59), X(91,123),
+  X(27,43), X(59,75), X(91,107), X(123,139), X(155,171), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(139,155), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103), X(7,39),
+  X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119), X(55,87),
+  X(119,151), X(23,55), X(87,119), X(23,39), X(55,71), X(87,103), X(119,135),
+  X(151,167), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(15,79),
+  X(79,143), X(15,79), X(47,111), X(111,175), X(47,111), X(15,47), X(79,111),
+  X(143,175), X(31,95), X(95,159), X(31,95), X(63,127), X(63,95), X(127,159),
+  X(31,63), X(95,127), X(31,47), X(63,79), X(95,111), X(127,143), X(159,175),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105),
+  X(107,109), X(111,113), X(115,117), X(119,121), X(123,125), X(127,129),
+  X(131,133), X(135,137), X(139,141), X(143,145), X(147,149), X(151,153),
+  X(155,157), X(159,161), X(163,165), X(167,169), X(171,173), X(175,177), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(2,66), X(66,130), X(2,66), X(34,98), X(98,162), X(34,98),
+  X(2,34), X(66,98), X(130,162), X(18,82), X(82,146), X(18,82), X(50,114),
+  X(114,178), X(50,114), X(18,50), X(82,114), X(146,178), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(162,178), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(106,170), X(42,106), X(10,42), X(74,106), X(138,170), X(26,90),
+  X(90,154), X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122),
+  X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162), X(170,178),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(162,170), X(6,70), X(70,134), X(6,70),
+  X(38,102), X(102,166), X(38,102), X(6,38), X(70,102), X(134,166), X(22,86),
+  X(86,150), X(22,86), X(54,118), X(54,86), X(118,150), X(22,54), X(86,118),
+  X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(6,22), X(38,54),
+  X(70,86), X(102,118), X(134,150), X(14,78), X(78,142), X(14,78), X(46,110),
+  X(110,174), X(46,110), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158),
+  X(30,94), X(62,126), X(62,94), X(126,158), X(30,62), X(94,126), X(30,46),
+  X(62,78), X(94,110), X(126,142), X(158,174), X(14,30), X(46,62), X(78,94),
+  X(110,126), X(142,158), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174), X(6,10),
+  X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74),
+  X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(126,130),
+  X(134,138), X(142,146), X(150,154), X(158,162), X(166,170), X(174,178), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(4,68), X(68,132), X(4,68), X(36,100), X(100,164), X(36,100), X(4,36),
+  X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116), X(52,84),
+  X(116,148), X(20,52), X(84,116), X(20,36), X(52,68), X(84,100), X(116,132),
+  X(148,164), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(12,76),
+  X(76,140), X(12,76), X(44,108), X(108,172), X(44,108), X(12,44), X(76,108),
+  X(140,172), X(28,92), X(92,156), X(28,92), X(60,124), X(60,92), X(124,156),
+  X(28,60), X(92,124), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172),
+  X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(148,156), X(164,172), X(8,72), X(72,136), X(8,72), X(40,104), X(104,168),
+  X(40,104), X(8,40), X(72,104), X(136,168), X(24,88), X(88,152), X(24,88),
+  X(56,120), X(56,88), X(120,152), X(24,56), X(88,120), X(24,40), X(56,72),
+  X(88,104), X(120,136), X(152,168), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(16,80), X(80,144), X(16,80), X(48,112), X(112,176), X(48,112),
+  X(16,48), X(80,112), X(144,176), X(32,96), X(96,160), X(32,96), X(64,128),
+  X(64,96), X(128,160), X(32,64), X(96,128), X(32,48), X(64,80), X(96,112),
+  X(128,144), X(160,176), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(136,144), X(152,160), X(168,176), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(4,6), X(8,10),
+  X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42),
+  X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74),
+  X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102),
+  X(104,106), X(108,110), X(112,114), X(116,118), X(120,122), X(124,126),
+  X(128,130), X(132,134), X(136,138), X(140,142), X(144,146), X(148,150),
+  X(152,154), X(156,158), X(160,162), X(164,166), X(168,170), X(172,174),
+  X(176,178), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178)
+};
+M(179) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(57,89), X(121,153), X(25,57), X(89,121), X(25,41), X(57,73),
+  X(89,105), X(121,137), X(153,169), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165),
+  X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85),
+  X(53,117), X(53,85), X(117,149), X(21,53), X(85,117), X(21,37), X(53,69),
+  X(85,101), X(117,133), X(149,165), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(109,173), X(45,109),
+  X(13,45), X(77,109), X(141,173), X(29,93), X(93,157), X(29,93), X(61,125),
+  X(61,93), X(125,157), X(29,61), X(93,125), X(29,45), X(61,77), X(93,109),
+  X(125,141), X(157,173), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(5,9), X(13,17), X(21,25),
+  X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89),
+  X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137),
+  X(141,145), X(149,153), X(157,161), X(165,169), X(173,177), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(3,67), X(67,131),
+  X(3,67), X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163),
+  X(19,83), X(83,147), X(19,83), X(51,115), X(115,179), X(51,115), X(19,51),
+  X(83,115), X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(11,75), X(75,139), X(11,75), X(43,107), X(107,171), X(43,107),
+  X(11,43), X(75,107), X(139,171), X(27,91), X(91,155), X(27,91), X(59,123),
+  X(59,91), X(123,155), X(27,59), X(91,123), X(27,43), X(59,75), X(91,107),
+  X(123,139), X(155,171), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(107,115),
+  X(123,131), X(139,147), X(155,163), X(171,179), X(3,11), X(19,27), X(35,43),
+  X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155),
+  X(163,171), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103),
+  X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119),
+  X(55,87), X(119,151), X(23,55), X(87,119), X(23,39), X(55,71), X(87,103),
+  X(119,135), X(151,167), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151),
+  X(15,79), X(79,143), X(15,79), X(47,111), X(111,175), X(47,111), X(15,47),
+  X(79,111), X(143,175), X(31,95), X(95,159), X(31,95), X(63,127), X(63,95),
+  X(127,159), X(31,63), X(95,127), X(31,47), X(63,79), X(95,111), X(127,143),
+  X(159,175), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(167,175), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99),
+  X(103,107), X(111,115), X(119,123), X(127,131), X(135,139), X(143,147),
+  X(151,155), X(159,163), X(167,171), X(175,179), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(2,66), X(66,130), X(2,66), X(34,98), X(98,162),
+  X(34,98), X(2,34), X(66,98), X(130,162), X(18,82), X(82,146), X(18,82),
+  X(50,114), X(114,178), X(50,114), X(18,50), X(82,114), X(146,178), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(10,74), X(74,138),
+  X(10,74), X(42,106), X(106,170), X(42,106), X(10,42), X(74,106), X(138,170),
+  X(26,90), X(90,154), X(26,90), X(58,122), X(58,90), X(122,154), X(26,58),
+  X(90,122), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(10,18), X(26,34), X(42,50),
+  X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162),
+  X(170,178), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(146,154), X(162,170), X(6,70), X(70,134),
+  X(6,70), X(38,102), X(102,166), X(38,102), X(6,38), X(70,102), X(134,166),
+  X(22,86), X(86,150), X(22,86), X(54,118), X(54,86), X(118,150), X(22,54),
+  X(86,118), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(14,78), X(78,142), X(14,78),
+  X(46,110), X(110,174), X(46,110), X(14,46), X(78,110), X(142,174), X(30,94),
+  X(94,158), X(30,94), X(62,126), X(62,94), X(126,158), X(30,62), X(94,126),
+  X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(158,162), X(166,170),
+  X(174,178), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(154,158),
+  X(162,166), X(170,174), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164),
+  X(36,100), X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84),
+  X(52,116), X(52,84), X(116,148), X(20,52), X(84,116), X(20,36), X(52,68),
+  X(84,100), X(116,132), X(148,164), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(132,148), X(12,76), X(76,140), X(12,76), X(44,108), X(108,172), X(44,108),
+  X(12,44), X(76,108), X(140,172), X(28,92), X(92,156), X(28,92), X(60,124),
+  X(60,92), X(124,156), X(28,60), X(92,124), X(28,44), X(60,76), X(92,108),
+  X(124,140), X(156,172), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(8,72), X(72,136), X(8,72),
+  X(40,104), X(104,168), X(40,104), X(8,40), X(72,104), X(136,168), X(24,88),
+  X(88,152), X(24,88), X(56,120), X(56,88), X(120,152), X(24,56), X(88,120),
+  X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(8,24), X(40,56),
+  X(72,88), X(104,120), X(136,152), X(16,80), X(80,144), X(16,80), X(48,112),
+  X(112,176), X(48,112), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160),
+  X(32,96), X(64,128), X(64,96), X(128,160), X(32,64), X(96,128), X(32,48),
+  X(64,80), X(96,112), X(128,144), X(160,176), X(16,32), X(48,64), X(80,96),
+  X(112,128), X(144,160), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(132,136), X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(140,142), X(144,146),
+  X(148,150), X(152,154), X(156,158), X(160,162), X(164,166), X(168,170),
+  X(172,174), X(176,178), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153),
+  X(154,155), X(156,157), X(158,159), X(160,161), X(162,163), X(164,165),
+  X(166,167), X(168,169), X(170,171), X(172,173), X(174,175), X(176,177),
+  X(178,179), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178)
+};
+M(180) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(57,89), X(121,153), X(25,57), X(89,121), X(25,41), X(57,73),
+  X(89,105), X(121,137), X(153,169), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165),
+  X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85),
+  X(53,117), X(53,85), X(117,149), X(21,53), X(85,117), X(21,37), X(53,69),
+  X(85,101), X(117,133), X(149,165), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(133,149), X(13,77), X(77,141), X(13,77), X(45,109), X(109,173), X(45,109),
+  X(13,45), X(77,109), X(141,173), X(29,93), X(93,157), X(29,93), X(61,125),
+  X(61,93), X(125,157), X(29,61), X(93,125), X(29,45), X(61,77), X(93,109),
+  X(125,141), X(157,173), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(5,9), X(13,17), X(21,25),
+  X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89),
+  X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137),
+  X(141,145), X(149,153), X(157,161), X(165,169), X(173,177), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(3,67), X(67,131),
+  X(3,67), X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163),
+  X(19,83), X(83,147), X(19,83), X(51,115), X(115,179), X(51,115), X(19,51),
+  X(83,115), X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(11,75), X(75,139), X(11,75), X(43,107), X(107,171), X(43,107),
+  X(11,43), X(75,107), X(139,171), X(27,91), X(91,155), X(27,91), X(59,123),
+  X(59,91), X(123,155), X(27,59), X(91,123), X(27,43), X(59,75), X(91,107),
+  X(123,139), X(155,171), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(107,115),
+  X(123,131), X(139,147), X(155,163), X(171,179), X(3,11), X(19,27), X(35,43),
+  X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155),
+  X(163,171), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103),
+  X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119),
+  X(55,87), X(119,151), X(23,55), X(87,119), X(23,39), X(55,71), X(87,103),
+  X(119,135), X(151,167), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151),
+  X(15,79), X(79,143), X(15,79), X(47,111), X(111,175), X(47,111), X(15,47),
+  X(79,111), X(143,175), X(31,95), X(95,159), X(31,95), X(63,127), X(63,95),
+  X(127,159), X(31,63), X(95,127), X(31,47), X(63,79), X(95,111), X(127,143),
+  X(159,175), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(167,175), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99),
+  X(103,107), X(111,115), X(119,123), X(127,131), X(135,139), X(143,147),
+  X(151,155), X(159,163), X(167,171), X(175,179), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(2,66), X(66,130), X(2,66), X(34,98), X(98,162),
+  X(34,98), X(2,34), X(66,98), X(130,162), X(18,82), X(82,146), X(18,82),
+  X(50,114), X(114,178), X(50,114), X(18,50), X(82,114), X(146,178), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(10,74), X(74,138),
+  X(10,74), X(42,106), X(106,170), X(42,106), X(10,42), X(74,106), X(138,170),
+  X(26,90), X(90,154), X(26,90), X(58,122), X(58,90), X(122,154), X(26,58),
+  X(90,122), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(10,18), X(26,34), X(42,50),
+  X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162),
+  X(170,178), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(146,154), X(162,170), X(6,70), X(70,134),
+  X(6,70), X(38,102), X(102,166), X(38,102), X(6,38), X(70,102), X(134,166),
+  X(22,86), X(86,150), X(22,86), X(54,118), X(54,86), X(118,150), X(22,54),
+  X(86,118), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(14,78), X(78,142), X(14,78),
+  X(46,110), X(110,174), X(46,110), X(14,46), X(78,110), X(142,174), X(30,94),
+  X(94,158), X(30,94), X(62,126), X(62,94), X(126,158), X(30,62), X(94,126),
+  X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(158,162), X(166,170),
+  X(174,178), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(154,158),
+  X(162,166), X(170,174), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164),
+  X(36,100), X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84),
+  X(52,116), X(116,180), X(52,116), X(20,52), X(84,116), X(148,180), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(132,148), X(164,180), X(12,76), X(76,140),
+  X(12,76), X(44,108), X(108,172), X(44,108), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(60,92), X(124,156), X(28,60),
+  X(92,124), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172), X(12,28),
+  X(44,60), X(76,92), X(108,124), X(140,156), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164),
+  X(172,180), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(132,140), X(148,156), X(164,172), X(8,72), X(72,136),
+  X(8,72), X(40,104), X(104,168), X(40,104), X(8,40), X(72,104), X(136,168),
+  X(24,88), X(88,152), X(24,88), X(56,120), X(56,88), X(120,152), X(24,56),
+  X(88,120), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(8,24),
+  X(40,56), X(72,88), X(104,120), X(136,152), X(16,80), X(80,144), X(16,80),
+  X(48,112), X(112,176), X(48,112), X(16,48), X(80,112), X(144,176), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(64,96), X(128,160), X(32,64), X(96,128),
+  X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68),
+  X(72,76), X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124),
+  X(128,132), X(136,140), X(144,148), X(152,156), X(160,164), X(168,172),
+  X(176,180), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180)
+};
+M(181) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(57,89), X(121,153), X(25,57), X(89,121), X(25,41), X(57,73),
+  X(89,105), X(121,137), X(153,169), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165),
+  X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85),
+  X(53,117), X(117,181), X(53,117), X(21,53), X(85,117), X(149,181), X(5,21),
+  X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77), X(77,141),
+  X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109), X(141,173),
+  X(29,93), X(93,157), X(29,93), X(61,125), X(61,93), X(125,157), X(29,61),
+  X(93,125), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(13,21), X(29,37), X(45,53),
+  X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149), X(157,165),
+  X(173,181), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(101,109), X(117,125), X(133,141), X(149,157), X(165,173), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(3,67), X(67,131), X(3,67), X(35,99), X(99,163), X(35,99), X(3,35), X(67,99),
+  X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179), X(51,115),
+  X(19,51), X(83,115), X(147,179), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(163,179), X(11,75), X(75,139), X(11,75), X(43,107), X(107,171),
+  X(43,107), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(27,43), X(59,75),
+  X(91,107), X(123,139), X(155,171), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(155,163), X(171,179), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139),
+  X(147,155), X(163,171), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167),
+  X(39,103), X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87),
+  X(55,119), X(55,87), X(119,151), X(23,55), X(87,119), X(23,39), X(55,71),
+  X(87,103), X(119,135), X(151,167), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(15,79), X(79,143), X(15,79), X(47,111), X(111,175), X(47,111),
+  X(15,47), X(79,111), X(143,175), X(31,95), X(95,159), X(31,95), X(63,127),
+  X(63,95), X(127,159), X(31,63), X(95,127), X(31,47), X(63,79), X(95,111),
+  X(127,143), X(159,175), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(175,179), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41),
+  X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73),
+  X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101),
+  X(103,105), X(107,109), X(111,113), X(115,117), X(119,121), X(123,125),
+  X(127,129), X(131,133), X(135,137), X(139,141), X(143,145), X(147,149),
+  X(151,153), X(155,157), X(159,161), X(163,165), X(167,169), X(171,173),
+  X(175,177), X(179,181), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(98,162), X(34,98), X(2,34), X(66,98), X(130,162), X(18,82),
+  X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50), X(82,114),
+  X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(10,74), X(74,138), X(10,74), X(42,106), X(106,170), X(42,106), X(10,42),
+  X(74,106), X(138,170), X(26,90), X(90,154), X(26,90), X(58,122), X(58,90),
+  X(122,154), X(26,58), X(90,122), X(26,42), X(58,74), X(90,106), X(122,138),
+  X(154,170), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(10,18),
+  X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114), X(122,130),
+  X(138,146), X(154,162), X(170,178), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(6,70), X(70,134), X(6,70), X(38,102), X(102,166), X(38,102), X(6,38),
+  X(70,102), X(134,166), X(22,86), X(86,150), X(22,86), X(54,118), X(54,86),
+  X(118,150), X(22,54), X(86,118), X(22,38), X(54,70), X(86,102), X(118,134),
+  X(150,166), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(14,78),
+  X(78,142), X(14,78), X(46,110), X(110,174), X(46,110), X(14,46), X(78,110),
+  X(142,174), X(30,94), X(94,158), X(30,94), X(62,126), X(62,94), X(126,158),
+  X(30,62), X(94,126), X(30,46), X(62,78), X(94,110), X(126,142), X(158,174),
+  X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(166,174), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42),
+  X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(158,162), X(166,170), X(174,178), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(4,68), X(68,132),
+  X(4,68), X(36,100), X(100,164), X(36,100), X(4,36), X(68,100), X(132,164),
+  X(20,84), X(84,148), X(20,84), X(52,116), X(116,180), X(52,116), X(20,52),
+  X(84,116), X(148,180), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(164,180), X(12,76), X(76,140), X(12,76), X(44,108), X(108,172), X(44,108),
+  X(12,44), X(76,108), X(140,172), X(28,92), X(92,156), X(28,92), X(60,124),
+  X(60,92), X(124,156), X(28,60), X(92,124), X(28,44), X(60,76), X(92,108),
+  X(124,140), X(156,172), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(140,148), X(156,164), X(172,180), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156),
+  X(164,172), X(8,72), X(72,136), X(8,72), X(40,104), X(104,168), X(40,104),
+  X(8,40), X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120),
+  X(56,88), X(120,152), X(24,56), X(88,120), X(24,40), X(56,72), X(88,104),
+  X(120,136), X(152,168), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152),
+  X(16,80), X(80,144), X(16,80), X(48,112), X(112,176), X(48,112), X(16,48),
+  X(80,112), X(144,176), X(32,96), X(96,160), X(32,96), X(64,128), X(64,96),
+  X(128,160), X(32,64), X(96,128), X(32,48), X(64,80), X(96,112), X(128,144),
+  X(160,176), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(152,160), X(168,176), X(8,12), X(16,20), X(24,28), X(32,36),
+  X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(168,172), X(176,180), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(178,180), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(142,143),
+  X(144,145), X(146,147), X(148,149), X(150,151), X(152,153), X(154,155),
+  X(156,157), X(158,159), X(160,161), X(162,163), X(164,165), X(166,167),
+  X(168,169), X(170,171), X(172,173), X(174,175), X(176,177), X(178,179),
+  X(180,181), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180)
+};
+M(182) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(57,89), X(121,153), X(25,57), X(89,121), X(25,41), X(57,73),
+  X(89,105), X(121,137), X(153,169), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165),
+  X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85),
+  X(53,117), X(117,181), X(53,117), X(21,53), X(85,117), X(149,181), X(5,21),
+  X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77), X(77,141),
+  X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109), X(141,173),
+  X(29,93), X(93,157), X(29,93), X(61,125), X(61,93), X(125,157), X(29,61),
+  X(93,125), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(13,21), X(29,37), X(45,53),
+  X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149), X(157,165),
+  X(173,181), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(101,109), X(117,125), X(133,141), X(149,157), X(165,173), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(3,67), X(67,131), X(3,67), X(35,99), X(99,163), X(35,99), X(3,35), X(67,99),
+  X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179), X(51,115),
+  X(19,51), X(83,115), X(147,179), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(163,179), X(11,75), X(75,139), X(11,75), X(43,107), X(107,171),
+  X(43,107), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(27,43), X(59,75),
+  X(91,107), X(123,139), X(155,171), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(155,163), X(171,179), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139),
+  X(147,155), X(163,171), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167),
+  X(39,103), X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87),
+  X(55,119), X(55,87), X(119,151), X(23,55), X(87,119), X(23,39), X(55,71),
+  X(87,103), X(119,135), X(151,167), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(15,79), X(79,143), X(15,79), X(47,111), X(111,175), X(47,111),
+  X(15,47), X(79,111), X(143,175), X(31,95), X(95,159), X(31,95), X(63,127),
+  X(63,95), X(127,159), X(31,63), X(95,127), X(31,47), X(63,79), X(95,111),
+  X(127,143), X(159,175), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(175,179), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41),
+  X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73),
+  X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101),
+  X(103,105), X(107,109), X(111,113), X(115,117), X(119,121), X(123,125),
+  X(127,129), X(131,133), X(135,137), X(139,141), X(143,145), X(147,149),
+  X(151,153), X(155,157), X(159,161), X(163,165), X(167,169), X(171,173),
+  X(175,177), X(179,181), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(98,162), X(34,98), X(2,34), X(66,98), X(130,162), X(18,82),
+  X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50), X(82,114),
+  X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(10,74), X(74,138), X(10,74), X(42,106), X(106,170), X(42,106), X(10,42),
+  X(74,106), X(138,170), X(26,90), X(90,154), X(26,90), X(58,122), X(58,90),
+  X(122,154), X(26,58), X(90,122), X(26,42), X(58,74), X(90,106), X(122,138),
+  X(154,170), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(10,18),
+  X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114), X(122,130),
+  X(138,146), X(154,162), X(170,178), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(6,70), X(70,134), X(6,70), X(38,102), X(102,166), X(38,102), X(6,38),
+  X(70,102), X(134,166), X(22,86), X(86,150), X(22,86), X(54,118), X(118,182),
+  X(54,118), X(22,54), X(86,118), X(150,182), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(166,182), X(14,78), X(78,142), X(14,78), X(46,110),
+  X(110,174), X(46,110), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158),
+  X(30,94), X(62,126), X(62,94), X(126,158), X(30,62), X(94,126), X(30,46),
+  X(62,78), X(94,110), X(126,142), X(158,174), X(14,30), X(46,62), X(78,94),
+  X(110,126), X(142,158), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86),
+  X(94,102), X(110,118), X(126,134), X(142,150), X(158,166), X(174,182), X(6,14),
+  X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126),
+  X(134,142), X(150,158), X(166,174), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(4,68), X(68,132),
+  X(4,68), X(36,100), X(100,164), X(36,100), X(4,36), X(68,100), X(132,164),
+  X(20,84), X(84,148), X(20,84), X(52,116), X(116,180), X(52,116), X(20,52),
+  X(84,116), X(148,180), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(164,180), X(12,76), X(76,140), X(12,76), X(44,108), X(108,172), X(44,108),
+  X(12,44), X(76,108), X(140,172), X(28,92), X(92,156), X(28,92), X(60,124),
+  X(60,92), X(124,156), X(28,60), X(92,124), X(28,44), X(60,76), X(92,108),
+  X(124,140), X(156,172), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(140,148), X(156,164), X(172,180), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156),
+  X(164,172), X(8,72), X(72,136), X(8,72), X(40,104), X(104,168), X(40,104),
+  X(8,40), X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120),
+  X(56,88), X(120,152), X(24,56), X(88,120), X(24,40), X(56,72), X(88,104),
+  X(120,136), X(152,168), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152),
+  X(16,80), X(80,144), X(16,80), X(48,112), X(112,176), X(48,112), X(16,48),
+  X(80,112), X(144,176), X(32,96), X(96,160), X(32,96), X(64,128), X(64,96),
+  X(128,160), X(32,64), X(96,128), X(32,48), X(64,80), X(96,112), X(128,144),
+  X(160,176), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(152,160), X(168,176), X(8,12), X(16,20), X(24,28), X(32,36),
+  X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(168,172), X(176,180), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(4,6), X(8,10),
+  X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42),
+  X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74),
+  X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102),
+  X(104,106), X(108,110), X(112,114), X(116,118), X(120,122), X(124,126),
+  X(128,130), X(132,134), X(136,138), X(140,142), X(144,146), X(148,150),
+  X(152,154), X(156,158), X(160,162), X(164,166), X(168,170), X(172,174),
+  X(176,178), X(180,182), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182)
+};
+M(183) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(57,89), X(121,153), X(25,57), X(89,121), X(25,41), X(57,73),
+  X(89,105), X(121,137), X(153,169), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165),
+  X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85),
+  X(53,117), X(117,181), X(53,117), X(21,53), X(85,117), X(149,181), X(5,21),
+  X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77), X(77,141),
+  X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109), X(141,173),
+  X(29,93), X(93,157), X(29,93), X(61,125), X(61,93), X(125,157), X(29,61),
+  X(93,125), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(13,21), X(29,37), X(45,53),
+  X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149), X(157,165),
+  X(173,181), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(101,109), X(117,125), X(133,141), X(149,157), X(165,173), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(3,67), X(67,131), X(3,67), X(35,99), X(99,163), X(35,99), X(3,35), X(67,99),
+  X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179), X(51,115),
+  X(19,51), X(83,115), X(147,179), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(163,179), X(11,75), X(75,139), X(11,75), X(43,107), X(107,171),
+  X(43,107), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(27,43), X(59,75),
+  X(91,107), X(123,139), X(155,171), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(155,163), X(171,179), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139),
+  X(147,155), X(163,171), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167),
+  X(39,103), X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87),
+  X(55,119), X(119,183), X(55,119), X(23,55), X(87,119), X(151,183), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(15,79), X(79,143),
+  X(15,79), X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175),
+  X(31,95), X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63),
+  X(95,127), X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(159,167),
+  X(175,183), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(167,175), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(2,66), X(66,130), X(2,66), X(34,98),
+  X(98,162), X(34,98), X(2,34), X(66,98), X(130,162), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(114,178), X(50,114), X(18,50), X(82,114), X(146,178),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(10,74),
+  X(74,138), X(10,74), X(42,106), X(106,170), X(42,106), X(10,42), X(74,106),
+  X(138,170), X(26,90), X(90,154), X(26,90), X(58,122), X(58,90), X(122,154),
+  X(26,58), X(90,122), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170),
+  X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(10,18), X(26,34),
+  X(42,50), X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146),
+  X(154,162), X(170,178), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170), X(6,70),
+  X(70,134), X(6,70), X(38,102), X(102,166), X(38,102), X(6,38), X(70,102),
+  X(134,166), X(22,86), X(86,150), X(22,86), X(54,118), X(118,182), X(54,118),
+  X(22,54), X(86,118), X(150,182), X(6,22), X(38,54), X(70,86), X(102,118),
+  X(134,150), X(166,182), X(14,78), X(78,142), X(14,78), X(46,110), X(110,174),
+  X(46,110), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94),
+  X(62,126), X(62,94), X(126,158), X(30,62), X(94,126), X(30,46), X(62,78),
+  X(94,110), X(126,142), X(158,174), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(142,158), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102),
+  X(110,118), X(126,134), X(142,150), X(158,166), X(174,182), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(166,174), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(4,68), X(68,132),
+  X(4,68), X(36,100), X(100,164), X(36,100), X(4,36), X(68,100), X(132,164),
+  X(20,84), X(84,148), X(20,84), X(52,116), X(116,180), X(52,116), X(20,52),
+  X(84,116), X(148,180), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(164,180), X(12,76), X(76,140), X(12,76), X(44,108), X(108,172), X(44,108),
+  X(12,44), X(76,108), X(140,172), X(28,92), X(92,156), X(28,92), X(60,124),
+  X(60,92), X(124,156), X(28,60), X(92,124), X(28,44), X(60,76), X(92,108),
+  X(124,140), X(156,172), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(140,148), X(156,164), X(172,180), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156),
+  X(164,172), X(8,72), X(72,136), X(8,72), X(40,104), X(104,168), X(40,104),
+  X(8,40), X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120),
+  X(56,88), X(120,152), X(24,56), X(88,120), X(24,40), X(56,72), X(88,104),
+  X(120,136), X(152,168), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152),
+  X(16,80), X(80,144), X(16,80), X(48,112), X(112,176), X(48,112), X(16,48),
+  X(80,112), X(144,176), X(32,96), X(96,160), X(32,96), X(64,128), X(64,96),
+  X(128,160), X(32,64), X(96,128), X(32,48), X(64,80), X(96,112), X(128,144),
+  X(160,176), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(152,160), X(168,176), X(8,12), X(16,20), X(24,28), X(32,36),
+  X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(168,172), X(176,180), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(4,6), X(8,10),
+  X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42),
+  X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74),
+  X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102),
+  X(104,106), X(108,110), X(112,114), X(116,118), X(120,122), X(124,126),
+  X(128,130), X(132,134), X(136,138), X(140,142), X(144,146), X(148,150),
+  X(152,154), X(156,158), X(160,162), X(164,166), X(168,170), X(172,174),
+  X(176,178), X(180,182), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(112,113), X(114,115),
+  X(116,117), X(118,119), X(120,121), X(122,123), X(124,125), X(126,127),
+  X(128,129), X(130,131), X(132,133), X(134,135), X(136,137), X(138,139),
+  X(140,141), X(142,143), X(144,145), X(146,147), X(148,149), X(150,151),
+  X(152,153), X(154,155), X(156,157), X(158,159), X(160,161), X(162,163),
+  X(164,165), X(166,167), X(168,169), X(170,171), X(172,173), X(174,175),
+  X(176,177), X(178,179), X(180,181), X(182,183), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182)
+};
+M(184) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(57,89), X(121,153), X(25,57), X(89,121), X(25,41), X(57,73),
+  X(89,105), X(121,137), X(153,169), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(5,69), X(69,133), X(5,69), X(37,101), X(101,165),
+  X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85),
+  X(53,117), X(117,181), X(53,117), X(21,53), X(85,117), X(149,181), X(5,21),
+  X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77), X(77,141),
+  X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109), X(141,173),
+  X(29,93), X(93,157), X(29,93), X(61,125), X(61,93), X(125,157), X(29,61),
+  X(93,125), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(13,21), X(29,37), X(45,53),
+  X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149), X(157,165),
+  X(173,181), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(101,109), X(117,125), X(133,141), X(149,157), X(165,173), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(3,67), X(67,131), X(3,67), X(35,99), X(99,163), X(35,99), X(3,35), X(67,99),
+  X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179), X(51,115),
+  X(19,51), X(83,115), X(147,179), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(163,179), X(11,75), X(75,139), X(11,75), X(43,107), X(107,171),
+  X(43,107), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(59,91), X(123,155), X(27,59), X(91,123), X(27,43), X(59,75),
+  X(91,107), X(123,139), X(155,171), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(155,163), X(171,179), X(3,11), X(19,27),
+  X(35,43), X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139),
+  X(147,155), X(163,171), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167),
+  X(39,103), X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87),
+  X(55,119), X(119,183), X(55,119), X(23,55), X(87,119), X(151,183), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(15,79), X(79,143),
+  X(15,79), X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175),
+  X(31,95), X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63),
+  X(95,127), X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(159,167),
+  X(175,183), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(167,175), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(2,66), X(66,130), X(2,66), X(34,98),
+  X(98,162), X(34,98), X(2,34), X(66,98), X(130,162), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(114,178), X(50,114), X(18,50), X(82,114), X(146,178),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(10,74),
+  X(74,138), X(10,74), X(42,106), X(106,170), X(42,106), X(10,42), X(74,106),
+  X(138,170), X(26,90), X(90,154), X(26,90), X(58,122), X(58,90), X(122,154),
+  X(26,58), X(90,122), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170),
+  X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(10,18), X(26,34),
+  X(42,50), X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146),
+  X(154,162), X(170,178), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170), X(6,70),
+  X(70,134), X(6,70), X(38,102), X(102,166), X(38,102), X(6,38), X(70,102),
+  X(134,166), X(22,86), X(86,150), X(22,86), X(54,118), X(118,182), X(54,118),
+  X(22,54), X(86,118), X(150,182), X(6,22), X(38,54), X(70,86), X(102,118),
+  X(134,150), X(166,182), X(14,78), X(78,142), X(14,78), X(46,110), X(110,174),
+  X(46,110), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94),
+  X(62,126), X(62,94), X(126,158), X(30,62), X(94,126), X(30,46), X(62,78),
+  X(94,110), X(126,142), X(158,174), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(142,158), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102),
+  X(110,118), X(126,134), X(142,150), X(158,166), X(174,182), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(166,174), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(4,68), X(68,132),
+  X(4,68), X(36,100), X(100,164), X(36,100), X(4,36), X(68,100), X(132,164),
+  X(20,84), X(84,148), X(20,84), X(52,116), X(116,180), X(52,116), X(20,52),
+  X(84,116), X(148,180), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(164,180), X(12,76), X(76,140), X(12,76), X(44,108), X(108,172), X(44,108),
+  X(12,44), X(76,108), X(140,172), X(28,92), X(92,156), X(28,92), X(60,124),
+  X(60,92), X(124,156), X(28,60), X(92,124), X(28,44), X(60,76), X(92,108),
+  X(124,140), X(156,172), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(140,148), X(156,164), X(172,180), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156),
+  X(164,172), X(8,72), X(72,136), X(8,72), X(40,104), X(104,168), X(40,104),
+  X(8,40), X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120),
+  X(120,184), X(56,120), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56),
+  X(72,88), X(104,120), X(136,152), X(168,184), X(16,80), X(80,144), X(16,80),
+  X(48,112), X(112,176), X(48,112), X(16,48), X(80,112), X(144,176), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(64,96), X(128,160), X(32,64), X(96,128),
+  X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(16,24), X(32,40), X(48,56), X(64,72),
+  X(80,88), X(96,104), X(112,120), X(128,136), X(144,152), X(160,168),
+  X(176,184), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(152,160), X(168,176), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(150,152), X(154,156), X(158,160), X(162,164), X(166,168),
+  X(170,172), X(174,176), X(178,180), X(182,184), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184)
+};
+M(185) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(5,69), X(69,133), X(5,69), X(37,101),
+  X(101,165), X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149),
+  X(21,85), X(53,117), X(117,181), X(53,117), X(21,53), X(85,117), X(149,181),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77),
+  X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109),
+  X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(61,93), X(125,157),
+  X(29,61), X(93,125), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173),
+  X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(165,173), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147),
+  X(19,83), X(51,115), X(115,179), X(51,115), X(19,51), X(83,115), X(147,179),
+  X(3,19), X(35,51), X(67,83), X(99,115), X(131,147), X(163,179), X(11,75),
+  X(75,139), X(11,75), X(43,107), X(107,171), X(43,107), X(11,43), X(75,107),
+  X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(59,91), X(123,155),
+  X(27,59), X(91,123), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171),
+  X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(11,19), X(27,35),
+  X(43,51), X(59,67), X(75,83), X(91,99), X(107,115), X(123,131), X(139,147),
+  X(155,163), X(171,179), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(103,167), X(39,103), X(7,39), X(71,103),
+  X(135,167), X(23,87), X(87,151), X(23,87), X(55,119), X(119,183), X(55,119),
+  X(23,55), X(87,119), X(151,183), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(167,183), X(15,79), X(79,143), X(15,79), X(47,111), X(111,175),
+  X(47,111), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159), X(31,95),
+  X(63,127), X(63,95), X(127,159), X(31,63), X(95,127), X(31,47), X(63,79),
+  X(95,111), X(127,143), X(159,175), X(15,31), X(47,63), X(79,95), X(111,127),
+  X(143,159), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103),
+  X(111,119), X(127,135), X(143,151), X(159,167), X(175,183), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41),
+  X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73),
+  X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101),
+  X(103,105), X(107,109), X(111,113), X(115,117), X(119,121), X(123,125),
+  X(127,129), X(131,133), X(135,137), X(139,141), X(143,145), X(147,149),
+  X(151,153), X(155,157), X(159,161), X(163,165), X(167,169), X(171,173),
+  X(175,177), X(179,181), X(183,185), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(2,66), X(66,130), X(2,66), X(34,98), X(98,162), X(34,98),
+  X(2,34), X(66,98), X(130,162), X(18,82), X(82,146), X(18,82), X(50,114),
+  X(114,178), X(50,114), X(18,50), X(82,114), X(146,178), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(162,178), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(106,170), X(42,106), X(10,42), X(74,106), X(138,170), X(26,90),
+  X(90,154), X(26,90), X(58,122), X(58,90), X(122,154), X(26,58), X(90,122),
+  X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162), X(170,178),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(162,170), X(6,70), X(70,134), X(6,70),
+  X(38,102), X(102,166), X(38,102), X(6,38), X(70,102), X(134,166), X(22,86),
+  X(86,150), X(22,86), X(54,118), X(118,182), X(54,118), X(22,54), X(86,118),
+  X(150,182), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182),
+  X(14,78), X(78,142), X(14,78), X(46,110), X(110,174), X(46,110), X(14,46),
+  X(78,110), X(142,174), X(30,94), X(94,158), X(30,94), X(62,126), X(62,94),
+  X(126,158), X(30,62), X(94,126), X(30,46), X(62,78), X(94,110), X(126,142),
+  X(158,174), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134),
+  X(142,150), X(158,166), X(174,182), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62),
+  X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118),
+  X(122,126), X(130,134), X(138,142), X(146,150), X(154,158), X(162,166),
+  X(170,174), X(178,182), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164),
+  X(36,100), X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84),
+  X(52,116), X(116,180), X(52,116), X(20,52), X(84,116), X(148,180), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(132,148), X(164,180), X(12,76), X(76,140),
+  X(12,76), X(44,108), X(108,172), X(44,108), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(60,92), X(124,156), X(28,60),
+  X(92,124), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172), X(12,28),
+  X(44,60), X(76,92), X(108,124), X(140,156), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164),
+  X(172,180), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(132,140), X(148,156), X(164,172), X(8,72), X(72,136),
+  X(8,72), X(40,104), X(104,168), X(40,104), X(8,40), X(72,104), X(136,168),
+  X(24,88), X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56),
+  X(88,120), X(152,184), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152),
+  X(168,184), X(16,80), X(80,144), X(16,80), X(48,112), X(112,176), X(48,112),
+  X(16,48), X(80,112), X(144,176), X(32,96), X(96,160), X(32,96), X(64,128),
+  X(64,96), X(128,160), X(32,64), X(96,128), X(32,48), X(64,80), X(96,112),
+  X(128,144), X(160,176), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160),
+  X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120),
+  X(128,136), X(144,152), X(160,168), X(176,184), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160),
+  X(168,176), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(180,184), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(110,112), X(114,116), X(118,120), X(122,124), X(126,128), X(130,132),
+  X(134,136), X(138,140), X(142,144), X(146,148), X(150,152), X(154,156),
+  X(158,160), X(162,164), X(166,168), X(170,172), X(174,176), X(178,180),
+  X(182,184), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(132,133),
+  X(134,135), X(136,137), X(138,139), X(140,141), X(142,143), X(144,145),
+  X(146,147), X(148,149), X(150,151), X(152,153), X(154,155), X(156,157),
+  X(158,159), X(160,161), X(162,163), X(164,165), X(166,167), X(168,169),
+  X(170,171), X(172,173), X(174,175), X(176,177), X(178,179), X(180,181),
+  X(182,183), X(184,185), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184)
+};
+M(186) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(5,69), X(69,133), X(5,69), X(37,101),
+  X(101,165), X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149),
+  X(21,85), X(53,117), X(117,181), X(53,117), X(21,53), X(85,117), X(149,181),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77),
+  X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109),
+  X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(61,93), X(125,157),
+  X(29,61), X(93,125), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173),
+  X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(165,173), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147),
+  X(19,83), X(51,115), X(115,179), X(51,115), X(19,51), X(83,115), X(147,179),
+  X(3,19), X(35,51), X(67,83), X(99,115), X(131,147), X(163,179), X(11,75),
+  X(75,139), X(11,75), X(43,107), X(107,171), X(43,107), X(11,43), X(75,107),
+  X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(59,91), X(123,155),
+  X(27,59), X(91,123), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171),
+  X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(11,19), X(27,35),
+  X(43,51), X(59,67), X(75,83), X(91,99), X(107,115), X(123,131), X(139,147),
+  X(155,163), X(171,179), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(103,167), X(39,103), X(7,39), X(71,103),
+  X(135,167), X(23,87), X(87,151), X(23,87), X(55,119), X(119,183), X(55,119),
+  X(23,55), X(87,119), X(151,183), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(167,183), X(15,79), X(79,143), X(15,79), X(47,111), X(111,175),
+  X(47,111), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159), X(31,95),
+  X(63,127), X(63,95), X(127,159), X(31,63), X(95,127), X(31,47), X(63,79),
+  X(95,111), X(127,143), X(159,175), X(15,31), X(47,63), X(79,95), X(111,127),
+  X(143,159), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103),
+  X(111,119), X(127,135), X(143,151), X(159,167), X(175,183), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41),
+  X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73),
+  X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101),
+  X(103,105), X(107,109), X(111,113), X(115,117), X(119,121), X(123,125),
+  X(127,129), X(131,133), X(135,137), X(139,141), X(143,145), X(147,149),
+  X(151,153), X(155,157), X(159,161), X(163,165), X(167,169), X(171,173),
+  X(175,177), X(179,181), X(183,185), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(2,66), X(66,130), X(2,66), X(34,98), X(98,162), X(34,98),
+  X(2,34), X(66,98), X(130,162), X(18,82), X(82,146), X(18,82), X(50,114),
+  X(114,178), X(50,114), X(18,50), X(82,114), X(146,178), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(162,178), X(10,74), X(74,138), X(10,74),
+  X(42,106), X(106,170), X(42,106), X(10,42), X(74,106), X(138,170), X(26,90),
+  X(90,154), X(26,90), X(58,122), X(122,186), X(58,122), X(26,58), X(90,122),
+  X(154,186), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(170,186),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(162,170), X(178,186), X(6,70), X(70,134),
+  X(6,70), X(38,102), X(102,166), X(38,102), X(6,38), X(70,102), X(134,166),
+  X(22,86), X(86,150), X(22,86), X(54,118), X(118,182), X(54,118), X(22,54),
+  X(86,118), X(150,182), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(166,182), X(14,78), X(78,142), X(14,78), X(46,110), X(110,174), X(46,110),
+  X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94), X(62,126),
+  X(62,94), X(126,158), X(30,62), X(94,126), X(30,46), X(62,78), X(94,110),
+  X(126,142), X(158,174), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158),
+  X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118),
+  X(126,134), X(142,150), X(158,166), X(174,182), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(166,174), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50),
+  X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98), X(102,106),
+  X(110,114), X(118,122), X(126,130), X(134,138), X(142,146), X(150,154),
+  X(158,162), X(166,170), X(174,178), X(182,186), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(4,68), X(68,132), X(4,68), X(36,100), X(100,164), X(36,100), X(4,36),
+  X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116), X(116,180),
+  X(52,116), X(20,52), X(84,116), X(148,180), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(164,180), X(12,76), X(76,140), X(12,76), X(44,108),
+  X(108,172), X(44,108), X(12,44), X(76,108), X(140,172), X(28,92), X(92,156),
+  X(28,92), X(60,124), X(60,92), X(124,156), X(28,60), X(92,124), X(28,44),
+  X(60,76), X(92,108), X(124,140), X(156,172), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84),
+  X(92,100), X(108,116), X(124,132), X(140,148), X(156,164), X(172,180), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124),
+  X(132,140), X(148,156), X(164,172), X(8,72), X(72,136), X(8,72), X(40,104),
+  X(104,168), X(40,104), X(8,40), X(72,104), X(136,168), X(24,88), X(88,152),
+  X(24,88), X(56,120), X(120,184), X(56,120), X(24,56), X(88,120), X(152,184),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(16,80),
+  X(80,144), X(16,80), X(48,112), X(112,176), X(48,112), X(16,48), X(80,112),
+  X(144,176), X(32,96), X(96,160), X(32,96), X(64,128), X(64,96), X(128,160),
+  X(32,64), X(96,128), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152),
+  X(160,168), X(176,184), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(132,136), X(140,144), X(148,152), X(156,160), X(164,168), X(172,176),
+  X(180,184), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30),
+  X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62),
+  X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94),
+  X(96,98), X(100,102), X(104,106), X(108,110), X(112,114), X(116,118),
+  X(120,122), X(124,126), X(128,130), X(132,134), X(136,138), X(140,142),
+  X(144,146), X(148,150), X(152,154), X(156,158), X(160,162), X(164,166),
+  X(168,170), X(172,174), X(176,178), X(180,182), X(184,186), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(178,180), X(182,184), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186)
+};
+M(187) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(5,69), X(69,133), X(5,69), X(37,101),
+  X(101,165), X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149),
+  X(21,85), X(53,117), X(117,181), X(53,117), X(21,53), X(85,117), X(149,181),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77),
+  X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109),
+  X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(61,93), X(125,157),
+  X(29,61), X(93,125), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173),
+  X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(165,173), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147),
+  X(19,83), X(51,115), X(115,179), X(51,115), X(19,51), X(83,115), X(147,179),
+  X(3,19), X(35,51), X(67,83), X(99,115), X(131,147), X(163,179), X(11,75),
+  X(75,139), X(11,75), X(43,107), X(107,171), X(43,107), X(11,43), X(75,107),
+  X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123),
+  X(27,59), X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(171,187), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103),
+  X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119),
+  X(119,183), X(55,119), X(23,55), X(87,119), X(151,183), X(7,23), X(39,55),
+  X(71,87), X(103,119), X(135,151), X(167,183), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63), X(95,127),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(15,23), X(31,39), X(47,55), X(63,71),
+  X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(159,167),
+  X(175,183), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(167,175), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(175,179), X(183,187), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27),
+  X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59),
+  X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91),
+  X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(117,119),
+  X(121,123), X(125,127), X(129,131), X(133,135), X(137,139), X(141,143),
+  X(145,147), X(149,151), X(153,155), X(157,159), X(161,163), X(165,167),
+  X(169,171), X(173,175), X(177,179), X(181,183), X(185,187), X(2,66), X(66,130),
+  X(2,66), X(34,98), X(98,162), X(34,98), X(2,34), X(66,98), X(130,162),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50),
+  X(82,114), X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146),
+  X(162,178), X(10,74), X(74,138), X(10,74), X(42,106), X(106,170), X(42,106),
+  X(10,42), X(74,106), X(138,170), X(26,90), X(90,154), X(26,90), X(58,122),
+  X(122,186), X(58,122), X(26,58), X(90,122), X(154,186), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(170,186), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(162,170), X(178,186), X(6,70), X(70,134), X(6,70), X(38,102), X(102,166),
+  X(38,102), X(6,38), X(70,102), X(134,166), X(22,86), X(86,150), X(22,86),
+  X(54,118), X(118,182), X(54,118), X(22,54), X(86,118), X(150,182), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(14,78), X(78,142),
+  X(14,78), X(46,110), X(110,174), X(46,110), X(14,46), X(78,110), X(142,174),
+  X(30,94), X(94,158), X(30,94), X(62,126), X(62,94), X(126,158), X(30,62),
+  X(94,126), X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(142,158), X(14,22), X(30,38), X(46,54),
+  X(62,70), X(78,86), X(94,102), X(110,118), X(126,134), X(142,150), X(158,166),
+  X(174,182), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(134,142), X(150,158), X(166,174), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(126,130), X(134,138),
+  X(142,146), X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164), X(36,100),
+  X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(116,180), X(52,116), X(20,52), X(84,116), X(148,180), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(164,180), X(12,76), X(76,140), X(12,76),
+  X(44,108), X(108,172), X(44,108), X(12,44), X(76,108), X(140,172), X(28,92),
+  X(92,156), X(28,92), X(60,124), X(60,92), X(124,156), X(28,60), X(92,124),
+  X(28,44), X(60,76), X(92,108), X(124,140), X(156,172), X(12,28), X(44,60),
+  X(76,92), X(108,124), X(140,156), X(12,20), X(28,36), X(44,52), X(60,68),
+  X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164),
+  X(172,180), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(132,140), X(148,156), X(164,172), X(8,72), X(72,136),
+  X(8,72), X(40,104), X(104,168), X(40,104), X(8,40), X(72,104), X(136,168),
+  X(24,88), X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56),
+  X(88,120), X(152,184), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152),
+  X(168,184), X(16,80), X(80,144), X(16,80), X(48,112), X(112,176), X(48,112),
+  X(16,48), X(80,112), X(144,176), X(32,96), X(96,160), X(32,96), X(64,128),
+  X(64,96), X(128,160), X(32,64), X(96,128), X(32,48), X(64,80), X(96,112),
+  X(128,144), X(160,176), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160),
+  X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120),
+  X(128,136), X(144,152), X(160,168), X(176,184), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160),
+  X(168,176), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(180,184), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82),
+  X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110),
+  X(112,114), X(116,118), X(120,122), X(124,126), X(128,130), X(132,134),
+  X(136,138), X(140,142), X(144,146), X(148,150), X(152,154), X(156,158),
+  X(160,162), X(164,166), X(168,170), X(172,174), X(176,178), X(180,182),
+  X(184,186), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186)
+};
+M(188) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(5,69), X(69,133), X(5,69), X(37,101),
+  X(101,165), X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149),
+  X(21,85), X(53,117), X(117,181), X(53,117), X(21,53), X(85,117), X(149,181),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77),
+  X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109),
+  X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(61,93), X(125,157),
+  X(29,61), X(93,125), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173),
+  X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(165,173), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(3,67), X(67,131), X(3,67), X(35,99),
+  X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147),
+  X(19,83), X(51,115), X(115,179), X(51,115), X(19,51), X(83,115), X(147,179),
+  X(3,19), X(35,51), X(67,83), X(99,115), X(131,147), X(163,179), X(11,75),
+  X(75,139), X(11,75), X(43,107), X(107,171), X(43,107), X(11,43), X(75,107),
+  X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123),
+  X(27,59), X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(171,187), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103),
+  X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119),
+  X(119,183), X(55,119), X(23,55), X(87,119), X(151,183), X(7,23), X(39,55),
+  X(71,87), X(103,119), X(135,151), X(167,183), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63), X(95,127),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(15,23), X(31,39), X(47,55), X(63,71),
+  X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(159,167),
+  X(175,183), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(167,175), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(175,179), X(183,187), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27),
+  X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59),
+  X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91),
+  X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(117,119),
+  X(121,123), X(125,127), X(129,131), X(133,135), X(137,139), X(141,143),
+  X(145,147), X(149,151), X(153,155), X(157,159), X(161,163), X(165,167),
+  X(169,171), X(173,175), X(177,179), X(181,183), X(185,187), X(2,66), X(66,130),
+  X(2,66), X(34,98), X(98,162), X(34,98), X(2,34), X(66,98), X(130,162),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50),
+  X(82,114), X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146),
+  X(162,178), X(10,74), X(74,138), X(10,74), X(42,106), X(106,170), X(42,106),
+  X(10,42), X(74,106), X(138,170), X(26,90), X(90,154), X(26,90), X(58,122),
+  X(122,186), X(58,122), X(26,58), X(90,122), X(154,186), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(170,186), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(162,170), X(178,186), X(6,70), X(70,134), X(6,70), X(38,102), X(102,166),
+  X(38,102), X(6,38), X(70,102), X(134,166), X(22,86), X(86,150), X(22,86),
+  X(54,118), X(118,182), X(54,118), X(22,54), X(86,118), X(150,182), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(14,78), X(78,142),
+  X(14,78), X(46,110), X(110,174), X(46,110), X(14,46), X(78,110), X(142,174),
+  X(30,94), X(94,158), X(30,94), X(62,126), X(62,94), X(126,158), X(30,62),
+  X(94,126), X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(142,158), X(14,22), X(30,38), X(46,54),
+  X(62,70), X(78,86), X(94,102), X(110,118), X(126,134), X(142,150), X(158,166),
+  X(174,182), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(134,142), X(150,158), X(166,174), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(126,130), X(134,138),
+  X(142,146), X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164), X(36,100),
+  X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(116,180), X(52,116), X(20,52), X(84,116), X(148,180), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(164,180), X(12,76), X(76,140), X(12,76),
+  X(44,108), X(108,172), X(44,108), X(12,44), X(76,108), X(140,172), X(28,92),
+  X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60), X(92,124),
+  X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(8,72), X(72,136),
+  X(8,72), X(40,104), X(104,168), X(40,104), X(8,40), X(72,104), X(136,168),
+  X(24,88), X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56),
+  X(88,120), X(152,184), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152),
+  X(168,184), X(16,80), X(80,144), X(16,80), X(48,112), X(112,176), X(48,112),
+  X(16,48), X(80,112), X(144,176), X(32,96), X(96,160), X(32,96), X(64,128),
+  X(64,96), X(128,160), X(32,64), X(96,128), X(32,48), X(64,80), X(96,112),
+  X(128,144), X(160,176), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160),
+  X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120),
+  X(128,136), X(144,152), X(160,168), X(176,184), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160),
+  X(168,176), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(104,108),
+  X(112,116), X(120,124), X(128,132), X(136,140), X(144,148), X(152,156),
+  X(160,164), X(168,172), X(176,180), X(184,188), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(150,152), X(154,156), X(158,160), X(162,164), X(166,168),
+  X(170,172), X(174,176), X(178,180), X(182,184), X(186,188), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188)
+};
+M(189) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(5,69), X(69,133), X(5,69), X(37,101),
+  X(101,165), X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149),
+  X(21,85), X(53,117), X(117,181), X(53,117), X(21,53), X(85,117), X(149,181),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77),
+  X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109),
+  X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125),
+  X(29,61), X(93,125), X(157,189), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(141,157), X(173,189), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(165,173),
+  X(181,189), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(185,189), X(3,67), X(67,131), X(3,67),
+  X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83),
+  X(83,147), X(19,83), X(51,115), X(115,179), X(51,115), X(19,51), X(83,115),
+  X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147), X(163,179),
+  X(11,75), X(75,139), X(11,75), X(43,107), X(107,171), X(43,107), X(11,43),
+  X(75,107), X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(123,187),
+  X(59,123), X(27,59), X(91,123), X(155,187), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(171,187), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103),
+  X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119),
+  X(119,183), X(55,119), X(23,55), X(87,119), X(151,183), X(7,23), X(39,55),
+  X(71,87), X(103,119), X(135,151), X(167,183), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63), X(95,127),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(15,23), X(31,39), X(47,55), X(63,71),
+  X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(159,167),
+  X(175,183), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(167,175), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(175,179), X(183,187), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61),
+  X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93),
+  X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(98,162), X(34,98), X(2,34), X(66,98), X(130,162), X(18,82),
+  X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50), X(82,114),
+  X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(10,74), X(74,138), X(10,74), X(42,106), X(106,170), X(42,106), X(10,42),
+  X(74,106), X(138,170), X(26,90), X(90,154), X(26,90), X(58,122), X(122,186),
+  X(58,122), X(26,58), X(90,122), X(154,186), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(138,154), X(170,186), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(6,70), X(70,134), X(6,70), X(38,102), X(102,166), X(38,102),
+  X(6,38), X(70,102), X(134,166), X(22,86), X(86,150), X(22,86), X(54,118),
+  X(118,182), X(54,118), X(22,54), X(86,118), X(150,182), X(6,22), X(38,54),
+  X(70,86), X(102,118), X(134,150), X(166,182), X(14,78), X(78,142), X(14,78),
+  X(46,110), X(110,174), X(46,110), X(14,46), X(78,110), X(142,174), X(30,94),
+  X(94,158), X(30,94), X(62,126), X(62,94), X(126,158), X(30,62), X(94,126),
+  X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(14,22), X(30,38), X(46,54), X(62,70),
+  X(78,86), X(94,102), X(110,118), X(126,134), X(142,150), X(158,166),
+  X(174,182), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(134,142), X(150,158), X(166,174), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(126,130), X(134,138),
+  X(142,146), X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164), X(36,100),
+  X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(116,180), X(52,116), X(20,52), X(84,116), X(148,180), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(164,180), X(12,76), X(76,140), X(12,76),
+  X(44,108), X(108,172), X(44,108), X(12,44), X(76,108), X(140,172), X(28,92),
+  X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60), X(92,124),
+  X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(8,72), X(72,136),
+  X(8,72), X(40,104), X(104,168), X(40,104), X(8,40), X(72,104), X(136,168),
+  X(24,88), X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56),
+  X(88,120), X(152,184), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152),
+  X(168,184), X(16,80), X(80,144), X(16,80), X(48,112), X(112,176), X(48,112),
+  X(16,48), X(80,112), X(144,176), X(32,96), X(96,160), X(32,96), X(64,128),
+  X(64,96), X(128,160), X(32,64), X(96,128), X(32,48), X(64,80), X(96,112),
+  X(128,144), X(160,176), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160),
+  X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120),
+  X(128,136), X(144,152), X(160,168), X(176,184), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160),
+  X(168,176), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(104,108),
+  X(112,116), X(120,124), X(128,132), X(136,140), X(144,148), X(152,156),
+  X(160,164), X(168,172), X(176,180), X(184,188), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(150,152), X(154,156), X(158,160), X(162,164), X(166,168),
+  X(170,172), X(174,176), X(178,180), X(182,184), X(186,188), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188)
+};
+M(190) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(5,69), X(69,133), X(5,69), X(37,101),
+  X(101,165), X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149),
+  X(21,85), X(53,117), X(117,181), X(53,117), X(21,53), X(85,117), X(149,181),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77),
+  X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109),
+  X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125),
+  X(29,61), X(93,125), X(157,189), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(141,157), X(173,189), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(165,173),
+  X(181,189), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(185,189), X(3,67), X(67,131), X(3,67),
+  X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83),
+  X(83,147), X(19,83), X(51,115), X(115,179), X(51,115), X(19,51), X(83,115),
+  X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147), X(163,179),
+  X(11,75), X(75,139), X(11,75), X(43,107), X(107,171), X(43,107), X(11,43),
+  X(75,107), X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(123,187),
+  X(59,123), X(27,59), X(91,123), X(155,187), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(171,187), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103),
+  X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119),
+  X(119,183), X(55,119), X(23,55), X(87,119), X(151,183), X(7,23), X(39,55),
+  X(71,87), X(103,119), X(135,151), X(167,183), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(63,95), X(127,159), X(31,63), X(95,127),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(15,23), X(31,39), X(47,55), X(63,71),
+  X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(159,167),
+  X(175,183), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(167,175), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(175,179), X(183,187), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61),
+  X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93),
+  X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(2,66), X(66,130), X(2,66),
+  X(34,98), X(98,162), X(34,98), X(2,34), X(66,98), X(130,162), X(18,82),
+  X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50), X(82,114),
+  X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(10,74), X(74,138), X(10,74), X(42,106), X(106,170), X(42,106), X(10,42),
+  X(74,106), X(138,170), X(26,90), X(90,154), X(26,90), X(58,122), X(122,186),
+  X(58,122), X(26,58), X(90,122), X(154,186), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(138,154), X(170,186), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(6,70), X(70,134), X(6,70), X(38,102), X(102,166), X(38,102),
+  X(6,38), X(70,102), X(134,166), X(22,86), X(86,150), X(22,86), X(54,118),
+  X(118,182), X(54,118), X(22,54), X(86,118), X(150,182), X(6,22), X(38,54),
+  X(70,86), X(102,118), X(134,150), X(166,182), X(14,78), X(78,142), X(14,78),
+  X(46,110), X(110,174), X(46,110), X(14,46), X(78,110), X(142,174), X(30,94),
+  X(94,158), X(30,94), X(62,126), X(126,190), X(62,126), X(30,62), X(94,126),
+  X(158,190), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164), X(36,100),
+  X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(116,180), X(52,116), X(20,52), X(84,116), X(148,180), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(164,180), X(12,76), X(76,140), X(12,76),
+  X(44,108), X(108,172), X(44,108), X(12,44), X(76,108), X(140,172), X(28,92),
+  X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60), X(92,124),
+  X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(8,72), X(72,136),
+  X(8,72), X(40,104), X(104,168), X(40,104), X(8,40), X(72,104), X(136,168),
+  X(24,88), X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56),
+  X(88,120), X(152,184), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152),
+  X(168,184), X(16,80), X(80,144), X(16,80), X(48,112), X(112,176), X(48,112),
+  X(16,48), X(80,112), X(144,176), X(32,96), X(96,160), X(32,96), X(64,128),
+  X(64,96), X(128,160), X(32,64), X(96,128), X(32,48), X(64,80), X(96,112),
+  X(128,144), X(160,176), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160),
+  X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120),
+  X(128,136), X(144,152), X(160,168), X(176,184), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160),
+  X(168,176), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(104,108),
+  X(112,116), X(120,124), X(128,132), X(136,140), X(144,148), X(152,156),
+  X(160,164), X(168,172), X(176,180), X(184,188), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(140,142), X(144,146),
+  X(148,150), X(152,154), X(156,158), X(160,162), X(164,166), X(168,170),
+  X(172,174), X(176,178), X(180,182), X(184,186), X(188,190), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(178,180), X(182,184), X(186,188), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190)
+};
+M(191) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(5,69), X(69,133), X(5,69), X(37,101),
+  X(101,165), X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149),
+  X(21,85), X(53,117), X(117,181), X(53,117), X(21,53), X(85,117), X(149,181),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77),
+  X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109),
+  X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125),
+  X(29,61), X(93,125), X(157,189), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(141,157), X(173,189), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(165,173),
+  X(181,189), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(185,189), X(3,67), X(67,131), X(3,67),
+  X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83),
+  X(83,147), X(19,83), X(51,115), X(115,179), X(51,115), X(19,51), X(83,115),
+  X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147), X(163,179),
+  X(11,75), X(75,139), X(11,75), X(43,107), X(107,171), X(43,107), X(11,43),
+  X(75,107), X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(123,187),
+  X(59,123), X(27,59), X(91,123), X(155,187), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(171,187), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103),
+  X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119),
+  X(119,183), X(55,119), X(23,55), X(87,119), X(151,183), X(7,23), X(39,55),
+  X(71,87), X(103,119), X(135,151), X(167,183), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127),
+  X(159,191), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27),
+  X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59),
+  X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91),
+  X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(117,119),
+  X(121,123), X(125,127), X(129,131), X(133,135), X(137,139), X(141,143),
+  X(145,147), X(149,151), X(153,155), X(157,159), X(161,163), X(165,167),
+  X(169,171), X(173,175), X(177,179), X(181,183), X(185,187), X(189,191),
+  X(2,66), X(66,130), X(2,66), X(34,98), X(98,162), X(34,98), X(2,34), X(66,98),
+  X(130,162), X(18,82), X(82,146), X(18,82), X(50,114), X(114,178), X(50,114),
+  X(18,50), X(82,114), X(146,178), X(2,18), X(34,50), X(66,82), X(98,114),
+  X(130,146), X(162,178), X(10,74), X(74,138), X(10,74), X(42,106), X(106,170),
+  X(42,106), X(10,42), X(74,106), X(138,170), X(26,90), X(90,154), X(26,90),
+  X(58,122), X(122,186), X(58,122), X(26,58), X(90,122), X(154,186), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(6,70), X(70,134), X(6,70), X(38,102),
+  X(102,166), X(38,102), X(6,38), X(70,102), X(134,166), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(118,182), X(54,118), X(22,54), X(86,118), X(150,182),
+  X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(14,78),
+  X(78,142), X(14,78), X(46,110), X(110,174), X(46,110), X(14,46), X(78,110),
+  X(142,174), X(30,94), X(94,158), X(30,94), X(62,126), X(126,190), X(62,126),
+  X(30,62), X(94,126), X(158,190), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(142,158), X(174,190), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(154,158),
+  X(162,166), X(170,174), X(178,182), X(186,190), X(4,68), X(68,132), X(4,68),
+  X(36,100), X(100,164), X(36,100), X(4,36), X(68,100), X(132,164), X(20,84),
+  X(84,148), X(20,84), X(52,116), X(116,180), X(52,116), X(20,52), X(84,116),
+  X(148,180), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(164,180),
+  X(12,76), X(76,140), X(12,76), X(44,108), X(108,172), X(44,108), X(12,44),
+  X(76,108), X(140,172), X(28,92), X(92,156), X(28,92), X(60,124), X(124,188),
+  X(60,124), X(28,60), X(92,124), X(156,188), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(172,188), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(8,72), X(72,136), X(8,72), X(40,104), X(104,168), X(40,104),
+  X(8,40), X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120),
+  X(120,184), X(56,120), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56),
+  X(72,88), X(104,120), X(136,152), X(168,184), X(16,80), X(80,144), X(16,80),
+  X(48,112), X(112,176), X(48,112), X(16,48), X(80,112), X(144,176), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(64,96), X(128,160), X(32,64), X(96,128),
+  X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(16,24), X(32,40), X(48,56), X(64,72),
+  X(80,88), X(96,104), X(112,120), X(128,136), X(144,152), X(160,168),
+  X(176,184), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(152,160), X(168,176), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84),
+  X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(136,140), X(144,148), X(152,156), X(160,164), X(168,172), X(176,180),
+  X(184,188), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(180,184), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82),
+  X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110),
+  X(112,114), X(116,118), X(120,122), X(124,126), X(128,130), X(132,134),
+  X(136,138), X(140,142), X(144,146), X(148,150), X(152,154), X(156,158),
+  X(160,162), X(164,166), X(168,170), X(172,174), X(176,178), X(180,182),
+  X(184,186), X(188,190), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190)
+};
+M(192) = {
+  X(1,65), X(65,129), X(1,65), X(33,97), X(97,161), X(33,97), X(1,33), X(65,97),
+  X(129,161), X(17,81), X(81,145), X(17,81), X(49,113), X(113,177), X(49,113),
+  X(17,49), X(81,113), X(145,177), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(9,73), X(73,137), X(9,73), X(41,105), X(105,169),
+  X(41,105), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(5,69), X(69,133), X(5,69), X(37,101),
+  X(101,165), X(37,101), X(5,37), X(69,101), X(133,165), X(21,85), X(85,149),
+  X(21,85), X(53,117), X(117,181), X(53,117), X(21,53), X(85,117), X(149,181),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77),
+  X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109),
+  X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125),
+  X(29,61), X(93,125), X(157,189), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(141,157), X(173,189), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(165,173),
+  X(181,189), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(185,189), X(3,67), X(67,131), X(3,67),
+  X(35,99), X(99,163), X(35,99), X(3,35), X(67,99), X(131,163), X(19,83),
+  X(83,147), X(19,83), X(51,115), X(115,179), X(51,115), X(19,51), X(83,115),
+  X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147), X(163,179),
+  X(11,75), X(75,139), X(11,75), X(43,107), X(107,171), X(43,107), X(11,43),
+  X(75,107), X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(123,187),
+  X(59,123), X(27,59), X(91,123), X(155,187), X(11,27), X(43,59), X(75,91),
+  X(107,123), X(139,155), X(171,187), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103),
+  X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119),
+  X(119,183), X(55,119), X(23,55), X(87,119), X(151,183), X(7,23), X(39,55),
+  X(71,87), X(103,119), X(135,151), X(167,183), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127),
+  X(159,191), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27),
+  X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59),
+  X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91),
+  X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(117,119),
+  X(121,123), X(125,127), X(129,131), X(133,135), X(137,139), X(141,143),
+  X(145,147), X(149,151), X(153,155), X(157,159), X(161,163), X(165,167),
+  X(169,171), X(173,175), X(177,179), X(181,183), X(185,187), X(189,191),
+  X(2,66), X(66,130), X(2,66), X(34,98), X(98,162), X(34,98), X(2,34), X(66,98),
+  X(130,162), X(18,82), X(82,146), X(18,82), X(50,114), X(114,178), X(50,114),
+  X(18,50), X(82,114), X(146,178), X(2,18), X(34,50), X(66,82), X(98,114),
+  X(130,146), X(162,178), X(10,74), X(74,138), X(10,74), X(42,106), X(106,170),
+  X(42,106), X(10,42), X(74,106), X(138,170), X(26,90), X(90,154), X(26,90),
+  X(58,122), X(122,186), X(58,122), X(26,58), X(90,122), X(154,186), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(6,70), X(70,134), X(6,70), X(38,102),
+  X(102,166), X(38,102), X(6,38), X(70,102), X(134,166), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(118,182), X(54,118), X(22,54), X(86,118), X(150,182),
+  X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(14,78),
+  X(78,142), X(14,78), X(46,110), X(110,174), X(46,110), X(14,46), X(78,110),
+  X(142,174), X(30,94), X(94,158), X(30,94), X(62,126), X(126,190), X(62,126),
+  X(30,62), X(94,126), X(158,190), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(142,158), X(174,190), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(154,158),
+  X(162,166), X(170,174), X(178,182), X(186,190), X(4,68), X(68,132), X(4,68),
+  X(36,100), X(100,164), X(36,100), X(4,36), X(68,100), X(132,164), X(20,84),
+  X(84,148), X(20,84), X(52,116), X(116,180), X(52,116), X(20,52), X(84,116),
+  X(148,180), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(164,180),
+  X(12,76), X(76,140), X(12,76), X(44,108), X(108,172), X(44,108), X(12,44),
+  X(76,108), X(140,172), X(28,92), X(92,156), X(28,92), X(60,124), X(124,188),
+  X(60,124), X(28,60), X(92,124), X(156,188), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(172,188), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(8,72), X(72,136), X(8,72), X(40,104), X(104,168), X(40,104),
+  X(8,40), X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120),
+  X(120,184), X(56,120), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56),
+  X(72,88), X(104,120), X(136,152), X(168,184), X(16,80), X(80,144), X(16,80),
+  X(48,112), X(112,176), X(48,112), X(16,48), X(80,112), X(144,176), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(128,192), X(64,128), X(32,64), X(96,128),
+  X(160,192), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(136,144), X(152,160), X(168,176), X(184,192), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192)
+};
+M(193) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105),
+  X(137,169), X(25,89), X(89,153), X(25,89), X(57,121), X(121,185), X(57,121),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185), X(5,69),
+  X(69,133), X(5,69), X(37,101), X(101,165), X(37,101), X(5,37), X(69,101),
+  X(133,165), X(21,85), X(85,149), X(21,85), X(53,117), X(117,181), X(53,117),
+  X(21,53), X(85,117), X(149,181), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(133,149), X(165,181), X(13,77), X(77,141), X(13,77), X(45,109), X(109,173),
+  X(45,109), X(13,45), X(77,109), X(141,173), X(29,93), X(93,157), X(29,93),
+  X(61,125), X(125,189), X(61,125), X(29,61), X(93,125), X(157,189), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(5,9), X(13,17), X(21,25), X(29,33),
+  X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145),
+  X(149,153), X(157,161), X(165,169), X(173,177), X(181,185), X(189,193), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(3,67), X(67,131), X(3,67), X(35,99), X(99,163),
+  X(35,99), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147), X(19,83),
+  X(51,115), X(115,179), X(51,115), X(19,51), X(83,115), X(147,179), X(3,19),
+  X(35,51), X(67,83), X(99,115), X(131,147), X(163,179), X(11,75), X(75,139),
+  X(11,75), X(43,107), X(107,171), X(43,107), X(11,43), X(75,107), X(139,171),
+  X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123), X(27,59),
+  X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(179,187), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(103,167), X(39,103), X(7,39), X(71,103),
+  X(135,167), X(23,87), X(87,151), X(23,87), X(55,119), X(119,183), X(55,119),
+  X(23,55), X(87,119), X(151,183), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(167,183), X(15,79), X(79,143), X(15,79), X(47,111), X(111,175),
+  X(47,111), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159), X(31,95),
+  X(63,127), X(127,191), X(63,127), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(127,129), X(131,133), X(135,137), X(139,141), X(143,145),
+  X(147,149), X(151,153), X(155,157), X(159,161), X(163,165), X(167,169),
+  X(171,173), X(175,177), X(179,181), X(183,185), X(187,189), X(191,193), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(2,66), X(66,130),
+  X(2,66), X(34,98), X(98,162), X(34,98), X(2,34), X(66,98), X(130,162),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50),
+  X(82,114), X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146),
+  X(162,178), X(10,74), X(74,138), X(10,74), X(42,106), X(106,170), X(42,106),
+  X(10,42), X(74,106), X(138,170), X(26,90), X(90,154), X(26,90), X(58,122),
+  X(122,186), X(58,122), X(26,58), X(90,122), X(154,186), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(170,186), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(162,170), X(178,186), X(6,70), X(70,134), X(6,70), X(38,102), X(102,166),
+  X(38,102), X(6,38), X(70,102), X(134,166), X(22,86), X(86,150), X(22,86),
+  X(54,118), X(118,182), X(54,118), X(22,54), X(86,118), X(150,182), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(14,78), X(78,142),
+  X(14,78), X(46,110), X(110,174), X(46,110), X(14,46), X(78,110), X(142,174),
+  X(30,94), X(94,158), X(30,94), X(62,126), X(126,190), X(62,126), X(30,62),
+  X(94,126), X(158,190), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158),
+  X(174,190), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(186,190), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164),
+  X(36,100), X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84),
+  X(52,116), X(116,180), X(52,116), X(20,52), X(84,116), X(148,180), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(132,148), X(164,180), X(12,76), X(76,140),
+  X(12,76), X(44,108), X(108,172), X(44,108), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60),
+  X(92,124), X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(172,188), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(132,140), X(148,156), X(164,172), X(180,188),
+  X(8,72), X(72,136), X(8,72), X(40,104), X(104,168), X(40,104), X(8,40),
+  X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120), X(120,184),
+  X(56,120), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56), X(72,88),
+  X(104,120), X(136,152), X(168,184), X(16,80), X(80,144), X(16,80), X(48,112),
+  X(112,176), X(48,112), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160),
+  X(32,96), X(64,128), X(128,192), X(64,128), X(32,64), X(96,128), X(160,192),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(152,160), X(168,176), X(184,192), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(132,133),
+  X(134,135), X(136,137), X(138,139), X(140,141), X(142,143), X(144,145),
+  X(146,147), X(148,149), X(150,151), X(152,153), X(154,155), X(156,157),
+  X(158,159), X(160,161), X(162,163), X(164,165), X(166,167), X(168,169),
+  X(170,171), X(172,173), X(174,175), X(176,177), X(178,179), X(180,181),
+  X(182,183), X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192)
+};
+M(194) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105),
+  X(137,169), X(25,89), X(89,153), X(25,89), X(57,121), X(121,185), X(57,121),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185), X(5,69),
+  X(69,133), X(5,69), X(37,101), X(101,165), X(37,101), X(5,37), X(69,101),
+  X(133,165), X(21,85), X(85,149), X(21,85), X(53,117), X(117,181), X(53,117),
+  X(21,53), X(85,117), X(149,181), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(133,149), X(165,181), X(13,77), X(77,141), X(13,77), X(45,109), X(109,173),
+  X(45,109), X(13,45), X(77,109), X(141,173), X(29,93), X(93,157), X(29,93),
+  X(61,125), X(125,189), X(61,125), X(29,61), X(93,125), X(157,189), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(5,9), X(13,17), X(21,25), X(29,33),
+  X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145),
+  X(149,153), X(157,161), X(165,169), X(173,177), X(181,185), X(189,193), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(3,67), X(67,131), X(3,67), X(35,99), X(99,163),
+  X(35,99), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147), X(19,83),
+  X(51,115), X(115,179), X(51,115), X(19,51), X(83,115), X(147,179), X(3,19),
+  X(35,51), X(67,83), X(99,115), X(131,147), X(163,179), X(11,75), X(75,139),
+  X(11,75), X(43,107), X(107,171), X(43,107), X(11,43), X(75,107), X(139,171),
+  X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123), X(27,59),
+  X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(179,187), X(7,71),
+  X(71,135), X(7,71), X(39,103), X(103,167), X(39,103), X(7,39), X(71,103),
+  X(135,167), X(23,87), X(87,151), X(23,87), X(55,119), X(119,183), X(55,119),
+  X(23,55), X(87,119), X(151,183), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(167,183), X(15,79), X(79,143), X(15,79), X(47,111), X(111,175),
+  X(47,111), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159), X(31,95),
+  X(63,127), X(127,191), X(63,127), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(127,129), X(131,133), X(135,137), X(139,141), X(143,145),
+  X(147,149), X(151,153), X(155,157), X(159,161), X(163,165), X(167,169),
+  X(171,173), X(175,177), X(179,181), X(183,185), X(187,189), X(191,193), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(2,130),
+  X(66,194), X(2,66), X(130,194), X(34,98), X(98,162), X(34,98), X(34,66),
+  X(98,130), X(162,194), X(2,34), X(66,98), X(130,162), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(114,178), X(50,114), X(18,50), X(82,114), X(146,178),
+  X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(10,74), X(74,138),
+  X(10,74), X(42,106), X(106,170), X(42,106), X(10,42), X(74,106), X(138,170),
+  X(26,90), X(90,154), X(26,90), X(58,122), X(122,186), X(58,122), X(26,58),
+  X(90,122), X(154,186), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154),
+  X(170,186), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(106,114), X(122,130), X(138,146), X(154,162), X(170,178), X(186,194),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(162,170), X(178,186), X(6,70), X(70,134),
+  X(6,70), X(38,102), X(102,166), X(38,102), X(6,38), X(70,102), X(134,166),
+  X(22,86), X(86,150), X(22,86), X(54,118), X(118,182), X(54,118), X(22,54),
+  X(86,118), X(150,182), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(166,182), X(14,78), X(78,142), X(14,78), X(46,110), X(110,174), X(46,110),
+  X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94), X(62,126),
+  X(126,190), X(62,126), X(30,62), X(94,126), X(158,190), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(166,174), X(182,190), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42),
+  X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(190,194), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(186,190), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164),
+  X(36,100), X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84),
+  X(52,116), X(116,180), X(52,116), X(20,52), X(84,116), X(148,180), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(132,148), X(164,180), X(12,76), X(76,140),
+  X(12,76), X(44,108), X(108,172), X(44,108), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60),
+  X(92,124), X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(172,188), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(132,140), X(148,156), X(164,172), X(180,188),
+  X(8,72), X(72,136), X(8,72), X(40,104), X(104,168), X(40,104), X(8,40),
+  X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120), X(120,184),
+  X(56,120), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56), X(72,88),
+  X(104,120), X(136,152), X(168,184), X(16,80), X(80,144), X(16,80), X(48,112),
+  X(112,176), X(48,112), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160),
+  X(32,96), X(64,128), X(128,192), X(64,128), X(32,64), X(96,128), X(160,192),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(152,160), X(168,176), X(184,192), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30),
+  X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62),
+  X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94),
+  X(96,98), X(100,102), X(104,106), X(108,110), X(112,114), X(116,118),
+  X(120,122), X(124,126), X(128,130), X(132,134), X(136,138), X(140,142),
+  X(144,146), X(148,150), X(152,154), X(156,158), X(160,162), X(164,166),
+  X(168,170), X(172,174), X(176,178), X(180,182), X(184,186), X(188,190),
+  X(192,194), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194)
+};
+M(195) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105),
+  X(137,169), X(25,89), X(89,153), X(25,89), X(57,121), X(121,185), X(57,121),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185), X(5,69),
+  X(69,133), X(5,69), X(37,101), X(101,165), X(37,101), X(5,37), X(69,101),
+  X(133,165), X(21,85), X(85,149), X(21,85), X(53,117), X(117,181), X(53,117),
+  X(21,53), X(85,117), X(149,181), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(133,149), X(165,181), X(13,77), X(77,141), X(13,77), X(45,109), X(109,173),
+  X(45,109), X(13,45), X(77,109), X(141,173), X(29,93), X(93,157), X(29,93),
+  X(61,125), X(125,189), X(61,125), X(29,61), X(93,125), X(157,189), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(5,9), X(13,17), X(21,25), X(29,33),
+  X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145),
+  X(149,153), X(157,161), X(165,169), X(173,177), X(181,185), X(189,193), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(3,131), X(67,195), X(3,67), X(131,195), X(35,99),
+  X(99,163), X(35,99), X(35,67), X(99,131), X(163,195), X(3,35), X(67,99),
+  X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179), X(51,115),
+  X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99), X(115,131),
+  X(147,163), X(179,195), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(11,75), X(75,139), X(11,75), X(43,107), X(107,171), X(43,107),
+  X(11,43), X(75,107), X(139,171), X(27,91), X(91,155), X(27,91), X(59,123),
+  X(123,187), X(59,123), X(27,59), X(91,123), X(155,187), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(139,155), X(171,187), X(11,19), X(27,35), X(43,51),
+  X(59,67), X(75,83), X(91,99), X(107,115), X(123,131), X(139,147), X(155,163),
+  X(171,179), X(187,195), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103),
+  X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119),
+  X(119,183), X(55,119), X(23,55), X(87,119), X(151,183), X(7,23), X(39,55),
+  X(71,87), X(103,119), X(135,151), X(167,183), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127),
+  X(159,191), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(175,179), X(183,187),
+  X(191,195), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(155,159),
+  X(163,167), X(171,175), X(179,183), X(187,191), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(141,143), X(145,147), X(149,151),
+  X(153,155), X(157,159), X(161,163), X(165,167), X(169,171), X(173,175),
+  X(177,179), X(181,183), X(185,187), X(189,191), X(193,195), X(2,130),
+  X(66,194), X(2,66), X(130,194), X(34,98), X(98,162), X(34,98), X(34,66),
+  X(98,130), X(162,194), X(2,34), X(66,98), X(130,162), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(114,178), X(50,114), X(18,50), X(82,114), X(146,178),
+  X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(10,74), X(74,138),
+  X(10,74), X(42,106), X(106,170), X(42,106), X(10,42), X(74,106), X(138,170),
+  X(26,90), X(90,154), X(26,90), X(58,122), X(122,186), X(58,122), X(26,58),
+  X(90,122), X(154,186), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154),
+  X(170,186), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(106,114), X(122,130), X(138,146), X(154,162), X(170,178), X(186,194),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(162,170), X(178,186), X(6,70), X(70,134),
+  X(6,70), X(38,102), X(102,166), X(38,102), X(6,38), X(70,102), X(134,166),
+  X(22,86), X(86,150), X(22,86), X(54,118), X(118,182), X(54,118), X(22,54),
+  X(86,118), X(150,182), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(166,182), X(14,78), X(78,142), X(14,78), X(46,110), X(110,174), X(46,110),
+  X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94), X(62,126),
+  X(126,190), X(62,126), X(30,62), X(94,126), X(158,190), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(166,174), X(182,190), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42),
+  X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(190,194), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(186,190), X(4,68), X(68,132), X(4,68), X(36,100), X(100,164),
+  X(36,100), X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84),
+  X(52,116), X(116,180), X(52,116), X(20,52), X(84,116), X(148,180), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(132,148), X(164,180), X(12,76), X(76,140),
+  X(12,76), X(44,108), X(108,172), X(44,108), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60),
+  X(92,124), X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(172,188), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(132,140), X(148,156), X(164,172), X(180,188),
+  X(8,72), X(72,136), X(8,72), X(40,104), X(104,168), X(40,104), X(8,40),
+  X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120), X(120,184),
+  X(56,120), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56), X(72,88),
+  X(104,120), X(136,152), X(168,184), X(16,80), X(80,144), X(16,80), X(48,112),
+  X(112,176), X(48,112), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160),
+  X(32,96), X(64,128), X(128,192), X(64,128), X(32,64), X(96,128), X(160,192),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(152,160), X(168,176), X(184,192), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30),
+  X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62),
+  X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94),
+  X(96,98), X(100,102), X(104,106), X(108,110), X(112,114), X(116,118),
+  X(120,122), X(124,126), X(128,130), X(132,134), X(136,138), X(140,142),
+  X(144,146), X(148,150), X(152,154), X(156,158), X(160,162), X(164,166),
+  X(168,170), X(172,174), X(176,178), X(180,182), X(184,186), X(188,190),
+  X(192,194), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(132,133),
+  X(134,135), X(136,137), X(138,139), X(140,141), X(142,143), X(144,145),
+  X(146,147), X(148,149), X(150,151), X(152,153), X(154,155), X(156,157),
+  X(158,159), X(160,161), X(162,163), X(164,165), X(166,167), X(168,169),
+  X(170,171), X(172,173), X(174,175), X(176,177), X(178,179), X(180,181),
+  X(182,183), X(184,185), X(186,187), X(188,189), X(190,191), X(192,193),
+  X(194,195), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194)
+};
+M(196) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105),
+  X(137,169), X(25,89), X(89,153), X(25,89), X(57,121), X(121,185), X(57,121),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185), X(5,69),
+  X(69,133), X(5,69), X(37,101), X(101,165), X(37,101), X(5,37), X(69,101),
+  X(133,165), X(21,85), X(85,149), X(21,85), X(53,117), X(117,181), X(53,117),
+  X(21,53), X(85,117), X(149,181), X(5,21), X(37,53), X(69,85), X(101,117),
+  X(133,149), X(165,181), X(13,77), X(77,141), X(13,77), X(45,109), X(109,173),
+  X(45,109), X(13,45), X(77,109), X(141,173), X(29,93), X(93,157), X(29,93),
+  X(61,125), X(125,189), X(61,125), X(29,61), X(93,125), X(157,189), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(5,9), X(13,17), X(21,25), X(29,33),
+  X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145),
+  X(149,153), X(157,161), X(165,169), X(173,177), X(181,185), X(189,193), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(3,131), X(67,195), X(3,67), X(131,195), X(35,99),
+  X(99,163), X(35,99), X(35,67), X(99,131), X(163,195), X(3,35), X(67,99),
+  X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179), X(51,115),
+  X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99), X(115,131),
+  X(147,163), X(179,195), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(11,75), X(75,139), X(11,75), X(43,107), X(107,171), X(43,107),
+  X(11,43), X(75,107), X(139,171), X(27,91), X(91,155), X(27,91), X(59,123),
+  X(123,187), X(59,123), X(27,59), X(91,123), X(155,187), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(139,155), X(171,187), X(11,19), X(27,35), X(43,51),
+  X(59,67), X(75,83), X(91,99), X(107,115), X(123,131), X(139,147), X(155,163),
+  X(171,179), X(187,195), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103),
+  X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119),
+  X(119,183), X(55,119), X(23,55), X(87,119), X(151,183), X(7,23), X(39,55),
+  X(71,87), X(103,119), X(135,151), X(167,183), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127),
+  X(159,191), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(175,179), X(183,187),
+  X(191,195), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(155,159),
+  X(163,167), X(171,175), X(179,183), X(187,191), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(141,143), X(145,147), X(149,151),
+  X(153,155), X(157,159), X(161,163), X(165,167), X(169,171), X(173,175),
+  X(177,179), X(181,183), X(185,187), X(189,191), X(193,195), X(2,130),
+  X(66,194), X(2,66), X(130,194), X(34,98), X(98,162), X(34,98), X(34,66),
+  X(98,130), X(162,194), X(2,34), X(66,98), X(130,162), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(114,178), X(50,114), X(18,50), X(82,114), X(146,178),
+  X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(10,74), X(74,138),
+  X(10,74), X(42,106), X(106,170), X(42,106), X(10,42), X(74,106), X(138,170),
+  X(26,90), X(90,154), X(26,90), X(58,122), X(122,186), X(58,122), X(26,58),
+  X(90,122), X(154,186), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154),
+  X(170,186), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(106,114), X(122,130), X(138,146), X(154,162), X(170,178), X(186,194),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(162,170), X(178,186), X(6,70), X(70,134),
+  X(6,70), X(38,102), X(102,166), X(38,102), X(6,38), X(70,102), X(134,166),
+  X(22,86), X(86,150), X(22,86), X(54,118), X(118,182), X(54,118), X(22,54),
+  X(86,118), X(150,182), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(166,182), X(14,78), X(78,142), X(14,78), X(46,110), X(110,174), X(46,110),
+  X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94), X(62,126),
+  X(126,190), X(62,126), X(30,62), X(94,126), X(158,190), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(166,174), X(182,190), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42),
+  X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(190,194), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(186,190), X(4,132), X(68,196), X(4,68), X(132,196), X(36,100),
+  X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36), X(68,100),
+  X(132,164), X(20,84), X(84,148), X(20,84), X(52,116), X(116,180), X(52,116),
+  X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100), X(116,132),
+  X(148,164), X(180,196), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(164,180), X(12,76), X(76,140), X(12,76), X(44,108), X(108,172), X(44,108),
+  X(12,44), X(76,108), X(140,172), X(28,92), X(92,156), X(28,92), X(60,124),
+  X(124,188), X(60,124), X(28,60), X(92,124), X(156,188), X(12,28), X(44,60),
+  X(76,92), X(108,124), X(140,156), X(172,188), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164),
+  X(172,180), X(188,196), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(8,72), X(72,136), X(8,72), X(40,104), X(104,168), X(40,104),
+  X(8,40), X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120),
+  X(120,184), X(56,120), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56),
+  X(72,88), X(104,120), X(136,152), X(168,184), X(16,80), X(80,144), X(16,80),
+  X(48,112), X(112,176), X(48,112), X(16,48), X(80,112), X(144,176), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(128,192), X(64,128), X(32,64), X(96,128),
+  X(160,192), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(136,144), X(152,160), X(168,176), X(184,192), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84),
+  X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(136,140), X(144,148), X(152,156), X(160,164), X(168,172), X(176,180),
+  X(184,188), X(192,196), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(150,152), X(154,156), X(158,160), X(162,164), X(166,168),
+  X(170,172), X(174,176), X(178,180), X(182,184), X(186,188), X(190,192),
+  X(194,196), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194), X(195,196)
+};
+M(197) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105),
+  X(137,169), X(25,89), X(89,153), X(25,89), X(57,121), X(121,185), X(57,121),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(5,133), X(69,197), X(5,69), X(133,197), X(37,101), X(101,165), X(37,101),
+  X(37,69), X(101,133), X(165,197), X(5,37), X(69,101), X(133,165), X(21,85),
+  X(85,149), X(21,85), X(53,117), X(117,181), X(53,117), X(21,53), X(85,117),
+  X(149,181), X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77),
+  X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109),
+  X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125),
+  X(29,61), X(93,125), X(157,189), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(141,157), X(173,189), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85),
+  X(93,101), X(109,117), X(125,133), X(141,149), X(157,165), X(173,181),
+  X(189,197), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(101,109), X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(3,131), X(67,195), X(3,67), X(131,195),
+  X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195), X(3,35),
+  X(67,99), X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179),
+  X(51,115), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99),
+  X(115,131), X(147,163), X(179,195), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(163,179), X(11,75), X(75,139), X(11,75), X(43,107), X(107,171),
+  X(43,107), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(123,187), X(59,123), X(27,59), X(91,123), X(155,187), X(11,27),
+  X(43,59), X(75,91), X(107,123), X(139,155), X(171,187), X(11,19), X(27,35),
+  X(43,51), X(59,67), X(75,83), X(91,99), X(107,115), X(123,131), X(139,147),
+  X(155,163), X(171,179), X(187,195), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103),
+  X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119),
+  X(119,183), X(55,119), X(23,55), X(87,119), X(151,183), X(7,23), X(39,55),
+  X(71,87), X(103,119), X(135,151), X(167,183), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127),
+  X(159,191), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(175,179), X(183,187),
+  X(191,195), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(155,159),
+  X(163,167), X(171,175), X(179,183), X(187,191), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105),
+  X(107,109), X(111,113), X(115,117), X(119,121), X(123,125), X(127,129),
+  X(131,133), X(135,137), X(139,141), X(143,145), X(147,149), X(151,153),
+  X(155,157), X(159,161), X(163,165), X(167,169), X(171,173), X(175,177),
+  X(179,181), X(183,185), X(187,189), X(191,193), X(195,197), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162), X(34,98),
+  X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162), X(18,82),
+  X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50), X(82,114),
+  X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(10,74),
+  X(74,138), X(10,74), X(42,106), X(106,170), X(42,106), X(10,42), X(74,106),
+  X(138,170), X(26,90), X(90,154), X(26,90), X(58,122), X(122,186), X(58,122),
+  X(26,58), X(90,122), X(154,186), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(138,154), X(170,186), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82),
+  X(90,98), X(106,114), X(122,130), X(138,146), X(154,162), X(170,178),
+  X(186,194), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(146,154), X(162,170), X(178,186), X(6,70),
+  X(70,134), X(6,70), X(38,102), X(102,166), X(38,102), X(6,38), X(70,102),
+  X(134,166), X(22,86), X(86,150), X(22,86), X(54,118), X(118,182), X(54,118),
+  X(22,54), X(86,118), X(150,182), X(6,22), X(38,54), X(70,86), X(102,118),
+  X(134,150), X(166,182), X(14,78), X(78,142), X(14,78), X(46,110), X(110,174),
+  X(46,110), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94),
+  X(62,126), X(126,190), X(62,126), X(30,62), X(94,126), X(158,190), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(166,174), X(182,190), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(190,194), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(186,190), X(4,132), X(68,196), X(4,68), X(132,196), X(36,100),
+  X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36), X(68,100),
+  X(132,164), X(20,84), X(84,148), X(20,84), X(52,116), X(116,180), X(52,116),
+  X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100), X(116,132),
+  X(148,164), X(180,196), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(164,180), X(12,76), X(76,140), X(12,76), X(44,108), X(108,172), X(44,108),
+  X(12,44), X(76,108), X(140,172), X(28,92), X(92,156), X(28,92), X(60,124),
+  X(124,188), X(60,124), X(28,60), X(92,124), X(156,188), X(12,28), X(44,60),
+  X(76,92), X(108,124), X(140,156), X(172,188), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164),
+  X(172,180), X(188,196), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(8,72), X(72,136), X(8,72), X(40,104), X(104,168), X(40,104),
+  X(8,40), X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120),
+  X(120,184), X(56,120), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56),
+  X(72,88), X(104,120), X(136,152), X(168,184), X(16,80), X(80,144), X(16,80),
+  X(48,112), X(112,176), X(48,112), X(16,48), X(80,112), X(144,176), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(128,192), X(64,128), X(32,64), X(96,128),
+  X(160,192), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(136,144), X(152,160), X(168,176), X(184,192), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84),
+  X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(136,140), X(144,148), X(152,156), X(160,164), X(168,172), X(176,180),
+  X(184,188), X(192,196), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(150,152), X(154,156), X(158,160), X(162,164), X(166,168),
+  X(170,172), X(174,176), X(178,180), X(182,184), X(186,188), X(190,192),
+  X(194,196), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(132,133),
+  X(134,135), X(136,137), X(138,139), X(140,141), X(142,143), X(144,145),
+  X(146,147), X(148,149), X(150,151), X(152,153), X(154,155), X(156,157),
+  X(158,159), X(160,161), X(162,163), X(164,165), X(166,167), X(168,169),
+  X(170,171), X(172,173), X(174,175), X(176,177), X(178,179), X(180,181),
+  X(182,183), X(184,185), X(186,187), X(188,189), X(190,191), X(192,193),
+  X(194,195), X(196,197), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(187,188), X(189,190),
+  X(191,192), X(193,194), X(195,196)
+};
+M(198) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105),
+  X(137,169), X(25,89), X(89,153), X(25,89), X(57,121), X(121,185), X(57,121),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(5,133), X(69,197), X(5,69), X(133,197), X(37,101), X(101,165), X(37,101),
+  X(37,69), X(101,133), X(165,197), X(5,37), X(69,101), X(133,165), X(21,85),
+  X(85,149), X(21,85), X(53,117), X(117,181), X(53,117), X(21,53), X(85,117),
+  X(149,181), X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77),
+  X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109),
+  X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125),
+  X(29,61), X(93,125), X(157,189), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(141,157), X(173,189), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85),
+  X(93,101), X(109,117), X(125,133), X(141,149), X(157,165), X(173,181),
+  X(189,197), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(101,109), X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(3,131), X(67,195), X(3,67), X(131,195),
+  X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195), X(3,35),
+  X(67,99), X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179),
+  X(51,115), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99),
+  X(115,131), X(147,163), X(179,195), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(163,179), X(11,75), X(75,139), X(11,75), X(43,107), X(107,171),
+  X(43,107), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(123,187), X(59,123), X(27,59), X(91,123), X(155,187), X(11,27),
+  X(43,59), X(75,91), X(107,123), X(139,155), X(171,187), X(11,19), X(27,35),
+  X(43,51), X(59,67), X(75,83), X(91,99), X(107,115), X(123,131), X(139,147),
+  X(155,163), X(171,179), X(187,195), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(7,71), X(71,135), X(7,71), X(39,103), X(103,167), X(39,103),
+  X(7,39), X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119),
+  X(119,183), X(55,119), X(23,55), X(87,119), X(151,183), X(7,23), X(39,55),
+  X(71,87), X(103,119), X(135,151), X(167,183), X(15,79), X(79,143), X(15,79),
+  X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127),
+  X(159,191), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(175,179), X(183,187),
+  X(191,195), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(155,159),
+  X(163,167), X(171,175), X(179,183), X(187,191), X(3,5), X(7,9), X(11,13),
+  X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45),
+  X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77),
+  X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105),
+  X(107,109), X(111,113), X(115,117), X(119,121), X(123,125), X(127,129),
+  X(131,133), X(135,137), X(139,141), X(143,145), X(147,149), X(151,153),
+  X(155,157), X(159,161), X(163,165), X(167,169), X(171,173), X(175,177),
+  X(179,181), X(183,185), X(187,189), X(191,193), X(195,197), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162), X(34,98),
+  X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162), X(18,82),
+  X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50), X(82,114),
+  X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(10,74),
+  X(74,138), X(10,74), X(42,106), X(106,170), X(42,106), X(10,42), X(74,106),
+  X(138,170), X(26,90), X(90,154), X(26,90), X(58,122), X(122,186), X(58,122),
+  X(26,58), X(90,122), X(154,186), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(138,154), X(170,186), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82),
+  X(90,98), X(106,114), X(122,130), X(138,146), X(154,162), X(170,178),
+  X(186,194), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(146,154), X(162,170), X(178,186),
+  X(6,134), X(70,198), X(6,70), X(134,198), X(38,102), X(102,166), X(38,102),
+  X(38,70), X(102,134), X(166,198), X(6,38), X(70,102), X(134,166), X(22,86),
+  X(86,150), X(22,86), X(54,118), X(118,182), X(54,118), X(22,54), X(86,118),
+  X(150,182), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198),
+  X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(14,78),
+  X(78,142), X(14,78), X(46,110), X(110,174), X(46,110), X(14,46), X(78,110),
+  X(142,174), X(30,94), X(94,158), X(30,94), X(62,126), X(126,190), X(62,126),
+  X(30,62), X(94,126), X(158,190), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(142,158), X(174,190), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86),
+  X(94,102), X(110,118), X(126,134), X(142,150), X(158,166), X(174,182),
+  X(190,198), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(186,190), X(194,198), X(4,132), X(68,196), X(4,68), X(132,196),
+  X(36,100), X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36),
+  X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116), X(116,180),
+  X(52,116), X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(180,196), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(132,148), X(164,180), X(12,76), X(76,140), X(12,76), X(44,108), X(108,172),
+  X(44,108), X(12,44), X(76,108), X(140,172), X(28,92), X(92,156), X(28,92),
+  X(60,124), X(124,188), X(60,124), X(28,60), X(92,124), X(156,188), X(12,28),
+  X(44,60), X(76,92), X(108,124), X(140,156), X(172,188), X(12,20), X(28,36),
+  X(44,52), X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148),
+  X(156,164), X(172,180), X(188,196), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(8,72), X(72,136), X(8,72), X(40,104), X(104,168), X(40,104),
+  X(8,40), X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120),
+  X(120,184), X(56,120), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56),
+  X(72,88), X(104,120), X(136,152), X(168,184), X(16,80), X(80,144), X(16,80),
+  X(48,112), X(112,176), X(48,112), X(16,48), X(80,112), X(144,176), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(128,192), X(64,128), X(32,64), X(96,128),
+  X(160,192), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(136,144), X(152,160), X(168,176), X(184,192), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84),
+  X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(136,140), X(144,148), X(152,156), X(160,164), X(168,172), X(176,180),
+  X(184,188), X(192,196), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(140,142), X(144,146),
+  X(148,150), X(152,154), X(156,158), X(160,162), X(164,166), X(168,170),
+  X(172,174), X(176,178), X(180,182), X(184,186), X(188,190), X(192,194),
+  X(196,198), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(187,188), X(189,190),
+  X(191,192), X(193,194), X(195,196), X(197,198)
+};
+M(199) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105),
+  X(137,169), X(25,89), X(89,153), X(25,89), X(57,121), X(121,185), X(57,121),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(5,133), X(69,197), X(5,69), X(133,197), X(37,101), X(101,165), X(37,101),
+  X(37,69), X(101,133), X(165,197), X(5,37), X(69,101), X(133,165), X(21,85),
+  X(85,149), X(21,85), X(53,117), X(117,181), X(53,117), X(21,53), X(85,117),
+  X(149,181), X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77),
+  X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109),
+  X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125),
+  X(29,61), X(93,125), X(157,189), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(141,157), X(173,189), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85),
+  X(93,101), X(109,117), X(125,133), X(141,149), X(157,165), X(173,181),
+  X(189,197), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(101,109), X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(3,131), X(67,195), X(3,67), X(131,195),
+  X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195), X(3,35),
+  X(67,99), X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179),
+  X(51,115), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99),
+  X(115,131), X(147,163), X(179,195), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(163,179), X(11,75), X(75,139), X(11,75), X(43,107), X(107,171),
+  X(43,107), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(123,187), X(59,123), X(27,59), X(91,123), X(155,187), X(11,27),
+  X(43,59), X(75,91), X(107,123), X(139,155), X(171,187), X(11,19), X(27,35),
+  X(43,51), X(59,67), X(75,83), X(91,99), X(107,115), X(123,131), X(139,147),
+  X(155,163), X(171,179), X(187,195), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167),
+  X(39,103), X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167),
+  X(23,87), X(87,151), X(23,87), X(55,119), X(119,183), X(55,119), X(23,55),
+  X(87,119), X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167),
+  X(183,199), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(15,79), X(79,143), X(15,79), X(47,111), X(111,175), X(47,111), X(15,47),
+  X(79,111), X(143,175), X(31,95), X(95,159), X(31,95), X(63,127), X(127,191),
+  X(63,127), X(31,63), X(95,127), X(159,191), X(15,31), X(47,63), X(79,95),
+  X(111,127), X(143,159), X(175,191), X(15,23), X(31,39), X(47,55), X(63,71),
+  X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(159,167),
+  X(175,183), X(191,199), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79),
+  X(87,95), X(103,111), X(119,127), X(135,143), X(151,159), X(167,175),
+  X(183,191), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(155,159),
+  X(163,167), X(171,175), X(179,183), X(187,191), X(195,199), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162),
+  X(34,98), X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50),
+  X(82,114), X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162),
+  X(178,194), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(10,74), X(74,138), X(10,74), X(42,106), X(106,170), X(42,106), X(10,42),
+  X(74,106), X(138,170), X(26,90), X(90,154), X(26,90), X(58,122), X(122,186),
+  X(58,122), X(26,58), X(90,122), X(154,186), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(138,154), X(170,186), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162), X(170,178),
+  X(186,194), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(146,154), X(162,170), X(178,186),
+  X(6,134), X(70,198), X(6,70), X(134,198), X(38,102), X(102,166), X(38,102),
+  X(38,70), X(102,134), X(166,198), X(6,38), X(70,102), X(134,166), X(22,86),
+  X(86,150), X(22,86), X(54,118), X(118,182), X(54,118), X(22,54), X(86,118),
+  X(150,182), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198),
+  X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(14,78),
+  X(78,142), X(14,78), X(46,110), X(110,174), X(46,110), X(14,46), X(78,110),
+  X(142,174), X(30,94), X(94,158), X(30,94), X(62,126), X(126,190), X(62,126),
+  X(30,62), X(94,126), X(158,190), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(142,158), X(174,190), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86),
+  X(94,102), X(110,118), X(126,134), X(142,150), X(158,166), X(174,182),
+  X(190,198), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(186,190), X(194,198), X(4,132), X(68,196), X(4,68), X(132,196),
+  X(36,100), X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36),
+  X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116), X(116,180),
+  X(52,116), X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(180,196), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(132,148), X(164,180), X(12,76), X(76,140), X(12,76), X(44,108), X(108,172),
+  X(44,108), X(12,44), X(76,108), X(140,172), X(28,92), X(92,156), X(28,92),
+  X(60,124), X(124,188), X(60,124), X(28,60), X(92,124), X(156,188), X(12,28),
+  X(44,60), X(76,92), X(108,124), X(140,156), X(172,188), X(12,20), X(28,36),
+  X(44,52), X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148),
+  X(156,164), X(172,180), X(188,196), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(8,72), X(72,136), X(8,72), X(40,104), X(104,168), X(40,104),
+  X(8,40), X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120),
+  X(120,184), X(56,120), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56),
+  X(72,88), X(104,120), X(136,152), X(168,184), X(16,80), X(80,144), X(16,80),
+  X(48,112), X(112,176), X(48,112), X(16,48), X(80,112), X(144,176), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(128,192), X(64,128), X(32,64), X(96,128),
+  X(160,192), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(136,144), X(152,160), X(168,176), X(184,192), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84),
+  X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(136,140), X(144,148), X(152,156), X(160,164), X(168,172), X(176,180),
+  X(184,188), X(192,196), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(140,142), X(144,146),
+  X(148,150), X(152,154), X(156,158), X(160,162), X(164,166), X(168,170),
+  X(172,174), X(176,178), X(180,182), X(184,186), X(188,190), X(192,194),
+  X(196,198), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(142,143),
+  X(144,145), X(146,147), X(148,149), X(150,151), X(152,153), X(154,155),
+  X(156,157), X(158,159), X(160,161), X(162,163), X(164,165), X(166,167),
+  X(168,169), X(170,171), X(172,173), X(174,175), X(176,177), X(178,179),
+  X(180,181), X(182,183), X(184,185), X(186,187), X(188,189), X(190,191),
+  X(192,193), X(194,195), X(196,197), X(198,199), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198)
+};
+M(200) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,73),
+  X(73,137), X(9,73), X(41,105), X(105,169), X(41,105), X(9,41), X(73,105),
+  X(137,169), X(25,89), X(89,153), X(25,89), X(57,121), X(121,185), X(57,121),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(5,133), X(69,197), X(5,69), X(133,197), X(37,101), X(101,165), X(37,101),
+  X(37,69), X(101,133), X(165,197), X(5,37), X(69,101), X(133,165), X(21,85),
+  X(85,149), X(21,85), X(53,117), X(117,181), X(53,117), X(21,53), X(85,117),
+  X(149,181), X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(13,77),
+  X(77,141), X(13,77), X(45,109), X(109,173), X(45,109), X(13,45), X(77,109),
+  X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125),
+  X(29,61), X(93,125), X(157,189), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(141,157), X(173,189), X(13,21), X(29,37), X(45,53), X(61,69), X(77,85),
+  X(93,101), X(109,117), X(125,133), X(141,149), X(157,165), X(173,181),
+  X(189,197), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93),
+  X(101,109), X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(3,131), X(67,195), X(3,67), X(131,195),
+  X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195), X(3,35),
+  X(67,99), X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179),
+  X(51,115), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99),
+  X(115,131), X(147,163), X(179,195), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(163,179), X(11,75), X(75,139), X(11,75), X(43,107), X(107,171),
+  X(43,107), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(123,187), X(59,123), X(27,59), X(91,123), X(155,187), X(11,27),
+  X(43,59), X(75,91), X(107,123), X(139,155), X(171,187), X(11,19), X(27,35),
+  X(43,51), X(59,67), X(75,83), X(91,99), X(107,115), X(123,131), X(139,147),
+  X(155,163), X(171,179), X(187,195), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167),
+  X(39,103), X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167),
+  X(23,87), X(87,151), X(23,87), X(55,119), X(119,183), X(55,119), X(23,55),
+  X(87,119), X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167),
+  X(183,199), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(15,79), X(79,143), X(15,79), X(47,111), X(111,175), X(47,111), X(15,47),
+  X(79,111), X(143,175), X(31,95), X(95,159), X(31,95), X(63,127), X(127,191),
+  X(63,127), X(31,63), X(95,127), X(159,191), X(15,31), X(47,63), X(79,95),
+  X(111,127), X(143,159), X(175,191), X(15,23), X(31,39), X(47,55), X(63,71),
+  X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(159,167),
+  X(175,183), X(191,199), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79),
+  X(87,95), X(103,111), X(119,127), X(135,143), X(151,159), X(167,175),
+  X(183,191), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(155,159),
+  X(163,167), X(171,175), X(179,183), X(187,191), X(195,199), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162),
+  X(34,98), X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50),
+  X(82,114), X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162),
+  X(178,194), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(10,74), X(74,138), X(10,74), X(42,106), X(106,170), X(42,106), X(10,42),
+  X(74,106), X(138,170), X(26,90), X(90,154), X(26,90), X(58,122), X(122,186),
+  X(58,122), X(26,58), X(90,122), X(154,186), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(138,154), X(170,186), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162), X(170,178),
+  X(186,194), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(146,154), X(162,170), X(178,186),
+  X(6,134), X(70,198), X(6,70), X(134,198), X(38,102), X(102,166), X(38,102),
+  X(38,70), X(102,134), X(166,198), X(6,38), X(70,102), X(134,166), X(22,86),
+  X(86,150), X(22,86), X(54,118), X(118,182), X(54,118), X(22,54), X(86,118),
+  X(150,182), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198),
+  X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(14,78),
+  X(78,142), X(14,78), X(46,110), X(110,174), X(46,110), X(14,46), X(78,110),
+  X(142,174), X(30,94), X(94,158), X(30,94), X(62,126), X(126,190), X(62,126),
+  X(30,62), X(94,126), X(158,190), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(142,158), X(174,190), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86),
+  X(94,102), X(110,118), X(126,134), X(142,150), X(158,166), X(174,182),
+  X(190,198), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(186,190), X(194,198), X(4,132), X(68,196), X(4,68), X(132,196),
+  X(36,100), X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36),
+  X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116), X(116,180),
+  X(52,116), X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(180,196), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(132,148), X(164,180), X(12,76), X(76,140), X(12,76), X(44,108), X(108,172),
+  X(44,108), X(12,44), X(76,108), X(140,172), X(28,92), X(92,156), X(28,92),
+  X(60,124), X(124,188), X(60,124), X(28,60), X(92,124), X(156,188), X(12,28),
+  X(44,60), X(76,92), X(108,124), X(140,156), X(172,188), X(12,20), X(28,36),
+  X(44,52), X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148),
+  X(156,164), X(172,180), X(188,196), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168),
+  X(40,104), X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168),
+  X(24,88), X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56),
+  X(88,120), X(152,184), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168),
+  X(184,200), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184),
+  X(16,80), X(80,144), X(16,80), X(48,112), X(112,176), X(48,112), X(16,48),
+  X(80,112), X(144,176), X(32,96), X(96,160), X(32,96), X(64,128), X(128,192),
+  X(64,128), X(32,64), X(96,128), X(160,192), X(16,32), X(48,64), X(80,96),
+  X(112,128), X(144,160), X(176,192), X(16,24), X(32,40), X(48,56), X(64,72),
+  X(80,88), X(96,104), X(112,120), X(128,136), X(144,152), X(160,168),
+  X(176,184), X(192,200), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(180,184), X(188,192), X(196,200), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(178,180), X(182,184), X(186,188), X(190,192), X(194,196),
+  X(198,200), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194), X(195,196), X(197,198), X(199,200)
+};
+M(201) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,137),
+  X(73,201), X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73),
+  X(105,137), X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153),
+  X(25,89), X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185),
+  X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(193,201), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(117,181), X(53,117), X(21,53), X(85,117), X(149,181), X(21,37), X(53,69),
+  X(85,101), X(117,133), X(149,165), X(181,197), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(165,181), X(13,77), X(77,141), X(13,77), X(45,109),
+  X(109,173), X(45,109), X(13,45), X(77,109), X(141,173), X(29,93), X(93,157),
+  X(29,93), X(61,125), X(125,189), X(61,125), X(29,61), X(93,125), X(157,189),
+  X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(13,21),
+  X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133),
+  X(141,149), X(157,165), X(173,181), X(189,197), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157),
+  X(165,173), X(181,189), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145),
+  X(149,153), X(157,161), X(165,169), X(173,177), X(181,185), X(189,193),
+  X(197,201), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(185,189), X(193,197), X(3,131),
+  X(67,195), X(3,67), X(131,195), X(35,99), X(99,163), X(35,99), X(35,67),
+  X(99,131), X(163,195), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147),
+  X(19,83), X(51,115), X(115,179), X(51,115), X(19,51), X(83,115), X(147,179),
+  X(19,35), X(51,67), X(83,99), X(115,131), X(147,163), X(179,195), X(3,19),
+  X(35,51), X(67,83), X(99,115), X(131,147), X(163,179), X(11,75), X(75,139),
+  X(11,75), X(43,107), X(107,171), X(43,107), X(11,43), X(75,107), X(139,171),
+  X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123), X(27,59),
+  X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(155,163), X(171,179), X(187,195),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(131,139), X(147,155), X(163,171), X(179,187), X(7,135),
+  X(71,199), X(7,71), X(135,199), X(39,103), X(103,167), X(39,103), X(39,71),
+  X(103,135), X(167,199), X(7,39), X(71,103), X(135,167), X(23,87), X(87,151),
+  X(23,87), X(55,119), X(119,183), X(55,119), X(23,55), X(87,119), X(151,183),
+  X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(15,79), X(79,143),
+  X(15,79), X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175),
+  X(31,95), X(95,159), X(31,95), X(63,127), X(127,191), X(63,127), X(31,63),
+  X(95,127), X(159,191), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159),
+  X(175,191), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103),
+  X(111,119), X(127,135), X(143,151), X(159,167), X(175,183), X(191,199),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189),
+  X(191,193), X(195,197), X(199,201), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(185,187), X(189,191), X(193,195), X(197,199), X(2,130),
+  X(66,194), X(2,66), X(130,194), X(34,98), X(98,162), X(34,98), X(34,66),
+  X(98,130), X(162,194), X(2,34), X(66,98), X(130,162), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(114,178), X(50,114), X(18,50), X(82,114), X(146,178),
+  X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(10,74), X(74,138),
+  X(10,74), X(42,106), X(106,170), X(42,106), X(10,42), X(74,106), X(138,170),
+  X(26,90), X(90,154), X(26,90), X(58,122), X(122,186), X(58,122), X(26,58),
+  X(90,122), X(154,186), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154),
+  X(170,186), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(106,114), X(122,130), X(138,146), X(154,162), X(170,178), X(186,194),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(162,170), X(178,186), X(6,134),
+  X(70,198), X(6,70), X(134,198), X(38,102), X(102,166), X(38,102), X(38,70),
+  X(102,134), X(166,198), X(6,38), X(70,102), X(134,166), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(118,182), X(54,118), X(22,54), X(86,118), X(150,182),
+  X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(14,78), X(78,142),
+  X(14,78), X(46,110), X(110,174), X(46,110), X(14,46), X(78,110), X(142,174),
+  X(30,94), X(94,158), X(30,94), X(62,126), X(126,190), X(62,126), X(30,62),
+  X(94,126), X(158,190), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158),
+  X(174,190), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102),
+  X(110,118), X(126,134), X(142,150), X(158,166), X(174,182), X(190,198),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(4,132), X(68,196), X(4,68), X(132,196), X(36,100),
+  X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36), X(68,100),
+  X(132,164), X(20,84), X(84,148), X(20,84), X(52,116), X(116,180), X(52,116),
+  X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100), X(116,132),
+  X(148,164), X(180,196), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(164,180), X(12,76), X(76,140), X(12,76), X(44,108), X(108,172), X(44,108),
+  X(12,44), X(76,108), X(140,172), X(28,92), X(92,156), X(28,92), X(60,124),
+  X(124,188), X(60,124), X(28,60), X(92,124), X(156,188), X(12,28), X(44,60),
+  X(76,92), X(108,124), X(140,156), X(172,188), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164),
+  X(172,180), X(188,196), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168),
+  X(40,104), X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168),
+  X(24,88), X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56),
+  X(88,120), X(152,184), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168),
+  X(184,200), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184),
+  X(16,80), X(80,144), X(16,80), X(48,112), X(112,176), X(48,112), X(16,48),
+  X(80,112), X(144,176), X(32,96), X(96,160), X(32,96), X(64,128), X(128,192),
+  X(64,128), X(32,64), X(96,128), X(160,192), X(16,32), X(48,64), X(80,96),
+  X(112,128), X(144,160), X(176,192), X(16,24), X(32,40), X(48,56), X(64,72),
+  X(80,88), X(96,104), X(112,120), X(128,136), X(144,152), X(160,168),
+  X(176,184), X(192,200), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(180,184), X(188,192), X(196,200), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(178,180), X(182,184), X(186,188), X(190,192), X(194,196),
+  X(198,200), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(132,133),
+  X(134,135), X(136,137), X(138,139), X(140,141), X(142,143), X(144,145),
+  X(146,147), X(148,149), X(150,151), X(152,153), X(154,155), X(156,157),
+  X(158,159), X(160,161), X(162,163), X(164,165), X(166,167), X(168,169),
+  X(170,171), X(172,173), X(174,175), X(176,177), X(178,179), X(180,181),
+  X(182,183), X(184,185), X(186,187), X(188,189), X(190,191), X(192,193),
+  X(194,195), X(196,197), X(198,199), X(200,201), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200)
+};
+M(202) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,137),
+  X(73,201), X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73),
+  X(105,137), X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153),
+  X(25,89), X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185),
+  X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(193,201), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(117,181), X(53,117), X(21,53), X(85,117), X(149,181), X(21,37), X(53,69),
+  X(85,101), X(117,133), X(149,165), X(181,197), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(165,181), X(13,77), X(77,141), X(13,77), X(45,109),
+  X(109,173), X(45,109), X(13,45), X(77,109), X(141,173), X(29,93), X(93,157),
+  X(29,93), X(61,125), X(125,189), X(61,125), X(29,61), X(93,125), X(157,189),
+  X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(13,21),
+  X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133),
+  X(141,149), X(157,165), X(173,181), X(189,197), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157),
+  X(165,173), X(181,189), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145),
+  X(149,153), X(157,161), X(165,169), X(173,177), X(181,185), X(189,193),
+  X(197,201), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(185,189), X(193,197), X(3,131),
+  X(67,195), X(3,67), X(131,195), X(35,99), X(99,163), X(35,99), X(35,67),
+  X(99,131), X(163,195), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147),
+  X(19,83), X(51,115), X(115,179), X(51,115), X(19,51), X(83,115), X(147,179),
+  X(19,35), X(51,67), X(83,99), X(115,131), X(147,163), X(179,195), X(3,19),
+  X(35,51), X(67,83), X(99,115), X(131,147), X(163,179), X(11,75), X(75,139),
+  X(11,75), X(43,107), X(107,171), X(43,107), X(11,43), X(75,107), X(139,171),
+  X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123), X(27,59),
+  X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(155,163), X(171,179), X(187,195),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(131,139), X(147,155), X(163,171), X(179,187), X(7,135),
+  X(71,199), X(7,71), X(135,199), X(39,103), X(103,167), X(39,103), X(39,71),
+  X(103,135), X(167,199), X(7,39), X(71,103), X(135,167), X(23,87), X(87,151),
+  X(23,87), X(55,119), X(119,183), X(55,119), X(23,55), X(87,119), X(151,183),
+  X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(15,79), X(79,143),
+  X(15,79), X(47,111), X(111,175), X(47,111), X(15,47), X(79,111), X(143,175),
+  X(31,95), X(95,159), X(31,95), X(63,127), X(127,191), X(63,127), X(31,63),
+  X(95,127), X(159,191), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159),
+  X(175,191), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103),
+  X(111,119), X(127,135), X(143,151), X(159,167), X(175,183), X(191,199),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189),
+  X(191,193), X(195,197), X(199,201), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(185,187), X(189,191), X(193,195), X(197,199), X(2,130),
+  X(66,194), X(2,66), X(130,194), X(34,98), X(98,162), X(34,98), X(34,66),
+  X(98,130), X(162,194), X(2,34), X(66,98), X(130,162), X(18,82), X(82,146),
+  X(18,82), X(50,114), X(114,178), X(50,114), X(18,50), X(82,114), X(146,178),
+  X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(10,138), X(74,202),
+  X(10,74), X(138,202), X(42,106), X(106,170), X(42,106), X(42,74), X(106,138),
+  X(170,202), X(10,42), X(74,106), X(138,170), X(26,90), X(90,154), X(26,90),
+  X(58,122), X(122,186), X(58,122), X(26,58), X(90,122), X(154,186), X(26,42),
+  X(58,74), X(90,106), X(122,138), X(154,170), X(186,202), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(170,186), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(162,170), X(178,186), X(194,202), X(6,134), X(70,198), X(6,70), X(134,198),
+  X(38,102), X(102,166), X(38,102), X(38,70), X(102,134), X(166,198), X(6,38),
+  X(70,102), X(134,166), X(22,86), X(86,150), X(22,86), X(54,118), X(118,182),
+  X(54,118), X(22,54), X(86,118), X(150,182), X(22,38), X(54,70), X(86,102),
+  X(118,134), X(150,166), X(182,198), X(6,22), X(38,54), X(70,86), X(102,118),
+  X(134,150), X(166,182), X(14,78), X(78,142), X(14,78), X(46,110), X(110,174),
+  X(46,110), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94),
+  X(62,126), X(126,190), X(62,126), X(30,62), X(94,126), X(158,190), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134), X(142,150),
+  X(158,166), X(174,182), X(190,198), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50),
+  X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98), X(102,106),
+  X(110,114), X(118,122), X(126,130), X(134,138), X(142,146), X(150,154),
+  X(158,162), X(166,170), X(174,178), X(182,186), X(190,194), X(198,202), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(186,190), X(194,198), X(4,132), X(68,196), X(4,68), X(132,196),
+  X(36,100), X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36),
+  X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116), X(116,180),
+  X(52,116), X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(180,196), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(132,148), X(164,180), X(12,76), X(76,140), X(12,76), X(44,108), X(108,172),
+  X(44,108), X(12,44), X(76,108), X(140,172), X(28,92), X(92,156), X(28,92),
+  X(60,124), X(124,188), X(60,124), X(28,60), X(92,124), X(156,188), X(12,28),
+  X(44,60), X(76,92), X(108,124), X(140,156), X(172,188), X(12,20), X(28,36),
+  X(44,52), X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148),
+  X(156,164), X(172,180), X(188,196), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168),
+  X(40,104), X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168),
+  X(24,88), X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56),
+  X(88,120), X(152,184), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168),
+  X(184,200), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184),
+  X(16,80), X(80,144), X(16,80), X(48,112), X(112,176), X(48,112), X(16,48),
+  X(80,112), X(144,176), X(32,96), X(96,160), X(32,96), X(64,128), X(128,192),
+  X(64,128), X(32,64), X(96,128), X(160,192), X(16,32), X(48,64), X(80,96),
+  X(112,128), X(144,160), X(176,192), X(16,24), X(32,40), X(48,56), X(64,72),
+  X(80,88), X(96,104), X(112,120), X(128,136), X(144,152), X(160,168),
+  X(176,184), X(192,200), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(180,184), X(188,192), X(196,200), X(4,6), X(8,10),
+  X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42),
+  X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74),
+  X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102),
+  X(104,106), X(108,110), X(112,114), X(116,118), X(120,122), X(124,126),
+  X(128,130), X(132,134), X(136,138), X(140,142), X(144,146), X(148,150),
+  X(152,154), X(156,158), X(160,162), X(164,166), X(168,170), X(172,174),
+  X(176,178), X(180,182), X(184,186), X(188,190), X(192,194), X(196,198),
+  X(200,202), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202)
+};
+M(203) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,137),
+  X(73,201), X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73),
+  X(105,137), X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153),
+  X(25,89), X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185),
+  X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(193,201), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(117,181), X(53,117), X(21,53), X(85,117), X(149,181), X(21,37), X(53,69),
+  X(85,101), X(117,133), X(149,165), X(181,197), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(165,181), X(13,77), X(77,141), X(13,77), X(45,109),
+  X(109,173), X(45,109), X(13,45), X(77,109), X(141,173), X(29,93), X(93,157),
+  X(29,93), X(61,125), X(125,189), X(61,125), X(29,61), X(93,125), X(157,189),
+  X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(13,21),
+  X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133),
+  X(141,149), X(157,165), X(173,181), X(189,197), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157),
+  X(165,173), X(181,189), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145),
+  X(149,153), X(157,161), X(165,169), X(173,177), X(181,185), X(189,193),
+  X(197,201), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(185,189), X(193,197), X(3,131),
+  X(67,195), X(3,67), X(131,195), X(35,99), X(99,163), X(35,99), X(35,67),
+  X(99,131), X(163,195), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147),
+  X(19,83), X(51,115), X(115,179), X(51,115), X(19,51), X(83,115), X(147,179),
+  X(19,35), X(51,67), X(83,99), X(115,131), X(147,163), X(179,195), X(3,19),
+  X(35,51), X(67,83), X(99,115), X(131,147), X(163,179), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139),
+  X(171,203), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(123,187), X(59,123), X(27,59), X(91,123), X(155,187), X(27,43),
+  X(59,75), X(91,107), X(123,139), X(155,171), X(187,203), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(139,155), X(171,187), X(3,11), X(19,27), X(35,43),
+  X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155),
+  X(163,171), X(179,187), X(195,203), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,103), X(103,167), X(39,103), X(39,71), X(103,135), X(167,199), X(7,39),
+  X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119), X(119,183),
+  X(55,119), X(23,55), X(87,119), X(151,183), X(23,39), X(55,71), X(87,103),
+  X(119,135), X(151,167), X(183,199), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(167,183), X(15,79), X(79,143), X(15,79), X(47,111), X(111,175),
+  X(47,111), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159), X(31,95),
+  X(63,127), X(127,191), X(63,127), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159), X(167,175),
+  X(183,191), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51),
+  X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99), X(103,107),
+  X(111,115), X(119,123), X(127,131), X(135,139), X(143,147), X(151,155),
+  X(159,163), X(167,171), X(175,179), X(183,187), X(191,195), X(199,203), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(187,191), X(195,199), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(185,187), X(189,191), X(193,195), X(197,199), X(201,203),
+  X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162), X(34,98),
+  X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162), X(18,82),
+  X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50), X(82,114),
+  X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(10,138),
+  X(74,202), X(10,74), X(138,202), X(42,106), X(106,170), X(42,106), X(42,74),
+  X(106,138), X(170,202), X(10,42), X(74,106), X(138,170), X(26,90), X(90,154),
+  X(26,90), X(58,122), X(122,186), X(58,122), X(26,58), X(90,122), X(154,186),
+  X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(186,202), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(194,202), X(6,134), X(70,198), X(6,70),
+  X(134,198), X(38,102), X(102,166), X(38,102), X(38,70), X(102,134), X(166,198),
+  X(6,38), X(70,102), X(134,166), X(22,86), X(86,150), X(22,86), X(54,118),
+  X(118,182), X(54,118), X(22,54), X(86,118), X(150,182), X(22,38), X(54,70),
+  X(86,102), X(118,134), X(150,166), X(182,198), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(166,182), X(14,78), X(78,142), X(14,78), X(46,110),
+  X(110,174), X(46,110), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158),
+  X(30,94), X(62,126), X(126,190), X(62,126), X(30,62), X(94,126), X(158,190),
+  X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134),
+  X(142,150), X(158,166), X(174,182), X(190,198), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(166,174), X(182,190), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42),
+  X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(190,194),
+  X(198,202), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(154,158),
+  X(162,166), X(170,174), X(178,182), X(186,190), X(194,198), X(4,132),
+  X(68,196), X(4,68), X(132,196), X(36,100), X(100,164), X(36,100), X(36,68),
+  X(100,132), X(164,196), X(4,36), X(68,100), X(132,164), X(20,84), X(84,148),
+  X(20,84), X(52,116), X(116,180), X(52,116), X(20,52), X(84,116), X(148,180),
+  X(20,36), X(52,68), X(84,100), X(116,132), X(148,164), X(180,196), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(132,148), X(164,180), X(12,76), X(76,140),
+  X(12,76), X(44,108), X(108,172), X(44,108), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60),
+  X(92,124), X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(172,188), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100),
+  X(108,116), X(124,132), X(140,148), X(156,164), X(172,180), X(188,196),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(8,136),
+  X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104), X(40,72),
+  X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,88), X(88,152),
+  X(24,88), X(56,120), X(120,184), X(56,120), X(24,56), X(88,120), X(152,184),
+  X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200), X(8,24),
+  X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(112,176), X(48,112), X(16,48), X(80,112), X(144,176),
+  X(32,96), X(96,160), X(32,96), X(64,128), X(128,192), X(64,128), X(32,64),
+  X(96,128), X(160,192), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160),
+  X(176,192), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104),
+  X(112,120), X(128,136), X(144,152), X(160,168), X(176,184), X(192,200),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(136,144), X(152,160), X(168,176), X(184,192), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(120,122), X(124,126), X(128,130), X(132,134), X(136,138),
+  X(140,142), X(144,146), X(148,150), X(152,154), X(156,158), X(160,162),
+  X(164,166), X(168,170), X(172,174), X(176,178), X(180,182), X(184,186),
+  X(188,190), X(192,194), X(196,198), X(200,202), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(174,176),
+  X(178,180), X(182,184), X(186,188), X(190,192), X(194,196), X(198,200), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202)
+};
+M(204) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,137),
+  X(73,201), X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73),
+  X(105,137), X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153),
+  X(25,89), X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185),
+  X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(193,201), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(117,181), X(53,117), X(21,53), X(85,117), X(149,181), X(21,37), X(53,69),
+  X(85,101), X(117,133), X(149,165), X(181,197), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(165,181), X(13,77), X(77,141), X(13,77), X(45,109),
+  X(109,173), X(45,109), X(13,45), X(77,109), X(141,173), X(29,93), X(93,157),
+  X(29,93), X(61,125), X(125,189), X(61,125), X(29,61), X(93,125), X(157,189),
+  X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(13,21),
+  X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133),
+  X(141,149), X(157,165), X(173,181), X(189,197), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157),
+  X(165,173), X(181,189), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145),
+  X(149,153), X(157,161), X(165,169), X(173,177), X(181,185), X(189,193),
+  X(197,201), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(185,189), X(193,197), X(3,131),
+  X(67,195), X(3,67), X(131,195), X(35,99), X(99,163), X(35,99), X(35,67),
+  X(99,131), X(163,195), X(3,35), X(67,99), X(131,163), X(19,83), X(83,147),
+  X(19,83), X(51,115), X(115,179), X(51,115), X(19,51), X(83,115), X(147,179),
+  X(19,35), X(51,67), X(83,99), X(115,131), X(147,163), X(179,195), X(3,19),
+  X(35,51), X(67,83), X(99,115), X(131,147), X(163,179), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139),
+  X(171,203), X(11,43), X(75,107), X(139,171), X(27,91), X(91,155), X(27,91),
+  X(59,123), X(123,187), X(59,123), X(27,59), X(91,123), X(155,187), X(27,43),
+  X(59,75), X(91,107), X(123,139), X(155,171), X(187,203), X(11,27), X(43,59),
+  X(75,91), X(107,123), X(139,155), X(171,187), X(3,11), X(19,27), X(35,43),
+  X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155),
+  X(163,171), X(179,187), X(195,203), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,103), X(103,167), X(39,103), X(39,71), X(103,135), X(167,199), X(7,39),
+  X(71,103), X(135,167), X(23,87), X(87,151), X(23,87), X(55,119), X(119,183),
+  X(55,119), X(23,55), X(87,119), X(151,183), X(23,39), X(55,71), X(87,103),
+  X(119,135), X(151,167), X(183,199), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(167,183), X(15,79), X(79,143), X(15,79), X(47,111), X(111,175),
+  X(47,111), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159), X(31,95),
+  X(63,127), X(127,191), X(63,127), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(7,15), X(23,31), X(39,47), X(55,63),
+  X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159), X(167,175),
+  X(183,191), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51),
+  X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99), X(103,107),
+  X(111,115), X(119,123), X(127,131), X(135,139), X(143,147), X(151,155),
+  X(159,163), X(167,171), X(175,179), X(183,187), X(191,195), X(199,203), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(187,191), X(195,199), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(185,187), X(189,191), X(193,195), X(197,199), X(201,203),
+  X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162), X(34,98),
+  X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162), X(18,82),
+  X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50), X(82,114),
+  X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(10,138),
+  X(74,202), X(10,74), X(138,202), X(42,106), X(106,170), X(42,106), X(42,74),
+  X(106,138), X(170,202), X(10,42), X(74,106), X(138,170), X(26,90), X(90,154),
+  X(26,90), X(58,122), X(122,186), X(58,122), X(26,58), X(90,122), X(154,186),
+  X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(186,202), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(194,202), X(6,134), X(70,198), X(6,70),
+  X(134,198), X(38,102), X(102,166), X(38,102), X(38,70), X(102,134), X(166,198),
+  X(6,38), X(70,102), X(134,166), X(22,86), X(86,150), X(22,86), X(54,118),
+  X(118,182), X(54,118), X(22,54), X(86,118), X(150,182), X(22,38), X(54,70),
+  X(86,102), X(118,134), X(150,166), X(182,198), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(166,182), X(14,78), X(78,142), X(14,78), X(46,110),
+  X(110,174), X(46,110), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158),
+  X(30,94), X(62,126), X(126,190), X(62,126), X(30,62), X(94,126), X(158,190),
+  X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134),
+  X(142,150), X(158,166), X(174,182), X(190,198), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(166,174), X(182,190), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42),
+  X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(190,194),
+  X(198,202), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(154,158),
+  X(162,166), X(170,174), X(178,182), X(186,190), X(194,198), X(4,132),
+  X(68,196), X(4,68), X(132,196), X(36,100), X(100,164), X(36,100), X(36,68),
+  X(100,132), X(164,196), X(4,36), X(68,100), X(132,164), X(20,84), X(84,148),
+  X(20,84), X(52,116), X(116,180), X(52,116), X(20,52), X(84,116), X(148,180),
+  X(20,36), X(52,68), X(84,100), X(116,132), X(148,164), X(180,196), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(132,148), X(164,180), X(12,140), X(76,204),
+  X(12,76), X(140,204), X(44,108), X(108,172), X(44,108), X(44,76), X(108,140),
+  X(172,204), X(12,44), X(76,108), X(140,172), X(28,92), X(92,156), X(28,92),
+  X(60,124), X(124,188), X(60,124), X(28,60), X(92,124), X(156,188), X(28,44),
+  X(60,76), X(92,108), X(124,140), X(156,172), X(188,204), X(12,28), X(44,60),
+  X(76,92), X(108,124), X(140,156), X(172,188), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156),
+  X(164,172), X(180,188), X(196,204), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,104), X(104,168), X(40,104), X(40,72), X(104,136), X(168,200), X(8,40),
+  X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120), X(120,184),
+  X(56,120), X(24,56), X(88,120), X(152,184), X(24,40), X(56,72), X(88,104),
+  X(120,136), X(152,168), X(184,200), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(168,184), X(16,80), X(80,144), X(16,80), X(48,112), X(112,176),
+  X(48,112), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160), X(32,96),
+  X(64,128), X(128,192), X(64,128), X(32,64), X(96,128), X(160,192), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152),
+  X(160,168), X(176,184), X(192,200), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(104,108),
+  X(112,116), X(120,124), X(128,132), X(136,140), X(144,148), X(152,156),
+  X(160,164), X(168,172), X(176,180), X(184,188), X(192,196), X(200,204), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(132,136), X(140,144), X(148,152), X(156,160), X(164,168), X(172,176),
+  X(180,184), X(188,192), X(196,200), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(110,112), X(114,116), X(118,120), X(122,124), X(126,128), X(130,132),
+  X(134,136), X(138,140), X(142,144), X(146,148), X(150,152), X(154,156),
+  X(158,160), X(162,164), X(166,168), X(170,172), X(174,176), X(178,180),
+  X(182,184), X(186,188), X(190,192), X(194,196), X(198,200), X(202,204), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204)
+};
+M(205) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,137),
+  X(73,201), X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73),
+  X(105,137), X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153),
+  X(25,89), X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185),
+  X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(193,201), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(117,181), X(53,117), X(21,53), X(85,117), X(149,181), X(21,37), X(53,69),
+  X(85,101), X(117,133), X(149,165), X(181,197), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(165,181), X(13,141), X(77,205), X(13,77), X(141,205),
+  X(45,109), X(109,173), X(45,109), X(45,77), X(109,141), X(173,205), X(13,45),
+  X(77,109), X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(125,189),
+  X(61,125), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77), X(93,109),
+  X(125,141), X(157,173), X(189,205), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(141,157), X(173,189), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(165,173),
+  X(181,189), X(197,205), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(177,181), X(185,189),
+  X(193,197), X(201,205), X(3,131), X(67,195), X(3,67), X(131,195), X(35,99),
+  X(99,163), X(35,99), X(35,67), X(99,131), X(163,195), X(3,35), X(67,99),
+  X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179), X(51,115),
+  X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99), X(115,131),
+  X(147,163), X(179,195), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107), X(107,171),
+  X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107), X(139,171),
+  X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123), X(27,59),
+  X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171),
+  X(187,203), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(131,139), X(147,155), X(163,171), X(179,187), X(195,203),
+  X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167), X(39,103),
+  X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167), X(23,87),
+  X(87,151), X(23,87), X(55,119), X(119,183), X(55,119), X(23,55), X(87,119),
+  X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(15,79),
+  X(79,143), X(15,79), X(47,111), X(111,175), X(47,111), X(15,47), X(79,111),
+  X(143,175), X(31,95), X(95,159), X(31,95), X(63,127), X(127,191), X(63,127),
+  X(31,63), X(95,127), X(159,191), X(15,31), X(47,63), X(79,95), X(111,127),
+  X(143,159), X(175,191), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87),
+  X(95,103), X(111,119), X(127,135), X(143,151), X(159,167), X(175,183),
+  X(191,199), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(167,175), X(183,191),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(143,147), X(151,155), X(159,163), X(167,171),
+  X(175,179), X(183,187), X(191,195), X(199,203), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189),
+  X(191,193), X(195,197), X(199,201), X(203,205), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(141,143), X(145,147), X(149,151),
+  X(153,155), X(157,159), X(161,163), X(165,167), X(169,171), X(173,175),
+  X(177,179), X(181,183), X(185,187), X(189,191), X(193,195), X(197,199),
+  X(201,203), X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162),
+  X(34,98), X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50),
+  X(82,114), X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162),
+  X(178,194), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(10,138), X(74,202), X(10,74), X(138,202), X(42,106), X(106,170), X(42,106),
+  X(42,74), X(106,138), X(170,202), X(10,42), X(74,106), X(138,170), X(26,90),
+  X(90,154), X(26,90), X(58,122), X(122,186), X(58,122), X(26,58), X(90,122),
+  X(154,186), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(186,202),
+  X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(2,10),
+  X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122),
+  X(130,138), X(146,154), X(162,170), X(178,186), X(194,202), X(6,134),
+  X(70,198), X(6,70), X(134,198), X(38,102), X(102,166), X(38,102), X(38,70),
+  X(102,134), X(166,198), X(6,38), X(70,102), X(134,166), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(118,182), X(54,118), X(22,54), X(86,118), X(150,182),
+  X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(14,78), X(78,142),
+  X(14,78), X(46,110), X(110,174), X(46,110), X(14,46), X(78,110), X(142,174),
+  X(30,94), X(94,158), X(30,94), X(62,126), X(126,190), X(62,126), X(30,62),
+  X(94,126), X(158,190), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158),
+  X(174,190), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102),
+  X(110,118), X(126,134), X(142,150), X(158,166), X(174,182), X(190,198),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(126,130), X(134,138),
+  X(142,146), X(150,154), X(158,162), X(166,170), X(174,178), X(182,186),
+  X(190,194), X(198,202), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(4,132), X(68,196), X(4,68), X(132,196), X(36,100), X(100,164),
+  X(36,100), X(36,68), X(100,132), X(164,196), X(4,36), X(68,100), X(132,164),
+  X(20,84), X(84,148), X(20,84), X(52,116), X(116,180), X(52,116), X(20,52),
+  X(84,116), X(148,180), X(20,36), X(52,68), X(84,100), X(116,132), X(148,164),
+  X(180,196), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(164,180),
+  X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172), X(44,108),
+  X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172), X(28,92),
+  X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60), X(92,124),
+  X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172), X(188,204),
+  X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124),
+  X(132,140), X(148,156), X(164,172), X(180,188), X(196,204), X(8,136),
+  X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104), X(40,72),
+  X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,88), X(88,152),
+  X(24,88), X(56,120), X(120,184), X(56,120), X(24,56), X(88,120), X(152,184),
+  X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200), X(8,24),
+  X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(16,80), X(80,144),
+  X(16,80), X(48,112), X(112,176), X(48,112), X(16,48), X(80,112), X(144,176),
+  X(32,96), X(96,160), X(32,96), X(64,128), X(128,192), X(64,128), X(32,64),
+  X(96,128), X(160,192), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160),
+  X(176,192), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104),
+  X(112,120), X(128,136), X(144,152), X(160,168), X(176,184), X(192,200),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(136,144), X(152,160), X(168,176), X(184,192), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84),
+  X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(136,140), X(144,148), X(152,156), X(160,164), X(168,172), X(176,180),
+  X(184,188), X(192,196), X(200,204), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(112,113), X(114,115),
+  X(116,117), X(118,119), X(120,121), X(122,123), X(124,125), X(126,127),
+  X(128,129), X(130,131), X(132,133), X(134,135), X(136,137), X(138,139),
+  X(140,141), X(142,143), X(144,145), X(146,147), X(148,149), X(150,151),
+  X(152,153), X(154,155), X(156,157), X(158,159), X(160,161), X(162,163),
+  X(164,165), X(166,167), X(168,169), X(170,171), X(172,173), X(174,175),
+  X(176,177), X(178,179), X(180,181), X(182,183), X(184,185), X(186,187),
+  X(188,189), X(190,191), X(192,193), X(194,195), X(196,197), X(198,199),
+  X(200,201), X(202,203), X(204,205), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202), X(203,204)
+};
+M(206) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,137),
+  X(73,201), X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73),
+  X(105,137), X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153),
+  X(25,89), X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185),
+  X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(193,201), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(117,181), X(53,117), X(21,53), X(85,117), X(149,181), X(21,37), X(53,69),
+  X(85,101), X(117,133), X(149,165), X(181,197), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(165,181), X(13,141), X(77,205), X(13,77), X(141,205),
+  X(45,109), X(109,173), X(45,109), X(45,77), X(109,141), X(173,205), X(13,45),
+  X(77,109), X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(125,189),
+  X(61,125), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77), X(93,109),
+  X(125,141), X(157,173), X(189,205), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(141,157), X(173,189), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(165,173),
+  X(181,189), X(197,205), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(177,181), X(185,189),
+  X(193,197), X(201,205), X(3,131), X(67,195), X(3,67), X(131,195), X(35,99),
+  X(99,163), X(35,99), X(35,67), X(99,131), X(163,195), X(3,35), X(67,99),
+  X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179), X(51,115),
+  X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99), X(115,131),
+  X(147,163), X(179,195), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107), X(107,171),
+  X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107), X(139,171),
+  X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123), X(27,59),
+  X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171),
+  X(187,203), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(131,139), X(147,155), X(163,171), X(179,187), X(195,203),
+  X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167), X(39,103),
+  X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167), X(23,87),
+  X(87,151), X(23,87), X(55,119), X(119,183), X(55,119), X(23,55), X(87,119),
+  X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(15,79),
+  X(79,143), X(15,79), X(47,111), X(111,175), X(47,111), X(15,47), X(79,111),
+  X(143,175), X(31,95), X(95,159), X(31,95), X(63,127), X(127,191), X(63,127),
+  X(31,63), X(95,127), X(159,191), X(15,31), X(47,63), X(79,95), X(111,127),
+  X(143,159), X(175,191), X(15,23), X(31,39), X(47,55), X(63,71), X(79,87),
+  X(95,103), X(111,119), X(127,135), X(143,151), X(159,167), X(175,183),
+  X(191,199), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95),
+  X(103,111), X(119,127), X(135,143), X(151,159), X(167,175), X(183,191),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(143,147), X(151,155), X(159,163), X(167,171),
+  X(175,179), X(183,187), X(191,195), X(199,203), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189),
+  X(191,193), X(195,197), X(199,201), X(203,205), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(141,143), X(145,147), X(149,151),
+  X(153,155), X(157,159), X(161,163), X(165,167), X(169,171), X(173,175),
+  X(177,179), X(181,183), X(185,187), X(189,191), X(193,195), X(197,199),
+  X(201,203), X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162),
+  X(34,98), X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50),
+  X(82,114), X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162),
+  X(178,194), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(10,138), X(74,202), X(10,74), X(138,202), X(42,106), X(106,170), X(42,106),
+  X(42,74), X(106,138), X(170,202), X(10,42), X(74,106), X(138,170), X(26,90),
+  X(90,154), X(26,90), X(58,122), X(122,186), X(58,122), X(26,58), X(90,122),
+  X(154,186), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(186,202),
+  X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(2,10),
+  X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122),
+  X(130,138), X(146,154), X(162,170), X(178,186), X(194,202), X(6,134),
+  X(70,198), X(6,70), X(134,198), X(38,102), X(102,166), X(38,102), X(38,70),
+  X(102,134), X(166,198), X(6,38), X(70,102), X(134,166), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(118,182), X(54,118), X(22,54), X(86,118), X(150,182),
+  X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(14,142), X(78,206),
+  X(14,78), X(142,206), X(46,110), X(110,174), X(46,110), X(46,78), X(110,142),
+  X(174,206), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94),
+  X(62,126), X(126,190), X(62,126), X(30,62), X(94,126), X(158,190), X(30,46),
+  X(62,78), X(94,110), X(126,142), X(158,174), X(190,206), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(166,174), X(182,190), X(198,206), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(4,132), X(68,196), X(4,68), X(132,196), X(36,100),
+  X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36), X(68,100),
+  X(132,164), X(20,84), X(84,148), X(20,84), X(52,116), X(116,180), X(52,116),
+  X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100), X(116,132),
+  X(148,164), X(180,196), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(164,180), X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172),
+  X(44,108), X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60),
+  X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172),
+  X(188,204), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(196,204),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104),
+  X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,88),
+  X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56), X(88,120),
+  X(152,184), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(16,80),
+  X(80,144), X(16,80), X(48,112), X(112,176), X(48,112), X(16,48), X(80,112),
+  X(144,176), X(32,96), X(96,160), X(32,96), X(64,128), X(128,192), X(64,128),
+  X(32,64), X(96,128), X(160,192), X(16,32), X(48,64), X(80,96), X(112,128),
+  X(144,160), X(176,192), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88),
+  X(96,104), X(112,120), X(128,136), X(144,152), X(160,168), X(176,184),
+  X(192,200), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(152,160), X(168,176), X(184,192),
+  X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68),
+  X(72,76), X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124),
+  X(128,132), X(136,140), X(144,148), X(152,156), X(160,164), X(168,172),
+  X(176,180), X(184,188), X(192,196), X(200,204), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(120,122), X(124,126), X(128,130), X(132,134), X(136,138),
+  X(140,142), X(144,146), X(148,150), X(152,154), X(156,158), X(160,162),
+  X(164,166), X(168,170), X(172,174), X(176,178), X(180,182), X(184,186),
+  X(188,190), X(192,194), X(196,198), X(200,202), X(204,206), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(178,180), X(182,184), X(186,188), X(190,192), X(194,196),
+  X(198,200), X(202,204), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(187,188), X(189,190),
+  X(191,192), X(193,194), X(195,196), X(197,198), X(199,200), X(201,202),
+  X(203,204), X(205,206)
+};
+M(207) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,137),
+  X(73,201), X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73),
+  X(105,137), X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153),
+  X(25,89), X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185),
+  X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(193,201), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(117,181), X(53,117), X(21,53), X(85,117), X(149,181), X(21,37), X(53,69),
+  X(85,101), X(117,133), X(149,165), X(181,197), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(165,181), X(13,141), X(77,205), X(13,77), X(141,205),
+  X(45,109), X(109,173), X(45,109), X(45,77), X(109,141), X(173,205), X(13,45),
+  X(77,109), X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(125,189),
+  X(61,125), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77), X(93,109),
+  X(125,141), X(157,173), X(189,205), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(141,157), X(173,189), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(165,173),
+  X(181,189), X(197,205), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(177,181), X(185,189),
+  X(193,197), X(201,205), X(3,131), X(67,195), X(3,67), X(131,195), X(35,99),
+  X(99,163), X(35,99), X(35,67), X(99,131), X(163,195), X(3,35), X(67,99),
+  X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179), X(51,115),
+  X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99), X(115,131),
+  X(147,163), X(179,195), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107), X(107,171),
+  X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107), X(139,171),
+  X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123), X(27,59),
+  X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171),
+  X(187,203), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(131,139), X(147,155), X(163,171), X(179,187), X(195,203),
+  X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167), X(39,103),
+  X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167), X(23,87),
+  X(87,151), X(23,87), X(55,119), X(119,183), X(55,119), X(23,55), X(87,119),
+  X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(15,143),
+  X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111), X(47,79),
+  X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159),
+  X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127), X(159,191),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(199,207), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(185,187), X(189,191), X(193,195), X(197,199), X(201,203),
+  X(205,207), X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162),
+  X(34,98), X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50),
+  X(82,114), X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162),
+  X(178,194), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(10,138), X(74,202), X(10,74), X(138,202), X(42,106), X(106,170), X(42,106),
+  X(42,74), X(106,138), X(170,202), X(10,42), X(74,106), X(138,170), X(26,90),
+  X(90,154), X(26,90), X(58,122), X(122,186), X(58,122), X(26,58), X(90,122),
+  X(154,186), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(186,202),
+  X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(2,10),
+  X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122),
+  X(130,138), X(146,154), X(162,170), X(178,186), X(194,202), X(6,134),
+  X(70,198), X(6,70), X(134,198), X(38,102), X(102,166), X(38,102), X(38,70),
+  X(102,134), X(166,198), X(6,38), X(70,102), X(134,166), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(118,182), X(54,118), X(22,54), X(86,118), X(150,182),
+  X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(14,142), X(78,206),
+  X(14,78), X(142,206), X(46,110), X(110,174), X(46,110), X(46,78), X(110,142),
+  X(174,206), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94),
+  X(62,126), X(126,190), X(62,126), X(30,62), X(94,126), X(158,190), X(30,46),
+  X(62,78), X(94,110), X(126,142), X(158,174), X(190,206), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(166,174), X(182,190), X(198,206), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(4,132), X(68,196), X(4,68), X(132,196), X(36,100),
+  X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36), X(68,100),
+  X(132,164), X(20,84), X(84,148), X(20,84), X(52,116), X(116,180), X(52,116),
+  X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100), X(116,132),
+  X(148,164), X(180,196), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(164,180), X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172),
+  X(44,108), X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60),
+  X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172),
+  X(188,204), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(196,204),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104),
+  X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,88),
+  X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56), X(88,120),
+  X(152,184), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(16,80),
+  X(80,144), X(16,80), X(48,112), X(112,176), X(48,112), X(16,48), X(80,112),
+  X(144,176), X(32,96), X(96,160), X(32,96), X(64,128), X(128,192), X(64,128),
+  X(32,64), X(96,128), X(160,192), X(16,32), X(48,64), X(80,96), X(112,128),
+  X(144,160), X(176,192), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88),
+  X(96,104), X(112,120), X(128,136), X(144,152), X(160,168), X(176,184),
+  X(192,200), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(152,160), X(168,176), X(184,192),
+  X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68),
+  X(72,76), X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124),
+  X(128,132), X(136,140), X(144,148), X(152,156), X(160,164), X(168,172),
+  X(176,180), X(184,188), X(192,196), X(200,204), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(120,122), X(124,126), X(128,130), X(132,134), X(136,138),
+  X(140,142), X(144,146), X(148,150), X(152,154), X(156,158), X(160,162),
+  X(164,166), X(168,170), X(172,174), X(176,178), X(180,182), X(184,186),
+  X(188,190), X(192,194), X(196,198), X(200,202), X(204,206), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(178,180), X(182,184), X(186,188), X(190,192), X(194,196),
+  X(198,200), X(202,204), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(142,143),
+  X(144,145), X(146,147), X(148,149), X(150,151), X(152,153), X(154,155),
+  X(156,157), X(158,159), X(160,161), X(162,163), X(164,165), X(166,167),
+  X(168,169), X(170,171), X(172,173), X(174,175), X(176,177), X(178,179),
+  X(180,181), X(182,183), X(184,185), X(186,187), X(188,189), X(190,191),
+  X(192,193), X(194,195), X(196,197), X(198,199), X(200,201), X(202,203),
+  X(204,205), X(206,207), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(187,188), X(189,190),
+  X(191,192), X(193,194), X(195,196), X(197,198), X(199,200), X(201,202),
+  X(203,204), X(205,206)
+};
+M(208) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,81),
+  X(81,145), X(17,81), X(49,113), X(113,177), X(49,113), X(17,49), X(81,113),
+  X(145,177), X(17,33), X(49,65), X(81,97), X(113,129), X(145,161), X(177,193),
+  X(1,17), X(33,49), X(65,81), X(97,113), X(129,145), X(161,177), X(9,137),
+  X(73,201), X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73),
+  X(105,137), X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153),
+  X(25,89), X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185),
+  X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25),
+  X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(1,9), X(17,25),
+  X(33,41), X(49,57), X(65,73), X(81,89), X(97,105), X(113,121), X(129,137),
+  X(145,153), X(161,169), X(177,185), X(193,201), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197),
+  X(5,37), X(69,101), X(133,165), X(21,85), X(85,149), X(21,85), X(53,117),
+  X(117,181), X(53,117), X(21,53), X(85,117), X(149,181), X(21,37), X(53,69),
+  X(85,101), X(117,133), X(149,165), X(181,197), X(5,21), X(37,53), X(69,85),
+  X(101,117), X(133,149), X(165,181), X(13,141), X(77,205), X(13,77), X(141,205),
+  X(45,109), X(109,173), X(45,109), X(45,77), X(109,141), X(173,205), X(13,45),
+  X(77,109), X(141,173), X(29,93), X(93,157), X(29,93), X(61,125), X(125,189),
+  X(61,125), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77), X(93,109),
+  X(125,141), X(157,173), X(189,205), X(13,29), X(45,61), X(77,93), X(109,125),
+  X(141,157), X(173,189), X(5,13), X(21,29), X(37,45), X(53,61), X(69,77),
+  X(85,93), X(101,109), X(117,125), X(133,141), X(149,157), X(165,173),
+  X(181,189), X(197,205), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(177,181), X(185,189),
+  X(193,197), X(201,205), X(3,131), X(67,195), X(3,67), X(131,195), X(35,99),
+  X(99,163), X(35,99), X(35,67), X(99,131), X(163,195), X(3,35), X(67,99),
+  X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179), X(51,115),
+  X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99), X(115,131),
+  X(147,163), X(179,195), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107), X(107,171),
+  X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107), X(139,171),
+  X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123), X(27,59),
+  X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171),
+  X(187,203), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(131,139), X(147,155), X(163,171), X(179,187), X(195,203),
+  X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167), X(39,103),
+  X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167), X(23,87),
+  X(87,151), X(23,87), X(55,119), X(119,183), X(55,119), X(23,55), X(87,119),
+  X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(15,143),
+  X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111), X(47,79),
+  X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159),
+  X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127), X(159,191),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(199,207), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(185,187), X(189,191), X(193,195), X(197,199), X(201,203),
+  X(205,207), X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162),
+  X(34,98), X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162),
+  X(18,82), X(82,146), X(18,82), X(50,114), X(114,178), X(50,114), X(18,50),
+  X(82,114), X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162),
+  X(178,194), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(10,138), X(74,202), X(10,74), X(138,202), X(42,106), X(106,170), X(42,106),
+  X(42,74), X(106,138), X(170,202), X(10,42), X(74,106), X(138,170), X(26,90),
+  X(90,154), X(26,90), X(58,122), X(122,186), X(58,122), X(26,58), X(90,122),
+  X(154,186), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(186,202),
+  X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(2,10),
+  X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122),
+  X(130,138), X(146,154), X(162,170), X(178,186), X(194,202), X(6,134),
+  X(70,198), X(6,70), X(134,198), X(38,102), X(102,166), X(38,102), X(38,70),
+  X(102,134), X(166,198), X(6,38), X(70,102), X(134,166), X(22,86), X(86,150),
+  X(22,86), X(54,118), X(118,182), X(54,118), X(22,54), X(86,118), X(150,182),
+  X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(14,142), X(78,206),
+  X(14,78), X(142,206), X(46,110), X(110,174), X(46,110), X(46,78), X(110,142),
+  X(174,206), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94),
+  X(62,126), X(126,190), X(62,126), X(30,62), X(94,126), X(158,190), X(30,46),
+  X(62,78), X(94,110), X(126,142), X(158,174), X(190,206), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(166,174), X(182,190), X(198,206), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(4,132), X(68,196), X(4,68), X(132,196), X(36,100),
+  X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36), X(68,100),
+  X(132,164), X(20,84), X(84,148), X(20,84), X(52,116), X(116,180), X(52,116),
+  X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100), X(116,132),
+  X(148,164), X(180,196), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(164,180), X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172),
+  X(44,108), X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60),
+  X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172),
+  X(188,204), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(196,204),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104),
+  X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,88),
+  X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56), X(88,120),
+  X(152,184), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(16,144),
+  X(80,208), X(16,80), X(144,208), X(48,112), X(112,176), X(48,112), X(48,80),
+  X(112,144), X(176,208), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160),
+  X(32,96), X(64,128), X(128,192), X(64,128), X(32,64), X(96,128), X(160,192),
+  X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(168,176), X(184,192), X(200,208), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(204,208), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(110,112), X(114,116), X(118,120), X(122,124), X(126,128), X(130,132),
+  X(134,136), X(138,140), X(142,144), X(146,148), X(150,152), X(154,156),
+  X(158,160), X(162,164), X(166,168), X(170,172), X(174,176), X(178,180),
+  X(182,184), X(186,188), X(190,192), X(194,196), X(198,200), X(202,204),
+  X(206,208), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194), X(195,196), X(197,198), X(199,200), X(201,202), X(203,204),
+  X(205,206), X(207,208)
+};
+M(209) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(25,41),
+  X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(137,153), X(169,185), X(9,17), X(25,33), X(41,49),
+  X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145), X(153,161),
+  X(169,177), X(185,193), X(201,209), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(5,133), X(69,197), X(5,69), X(133,197), X(37,101),
+  X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37), X(69,101),
+  X(133,165), X(21,85), X(85,149), X(21,85), X(53,117), X(117,181), X(53,117),
+  X(21,53), X(85,117), X(149,181), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(149,165), X(181,197), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149),
+  X(165,181), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125), X(29,61),
+  X(93,125), X(157,189), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173),
+  X(189,205), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(3,131), X(67,195), X(3,67), X(131,195),
+  X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195), X(3,35),
+  X(67,99), X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179),
+  X(51,115), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99),
+  X(115,131), X(147,163), X(179,195), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(163,179), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107),
+  X(107,171), X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107),
+  X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123),
+  X(27,59), X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139),
+  X(155,171), X(187,203), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(179,187),
+  X(195,203), X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167),
+  X(39,103), X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167),
+  X(23,87), X(87,151), X(23,87), X(55,119), X(119,183), X(55,119), X(23,55),
+  X(87,119), X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167),
+  X(183,199), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111),
+  X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127),
+  X(159,191), X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(167,175), X(183,191), X(199,207), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(3,5), X(7,9), X(11,13), X(15,17),
+  X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49),
+  X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81),
+  X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105), X(107,109),
+  X(111,113), X(115,117), X(119,121), X(123,125), X(127,129), X(131,133),
+  X(135,137), X(139,141), X(143,145), X(147,149), X(151,153), X(155,157),
+  X(159,161), X(163,165), X(167,169), X(171,173), X(175,177), X(179,181),
+  X(183,185), X(187,189), X(191,193), X(195,197), X(199,201), X(203,205),
+  X(207,209), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27),
+  X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59),
+  X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91),
+  X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(117,119),
+  X(121,123), X(125,127), X(129,131), X(133,135), X(137,139), X(141,143),
+  X(145,147), X(149,151), X(153,155), X(157,159), X(161,163), X(165,167),
+  X(169,171), X(173,175), X(177,179), X(181,183), X(185,187), X(189,191),
+  X(193,195), X(197,199), X(201,203), X(205,207), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,98), X(98,162), X(34,98), X(34,66), X(98,130), X(162,194),
+  X(2,34), X(66,98), X(130,162), X(18,82), X(82,146), X(18,82), X(50,114),
+  X(114,178), X(50,114), X(18,50), X(82,114), X(146,178), X(18,34), X(50,66),
+  X(82,98), X(114,130), X(146,162), X(178,194), X(2,18), X(34,50), X(66,82),
+  X(98,114), X(130,146), X(162,178), X(10,138), X(74,202), X(10,74), X(138,202),
+  X(42,106), X(106,170), X(42,106), X(42,74), X(106,138), X(170,202), X(10,42),
+  X(74,106), X(138,170), X(26,90), X(90,154), X(26,90), X(58,122), X(122,186),
+  X(58,122), X(26,58), X(90,122), X(154,186), X(26,42), X(58,74), X(90,106),
+  X(122,138), X(154,170), X(186,202), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(138,154), X(170,186), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(194,202), X(6,134), X(70,198), X(6,70), X(134,198), X(38,102),
+  X(102,166), X(38,102), X(38,70), X(102,134), X(166,198), X(6,38), X(70,102),
+  X(134,166), X(22,86), X(86,150), X(22,86), X(54,118), X(118,182), X(54,118),
+  X(22,54), X(86,118), X(150,182), X(22,38), X(54,70), X(86,102), X(118,134),
+  X(150,166), X(182,198), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(166,182), X(14,142), X(78,206), X(14,78), X(142,206), X(46,110), X(110,174),
+  X(46,110), X(46,78), X(110,142), X(174,206), X(14,46), X(78,110), X(142,174),
+  X(30,94), X(94,158), X(30,94), X(62,126), X(126,190), X(62,126), X(30,62),
+  X(94,126), X(158,190), X(30,46), X(62,78), X(94,110), X(126,142), X(158,174),
+  X(190,206), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(198,206), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(186,190), X(194,198), X(202,206), X(4,132), X(68,196), X(4,68),
+  X(132,196), X(36,100), X(100,164), X(36,100), X(36,68), X(100,132), X(164,196),
+  X(4,36), X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116),
+  X(116,180), X(52,116), X(20,52), X(84,116), X(148,180), X(20,36), X(52,68),
+  X(84,100), X(116,132), X(148,164), X(180,196), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(164,180), X(12,140), X(76,204), X(12,76), X(140,204),
+  X(44,108), X(108,172), X(44,108), X(44,76), X(108,140), X(172,204), X(12,44),
+  X(76,108), X(140,172), X(28,92), X(92,156), X(28,92), X(60,124), X(124,188),
+  X(60,124), X(28,60), X(92,124), X(156,188), X(28,44), X(60,76), X(92,108),
+  X(124,140), X(156,172), X(188,204), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(140,156), X(172,188), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(196,204), X(8,136), X(72,200), X(8,72), X(136,200), X(40,104),
+  X(104,168), X(40,104), X(40,72), X(104,136), X(168,200), X(8,40), X(72,104),
+  X(136,168), X(24,88), X(88,152), X(24,88), X(56,120), X(120,184), X(56,120),
+  X(24,56), X(88,120), X(152,184), X(24,40), X(56,72), X(88,104), X(120,136),
+  X(152,168), X(184,200), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152),
+  X(168,184), X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176),
+  X(48,112), X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176),
+  X(32,96), X(96,160), X(32,96), X(64,128), X(128,192), X(64,128), X(32,64),
+  X(96,128), X(160,192), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176),
+  X(192,208), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(136,144), X(152,160), X(168,176), X(184,192), X(200,208), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(132,136), X(140,144), X(148,152), X(156,160), X(164,168), X(172,176),
+  X(180,184), X(188,192), X(196,200), X(204,208), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(174,176),
+  X(178,180), X(182,184), X(186,188), X(190,192), X(194,196), X(198,200),
+  X(202,204), X(206,208), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(142,143),
+  X(144,145), X(146,147), X(148,149), X(150,151), X(152,153), X(154,155),
+  X(156,157), X(158,159), X(160,161), X(162,163), X(164,165), X(166,167),
+  X(168,169), X(170,171), X(172,173), X(174,175), X(176,177), X(178,179),
+  X(180,181), X(182,183), X(184,185), X(186,187), X(188,189), X(190,191),
+  X(192,193), X(194,195), X(196,197), X(198,199), X(200,201), X(202,203),
+  X(204,205), X(206,207), X(208,209), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202), X(203,204), X(205,206), X(207,208)
+};
+M(210) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(25,41),
+  X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(137,153), X(169,185), X(9,17), X(25,33), X(41,49),
+  X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145), X(153,161),
+  X(169,177), X(185,193), X(201,209), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(5,133), X(69,197), X(5,69), X(133,197), X(37,101),
+  X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37), X(69,101),
+  X(133,165), X(21,85), X(85,149), X(21,85), X(53,117), X(117,181), X(53,117),
+  X(21,53), X(85,117), X(149,181), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(149,165), X(181,197), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149),
+  X(165,181), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125), X(29,61),
+  X(93,125), X(157,189), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173),
+  X(189,205), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(3,131), X(67,195), X(3,67), X(131,195),
+  X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195), X(3,35),
+  X(67,99), X(131,163), X(19,83), X(83,147), X(19,83), X(51,115), X(115,179),
+  X(51,115), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99),
+  X(115,131), X(147,163), X(179,195), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(163,179), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107),
+  X(107,171), X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107),
+  X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123),
+  X(27,59), X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139),
+  X(155,171), X(187,203), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(179,187),
+  X(195,203), X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167),
+  X(39,103), X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167),
+  X(23,87), X(87,151), X(23,87), X(55,119), X(119,183), X(55,119), X(23,55),
+  X(87,119), X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167),
+  X(183,199), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111),
+  X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127),
+  X(159,191), X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(167,175), X(183,191), X(199,207), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(3,5), X(7,9), X(11,13), X(15,17),
+  X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49),
+  X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81),
+  X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105), X(107,109),
+  X(111,113), X(115,117), X(119,121), X(123,125), X(127,129), X(131,133),
+  X(135,137), X(139,141), X(143,145), X(147,149), X(151,153), X(155,157),
+  X(159,161), X(163,165), X(167,169), X(171,173), X(175,177), X(179,181),
+  X(183,185), X(187,189), X(191,193), X(195,197), X(199,201), X(203,205),
+  X(207,209), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27),
+  X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59),
+  X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91),
+  X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(117,119),
+  X(121,123), X(125,127), X(129,131), X(133,135), X(137,139), X(141,143),
+  X(145,147), X(149,151), X(153,155), X(157,159), X(161,163), X(165,167),
+  X(169,171), X(173,175), X(177,179), X(181,183), X(185,187), X(189,191),
+  X(193,195), X(197,199), X(201,203), X(205,207), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,98), X(98,162), X(34,98), X(34,66), X(98,130), X(162,194),
+  X(2,34), X(66,98), X(130,162), X(18,146), X(82,210), X(18,82), X(146,210),
+  X(50,114), X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50),
+  X(82,114), X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146),
+  X(162,178), X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,106),
+  X(106,170), X(42,106), X(42,74), X(106,138), X(170,202), X(10,42), X(74,106),
+  X(138,170), X(26,90), X(90,154), X(26,90), X(58,122), X(122,186), X(58,122),
+  X(26,58), X(90,122), X(154,186), X(26,42), X(58,74), X(90,106), X(122,138),
+  X(154,170), X(186,202), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154),
+  X(170,186), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(106,114), X(122,130), X(138,146), X(154,162), X(170,178), X(186,194),
+  X(202,210), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(146,154), X(162,170), X(178,186),
+  X(194,202), X(6,134), X(70,198), X(6,70), X(134,198), X(38,102), X(102,166),
+  X(38,102), X(38,70), X(102,134), X(166,198), X(6,38), X(70,102), X(134,166),
+  X(22,86), X(86,150), X(22,86), X(54,118), X(118,182), X(54,118), X(22,54),
+  X(86,118), X(150,182), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166),
+  X(182,198), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182),
+  X(14,142), X(78,206), X(14,78), X(142,206), X(46,110), X(110,174), X(46,110),
+  X(46,78), X(110,142), X(174,206), X(14,46), X(78,110), X(142,174), X(30,94),
+  X(94,158), X(30,94), X(62,126), X(126,190), X(62,126), X(30,62), X(94,126),
+  X(158,190), X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(190,206),
+  X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(6,14),
+  X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126),
+  X(134,142), X(150,158), X(166,174), X(182,190), X(198,206), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(126,130), X(134,138),
+  X(142,146), X(150,154), X(158,162), X(166,170), X(174,178), X(182,186),
+  X(190,194), X(198,202), X(206,210), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(4,132), X(68,196), X(4,68), X(132,196), X(36,100),
+  X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36), X(68,100),
+  X(132,164), X(20,84), X(84,148), X(20,84), X(52,116), X(116,180), X(52,116),
+  X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100), X(116,132),
+  X(148,164), X(180,196), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(164,180), X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172),
+  X(44,108), X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60),
+  X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172),
+  X(188,204), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(196,204),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104),
+  X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,88),
+  X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56), X(88,120),
+  X(152,184), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(16,144),
+  X(80,208), X(16,80), X(144,208), X(48,112), X(112,176), X(48,112), X(48,80),
+  X(112,144), X(176,208), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160),
+  X(32,96), X(64,128), X(128,192), X(64,128), X(32,64), X(96,128), X(160,192),
+  X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(168,176), X(184,192), X(200,208), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(204,208), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82),
+  X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110),
+  X(112,114), X(116,118), X(120,122), X(124,126), X(128,130), X(132,134),
+  X(136,138), X(140,142), X(144,146), X(148,150), X(152,154), X(156,158),
+  X(160,162), X(164,166), X(168,170), X(172,174), X(176,178), X(180,182),
+  X(184,186), X(188,190), X(192,194), X(196,198), X(200,202), X(204,206),
+  X(208,210), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210)
+};
+M(211) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(25,41),
+  X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(137,153), X(169,185), X(9,17), X(25,33), X(41,49),
+  X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145), X(153,161),
+  X(169,177), X(185,193), X(201,209), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(5,133), X(69,197), X(5,69), X(133,197), X(37,101),
+  X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37), X(69,101),
+  X(133,165), X(21,85), X(85,149), X(21,85), X(53,117), X(117,181), X(53,117),
+  X(21,53), X(85,117), X(149,181), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(149,165), X(181,197), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149),
+  X(165,181), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125), X(29,61),
+  X(93,125), X(157,189), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173),
+  X(189,205), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(3,131), X(67,195), X(3,67), X(131,195),
+  X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195), X(3,35),
+  X(67,99), X(131,163), X(19,147), X(83,211), X(19,83), X(147,211), X(51,115),
+  X(115,179), X(51,115), X(51,83), X(115,147), X(179,211), X(19,51), X(83,115),
+  X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147), X(163,179),
+  X(195,211), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107), X(107,171),
+  X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107), X(139,171),
+  X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123), X(27,59),
+  X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171),
+  X(187,203), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187),
+  X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(107,115),
+  X(123,131), X(139,147), X(155,163), X(171,179), X(187,195), X(203,211),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(131,139), X(147,155), X(163,171), X(179,187), X(195,203),
+  X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167), X(39,103),
+  X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167), X(23,87),
+  X(87,151), X(23,87), X(55,119), X(119,183), X(55,119), X(23,55), X(87,119),
+  X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(15,143),
+  X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111), X(47,79),
+  X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159),
+  X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127), X(159,191),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(199,207), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(175,179), X(183,187),
+  X(191,195), X(199,203), X(207,211), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191),
+  X(195,199), X(203,207), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162), X(34,98),
+  X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162), X(18,146),
+  X(82,210), X(18,82), X(146,210), X(50,114), X(114,178), X(50,114), X(50,82),
+  X(114,146), X(178,210), X(18,50), X(82,114), X(146,178), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(10,138), X(74,202),
+  X(10,74), X(138,202), X(42,106), X(106,170), X(42,106), X(42,74), X(106,138),
+  X(170,202), X(10,42), X(74,106), X(138,170), X(26,90), X(90,154), X(26,90),
+  X(58,122), X(122,186), X(58,122), X(26,58), X(90,122), X(154,186), X(26,42),
+  X(58,74), X(90,106), X(122,138), X(154,170), X(186,202), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(170,186), X(10,18), X(26,34), X(42,50),
+  X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162),
+  X(170,178), X(186,194), X(202,210), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(194,202), X(6,134), X(70,198), X(6,70), X(134,198), X(38,102),
+  X(102,166), X(38,102), X(38,70), X(102,134), X(166,198), X(6,38), X(70,102),
+  X(134,166), X(22,86), X(86,150), X(22,86), X(54,118), X(118,182), X(54,118),
+  X(22,54), X(86,118), X(150,182), X(22,38), X(54,70), X(86,102), X(118,134),
+  X(150,166), X(182,198), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(166,182), X(14,142), X(78,206), X(14,78), X(142,206), X(46,110), X(110,174),
+  X(46,110), X(46,78), X(110,142), X(174,206), X(14,46), X(78,110), X(142,174),
+  X(30,94), X(94,158), X(30,94), X(62,126), X(126,190), X(62,126), X(30,62),
+  X(94,126), X(158,190), X(30,46), X(62,78), X(94,110), X(126,142), X(158,174),
+  X(190,206), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(198,206),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(158,162), X(166,170),
+  X(174,178), X(182,186), X(190,194), X(198,202), X(206,210), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(4,132), X(68,196), X(4,68), X(132,196),
+  X(36,100), X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36),
+  X(68,100), X(132,164), X(20,84), X(84,148), X(20,84), X(52,116), X(116,180),
+  X(52,116), X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(180,196), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(132,148), X(164,180), X(12,140), X(76,204), X(12,76), X(140,204), X(44,108),
+  X(108,172), X(44,108), X(44,76), X(108,140), X(172,204), X(12,44), X(76,108),
+  X(140,172), X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124),
+  X(28,60), X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140),
+  X(156,172), X(188,204), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(172,188), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(132,140), X(148,156), X(164,172), X(180,188),
+  X(196,204), X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168),
+  X(40,104), X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168),
+  X(24,88), X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56),
+  X(88,120), X(152,184), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168),
+  X(184,200), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184),
+  X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176), X(48,112),
+  X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176), X(32,96),
+  X(96,160), X(32,96), X(64,128), X(128,192), X(64,128), X(32,64), X(96,128),
+  X(160,192), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(152,160), X(168,176), X(184,192), X(200,208), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(204,208), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82),
+  X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110),
+  X(112,114), X(116,118), X(120,122), X(124,126), X(128,130), X(132,134),
+  X(136,138), X(140,142), X(144,146), X(148,150), X(152,154), X(156,158),
+  X(160,162), X(164,166), X(168,170), X(172,174), X(176,178), X(180,182),
+  X(184,186), X(188,190), X(192,194), X(196,198), X(200,202), X(204,206),
+  X(208,210), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(187,188), X(189,190),
+  X(191,192), X(193,194), X(195,196), X(197,198), X(199,200), X(201,202),
+  X(203,204), X(205,206), X(207,208), X(209,210)
+};
+M(212) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(25,41),
+  X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(137,153), X(169,185), X(9,17), X(25,33), X(41,49),
+  X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145), X(153,161),
+  X(169,177), X(185,193), X(201,209), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(5,133), X(69,197), X(5,69), X(133,197), X(37,101),
+  X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37), X(69,101),
+  X(133,165), X(21,85), X(85,149), X(21,85), X(53,117), X(117,181), X(53,117),
+  X(21,53), X(85,117), X(149,181), X(21,37), X(53,69), X(85,101), X(117,133),
+  X(149,165), X(181,197), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149),
+  X(165,181), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125), X(29,61),
+  X(93,125), X(157,189), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173),
+  X(189,205), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(3,131), X(67,195), X(3,67), X(131,195),
+  X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195), X(3,35),
+  X(67,99), X(131,163), X(19,147), X(83,211), X(19,83), X(147,211), X(51,115),
+  X(115,179), X(51,115), X(51,83), X(115,147), X(179,211), X(19,51), X(83,115),
+  X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147), X(163,179),
+  X(195,211), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107), X(107,171),
+  X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107), X(139,171),
+  X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123), X(27,59),
+  X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171),
+  X(187,203), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187),
+  X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(107,115),
+  X(123,131), X(139,147), X(155,163), X(171,179), X(187,195), X(203,211),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(131,139), X(147,155), X(163,171), X(179,187), X(195,203),
+  X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167), X(39,103),
+  X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167), X(23,87),
+  X(87,151), X(23,87), X(55,119), X(119,183), X(55,119), X(23,55), X(87,119),
+  X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(15,143),
+  X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111), X(47,79),
+  X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159),
+  X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127), X(159,191),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(199,207), X(7,11), X(15,19), X(23,27),
+  X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91),
+  X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(175,179), X(183,187),
+  X(191,195), X(199,203), X(207,211), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191),
+  X(195,199), X(203,207), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162), X(34,98),
+  X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162), X(18,146),
+  X(82,210), X(18,82), X(146,210), X(50,114), X(114,178), X(50,114), X(50,82),
+  X(114,146), X(178,210), X(18,50), X(82,114), X(146,178), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(10,138), X(74,202),
+  X(10,74), X(138,202), X(42,106), X(106,170), X(42,106), X(42,74), X(106,138),
+  X(170,202), X(10,42), X(74,106), X(138,170), X(26,90), X(90,154), X(26,90),
+  X(58,122), X(122,186), X(58,122), X(26,58), X(90,122), X(154,186), X(26,42),
+  X(58,74), X(90,106), X(122,138), X(154,170), X(186,202), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(170,186), X(10,18), X(26,34), X(42,50),
+  X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162),
+  X(170,178), X(186,194), X(202,210), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(194,202), X(6,134), X(70,198), X(6,70), X(134,198), X(38,102),
+  X(102,166), X(38,102), X(38,70), X(102,134), X(166,198), X(6,38), X(70,102),
+  X(134,166), X(22,86), X(86,150), X(22,86), X(54,118), X(118,182), X(54,118),
+  X(22,54), X(86,118), X(150,182), X(22,38), X(54,70), X(86,102), X(118,134),
+  X(150,166), X(182,198), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(166,182), X(14,142), X(78,206), X(14,78), X(142,206), X(46,110), X(110,174),
+  X(46,110), X(46,78), X(110,142), X(174,206), X(14,46), X(78,110), X(142,174),
+  X(30,94), X(94,158), X(30,94), X(62,126), X(126,190), X(62,126), X(30,62),
+  X(94,126), X(158,190), X(30,46), X(62,78), X(94,110), X(126,142), X(158,174),
+  X(190,206), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(198,206),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(158,162), X(166,170),
+  X(174,178), X(182,186), X(190,194), X(198,202), X(206,210), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(4,132), X(68,196), X(4,68), X(132,196),
+  X(36,100), X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36),
+  X(68,100), X(132,164), X(20,148), X(84,212), X(20,84), X(148,212), X(52,116),
+  X(116,180), X(52,116), X(52,84), X(116,148), X(180,212), X(20,52), X(84,116),
+  X(148,180), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(164,180),
+  X(196,212), X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172),
+  X(44,108), X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60),
+  X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172),
+  X(188,204), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(140,148), X(156,164), X(172,180), X(188,196), X(204,212),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(196,204),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104),
+  X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,88),
+  X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56), X(88,120),
+  X(152,184), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(16,144),
+  X(80,208), X(16,80), X(144,208), X(48,112), X(112,176), X(48,112), X(48,80),
+  X(112,144), X(176,208), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160),
+  X(32,96), X(64,128), X(128,192), X(64,128), X(32,64), X(96,128), X(160,192),
+  X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(168,176), X(184,192), X(200,208), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(168,172), X(176,180), X(184,188),
+  X(192,196), X(200,204), X(208,212), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212)
+};
+M(213) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(25,41),
+  X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(137,153), X(169,185), X(9,17), X(25,33), X(41,49),
+  X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145), X(153,161),
+  X(169,177), X(185,193), X(201,209), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(5,133), X(69,197), X(5,69), X(133,197), X(37,101),
+  X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37), X(69,101),
+  X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173), X(45,109),
+  X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173), X(29,93),
+  X(93,157), X(29,93), X(61,125), X(125,189), X(61,125), X(29,61), X(93,125),
+  X(157,189), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173), X(189,205),
+  X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(13,21),
+  X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133),
+  X(141,149), X(157,165), X(173,181), X(189,197), X(205,213), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(3,131), X(67,195), X(3,67),
+  X(131,195), X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195),
+  X(3,35), X(67,99), X(131,163), X(19,147), X(83,211), X(19,83), X(147,211),
+  X(51,115), X(115,179), X(51,115), X(51,83), X(115,147), X(179,211), X(19,51),
+  X(83,115), X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(195,211), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107),
+  X(107,171), X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107),
+  X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123),
+  X(27,59), X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139),
+  X(155,171), X(187,203), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(155,163), X(171,179), X(187,195),
+  X(203,211), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(179,187),
+  X(195,203), X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167),
+  X(39,103), X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167),
+  X(23,87), X(87,151), X(23,87), X(55,119), X(119,183), X(55,119), X(23,55),
+  X(87,119), X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167),
+  X(183,199), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111),
+  X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127),
+  X(159,191), X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(167,175), X(183,191), X(199,207), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(175,179), X(183,187),
+  X(191,195), X(199,203), X(207,211), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191),
+  X(195,199), X(203,207), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189),
+  X(191,193), X(195,197), X(199,201), X(203,205), X(207,209), X(211,213), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(201,203), X(205,207), X(209,211), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,98), X(98,162), X(34,98), X(34,66), X(98,130), X(162,194),
+  X(2,34), X(66,98), X(130,162), X(18,146), X(82,210), X(18,82), X(146,210),
+  X(50,114), X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50),
+  X(82,114), X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146),
+  X(162,178), X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,106),
+  X(106,170), X(42,106), X(42,74), X(106,138), X(170,202), X(10,42), X(74,106),
+  X(138,170), X(26,90), X(90,154), X(26,90), X(58,122), X(122,186), X(58,122),
+  X(26,58), X(90,122), X(154,186), X(26,42), X(58,74), X(90,106), X(122,138),
+  X(154,170), X(186,202), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154),
+  X(170,186), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(106,114), X(122,130), X(138,146), X(154,162), X(170,178), X(186,194),
+  X(202,210), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(146,154), X(162,170), X(178,186),
+  X(194,202), X(6,134), X(70,198), X(6,70), X(134,198), X(38,102), X(102,166),
+  X(38,102), X(38,70), X(102,134), X(166,198), X(6,38), X(70,102), X(134,166),
+  X(22,86), X(86,150), X(22,86), X(54,118), X(118,182), X(54,118), X(22,54),
+  X(86,118), X(150,182), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166),
+  X(182,198), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182),
+  X(14,142), X(78,206), X(14,78), X(142,206), X(46,110), X(110,174), X(46,110),
+  X(46,78), X(110,142), X(174,206), X(14,46), X(78,110), X(142,174), X(30,94),
+  X(94,158), X(30,94), X(62,126), X(126,190), X(62,126), X(30,62), X(94,126),
+  X(158,190), X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(190,206),
+  X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(6,14),
+  X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126),
+  X(134,142), X(150,158), X(166,174), X(182,190), X(198,206), X(6,10), X(14,18),
+  X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82),
+  X(86,90), X(94,98), X(102,106), X(110,114), X(118,122), X(126,130), X(134,138),
+  X(142,146), X(150,154), X(158,162), X(166,170), X(174,178), X(182,186),
+  X(190,194), X(198,202), X(206,210), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(4,132), X(68,196), X(4,68), X(132,196), X(36,100),
+  X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36), X(68,100),
+  X(132,164), X(20,148), X(84,212), X(20,84), X(148,212), X(52,116), X(116,180),
+  X(52,116), X(52,84), X(116,148), X(180,212), X(20,52), X(84,116), X(148,180),
+  X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(164,180), X(196,212),
+  X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172), X(44,108),
+  X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172), X(28,92),
+  X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60), X(92,124),
+  X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172), X(188,204),
+  X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188), X(12,20),
+  X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116), X(124,132),
+  X(140,148), X(156,164), X(172,180), X(188,196), X(204,212), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(148,156), X(164,172), X(180,188), X(196,204), X(8,136), X(72,200), X(8,72),
+  X(136,200), X(40,104), X(104,168), X(40,104), X(40,72), X(104,136), X(168,200),
+  X(8,40), X(72,104), X(136,168), X(24,88), X(88,152), X(24,88), X(56,120),
+  X(120,184), X(56,120), X(24,56), X(88,120), X(152,184), X(24,40), X(56,72),
+  X(88,104), X(120,136), X(152,168), X(184,200), X(8,24), X(40,56), X(72,88),
+  X(104,120), X(136,152), X(168,184), X(16,144), X(80,208), X(16,80), X(144,208),
+  X(48,112), X(112,176), X(48,112), X(48,80), X(112,144), X(176,208), X(16,48),
+  X(80,112), X(144,176), X(32,96), X(96,160), X(32,96), X(64,128), X(128,192),
+  X(64,128), X(32,64), X(96,128), X(160,192), X(32,48), X(64,80), X(96,112),
+  X(128,144), X(160,176), X(192,208), X(16,32), X(48,64), X(80,96), X(112,128),
+  X(144,160), X(176,192), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44),
+  X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100),
+  X(104,108), X(112,116), X(120,124), X(128,132), X(136,140), X(144,148),
+  X(152,156), X(160,164), X(168,172), X(176,180), X(184,188), X(192,196),
+  X(200,204), X(208,212), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202), X(203,204), X(205,206), X(207,208), X(209,210), X(211,212)
+};
+M(214) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(25,41),
+  X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(137,153), X(169,185), X(9,17), X(25,33), X(41,49),
+  X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145), X(153,161),
+  X(169,177), X(185,193), X(201,209), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(5,133), X(69,197), X(5,69), X(133,197), X(37,101),
+  X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37), X(69,101),
+  X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173), X(45,109),
+  X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173), X(29,93),
+  X(93,157), X(29,93), X(61,125), X(125,189), X(61,125), X(29,61), X(93,125),
+  X(157,189), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173), X(189,205),
+  X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(13,21),
+  X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133),
+  X(141,149), X(157,165), X(173,181), X(189,197), X(205,213), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(3,131), X(67,195), X(3,67),
+  X(131,195), X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195),
+  X(3,35), X(67,99), X(131,163), X(19,147), X(83,211), X(19,83), X(147,211),
+  X(51,115), X(115,179), X(51,115), X(51,83), X(115,147), X(179,211), X(19,51),
+  X(83,115), X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(195,211), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107),
+  X(107,171), X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107),
+  X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123),
+  X(27,59), X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139),
+  X(155,171), X(187,203), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(155,163), X(171,179), X(187,195),
+  X(203,211), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(179,187),
+  X(195,203), X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167),
+  X(39,103), X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167),
+  X(23,87), X(87,151), X(23,87), X(55,119), X(119,183), X(55,119), X(23,55),
+  X(87,119), X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167),
+  X(183,199), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111),
+  X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,95),
+  X(95,159), X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127),
+  X(159,191), X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(167,175), X(183,191), X(199,207), X(7,11), X(15,19),
+  X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83),
+  X(87,91), X(95,99), X(103,107), X(111,115), X(119,123), X(127,131), X(135,139),
+  X(143,147), X(151,155), X(159,163), X(167,171), X(175,179), X(183,187),
+  X(191,195), X(199,203), X(207,211), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191),
+  X(195,199), X(203,207), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189),
+  X(191,193), X(195,197), X(199,201), X(203,205), X(207,209), X(211,213), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(201,203), X(205,207), X(209,211), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,98), X(98,162), X(34,98), X(34,66), X(98,130), X(162,194),
+  X(2,34), X(66,98), X(130,162), X(18,146), X(82,210), X(18,82), X(146,210),
+  X(50,114), X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50),
+  X(82,114), X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146),
+  X(162,178), X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,106),
+  X(106,170), X(42,106), X(42,74), X(106,138), X(170,202), X(10,42), X(74,106),
+  X(138,170), X(26,90), X(90,154), X(26,90), X(58,122), X(122,186), X(58,122),
+  X(26,58), X(90,122), X(154,186), X(26,42), X(58,74), X(90,106), X(122,138),
+  X(154,170), X(186,202), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154),
+  X(170,186), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(106,114), X(122,130), X(138,146), X(154,162), X(170,178), X(186,194),
+  X(202,210), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(146,154), X(162,170), X(178,186),
+  X(194,202), X(6,134), X(70,198), X(6,70), X(134,198), X(38,102), X(102,166),
+  X(38,102), X(38,70), X(102,134), X(166,198), X(6,38), X(70,102), X(134,166),
+  X(22,150), X(86,214), X(22,86), X(150,214), X(54,118), X(118,182), X(54,118),
+  X(54,86), X(118,150), X(182,214), X(22,54), X(86,118), X(150,182), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(198,214), X(14,142),
+  X(78,206), X(14,78), X(142,206), X(46,110), X(110,174), X(46,110), X(46,78),
+  X(110,142), X(174,206), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158),
+  X(30,94), X(62,126), X(126,190), X(62,126), X(30,62), X(94,126), X(158,190),
+  X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(190,206), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134), X(142,150),
+  X(158,166), X(174,182), X(190,198), X(206,214), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(166,174), X(182,190), X(198,206), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(210,214), X(4,132), X(68,196), X(4,68), X(132,196),
+  X(36,100), X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36),
+  X(68,100), X(132,164), X(20,148), X(84,212), X(20,84), X(148,212), X(52,116),
+  X(116,180), X(52,116), X(52,84), X(116,148), X(180,212), X(20,52), X(84,116),
+  X(148,180), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(164,180),
+  X(196,212), X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172),
+  X(44,108), X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60),
+  X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172),
+  X(188,204), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(140,148), X(156,164), X(172,180), X(188,196), X(204,212),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(196,204),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104),
+  X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,88),
+  X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56), X(88,120),
+  X(152,184), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(16,144),
+  X(80,208), X(16,80), X(144,208), X(48,112), X(112,176), X(48,112), X(48,80),
+  X(112,144), X(176,208), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160),
+  X(32,96), X(64,128), X(128,192), X(64,128), X(32,64), X(96,128), X(160,192),
+  X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(168,176), X(184,192), X(200,208), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(168,172), X(176,180), X(184,188),
+  X(192,196), X(200,204), X(208,212), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(120,122), X(124,126), X(128,130), X(132,134), X(136,138),
+  X(140,142), X(144,146), X(148,150), X(152,154), X(156,158), X(160,162),
+  X(164,166), X(168,170), X(172,174), X(176,178), X(180,182), X(184,186),
+  X(188,190), X(192,194), X(196,198), X(200,202), X(204,206), X(208,210),
+  X(212,214), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214)
+};
+M(215) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(25,41),
+  X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(137,153), X(169,185), X(9,17), X(25,33), X(41,49),
+  X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145), X(153,161),
+  X(169,177), X(185,193), X(201,209), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(5,133), X(69,197), X(5,69), X(133,197), X(37,101),
+  X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37), X(69,101),
+  X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173), X(45,109),
+  X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173), X(29,93),
+  X(93,157), X(29,93), X(61,125), X(125,189), X(61,125), X(29,61), X(93,125),
+  X(157,189), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173), X(189,205),
+  X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(13,21),
+  X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133),
+  X(141,149), X(157,165), X(173,181), X(189,197), X(205,213), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(3,131), X(67,195), X(3,67),
+  X(131,195), X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195),
+  X(3,35), X(67,99), X(131,163), X(19,147), X(83,211), X(19,83), X(147,211),
+  X(51,115), X(115,179), X(51,115), X(51,83), X(115,147), X(179,211), X(19,51),
+  X(83,115), X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(195,211), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107),
+  X(107,171), X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107),
+  X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123),
+  X(27,59), X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139),
+  X(155,171), X(187,203), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(155,163), X(171,179), X(187,195),
+  X(203,211), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(179,187),
+  X(195,203), X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167),
+  X(39,103), X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167),
+  X(23,151), X(87,215), X(23,87), X(151,215), X(55,119), X(119,183), X(55,119),
+  X(55,87), X(119,151), X(183,215), X(23,55), X(87,119), X(151,183), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215), X(15,143),
+  X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111), X(47,79),
+  X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159),
+  X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127), X(159,191),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(207,215), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159),
+  X(167,175), X(183,191), X(199,207), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191),
+  X(195,199), X(203,207), X(211,215), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(185,187), X(189,191), X(193,195), X(197,199), X(201,203),
+  X(205,207), X(209,211), X(213,215), X(2,130), X(66,194), X(2,66), X(130,194),
+  X(34,98), X(98,162), X(34,98), X(34,66), X(98,130), X(162,194), X(2,34),
+  X(66,98), X(130,162), X(18,146), X(82,210), X(18,82), X(146,210), X(50,114),
+  X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50), X(82,114),
+  X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,106), X(106,170),
+  X(42,106), X(42,74), X(106,138), X(170,202), X(10,42), X(74,106), X(138,170),
+  X(26,90), X(90,154), X(26,90), X(58,122), X(122,186), X(58,122), X(26,58),
+  X(90,122), X(154,186), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170),
+  X(186,202), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(170,186),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114),
+  X(122,130), X(138,146), X(154,162), X(170,178), X(186,194), X(202,210),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(162,170), X(178,186), X(194,202),
+  X(6,134), X(70,198), X(6,70), X(134,198), X(38,102), X(102,166), X(38,102),
+  X(38,70), X(102,134), X(166,198), X(6,38), X(70,102), X(134,166), X(22,150),
+  X(86,214), X(22,86), X(150,214), X(54,118), X(118,182), X(54,118), X(54,86),
+  X(118,150), X(182,214), X(22,54), X(86,118), X(150,182), X(6,22), X(38,54),
+  X(70,86), X(102,118), X(134,150), X(166,182), X(198,214), X(14,142), X(78,206),
+  X(14,78), X(142,206), X(46,110), X(110,174), X(46,110), X(46,78), X(110,142),
+  X(174,206), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94),
+  X(62,126), X(126,190), X(62,126), X(30,62), X(94,126), X(158,190), X(30,46),
+  X(62,78), X(94,110), X(126,142), X(158,174), X(190,206), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(14,22), X(30,38), X(46,54),
+  X(62,70), X(78,86), X(94,102), X(110,118), X(126,134), X(142,150), X(158,166),
+  X(174,182), X(190,198), X(206,214), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(198,206), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(210,214), X(4,132), X(68,196), X(4,68), X(132,196),
+  X(36,100), X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36),
+  X(68,100), X(132,164), X(20,148), X(84,212), X(20,84), X(148,212), X(52,116),
+  X(116,180), X(52,116), X(52,84), X(116,148), X(180,212), X(20,52), X(84,116),
+  X(148,180), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(164,180),
+  X(196,212), X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172),
+  X(44,108), X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60),
+  X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172),
+  X(188,204), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(140,148), X(156,164), X(172,180), X(188,196), X(204,212),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(196,204),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104),
+  X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,88),
+  X(88,152), X(24,88), X(56,120), X(120,184), X(56,120), X(24,56), X(88,120),
+  X(152,184), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(16,144),
+  X(80,208), X(16,80), X(144,208), X(48,112), X(112,176), X(48,112), X(48,80),
+  X(112,144), X(176,208), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160),
+  X(32,96), X(64,128), X(128,192), X(64,128), X(32,64), X(96,128), X(160,192),
+  X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(168,176), X(184,192), X(200,208), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(168,172), X(176,180), X(184,188),
+  X(192,196), X(200,204), X(208,212), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(120,122), X(124,126), X(128,130), X(132,134), X(136,138),
+  X(140,142), X(144,146), X(148,150), X(152,154), X(156,158), X(160,162),
+  X(164,166), X(168,170), X(172,174), X(176,178), X(180,182), X(184,186),
+  X(188,190), X(192,194), X(196,198), X(200,202), X(204,206), X(208,210),
+  X(212,214), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202), X(203,204), X(205,206), X(207,208), X(209,210),
+  X(211,212), X(213,214)
+};
+M(216) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,89), X(89,153), X(25,89),
+  X(57,121), X(121,185), X(57,121), X(25,57), X(89,121), X(153,185), X(25,41),
+  X(57,73), X(89,105), X(121,137), X(153,169), X(185,201), X(9,25), X(41,57),
+  X(73,89), X(105,121), X(137,153), X(169,185), X(9,17), X(25,33), X(41,49),
+  X(57,65), X(73,81), X(89,97), X(105,113), X(121,129), X(137,145), X(153,161),
+  X(169,177), X(185,193), X(201,209), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(5,133), X(69,197), X(5,69), X(133,197), X(37,101),
+  X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37), X(69,101),
+  X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173), X(45,109),
+  X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173), X(29,93),
+  X(93,157), X(29,93), X(61,125), X(125,189), X(61,125), X(29,61), X(93,125),
+  X(157,189), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173), X(189,205),
+  X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(13,21),
+  X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133),
+  X(141,149), X(157,165), X(173,181), X(189,197), X(205,213), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(1,5), X(9,13), X(17,21),
+  X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85),
+  X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(3,131), X(67,195), X(3,67),
+  X(131,195), X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195),
+  X(3,35), X(67,99), X(131,163), X(19,147), X(83,211), X(19,83), X(147,211),
+  X(51,115), X(115,179), X(51,115), X(51,83), X(115,147), X(179,211), X(19,51),
+  X(83,115), X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(195,211), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107),
+  X(107,171), X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107),
+  X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123),
+  X(27,59), X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139),
+  X(155,171), X(187,203), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(155,163), X(171,179), X(187,195),
+  X(203,211), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(179,187),
+  X(195,203), X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167),
+  X(39,103), X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167),
+  X(23,151), X(87,215), X(23,87), X(151,215), X(55,119), X(119,183), X(55,119),
+  X(55,87), X(119,151), X(183,215), X(23,55), X(87,119), X(151,183), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215), X(15,143),
+  X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111), X(47,79),
+  X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159),
+  X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127), X(159,191),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(207,215), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159),
+  X(167,175), X(183,191), X(199,207), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191),
+  X(195,199), X(203,207), X(211,215), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(185,187), X(189,191), X(193,195), X(197,199), X(201,203),
+  X(205,207), X(209,211), X(213,215), X(2,130), X(66,194), X(2,66), X(130,194),
+  X(34,98), X(98,162), X(34,98), X(34,66), X(98,130), X(162,194), X(2,34),
+  X(66,98), X(130,162), X(18,146), X(82,210), X(18,82), X(146,210), X(50,114),
+  X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50), X(82,114),
+  X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,106), X(106,170),
+  X(42,106), X(42,74), X(106,138), X(170,202), X(10,42), X(74,106), X(138,170),
+  X(26,90), X(90,154), X(26,90), X(58,122), X(122,186), X(58,122), X(26,58),
+  X(90,122), X(154,186), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170),
+  X(186,202), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(170,186),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114),
+  X(122,130), X(138,146), X(154,162), X(170,178), X(186,194), X(202,210),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(162,170), X(178,186), X(194,202),
+  X(6,134), X(70,198), X(6,70), X(134,198), X(38,102), X(102,166), X(38,102),
+  X(38,70), X(102,134), X(166,198), X(6,38), X(70,102), X(134,166), X(22,150),
+  X(86,214), X(22,86), X(150,214), X(54,118), X(118,182), X(54,118), X(54,86),
+  X(118,150), X(182,214), X(22,54), X(86,118), X(150,182), X(6,22), X(38,54),
+  X(70,86), X(102,118), X(134,150), X(166,182), X(198,214), X(14,142), X(78,206),
+  X(14,78), X(142,206), X(46,110), X(110,174), X(46,110), X(46,78), X(110,142),
+  X(174,206), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94),
+  X(62,126), X(126,190), X(62,126), X(30,62), X(94,126), X(158,190), X(30,46),
+  X(62,78), X(94,110), X(126,142), X(158,174), X(190,206), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(14,22), X(30,38), X(46,54),
+  X(62,70), X(78,86), X(94,102), X(110,118), X(126,134), X(142,150), X(158,166),
+  X(174,182), X(190,198), X(206,214), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(198,206), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(210,214), X(4,132), X(68,196), X(4,68), X(132,196),
+  X(36,100), X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36),
+  X(68,100), X(132,164), X(20,148), X(84,212), X(20,84), X(148,212), X(52,116),
+  X(116,180), X(52,116), X(52,84), X(116,148), X(180,212), X(20,52), X(84,116),
+  X(148,180), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(164,180),
+  X(196,212), X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172),
+  X(44,108), X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60),
+  X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172),
+  X(188,204), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(140,148), X(156,164), X(172,180), X(188,196), X(204,212),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(196,204),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104),
+  X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,152),
+  X(88,216), X(24,88), X(152,216), X(56,120), X(120,184), X(56,120), X(56,88),
+  X(120,152), X(184,216), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56),
+  X(72,88), X(104,120), X(136,152), X(168,184), X(200,216), X(16,144), X(80,208),
+  X(16,80), X(144,208), X(48,112), X(112,176), X(48,112), X(48,80), X(112,144),
+  X(176,208), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160), X(32,96),
+  X(64,128), X(128,192), X(64,128), X(32,64), X(96,128), X(160,192), X(32,48),
+  X(64,80), X(96,112), X(128,144), X(160,176), X(192,208), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(176,192), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152), X(160,168),
+  X(176,184), X(192,200), X(208,216), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(212,216), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(110,112), X(114,116), X(118,120), X(122,124), X(126,128), X(130,132),
+  X(134,136), X(138,140), X(142,144), X(146,148), X(150,152), X(154,156),
+  X(158,160), X(162,164), X(166,168), X(170,172), X(174,176), X(178,180),
+  X(182,184), X(186,188), X(190,192), X(194,196), X(198,200), X(202,204),
+  X(206,208), X(210,212), X(214,216), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202), X(203,204), X(205,206), X(207,208), X(209,210), X(211,212),
+  X(213,214), X(215,216)
+};
+M(217) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89),
+  X(153,217), X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(201,217), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37),
+  X(69,101), X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125), X(29,61),
+  X(93,125), X(157,189), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173),
+  X(189,205), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117),
+  X(125,133), X(141,149), X(157,165), X(173,181), X(189,197), X(205,213),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(213,217), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(3,131), X(67,195), X(3,67),
+  X(131,195), X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195),
+  X(3,35), X(67,99), X(131,163), X(19,147), X(83,211), X(19,83), X(147,211),
+  X(51,115), X(115,179), X(51,115), X(51,83), X(115,147), X(179,211), X(19,51),
+  X(83,115), X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(195,211), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107),
+  X(107,171), X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107),
+  X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123),
+  X(27,59), X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139),
+  X(155,171), X(187,203), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(155,163), X(171,179), X(187,195),
+  X(203,211), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(179,187),
+  X(195,203), X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167),
+  X(39,103), X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167),
+  X(23,151), X(87,215), X(23,87), X(151,215), X(55,119), X(119,183), X(55,119),
+  X(55,87), X(119,151), X(183,215), X(23,55), X(87,119), X(151,183), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215), X(15,143),
+  X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111), X(47,79),
+  X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159),
+  X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127), X(159,191),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(207,215), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159),
+  X(167,175), X(183,191), X(199,207), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191),
+  X(195,199), X(203,207), X(211,215), X(3,5), X(7,9), X(11,13), X(15,17),
+  X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49),
+  X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81),
+  X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105), X(107,109),
+  X(111,113), X(115,117), X(119,121), X(123,125), X(127,129), X(131,133),
+  X(135,137), X(139,141), X(143,145), X(147,149), X(151,153), X(155,157),
+  X(159,161), X(163,165), X(167,169), X(171,173), X(175,177), X(179,181),
+  X(183,185), X(187,189), X(191,193), X(195,197), X(199,201), X(203,205),
+  X(207,209), X(211,213), X(215,217), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(185,187), X(189,191), X(193,195), X(197,199), X(201,203),
+  X(205,207), X(209,211), X(213,215), X(2,130), X(66,194), X(2,66), X(130,194),
+  X(34,98), X(98,162), X(34,98), X(34,66), X(98,130), X(162,194), X(2,34),
+  X(66,98), X(130,162), X(18,146), X(82,210), X(18,82), X(146,210), X(50,114),
+  X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50), X(82,114),
+  X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,106), X(106,170),
+  X(42,106), X(42,74), X(106,138), X(170,202), X(10,42), X(74,106), X(138,170),
+  X(26,90), X(90,154), X(26,90), X(58,122), X(122,186), X(58,122), X(26,58),
+  X(90,122), X(154,186), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170),
+  X(186,202), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(170,186),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114),
+  X(122,130), X(138,146), X(154,162), X(170,178), X(186,194), X(202,210),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(162,170), X(178,186), X(194,202),
+  X(6,134), X(70,198), X(6,70), X(134,198), X(38,102), X(102,166), X(38,102),
+  X(38,70), X(102,134), X(166,198), X(6,38), X(70,102), X(134,166), X(22,150),
+  X(86,214), X(22,86), X(150,214), X(54,118), X(118,182), X(54,118), X(54,86),
+  X(118,150), X(182,214), X(22,54), X(86,118), X(150,182), X(6,22), X(38,54),
+  X(70,86), X(102,118), X(134,150), X(166,182), X(198,214), X(14,142), X(78,206),
+  X(14,78), X(142,206), X(46,110), X(110,174), X(46,110), X(46,78), X(110,142),
+  X(174,206), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94),
+  X(62,126), X(126,190), X(62,126), X(30,62), X(94,126), X(158,190), X(30,46),
+  X(62,78), X(94,110), X(126,142), X(158,174), X(190,206), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(14,22), X(30,38), X(46,54),
+  X(62,70), X(78,86), X(94,102), X(110,118), X(126,134), X(142,150), X(158,166),
+  X(174,182), X(190,198), X(206,214), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(198,206), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(210,214), X(4,132), X(68,196), X(4,68), X(132,196),
+  X(36,100), X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36),
+  X(68,100), X(132,164), X(20,148), X(84,212), X(20,84), X(148,212), X(52,116),
+  X(116,180), X(52,116), X(52,84), X(116,148), X(180,212), X(20,52), X(84,116),
+  X(148,180), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(164,180),
+  X(196,212), X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172),
+  X(44,108), X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60),
+  X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172),
+  X(188,204), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(140,148), X(156,164), X(172,180), X(188,196), X(204,212),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(196,204),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104),
+  X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,152),
+  X(88,216), X(24,88), X(152,216), X(56,120), X(120,184), X(56,120), X(56,88),
+  X(120,152), X(184,216), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56),
+  X(72,88), X(104,120), X(136,152), X(168,184), X(200,216), X(16,144), X(80,208),
+  X(16,80), X(144,208), X(48,112), X(112,176), X(48,112), X(48,80), X(112,144),
+  X(176,208), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160), X(32,96),
+  X(64,128), X(128,192), X(64,128), X(32,64), X(96,128), X(160,192), X(32,48),
+  X(64,80), X(96,112), X(128,144), X(160,176), X(192,208), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(176,192), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152), X(160,168),
+  X(176,184), X(192,200), X(208,216), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(212,216), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(110,112), X(114,116), X(118,120), X(122,124), X(126,128), X(130,132),
+  X(134,136), X(138,140), X(142,144), X(146,148), X(150,152), X(154,156),
+  X(158,160), X(162,164), X(166,168), X(170,172), X(174,176), X(178,180),
+  X(182,184), X(186,188), X(190,192), X(194,196), X(198,200), X(202,204),
+  X(206,208), X(210,212), X(214,216), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153),
+  X(154,155), X(156,157), X(158,159), X(160,161), X(162,163), X(164,165),
+  X(166,167), X(168,169), X(170,171), X(172,173), X(174,175), X(176,177),
+  X(178,179), X(180,181), X(182,183), X(184,185), X(186,187), X(188,189),
+  X(190,191), X(192,193), X(194,195), X(196,197), X(198,199), X(200,201),
+  X(202,203), X(204,205), X(206,207), X(208,209), X(210,211), X(212,213),
+  X(214,215), X(216,217), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(187,188), X(189,190),
+  X(191,192), X(193,194), X(195,196), X(197,198), X(199,200), X(201,202),
+  X(203,204), X(205,206), X(207,208), X(209,210), X(211,212), X(213,214),
+  X(215,216)
+};
+M(218) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89),
+  X(153,217), X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(201,217), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37),
+  X(69,101), X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125), X(29,61),
+  X(93,125), X(157,189), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173),
+  X(189,205), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117),
+  X(125,133), X(141,149), X(157,165), X(173,181), X(189,197), X(205,213),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(213,217), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(3,131), X(67,195), X(3,67),
+  X(131,195), X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195),
+  X(3,35), X(67,99), X(131,163), X(19,147), X(83,211), X(19,83), X(147,211),
+  X(51,115), X(115,179), X(51,115), X(51,83), X(115,147), X(179,211), X(19,51),
+  X(83,115), X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(195,211), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107),
+  X(107,171), X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107),
+  X(139,171), X(27,91), X(91,155), X(27,91), X(59,123), X(123,187), X(59,123),
+  X(27,59), X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139),
+  X(155,171), X(187,203), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(155,163), X(171,179), X(187,195),
+  X(203,211), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(179,187),
+  X(195,203), X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167),
+  X(39,103), X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167),
+  X(23,151), X(87,215), X(23,87), X(151,215), X(55,119), X(119,183), X(55,119),
+  X(55,87), X(119,151), X(183,215), X(23,55), X(87,119), X(151,183), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215), X(15,143),
+  X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111), X(47,79),
+  X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159),
+  X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127), X(159,191),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(207,215), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159),
+  X(167,175), X(183,191), X(199,207), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191),
+  X(195,199), X(203,207), X(211,215), X(3,5), X(7,9), X(11,13), X(15,17),
+  X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49),
+  X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81),
+  X(83,85), X(87,89), X(91,93), X(95,97), X(99,101), X(103,105), X(107,109),
+  X(111,113), X(115,117), X(119,121), X(123,125), X(127,129), X(131,133),
+  X(135,137), X(139,141), X(143,145), X(147,149), X(151,153), X(155,157),
+  X(159,161), X(163,165), X(167,169), X(171,173), X(175,177), X(179,181),
+  X(183,185), X(187,189), X(191,193), X(195,197), X(199,201), X(203,205),
+  X(207,209), X(211,213), X(215,217), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(185,187), X(189,191), X(193,195), X(197,199), X(201,203),
+  X(205,207), X(209,211), X(213,215), X(2,130), X(66,194), X(2,66), X(130,194),
+  X(34,98), X(98,162), X(34,98), X(34,66), X(98,130), X(162,194), X(2,34),
+  X(66,98), X(130,162), X(18,146), X(82,210), X(18,82), X(146,210), X(50,114),
+  X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50), X(82,114),
+  X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,106), X(106,170),
+  X(42,106), X(42,74), X(106,138), X(170,202), X(10,42), X(74,106), X(138,170),
+  X(26,154), X(90,218), X(26,90), X(154,218), X(58,122), X(122,186), X(58,122),
+  X(58,90), X(122,154), X(186,218), X(26,58), X(90,122), X(154,186), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(202,218), X(2,10),
+  X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122),
+  X(130,138), X(146,154), X(162,170), X(178,186), X(194,202), X(210,218),
+  X(6,134), X(70,198), X(6,70), X(134,198), X(38,102), X(102,166), X(38,102),
+  X(38,70), X(102,134), X(166,198), X(6,38), X(70,102), X(134,166), X(22,150),
+  X(86,214), X(22,86), X(150,214), X(54,118), X(118,182), X(54,118), X(54,86),
+  X(118,150), X(182,214), X(22,54), X(86,118), X(150,182), X(6,22), X(38,54),
+  X(70,86), X(102,118), X(134,150), X(166,182), X(198,214), X(14,142), X(78,206),
+  X(14,78), X(142,206), X(46,110), X(110,174), X(46,110), X(46,78), X(110,142),
+  X(174,206), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158), X(30,94),
+  X(62,126), X(126,190), X(62,126), X(30,62), X(94,126), X(158,190), X(30,46),
+  X(62,78), X(94,110), X(126,142), X(158,174), X(190,206), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(14,22), X(30,38), X(46,54),
+  X(62,70), X(78,86), X(94,102), X(110,118), X(126,134), X(142,150), X(158,166),
+  X(174,182), X(190,198), X(206,214), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(198,206), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42),
+  X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(190,194),
+  X(198,202), X(206,210), X(214,218), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(210,214), X(4,132), X(68,196), X(4,68), X(132,196),
+  X(36,100), X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36),
+  X(68,100), X(132,164), X(20,148), X(84,212), X(20,84), X(148,212), X(52,116),
+  X(116,180), X(52,116), X(52,84), X(116,148), X(180,212), X(20,52), X(84,116),
+  X(148,180), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(164,180),
+  X(196,212), X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172),
+  X(44,108), X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60),
+  X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172),
+  X(188,204), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(140,148), X(156,164), X(172,180), X(188,196), X(204,212),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(196,204),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104),
+  X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,152),
+  X(88,216), X(24,88), X(152,216), X(56,120), X(120,184), X(56,120), X(56,88),
+  X(120,152), X(184,216), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56),
+  X(72,88), X(104,120), X(136,152), X(168,184), X(200,216), X(16,144), X(80,208),
+  X(16,80), X(144,208), X(48,112), X(112,176), X(48,112), X(48,80), X(112,144),
+  X(176,208), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160), X(32,96),
+  X(64,128), X(128,192), X(64,128), X(32,64), X(96,128), X(160,192), X(32,48),
+  X(64,80), X(96,112), X(128,144), X(160,176), X(192,208), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(176,192), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152), X(160,168),
+  X(176,184), X(192,200), X(208,216), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(212,216), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82),
+  X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110),
+  X(112,114), X(116,118), X(120,122), X(124,126), X(128,130), X(132,134),
+  X(136,138), X(140,142), X(144,146), X(148,150), X(152,154), X(156,158),
+  X(160,162), X(164,166), X(168,170), X(172,174), X(176,178), X(180,182),
+  X(184,186), X(188,190), X(192,194), X(196,198), X(200,202), X(204,206),
+  X(208,210), X(212,214), X(216,218), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(110,112), X(114,116), X(118,120), X(122,124), X(126,128), X(130,132),
+  X(134,136), X(138,140), X(142,144), X(146,148), X(150,152), X(154,156),
+  X(158,160), X(162,164), X(166,168), X(170,172), X(174,176), X(178,180),
+  X(182,184), X(186,188), X(190,192), X(194,196), X(198,200), X(202,204),
+  X(206,208), X(210,212), X(214,216), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202), X(203,204), X(205,206), X(207,208), X(209,210), X(211,212),
+  X(213,214), X(215,216), X(217,218)
+};
+M(219) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89),
+  X(153,217), X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(201,217), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37),
+  X(69,101), X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125), X(29,61),
+  X(93,125), X(157,189), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173),
+  X(189,205), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117),
+  X(125,133), X(141,149), X(157,165), X(173,181), X(189,197), X(205,213),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(213,217), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(3,131), X(67,195), X(3,67),
+  X(131,195), X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195),
+  X(3,35), X(67,99), X(131,163), X(19,147), X(83,211), X(19,83), X(147,211),
+  X(51,115), X(115,179), X(51,115), X(51,83), X(115,147), X(179,211), X(19,51),
+  X(83,115), X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(195,211), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107),
+  X(107,171), X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107),
+  X(139,171), X(27,155), X(91,219), X(27,91), X(155,219), X(59,123), X(123,187),
+  X(59,123), X(59,91), X(123,155), X(187,219), X(27,59), X(91,123), X(155,187),
+  X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187), X(203,219),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(131,139), X(147,155), X(163,171), X(179,187), X(195,203),
+  X(211,219), X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167),
+  X(39,103), X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167),
+  X(23,151), X(87,215), X(23,87), X(151,215), X(55,119), X(119,183), X(55,119),
+  X(55,87), X(119,151), X(183,215), X(23,55), X(87,119), X(151,183), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215), X(15,143),
+  X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111), X(47,79),
+  X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159),
+  X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127), X(159,191),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(207,215), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159),
+  X(167,175), X(183,191), X(199,207), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99),
+  X(103,107), X(111,115), X(119,123), X(127,131), X(135,139), X(143,147),
+  X(151,155), X(159,163), X(167,171), X(175,179), X(183,187), X(191,195),
+  X(199,203), X(207,211), X(215,219), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191),
+  X(195,199), X(203,207), X(211,215), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(185,187), X(189,191), X(193,195), X(197,199), X(201,203),
+  X(205,207), X(209,211), X(213,215), X(217,219), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,98), X(98,162), X(34,98), X(34,66), X(98,130), X(162,194),
+  X(2,34), X(66,98), X(130,162), X(18,146), X(82,210), X(18,82), X(146,210),
+  X(50,114), X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50),
+  X(82,114), X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146),
+  X(162,178), X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,106),
+  X(106,170), X(42,106), X(42,74), X(106,138), X(170,202), X(10,42), X(74,106),
+  X(138,170), X(26,154), X(90,218), X(26,90), X(154,218), X(58,122), X(122,186),
+  X(58,122), X(58,90), X(122,154), X(186,218), X(26,58), X(90,122), X(154,186),
+  X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(202,218),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(162,170), X(178,186), X(194,202),
+  X(210,218), X(6,134), X(70,198), X(6,70), X(134,198), X(38,102), X(102,166),
+  X(38,102), X(38,70), X(102,134), X(166,198), X(6,38), X(70,102), X(134,166),
+  X(22,150), X(86,214), X(22,86), X(150,214), X(54,118), X(118,182), X(54,118),
+  X(54,86), X(118,150), X(182,214), X(22,54), X(86,118), X(150,182), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(198,214), X(14,142),
+  X(78,206), X(14,78), X(142,206), X(46,110), X(110,174), X(46,110), X(46,78),
+  X(110,142), X(174,206), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158),
+  X(30,94), X(62,126), X(126,190), X(62,126), X(30,62), X(94,126), X(158,190),
+  X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(190,206), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134), X(142,150),
+  X(158,166), X(174,182), X(190,198), X(206,214), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(166,174), X(182,190), X(198,206), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(190,194),
+  X(198,202), X(206,210), X(214,218), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(210,214), X(4,132), X(68,196), X(4,68), X(132,196),
+  X(36,100), X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36),
+  X(68,100), X(132,164), X(20,148), X(84,212), X(20,84), X(148,212), X(52,116),
+  X(116,180), X(52,116), X(52,84), X(116,148), X(180,212), X(20,52), X(84,116),
+  X(148,180), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(164,180),
+  X(196,212), X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172),
+  X(44,108), X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172),
+  X(28,92), X(92,156), X(28,92), X(60,124), X(124,188), X(60,124), X(28,60),
+  X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172),
+  X(188,204), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100), X(108,116),
+  X(124,132), X(140,148), X(156,164), X(172,180), X(188,196), X(204,212),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(196,204),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104),
+  X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,152),
+  X(88,216), X(24,88), X(152,216), X(56,120), X(120,184), X(56,120), X(56,88),
+  X(120,152), X(184,216), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56),
+  X(72,88), X(104,120), X(136,152), X(168,184), X(200,216), X(16,144), X(80,208),
+  X(16,80), X(144,208), X(48,112), X(112,176), X(48,112), X(48,80), X(112,144),
+  X(176,208), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160), X(32,96),
+  X(64,128), X(128,192), X(64,128), X(32,64), X(96,128), X(160,192), X(32,48),
+  X(64,80), X(96,112), X(128,144), X(160,176), X(192,208), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(176,192), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152), X(160,168),
+  X(176,184), X(192,200), X(208,216), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(212,216), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82),
+  X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110),
+  X(112,114), X(116,118), X(120,122), X(124,126), X(128,130), X(132,134),
+  X(136,138), X(140,142), X(144,146), X(148,150), X(152,154), X(156,158),
+  X(160,162), X(164,166), X(168,170), X(172,174), X(176,178), X(180,182),
+  X(184,186), X(188,190), X(192,194), X(196,198), X(200,202), X(204,206),
+  X(208,210), X(212,214), X(216,218), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(110,112), X(114,116), X(118,120), X(122,124), X(126,128), X(130,132),
+  X(134,136), X(138,140), X(142,144), X(146,148), X(150,152), X(154,156),
+  X(158,160), X(162,164), X(166,168), X(170,172), X(174,176), X(178,180),
+  X(182,184), X(186,188), X(190,192), X(194,196), X(198,200), X(202,204),
+  X(206,208), X(210,212), X(214,216), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153),
+  X(154,155), X(156,157), X(158,159), X(160,161), X(162,163), X(164,165),
+  X(166,167), X(168,169), X(170,171), X(172,173), X(174,175), X(176,177),
+  X(178,179), X(180,181), X(182,183), X(184,185), X(186,187), X(188,189),
+  X(190,191), X(192,193), X(194,195), X(196,197), X(198,199), X(200,201),
+  X(202,203), X(204,205), X(206,207), X(208,209), X(210,211), X(212,213),
+  X(214,215), X(216,217), X(218,219), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202), X(203,204), X(205,206), X(207,208), X(209,210), X(211,212),
+  X(213,214), X(215,216), X(217,218)
+};
+M(220) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89),
+  X(153,217), X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(201,217), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37),
+  X(69,101), X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,93), X(93,157), X(29,93), X(61,125), X(125,189), X(61,125), X(29,61),
+  X(93,125), X(157,189), X(29,45), X(61,77), X(93,109), X(125,141), X(157,173),
+  X(189,205), X(13,29), X(45,61), X(77,93), X(109,125), X(141,157), X(173,189),
+  X(13,21), X(29,37), X(45,53), X(61,69), X(77,85), X(93,101), X(109,117),
+  X(125,133), X(141,149), X(157,165), X(173,181), X(189,197), X(205,213),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(213,217), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(3,131), X(67,195), X(3,67),
+  X(131,195), X(35,99), X(99,163), X(35,99), X(35,67), X(99,131), X(163,195),
+  X(3,35), X(67,99), X(131,163), X(19,147), X(83,211), X(19,83), X(147,211),
+  X(51,115), X(115,179), X(51,115), X(51,83), X(115,147), X(179,211), X(19,51),
+  X(83,115), X(147,179), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(195,211), X(11,139), X(75,203), X(11,75), X(139,203), X(43,107),
+  X(107,171), X(43,107), X(43,75), X(107,139), X(171,203), X(11,43), X(75,107),
+  X(139,171), X(27,155), X(91,219), X(27,91), X(155,219), X(59,123), X(123,187),
+  X(59,123), X(59,91), X(123,155), X(187,219), X(27,59), X(91,123), X(155,187),
+  X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187), X(203,219),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(131,139), X(147,155), X(163,171), X(179,187), X(195,203),
+  X(211,219), X(7,135), X(71,199), X(7,71), X(135,199), X(39,103), X(103,167),
+  X(39,103), X(39,71), X(103,135), X(167,199), X(7,39), X(71,103), X(135,167),
+  X(23,151), X(87,215), X(23,87), X(151,215), X(55,119), X(119,183), X(55,119),
+  X(55,87), X(119,151), X(183,215), X(23,55), X(87,119), X(151,183), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215), X(15,143),
+  X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111), X(47,79),
+  X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,95), X(95,159),
+  X(31,95), X(63,127), X(127,191), X(63,127), X(31,63), X(95,127), X(159,191),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(207,215), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159),
+  X(167,175), X(183,191), X(199,207), X(7,11), X(15,19), X(23,27), X(31,35),
+  X(39,43), X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99),
+  X(103,107), X(111,115), X(119,123), X(127,131), X(135,139), X(143,147),
+  X(151,155), X(159,163), X(167,171), X(175,179), X(183,187), X(191,195),
+  X(199,203), X(207,211), X(215,219), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191),
+  X(195,199), X(203,207), X(211,215), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(185,187), X(189,191), X(193,195), X(197,199), X(201,203),
+  X(205,207), X(209,211), X(213,215), X(217,219), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,98), X(98,162), X(34,98), X(34,66), X(98,130), X(162,194),
+  X(2,34), X(66,98), X(130,162), X(18,146), X(82,210), X(18,82), X(146,210),
+  X(50,114), X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50),
+  X(82,114), X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146),
+  X(162,178), X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,106),
+  X(106,170), X(42,106), X(42,74), X(106,138), X(170,202), X(10,42), X(74,106),
+  X(138,170), X(26,154), X(90,218), X(26,90), X(154,218), X(58,122), X(122,186),
+  X(58,122), X(58,90), X(122,154), X(186,218), X(26,58), X(90,122), X(154,186),
+  X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(202,218),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(162,170), X(178,186), X(194,202),
+  X(210,218), X(6,134), X(70,198), X(6,70), X(134,198), X(38,102), X(102,166),
+  X(38,102), X(38,70), X(102,134), X(166,198), X(6,38), X(70,102), X(134,166),
+  X(22,150), X(86,214), X(22,86), X(150,214), X(54,118), X(118,182), X(54,118),
+  X(54,86), X(118,150), X(182,214), X(22,54), X(86,118), X(150,182), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(198,214), X(14,142),
+  X(78,206), X(14,78), X(142,206), X(46,110), X(110,174), X(46,110), X(46,78),
+  X(110,142), X(174,206), X(14,46), X(78,110), X(142,174), X(30,94), X(94,158),
+  X(30,94), X(62,126), X(126,190), X(62,126), X(30,62), X(94,126), X(158,190),
+  X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(190,206), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134), X(142,150),
+  X(158,166), X(174,182), X(190,198), X(206,214), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(166,174), X(182,190), X(198,206), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(190,194),
+  X(198,202), X(206,210), X(214,218), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(210,214), X(4,132), X(68,196), X(4,68), X(132,196),
+  X(36,100), X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36),
+  X(68,100), X(132,164), X(20,148), X(84,212), X(20,84), X(148,212), X(52,116),
+  X(116,180), X(52,116), X(52,84), X(116,148), X(180,212), X(20,52), X(84,116),
+  X(148,180), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(164,180),
+  X(196,212), X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172),
+  X(44,108), X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172),
+  X(28,156), X(92,220), X(28,92), X(156,220), X(60,124), X(124,188), X(60,124),
+  X(60,92), X(124,156), X(188,220), X(28,60), X(92,124), X(156,188), X(12,28),
+  X(44,60), X(76,92), X(108,124), X(140,156), X(172,188), X(204,220), X(4,12),
+  X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124),
+  X(132,140), X(148,156), X(164,172), X(180,188), X(196,204), X(212,220),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104),
+  X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,152),
+  X(88,216), X(24,88), X(152,216), X(56,120), X(120,184), X(56,120), X(56,88),
+  X(120,152), X(184,216), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56),
+  X(72,88), X(104,120), X(136,152), X(168,184), X(200,216), X(16,144), X(80,208),
+  X(16,80), X(144,208), X(48,112), X(112,176), X(48,112), X(48,80), X(112,144),
+  X(176,208), X(16,48), X(80,112), X(144,176), X(32,96), X(96,160), X(32,96),
+  X(64,128), X(128,192), X(64,128), X(32,64), X(96,128), X(160,192), X(32,48),
+  X(64,80), X(96,112), X(128,144), X(160,176), X(192,208), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(176,192), X(16,24), X(32,40), X(48,56),
+  X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152), X(160,168),
+  X(176,184), X(192,200), X(208,216), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44),
+  X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100),
+  X(104,108), X(112,116), X(120,124), X(128,132), X(136,140), X(144,148),
+  X(152,156), X(160,164), X(168,172), X(176,180), X(184,188), X(192,196),
+  X(200,204), X(208,212), X(216,220), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(212,216), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(110,112), X(114,116), X(118,120), X(122,124), X(126,128), X(130,132),
+  X(134,136), X(138,140), X(142,144), X(146,148), X(150,152), X(154,156),
+  X(158,160), X(162,164), X(166,168), X(170,172), X(174,176), X(178,180),
+  X(182,184), X(186,188), X(190,192), X(194,196), X(198,200), X(202,204),
+  X(206,208), X(210,212), X(214,216), X(218,220), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202), X(203,204), X(205,206), X(207,208), X(209,210),
+  X(211,212), X(213,214), X(215,216), X(217,218), X(219,220)
+};
+M(221) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89),
+  X(153,217), X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(201,217), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37),
+  X(69,101), X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,157), X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125),
+  X(61,93), X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(201,205), X(209,213), X(217,221),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,99), X(99,163), X(35,99),
+  X(35,67), X(99,131), X(163,195), X(3,35), X(67,99), X(131,163), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83),
+  X(115,147), X(179,211), X(19,51), X(83,115), X(147,179), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139),
+  X(171,203), X(11,43), X(75,107), X(139,171), X(27,155), X(91,219), X(27,91),
+  X(155,219), X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219),
+  X(27,59), X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(171,187), X(203,219), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,103), X(103,167), X(39,103), X(39,71), X(103,135), X(167,199), X(7,39),
+  X(71,103), X(135,167), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175),
+  X(47,111), X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175),
+  X(31,95), X(95,159), X(31,95), X(63,127), X(127,191), X(63,127), X(31,63),
+  X(95,127), X(159,191), X(31,47), X(63,79), X(95,111), X(127,143), X(159,175),
+  X(191,207), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191),
+  X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(111,119),
+  X(127,135), X(143,151), X(159,167), X(175,183), X(191,199), X(207,215),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(199,207),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(143,147), X(151,155), X(159,163), X(167,171),
+  X(175,179), X(183,187), X(191,195), X(199,203), X(207,211), X(215,219), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(187,191), X(195,199), X(203,207), X(211,215), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41),
+  X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73),
+  X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101),
+  X(103,105), X(107,109), X(111,113), X(115,117), X(119,121), X(123,125),
+  X(127,129), X(131,133), X(135,137), X(139,141), X(143,145), X(147,149),
+  X(151,153), X(155,157), X(159,161), X(163,165), X(167,169), X(171,173),
+  X(175,177), X(179,181), X(183,185), X(187,189), X(191,193), X(195,197),
+  X(199,201), X(203,205), X(207,209), X(211,213), X(215,217), X(219,221), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(201,203), X(205,207), X(209,211), X(213,215), X(217,219),
+  X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162), X(34,98),
+  X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162), X(18,146),
+  X(82,210), X(18,82), X(146,210), X(50,114), X(114,178), X(50,114), X(50,82),
+  X(114,146), X(178,210), X(18,50), X(82,114), X(146,178), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(10,138), X(74,202),
+  X(10,74), X(138,202), X(42,106), X(106,170), X(42,106), X(42,74), X(106,138),
+  X(170,202), X(10,42), X(74,106), X(138,170), X(26,154), X(90,218), X(26,90),
+  X(154,218), X(58,122), X(122,186), X(58,122), X(58,90), X(122,154), X(186,218),
+  X(26,58), X(90,122), X(154,186), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(138,154), X(170,186), X(202,218), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(194,202), X(210,218), X(6,134), X(70,198), X(6,70), X(134,198),
+  X(38,102), X(102,166), X(38,102), X(38,70), X(102,134), X(166,198), X(6,38),
+  X(70,102), X(134,166), X(22,150), X(86,214), X(22,86), X(150,214), X(54,118),
+  X(118,182), X(54,118), X(54,86), X(118,150), X(182,214), X(22,54), X(86,118),
+  X(150,182), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182),
+  X(198,214), X(14,142), X(78,206), X(14,78), X(142,206), X(46,110), X(110,174),
+  X(46,110), X(46,78), X(110,142), X(174,206), X(14,46), X(78,110), X(142,174),
+  X(30,94), X(94,158), X(30,94), X(62,126), X(126,190), X(62,126), X(30,62),
+  X(94,126), X(158,190), X(30,46), X(62,78), X(94,110), X(126,142), X(158,174),
+  X(190,206), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190),
+  X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118),
+  X(126,134), X(142,150), X(158,166), X(174,182), X(190,198), X(206,214),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(198,206),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(158,162), X(166,170),
+  X(174,178), X(182,186), X(190,194), X(198,202), X(206,210), X(214,218), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(186,190), X(194,198), X(202,206), X(210,214), X(4,132),
+  X(68,196), X(4,68), X(132,196), X(36,100), X(100,164), X(36,100), X(36,68),
+  X(100,132), X(164,196), X(4,36), X(68,100), X(132,164), X(20,148), X(84,212),
+  X(20,84), X(148,212), X(52,116), X(116,180), X(52,116), X(52,84), X(116,148),
+  X(180,212), X(20,52), X(84,116), X(148,180), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(164,180), X(196,212), X(12,140), X(76,204), X(12,76),
+  X(140,204), X(44,108), X(108,172), X(44,108), X(44,76), X(108,140), X(172,204),
+  X(12,44), X(76,108), X(140,172), X(28,156), X(92,220), X(28,92), X(156,220),
+  X(60,124), X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60),
+  X(92,124), X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(172,188), X(204,220), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(196,204), X(212,220), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,104), X(104,168), X(40,104), X(40,72), X(104,136), X(168,200), X(8,40),
+  X(72,104), X(136,168), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120),
+  X(120,184), X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120),
+  X(152,184), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184),
+  X(200,216), X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176),
+  X(48,112), X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176),
+  X(32,96), X(96,160), X(32,96), X(64,128), X(128,192), X(64,128), X(32,64),
+  X(96,128), X(160,192), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176),
+  X(192,208), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120),
+  X(128,136), X(144,152), X(160,168), X(176,184), X(192,200), X(208,216),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(136,144), X(152,160), X(168,176), X(184,192), X(200,208),
+  X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68),
+  X(72,76), X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124),
+  X(128,132), X(136,140), X(144,148), X(152,156), X(160,164), X(168,172),
+  X(176,180), X(184,188), X(192,196), X(200,204), X(208,212), X(216,220), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(132,136), X(140,144), X(148,152), X(156,160), X(164,168), X(172,176),
+  X(180,184), X(188,192), X(196,200), X(204,208), X(212,216), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(178,180), X(182,184), X(186,188), X(190,192), X(194,196),
+  X(198,200), X(202,204), X(206,208), X(210,212), X(214,216), X(218,220), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194), X(195,196), X(197,198), X(199,200), X(201,202), X(203,204),
+  X(205,206), X(207,208), X(209,210), X(211,212), X(213,214), X(215,216),
+  X(217,218), X(219,220)
+};
+M(222) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89),
+  X(153,217), X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(201,217), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37),
+  X(69,101), X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,157), X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125),
+  X(61,93), X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(201,205), X(209,213), X(217,221),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,99), X(99,163), X(35,99),
+  X(35,67), X(99,131), X(163,195), X(3,35), X(67,99), X(131,163), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83),
+  X(115,147), X(179,211), X(19,51), X(83,115), X(147,179), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139),
+  X(171,203), X(11,43), X(75,107), X(139,171), X(27,155), X(91,219), X(27,91),
+  X(155,219), X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219),
+  X(27,59), X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(171,187), X(203,219), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,103), X(103,167), X(39,103), X(39,71), X(103,135), X(167,199), X(7,39),
+  X(71,103), X(135,167), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175),
+  X(47,111), X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175),
+  X(31,95), X(95,159), X(31,95), X(63,127), X(127,191), X(63,127), X(31,63),
+  X(95,127), X(159,191), X(31,47), X(63,79), X(95,111), X(127,143), X(159,175),
+  X(191,207), X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191),
+  X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(111,119),
+  X(127,135), X(143,151), X(159,167), X(175,183), X(191,199), X(207,215),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(199,207),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(143,147), X(151,155), X(159,163), X(167,171),
+  X(175,179), X(183,187), X(191,195), X(199,203), X(207,211), X(215,219), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(187,191), X(195,199), X(203,207), X(211,215), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41),
+  X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73),
+  X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101),
+  X(103,105), X(107,109), X(111,113), X(115,117), X(119,121), X(123,125),
+  X(127,129), X(131,133), X(135,137), X(139,141), X(143,145), X(147,149),
+  X(151,153), X(155,157), X(159,161), X(163,165), X(167,169), X(171,173),
+  X(175,177), X(179,181), X(183,185), X(187,189), X(191,193), X(195,197),
+  X(199,201), X(203,205), X(207,209), X(211,213), X(215,217), X(219,221), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(201,203), X(205,207), X(209,211), X(213,215), X(217,219),
+  X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162), X(34,98),
+  X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162), X(18,146),
+  X(82,210), X(18,82), X(146,210), X(50,114), X(114,178), X(50,114), X(50,82),
+  X(114,146), X(178,210), X(18,50), X(82,114), X(146,178), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(10,138), X(74,202),
+  X(10,74), X(138,202), X(42,106), X(106,170), X(42,106), X(42,74), X(106,138),
+  X(170,202), X(10,42), X(74,106), X(138,170), X(26,154), X(90,218), X(26,90),
+  X(154,218), X(58,122), X(122,186), X(58,122), X(58,90), X(122,154), X(186,218),
+  X(26,58), X(90,122), X(154,186), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(138,154), X(170,186), X(202,218), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(194,202), X(210,218), X(6,134), X(70,198), X(6,70), X(134,198),
+  X(38,102), X(102,166), X(38,102), X(38,70), X(102,134), X(166,198), X(6,38),
+  X(70,102), X(134,166), X(22,150), X(86,214), X(22,86), X(150,214), X(54,118),
+  X(118,182), X(54,118), X(54,86), X(118,150), X(182,214), X(22,54), X(86,118),
+  X(150,182), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182),
+  X(198,214), X(14,142), X(78,206), X(14,78), X(142,206), X(46,110), X(110,174),
+  X(46,110), X(46,78), X(110,142), X(174,206), X(14,46), X(78,110), X(142,174),
+  X(30,158), X(94,222), X(30,94), X(158,222), X(62,126), X(126,190), X(62,126),
+  X(62,94), X(126,158), X(190,222), X(30,62), X(94,126), X(158,190), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(206,222), X(6,14),
+  X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126),
+  X(134,142), X(150,158), X(166,174), X(182,190), X(198,206), X(214,222), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(186,190), X(194,198), X(202,206), X(210,214), X(218,222),
+  X(4,132), X(68,196), X(4,68), X(132,196), X(36,100), X(100,164), X(36,100),
+  X(36,68), X(100,132), X(164,196), X(4,36), X(68,100), X(132,164), X(20,148),
+  X(84,212), X(20,84), X(148,212), X(52,116), X(116,180), X(52,116), X(52,84),
+  X(116,148), X(180,212), X(20,52), X(84,116), X(148,180), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(164,180), X(196,212), X(12,140), X(76,204),
+  X(12,76), X(140,204), X(44,108), X(108,172), X(44,108), X(44,76), X(108,140),
+  X(172,204), X(12,44), X(76,108), X(140,172), X(28,156), X(92,220), X(28,92),
+  X(156,220), X(60,124), X(124,188), X(60,124), X(60,92), X(124,156), X(188,220),
+  X(28,60), X(92,124), X(156,188), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(140,156), X(172,188), X(204,220), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(196,204), X(212,220), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,104), X(104,168), X(40,104), X(40,72), X(104,136), X(168,200), X(8,40),
+  X(72,104), X(136,168), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120),
+  X(120,184), X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120),
+  X(152,184), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184),
+  X(200,216), X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176),
+  X(48,112), X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176),
+  X(32,96), X(96,160), X(32,96), X(64,128), X(128,192), X(64,128), X(32,64),
+  X(96,128), X(160,192), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176),
+  X(192,208), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120),
+  X(128,136), X(144,152), X(160,168), X(176,184), X(192,200), X(208,216),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(136,144), X(152,160), X(168,176), X(184,192), X(200,208),
+  X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68),
+  X(72,76), X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124),
+  X(128,132), X(136,140), X(144,148), X(152,156), X(160,164), X(168,172),
+  X(176,180), X(184,188), X(192,196), X(200,204), X(208,212), X(216,220), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(132,136), X(140,144), X(148,152), X(156,160), X(164,168), X(172,176),
+  X(180,184), X(188,192), X(196,200), X(204,208), X(212,216), X(4,6), X(8,10),
+  X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42),
+  X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74),
+  X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102),
+  X(104,106), X(108,110), X(112,114), X(116,118), X(120,122), X(124,126),
+  X(128,130), X(132,134), X(136,138), X(140,142), X(144,146), X(148,150),
+  X(152,154), X(156,158), X(160,162), X(164,166), X(168,170), X(172,174),
+  X(176,178), X(180,182), X(184,186), X(188,190), X(192,194), X(196,198),
+  X(200,202), X(204,206), X(208,210), X(212,214), X(216,218), X(220,222), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(150,152), X(154,156), X(158,160), X(162,164), X(166,168),
+  X(170,172), X(174,176), X(178,180), X(182,184), X(186,188), X(190,192),
+  X(194,196), X(198,200), X(202,204), X(206,208), X(210,212), X(214,216),
+  X(218,220), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194), X(195,196), X(197,198), X(199,200), X(201,202), X(203,204),
+  X(205,206), X(207,208), X(209,210), X(211,212), X(213,214), X(215,216),
+  X(217,218), X(219,220), X(221,222)
+};
+M(223) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89),
+  X(153,217), X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(201,217), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37),
+  X(69,101), X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,157), X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125),
+  X(61,93), X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(201,205), X(209,213), X(217,221),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,99), X(99,163), X(35,99),
+  X(35,67), X(99,131), X(163,195), X(3,35), X(67,99), X(131,163), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83),
+  X(115,147), X(179,211), X(19,51), X(83,115), X(147,179), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139),
+  X(171,203), X(11,43), X(75,107), X(139,171), X(27,155), X(91,219), X(27,91),
+  X(155,219), X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219),
+  X(27,59), X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(171,187), X(203,219), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,103), X(103,167), X(39,103), X(39,71), X(103,135), X(167,199), X(7,39),
+  X(71,103), X(135,167), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175),
+  X(47,111), X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175),
+  X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127),
+  X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(167,175), X(183,191), X(199,207), X(215,223), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(201,203), X(205,207), X(209,211), X(213,215), X(217,219),
+  X(221,223), X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162),
+  X(34,98), X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162),
+  X(18,146), X(82,210), X(18,82), X(146,210), X(50,114), X(114,178), X(50,114),
+  X(50,82), X(114,146), X(178,210), X(18,50), X(82,114), X(146,178), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(10,138),
+  X(74,202), X(10,74), X(138,202), X(42,106), X(106,170), X(42,106), X(42,74),
+  X(106,138), X(170,202), X(10,42), X(74,106), X(138,170), X(26,154), X(90,218),
+  X(26,90), X(154,218), X(58,122), X(122,186), X(58,122), X(58,90), X(122,154),
+  X(186,218), X(26,58), X(90,122), X(154,186), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(138,154), X(170,186), X(202,218), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(162,170), X(178,186), X(194,202), X(210,218), X(6,134), X(70,198), X(6,70),
+  X(134,198), X(38,102), X(102,166), X(38,102), X(38,70), X(102,134), X(166,198),
+  X(6,38), X(70,102), X(134,166), X(22,150), X(86,214), X(22,86), X(150,214),
+  X(54,118), X(118,182), X(54,118), X(54,86), X(118,150), X(182,214), X(22,54),
+  X(86,118), X(150,182), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(166,182), X(198,214), X(14,142), X(78,206), X(14,78), X(142,206), X(46,110),
+  X(110,174), X(46,110), X(46,78), X(110,142), X(174,206), X(14,46), X(78,110),
+  X(142,174), X(30,158), X(94,222), X(30,94), X(158,222), X(62,126), X(126,190),
+  X(62,126), X(62,94), X(126,158), X(190,222), X(30,62), X(94,126), X(158,190),
+  X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(206,222),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(198,206),
+  X(214,222), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(154,158),
+  X(162,166), X(170,174), X(178,182), X(186,190), X(194,198), X(202,206),
+  X(210,214), X(218,222), X(4,132), X(68,196), X(4,68), X(132,196), X(36,100),
+  X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36), X(68,100),
+  X(132,164), X(20,148), X(84,212), X(20,84), X(148,212), X(52,116), X(116,180),
+  X(52,116), X(52,84), X(116,148), X(180,212), X(20,52), X(84,116), X(148,180),
+  X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(164,180), X(196,212),
+  X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172), X(44,108),
+  X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172), X(28,156),
+  X(92,220), X(28,92), X(156,220), X(60,124), X(124,188), X(60,124), X(60,92),
+  X(124,156), X(188,220), X(28,60), X(92,124), X(156,188), X(12,28), X(44,60),
+  X(76,92), X(108,124), X(140,156), X(172,188), X(204,220), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(148,156), X(164,172), X(180,188), X(196,204), X(212,220), X(8,136),
+  X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104), X(40,72),
+  X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,152), X(88,216),
+  X(24,88), X(152,216), X(56,120), X(120,184), X(56,120), X(56,88), X(120,152),
+  X(184,216), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56), X(72,88),
+  X(104,120), X(136,152), X(168,184), X(200,216), X(16,144), X(80,208), X(16,80),
+  X(144,208), X(48,112), X(112,176), X(48,112), X(48,80), X(112,144), X(176,208),
+  X(16,48), X(80,112), X(144,176), X(32,96), X(96,160), X(32,96), X(64,128),
+  X(128,192), X(64,128), X(32,64), X(96,128), X(160,192), X(32,48), X(64,80),
+  X(96,112), X(128,144), X(160,176), X(192,208), X(16,32), X(48,64), X(80,96),
+  X(112,128), X(144,160), X(176,192), X(16,24), X(32,40), X(48,56), X(64,72),
+  X(80,88), X(96,104), X(112,120), X(128,136), X(144,152), X(160,168),
+  X(176,184), X(192,200), X(208,216), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44),
+  X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100),
+  X(104,108), X(112,116), X(120,124), X(128,132), X(136,140), X(144,148),
+  X(152,156), X(160,164), X(168,172), X(176,180), X(184,188), X(192,196),
+  X(200,204), X(208,212), X(216,220), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(212,216), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82),
+  X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110),
+  X(112,114), X(116,118), X(120,122), X(124,126), X(128,130), X(132,134),
+  X(136,138), X(140,142), X(144,146), X(148,150), X(152,154), X(156,158),
+  X(160,162), X(164,166), X(168,170), X(172,174), X(176,178), X(180,182),
+  X(184,186), X(188,190), X(192,194), X(196,198), X(200,202), X(204,206),
+  X(208,210), X(212,214), X(216,218), X(220,222), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(174,176),
+  X(178,180), X(182,184), X(186,188), X(190,192), X(194,196), X(198,200),
+  X(202,204), X(206,208), X(210,212), X(214,216), X(218,220), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(187,188), X(189,190),
+  X(191,192), X(193,194), X(195,196), X(197,198), X(199,200), X(201,202),
+  X(203,204), X(205,206), X(207,208), X(209,210), X(211,212), X(213,214),
+  X(215,216), X(217,218), X(219,220), X(221,222)
+};
+M(224) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,97), X(97,161), X(33,97),
+  X(33,65), X(97,129), X(161,193), X(1,33), X(65,97), X(129,161), X(17,145),
+  X(81,209), X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81),
+  X(113,145), X(177,209), X(17,49), X(81,113), X(145,177), X(1,17), X(33,49),
+  X(65,81), X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201),
+  X(9,73), X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137),
+  X(169,201), X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89),
+  X(153,217), X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217),
+  X(25,57), X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121),
+  X(137,153), X(169,185), X(201,217), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37),
+  X(69,101), X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,157), X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125),
+  X(61,93), X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(201,205), X(209,213), X(217,221),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,99), X(99,163), X(35,99),
+  X(35,67), X(99,131), X(163,195), X(3,35), X(67,99), X(131,163), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83),
+  X(115,147), X(179,211), X(19,51), X(83,115), X(147,179), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139),
+  X(171,203), X(11,43), X(75,107), X(139,171), X(27,155), X(91,219), X(27,91),
+  X(155,219), X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219),
+  X(27,59), X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(171,187), X(203,219), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,103), X(103,167), X(39,103), X(39,71), X(103,135), X(167,199), X(7,39),
+  X(71,103), X(135,167), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175),
+  X(47,111), X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175),
+  X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127),
+  X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(167,175), X(183,191), X(199,207), X(215,223), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(201,203), X(205,207), X(209,211), X(213,215), X(217,219),
+  X(221,223), X(2,130), X(66,194), X(2,66), X(130,194), X(34,98), X(98,162),
+  X(34,98), X(34,66), X(98,130), X(162,194), X(2,34), X(66,98), X(130,162),
+  X(18,146), X(82,210), X(18,82), X(146,210), X(50,114), X(114,178), X(50,114),
+  X(50,82), X(114,146), X(178,210), X(18,50), X(82,114), X(146,178), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(10,138),
+  X(74,202), X(10,74), X(138,202), X(42,106), X(106,170), X(42,106), X(42,74),
+  X(106,138), X(170,202), X(10,42), X(74,106), X(138,170), X(26,154), X(90,218),
+  X(26,90), X(154,218), X(58,122), X(122,186), X(58,122), X(58,90), X(122,154),
+  X(186,218), X(26,58), X(90,122), X(154,186), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(138,154), X(170,186), X(202,218), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(162,170), X(178,186), X(194,202), X(210,218), X(6,134), X(70,198), X(6,70),
+  X(134,198), X(38,102), X(102,166), X(38,102), X(38,70), X(102,134), X(166,198),
+  X(6,38), X(70,102), X(134,166), X(22,150), X(86,214), X(22,86), X(150,214),
+  X(54,118), X(118,182), X(54,118), X(54,86), X(118,150), X(182,214), X(22,54),
+  X(86,118), X(150,182), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(166,182), X(198,214), X(14,142), X(78,206), X(14,78), X(142,206), X(46,110),
+  X(110,174), X(46,110), X(46,78), X(110,142), X(174,206), X(14,46), X(78,110),
+  X(142,174), X(30,158), X(94,222), X(30,94), X(158,222), X(62,126), X(126,190),
+  X(62,126), X(62,94), X(126,158), X(190,222), X(30,62), X(94,126), X(158,190),
+  X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(206,222),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(198,206),
+  X(214,222), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(154,158),
+  X(162,166), X(170,174), X(178,182), X(186,190), X(194,198), X(202,206),
+  X(210,214), X(218,222), X(4,132), X(68,196), X(4,68), X(132,196), X(36,100),
+  X(100,164), X(36,100), X(36,68), X(100,132), X(164,196), X(4,36), X(68,100),
+  X(132,164), X(20,148), X(84,212), X(20,84), X(148,212), X(52,116), X(116,180),
+  X(52,116), X(52,84), X(116,148), X(180,212), X(20,52), X(84,116), X(148,180),
+  X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(164,180), X(196,212),
+  X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172), X(44,108),
+  X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172), X(28,156),
+  X(92,220), X(28,92), X(156,220), X(60,124), X(124,188), X(60,124), X(60,92),
+  X(124,156), X(188,220), X(28,60), X(92,124), X(156,188), X(12,28), X(44,60),
+  X(76,92), X(108,124), X(140,156), X(172,188), X(204,220), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(148,156), X(164,172), X(180,188), X(196,204), X(212,220), X(8,136),
+  X(72,200), X(8,72), X(136,200), X(40,104), X(104,168), X(40,104), X(40,72),
+  X(104,136), X(168,200), X(8,40), X(72,104), X(136,168), X(24,152), X(88,216),
+  X(24,88), X(152,216), X(56,120), X(120,184), X(56,120), X(56,88), X(120,152),
+  X(184,216), X(24,56), X(88,120), X(152,184), X(8,24), X(40,56), X(72,88),
+  X(104,120), X(136,152), X(168,184), X(200,216), X(16,144), X(80,208), X(16,80),
+  X(144,208), X(48,112), X(112,176), X(48,112), X(48,80), X(112,144), X(176,208),
+  X(16,48), X(80,112), X(144,176), X(32,160), X(96,224), X(32,96), X(160,224),
+  X(64,128), X(128,192), X(64,128), X(64,96), X(128,160), X(192,224), X(32,64),
+  X(96,128), X(160,192), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160),
+  X(176,192), X(208,224), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(216,224), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(212,216), X(220,224), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(174,176),
+  X(178,180), X(182,184), X(186,188), X(190,192), X(194,196), X(198,200),
+  X(202,204), X(206,208), X(210,212), X(214,216), X(218,220), X(222,224), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(221,222), X(223,224)
+};
+M(225) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137), X(169,201),
+  X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89), X(153,217),
+  X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57),
+  X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153),
+  X(169,185), X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(201,209), X(217,225), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37),
+  X(69,101), X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,157), X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125),
+  X(61,93), X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(213,217), X(221,225), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(201,205), X(209,213), X(217,221),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,99), X(99,163), X(35,99),
+  X(35,67), X(99,131), X(163,195), X(3,35), X(67,99), X(131,163), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83),
+  X(115,147), X(179,211), X(19,51), X(83,115), X(147,179), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139),
+  X(171,203), X(11,43), X(75,107), X(139,171), X(27,155), X(91,219), X(27,91),
+  X(155,219), X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219),
+  X(27,59), X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(171,187), X(203,219), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,103), X(103,167), X(39,103), X(39,71), X(103,135), X(167,199), X(7,39),
+  X(71,103), X(135,167), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175),
+  X(47,111), X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175),
+  X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127),
+  X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(167,175), X(183,191), X(199,207), X(215,223), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(127,129), X(131,133), X(135,137), X(139,141), X(143,145),
+  X(147,149), X(151,153), X(155,157), X(159,161), X(163,165), X(167,169),
+  X(171,173), X(175,177), X(179,181), X(183,185), X(187,189), X(191,193),
+  X(195,197), X(199,201), X(203,205), X(207,209), X(211,213), X(215,217),
+  X(219,221), X(223,225), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(213,215), X(217,219), X(221,223), X(2,130), X(66,194), X(2,66), X(130,194),
+  X(34,98), X(98,162), X(34,98), X(34,66), X(98,130), X(162,194), X(2,34),
+  X(66,98), X(130,162), X(18,146), X(82,210), X(18,82), X(146,210), X(50,114),
+  X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50), X(82,114),
+  X(146,178), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,106), X(106,170),
+  X(42,106), X(42,74), X(106,138), X(170,202), X(10,42), X(74,106), X(138,170),
+  X(26,154), X(90,218), X(26,90), X(154,218), X(58,122), X(122,186), X(58,122),
+  X(58,90), X(122,154), X(186,218), X(26,58), X(90,122), X(154,186), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(202,218), X(2,10),
+  X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122),
+  X(130,138), X(146,154), X(162,170), X(178,186), X(194,202), X(210,218),
+  X(6,134), X(70,198), X(6,70), X(134,198), X(38,102), X(102,166), X(38,102),
+  X(38,70), X(102,134), X(166,198), X(6,38), X(70,102), X(134,166), X(22,150),
+  X(86,214), X(22,86), X(150,214), X(54,118), X(118,182), X(54,118), X(54,86),
+  X(118,150), X(182,214), X(22,54), X(86,118), X(150,182), X(6,22), X(38,54),
+  X(70,86), X(102,118), X(134,150), X(166,182), X(198,214), X(14,142), X(78,206),
+  X(14,78), X(142,206), X(46,110), X(110,174), X(46,110), X(46,78), X(110,142),
+  X(174,206), X(14,46), X(78,110), X(142,174), X(30,158), X(94,222), X(30,94),
+  X(158,222), X(62,126), X(126,190), X(62,126), X(62,94), X(126,158), X(190,222),
+  X(30,62), X(94,126), X(158,190), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(142,158), X(174,190), X(206,222), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(198,206), X(214,222), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(210,214), X(218,222), X(4,132), X(68,196), X(4,68),
+  X(132,196), X(36,100), X(100,164), X(36,100), X(36,68), X(100,132), X(164,196),
+  X(4,36), X(68,100), X(132,164), X(20,148), X(84,212), X(20,84), X(148,212),
+  X(52,116), X(116,180), X(52,116), X(52,84), X(116,148), X(180,212), X(20,52),
+  X(84,116), X(148,180), X(4,20), X(36,52), X(68,84), X(100,116), X(132,148),
+  X(164,180), X(196,212), X(12,140), X(76,204), X(12,76), X(140,204), X(44,108),
+  X(108,172), X(44,108), X(44,76), X(108,140), X(172,204), X(12,44), X(76,108),
+  X(140,172), X(28,156), X(92,220), X(28,92), X(156,220), X(60,124), X(124,188),
+  X(60,124), X(60,92), X(124,156), X(188,220), X(28,60), X(92,124), X(156,188),
+  X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188), X(204,220),
+  X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92), X(100,108),
+  X(116,124), X(132,140), X(148,156), X(164,172), X(180,188), X(196,204),
+  X(212,220), X(8,136), X(72,200), X(8,72), X(136,200), X(40,104), X(104,168),
+  X(40,104), X(40,72), X(104,136), X(168,200), X(8,40), X(72,104), X(136,168),
+  X(24,152), X(88,216), X(24,88), X(152,216), X(56,120), X(120,184), X(56,120),
+  X(56,88), X(120,152), X(184,216), X(24,56), X(88,120), X(152,184), X(8,24),
+  X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(200,216), X(16,144),
+  X(80,208), X(16,80), X(144,208), X(48,112), X(112,176), X(48,112), X(48,80),
+  X(112,144), X(176,208), X(16,48), X(80,112), X(144,176), X(32,160), X(96,224),
+  X(32,96), X(160,224), X(64,128), X(128,192), X(64,128), X(64,96), X(128,160),
+  X(192,224), X(32,64), X(96,128), X(160,192), X(16,32), X(48,64), X(80,96),
+  X(112,128), X(144,160), X(176,192), X(208,224), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160),
+  X(168,176), X(184,192), X(200,208), X(216,224), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(204,208), X(212,216), X(220,224), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(178,180), X(182,184), X(186,188), X(190,192), X(194,196),
+  X(198,200), X(202,204), X(206,208), X(210,212), X(214,216), X(218,220),
+  X(222,224), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(132,133),
+  X(134,135), X(136,137), X(138,139), X(140,141), X(142,143), X(144,145),
+  X(146,147), X(148,149), X(150,151), X(152,153), X(154,155), X(156,157),
+  X(158,159), X(160,161), X(162,163), X(164,165), X(166,167), X(168,169),
+  X(170,171), X(172,173), X(174,175), X(176,177), X(178,179), X(180,181),
+  X(182,183), X(184,185), X(186,187), X(188,189), X(190,191), X(192,193),
+  X(194,195), X(196,197), X(198,199), X(200,201), X(202,203), X(204,205),
+  X(206,207), X(208,209), X(210,211), X(212,213), X(214,215), X(216,217),
+  X(218,219), X(220,221), X(222,223), X(224,225), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202), X(203,204), X(205,206), X(207,208), X(209,210),
+  X(211,212), X(213,214), X(215,216), X(217,218), X(219,220), X(221,222),
+  X(223,224)
+};
+M(226) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137), X(169,201),
+  X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89), X(153,217),
+  X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57),
+  X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153),
+  X(169,185), X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(201,209), X(217,225), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37),
+  X(69,101), X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,157), X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125),
+  X(61,93), X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(213,217), X(221,225), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(201,205), X(209,213), X(217,221),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,99), X(99,163), X(35,99),
+  X(35,67), X(99,131), X(163,195), X(3,35), X(67,99), X(131,163), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83),
+  X(115,147), X(179,211), X(19,51), X(83,115), X(147,179), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139),
+  X(171,203), X(11,43), X(75,107), X(139,171), X(27,155), X(91,219), X(27,91),
+  X(155,219), X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219),
+  X(27,59), X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(171,187), X(203,219), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,103), X(103,167), X(39,103), X(39,71), X(103,135), X(167,199), X(7,39),
+  X(71,103), X(135,167), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175),
+  X(47,111), X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175),
+  X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127),
+  X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(167,175), X(183,191), X(199,207), X(215,223), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(127,129), X(131,133), X(135,137), X(139,141), X(143,145),
+  X(147,149), X(151,153), X(155,157), X(159,161), X(163,165), X(167,169),
+  X(171,173), X(175,177), X(179,181), X(183,185), X(187,189), X(191,193),
+  X(195,197), X(199,201), X(203,205), X(207,209), X(211,213), X(215,217),
+  X(219,221), X(223,225), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(213,215), X(217,219), X(221,223), X(2,130), X(66,194), X(2,66), X(130,194),
+  X(34,162), X(98,226), X(34,98), X(162,226), X(2,34), X(66,98), X(130,162),
+  X(194,226), X(18,146), X(82,210), X(18,82), X(146,210), X(50,114), X(114,178),
+  X(50,114), X(50,82), X(114,146), X(178,210), X(18,50), X(82,114), X(146,178),
+  X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194), X(210,226),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(194,210),
+  X(10,138), X(74,202), X(10,74), X(138,202), X(42,106), X(106,170), X(42,106),
+  X(42,74), X(106,138), X(170,202), X(10,42), X(74,106), X(138,170), X(26,154),
+  X(90,218), X(26,90), X(154,218), X(58,122), X(122,186), X(58,122), X(58,90),
+  X(122,154), X(186,218), X(26,58), X(90,122), X(154,186), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(170,186), X(202,218), X(10,18), X(26,34),
+  X(42,50), X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146),
+  X(154,162), X(170,178), X(186,194), X(202,210), X(218,226), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(194,202), X(210,218), X(6,134),
+  X(70,198), X(6,70), X(134,198), X(38,102), X(102,166), X(38,102), X(38,70),
+  X(102,134), X(166,198), X(6,38), X(70,102), X(134,166), X(22,150), X(86,214),
+  X(22,86), X(150,214), X(54,118), X(118,182), X(54,118), X(54,86), X(118,150),
+  X(182,214), X(22,54), X(86,118), X(150,182), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(166,182), X(198,214), X(14,142), X(78,206), X(14,78),
+  X(142,206), X(46,110), X(110,174), X(46,110), X(46,78), X(110,142), X(174,206),
+  X(14,46), X(78,110), X(142,174), X(30,158), X(94,222), X(30,94), X(158,222),
+  X(62,126), X(126,190), X(62,126), X(62,94), X(126,158), X(190,222), X(30,62),
+  X(94,126), X(158,190), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158),
+  X(174,190), X(206,222), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(198,206), X(214,222), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(190,194),
+  X(198,202), X(206,210), X(214,218), X(222,226), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(4,132),
+  X(68,196), X(4,68), X(132,196), X(36,100), X(100,164), X(36,100), X(36,68),
+  X(100,132), X(164,196), X(4,36), X(68,100), X(132,164), X(20,148), X(84,212),
+  X(20,84), X(148,212), X(52,116), X(116,180), X(52,116), X(52,84), X(116,148),
+  X(180,212), X(20,52), X(84,116), X(148,180), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(164,180), X(196,212), X(12,140), X(76,204), X(12,76),
+  X(140,204), X(44,108), X(108,172), X(44,108), X(44,76), X(108,140), X(172,204),
+  X(12,44), X(76,108), X(140,172), X(28,156), X(92,220), X(28,92), X(156,220),
+  X(60,124), X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60),
+  X(92,124), X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(172,188), X(204,220), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(196,204), X(212,220), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,104), X(104,168), X(40,104), X(40,72), X(104,136), X(168,200), X(8,40),
+  X(72,104), X(136,168), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120),
+  X(120,184), X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120),
+  X(152,184), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184),
+  X(200,216), X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176),
+  X(48,112), X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176),
+  X(32,160), X(96,224), X(32,96), X(160,224), X(64,128), X(128,192), X(64,128),
+  X(64,96), X(128,160), X(192,224), X(32,64), X(96,128), X(160,192), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(208,224), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(152,160), X(168,176), X(184,192), X(200,208), X(216,224), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(132,136), X(140,144), X(148,152), X(156,160), X(164,168), X(172,176),
+  X(180,184), X(188,192), X(196,200), X(204,208), X(212,216), X(220,224), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(140,142), X(144,146),
+  X(148,150), X(152,154), X(156,158), X(160,162), X(164,166), X(168,170),
+  X(172,174), X(176,178), X(180,182), X(184,186), X(188,190), X(192,194),
+  X(196,198), X(200,202), X(204,206), X(208,210), X(212,214), X(216,218),
+  X(220,222), X(224,226), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212),
+  X(214,216), X(218,220), X(222,224), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202), X(203,204), X(205,206), X(207,208), X(209,210), X(211,212),
+  X(213,214), X(215,216), X(217,218), X(219,220), X(221,222), X(223,224),
+  X(225,226)
+};
+M(227) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137), X(169,201),
+  X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89), X(153,217),
+  X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57),
+  X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153),
+  X(169,185), X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(201,209), X(217,225), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37),
+  X(69,101), X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,157), X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125),
+  X(61,93), X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(213,217), X(221,225), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(201,205), X(209,213), X(217,221),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99),
+  X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211),
+  X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83), X(115,147),
+  X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99),
+  X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203), X(11,75),
+  X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139), X(171,203),
+  X(11,43), X(75,107), X(139,171), X(27,155), X(91,219), X(27,91), X(155,219),
+  X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59),
+  X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(203,219), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(171,179),
+  X(187,195), X(203,211), X(219,227), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,103), X(103,167), X(39,103), X(39,71), X(103,135), X(167,199), X(7,39),
+  X(71,103), X(135,167), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175),
+  X(47,111), X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175),
+  X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127),
+  X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(167,175), X(183,191), X(199,207), X(215,223),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(143,147), X(151,155), X(159,163), X(167,171),
+  X(175,179), X(183,187), X(191,195), X(199,203), X(207,211), X(215,219),
+  X(223,227), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(155,159),
+  X(163,167), X(171,175), X(179,183), X(187,191), X(195,199), X(203,207),
+  X(211,215), X(219,223), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(213,215), X(217,219), X(221,223), X(225,227), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,162), X(98,226), X(34,98), X(162,226), X(2,34), X(66,98),
+  X(130,162), X(194,226), X(18,146), X(82,210), X(18,82), X(146,210), X(50,114),
+  X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50), X(82,114),
+  X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194),
+  X(210,226), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,106), X(106,170),
+  X(42,106), X(42,74), X(106,138), X(170,202), X(10,42), X(74,106), X(138,170),
+  X(26,154), X(90,218), X(26,90), X(154,218), X(58,122), X(122,186), X(58,122),
+  X(58,90), X(122,154), X(186,218), X(26,58), X(90,122), X(154,186), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(202,218), X(10,18),
+  X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114), X(122,130),
+  X(138,146), X(154,162), X(170,178), X(186,194), X(202,210), X(218,226),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(162,170), X(178,186), X(194,202),
+  X(210,218), X(6,134), X(70,198), X(6,70), X(134,198), X(38,102), X(102,166),
+  X(38,102), X(38,70), X(102,134), X(166,198), X(6,38), X(70,102), X(134,166),
+  X(22,150), X(86,214), X(22,86), X(150,214), X(54,118), X(118,182), X(54,118),
+  X(54,86), X(118,150), X(182,214), X(22,54), X(86,118), X(150,182), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(198,214), X(14,142),
+  X(78,206), X(14,78), X(142,206), X(46,110), X(110,174), X(46,110), X(46,78),
+  X(110,142), X(174,206), X(14,46), X(78,110), X(142,174), X(30,158), X(94,222),
+  X(30,94), X(158,222), X(62,126), X(126,190), X(62,126), X(62,94), X(126,158),
+  X(190,222), X(30,62), X(94,126), X(158,190), X(14,30), X(46,62), X(78,94),
+  X(110,126), X(142,158), X(174,190), X(206,222), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(166,174), X(182,190), X(198,206), X(214,222), X(6,10), X(14,18), X(22,26),
+  X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90),
+  X(94,98), X(102,106), X(110,114), X(118,122), X(126,130), X(134,138),
+  X(142,146), X(150,154), X(158,162), X(166,170), X(174,178), X(182,186),
+  X(190,194), X(198,202), X(206,210), X(214,218), X(222,226), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(4,132),
+  X(68,196), X(4,68), X(132,196), X(36,100), X(100,164), X(36,100), X(36,68),
+  X(100,132), X(164,196), X(4,36), X(68,100), X(132,164), X(20,148), X(84,212),
+  X(20,84), X(148,212), X(52,116), X(116,180), X(52,116), X(52,84), X(116,148),
+  X(180,212), X(20,52), X(84,116), X(148,180), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(164,180), X(196,212), X(12,140), X(76,204), X(12,76),
+  X(140,204), X(44,108), X(108,172), X(44,108), X(44,76), X(108,140), X(172,204),
+  X(12,44), X(76,108), X(140,172), X(28,156), X(92,220), X(28,92), X(156,220),
+  X(60,124), X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60),
+  X(92,124), X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(172,188), X(204,220), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(196,204), X(212,220), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,104), X(104,168), X(40,104), X(40,72), X(104,136), X(168,200), X(8,40),
+  X(72,104), X(136,168), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120),
+  X(120,184), X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120),
+  X(152,184), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184),
+  X(200,216), X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176),
+  X(48,112), X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176),
+  X(32,160), X(96,224), X(32,96), X(160,224), X(64,128), X(128,192), X(64,128),
+  X(64,96), X(128,160), X(192,224), X(32,64), X(96,128), X(160,192), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(208,224), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(152,160), X(168,176), X(184,192), X(200,208), X(216,224), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(132,136), X(140,144), X(148,152), X(156,160), X(164,168), X(172,176),
+  X(180,184), X(188,192), X(196,200), X(204,208), X(212,216), X(220,224), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(140,142), X(144,146),
+  X(148,150), X(152,154), X(156,158), X(160,162), X(164,166), X(168,170),
+  X(172,174), X(176,178), X(180,182), X(184,186), X(188,190), X(192,194),
+  X(196,198), X(200,202), X(204,206), X(208,210), X(212,214), X(216,218),
+  X(220,222), X(224,226), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212),
+  X(214,216), X(218,220), X(222,224), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153),
+  X(154,155), X(156,157), X(158,159), X(160,161), X(162,163), X(164,165),
+  X(166,167), X(168,169), X(170,171), X(172,173), X(174,175), X(176,177),
+  X(178,179), X(180,181), X(182,183), X(184,185), X(186,187), X(188,189),
+  X(190,191), X(192,193), X(194,195), X(196,197), X(198,199), X(200,201),
+  X(202,203), X(204,205), X(206,207), X(208,209), X(210,211), X(212,213),
+  X(214,215), X(216,217), X(218,219), X(220,221), X(222,223), X(224,225),
+  X(226,227), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194), X(195,196), X(197,198), X(199,200), X(201,202), X(203,204),
+  X(205,206), X(207,208), X(209,210), X(211,212), X(213,214), X(215,216),
+  X(217,218), X(219,220), X(221,222), X(223,224), X(225,226)
+};
+M(228) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137), X(169,201),
+  X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89), X(153,217),
+  X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57),
+  X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153),
+  X(169,185), X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(201,209), X(217,225), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,101), X(101,165), X(37,101), X(37,69), X(101,133), X(165,197), X(5,37),
+  X(69,101), X(133,165), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173),
+  X(45,109), X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173),
+  X(29,157), X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125),
+  X(61,93), X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29),
+  X(45,61), X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(5,13),
+  X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125),
+  X(133,141), X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(213,217), X(221,225), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(201,205), X(209,213), X(217,221),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99),
+  X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211),
+  X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83), X(115,147),
+  X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99),
+  X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203), X(11,75),
+  X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139), X(171,203),
+  X(11,43), X(75,107), X(139,171), X(27,155), X(91,219), X(27,91), X(155,219),
+  X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59),
+  X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(203,219), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(171,179),
+  X(187,195), X(203,211), X(219,227), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,103), X(103,167), X(39,103), X(39,71), X(103,135), X(167,199), X(7,39),
+  X(71,103), X(135,167), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175),
+  X(47,111), X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175),
+  X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127),
+  X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(167,175), X(183,191), X(199,207), X(215,223),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(143,147), X(151,155), X(159,163), X(167,171),
+  X(175,179), X(183,187), X(191,195), X(199,203), X(207,211), X(215,219),
+  X(223,227), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(155,159),
+  X(163,167), X(171,175), X(179,183), X(187,191), X(195,199), X(203,207),
+  X(211,215), X(219,223), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(213,215), X(217,219), X(221,223), X(225,227), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,162), X(98,226), X(34,98), X(162,226), X(2,34), X(66,98),
+  X(130,162), X(194,226), X(18,146), X(82,210), X(18,82), X(146,210), X(50,114),
+  X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50), X(82,114),
+  X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194),
+  X(210,226), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,106), X(106,170),
+  X(42,106), X(42,74), X(106,138), X(170,202), X(10,42), X(74,106), X(138,170),
+  X(26,154), X(90,218), X(26,90), X(154,218), X(58,122), X(122,186), X(58,122),
+  X(58,90), X(122,154), X(186,218), X(26,58), X(90,122), X(154,186), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(202,218), X(10,18),
+  X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114), X(122,130),
+  X(138,146), X(154,162), X(170,178), X(186,194), X(202,210), X(218,226),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(162,170), X(178,186), X(194,202),
+  X(210,218), X(6,134), X(70,198), X(6,70), X(134,198), X(38,102), X(102,166),
+  X(38,102), X(38,70), X(102,134), X(166,198), X(6,38), X(70,102), X(134,166),
+  X(22,150), X(86,214), X(22,86), X(150,214), X(54,118), X(118,182), X(54,118),
+  X(54,86), X(118,150), X(182,214), X(22,54), X(86,118), X(150,182), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(198,214), X(14,142),
+  X(78,206), X(14,78), X(142,206), X(46,110), X(110,174), X(46,110), X(46,78),
+  X(110,142), X(174,206), X(14,46), X(78,110), X(142,174), X(30,158), X(94,222),
+  X(30,94), X(158,222), X(62,126), X(126,190), X(62,126), X(62,94), X(126,158),
+  X(190,222), X(30,62), X(94,126), X(158,190), X(14,30), X(46,62), X(78,94),
+  X(110,126), X(142,158), X(174,190), X(206,222), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(166,174), X(182,190), X(198,206), X(214,222), X(6,10), X(14,18), X(22,26),
+  X(30,34), X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90),
+  X(94,98), X(102,106), X(110,114), X(118,122), X(126,130), X(134,138),
+  X(142,146), X(150,154), X(158,162), X(166,170), X(174,178), X(182,186),
+  X(190,194), X(198,202), X(206,210), X(214,218), X(222,226), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(4,132),
+  X(68,196), X(4,68), X(132,196), X(36,164), X(100,228), X(36,100), X(164,228),
+  X(4,36), X(68,100), X(132,164), X(196,228), X(20,148), X(84,212), X(20,84),
+  X(148,212), X(52,116), X(116,180), X(52,116), X(52,84), X(116,148), X(180,212),
+  X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100), X(116,132),
+  X(148,164), X(180,196), X(212,228), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(132,148), X(164,180), X(196,212), X(12,140), X(76,204), X(12,76), X(140,204),
+  X(44,108), X(108,172), X(44,108), X(44,76), X(108,140), X(172,204), X(12,44),
+  X(76,108), X(140,172), X(28,156), X(92,220), X(28,92), X(156,220), X(60,124),
+  X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60), X(92,124),
+  X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(204,220), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100),
+  X(108,116), X(124,132), X(140,148), X(156,164), X(172,180), X(188,196),
+  X(204,212), X(220,228), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(196,204), X(212,220), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,104), X(104,168), X(40,104), X(40,72), X(104,136), X(168,200), X(8,40),
+  X(72,104), X(136,168), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120),
+  X(120,184), X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120),
+  X(152,184), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184),
+  X(200,216), X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176),
+  X(48,112), X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176),
+  X(32,160), X(96,224), X(32,96), X(160,224), X(64,128), X(128,192), X(64,128),
+  X(64,96), X(128,160), X(192,224), X(32,64), X(96,128), X(160,192), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(208,224), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(152,160), X(168,176), X(184,192), X(200,208), X(216,224),
+  X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68),
+  X(72,76), X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124),
+  X(128,132), X(136,140), X(144,148), X(152,156), X(160,164), X(168,172),
+  X(176,180), X(184,188), X(192,196), X(200,204), X(208,212), X(216,220),
+  X(224,228), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(180,184), X(188,192), X(196,200), X(204,208),
+  X(212,216), X(220,224), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212),
+  X(214,216), X(218,220), X(222,224), X(226,228), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202), X(203,204), X(205,206), X(207,208), X(209,210),
+  X(211,212), X(213,214), X(215,216), X(217,218), X(219,220), X(221,222),
+  X(223,224), X(225,226), X(227,228)
+};
+M(229) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137), X(169,201),
+  X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89), X(153,217),
+  X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57),
+  X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153),
+  X(169,185), X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(201,209), X(217,225), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101), X(133,165),
+  X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197), X(213,229),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173), X(45,109),
+  X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(217,221), X(225,229),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99),
+  X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211),
+  X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83), X(115,147),
+  X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99),
+  X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203), X(11,75),
+  X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139), X(171,203),
+  X(11,43), X(75,107), X(139,171), X(27,155), X(91,219), X(27,91), X(155,219),
+  X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59),
+  X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(203,219), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(171,179),
+  X(187,195), X(203,211), X(219,227), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,103), X(103,167), X(39,103), X(39,71), X(103,135), X(167,199), X(7,39),
+  X(71,103), X(135,167), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175),
+  X(47,111), X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175),
+  X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127),
+  X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(167,175), X(183,191), X(199,207), X(215,223),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(143,147), X(151,155), X(159,163), X(167,171),
+  X(175,179), X(183,187), X(191,195), X(199,203), X(207,211), X(215,219),
+  X(223,227), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(155,159),
+  X(163,167), X(171,175), X(179,183), X(187,191), X(195,199), X(203,207),
+  X(211,215), X(219,223), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189),
+  X(191,193), X(195,197), X(199,201), X(203,205), X(207,209), X(211,213),
+  X(215,217), X(219,221), X(223,225), X(227,229), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(141,143), X(145,147), X(149,151),
+  X(153,155), X(157,159), X(161,163), X(165,167), X(169,171), X(173,175),
+  X(177,179), X(181,183), X(185,187), X(189,191), X(193,195), X(197,199),
+  X(201,203), X(205,207), X(209,211), X(213,215), X(217,219), X(221,223),
+  X(225,227), X(2,130), X(66,194), X(2,66), X(130,194), X(34,162), X(98,226),
+  X(34,98), X(162,226), X(2,34), X(66,98), X(130,162), X(194,226), X(18,146),
+  X(82,210), X(18,82), X(146,210), X(50,114), X(114,178), X(50,114), X(50,82),
+  X(114,146), X(178,210), X(18,50), X(82,114), X(146,178), X(18,34), X(50,66),
+  X(82,98), X(114,130), X(146,162), X(178,194), X(210,226), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(10,138), X(74,202),
+  X(10,74), X(138,202), X(42,106), X(106,170), X(42,106), X(42,74), X(106,138),
+  X(170,202), X(10,42), X(74,106), X(138,170), X(26,154), X(90,218), X(26,90),
+  X(154,218), X(58,122), X(122,186), X(58,122), X(58,90), X(122,154), X(186,218),
+  X(26,58), X(90,122), X(154,186), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(138,154), X(170,186), X(202,218), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162), X(170,178),
+  X(186,194), X(202,210), X(218,226), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(194,202), X(210,218), X(6,134), X(70,198), X(6,70), X(134,198),
+  X(38,102), X(102,166), X(38,102), X(38,70), X(102,134), X(166,198), X(6,38),
+  X(70,102), X(134,166), X(22,150), X(86,214), X(22,86), X(150,214), X(54,118),
+  X(118,182), X(54,118), X(54,86), X(118,150), X(182,214), X(22,54), X(86,118),
+  X(150,182), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182),
+  X(198,214), X(14,142), X(78,206), X(14,78), X(142,206), X(46,110), X(110,174),
+  X(46,110), X(46,78), X(110,142), X(174,206), X(14,46), X(78,110), X(142,174),
+  X(30,158), X(94,222), X(30,94), X(158,222), X(62,126), X(126,190), X(62,126),
+  X(62,94), X(126,158), X(190,222), X(30,62), X(94,126), X(158,190), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(206,222), X(6,14),
+  X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126),
+  X(134,142), X(150,158), X(166,174), X(182,190), X(198,206), X(214,222),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(158,162), X(166,170),
+  X(174,178), X(182,186), X(190,194), X(198,202), X(206,210), X(214,218),
+  X(222,226), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(154,158),
+  X(162,166), X(170,174), X(178,182), X(186,190), X(194,198), X(202,206),
+  X(210,214), X(218,222), X(4,132), X(68,196), X(4,68), X(132,196), X(36,164),
+  X(100,228), X(36,100), X(164,228), X(4,36), X(68,100), X(132,164), X(196,228),
+  X(20,148), X(84,212), X(20,84), X(148,212), X(52,116), X(116,180), X(52,116),
+  X(52,84), X(116,148), X(180,212), X(20,52), X(84,116), X(148,180), X(20,36),
+  X(52,68), X(84,100), X(116,132), X(148,164), X(180,196), X(212,228), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(132,148), X(164,180), X(196,212), X(12,140),
+  X(76,204), X(12,76), X(140,204), X(44,108), X(108,172), X(44,108), X(44,76),
+  X(108,140), X(172,204), X(12,44), X(76,108), X(140,172), X(28,156), X(92,220),
+  X(28,92), X(156,220), X(60,124), X(124,188), X(60,124), X(60,92), X(124,156),
+  X(188,220), X(28,60), X(92,124), X(156,188), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(172,188), X(204,220), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164),
+  X(172,180), X(188,196), X(204,212), X(220,228), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156),
+  X(164,172), X(180,188), X(196,204), X(212,220), X(8,136), X(72,200), X(8,72),
+  X(136,200), X(40,104), X(104,168), X(40,104), X(40,72), X(104,136), X(168,200),
+  X(8,40), X(72,104), X(136,168), X(24,152), X(88,216), X(24,88), X(152,216),
+  X(56,120), X(120,184), X(56,120), X(56,88), X(120,152), X(184,216), X(24,56),
+  X(88,120), X(152,184), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152),
+  X(168,184), X(200,216), X(16,144), X(80,208), X(16,80), X(144,208), X(48,112),
+  X(112,176), X(48,112), X(48,80), X(112,144), X(176,208), X(16,48), X(80,112),
+  X(144,176), X(32,160), X(96,224), X(32,96), X(160,224), X(64,128), X(128,192),
+  X(64,128), X(64,96), X(128,160), X(192,224), X(32,64), X(96,128), X(160,192),
+  X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(208,224),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(136,144), X(152,160), X(168,176), X(184,192), X(200,208),
+  X(216,224), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(104,108),
+  X(112,116), X(120,124), X(128,132), X(136,140), X(144,148), X(152,156),
+  X(160,164), X(168,172), X(176,180), X(184,188), X(192,196), X(200,204),
+  X(208,212), X(216,220), X(224,228), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(212,216), X(220,224), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(174,176),
+  X(178,180), X(182,184), X(186,188), X(190,192), X(194,196), X(198,200),
+  X(202,204), X(206,208), X(210,212), X(214,216), X(218,220), X(222,224),
+  X(226,228), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(132,133),
+  X(134,135), X(136,137), X(138,139), X(140,141), X(142,143), X(144,145),
+  X(146,147), X(148,149), X(150,151), X(152,153), X(154,155), X(156,157),
+  X(158,159), X(160,161), X(162,163), X(164,165), X(166,167), X(168,169),
+  X(170,171), X(172,173), X(174,175), X(176,177), X(178,179), X(180,181),
+  X(182,183), X(184,185), X(186,187), X(188,189), X(190,191), X(192,193),
+  X(194,195), X(196,197), X(198,199), X(200,201), X(202,203), X(204,205),
+  X(206,207), X(208,209), X(210,211), X(212,213), X(214,215), X(216,217),
+  X(218,219), X(220,221), X(222,223), X(224,225), X(226,227), X(228,229), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(221,222), X(223,224), X(225,226), X(227,228)
+};
+M(230) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137), X(169,201),
+  X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89), X(153,217),
+  X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57),
+  X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153),
+  X(169,185), X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(201,209), X(217,225), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101), X(133,165),
+  X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197), X(213,229),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173), X(45,109),
+  X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(217,221), X(225,229),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99),
+  X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211),
+  X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83), X(115,147),
+  X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99),
+  X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203), X(11,75),
+  X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139), X(171,203),
+  X(11,43), X(75,107), X(139,171), X(27,155), X(91,219), X(27,91), X(155,219),
+  X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59),
+  X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(203,219), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(171,179),
+  X(187,195), X(203,211), X(219,227), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,103), X(103,167), X(39,103), X(39,71), X(103,135), X(167,199), X(7,39),
+  X(71,103), X(135,167), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175),
+  X(47,111), X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175),
+  X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127),
+  X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(7,15),
+  X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127),
+  X(135,143), X(151,159), X(167,175), X(183,191), X(199,207), X(215,223),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(143,147), X(151,155), X(159,163), X(167,171),
+  X(175,179), X(183,187), X(191,195), X(199,203), X(207,211), X(215,219),
+  X(223,227), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(155,159),
+  X(163,167), X(171,175), X(179,183), X(187,191), X(195,199), X(203,207),
+  X(211,215), X(219,223), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189),
+  X(191,193), X(195,197), X(199,201), X(203,205), X(207,209), X(211,213),
+  X(215,217), X(219,221), X(223,225), X(227,229), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(141,143), X(145,147), X(149,151),
+  X(153,155), X(157,159), X(161,163), X(165,167), X(169,171), X(173,175),
+  X(177,179), X(181,183), X(185,187), X(189,191), X(193,195), X(197,199),
+  X(201,203), X(205,207), X(209,211), X(213,215), X(217,219), X(221,223),
+  X(225,227), X(2,130), X(66,194), X(2,66), X(130,194), X(34,162), X(98,226),
+  X(34,98), X(162,226), X(2,34), X(66,98), X(130,162), X(194,226), X(18,146),
+  X(82,210), X(18,82), X(146,210), X(50,114), X(114,178), X(50,114), X(50,82),
+  X(114,146), X(178,210), X(18,50), X(82,114), X(146,178), X(18,34), X(50,66),
+  X(82,98), X(114,130), X(146,162), X(178,194), X(210,226), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(10,138), X(74,202),
+  X(10,74), X(138,202), X(42,106), X(106,170), X(42,106), X(42,74), X(106,138),
+  X(170,202), X(10,42), X(74,106), X(138,170), X(26,154), X(90,218), X(26,90),
+  X(154,218), X(58,122), X(122,186), X(58,122), X(58,90), X(122,154), X(186,218),
+  X(26,58), X(90,122), X(154,186), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(138,154), X(170,186), X(202,218), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162), X(170,178),
+  X(186,194), X(202,210), X(218,226), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(194,202), X(210,218), X(6,134), X(70,198), X(6,70), X(134,198),
+  X(38,166), X(102,230), X(38,102), X(166,230), X(6,38), X(70,102), X(134,166),
+  X(198,230), X(22,150), X(86,214), X(22,86), X(150,214), X(54,118), X(118,182),
+  X(54,118), X(54,86), X(118,150), X(182,214), X(22,54), X(86,118), X(150,182),
+  X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198), X(214,230),
+  X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(198,214),
+  X(14,142), X(78,206), X(14,78), X(142,206), X(46,110), X(110,174), X(46,110),
+  X(46,78), X(110,142), X(174,206), X(14,46), X(78,110), X(142,174), X(30,158),
+  X(94,222), X(30,94), X(158,222), X(62,126), X(126,190), X(62,126), X(62,94),
+  X(126,158), X(190,222), X(30,62), X(94,126), X(158,190), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(206,222), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134), X(142,150),
+  X(158,166), X(174,182), X(190,198), X(206,214), X(222,230), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(166,174), X(182,190), X(198,206), X(214,222), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(226,230),
+  X(4,132), X(68,196), X(4,68), X(132,196), X(36,164), X(100,228), X(36,100),
+  X(164,228), X(4,36), X(68,100), X(132,164), X(196,228), X(20,148), X(84,212),
+  X(20,84), X(148,212), X(52,116), X(116,180), X(52,116), X(52,84), X(116,148),
+  X(180,212), X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(180,196), X(212,228), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(164,180), X(196,212), X(12,140), X(76,204), X(12,76),
+  X(140,204), X(44,108), X(108,172), X(44,108), X(44,76), X(108,140), X(172,204),
+  X(12,44), X(76,108), X(140,172), X(28,156), X(92,220), X(28,92), X(156,220),
+  X(60,124), X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60),
+  X(92,124), X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(172,188), X(204,220), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84),
+  X(92,100), X(108,116), X(124,132), X(140,148), X(156,164), X(172,180),
+  X(188,196), X(204,212), X(220,228), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(196,204), X(212,220), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,104), X(104,168), X(40,104), X(40,72), X(104,136), X(168,200), X(8,40),
+  X(72,104), X(136,168), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120),
+  X(120,184), X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120),
+  X(152,184), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184),
+  X(200,216), X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176),
+  X(48,112), X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176),
+  X(32,160), X(96,224), X(32,96), X(160,224), X(64,128), X(128,192), X(64,128),
+  X(64,96), X(128,160), X(192,224), X(32,64), X(96,128), X(160,192), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(208,224), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(152,160), X(168,176), X(184,192), X(200,208), X(216,224),
+  X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68),
+  X(72,76), X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124),
+  X(128,132), X(136,140), X(144,148), X(152,156), X(160,164), X(168,172),
+  X(176,180), X(184,188), X(192,196), X(200,204), X(208,212), X(216,220),
+  X(224,228), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(180,184), X(188,192), X(196,200), X(204,208),
+  X(212,216), X(220,224), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(120,122), X(124,126), X(128,130), X(132,134), X(136,138),
+  X(140,142), X(144,146), X(148,150), X(152,154), X(156,158), X(160,162),
+  X(164,166), X(168,170), X(172,174), X(176,178), X(180,182), X(184,186),
+  X(188,190), X(192,194), X(196,198), X(200,202), X(204,206), X(208,210),
+  X(212,214), X(216,218), X(220,222), X(224,226), X(228,230), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(178,180), X(182,184), X(186,188), X(190,192), X(194,196),
+  X(198,200), X(202,204), X(206,208), X(210,212), X(214,216), X(218,220),
+  X(222,224), X(226,228), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(187,188), X(189,190),
+  X(191,192), X(193,194), X(195,196), X(197,198), X(199,200), X(201,202),
+  X(203,204), X(205,206), X(207,208), X(209,210), X(211,212), X(213,214),
+  X(215,216), X(217,218), X(219,220), X(221,222), X(223,224), X(225,226),
+  X(227,228), X(229,230)
+};
+M(231) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137), X(169,201),
+  X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89), X(153,217),
+  X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57),
+  X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153),
+  X(169,185), X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(201,209), X(217,225), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101), X(133,165),
+  X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197), X(213,229),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173), X(45,109),
+  X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(217,221), X(225,229),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99),
+  X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211),
+  X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83), X(115,147),
+  X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99),
+  X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203), X(11,75),
+  X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139), X(171,203),
+  X(11,43), X(75,107), X(139,171), X(27,155), X(91,219), X(27,91), X(155,219),
+  X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59),
+  X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(203,219), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(171,179),
+  X(187,195), X(203,211), X(219,227), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103), X(135,167),
+  X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119), X(119,183),
+  X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119), X(151,183),
+  X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199), X(215,231),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215),
+  X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111),
+  X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,159),
+  X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95),
+  X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(207,215), X(223,231), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(199,207), X(215,223), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(227,231), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(201,203), X(205,207), X(209,211), X(213,215), X(217,219),
+  X(221,223), X(225,227), X(229,231), X(2,130), X(66,194), X(2,66), X(130,194),
+  X(34,162), X(98,226), X(34,98), X(162,226), X(2,34), X(66,98), X(130,162),
+  X(194,226), X(18,146), X(82,210), X(18,82), X(146,210), X(50,114), X(114,178),
+  X(50,114), X(50,82), X(114,146), X(178,210), X(18,50), X(82,114), X(146,178),
+  X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194), X(210,226),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(194,210),
+  X(10,138), X(74,202), X(10,74), X(138,202), X(42,106), X(106,170), X(42,106),
+  X(42,74), X(106,138), X(170,202), X(10,42), X(74,106), X(138,170), X(26,154),
+  X(90,218), X(26,90), X(154,218), X(58,122), X(122,186), X(58,122), X(58,90),
+  X(122,154), X(186,218), X(26,58), X(90,122), X(154,186), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(170,186), X(202,218), X(10,18), X(26,34),
+  X(42,50), X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146),
+  X(154,162), X(170,178), X(186,194), X(202,210), X(218,226), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(194,202), X(210,218), X(6,134),
+  X(70,198), X(6,70), X(134,198), X(38,166), X(102,230), X(38,102), X(166,230),
+  X(6,38), X(70,102), X(134,166), X(198,230), X(22,150), X(86,214), X(22,86),
+  X(150,214), X(54,118), X(118,182), X(54,118), X(54,86), X(118,150), X(182,214),
+  X(22,54), X(86,118), X(150,182), X(22,38), X(54,70), X(86,102), X(118,134),
+  X(150,166), X(182,198), X(214,230), X(6,22), X(38,54), X(70,86), X(102,118),
+  X(134,150), X(166,182), X(198,214), X(14,142), X(78,206), X(14,78), X(142,206),
+  X(46,110), X(110,174), X(46,110), X(46,78), X(110,142), X(174,206), X(14,46),
+  X(78,110), X(142,174), X(30,158), X(94,222), X(30,94), X(158,222), X(62,126),
+  X(126,190), X(62,126), X(62,94), X(126,158), X(190,222), X(30,62), X(94,126),
+  X(158,190), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190),
+  X(206,222), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102),
+  X(110,118), X(126,134), X(142,150), X(158,166), X(174,182), X(190,198),
+  X(206,214), X(222,230), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(198,206), X(214,222), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(210,214), X(218,222), X(226,230), X(4,132),
+  X(68,196), X(4,68), X(132,196), X(36,164), X(100,228), X(36,100), X(164,228),
+  X(4,36), X(68,100), X(132,164), X(196,228), X(20,148), X(84,212), X(20,84),
+  X(148,212), X(52,116), X(116,180), X(52,116), X(52,84), X(116,148), X(180,212),
+  X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100), X(116,132),
+  X(148,164), X(180,196), X(212,228), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(132,148), X(164,180), X(196,212), X(12,140), X(76,204), X(12,76), X(140,204),
+  X(44,108), X(108,172), X(44,108), X(44,76), X(108,140), X(172,204), X(12,44),
+  X(76,108), X(140,172), X(28,156), X(92,220), X(28,92), X(156,220), X(60,124),
+  X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60), X(92,124),
+  X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(204,220), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100),
+  X(108,116), X(124,132), X(140,148), X(156,164), X(172,180), X(188,196),
+  X(204,212), X(220,228), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(196,204), X(212,220), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,104), X(104,168), X(40,104), X(40,72), X(104,136), X(168,200), X(8,40),
+  X(72,104), X(136,168), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120),
+  X(120,184), X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120),
+  X(152,184), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184),
+  X(200,216), X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176),
+  X(48,112), X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176),
+  X(32,160), X(96,224), X(32,96), X(160,224), X(64,128), X(128,192), X(64,128),
+  X(64,96), X(128,160), X(192,224), X(32,64), X(96,128), X(160,192), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(208,224), X(8,16),
+  X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128),
+  X(136,144), X(152,160), X(168,176), X(184,192), X(200,208), X(216,224),
+  X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68),
+  X(72,76), X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124),
+  X(128,132), X(136,140), X(144,148), X(152,156), X(160,164), X(168,172),
+  X(176,180), X(184,188), X(192,196), X(200,204), X(208,212), X(216,220),
+  X(224,228), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(180,184), X(188,192), X(196,200), X(204,208),
+  X(212,216), X(220,224), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(120,122), X(124,126), X(128,130), X(132,134), X(136,138),
+  X(140,142), X(144,146), X(148,150), X(152,154), X(156,158), X(160,162),
+  X(164,166), X(168,170), X(172,174), X(176,178), X(180,182), X(184,186),
+  X(188,190), X(192,194), X(196,198), X(200,202), X(204,206), X(208,210),
+  X(212,214), X(216,218), X(220,222), X(224,226), X(228,230), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(178,180), X(182,184), X(186,188), X(190,192), X(194,196),
+  X(198,200), X(202,204), X(206,208), X(210,212), X(214,216), X(218,220),
+  X(222,224), X(226,228), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(142,143),
+  X(144,145), X(146,147), X(148,149), X(150,151), X(152,153), X(154,155),
+  X(156,157), X(158,159), X(160,161), X(162,163), X(164,165), X(166,167),
+  X(168,169), X(170,171), X(172,173), X(174,175), X(176,177), X(178,179),
+  X(180,181), X(182,183), X(184,185), X(186,187), X(188,189), X(190,191),
+  X(192,193), X(194,195), X(196,197), X(198,199), X(200,201), X(202,203),
+  X(204,205), X(206,207), X(208,209), X(210,211), X(212,213), X(214,215),
+  X(216,217), X(218,219), X(220,221), X(222,223), X(224,225), X(226,227),
+  X(228,229), X(230,231), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(187,188), X(189,190),
+  X(191,192), X(193,194), X(195,196), X(197,198), X(199,200), X(201,202),
+  X(203,204), X(205,206), X(207,208), X(209,210), X(211,212), X(213,214),
+  X(215,216), X(217,218), X(219,220), X(221,222), X(223,224), X(225,226),
+  X(227,228), X(229,230)
+};
+M(232) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,105), X(105,169), X(41,105), X(41,73), X(105,137), X(169,201),
+  X(9,41), X(73,105), X(137,169), X(25,153), X(89,217), X(25,89), X(153,217),
+  X(57,121), X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57),
+  X(89,121), X(153,185), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153),
+  X(169,185), X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81),
+  X(89,97), X(105,113), X(121,129), X(137,145), X(153,161), X(169,177),
+  X(185,193), X(201,209), X(217,225), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101), X(133,165),
+  X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197), X(213,229),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173), X(45,109),
+  X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(217,221), X(225,229),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99),
+  X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211),
+  X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83), X(115,147),
+  X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99),
+  X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203), X(11,75),
+  X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139), X(171,203),
+  X(11,43), X(75,107), X(139,171), X(27,155), X(91,219), X(27,91), X(155,219),
+  X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59),
+  X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(203,219), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83),
+  X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(171,179),
+  X(187,195), X(203,211), X(219,227), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103), X(135,167),
+  X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119), X(119,183),
+  X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119), X(151,183),
+  X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199), X(215,231),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215),
+  X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111),
+  X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,159),
+  X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95),
+  X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(207,215), X(223,231), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(199,207), X(215,223), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(227,231), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(201,203), X(205,207), X(209,211), X(213,215), X(217,219),
+  X(221,223), X(225,227), X(229,231), X(2,130), X(66,194), X(2,66), X(130,194),
+  X(34,162), X(98,226), X(34,98), X(162,226), X(2,34), X(66,98), X(130,162),
+  X(194,226), X(18,146), X(82,210), X(18,82), X(146,210), X(50,114), X(114,178),
+  X(50,114), X(50,82), X(114,146), X(178,210), X(18,50), X(82,114), X(146,178),
+  X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194), X(210,226),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(194,210),
+  X(10,138), X(74,202), X(10,74), X(138,202), X(42,106), X(106,170), X(42,106),
+  X(42,74), X(106,138), X(170,202), X(10,42), X(74,106), X(138,170), X(26,154),
+  X(90,218), X(26,90), X(154,218), X(58,122), X(122,186), X(58,122), X(58,90),
+  X(122,154), X(186,218), X(26,58), X(90,122), X(154,186), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(170,186), X(202,218), X(10,18), X(26,34),
+  X(42,50), X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146),
+  X(154,162), X(170,178), X(186,194), X(202,210), X(218,226), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(194,202), X(210,218), X(6,134),
+  X(70,198), X(6,70), X(134,198), X(38,166), X(102,230), X(38,102), X(166,230),
+  X(6,38), X(70,102), X(134,166), X(198,230), X(22,150), X(86,214), X(22,86),
+  X(150,214), X(54,118), X(118,182), X(54,118), X(54,86), X(118,150), X(182,214),
+  X(22,54), X(86,118), X(150,182), X(22,38), X(54,70), X(86,102), X(118,134),
+  X(150,166), X(182,198), X(214,230), X(6,22), X(38,54), X(70,86), X(102,118),
+  X(134,150), X(166,182), X(198,214), X(14,142), X(78,206), X(14,78), X(142,206),
+  X(46,110), X(110,174), X(46,110), X(46,78), X(110,142), X(174,206), X(14,46),
+  X(78,110), X(142,174), X(30,158), X(94,222), X(30,94), X(158,222), X(62,126),
+  X(126,190), X(62,126), X(62,94), X(126,158), X(190,222), X(30,62), X(94,126),
+  X(158,190), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190),
+  X(206,222), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102),
+  X(110,118), X(126,134), X(142,150), X(158,166), X(174,182), X(190,198),
+  X(206,214), X(222,230), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(198,206), X(214,222), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(210,214), X(218,222), X(226,230), X(4,132),
+  X(68,196), X(4,68), X(132,196), X(36,164), X(100,228), X(36,100), X(164,228),
+  X(4,36), X(68,100), X(132,164), X(196,228), X(20,148), X(84,212), X(20,84),
+  X(148,212), X(52,116), X(116,180), X(52,116), X(52,84), X(116,148), X(180,212),
+  X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100), X(116,132),
+  X(148,164), X(180,196), X(212,228), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(132,148), X(164,180), X(196,212), X(12,140), X(76,204), X(12,76), X(140,204),
+  X(44,108), X(108,172), X(44,108), X(44,76), X(108,140), X(172,204), X(12,44),
+  X(76,108), X(140,172), X(28,156), X(92,220), X(28,92), X(156,220), X(60,124),
+  X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60), X(92,124),
+  X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(204,220), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100),
+  X(108,116), X(124,132), X(140,148), X(156,164), X(172,180), X(188,196),
+  X(204,212), X(220,228), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(196,204), X(212,220), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,168), X(104,232), X(40,104), X(168,232), X(8,40), X(72,104), X(136,168),
+  X(200,232), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120), X(120,184),
+  X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120), X(152,184),
+  X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200), X(216,232),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(200,216),
+  X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176), X(48,112),
+  X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176), X(32,160),
+  X(96,224), X(32,96), X(160,224), X(64,128), X(128,192), X(64,128), X(64,96),
+  X(128,160), X(192,224), X(32,64), X(96,128), X(160,192), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(176,192), X(208,224), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152),
+  X(160,168), X(176,184), X(192,200), X(208,216), X(224,232), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(168,176), X(184,192), X(200,208), X(216,224), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(204,208), X(212,216), X(220,224), X(228,232), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(150,152), X(154,156), X(158,160), X(162,164), X(166,168),
+  X(170,172), X(174,176), X(178,180), X(182,184), X(186,188), X(190,192),
+  X(194,196), X(198,200), X(202,204), X(206,208), X(210,212), X(214,216),
+  X(218,220), X(222,224), X(226,228), X(230,232), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202), X(203,204), X(205,206), X(207,208), X(209,210),
+  X(211,212), X(213,214), X(215,216), X(217,218), X(219,220), X(221,222),
+  X(223,224), X(225,226), X(227,228), X(229,230), X(231,232)
+};
+M(233) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101), X(133,165),
+  X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197), X(213,229),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173), X(45,109),
+  X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81),
+  X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137),
+  X(141,145), X(149,153), X(157,161), X(165,169), X(173,177), X(181,185),
+  X(189,193), X(197,201), X(205,209), X(213,217), X(221,225), X(229,233), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(201,205), X(209,213), X(217,221),
+  X(225,229), X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227),
+  X(35,99), X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83),
+  X(115,147), X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67),
+  X(83,99), X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139),
+  X(171,203), X(11,43), X(75,107), X(139,171), X(27,155), X(91,219), X(27,91),
+  X(155,219), X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219),
+  X(27,59), X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(171,187), X(203,219), X(11,19), X(27,35), X(43,51), X(59,67),
+  X(75,83), X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(171,179),
+  X(187,195), X(203,211), X(219,227), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103), X(135,167),
+  X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119), X(119,183),
+  X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119), X(151,183),
+  X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199), X(215,231),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215),
+  X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111),
+  X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,159),
+  X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95),
+  X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(207,215), X(223,231), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(199,207), X(215,223), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(227,231), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(127,129), X(131,133), X(135,137), X(139,141), X(143,145),
+  X(147,149), X(151,153), X(155,157), X(159,161), X(163,165), X(167,169),
+  X(171,173), X(175,177), X(179,181), X(183,185), X(187,189), X(191,193),
+  X(195,197), X(199,201), X(203,205), X(207,209), X(211,213), X(215,217),
+  X(219,221), X(223,225), X(227,229), X(231,233), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(141,143), X(145,147), X(149,151),
+  X(153,155), X(157,159), X(161,163), X(165,167), X(169,171), X(173,175),
+  X(177,179), X(181,183), X(185,187), X(189,191), X(193,195), X(197,199),
+  X(201,203), X(205,207), X(209,211), X(213,215), X(217,219), X(221,223),
+  X(225,227), X(229,231), X(2,130), X(66,194), X(2,66), X(130,194), X(34,162),
+  X(98,226), X(34,98), X(162,226), X(2,34), X(66,98), X(130,162), X(194,226),
+  X(18,146), X(82,210), X(18,82), X(146,210), X(50,114), X(114,178), X(50,114),
+  X(50,82), X(114,146), X(178,210), X(18,50), X(82,114), X(146,178), X(18,34),
+  X(50,66), X(82,98), X(114,130), X(146,162), X(178,194), X(210,226), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(10,138),
+  X(74,202), X(10,74), X(138,202), X(42,106), X(106,170), X(42,106), X(42,74),
+  X(106,138), X(170,202), X(10,42), X(74,106), X(138,170), X(26,154), X(90,218),
+  X(26,90), X(154,218), X(58,122), X(122,186), X(58,122), X(58,90), X(122,154),
+  X(186,218), X(26,58), X(90,122), X(154,186), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(138,154), X(170,186), X(202,218), X(10,18), X(26,34), X(42,50),
+  X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162),
+  X(170,178), X(186,194), X(202,210), X(218,226), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(162,170), X(178,186), X(194,202), X(210,218), X(6,134), X(70,198), X(6,70),
+  X(134,198), X(38,166), X(102,230), X(38,102), X(166,230), X(6,38), X(70,102),
+  X(134,166), X(198,230), X(22,150), X(86,214), X(22,86), X(150,214), X(54,118),
+  X(118,182), X(54,118), X(54,86), X(118,150), X(182,214), X(22,54), X(86,118),
+  X(150,182), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198),
+  X(214,230), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182),
+  X(198,214), X(14,142), X(78,206), X(14,78), X(142,206), X(46,110), X(110,174),
+  X(46,110), X(46,78), X(110,142), X(174,206), X(14,46), X(78,110), X(142,174),
+  X(30,158), X(94,222), X(30,94), X(158,222), X(62,126), X(126,190), X(62,126),
+  X(62,94), X(126,158), X(190,222), X(30,62), X(94,126), X(158,190), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(206,222), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134),
+  X(142,150), X(158,166), X(174,182), X(190,198), X(206,214), X(222,230),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(198,206),
+  X(214,222), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54),
+  X(58,62), X(66,70), X(74,78), X(82,86), X(90,94), X(98,102), X(106,110),
+  X(114,118), X(122,126), X(130,134), X(138,142), X(146,150), X(154,158),
+  X(162,166), X(170,174), X(178,182), X(186,190), X(194,198), X(202,206),
+  X(210,214), X(218,222), X(226,230), X(4,132), X(68,196), X(4,68), X(132,196),
+  X(36,164), X(100,228), X(36,100), X(164,228), X(4,36), X(68,100), X(132,164),
+  X(196,228), X(20,148), X(84,212), X(20,84), X(148,212), X(52,116), X(116,180),
+  X(52,116), X(52,84), X(116,148), X(180,212), X(20,52), X(84,116), X(148,180),
+  X(20,36), X(52,68), X(84,100), X(116,132), X(148,164), X(180,196), X(212,228),
+  X(4,20), X(36,52), X(68,84), X(100,116), X(132,148), X(164,180), X(196,212),
+  X(12,140), X(76,204), X(12,76), X(140,204), X(44,108), X(108,172), X(44,108),
+  X(44,76), X(108,140), X(172,204), X(12,44), X(76,108), X(140,172), X(28,156),
+  X(92,220), X(28,92), X(156,220), X(60,124), X(124,188), X(60,124), X(60,92),
+  X(124,156), X(188,220), X(28,60), X(92,124), X(156,188), X(12,28), X(44,60),
+  X(76,92), X(108,124), X(140,156), X(172,188), X(204,220), X(12,20), X(28,36),
+  X(44,52), X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148),
+  X(156,164), X(172,180), X(188,196), X(204,212), X(220,228), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(148,156), X(164,172), X(180,188), X(196,204), X(212,220), X(8,136),
+  X(72,200), X(8,72), X(136,200), X(40,168), X(104,232), X(40,104), X(168,232),
+  X(8,40), X(72,104), X(136,168), X(200,232), X(24,152), X(88,216), X(24,88),
+  X(152,216), X(56,120), X(120,184), X(56,120), X(56,88), X(120,152), X(184,216),
+  X(24,56), X(88,120), X(152,184), X(24,40), X(56,72), X(88,104), X(120,136),
+  X(152,168), X(184,200), X(216,232), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(168,184), X(200,216), X(16,144), X(80,208), X(16,80), X(144,208),
+  X(48,112), X(112,176), X(48,112), X(48,80), X(112,144), X(176,208), X(16,48),
+  X(80,112), X(144,176), X(32,160), X(96,224), X(32,96), X(160,224), X(64,128),
+  X(128,192), X(64,128), X(64,96), X(128,160), X(192,224), X(32,64), X(96,128),
+  X(160,192), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(208,224), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104),
+  X(112,120), X(128,136), X(144,152), X(160,168), X(176,184), X(192,200),
+  X(208,216), X(224,232), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80),
+  X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(216,224), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(212,216), X(220,224), X(228,232), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(178,180), X(182,184), X(186,188), X(190,192), X(194,196),
+  X(198,200), X(202,204), X(206,208), X(210,212), X(214,216), X(218,220),
+  X(222,224), X(226,228), X(230,232), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153),
+  X(154,155), X(156,157), X(158,159), X(160,161), X(162,163), X(164,165),
+  X(166,167), X(168,169), X(170,171), X(172,173), X(174,175), X(176,177),
+  X(178,179), X(180,181), X(182,183), X(184,185), X(186,187), X(188,189),
+  X(190,191), X(192,193), X(194,195), X(196,197), X(198,199), X(200,201),
+  X(202,203), X(204,205), X(206,207), X(208,209), X(210,211), X(212,213),
+  X(214,215), X(216,217), X(218,219), X(220,221), X(222,223), X(224,225),
+  X(226,227), X(228,229), X(230,231), X(232,233), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202), X(203,204), X(205,206), X(207,208), X(209,210),
+  X(211,212), X(213,214), X(215,216), X(217,218), X(219,220), X(221,222),
+  X(223,224), X(225,226), X(227,228), X(229,230), X(231,232)
+};
+M(234) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101), X(133,165),
+  X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197), X(213,229),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173), X(45,109),
+  X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81),
+  X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137),
+  X(141,145), X(149,153), X(157,161), X(165,169), X(173,177), X(181,185),
+  X(189,193), X(197,201), X(205,209), X(213,217), X(221,225), X(229,233), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(201,205), X(209,213), X(217,221),
+  X(225,229), X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227),
+  X(35,99), X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83),
+  X(115,147), X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67),
+  X(83,99), X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,107), X(107,171), X(43,107), X(43,75), X(107,139),
+  X(171,203), X(11,43), X(75,107), X(139,171), X(27,155), X(91,219), X(27,91),
+  X(155,219), X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219),
+  X(27,59), X(91,123), X(155,187), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(171,187), X(203,219), X(11,19), X(27,35), X(43,51), X(59,67),
+  X(75,83), X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(171,179),
+  X(187,195), X(203,211), X(219,227), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103), X(135,167),
+  X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119), X(119,183),
+  X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119), X(151,183),
+  X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199), X(215,231),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215),
+  X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175), X(47,111),
+  X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175), X(31,159),
+  X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95),
+  X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(207,215), X(223,231), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(199,207), X(215,223), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(227,231), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(127,129), X(131,133), X(135,137), X(139,141), X(143,145),
+  X(147,149), X(151,153), X(155,157), X(159,161), X(163,165), X(167,169),
+  X(171,173), X(175,177), X(179,181), X(183,185), X(187,189), X(191,193),
+  X(195,197), X(199,201), X(203,205), X(207,209), X(211,213), X(215,217),
+  X(219,221), X(223,225), X(227,229), X(231,233), X(1,3), X(5,7), X(9,11),
+  X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43),
+  X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75),
+  X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103),
+  X(105,107), X(109,111), X(113,115), X(117,119), X(121,123), X(125,127),
+  X(129,131), X(133,135), X(137,139), X(141,143), X(145,147), X(149,151),
+  X(153,155), X(157,159), X(161,163), X(165,167), X(169,171), X(173,175),
+  X(177,179), X(181,183), X(185,187), X(189,191), X(193,195), X(197,199),
+  X(201,203), X(205,207), X(209,211), X(213,215), X(217,219), X(221,223),
+  X(225,227), X(229,231), X(2,130), X(66,194), X(2,66), X(130,194), X(34,162),
+  X(98,226), X(34,98), X(162,226), X(2,34), X(66,98), X(130,162), X(194,226),
+  X(18,146), X(82,210), X(18,82), X(146,210), X(50,114), X(114,178), X(50,114),
+  X(50,82), X(114,146), X(178,210), X(18,50), X(82,114), X(146,178), X(18,34),
+  X(50,66), X(82,98), X(114,130), X(146,162), X(178,194), X(210,226), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(10,138),
+  X(74,202), X(10,74), X(138,202), X(42,170), X(106,234), X(42,106), X(170,234),
+  X(10,42), X(74,106), X(138,170), X(202,234), X(26,154), X(90,218), X(26,90),
+  X(154,218), X(58,122), X(122,186), X(58,122), X(58,90), X(122,154), X(186,218),
+  X(26,58), X(90,122), X(154,186), X(26,42), X(58,74), X(90,106), X(122,138),
+  X(154,170), X(186,202), X(218,234), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(138,154), X(170,186), X(202,218), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(194,202), X(210,218), X(226,234), X(6,134), X(70,198), X(6,70),
+  X(134,198), X(38,166), X(102,230), X(38,102), X(166,230), X(6,38), X(70,102),
+  X(134,166), X(198,230), X(22,150), X(86,214), X(22,86), X(150,214), X(54,118),
+  X(118,182), X(54,118), X(54,86), X(118,150), X(182,214), X(22,54), X(86,118),
+  X(150,182), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198),
+  X(214,230), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182),
+  X(198,214), X(14,142), X(78,206), X(14,78), X(142,206), X(46,110), X(110,174),
+  X(46,110), X(46,78), X(110,142), X(174,206), X(14,46), X(78,110), X(142,174),
+  X(30,158), X(94,222), X(30,94), X(158,222), X(62,126), X(126,190), X(62,126),
+  X(62,94), X(126,158), X(190,222), X(30,62), X(94,126), X(158,190), X(14,30),
+  X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(206,222), X(14,22),
+  X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134),
+  X(142,150), X(158,166), X(174,182), X(190,198), X(206,214), X(222,230),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(198,206),
+  X(214,222), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50),
+  X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98), X(102,106),
+  X(110,114), X(118,122), X(126,130), X(134,138), X(142,146), X(150,154),
+  X(158,162), X(166,170), X(174,178), X(182,186), X(190,194), X(198,202),
+  X(206,210), X(214,218), X(222,226), X(230,234), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(226,230),
+  X(4,132), X(68,196), X(4,68), X(132,196), X(36,164), X(100,228), X(36,100),
+  X(164,228), X(4,36), X(68,100), X(132,164), X(196,228), X(20,148), X(84,212),
+  X(20,84), X(148,212), X(52,116), X(116,180), X(52,116), X(52,84), X(116,148),
+  X(180,212), X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(180,196), X(212,228), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(164,180), X(196,212), X(12,140), X(76,204), X(12,76),
+  X(140,204), X(44,108), X(108,172), X(44,108), X(44,76), X(108,140), X(172,204),
+  X(12,44), X(76,108), X(140,172), X(28,156), X(92,220), X(28,92), X(156,220),
+  X(60,124), X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60),
+  X(92,124), X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(172,188), X(204,220), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84),
+  X(92,100), X(108,116), X(124,132), X(140,148), X(156,164), X(172,180),
+  X(188,196), X(204,212), X(220,228), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(196,204), X(212,220), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,168), X(104,232), X(40,104), X(168,232), X(8,40), X(72,104), X(136,168),
+  X(200,232), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120), X(120,184),
+  X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120), X(152,184),
+  X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200), X(216,232),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(200,216),
+  X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176), X(48,112),
+  X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176), X(32,160),
+  X(96,224), X(32,96), X(160,224), X(64,128), X(128,192), X(64,128), X(64,96),
+  X(128,160), X(192,224), X(32,64), X(96,128), X(160,192), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(176,192), X(208,224), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152),
+  X(160,168), X(176,184), X(192,200), X(208,216), X(224,232), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(168,176), X(184,192), X(200,208), X(216,224), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(204,208), X(212,216), X(220,224), X(228,232), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(140,142), X(144,146),
+  X(148,150), X(152,154), X(156,158), X(160,162), X(164,166), X(168,170),
+  X(172,174), X(176,178), X(180,182), X(184,186), X(188,190), X(192,194),
+  X(196,198), X(200,202), X(204,206), X(208,210), X(212,214), X(216,218),
+  X(220,222), X(224,226), X(228,230), X(232,234), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(174,176),
+  X(178,180), X(182,184), X(186,188), X(190,192), X(194,196), X(198,200),
+  X(202,204), X(206,208), X(210,212), X(214,216), X(218,220), X(222,224),
+  X(226,228), X(230,232), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(187,188), X(189,190),
+  X(191,192), X(193,194), X(195,196), X(197,198), X(199,200), X(201,202),
+  X(203,204), X(205,206), X(207,208), X(209,210), X(211,212), X(213,214),
+  X(215,216), X(217,218), X(219,220), X(221,222), X(223,224), X(225,226),
+  X(227,228), X(229,230), X(231,232), X(233,234)
+};
+M(235) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101), X(133,165),
+  X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197), X(213,229),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173), X(45,109),
+  X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81),
+  X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137),
+  X(141,145), X(149,153), X(157,161), X(165,169), X(173,177), X(181,185),
+  X(189,193), X(197,201), X(205,209), X(213,217), X(221,225), X(229,233), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(201,205), X(209,213), X(217,221),
+  X(225,229), X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227),
+  X(35,99), X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83),
+  X(115,147), X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67),
+  X(83,99), X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,171), X(107,235), X(43,107), X(171,235), X(11,43),
+  X(75,107), X(139,171), X(203,235), X(27,155), X(91,219), X(27,91), X(155,219),
+  X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59),
+  X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171),
+  X(187,203), X(219,235), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(203,219), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(227,235), X(7,135), X(71,199), X(7,71),
+  X(135,199), X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103),
+  X(135,167), X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199),
+  X(215,231), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175),
+  X(47,111), X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175),
+  X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127),
+  X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(15,23),
+  X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135),
+  X(143,151), X(159,167), X(175,183), X(191,199), X(207,215), X(223,231),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(199,207),
+  X(215,223), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51),
+  X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99), X(103,107),
+  X(111,115), X(119,123), X(127,131), X(135,139), X(143,147), X(151,155),
+  X(159,163), X(167,171), X(175,179), X(183,187), X(191,195), X(199,203),
+  X(207,211), X(215,219), X(223,227), X(231,235), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(227,231), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(201,203), X(205,207), X(209,211), X(213,215), X(217,219),
+  X(221,223), X(225,227), X(229,231), X(233,235), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,162), X(98,226), X(34,98), X(162,226), X(2,34), X(66,98),
+  X(130,162), X(194,226), X(18,146), X(82,210), X(18,82), X(146,210), X(50,114),
+  X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50), X(82,114),
+  X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194),
+  X(210,226), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,170), X(106,234),
+  X(42,106), X(170,234), X(10,42), X(74,106), X(138,170), X(202,234), X(26,154),
+  X(90,218), X(26,90), X(154,218), X(58,122), X(122,186), X(58,122), X(58,90),
+  X(122,154), X(186,218), X(26,58), X(90,122), X(154,186), X(26,42), X(58,74),
+  X(90,106), X(122,138), X(154,170), X(186,202), X(218,234), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(170,186), X(202,218), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(194,202), X(210,218), X(226,234),
+  X(6,134), X(70,198), X(6,70), X(134,198), X(38,166), X(102,230), X(38,102),
+  X(166,230), X(6,38), X(70,102), X(134,166), X(198,230), X(22,150), X(86,214),
+  X(22,86), X(150,214), X(54,118), X(118,182), X(54,118), X(54,86), X(118,150),
+  X(182,214), X(22,54), X(86,118), X(150,182), X(22,38), X(54,70), X(86,102),
+  X(118,134), X(150,166), X(182,198), X(214,230), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(166,182), X(198,214), X(14,142), X(78,206), X(14,78),
+  X(142,206), X(46,110), X(110,174), X(46,110), X(46,78), X(110,142), X(174,206),
+  X(14,46), X(78,110), X(142,174), X(30,158), X(94,222), X(30,94), X(158,222),
+  X(62,126), X(126,190), X(62,126), X(62,94), X(126,158), X(190,222), X(30,62),
+  X(94,126), X(158,190), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158),
+  X(174,190), X(206,222), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86),
+  X(94,102), X(110,118), X(126,134), X(142,150), X(158,166), X(174,182),
+  X(190,198), X(206,214), X(222,230), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(198,206), X(214,222), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(190,194),
+  X(198,202), X(206,210), X(214,218), X(222,226), X(230,234), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(226,230),
+  X(4,132), X(68,196), X(4,68), X(132,196), X(36,164), X(100,228), X(36,100),
+  X(164,228), X(4,36), X(68,100), X(132,164), X(196,228), X(20,148), X(84,212),
+  X(20,84), X(148,212), X(52,116), X(116,180), X(52,116), X(52,84), X(116,148),
+  X(180,212), X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(180,196), X(212,228), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(164,180), X(196,212), X(12,140), X(76,204), X(12,76),
+  X(140,204), X(44,108), X(108,172), X(44,108), X(44,76), X(108,140), X(172,204),
+  X(12,44), X(76,108), X(140,172), X(28,156), X(92,220), X(28,92), X(156,220),
+  X(60,124), X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60),
+  X(92,124), X(156,188), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(172,188), X(204,220), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84),
+  X(92,100), X(108,116), X(124,132), X(140,148), X(156,164), X(172,180),
+  X(188,196), X(204,212), X(220,228), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(196,204), X(212,220), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,168), X(104,232), X(40,104), X(168,232), X(8,40), X(72,104), X(136,168),
+  X(200,232), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120), X(120,184),
+  X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120), X(152,184),
+  X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200), X(216,232),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(200,216),
+  X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176), X(48,112),
+  X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176), X(32,160),
+  X(96,224), X(32,96), X(160,224), X(64,128), X(128,192), X(64,128), X(64,96),
+  X(128,160), X(192,224), X(32,64), X(96,128), X(160,192), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(176,192), X(208,224), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152),
+  X(160,168), X(176,184), X(192,200), X(208,216), X(224,232), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(168,176), X(184,192), X(200,208), X(216,224), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(204,208), X(212,216), X(220,224), X(228,232), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(140,142), X(144,146),
+  X(148,150), X(152,154), X(156,158), X(160,162), X(164,166), X(168,170),
+  X(172,174), X(176,178), X(180,182), X(184,186), X(188,190), X(192,194),
+  X(196,198), X(200,202), X(204,206), X(208,210), X(212,214), X(216,218),
+  X(220,222), X(224,226), X(228,230), X(232,234), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(174,176),
+  X(178,180), X(182,184), X(186,188), X(190,192), X(194,196), X(198,200),
+  X(202,204), X(206,208), X(210,212), X(214,216), X(218,220), X(222,224),
+  X(226,228), X(230,232), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(142,143),
+  X(144,145), X(146,147), X(148,149), X(150,151), X(152,153), X(154,155),
+  X(156,157), X(158,159), X(160,161), X(162,163), X(164,165), X(166,167),
+  X(168,169), X(170,171), X(172,173), X(174,175), X(176,177), X(178,179),
+  X(180,181), X(182,183), X(184,185), X(186,187), X(188,189), X(190,191),
+  X(192,193), X(194,195), X(196,197), X(198,199), X(200,201), X(202,203),
+  X(204,205), X(206,207), X(208,209), X(210,211), X(212,213), X(214,215),
+  X(216,217), X(218,219), X(220,221), X(222,223), X(224,225), X(226,227),
+  X(228,229), X(230,231), X(232,233), X(234,235), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202), X(203,204), X(205,206), X(207,208), X(209,210),
+  X(211,212), X(213,214), X(215,216), X(217,218), X(219,220), X(221,222),
+  X(223,224), X(225,226), X(227,228), X(229,230), X(231,232), X(233,234)
+};
+M(236) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101), X(133,165),
+  X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197), X(213,229),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,109), X(109,173), X(45,109),
+  X(45,77), X(109,141), X(173,205), X(13,45), X(77,109), X(141,173), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(5,9), X(13,17),
+  X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73), X(77,81),
+  X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129), X(133,137),
+  X(141,145), X(149,153), X(157,161), X(165,169), X(173,177), X(181,185),
+  X(189,193), X(197,201), X(205,209), X(213,217), X(221,225), X(229,233), X(1,5),
+  X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69),
+  X(73,77), X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125),
+  X(129,133), X(137,141), X(145,149), X(153,157), X(161,165), X(169,173),
+  X(177,181), X(185,189), X(193,197), X(201,205), X(209,213), X(217,221),
+  X(225,229), X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227),
+  X(35,99), X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83),
+  X(115,147), X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67),
+  X(83,99), X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,171), X(107,235), X(43,107), X(171,235), X(11,43),
+  X(75,107), X(139,171), X(203,235), X(27,155), X(91,219), X(27,91), X(155,219),
+  X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59),
+  X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171),
+  X(187,203), X(219,235), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(203,219), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(227,235), X(7,135), X(71,199), X(7,71),
+  X(135,199), X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103),
+  X(135,167), X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199),
+  X(215,231), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175),
+  X(47,111), X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175),
+  X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127),
+  X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(15,23),
+  X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135),
+  X(143,151), X(159,167), X(175,183), X(191,199), X(207,215), X(223,231),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(199,207),
+  X(215,223), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51),
+  X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99), X(103,107),
+  X(111,115), X(119,123), X(127,131), X(135,139), X(143,147), X(151,155),
+  X(159,163), X(167,171), X(175,179), X(183,187), X(191,195), X(199,203),
+  X(207,211), X(215,219), X(223,227), X(231,235), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(227,231), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(201,203), X(205,207), X(209,211), X(213,215), X(217,219),
+  X(221,223), X(225,227), X(229,231), X(233,235), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,162), X(98,226), X(34,98), X(162,226), X(2,34), X(66,98),
+  X(130,162), X(194,226), X(18,146), X(82,210), X(18,82), X(146,210), X(50,114),
+  X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50), X(82,114),
+  X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194),
+  X(210,226), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,170), X(106,234),
+  X(42,106), X(170,234), X(10,42), X(74,106), X(138,170), X(202,234), X(26,154),
+  X(90,218), X(26,90), X(154,218), X(58,122), X(122,186), X(58,122), X(58,90),
+  X(122,154), X(186,218), X(26,58), X(90,122), X(154,186), X(26,42), X(58,74),
+  X(90,106), X(122,138), X(154,170), X(186,202), X(218,234), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(170,186), X(202,218), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(194,202), X(210,218), X(226,234),
+  X(6,134), X(70,198), X(6,70), X(134,198), X(38,166), X(102,230), X(38,102),
+  X(166,230), X(6,38), X(70,102), X(134,166), X(198,230), X(22,150), X(86,214),
+  X(22,86), X(150,214), X(54,118), X(118,182), X(54,118), X(54,86), X(118,150),
+  X(182,214), X(22,54), X(86,118), X(150,182), X(22,38), X(54,70), X(86,102),
+  X(118,134), X(150,166), X(182,198), X(214,230), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(166,182), X(198,214), X(14,142), X(78,206), X(14,78),
+  X(142,206), X(46,110), X(110,174), X(46,110), X(46,78), X(110,142), X(174,206),
+  X(14,46), X(78,110), X(142,174), X(30,158), X(94,222), X(30,94), X(158,222),
+  X(62,126), X(126,190), X(62,126), X(62,94), X(126,158), X(190,222), X(30,62),
+  X(94,126), X(158,190), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158),
+  X(174,190), X(206,222), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86),
+  X(94,102), X(110,118), X(126,134), X(142,150), X(158,166), X(174,182),
+  X(190,198), X(206,214), X(222,230), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(198,206), X(214,222), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(190,194),
+  X(198,202), X(206,210), X(214,218), X(222,226), X(230,234), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(226,230),
+  X(4,132), X(68,196), X(4,68), X(132,196), X(36,164), X(100,228), X(36,100),
+  X(164,228), X(4,36), X(68,100), X(132,164), X(196,228), X(20,148), X(84,212),
+  X(20,84), X(148,212), X(52,116), X(116,180), X(52,116), X(52,84), X(116,148),
+  X(180,212), X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(180,196), X(212,228), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(164,180), X(196,212), X(12,140), X(76,204), X(12,76),
+  X(140,204), X(44,172), X(108,236), X(44,108), X(172,236), X(12,44), X(76,108),
+  X(140,172), X(204,236), X(28,156), X(92,220), X(28,92), X(156,220), X(60,124),
+  X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60), X(92,124),
+  X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172), X(188,204),
+  X(220,236), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(204,220), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(132,140), X(148,156), X(164,172), X(180,188),
+  X(196,204), X(212,220), X(228,236), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,168), X(104,232), X(40,104), X(168,232), X(8,40), X(72,104), X(136,168),
+  X(200,232), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120), X(120,184),
+  X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120), X(152,184),
+  X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200), X(216,232),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(200,216),
+  X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176), X(48,112),
+  X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176), X(32,160),
+  X(96,224), X(32,96), X(160,224), X(64,128), X(128,192), X(64,128), X(64,96),
+  X(128,160), X(192,224), X(32,64), X(96,128), X(160,192), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(176,192), X(208,224), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152),
+  X(160,168), X(176,184), X(192,200), X(208,216), X(224,232), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(168,176), X(184,192), X(200,208), X(216,224), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84),
+  X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(136,140), X(144,148), X(152,156), X(160,164), X(168,172), X(176,180),
+  X(184,188), X(192,196), X(200,204), X(208,212), X(216,220), X(224,228),
+  X(232,236), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(180,184), X(188,192), X(196,200), X(204,208),
+  X(212,216), X(220,224), X(228,232), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(110,112), X(114,116), X(118,120), X(122,124), X(126,128), X(130,132),
+  X(134,136), X(138,140), X(142,144), X(146,148), X(150,152), X(154,156),
+  X(158,160), X(162,164), X(166,168), X(170,172), X(174,176), X(178,180),
+  X(182,184), X(186,188), X(190,192), X(194,196), X(198,200), X(202,204),
+  X(206,208), X(210,212), X(214,216), X(218,220), X(222,224), X(226,228),
+  X(230,232), X(234,236), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(187,188), X(189,190),
+  X(191,192), X(193,194), X(195,196), X(197,198), X(199,200), X(201,202),
+  X(203,204), X(205,206), X(207,208), X(209,210), X(211,212), X(213,214),
+  X(215,216), X(217,218), X(219,220), X(221,222), X(223,224), X(225,226),
+  X(227,228), X(229,230), X(231,232), X(233,234), X(235,236)
+};
+M(237) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101), X(133,165),
+  X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197), X(213,229),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237), X(45,109),
+  X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157), X(93,221),
+  X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93), X(125,157),
+  X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77), X(93,109),
+  X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(141,157), X(173,189), X(205,221), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157),
+  X(165,173), X(181,189), X(197,205), X(213,221), X(229,237), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(217,221), X(225,229),
+  X(233,237), X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227),
+  X(35,99), X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83),
+  X(115,147), X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67),
+  X(83,99), X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,171), X(107,235), X(43,107), X(171,235), X(11,43),
+  X(75,107), X(139,171), X(203,235), X(27,155), X(91,219), X(27,91), X(155,219),
+  X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59),
+  X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171),
+  X(187,203), X(219,235), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(203,219), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(227,235), X(7,135), X(71,199), X(7,71),
+  X(135,199), X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103),
+  X(135,167), X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199),
+  X(215,231), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175),
+  X(47,111), X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175),
+  X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127),
+  X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(15,23),
+  X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135),
+  X(143,151), X(159,167), X(175,183), X(191,199), X(207,215), X(223,231),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(199,207),
+  X(215,223), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51),
+  X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99), X(103,107),
+  X(111,115), X(119,123), X(127,131), X(135,139), X(143,147), X(151,155),
+  X(159,163), X(167,171), X(175,179), X(183,187), X(191,195), X(199,203),
+  X(207,211), X(215,219), X(223,227), X(231,235), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(227,231), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(127,129), X(131,133), X(135,137), X(139,141), X(143,145),
+  X(147,149), X(151,153), X(155,157), X(159,161), X(163,165), X(167,169),
+  X(171,173), X(175,177), X(179,181), X(183,185), X(187,189), X(191,193),
+  X(195,197), X(199,201), X(203,205), X(207,209), X(211,213), X(215,217),
+  X(219,221), X(223,225), X(227,229), X(231,233), X(235,237), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(201,203), X(205,207), X(209,211), X(213,215), X(217,219),
+  X(221,223), X(225,227), X(229,231), X(233,235), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,162), X(98,226), X(34,98), X(162,226), X(2,34), X(66,98),
+  X(130,162), X(194,226), X(18,146), X(82,210), X(18,82), X(146,210), X(50,114),
+  X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50), X(82,114),
+  X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194),
+  X(210,226), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,170), X(106,234),
+  X(42,106), X(170,234), X(10,42), X(74,106), X(138,170), X(202,234), X(26,154),
+  X(90,218), X(26,90), X(154,218), X(58,122), X(122,186), X(58,122), X(58,90),
+  X(122,154), X(186,218), X(26,58), X(90,122), X(154,186), X(26,42), X(58,74),
+  X(90,106), X(122,138), X(154,170), X(186,202), X(218,234), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(170,186), X(202,218), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(194,202), X(210,218), X(226,234),
+  X(6,134), X(70,198), X(6,70), X(134,198), X(38,166), X(102,230), X(38,102),
+  X(166,230), X(6,38), X(70,102), X(134,166), X(198,230), X(22,150), X(86,214),
+  X(22,86), X(150,214), X(54,118), X(118,182), X(54,118), X(54,86), X(118,150),
+  X(182,214), X(22,54), X(86,118), X(150,182), X(22,38), X(54,70), X(86,102),
+  X(118,134), X(150,166), X(182,198), X(214,230), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(166,182), X(198,214), X(14,142), X(78,206), X(14,78),
+  X(142,206), X(46,110), X(110,174), X(46,110), X(46,78), X(110,142), X(174,206),
+  X(14,46), X(78,110), X(142,174), X(30,158), X(94,222), X(30,94), X(158,222),
+  X(62,126), X(126,190), X(62,126), X(62,94), X(126,158), X(190,222), X(30,62),
+  X(94,126), X(158,190), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158),
+  X(174,190), X(206,222), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86),
+  X(94,102), X(110,118), X(126,134), X(142,150), X(158,166), X(174,182),
+  X(190,198), X(206,214), X(222,230), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(198,206), X(214,222), X(6,10), X(14,18), X(22,26), X(30,34),
+  X(38,42), X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(190,194),
+  X(198,202), X(206,210), X(214,218), X(222,226), X(230,234), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(226,230),
+  X(4,132), X(68,196), X(4,68), X(132,196), X(36,164), X(100,228), X(36,100),
+  X(164,228), X(4,36), X(68,100), X(132,164), X(196,228), X(20,148), X(84,212),
+  X(20,84), X(148,212), X(52,116), X(116,180), X(52,116), X(52,84), X(116,148),
+  X(180,212), X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(180,196), X(212,228), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(164,180), X(196,212), X(12,140), X(76,204), X(12,76),
+  X(140,204), X(44,172), X(108,236), X(44,108), X(172,236), X(12,44), X(76,108),
+  X(140,172), X(204,236), X(28,156), X(92,220), X(28,92), X(156,220), X(60,124),
+  X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60), X(92,124),
+  X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172), X(188,204),
+  X(220,236), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(204,220), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(132,140), X(148,156), X(164,172), X(180,188),
+  X(196,204), X(212,220), X(228,236), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,168), X(104,232), X(40,104), X(168,232), X(8,40), X(72,104), X(136,168),
+  X(200,232), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120), X(120,184),
+  X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120), X(152,184),
+  X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200), X(216,232),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(200,216),
+  X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176), X(48,112),
+  X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176), X(32,160),
+  X(96,224), X(32,96), X(160,224), X(64,128), X(128,192), X(64,128), X(64,96),
+  X(128,160), X(192,224), X(32,64), X(96,128), X(160,192), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(176,192), X(208,224), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152),
+  X(160,168), X(176,184), X(192,200), X(208,216), X(224,232), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(168,176), X(184,192), X(200,208), X(216,224), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84),
+  X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(136,140), X(144,148), X(152,156), X(160,164), X(168,172), X(176,180),
+  X(184,188), X(192,196), X(200,204), X(208,212), X(216,220), X(224,228),
+  X(232,236), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(180,184), X(188,192), X(196,200), X(204,208),
+  X(212,216), X(220,224), X(228,232), X(2,4), X(6,8), X(10,12), X(14,16),
+  X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48),
+  X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80),
+  X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104), X(106,108),
+  X(110,112), X(114,116), X(118,120), X(122,124), X(126,128), X(130,132),
+  X(134,136), X(138,140), X(142,144), X(146,148), X(150,152), X(154,156),
+  X(158,160), X(162,164), X(166,168), X(170,172), X(174,176), X(178,180),
+  X(182,184), X(186,188), X(190,192), X(194,196), X(198,200), X(202,204),
+  X(206,208), X(210,212), X(214,216), X(218,220), X(222,224), X(226,228),
+  X(230,232), X(234,236), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(142,143),
+  X(144,145), X(146,147), X(148,149), X(150,151), X(152,153), X(154,155),
+  X(156,157), X(158,159), X(160,161), X(162,163), X(164,165), X(166,167),
+  X(168,169), X(170,171), X(172,173), X(174,175), X(176,177), X(178,179),
+  X(180,181), X(182,183), X(184,185), X(186,187), X(188,189), X(190,191),
+  X(192,193), X(194,195), X(196,197), X(198,199), X(200,201), X(202,203),
+  X(204,205), X(206,207), X(208,209), X(210,211), X(212,213), X(214,215),
+  X(216,217), X(218,219), X(220,221), X(222,223), X(224,225), X(226,227),
+  X(228,229), X(230,231), X(232,233), X(234,235), X(236,237), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(221,222), X(223,224), X(225,226), X(227,228), X(229,230),
+  X(231,232), X(233,234), X(235,236)
+};
+M(238) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101), X(133,165),
+  X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197), X(213,229),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237), X(45,109),
+  X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157), X(93,221),
+  X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93), X(125,157),
+  X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77), X(93,109),
+  X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(141,157), X(173,189), X(205,221), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157),
+  X(165,173), X(181,189), X(197,205), X(213,221), X(229,237), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(217,221), X(225,229),
+  X(233,237), X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227),
+  X(35,99), X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83),
+  X(115,147), X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67),
+  X(83,99), X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,171), X(107,235), X(43,107), X(171,235), X(11,43),
+  X(75,107), X(139,171), X(203,235), X(27,155), X(91,219), X(27,91), X(155,219),
+  X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59),
+  X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171),
+  X(187,203), X(219,235), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(203,219), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(227,235), X(7,135), X(71,199), X(7,71),
+  X(135,199), X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103),
+  X(135,167), X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199),
+  X(215,231), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,111), X(111,175),
+  X(47,111), X(47,79), X(111,143), X(175,207), X(15,47), X(79,111), X(143,175),
+  X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127),
+  X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(15,31),
+  X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(15,23),
+  X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135),
+  X(143,151), X(159,167), X(175,183), X(191,199), X(207,215), X(223,231),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(199,207),
+  X(215,223), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51),
+  X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99), X(103,107),
+  X(111,115), X(119,123), X(127,131), X(135,139), X(143,147), X(151,155),
+  X(159,163), X(167,171), X(175,179), X(183,187), X(191,195), X(199,203),
+  X(207,211), X(215,219), X(223,227), X(231,235), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(227,231), X(3,5),
+  X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37),
+  X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69),
+  X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97),
+  X(99,101), X(103,105), X(107,109), X(111,113), X(115,117), X(119,121),
+  X(123,125), X(127,129), X(131,133), X(135,137), X(139,141), X(143,145),
+  X(147,149), X(151,153), X(155,157), X(159,161), X(163,165), X(167,169),
+  X(171,173), X(175,177), X(179,181), X(183,185), X(187,189), X(191,193),
+  X(195,197), X(199,201), X(203,205), X(207,209), X(211,213), X(215,217),
+  X(219,221), X(223,225), X(227,229), X(231,233), X(235,237), X(1,3), X(5,7),
+  X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39),
+  X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71),
+  X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(201,203), X(205,207), X(209,211), X(213,215), X(217,219),
+  X(221,223), X(225,227), X(229,231), X(233,235), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,162), X(98,226), X(34,98), X(162,226), X(2,34), X(66,98),
+  X(130,162), X(194,226), X(18,146), X(82,210), X(18,82), X(146,210), X(50,114),
+  X(114,178), X(50,114), X(50,82), X(114,146), X(178,210), X(18,50), X(82,114),
+  X(146,178), X(18,34), X(50,66), X(82,98), X(114,130), X(146,162), X(178,194),
+  X(210,226), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178),
+  X(194,210), X(10,138), X(74,202), X(10,74), X(138,202), X(42,170), X(106,234),
+  X(42,106), X(170,234), X(10,42), X(74,106), X(138,170), X(202,234), X(26,154),
+  X(90,218), X(26,90), X(154,218), X(58,122), X(122,186), X(58,122), X(58,90),
+  X(122,154), X(186,218), X(26,58), X(90,122), X(154,186), X(26,42), X(58,74),
+  X(90,106), X(122,138), X(154,170), X(186,202), X(218,234), X(10,26), X(42,58),
+  X(74,90), X(106,122), X(138,154), X(170,186), X(202,218), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(194,202), X(210,218), X(226,234),
+  X(6,134), X(70,198), X(6,70), X(134,198), X(38,166), X(102,230), X(38,102),
+  X(166,230), X(6,38), X(70,102), X(134,166), X(198,230), X(22,150), X(86,214),
+  X(22,86), X(150,214), X(54,118), X(118,182), X(54,118), X(54,86), X(118,150),
+  X(182,214), X(22,54), X(86,118), X(150,182), X(22,38), X(54,70), X(86,102),
+  X(118,134), X(150,166), X(182,198), X(214,230), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(166,182), X(198,214), X(14,142), X(78,206), X(14,78),
+  X(142,206), X(46,174), X(110,238), X(46,110), X(174,238), X(14,46), X(78,110),
+  X(142,174), X(206,238), X(30,158), X(94,222), X(30,94), X(158,222), X(62,126),
+  X(126,190), X(62,126), X(62,94), X(126,158), X(190,222), X(30,62), X(94,126),
+  X(158,190), X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(190,206),
+  X(222,238), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190),
+  X(206,222), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94),
+  X(102,110), X(118,126), X(134,142), X(150,158), X(166,174), X(182,190),
+  X(198,206), X(214,222), X(230,238), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(210,214), X(218,222), X(226,230), X(234,238),
+  X(4,132), X(68,196), X(4,68), X(132,196), X(36,164), X(100,228), X(36,100),
+  X(164,228), X(4,36), X(68,100), X(132,164), X(196,228), X(20,148), X(84,212),
+  X(20,84), X(148,212), X(52,116), X(116,180), X(52,116), X(52,84), X(116,148),
+  X(180,212), X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(180,196), X(212,228), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(164,180), X(196,212), X(12,140), X(76,204), X(12,76),
+  X(140,204), X(44,172), X(108,236), X(44,108), X(172,236), X(12,44), X(76,108),
+  X(140,172), X(204,236), X(28,156), X(92,220), X(28,92), X(156,220), X(60,124),
+  X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60), X(92,124),
+  X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172), X(188,204),
+  X(220,236), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(204,220), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(132,140), X(148,156), X(164,172), X(180,188),
+  X(196,204), X(212,220), X(228,236), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,168), X(104,232), X(40,104), X(168,232), X(8,40), X(72,104), X(136,168),
+  X(200,232), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120), X(120,184),
+  X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120), X(152,184),
+  X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200), X(216,232),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(200,216),
+  X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176), X(48,112),
+  X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176), X(32,160),
+  X(96,224), X(32,96), X(160,224), X(64,128), X(128,192), X(64,128), X(64,96),
+  X(128,160), X(192,224), X(32,64), X(96,128), X(160,192), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(176,192), X(208,224), X(16,24), X(32,40),
+  X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136), X(144,152),
+  X(160,168), X(176,184), X(192,200), X(208,216), X(224,232), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(168,176), X(184,192), X(200,208), X(216,224), X(8,12), X(16,20),
+  X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84),
+  X(88,92), X(96,100), X(104,108), X(112,116), X(120,124), X(128,132),
+  X(136,140), X(144,148), X(152,156), X(160,164), X(168,172), X(176,180),
+  X(184,188), X(192,196), X(200,204), X(208,212), X(216,220), X(224,228),
+  X(232,236), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(180,184), X(188,192), X(196,200), X(204,208),
+  X(212,216), X(220,224), X(228,232), X(4,6), X(8,10), X(12,14), X(16,18),
+  X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50),
+  X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82),
+  X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110),
+  X(112,114), X(116,118), X(120,122), X(124,126), X(128,130), X(132,134),
+  X(136,138), X(140,142), X(144,146), X(148,150), X(152,154), X(156,158),
+  X(160,162), X(164,166), X(168,170), X(172,174), X(176,178), X(180,182),
+  X(184,186), X(188,190), X(192,194), X(196,198), X(200,202), X(204,206),
+  X(208,210), X(212,214), X(216,218), X(220,222), X(224,226), X(228,230),
+  X(232,234), X(236,238), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212),
+  X(214,216), X(218,220), X(222,224), X(226,228), X(230,232), X(234,236), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(221,222), X(223,224), X(225,226), X(227,228), X(229,230),
+  X(231,232), X(233,234), X(235,236), X(237,238)
+};
+M(239) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101), X(133,165),
+  X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197), X(213,229),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237), X(45,109),
+  X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157), X(93,221),
+  X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93), X(125,157),
+  X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77), X(93,109),
+  X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(141,157), X(173,189), X(205,221), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157),
+  X(165,173), X(181,189), X(197,205), X(213,221), X(229,237), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(217,221), X(225,229),
+  X(233,237), X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227),
+  X(35,99), X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83),
+  X(115,147), X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67),
+  X(83,99), X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,171), X(107,235), X(43,107), X(171,235), X(11,43),
+  X(75,107), X(139,171), X(203,235), X(27,155), X(91,219), X(27,91), X(155,219),
+  X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59),
+  X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171),
+  X(187,203), X(219,235), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(203,219), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(227,235), X(7,135), X(71,199), X(7,71),
+  X(135,199), X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103),
+  X(135,167), X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199),
+  X(215,231), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,175), X(111,239),
+  X(47,111), X(175,239), X(15,47), X(79,111), X(143,175), X(207,239), X(31,159),
+  X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95),
+  X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(31,47), X(63,79),
+  X(95,111), X(127,143), X(159,175), X(191,207), X(223,239), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(199,207), X(215,223), X(231,239), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(187,191), X(195,199), X(203,207), X(211,215), X(219,223),
+  X(227,231), X(235,239), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(213,215), X(217,219), X(221,223), X(225,227), X(229,231), X(233,235),
+  X(237,239), X(2,130), X(66,194), X(2,66), X(130,194), X(34,162), X(98,226),
+  X(34,98), X(162,226), X(2,34), X(66,98), X(130,162), X(194,226), X(18,146),
+  X(82,210), X(18,82), X(146,210), X(50,114), X(114,178), X(50,114), X(50,82),
+  X(114,146), X(178,210), X(18,50), X(82,114), X(146,178), X(18,34), X(50,66),
+  X(82,98), X(114,130), X(146,162), X(178,194), X(210,226), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(10,138), X(74,202),
+  X(10,74), X(138,202), X(42,170), X(106,234), X(42,106), X(170,234), X(10,42),
+  X(74,106), X(138,170), X(202,234), X(26,154), X(90,218), X(26,90), X(154,218),
+  X(58,122), X(122,186), X(58,122), X(58,90), X(122,154), X(186,218), X(26,58),
+  X(90,122), X(154,186), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170),
+  X(186,202), X(218,234), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154),
+  X(170,186), X(202,218), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(194,202), X(210,218), X(226,234), X(6,134), X(70,198), X(6,70),
+  X(134,198), X(38,166), X(102,230), X(38,102), X(166,230), X(6,38), X(70,102),
+  X(134,166), X(198,230), X(22,150), X(86,214), X(22,86), X(150,214), X(54,118),
+  X(118,182), X(54,118), X(54,86), X(118,150), X(182,214), X(22,54), X(86,118),
+  X(150,182), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198),
+  X(214,230), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182),
+  X(198,214), X(14,142), X(78,206), X(14,78), X(142,206), X(46,174), X(110,238),
+  X(46,110), X(174,238), X(14,46), X(78,110), X(142,174), X(206,238), X(30,158),
+  X(94,222), X(30,94), X(158,222), X(62,126), X(126,190), X(62,126), X(62,94),
+  X(126,158), X(190,222), X(30,62), X(94,126), X(158,190), X(30,46), X(62,78),
+  X(94,110), X(126,142), X(158,174), X(190,206), X(222,238), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(206,222), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(166,174), X(182,190), X(198,206), X(214,222), X(230,238), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(186,190), X(194,198), X(202,206), X(210,214), X(218,222),
+  X(226,230), X(234,238), X(4,132), X(68,196), X(4,68), X(132,196), X(36,164),
+  X(100,228), X(36,100), X(164,228), X(4,36), X(68,100), X(132,164), X(196,228),
+  X(20,148), X(84,212), X(20,84), X(148,212), X(52,116), X(116,180), X(52,116),
+  X(52,84), X(116,148), X(180,212), X(20,52), X(84,116), X(148,180), X(20,36),
+  X(52,68), X(84,100), X(116,132), X(148,164), X(180,196), X(212,228), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(132,148), X(164,180), X(196,212), X(12,140),
+  X(76,204), X(12,76), X(140,204), X(44,172), X(108,236), X(44,108), X(172,236),
+  X(12,44), X(76,108), X(140,172), X(204,236), X(28,156), X(92,220), X(28,92),
+  X(156,220), X(60,124), X(124,188), X(60,124), X(60,92), X(124,156), X(188,220),
+  X(28,60), X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140),
+  X(156,172), X(188,204), X(220,236), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(140,156), X(172,188), X(204,220), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(196,204), X(212,220), X(228,236), X(8,136), X(72,200), X(8,72),
+  X(136,200), X(40,168), X(104,232), X(40,104), X(168,232), X(8,40), X(72,104),
+  X(136,168), X(200,232), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120),
+  X(120,184), X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120),
+  X(152,184), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200),
+  X(216,232), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184),
+  X(200,216), X(16,144), X(80,208), X(16,80), X(144,208), X(48,112), X(112,176),
+  X(48,112), X(48,80), X(112,144), X(176,208), X(16,48), X(80,112), X(144,176),
+  X(32,160), X(96,224), X(32,96), X(160,224), X(64,128), X(128,192), X(64,128),
+  X(64,96), X(128,160), X(192,224), X(32,64), X(96,128), X(160,192), X(16,32),
+  X(48,64), X(80,96), X(112,128), X(144,160), X(176,192), X(208,224), X(16,24),
+  X(32,40), X(48,56), X(64,72), X(80,88), X(96,104), X(112,120), X(128,136),
+  X(144,152), X(160,168), X(176,184), X(192,200), X(208,216), X(224,232),
+  X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96), X(104,112),
+  X(120,128), X(136,144), X(152,160), X(168,176), X(184,192), X(200,208),
+  X(216,224), X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52),
+  X(56,60), X(64,68), X(72,76), X(80,84), X(88,92), X(96,100), X(104,108),
+  X(112,116), X(120,124), X(128,132), X(136,140), X(144,148), X(152,156),
+  X(160,164), X(168,172), X(176,180), X(184,188), X(192,196), X(200,204),
+  X(208,212), X(216,220), X(224,228), X(232,236), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(204,208), X(212,216), X(220,224), X(228,232), X(4,6),
+  X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38),
+  X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70),
+  X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94), X(96,98),
+  X(100,102), X(104,106), X(108,110), X(112,114), X(116,118), X(120,122),
+  X(124,126), X(128,130), X(132,134), X(136,138), X(140,142), X(144,146),
+  X(148,150), X(152,154), X(156,158), X(160,162), X(164,166), X(168,170),
+  X(172,174), X(176,178), X(180,182), X(184,186), X(188,190), X(192,194),
+  X(196,198), X(200,202), X(204,206), X(208,210), X(212,214), X(216,218),
+  X(220,222), X(224,226), X(228,230), X(232,234), X(236,238), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(178,180), X(182,184), X(186,188), X(190,192), X(194,196),
+  X(198,200), X(202,204), X(206,208), X(210,212), X(214,216), X(218,220),
+  X(222,224), X(226,228), X(230,232), X(234,236), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(112,113), X(114,115),
+  X(116,117), X(118,119), X(120,121), X(122,123), X(124,125), X(126,127),
+  X(128,129), X(130,131), X(132,133), X(134,135), X(136,137), X(138,139),
+  X(140,141), X(142,143), X(144,145), X(146,147), X(148,149), X(150,151),
+  X(152,153), X(154,155), X(156,157), X(158,159), X(160,161), X(162,163),
+  X(164,165), X(166,167), X(168,169), X(170,171), X(172,173), X(174,175),
+  X(176,177), X(178,179), X(180,181), X(182,183), X(184,185), X(186,187),
+  X(188,189), X(190,191), X(192,193), X(194,195), X(196,197), X(198,199),
+  X(200,201), X(202,203), X(204,205), X(206,207), X(208,209), X(210,211),
+  X(212,213), X(214,215), X(216,217), X(218,219), X(220,221), X(222,223),
+  X(224,225), X(226,227), X(228,229), X(230,231), X(232,233), X(234,235),
+  X(236,237), X(238,239), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(187,188), X(189,190),
+  X(191,192), X(193,194), X(195,196), X(197,198), X(199,200), X(201,202),
+  X(203,204), X(205,206), X(207,208), X(209,210), X(211,212), X(213,214),
+  X(215,216), X(217,218), X(219,220), X(221,222), X(223,224), X(225,226),
+  X(227,228), X(229,230), X(231,232), X(233,234), X(235,236), X(237,238)
+};
+M(240) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,113), X(113,177), X(49,113), X(49,81), X(113,145),
+  X(177,209), X(17,49), X(81,113), X(145,177), X(17,33), X(49,65), X(81,97),
+  X(113,129), X(145,161), X(177,193), X(209,225), X(1,17), X(33,49), X(65,81),
+  X(97,113), X(129,145), X(161,177), X(193,209), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69), X(133,197),
+  X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101), X(133,165),
+  X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117), X(117,181),
+  X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117), X(149,181),
+  X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197), X(213,229),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237), X(45,109),
+  X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157), X(93,221),
+  X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93), X(125,157),
+  X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77), X(93,109),
+  X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(141,157), X(173,189), X(205,221), X(5,13), X(21,29), X(37,45),
+  X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141), X(149,157),
+  X(165,173), X(181,189), X(197,205), X(213,221), X(229,237), X(1,5), X(9,13),
+  X(17,21), X(25,29), X(33,37), X(41,45), X(49,53), X(57,61), X(65,69), X(73,77),
+  X(81,85), X(89,93), X(97,101), X(105,109), X(113,117), X(121,125), X(129,133),
+  X(137,141), X(145,149), X(153,157), X(161,165), X(169,173), X(177,181),
+  X(185,189), X(193,197), X(201,205), X(209,213), X(217,221), X(225,229),
+  X(233,237), X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227),
+  X(35,99), X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83),
+  X(115,147), X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67),
+  X(83,99), X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51),
+  X(67,83), X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203),
+  X(11,75), X(139,203), X(43,171), X(107,235), X(43,107), X(171,235), X(11,43),
+  X(75,107), X(139,171), X(203,235), X(27,155), X(91,219), X(27,91), X(155,219),
+  X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59),
+  X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171),
+  X(187,203), X(219,235), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155),
+  X(171,187), X(203,219), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(227,235), X(7,135), X(71,199), X(7,71),
+  X(135,199), X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103),
+  X(135,167), X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199),
+  X(215,231), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,175), X(111,239),
+  X(47,111), X(175,239), X(15,47), X(79,111), X(143,175), X(207,239), X(31,159),
+  X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95),
+  X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(31,47), X(63,79),
+  X(95,111), X(127,143), X(159,175), X(191,207), X(223,239), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(199,207), X(215,223), X(231,239), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(187,191), X(195,199), X(203,207), X(211,215), X(219,223),
+  X(227,231), X(235,239), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(213,215), X(217,219), X(221,223), X(225,227), X(229,231), X(233,235),
+  X(237,239), X(2,130), X(66,194), X(2,66), X(130,194), X(34,162), X(98,226),
+  X(34,98), X(162,226), X(2,34), X(66,98), X(130,162), X(194,226), X(18,146),
+  X(82,210), X(18,82), X(146,210), X(50,114), X(114,178), X(50,114), X(50,82),
+  X(114,146), X(178,210), X(18,50), X(82,114), X(146,178), X(18,34), X(50,66),
+  X(82,98), X(114,130), X(146,162), X(178,194), X(210,226), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(10,138), X(74,202),
+  X(10,74), X(138,202), X(42,170), X(106,234), X(42,106), X(170,234), X(10,42),
+  X(74,106), X(138,170), X(202,234), X(26,154), X(90,218), X(26,90), X(154,218),
+  X(58,122), X(122,186), X(58,122), X(58,90), X(122,154), X(186,218), X(26,58),
+  X(90,122), X(154,186), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170),
+  X(186,202), X(218,234), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154),
+  X(170,186), X(202,218), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(194,202), X(210,218), X(226,234), X(6,134), X(70,198), X(6,70),
+  X(134,198), X(38,166), X(102,230), X(38,102), X(166,230), X(6,38), X(70,102),
+  X(134,166), X(198,230), X(22,150), X(86,214), X(22,86), X(150,214), X(54,118),
+  X(118,182), X(54,118), X(54,86), X(118,150), X(182,214), X(22,54), X(86,118),
+  X(150,182), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198),
+  X(214,230), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182),
+  X(198,214), X(14,142), X(78,206), X(14,78), X(142,206), X(46,174), X(110,238),
+  X(46,110), X(174,238), X(14,46), X(78,110), X(142,174), X(206,238), X(30,158),
+  X(94,222), X(30,94), X(158,222), X(62,126), X(126,190), X(62,126), X(62,94),
+  X(126,158), X(190,222), X(30,62), X(94,126), X(158,190), X(30,46), X(62,78),
+  X(94,110), X(126,142), X(158,174), X(190,206), X(222,238), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(206,222), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(166,174), X(182,190), X(198,206), X(214,222), X(230,238), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(186,190), X(194,198), X(202,206), X(210,214), X(218,222),
+  X(226,230), X(234,238), X(4,132), X(68,196), X(4,68), X(132,196), X(36,164),
+  X(100,228), X(36,100), X(164,228), X(4,36), X(68,100), X(132,164), X(196,228),
+  X(20,148), X(84,212), X(20,84), X(148,212), X(52,116), X(116,180), X(52,116),
+  X(52,84), X(116,148), X(180,212), X(20,52), X(84,116), X(148,180), X(20,36),
+  X(52,68), X(84,100), X(116,132), X(148,164), X(180,196), X(212,228), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(132,148), X(164,180), X(196,212), X(12,140),
+  X(76,204), X(12,76), X(140,204), X(44,172), X(108,236), X(44,108), X(172,236),
+  X(12,44), X(76,108), X(140,172), X(204,236), X(28,156), X(92,220), X(28,92),
+  X(156,220), X(60,124), X(124,188), X(60,124), X(60,92), X(124,156), X(188,220),
+  X(28,60), X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140),
+  X(156,172), X(188,204), X(220,236), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(140,156), X(172,188), X(204,220), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(196,204), X(212,220), X(228,236), X(8,136), X(72,200), X(8,72),
+  X(136,200), X(40,168), X(104,232), X(40,104), X(168,232), X(8,40), X(72,104),
+  X(136,168), X(200,232), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120),
+  X(120,184), X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120),
+  X(152,184), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200),
+  X(216,232), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184),
+  X(200,216), X(16,144), X(80,208), X(16,80), X(144,208), X(48,176), X(112,240),
+  X(48,112), X(176,240), X(16,48), X(80,112), X(144,176), X(208,240), X(32,160),
+  X(96,224), X(32,96), X(160,224), X(64,128), X(128,192), X(64,128), X(64,96),
+  X(128,160), X(192,224), X(32,64), X(96,128), X(160,192), X(32,48), X(64,80),
+  X(96,112), X(128,144), X(160,176), X(192,208), X(224,240), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(176,192), X(208,224), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(168,176), X(184,192), X(200,208), X(216,224), X(232,240), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(132,136), X(140,144), X(148,152), X(156,160), X(164,168), X(172,176),
+  X(180,184), X(188,192), X(196,200), X(204,208), X(212,216), X(220,224),
+  X(228,232), X(236,240), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212),
+  X(214,216), X(218,220), X(222,224), X(226,228), X(230,232), X(234,236),
+  X(238,240), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194), X(195,196), X(197,198), X(199,200), X(201,202), X(203,204),
+  X(205,206), X(207,208), X(209,210), X(211,212), X(213,214), X(215,216),
+  X(217,218), X(219,220), X(221,222), X(223,224), X(225,226), X(227,228),
+  X(229,230), X(231,232), X(233,234), X(235,236), X(237,238), X(239,240)
+};
+M(241) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,177), X(113,241), X(49,113), X(177,241), X(17,49),
+  X(81,113), X(145,177), X(209,241), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(193,209), X(225,241), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(185,193),
+  X(201,209), X(217,225), X(233,241), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101),
+  X(133,165), X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197),
+  X(213,229), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237),
+  X(45,109), X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77),
+  X(93,109), X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(229,237), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(213,217), X(221,225),
+  X(229,233), X(237,241), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(177,181), X(185,189),
+  X(193,197), X(201,205), X(209,213), X(217,221), X(225,229), X(233,237),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99),
+  X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211),
+  X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83), X(115,147),
+  X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99),
+  X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203), X(11,75),
+  X(139,203), X(43,171), X(107,235), X(43,107), X(171,235), X(11,43), X(75,107),
+  X(139,171), X(203,235), X(27,155), X(91,219), X(27,91), X(155,219), X(59,123),
+  X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59), X(91,123),
+  X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171), X(187,203),
+  X(219,235), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187),
+  X(203,219), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(179,187),
+  X(195,203), X(211,219), X(227,235), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103), X(135,167),
+  X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119), X(119,183),
+  X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119), X(151,183),
+  X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199), X(215,231),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215),
+  X(15,143), X(79,207), X(15,79), X(143,207), X(47,175), X(111,239), X(47,111),
+  X(175,239), X(15,47), X(79,111), X(143,175), X(207,239), X(31,159), X(95,223),
+  X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95), X(127,159),
+  X(191,223), X(31,63), X(95,127), X(159,191), X(31,47), X(63,79), X(95,111),
+  X(127,143), X(159,175), X(191,207), X(223,239), X(15,31), X(47,63), X(79,95),
+  X(111,127), X(143,159), X(175,191), X(207,223), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159),
+  X(167,175), X(183,191), X(199,207), X(215,223), X(231,239), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(227,231),
+  X(235,239), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61),
+  X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93),
+  X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189),
+  X(191,193), X(195,197), X(199,201), X(203,205), X(207,209), X(211,213),
+  X(215,217), X(219,221), X(223,225), X(227,229), X(231,233), X(235,237),
+  X(239,241), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27),
+  X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59),
+  X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91),
+  X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(117,119),
+  X(121,123), X(125,127), X(129,131), X(133,135), X(137,139), X(141,143),
+  X(145,147), X(149,151), X(153,155), X(157,159), X(161,163), X(165,167),
+  X(169,171), X(173,175), X(177,179), X(181,183), X(185,187), X(189,191),
+  X(193,195), X(197,199), X(201,203), X(205,207), X(209,211), X(213,215),
+  X(217,219), X(221,223), X(225,227), X(229,231), X(233,235), X(237,239),
+  X(2,130), X(66,194), X(2,66), X(130,194), X(34,162), X(98,226), X(34,98),
+  X(162,226), X(2,34), X(66,98), X(130,162), X(194,226), X(18,146), X(82,210),
+  X(18,82), X(146,210), X(50,114), X(114,178), X(50,114), X(50,82), X(114,146),
+  X(178,210), X(18,50), X(82,114), X(146,178), X(18,34), X(50,66), X(82,98),
+  X(114,130), X(146,162), X(178,194), X(210,226), X(2,18), X(34,50), X(66,82),
+  X(98,114), X(130,146), X(162,178), X(194,210), X(10,138), X(74,202), X(10,74),
+  X(138,202), X(42,170), X(106,234), X(42,106), X(170,234), X(10,42), X(74,106),
+  X(138,170), X(202,234), X(26,154), X(90,218), X(26,90), X(154,218), X(58,122),
+  X(122,186), X(58,122), X(58,90), X(122,154), X(186,218), X(26,58), X(90,122),
+  X(154,186), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(186,202),
+  X(218,234), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(170,186),
+  X(202,218), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90),
+  X(98,106), X(114,122), X(130,138), X(146,154), X(162,170), X(178,186),
+  X(194,202), X(210,218), X(226,234), X(6,134), X(70,198), X(6,70), X(134,198),
+  X(38,166), X(102,230), X(38,102), X(166,230), X(6,38), X(70,102), X(134,166),
+  X(198,230), X(22,150), X(86,214), X(22,86), X(150,214), X(54,118), X(118,182),
+  X(54,118), X(54,86), X(118,150), X(182,214), X(22,54), X(86,118), X(150,182),
+  X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198), X(214,230),
+  X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(198,214),
+  X(14,142), X(78,206), X(14,78), X(142,206), X(46,174), X(110,238), X(46,110),
+  X(174,238), X(14,46), X(78,110), X(142,174), X(206,238), X(30,158), X(94,222),
+  X(30,94), X(158,222), X(62,126), X(126,190), X(62,126), X(62,94), X(126,158),
+  X(190,222), X(30,62), X(94,126), X(158,190), X(30,46), X(62,78), X(94,110),
+  X(126,142), X(158,174), X(190,206), X(222,238), X(14,30), X(46,62), X(78,94),
+  X(110,126), X(142,158), X(174,190), X(206,222), X(6,14), X(22,30), X(38,46),
+  X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158),
+  X(166,174), X(182,190), X(198,206), X(214,222), X(230,238), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(226,230),
+  X(234,238), X(4,132), X(68,196), X(4,68), X(132,196), X(36,164), X(100,228),
+  X(36,100), X(164,228), X(4,36), X(68,100), X(132,164), X(196,228), X(20,148),
+  X(84,212), X(20,84), X(148,212), X(52,116), X(116,180), X(52,116), X(52,84),
+  X(116,148), X(180,212), X(20,52), X(84,116), X(148,180), X(20,36), X(52,68),
+  X(84,100), X(116,132), X(148,164), X(180,196), X(212,228), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(164,180), X(196,212), X(12,140), X(76,204),
+  X(12,76), X(140,204), X(44,172), X(108,236), X(44,108), X(172,236), X(12,44),
+  X(76,108), X(140,172), X(204,236), X(28,156), X(92,220), X(28,92), X(156,220),
+  X(60,124), X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60),
+  X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172),
+  X(188,204), X(220,236), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156),
+  X(172,188), X(204,220), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76),
+  X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(196,204), X(212,220), X(228,236), X(8,136), X(72,200), X(8,72),
+  X(136,200), X(40,168), X(104,232), X(40,104), X(168,232), X(8,40), X(72,104),
+  X(136,168), X(200,232), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120),
+  X(120,184), X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120),
+  X(152,184), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200),
+  X(216,232), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184),
+  X(200,216), X(16,144), X(80,208), X(16,80), X(144,208), X(48,176), X(112,240),
+  X(48,112), X(176,240), X(16,48), X(80,112), X(144,176), X(208,240), X(32,160),
+  X(96,224), X(32,96), X(160,224), X(64,128), X(128,192), X(64,128), X(64,96),
+  X(128,160), X(192,224), X(32,64), X(96,128), X(160,192), X(32,48), X(64,80),
+  X(96,112), X(128,144), X(160,176), X(192,208), X(224,240), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(176,192), X(208,224), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(168,176), X(184,192), X(200,208), X(216,224), X(232,240), X(4,8),
+  X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72),
+  X(76,80), X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128),
+  X(132,136), X(140,144), X(148,152), X(156,160), X(164,168), X(172,176),
+  X(180,184), X(188,192), X(196,200), X(204,208), X(212,216), X(220,224),
+  X(228,232), X(236,240), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212),
+  X(214,216), X(218,220), X(222,224), X(226,228), X(230,232), X(234,236),
+  X(238,240), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(132,133),
+  X(134,135), X(136,137), X(138,139), X(140,141), X(142,143), X(144,145),
+  X(146,147), X(148,149), X(150,151), X(152,153), X(154,155), X(156,157),
+  X(158,159), X(160,161), X(162,163), X(164,165), X(166,167), X(168,169),
+  X(170,171), X(172,173), X(174,175), X(176,177), X(178,179), X(180,181),
+  X(182,183), X(184,185), X(186,187), X(188,189), X(190,191), X(192,193),
+  X(194,195), X(196,197), X(198,199), X(200,201), X(202,203), X(204,205),
+  X(206,207), X(208,209), X(210,211), X(212,213), X(214,215), X(216,217),
+  X(218,219), X(220,221), X(222,223), X(224,225), X(226,227), X(228,229),
+  X(230,231), X(232,233), X(234,235), X(236,237), X(238,239), X(240,241), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(221,222), X(223,224), X(225,226), X(227,228), X(229,230),
+  X(231,232), X(233,234), X(235,236), X(237,238), X(239,240)
+};
+M(242) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,177), X(113,241), X(49,113), X(177,241), X(17,49),
+  X(81,113), X(145,177), X(209,241), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(193,209), X(225,241), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(185,193),
+  X(201,209), X(217,225), X(233,241), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101),
+  X(133,165), X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197),
+  X(213,229), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237),
+  X(45,109), X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77),
+  X(93,109), X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(229,237), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(213,217), X(221,225),
+  X(229,233), X(237,241), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(177,181), X(185,189),
+  X(193,197), X(201,205), X(209,213), X(217,221), X(225,229), X(233,237),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99),
+  X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211),
+  X(19,83), X(147,211), X(51,115), X(115,179), X(51,115), X(51,83), X(115,147),
+  X(179,211), X(19,51), X(83,115), X(147,179), X(19,35), X(51,67), X(83,99),
+  X(115,131), X(147,163), X(179,195), X(211,227), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(163,179), X(195,211), X(11,139), X(75,203), X(11,75),
+  X(139,203), X(43,171), X(107,235), X(43,107), X(171,235), X(11,43), X(75,107),
+  X(139,171), X(203,235), X(27,155), X(91,219), X(27,91), X(155,219), X(59,123),
+  X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59), X(91,123),
+  X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171), X(187,203),
+  X(219,235), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187),
+  X(203,219), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(179,187),
+  X(195,203), X(211,219), X(227,235), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103), X(135,167),
+  X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119), X(119,183),
+  X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119), X(151,183),
+  X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199), X(215,231),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215),
+  X(15,143), X(79,207), X(15,79), X(143,207), X(47,175), X(111,239), X(47,111),
+  X(175,239), X(15,47), X(79,111), X(143,175), X(207,239), X(31,159), X(95,223),
+  X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95), X(127,159),
+  X(191,223), X(31,63), X(95,127), X(159,191), X(31,47), X(63,79), X(95,111),
+  X(127,143), X(159,175), X(191,207), X(223,239), X(15,31), X(47,63), X(79,95),
+  X(111,127), X(143,159), X(175,191), X(207,223), X(7,15), X(23,31), X(39,47),
+  X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143), X(151,159),
+  X(167,175), X(183,191), X(199,207), X(215,223), X(231,239), X(3,7), X(11,15),
+  X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79),
+  X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(227,231),
+  X(235,239), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61),
+  X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93),
+  X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189),
+  X(191,193), X(195,197), X(199,201), X(203,205), X(207,209), X(211,213),
+  X(215,217), X(219,221), X(223,225), X(227,229), X(231,233), X(235,237),
+  X(239,241), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27),
+  X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59),
+  X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91),
+  X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115), X(117,119),
+  X(121,123), X(125,127), X(129,131), X(133,135), X(137,139), X(141,143),
+  X(145,147), X(149,151), X(153,155), X(157,159), X(161,163), X(165,167),
+  X(169,171), X(173,175), X(177,179), X(181,183), X(185,187), X(189,191),
+  X(193,195), X(197,199), X(201,203), X(205,207), X(209,211), X(213,215),
+  X(217,219), X(221,223), X(225,227), X(229,231), X(233,235), X(237,239),
+  X(2,130), X(66,194), X(2,66), X(130,194), X(34,162), X(98,226), X(34,98),
+  X(162,226), X(2,34), X(66,98), X(130,162), X(194,226), X(18,146), X(82,210),
+  X(18,82), X(146,210), X(50,178), X(114,242), X(50,114), X(178,242), X(18,50),
+  X(82,114), X(146,178), X(210,242), X(2,18), X(34,50), X(66,82), X(98,114),
+  X(130,146), X(162,178), X(194,210), X(226,242), X(10,138), X(74,202), X(10,74),
+  X(138,202), X(42,170), X(106,234), X(42,106), X(170,234), X(10,42), X(74,106),
+  X(138,170), X(202,234), X(26,154), X(90,218), X(26,90), X(154,218), X(58,122),
+  X(122,186), X(58,122), X(58,90), X(122,154), X(186,218), X(26,58), X(90,122),
+  X(154,186), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(186,202),
+  X(218,234), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(170,186),
+  X(202,218), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(106,114), X(122,130), X(138,146), X(154,162), X(170,178), X(186,194),
+  X(202,210), X(218,226), X(234,242), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(194,202), X(210,218), X(226,234), X(6,134), X(70,198), X(6,70),
+  X(134,198), X(38,166), X(102,230), X(38,102), X(166,230), X(6,38), X(70,102),
+  X(134,166), X(198,230), X(22,150), X(86,214), X(22,86), X(150,214), X(54,118),
+  X(118,182), X(54,118), X(54,86), X(118,150), X(182,214), X(22,54), X(86,118),
+  X(150,182), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198),
+  X(214,230), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182),
+  X(198,214), X(14,142), X(78,206), X(14,78), X(142,206), X(46,174), X(110,238),
+  X(46,110), X(174,238), X(14,46), X(78,110), X(142,174), X(206,238), X(30,158),
+  X(94,222), X(30,94), X(158,222), X(62,126), X(126,190), X(62,126), X(62,94),
+  X(126,158), X(190,222), X(30,62), X(94,126), X(158,190), X(30,46), X(62,78),
+  X(94,110), X(126,142), X(158,174), X(190,206), X(222,238), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(206,222), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(166,174), X(182,190), X(198,206), X(214,222), X(230,238),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(158,162), X(166,170),
+  X(174,178), X(182,186), X(190,194), X(198,202), X(206,210), X(214,218),
+  X(222,226), X(230,234), X(238,242), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(210,214), X(218,222), X(226,230), X(234,238),
+  X(4,132), X(68,196), X(4,68), X(132,196), X(36,164), X(100,228), X(36,100),
+  X(164,228), X(4,36), X(68,100), X(132,164), X(196,228), X(20,148), X(84,212),
+  X(20,84), X(148,212), X(52,116), X(116,180), X(52,116), X(52,84), X(116,148),
+  X(180,212), X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(180,196), X(212,228), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(164,180), X(196,212), X(12,140), X(76,204), X(12,76),
+  X(140,204), X(44,172), X(108,236), X(44,108), X(172,236), X(12,44), X(76,108),
+  X(140,172), X(204,236), X(28,156), X(92,220), X(28,92), X(156,220), X(60,124),
+  X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60), X(92,124),
+  X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172), X(188,204),
+  X(220,236), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(204,220), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(132,140), X(148,156), X(164,172), X(180,188),
+  X(196,204), X(212,220), X(228,236), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,168), X(104,232), X(40,104), X(168,232), X(8,40), X(72,104), X(136,168),
+  X(200,232), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120), X(120,184),
+  X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120), X(152,184),
+  X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200), X(216,232),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(200,216),
+  X(16,144), X(80,208), X(16,80), X(144,208), X(48,176), X(112,240), X(48,112),
+  X(176,240), X(16,48), X(80,112), X(144,176), X(208,240), X(32,160), X(96,224),
+  X(32,96), X(160,224), X(64,128), X(128,192), X(64,128), X(64,96), X(128,160),
+  X(192,224), X(32,64), X(96,128), X(160,192), X(32,48), X(64,80), X(96,112),
+  X(128,144), X(160,176), X(192,208), X(224,240), X(16,32), X(48,64), X(80,96),
+  X(112,128), X(144,160), X(176,192), X(208,224), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160),
+  X(168,176), X(184,192), X(200,208), X(216,224), X(232,240), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(204,208), X(212,216), X(220,224), X(228,232),
+  X(236,240), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30),
+  X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62),
+  X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94),
+  X(96,98), X(100,102), X(104,106), X(108,110), X(112,114), X(116,118),
+  X(120,122), X(124,126), X(128,130), X(132,134), X(136,138), X(140,142),
+  X(144,146), X(148,150), X(152,154), X(156,158), X(160,162), X(164,166),
+  X(168,170), X(172,174), X(176,178), X(180,182), X(184,186), X(188,190),
+  X(192,194), X(196,198), X(200,202), X(204,206), X(208,210), X(212,214),
+  X(216,218), X(220,222), X(224,226), X(228,230), X(232,234), X(236,238),
+  X(240,242), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212),
+  X(214,216), X(218,220), X(222,224), X(226,228), X(230,232), X(234,236),
+  X(238,240), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194), X(195,196), X(197,198), X(199,200), X(201,202), X(203,204),
+  X(205,206), X(207,208), X(209,210), X(211,212), X(213,214), X(215,216),
+  X(217,218), X(219,220), X(221,222), X(223,224), X(225,226), X(227,228),
+  X(229,230), X(231,232), X(233,234), X(235,236), X(237,238), X(239,240),
+  X(241,242)
+};
+M(243) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,177), X(113,241), X(49,113), X(177,241), X(17,49),
+  X(81,113), X(145,177), X(209,241), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(193,209), X(225,241), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(185,193),
+  X(201,209), X(217,225), X(233,241), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101),
+  X(133,165), X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197),
+  X(213,229), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237),
+  X(45,109), X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77),
+  X(93,109), X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(229,237), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(213,217), X(221,225),
+  X(229,233), X(237,241), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(177,181), X(185,189),
+  X(193,197), X(201,205), X(209,213), X(217,221), X(225,229), X(233,237),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99),
+  X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211),
+  X(19,83), X(147,211), X(51,179), X(115,243), X(51,115), X(179,243), X(19,51),
+  X(83,115), X(147,179), X(211,243), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(163,179), X(195,211), X(227,243), X(11,139), X(75,203), X(11,75),
+  X(139,203), X(43,171), X(107,235), X(43,107), X(171,235), X(11,43), X(75,107),
+  X(139,171), X(203,235), X(27,155), X(91,219), X(27,91), X(155,219), X(59,123),
+  X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59), X(91,123),
+  X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171), X(187,203),
+  X(219,235), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187),
+  X(203,219), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(155,163), X(171,179), X(187,195),
+  X(203,211), X(219,227), X(235,243), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(227,235), X(7,135), X(71,199), X(7,71),
+  X(135,199), X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103),
+  X(135,167), X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199),
+  X(215,231), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,175), X(111,239),
+  X(47,111), X(175,239), X(15,47), X(79,111), X(143,175), X(207,239), X(31,159),
+  X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95),
+  X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(31,47), X(63,79),
+  X(95,111), X(127,143), X(159,175), X(191,207), X(223,239), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(199,207), X(215,223), X(231,239),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(143,147), X(151,155), X(159,163), X(167,171),
+  X(175,179), X(183,187), X(191,195), X(199,203), X(207,211), X(215,219),
+  X(223,227), X(231,235), X(239,243), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191),
+  X(195,199), X(203,207), X(211,215), X(219,223), X(227,231), X(235,239), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(201,203), X(205,207), X(209,211), X(213,215), X(217,219),
+  X(221,223), X(225,227), X(229,231), X(233,235), X(237,239), X(241,243),
+  X(2,130), X(66,194), X(2,66), X(130,194), X(34,162), X(98,226), X(34,98),
+  X(162,226), X(2,34), X(66,98), X(130,162), X(194,226), X(18,146), X(82,210),
+  X(18,82), X(146,210), X(50,178), X(114,242), X(50,114), X(178,242), X(18,50),
+  X(82,114), X(146,178), X(210,242), X(2,18), X(34,50), X(66,82), X(98,114),
+  X(130,146), X(162,178), X(194,210), X(226,242), X(10,138), X(74,202), X(10,74),
+  X(138,202), X(42,170), X(106,234), X(42,106), X(170,234), X(10,42), X(74,106),
+  X(138,170), X(202,234), X(26,154), X(90,218), X(26,90), X(154,218), X(58,122),
+  X(122,186), X(58,122), X(58,90), X(122,154), X(186,218), X(26,58), X(90,122),
+  X(154,186), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(186,202),
+  X(218,234), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(170,186),
+  X(202,218), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(106,114), X(122,130), X(138,146), X(154,162), X(170,178), X(186,194),
+  X(202,210), X(218,226), X(234,242), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(194,202), X(210,218), X(226,234), X(6,134), X(70,198), X(6,70),
+  X(134,198), X(38,166), X(102,230), X(38,102), X(166,230), X(6,38), X(70,102),
+  X(134,166), X(198,230), X(22,150), X(86,214), X(22,86), X(150,214), X(54,118),
+  X(118,182), X(54,118), X(54,86), X(118,150), X(182,214), X(22,54), X(86,118),
+  X(150,182), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198),
+  X(214,230), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182),
+  X(198,214), X(14,142), X(78,206), X(14,78), X(142,206), X(46,174), X(110,238),
+  X(46,110), X(174,238), X(14,46), X(78,110), X(142,174), X(206,238), X(30,158),
+  X(94,222), X(30,94), X(158,222), X(62,126), X(126,190), X(62,126), X(62,94),
+  X(126,158), X(190,222), X(30,62), X(94,126), X(158,190), X(30,46), X(62,78),
+  X(94,110), X(126,142), X(158,174), X(190,206), X(222,238), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(206,222), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(166,174), X(182,190), X(198,206), X(214,222), X(230,238),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(158,162), X(166,170),
+  X(174,178), X(182,186), X(190,194), X(198,202), X(206,210), X(214,218),
+  X(222,226), X(230,234), X(238,242), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(210,214), X(218,222), X(226,230), X(234,238),
+  X(4,132), X(68,196), X(4,68), X(132,196), X(36,164), X(100,228), X(36,100),
+  X(164,228), X(4,36), X(68,100), X(132,164), X(196,228), X(20,148), X(84,212),
+  X(20,84), X(148,212), X(52,116), X(116,180), X(52,116), X(52,84), X(116,148),
+  X(180,212), X(20,52), X(84,116), X(148,180), X(20,36), X(52,68), X(84,100),
+  X(116,132), X(148,164), X(180,196), X(212,228), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(164,180), X(196,212), X(12,140), X(76,204), X(12,76),
+  X(140,204), X(44,172), X(108,236), X(44,108), X(172,236), X(12,44), X(76,108),
+  X(140,172), X(204,236), X(28,156), X(92,220), X(28,92), X(156,220), X(60,124),
+  X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60), X(92,124),
+  X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172), X(188,204),
+  X(220,236), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(204,220), X(4,12), X(20,28), X(36,44), X(52,60), X(68,76), X(84,92),
+  X(100,108), X(116,124), X(132,140), X(148,156), X(164,172), X(180,188),
+  X(196,204), X(212,220), X(228,236), X(8,136), X(72,200), X(8,72), X(136,200),
+  X(40,168), X(104,232), X(40,104), X(168,232), X(8,40), X(72,104), X(136,168),
+  X(200,232), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120), X(120,184),
+  X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120), X(152,184),
+  X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200), X(216,232),
+  X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184), X(200,216),
+  X(16,144), X(80,208), X(16,80), X(144,208), X(48,176), X(112,240), X(48,112),
+  X(176,240), X(16,48), X(80,112), X(144,176), X(208,240), X(32,160), X(96,224),
+  X(32,96), X(160,224), X(64,128), X(128,192), X(64,128), X(64,96), X(128,160),
+  X(192,224), X(32,64), X(96,128), X(160,192), X(32,48), X(64,80), X(96,112),
+  X(128,144), X(160,176), X(192,208), X(224,240), X(16,32), X(48,64), X(80,96),
+  X(112,128), X(144,160), X(176,192), X(208,224), X(8,16), X(24,32), X(40,48),
+  X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160),
+  X(168,176), X(184,192), X(200,208), X(216,224), X(232,240), X(4,8), X(12,16),
+  X(20,24), X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80),
+  X(84,88), X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(204,208), X(212,216), X(220,224), X(228,232),
+  X(236,240), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30),
+  X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62),
+  X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94),
+  X(96,98), X(100,102), X(104,106), X(108,110), X(112,114), X(116,118),
+  X(120,122), X(124,126), X(128,130), X(132,134), X(136,138), X(140,142),
+  X(144,146), X(148,150), X(152,154), X(156,158), X(160,162), X(164,166),
+  X(168,170), X(172,174), X(176,178), X(180,182), X(184,186), X(188,190),
+  X(192,194), X(196,198), X(200,202), X(204,206), X(208,210), X(212,214),
+  X(216,218), X(220,222), X(224,226), X(228,230), X(232,234), X(236,238),
+  X(240,242), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212),
+  X(214,216), X(218,220), X(222,224), X(226,228), X(230,232), X(234,236),
+  X(238,240), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(132,133),
+  X(134,135), X(136,137), X(138,139), X(140,141), X(142,143), X(144,145),
+  X(146,147), X(148,149), X(150,151), X(152,153), X(154,155), X(156,157),
+  X(158,159), X(160,161), X(162,163), X(164,165), X(166,167), X(168,169),
+  X(170,171), X(172,173), X(174,175), X(176,177), X(178,179), X(180,181),
+  X(182,183), X(184,185), X(186,187), X(188,189), X(190,191), X(192,193),
+  X(194,195), X(196,197), X(198,199), X(200,201), X(202,203), X(204,205),
+  X(206,207), X(208,209), X(210,211), X(212,213), X(214,215), X(216,217),
+  X(218,219), X(220,221), X(222,223), X(224,225), X(226,227), X(228,229),
+  X(230,231), X(232,233), X(234,235), X(236,237), X(238,239), X(240,241),
+  X(242,243), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194), X(195,196), X(197,198), X(199,200), X(201,202), X(203,204),
+  X(205,206), X(207,208), X(209,210), X(211,212), X(213,214), X(215,216),
+  X(217,218), X(219,220), X(221,222), X(223,224), X(225,226), X(227,228),
+  X(229,230), X(231,232), X(233,234), X(235,236), X(237,238), X(239,240),
+  X(241,242)
+};
+M(244) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,177), X(113,241), X(49,113), X(177,241), X(17,49),
+  X(81,113), X(145,177), X(209,241), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(193,209), X(225,241), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(185,193),
+  X(201,209), X(217,225), X(233,241), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101),
+  X(133,165), X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,117),
+  X(117,181), X(53,117), X(53,85), X(117,149), X(181,213), X(21,53), X(85,117),
+  X(149,181), X(21,37), X(53,69), X(85,101), X(117,133), X(149,165), X(181,197),
+  X(213,229), X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181),
+  X(197,213), X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237),
+  X(45,109), X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77),
+  X(93,109), X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(229,237), X(5,9),
+  X(13,17), X(21,25), X(29,33), X(37,41), X(45,49), X(53,57), X(61,65), X(69,73),
+  X(77,81), X(85,89), X(93,97), X(101,105), X(109,113), X(117,121), X(125,129),
+  X(133,137), X(141,145), X(149,153), X(157,161), X(165,169), X(173,177),
+  X(181,185), X(189,193), X(197,201), X(205,209), X(213,217), X(221,225),
+  X(229,233), X(237,241), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(177,181), X(185,189),
+  X(193,197), X(201,205), X(209,213), X(217,221), X(225,229), X(233,237),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99),
+  X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211),
+  X(19,83), X(147,211), X(51,179), X(115,243), X(51,115), X(179,243), X(19,51),
+  X(83,115), X(147,179), X(211,243), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(163,179), X(195,211), X(227,243), X(11,139), X(75,203), X(11,75),
+  X(139,203), X(43,171), X(107,235), X(43,107), X(171,235), X(11,43), X(75,107),
+  X(139,171), X(203,235), X(27,155), X(91,219), X(27,91), X(155,219), X(59,123),
+  X(123,187), X(59,123), X(59,91), X(123,155), X(187,219), X(27,59), X(91,123),
+  X(155,187), X(27,43), X(59,75), X(91,107), X(123,139), X(155,171), X(187,203),
+  X(219,235), X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187),
+  X(203,219), X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99),
+  X(107,115), X(123,131), X(139,147), X(155,163), X(171,179), X(187,195),
+  X(203,211), X(219,227), X(235,243), X(3,11), X(19,27), X(35,43), X(51,59),
+  X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(227,235), X(7,135), X(71,199), X(7,71),
+  X(135,199), X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103),
+  X(135,167), X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,119),
+  X(119,183), X(55,119), X(55,87), X(119,151), X(183,215), X(23,55), X(87,119),
+  X(151,183), X(23,39), X(55,71), X(87,103), X(119,135), X(151,167), X(183,199),
+  X(215,231), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183),
+  X(199,215), X(15,143), X(79,207), X(15,79), X(143,207), X(47,175), X(111,239),
+  X(47,111), X(175,239), X(15,47), X(79,111), X(143,175), X(207,239), X(31,159),
+  X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95),
+  X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(31,47), X(63,79),
+  X(95,111), X(127,143), X(159,175), X(191,207), X(223,239), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(199,207), X(215,223), X(231,239),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(143,147), X(151,155), X(159,163), X(167,171),
+  X(175,179), X(183,187), X(191,195), X(199,203), X(207,211), X(215,219),
+  X(223,227), X(231,235), X(239,243), X(3,7), X(11,15), X(19,23), X(27,31),
+  X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191),
+  X(195,199), X(203,207), X(211,215), X(219,223), X(227,231), X(235,239), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(17,19), X(21,23), X(25,27), X(29,31), X(33,35),
+  X(37,39), X(41,43), X(45,47), X(49,51), X(53,55), X(57,59), X(61,63), X(65,67),
+  X(69,71), X(73,75), X(77,79), X(81,83), X(85,87), X(89,91), X(93,95), X(97,99),
+  X(101,103), X(105,107), X(109,111), X(113,115), X(117,119), X(121,123),
+  X(125,127), X(129,131), X(133,135), X(137,139), X(141,143), X(145,147),
+  X(149,151), X(153,155), X(157,159), X(161,163), X(165,167), X(169,171),
+  X(173,175), X(177,179), X(181,183), X(185,187), X(189,191), X(193,195),
+  X(197,199), X(201,203), X(205,207), X(209,211), X(213,215), X(217,219),
+  X(221,223), X(225,227), X(229,231), X(233,235), X(237,239), X(241,243),
+  X(2,130), X(66,194), X(2,66), X(130,194), X(34,162), X(98,226), X(34,98),
+  X(162,226), X(2,34), X(66,98), X(130,162), X(194,226), X(18,146), X(82,210),
+  X(18,82), X(146,210), X(50,178), X(114,242), X(50,114), X(178,242), X(18,50),
+  X(82,114), X(146,178), X(210,242), X(2,18), X(34,50), X(66,82), X(98,114),
+  X(130,146), X(162,178), X(194,210), X(226,242), X(10,138), X(74,202), X(10,74),
+  X(138,202), X(42,170), X(106,234), X(42,106), X(170,234), X(10,42), X(74,106),
+  X(138,170), X(202,234), X(26,154), X(90,218), X(26,90), X(154,218), X(58,122),
+  X(122,186), X(58,122), X(58,90), X(122,154), X(186,218), X(26,58), X(90,122),
+  X(154,186), X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(186,202),
+  X(218,234), X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(170,186),
+  X(202,218), X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98),
+  X(106,114), X(122,130), X(138,146), X(154,162), X(170,178), X(186,194),
+  X(202,210), X(218,226), X(234,242), X(2,10), X(18,26), X(34,42), X(50,58),
+  X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(194,202), X(210,218), X(226,234), X(6,134), X(70,198), X(6,70),
+  X(134,198), X(38,166), X(102,230), X(38,102), X(166,230), X(6,38), X(70,102),
+  X(134,166), X(198,230), X(22,150), X(86,214), X(22,86), X(150,214), X(54,118),
+  X(118,182), X(54,118), X(54,86), X(118,150), X(182,214), X(22,54), X(86,118),
+  X(150,182), X(22,38), X(54,70), X(86,102), X(118,134), X(150,166), X(182,198),
+  X(214,230), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182),
+  X(198,214), X(14,142), X(78,206), X(14,78), X(142,206), X(46,174), X(110,238),
+  X(46,110), X(174,238), X(14,46), X(78,110), X(142,174), X(206,238), X(30,158),
+  X(94,222), X(30,94), X(158,222), X(62,126), X(126,190), X(62,126), X(62,94),
+  X(126,158), X(190,222), X(30,62), X(94,126), X(158,190), X(30,46), X(62,78),
+  X(94,110), X(126,142), X(158,174), X(190,206), X(222,238), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(206,222), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(166,174), X(182,190), X(198,206), X(214,222), X(230,238),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(158,162), X(166,170),
+  X(174,178), X(182,186), X(190,194), X(198,202), X(206,210), X(214,218),
+  X(222,226), X(230,234), X(238,242), X(2,6), X(10,14), X(18,22), X(26,30),
+  X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(210,214), X(218,222), X(226,230), X(234,238),
+  X(4,132), X(68,196), X(4,68), X(132,196), X(36,164), X(100,228), X(36,100),
+  X(164,228), X(4,36), X(68,100), X(132,164), X(196,228), X(20,148), X(84,212),
+  X(20,84), X(148,212), X(52,180), X(116,244), X(52,116), X(180,244), X(20,52),
+  X(84,116), X(148,180), X(212,244), X(4,20), X(36,52), X(68,84), X(100,116),
+  X(132,148), X(164,180), X(196,212), X(228,244), X(12,140), X(76,204), X(12,76),
+  X(140,204), X(44,172), X(108,236), X(44,108), X(172,236), X(12,44), X(76,108),
+  X(140,172), X(204,236), X(28,156), X(92,220), X(28,92), X(156,220), X(60,124),
+  X(124,188), X(60,124), X(60,92), X(124,156), X(188,220), X(28,60), X(92,124),
+  X(156,188), X(28,44), X(60,76), X(92,108), X(124,140), X(156,172), X(188,204),
+  X(220,236), X(12,28), X(44,60), X(76,92), X(108,124), X(140,156), X(172,188),
+  X(204,220), X(12,20), X(28,36), X(44,52), X(60,68), X(76,84), X(92,100),
+  X(108,116), X(124,132), X(140,148), X(156,164), X(172,180), X(188,196),
+  X(204,212), X(220,228), X(236,244), X(4,12), X(20,28), X(36,44), X(52,60),
+  X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156), X(164,172),
+  X(180,188), X(196,204), X(212,220), X(228,236), X(8,136), X(72,200), X(8,72),
+  X(136,200), X(40,168), X(104,232), X(40,104), X(168,232), X(8,40), X(72,104),
+  X(136,168), X(200,232), X(24,152), X(88,216), X(24,88), X(152,216), X(56,120),
+  X(120,184), X(56,120), X(56,88), X(120,152), X(184,216), X(24,56), X(88,120),
+  X(152,184), X(24,40), X(56,72), X(88,104), X(120,136), X(152,168), X(184,200),
+  X(216,232), X(8,24), X(40,56), X(72,88), X(104,120), X(136,152), X(168,184),
+  X(200,216), X(16,144), X(80,208), X(16,80), X(144,208), X(48,176), X(112,240),
+  X(48,112), X(176,240), X(16,48), X(80,112), X(144,176), X(208,240), X(32,160),
+  X(96,224), X(32,96), X(160,224), X(64,128), X(128,192), X(64,128), X(64,96),
+  X(128,160), X(192,224), X(32,64), X(96,128), X(160,192), X(32,48), X(64,80),
+  X(96,112), X(128,144), X(160,176), X(192,208), X(224,240), X(16,32), X(48,64),
+  X(80,96), X(112,128), X(144,160), X(176,192), X(208,224), X(8,16), X(24,32),
+  X(40,48), X(56,64), X(72,80), X(88,96), X(104,112), X(120,128), X(136,144),
+  X(152,160), X(168,176), X(184,192), X(200,208), X(216,224), X(232,240),
+  X(8,12), X(16,20), X(24,28), X(32,36), X(40,44), X(48,52), X(56,60), X(64,68),
+  X(72,76), X(80,84), X(88,92), X(96,100), X(104,108), X(112,116), X(120,124),
+  X(128,132), X(136,140), X(144,148), X(152,156), X(160,164), X(168,172),
+  X(176,180), X(184,188), X(192,196), X(200,204), X(208,212), X(216,220),
+  X(224,228), X(232,236), X(240,244), X(4,8), X(12,16), X(20,24), X(28,32),
+  X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(212,216), X(220,224), X(228,232), X(236,240), X(2,4),
+  X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36),
+  X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68),
+  X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96),
+  X(98,100), X(102,104), X(106,108), X(110,112), X(114,116), X(118,120),
+  X(122,124), X(126,128), X(130,132), X(134,136), X(138,140), X(142,144),
+  X(146,148), X(150,152), X(154,156), X(158,160), X(162,164), X(166,168),
+  X(170,172), X(174,176), X(178,180), X(182,184), X(186,188), X(190,192),
+  X(194,196), X(198,200), X(202,204), X(206,208), X(210,212), X(214,216),
+  X(218,220), X(222,224), X(226,228), X(230,232), X(234,236), X(238,240),
+  X(242,244), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194), X(195,196), X(197,198), X(199,200), X(201,202), X(203,204),
+  X(205,206), X(207,208), X(209,210), X(211,212), X(213,214), X(215,216),
+  X(217,218), X(219,220), X(221,222), X(223,224), X(225,226), X(227,228),
+  X(229,230), X(231,232), X(233,234), X(235,236), X(237,238), X(239,240),
+  X(241,242), X(243,244)
+};
+M(245) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,177), X(113,241), X(49,113), X(177,241), X(17,49),
+  X(81,113), X(145,177), X(209,241), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(193,209), X(225,241), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(185,193),
+  X(201,209), X(217,225), X(233,241), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101),
+  X(133,165), X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,181),
+  X(117,245), X(53,117), X(181,245), X(21,53), X(85,117), X(149,181), X(213,245),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(229,245), X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237),
+  X(45,109), X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77),
+  X(93,109), X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(237,245),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205),
+  X(213,221), X(229,237), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(177,181), X(185,189),
+  X(193,197), X(201,205), X(209,213), X(217,221), X(225,229), X(233,237),
+  X(241,245), X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227),
+  X(35,99), X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,179), X(115,243), X(51,115), X(179,243),
+  X(19,51), X(83,115), X(147,179), X(211,243), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(163,179), X(195,211), X(227,243), X(11,139),
+  X(75,203), X(11,75), X(139,203), X(43,171), X(107,235), X(43,107), X(171,235),
+  X(11,43), X(75,107), X(139,171), X(203,235), X(27,155), X(91,219), X(27,91),
+  X(155,219), X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219),
+  X(27,59), X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139),
+  X(155,171), X(187,203), X(219,235), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(171,187), X(203,219), X(11,19), X(27,35), X(43,51), X(59,67),
+  X(75,83), X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(171,179),
+  X(187,195), X(203,211), X(219,227), X(235,243), X(3,11), X(19,27), X(35,43),
+  X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155),
+  X(163,171), X(179,187), X(195,203), X(211,219), X(227,235), X(7,135),
+  X(71,199), X(7,71), X(135,199), X(39,167), X(103,231), X(39,103), X(167,231),
+  X(7,39), X(71,103), X(135,167), X(199,231), X(23,151), X(87,215), X(23,87),
+  X(151,215), X(55,119), X(119,183), X(55,119), X(55,87), X(119,151), X(183,215),
+  X(23,55), X(87,119), X(151,183), X(23,39), X(55,71), X(87,103), X(119,135),
+  X(151,167), X(183,199), X(215,231), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(167,183), X(199,215), X(15,143), X(79,207), X(15,79), X(143,207),
+  X(47,175), X(111,239), X(47,111), X(175,239), X(15,47), X(79,111), X(143,175),
+  X(207,239), X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191),
+  X(63,127), X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207), X(223,239),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(199,207),
+  X(215,223), X(231,239), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43),
+  X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99),
+  X(103,107), X(111,115), X(119,123), X(127,131), X(135,139), X(143,147),
+  X(151,155), X(159,163), X(167,171), X(175,179), X(183,187), X(191,195),
+  X(199,203), X(207,211), X(215,219), X(223,227), X(231,235), X(239,243), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(187,191), X(195,199), X(203,207), X(211,215), X(219,223),
+  X(227,231), X(235,239), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189),
+  X(191,193), X(195,197), X(199,201), X(203,205), X(207,209), X(211,213),
+  X(215,217), X(219,221), X(223,225), X(227,229), X(231,233), X(235,237),
+  X(239,241), X(243,245), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(213,215), X(217,219), X(221,223), X(225,227), X(229,231), X(233,235),
+  X(237,239), X(241,243), X(2,130), X(66,194), X(2,66), X(130,194), X(34,162),
+  X(98,226), X(34,98), X(162,226), X(2,34), X(66,98), X(130,162), X(194,226),
+  X(18,146), X(82,210), X(18,82), X(146,210), X(50,178), X(114,242), X(50,114),
+  X(178,242), X(18,50), X(82,114), X(146,178), X(210,242), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(226,242), X(10,138),
+  X(74,202), X(10,74), X(138,202), X(42,170), X(106,234), X(42,106), X(170,234),
+  X(10,42), X(74,106), X(138,170), X(202,234), X(26,154), X(90,218), X(26,90),
+  X(154,218), X(58,122), X(122,186), X(58,122), X(58,90), X(122,154), X(186,218),
+  X(26,58), X(90,122), X(154,186), X(26,42), X(58,74), X(90,106), X(122,138),
+  X(154,170), X(186,202), X(218,234), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(138,154), X(170,186), X(202,218), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162), X(170,178),
+  X(186,194), X(202,210), X(218,226), X(234,242), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(162,170), X(178,186), X(194,202), X(210,218), X(226,234), X(6,134),
+  X(70,198), X(6,70), X(134,198), X(38,166), X(102,230), X(38,102), X(166,230),
+  X(6,38), X(70,102), X(134,166), X(198,230), X(22,150), X(86,214), X(22,86),
+  X(150,214), X(54,118), X(118,182), X(54,118), X(54,86), X(118,150), X(182,214),
+  X(22,54), X(86,118), X(150,182), X(22,38), X(54,70), X(86,102), X(118,134),
+  X(150,166), X(182,198), X(214,230), X(6,22), X(38,54), X(70,86), X(102,118),
+  X(134,150), X(166,182), X(198,214), X(14,142), X(78,206), X(14,78), X(142,206),
+  X(46,174), X(110,238), X(46,110), X(174,238), X(14,46), X(78,110), X(142,174),
+  X(206,238), X(30,158), X(94,222), X(30,94), X(158,222), X(62,126), X(126,190),
+  X(62,126), X(62,94), X(126,158), X(190,222), X(30,62), X(94,126), X(158,190),
+  X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(190,206), X(222,238),
+  X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(206,222),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(198,206),
+  X(214,222), X(230,238), X(6,10), X(14,18), X(22,26), X(30,34), X(38,42),
+  X(46,50), X(54,58), X(62,66), X(70,74), X(78,82), X(86,90), X(94,98),
+  X(102,106), X(110,114), X(118,122), X(126,130), X(134,138), X(142,146),
+  X(150,154), X(158,162), X(166,170), X(174,178), X(182,186), X(190,194),
+  X(198,202), X(206,210), X(214,218), X(222,226), X(230,234), X(238,242), X(2,6),
+  X(10,14), X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70),
+  X(74,78), X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126),
+  X(130,134), X(138,142), X(146,150), X(154,158), X(162,166), X(170,174),
+  X(178,182), X(186,190), X(194,198), X(202,206), X(210,214), X(218,222),
+  X(226,230), X(234,238), X(4,132), X(68,196), X(4,68), X(132,196), X(36,164),
+  X(100,228), X(36,100), X(164,228), X(4,36), X(68,100), X(132,164), X(196,228),
+  X(20,148), X(84,212), X(20,84), X(148,212), X(52,180), X(116,244), X(52,116),
+  X(180,244), X(20,52), X(84,116), X(148,180), X(212,244), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(164,180), X(196,212), X(228,244),
+  X(12,140), X(76,204), X(12,76), X(140,204), X(44,172), X(108,236), X(44,108),
+  X(172,236), X(12,44), X(76,108), X(140,172), X(204,236), X(28,156), X(92,220),
+  X(28,92), X(156,220), X(60,124), X(124,188), X(60,124), X(60,92), X(124,156),
+  X(188,220), X(28,60), X(92,124), X(156,188), X(28,44), X(60,76), X(92,108),
+  X(124,140), X(156,172), X(188,204), X(220,236), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(172,188), X(204,220), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164),
+  X(172,180), X(188,196), X(204,212), X(220,228), X(236,244), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(148,156), X(164,172), X(180,188), X(196,204), X(212,220), X(228,236),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,168), X(104,232), X(40,104),
+  X(168,232), X(8,40), X(72,104), X(136,168), X(200,232), X(24,152), X(88,216),
+  X(24,88), X(152,216), X(56,120), X(120,184), X(56,120), X(56,88), X(120,152),
+  X(184,216), X(24,56), X(88,120), X(152,184), X(24,40), X(56,72), X(88,104),
+  X(120,136), X(152,168), X(184,200), X(216,232), X(8,24), X(40,56), X(72,88),
+  X(104,120), X(136,152), X(168,184), X(200,216), X(16,144), X(80,208), X(16,80),
+  X(144,208), X(48,176), X(112,240), X(48,112), X(176,240), X(16,48), X(80,112),
+  X(144,176), X(208,240), X(32,160), X(96,224), X(32,96), X(160,224), X(64,128),
+  X(128,192), X(64,128), X(64,96), X(128,160), X(192,224), X(32,64), X(96,128),
+  X(160,192), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208),
+  X(224,240), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(208,224), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(152,160), X(168,176), X(184,192),
+  X(200,208), X(216,224), X(232,240), X(8,12), X(16,20), X(24,28), X(32,36),
+  X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(168,172), X(176,180), X(184,188),
+  X(192,196), X(200,204), X(208,212), X(216,220), X(224,228), X(232,236),
+  X(240,244), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(180,184), X(188,192), X(196,200), X(204,208),
+  X(212,216), X(220,224), X(228,232), X(236,240), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(174,176),
+  X(178,180), X(182,184), X(186,188), X(190,192), X(194,196), X(198,200),
+  X(202,204), X(206,208), X(210,212), X(214,216), X(218,220), X(222,224),
+  X(226,228), X(230,232), X(234,236), X(238,240), X(242,244), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223), X(224,225), X(226,227), X(228,229), X(230,231),
+  X(232,233), X(234,235), X(236,237), X(238,239), X(240,241), X(242,243),
+  X(244,245), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194), X(195,196), X(197,198), X(199,200), X(201,202), X(203,204),
+  X(205,206), X(207,208), X(209,210), X(211,212), X(213,214), X(215,216),
+  X(217,218), X(219,220), X(221,222), X(223,224), X(225,226), X(227,228),
+  X(229,230), X(231,232), X(233,234), X(235,236), X(237,238), X(239,240),
+  X(241,242), X(243,244)
+};
+M(246) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,177), X(113,241), X(49,113), X(177,241), X(17,49),
+  X(81,113), X(145,177), X(209,241), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(193,209), X(225,241), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(185,193),
+  X(201,209), X(217,225), X(233,241), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101),
+  X(133,165), X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,181),
+  X(117,245), X(53,117), X(181,245), X(21,53), X(85,117), X(149,181), X(213,245),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(229,245), X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237),
+  X(45,109), X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77),
+  X(93,109), X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(237,245),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205),
+  X(213,221), X(229,237), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(177,181), X(185,189),
+  X(193,197), X(201,205), X(209,213), X(217,221), X(225,229), X(233,237),
+  X(241,245), X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227),
+  X(35,99), X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,179), X(115,243), X(51,115), X(179,243),
+  X(19,51), X(83,115), X(147,179), X(211,243), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(163,179), X(195,211), X(227,243), X(11,139),
+  X(75,203), X(11,75), X(139,203), X(43,171), X(107,235), X(43,107), X(171,235),
+  X(11,43), X(75,107), X(139,171), X(203,235), X(27,155), X(91,219), X(27,91),
+  X(155,219), X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219),
+  X(27,59), X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139),
+  X(155,171), X(187,203), X(219,235), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(171,187), X(203,219), X(11,19), X(27,35), X(43,51), X(59,67),
+  X(75,83), X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(171,179),
+  X(187,195), X(203,211), X(219,227), X(235,243), X(3,11), X(19,27), X(35,43),
+  X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155),
+  X(163,171), X(179,187), X(195,203), X(211,219), X(227,235), X(7,135),
+  X(71,199), X(7,71), X(135,199), X(39,167), X(103,231), X(39,103), X(167,231),
+  X(7,39), X(71,103), X(135,167), X(199,231), X(23,151), X(87,215), X(23,87),
+  X(151,215), X(55,119), X(119,183), X(55,119), X(55,87), X(119,151), X(183,215),
+  X(23,55), X(87,119), X(151,183), X(23,39), X(55,71), X(87,103), X(119,135),
+  X(151,167), X(183,199), X(215,231), X(7,23), X(39,55), X(71,87), X(103,119),
+  X(135,151), X(167,183), X(199,215), X(15,143), X(79,207), X(15,79), X(143,207),
+  X(47,175), X(111,239), X(47,111), X(175,239), X(15,47), X(79,111), X(143,175),
+  X(207,239), X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191),
+  X(63,127), X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207), X(223,239),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(199,207),
+  X(215,223), X(231,239), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43),
+  X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99),
+  X(103,107), X(111,115), X(119,123), X(127,131), X(135,139), X(143,147),
+  X(151,155), X(159,163), X(167,171), X(175,179), X(183,187), X(191,195),
+  X(199,203), X(207,211), X(215,219), X(223,227), X(231,235), X(239,243), X(3,7),
+  X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71),
+  X(75,79), X(83,87), X(91,95), X(99,103), X(107,111), X(115,119), X(123,127),
+  X(131,135), X(139,143), X(147,151), X(155,159), X(163,167), X(171,175),
+  X(179,183), X(187,191), X(195,199), X(203,207), X(211,215), X(219,223),
+  X(227,231), X(235,239), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25),
+  X(27,29), X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57),
+  X(59,61), X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89),
+  X(91,93), X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189),
+  X(191,193), X(195,197), X(199,201), X(203,205), X(207,209), X(211,213),
+  X(215,217), X(219,221), X(223,225), X(227,229), X(231,233), X(235,237),
+  X(239,241), X(243,245), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(213,215), X(217,219), X(221,223), X(225,227), X(229,231), X(233,235),
+  X(237,239), X(241,243), X(2,130), X(66,194), X(2,66), X(130,194), X(34,162),
+  X(98,226), X(34,98), X(162,226), X(2,34), X(66,98), X(130,162), X(194,226),
+  X(18,146), X(82,210), X(18,82), X(146,210), X(50,178), X(114,242), X(50,114),
+  X(178,242), X(18,50), X(82,114), X(146,178), X(210,242), X(2,18), X(34,50),
+  X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(226,242), X(10,138),
+  X(74,202), X(10,74), X(138,202), X(42,170), X(106,234), X(42,106), X(170,234),
+  X(10,42), X(74,106), X(138,170), X(202,234), X(26,154), X(90,218), X(26,90),
+  X(154,218), X(58,122), X(122,186), X(58,122), X(58,90), X(122,154), X(186,218),
+  X(26,58), X(90,122), X(154,186), X(26,42), X(58,74), X(90,106), X(122,138),
+  X(154,170), X(186,202), X(218,234), X(10,26), X(42,58), X(74,90), X(106,122),
+  X(138,154), X(170,186), X(202,218), X(10,18), X(26,34), X(42,50), X(58,66),
+  X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162), X(170,178),
+  X(186,194), X(202,210), X(218,226), X(234,242), X(2,10), X(18,26), X(34,42),
+  X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138), X(146,154),
+  X(162,170), X(178,186), X(194,202), X(210,218), X(226,234), X(6,134),
+  X(70,198), X(6,70), X(134,198), X(38,166), X(102,230), X(38,102), X(166,230),
+  X(6,38), X(70,102), X(134,166), X(198,230), X(22,150), X(86,214), X(22,86),
+  X(150,214), X(54,182), X(118,246), X(54,118), X(182,246), X(22,54), X(86,118),
+  X(150,182), X(214,246), X(6,22), X(38,54), X(70,86), X(102,118), X(134,150),
+  X(166,182), X(198,214), X(230,246), X(14,142), X(78,206), X(14,78), X(142,206),
+  X(46,174), X(110,238), X(46,110), X(174,238), X(14,46), X(78,110), X(142,174),
+  X(206,238), X(30,158), X(94,222), X(30,94), X(158,222), X(62,126), X(126,190),
+  X(62,126), X(62,94), X(126,158), X(190,222), X(30,62), X(94,126), X(158,190),
+  X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(190,206), X(222,238),
+  X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190), X(206,222),
+  X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102), X(110,118),
+  X(126,134), X(142,150), X(158,166), X(174,182), X(190,198), X(206,214),
+  X(222,230), X(238,246), X(6,14), X(22,30), X(38,46), X(54,62), X(70,78),
+  X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(198,206), X(214,222), X(230,238), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(226,230),
+  X(234,238), X(242,246), X(4,132), X(68,196), X(4,68), X(132,196), X(36,164),
+  X(100,228), X(36,100), X(164,228), X(4,36), X(68,100), X(132,164), X(196,228),
+  X(20,148), X(84,212), X(20,84), X(148,212), X(52,180), X(116,244), X(52,116),
+  X(180,244), X(20,52), X(84,116), X(148,180), X(212,244), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(164,180), X(196,212), X(228,244),
+  X(12,140), X(76,204), X(12,76), X(140,204), X(44,172), X(108,236), X(44,108),
+  X(172,236), X(12,44), X(76,108), X(140,172), X(204,236), X(28,156), X(92,220),
+  X(28,92), X(156,220), X(60,124), X(124,188), X(60,124), X(60,92), X(124,156),
+  X(188,220), X(28,60), X(92,124), X(156,188), X(28,44), X(60,76), X(92,108),
+  X(124,140), X(156,172), X(188,204), X(220,236), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(172,188), X(204,220), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164),
+  X(172,180), X(188,196), X(204,212), X(220,228), X(236,244), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(148,156), X(164,172), X(180,188), X(196,204), X(212,220), X(228,236),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,168), X(104,232), X(40,104),
+  X(168,232), X(8,40), X(72,104), X(136,168), X(200,232), X(24,152), X(88,216),
+  X(24,88), X(152,216), X(56,120), X(120,184), X(56,120), X(56,88), X(120,152),
+  X(184,216), X(24,56), X(88,120), X(152,184), X(24,40), X(56,72), X(88,104),
+  X(120,136), X(152,168), X(184,200), X(216,232), X(8,24), X(40,56), X(72,88),
+  X(104,120), X(136,152), X(168,184), X(200,216), X(16,144), X(80,208), X(16,80),
+  X(144,208), X(48,176), X(112,240), X(48,112), X(176,240), X(16,48), X(80,112),
+  X(144,176), X(208,240), X(32,160), X(96,224), X(32,96), X(160,224), X(64,128),
+  X(128,192), X(64,128), X(64,96), X(128,160), X(192,224), X(32,64), X(96,128),
+  X(160,192), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208),
+  X(224,240), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(208,224), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(152,160), X(168,176), X(184,192),
+  X(200,208), X(216,224), X(232,240), X(8,12), X(16,20), X(24,28), X(32,36),
+  X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(168,172), X(176,180), X(184,188),
+  X(192,196), X(200,204), X(208,212), X(216,220), X(224,228), X(232,236),
+  X(240,244), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(180,184), X(188,192), X(196,200), X(204,208),
+  X(212,216), X(220,224), X(228,232), X(236,240), X(4,6), X(8,10), X(12,14),
+  X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46),
+  X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78),
+  X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106),
+  X(108,110), X(112,114), X(116,118), X(120,122), X(124,126), X(128,130),
+  X(132,134), X(136,138), X(140,142), X(144,146), X(148,150), X(152,154),
+  X(156,158), X(160,162), X(164,166), X(168,170), X(172,174), X(176,178),
+  X(180,182), X(184,186), X(188,190), X(192,194), X(196,198), X(200,202),
+  X(204,206), X(208,210), X(212,214), X(216,218), X(220,222), X(224,226),
+  X(228,230), X(232,234), X(236,238), X(240,242), X(244,246), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(178,180), X(182,184), X(186,188), X(190,192), X(194,196),
+  X(198,200), X(202,204), X(206,208), X(210,212), X(214,216), X(218,220),
+  X(222,224), X(226,228), X(230,232), X(234,236), X(238,240), X(242,244), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(221,222), X(223,224), X(225,226), X(227,228), X(229,230),
+  X(231,232), X(233,234), X(235,236), X(237,238), X(239,240), X(241,242),
+  X(243,244), X(245,246)
+};
+M(247) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,177), X(113,241), X(49,113), X(177,241), X(17,49),
+  X(81,113), X(145,177), X(209,241), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(193,209), X(225,241), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(185,193),
+  X(201,209), X(217,225), X(233,241), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101),
+  X(133,165), X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,181),
+  X(117,245), X(53,117), X(181,245), X(21,53), X(85,117), X(149,181), X(213,245),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(229,245), X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237),
+  X(45,109), X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77),
+  X(93,109), X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(237,245),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205),
+  X(213,221), X(229,237), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(177,181), X(185,189),
+  X(193,197), X(201,205), X(209,213), X(217,221), X(225,229), X(233,237),
+  X(241,245), X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227),
+  X(35,99), X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,179), X(115,243), X(51,115), X(179,243),
+  X(19,51), X(83,115), X(147,179), X(211,243), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(163,179), X(195,211), X(227,243), X(11,139),
+  X(75,203), X(11,75), X(139,203), X(43,171), X(107,235), X(43,107), X(171,235),
+  X(11,43), X(75,107), X(139,171), X(203,235), X(27,155), X(91,219), X(27,91),
+  X(155,219), X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219),
+  X(27,59), X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139),
+  X(155,171), X(187,203), X(219,235), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(171,187), X(203,219), X(11,19), X(27,35), X(43,51), X(59,67),
+  X(75,83), X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(171,179),
+  X(187,195), X(203,211), X(219,227), X(235,243), X(3,11), X(19,27), X(35,43),
+  X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155),
+  X(163,171), X(179,187), X(195,203), X(211,219), X(227,235), X(7,135),
+  X(71,199), X(7,71), X(135,199), X(39,167), X(103,231), X(39,103), X(167,231),
+  X(7,39), X(71,103), X(135,167), X(199,231), X(23,151), X(87,215), X(23,87),
+  X(151,215), X(55,183), X(119,247), X(55,119), X(183,247), X(23,55), X(87,119),
+  X(151,183), X(215,247), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151),
+  X(167,183), X(199,215), X(231,247), X(15,143), X(79,207), X(15,79), X(143,207),
+  X(47,175), X(111,239), X(47,111), X(175,239), X(15,47), X(79,111), X(143,175),
+  X(207,239), X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191),
+  X(63,127), X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207), X(223,239),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223),
+  X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(111,119),
+  X(127,135), X(143,151), X(159,167), X(175,183), X(191,199), X(207,215),
+  X(223,231), X(239,247), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79),
+  X(87,95), X(103,111), X(119,127), X(135,143), X(151,159), X(167,175),
+  X(183,191), X(199,207), X(215,223), X(231,239), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(227,231),
+  X(235,239), X(243,247), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(213,215), X(217,219), X(221,223), X(225,227), X(229,231), X(233,235),
+  X(237,239), X(241,243), X(245,247), X(2,130), X(66,194), X(2,66), X(130,194),
+  X(34,162), X(98,226), X(34,98), X(162,226), X(2,34), X(66,98), X(130,162),
+  X(194,226), X(18,146), X(82,210), X(18,82), X(146,210), X(50,178), X(114,242),
+  X(50,114), X(178,242), X(18,50), X(82,114), X(146,178), X(210,242), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(226,242),
+  X(10,138), X(74,202), X(10,74), X(138,202), X(42,170), X(106,234), X(42,106),
+  X(170,234), X(10,42), X(74,106), X(138,170), X(202,234), X(26,154), X(90,218),
+  X(26,90), X(154,218), X(58,122), X(122,186), X(58,122), X(58,90), X(122,154),
+  X(186,218), X(26,58), X(90,122), X(154,186), X(26,42), X(58,74), X(90,106),
+  X(122,138), X(154,170), X(186,202), X(218,234), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(138,154), X(170,186), X(202,218), X(10,18), X(26,34), X(42,50),
+  X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162),
+  X(170,178), X(186,194), X(202,210), X(218,226), X(234,242), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(194,202), X(210,218), X(226,234),
+  X(6,134), X(70,198), X(6,70), X(134,198), X(38,166), X(102,230), X(38,102),
+  X(166,230), X(6,38), X(70,102), X(134,166), X(198,230), X(22,150), X(86,214),
+  X(22,86), X(150,214), X(54,182), X(118,246), X(54,118), X(182,246), X(22,54),
+  X(86,118), X(150,182), X(214,246), X(6,22), X(38,54), X(70,86), X(102,118),
+  X(134,150), X(166,182), X(198,214), X(230,246), X(14,142), X(78,206), X(14,78),
+  X(142,206), X(46,174), X(110,238), X(46,110), X(174,238), X(14,46), X(78,110),
+  X(142,174), X(206,238), X(30,158), X(94,222), X(30,94), X(158,222), X(62,126),
+  X(126,190), X(62,126), X(62,94), X(126,158), X(190,222), X(30,62), X(94,126),
+  X(158,190), X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(190,206),
+  X(222,238), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190),
+  X(206,222), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102),
+  X(110,118), X(126,134), X(142,150), X(158,166), X(174,182), X(190,198),
+  X(206,214), X(222,230), X(238,246), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(198,206), X(214,222), X(230,238), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(226,230),
+  X(234,238), X(242,246), X(4,132), X(68,196), X(4,68), X(132,196), X(36,164),
+  X(100,228), X(36,100), X(164,228), X(4,36), X(68,100), X(132,164), X(196,228),
+  X(20,148), X(84,212), X(20,84), X(148,212), X(52,180), X(116,244), X(52,116),
+  X(180,244), X(20,52), X(84,116), X(148,180), X(212,244), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(164,180), X(196,212), X(228,244),
+  X(12,140), X(76,204), X(12,76), X(140,204), X(44,172), X(108,236), X(44,108),
+  X(172,236), X(12,44), X(76,108), X(140,172), X(204,236), X(28,156), X(92,220),
+  X(28,92), X(156,220), X(60,124), X(124,188), X(60,124), X(60,92), X(124,156),
+  X(188,220), X(28,60), X(92,124), X(156,188), X(28,44), X(60,76), X(92,108),
+  X(124,140), X(156,172), X(188,204), X(220,236), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(172,188), X(204,220), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164),
+  X(172,180), X(188,196), X(204,212), X(220,228), X(236,244), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(148,156), X(164,172), X(180,188), X(196,204), X(212,220), X(228,236),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,168), X(104,232), X(40,104),
+  X(168,232), X(8,40), X(72,104), X(136,168), X(200,232), X(24,152), X(88,216),
+  X(24,88), X(152,216), X(56,120), X(120,184), X(56,120), X(56,88), X(120,152),
+  X(184,216), X(24,56), X(88,120), X(152,184), X(24,40), X(56,72), X(88,104),
+  X(120,136), X(152,168), X(184,200), X(216,232), X(8,24), X(40,56), X(72,88),
+  X(104,120), X(136,152), X(168,184), X(200,216), X(16,144), X(80,208), X(16,80),
+  X(144,208), X(48,176), X(112,240), X(48,112), X(176,240), X(16,48), X(80,112),
+  X(144,176), X(208,240), X(32,160), X(96,224), X(32,96), X(160,224), X(64,128),
+  X(128,192), X(64,128), X(64,96), X(128,160), X(192,224), X(32,64), X(96,128),
+  X(160,192), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208),
+  X(224,240), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(208,224), X(8,16), X(24,32), X(40,48), X(56,64), X(72,80), X(88,96),
+  X(104,112), X(120,128), X(136,144), X(152,160), X(168,176), X(184,192),
+  X(200,208), X(216,224), X(232,240), X(8,12), X(16,20), X(24,28), X(32,36),
+  X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(168,172), X(176,180), X(184,188),
+  X(192,196), X(200,204), X(208,212), X(216,220), X(224,228), X(232,236),
+  X(240,244), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40), X(44,48), X(52,56),
+  X(60,64), X(68,72), X(76,80), X(84,88), X(92,96), X(100,104), X(108,112),
+  X(116,120), X(124,128), X(132,136), X(140,144), X(148,152), X(156,160),
+  X(164,168), X(172,176), X(180,184), X(188,192), X(196,200), X(204,208),
+  X(212,216), X(220,224), X(228,232), X(236,240), X(4,6), X(8,10), X(12,14),
+  X(16,18), X(20,22), X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46),
+  X(48,50), X(52,54), X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78),
+  X(80,82), X(84,86), X(88,90), X(92,94), X(96,98), X(100,102), X(104,106),
+  X(108,110), X(112,114), X(116,118), X(120,122), X(124,126), X(128,130),
+  X(132,134), X(136,138), X(140,142), X(144,146), X(148,150), X(152,154),
+  X(156,158), X(160,162), X(164,166), X(168,170), X(172,174), X(176,178),
+  X(180,182), X(184,186), X(188,190), X(192,194), X(196,198), X(200,202),
+  X(204,206), X(208,210), X(212,214), X(216,218), X(220,222), X(224,226),
+  X(228,230), X(232,234), X(236,238), X(240,242), X(244,246), X(2,4), X(6,8),
+  X(10,12), X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40),
+  X(42,44), X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72),
+  X(74,76), X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100),
+  X(102,104), X(106,108), X(110,112), X(114,116), X(118,120), X(122,124),
+  X(126,128), X(130,132), X(134,136), X(138,140), X(142,144), X(146,148),
+  X(150,152), X(154,156), X(158,160), X(162,164), X(166,168), X(170,172),
+  X(174,176), X(178,180), X(182,184), X(186,188), X(190,192), X(194,196),
+  X(198,200), X(202,204), X(206,208), X(210,212), X(214,216), X(218,220),
+  X(222,224), X(226,228), X(230,232), X(234,236), X(238,240), X(242,244), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223), X(224,225), X(226,227), X(228,229), X(230,231),
+  X(232,233), X(234,235), X(236,237), X(238,239), X(240,241), X(242,243),
+  X(244,245), X(246,247), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(187,188), X(189,190),
+  X(191,192), X(193,194), X(195,196), X(197,198), X(199,200), X(201,202),
+  X(203,204), X(205,206), X(207,208), X(209,210), X(211,212), X(213,214),
+  X(215,216), X(217,218), X(219,220), X(221,222), X(223,224), X(225,226),
+  X(227,228), X(229,230), X(231,232), X(233,234), X(235,236), X(237,238),
+  X(239,240), X(241,242), X(243,244), X(245,246)
+};
+M(248) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,177), X(113,241), X(49,113), X(177,241), X(17,49),
+  X(81,113), X(145,177), X(209,241), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(193,209), X(225,241), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,121),
+  X(121,185), X(57,121), X(57,89), X(121,153), X(185,217), X(25,57), X(89,121),
+  X(153,185), X(25,41), X(57,73), X(89,105), X(121,137), X(153,169), X(185,201),
+  X(217,233), X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185),
+  X(201,217), X(9,17), X(25,33), X(41,49), X(57,65), X(73,81), X(89,97),
+  X(105,113), X(121,129), X(137,145), X(153,161), X(169,177), X(185,193),
+  X(201,209), X(217,225), X(233,241), X(1,9), X(17,25), X(33,41), X(49,57),
+  X(65,73), X(81,89), X(97,105), X(113,121), X(129,137), X(145,153), X(161,169),
+  X(177,185), X(193,201), X(209,217), X(225,233), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101),
+  X(133,165), X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,181),
+  X(117,245), X(53,117), X(181,245), X(21,53), X(85,117), X(149,181), X(213,245),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(229,245), X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237),
+  X(45,109), X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77),
+  X(93,109), X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(237,245),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205),
+  X(213,221), X(229,237), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37),
+  X(41,45), X(49,53), X(57,61), X(65,69), X(73,77), X(81,85), X(89,93),
+  X(97,101), X(105,109), X(113,117), X(121,125), X(129,133), X(137,141),
+  X(145,149), X(153,157), X(161,165), X(169,173), X(177,181), X(185,189),
+  X(193,197), X(201,205), X(209,213), X(217,221), X(225,229), X(233,237),
+  X(241,245), X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227),
+  X(35,99), X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147),
+  X(83,211), X(19,83), X(147,211), X(51,179), X(115,243), X(51,115), X(179,243),
+  X(19,51), X(83,115), X(147,179), X(211,243), X(3,19), X(35,51), X(67,83),
+  X(99,115), X(131,147), X(163,179), X(195,211), X(227,243), X(11,139),
+  X(75,203), X(11,75), X(139,203), X(43,171), X(107,235), X(43,107), X(171,235),
+  X(11,43), X(75,107), X(139,171), X(203,235), X(27,155), X(91,219), X(27,91),
+  X(155,219), X(59,123), X(123,187), X(59,123), X(59,91), X(123,155), X(187,219),
+  X(27,59), X(91,123), X(155,187), X(27,43), X(59,75), X(91,107), X(123,139),
+  X(155,171), X(187,203), X(219,235), X(11,27), X(43,59), X(75,91), X(107,123),
+  X(139,155), X(171,187), X(203,219), X(11,19), X(27,35), X(43,51), X(59,67),
+  X(75,83), X(91,99), X(107,115), X(123,131), X(139,147), X(155,163), X(171,179),
+  X(187,195), X(203,211), X(219,227), X(235,243), X(3,11), X(19,27), X(35,43),
+  X(51,59), X(67,75), X(83,91), X(99,107), X(115,123), X(131,139), X(147,155),
+  X(163,171), X(179,187), X(195,203), X(211,219), X(227,235), X(7,135),
+  X(71,199), X(7,71), X(135,199), X(39,167), X(103,231), X(39,103), X(167,231),
+  X(7,39), X(71,103), X(135,167), X(199,231), X(23,151), X(87,215), X(23,87),
+  X(151,215), X(55,183), X(119,247), X(55,119), X(183,247), X(23,55), X(87,119),
+  X(151,183), X(215,247), X(7,23), X(39,55), X(71,87), X(103,119), X(135,151),
+  X(167,183), X(199,215), X(231,247), X(15,143), X(79,207), X(15,79), X(143,207),
+  X(47,175), X(111,239), X(47,111), X(175,239), X(15,47), X(79,111), X(143,175),
+  X(207,239), X(31,159), X(95,223), X(31,95), X(159,223), X(63,127), X(127,191),
+  X(63,127), X(63,95), X(127,159), X(191,223), X(31,63), X(95,127), X(159,191),
+  X(31,47), X(63,79), X(95,111), X(127,143), X(159,175), X(191,207), X(223,239),
+  X(15,31), X(47,63), X(79,95), X(111,127), X(143,159), X(175,191), X(207,223),
+  X(15,23), X(31,39), X(47,55), X(63,71), X(79,87), X(95,103), X(111,119),
+  X(127,135), X(143,151), X(159,167), X(175,183), X(191,199), X(207,215),
+  X(223,231), X(239,247), X(7,15), X(23,31), X(39,47), X(55,63), X(71,79),
+  X(87,95), X(103,111), X(119,127), X(135,143), X(151,159), X(167,175),
+  X(183,191), X(199,207), X(215,223), X(231,239), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(227,231),
+  X(235,239), X(243,247), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(213,215), X(217,219), X(221,223), X(225,227), X(229,231), X(233,235),
+  X(237,239), X(241,243), X(245,247), X(2,130), X(66,194), X(2,66), X(130,194),
+  X(34,162), X(98,226), X(34,98), X(162,226), X(2,34), X(66,98), X(130,162),
+  X(194,226), X(18,146), X(82,210), X(18,82), X(146,210), X(50,178), X(114,242),
+  X(50,114), X(178,242), X(18,50), X(82,114), X(146,178), X(210,242), X(2,18),
+  X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(194,210), X(226,242),
+  X(10,138), X(74,202), X(10,74), X(138,202), X(42,170), X(106,234), X(42,106),
+  X(170,234), X(10,42), X(74,106), X(138,170), X(202,234), X(26,154), X(90,218),
+  X(26,90), X(154,218), X(58,122), X(122,186), X(58,122), X(58,90), X(122,154),
+  X(186,218), X(26,58), X(90,122), X(154,186), X(26,42), X(58,74), X(90,106),
+  X(122,138), X(154,170), X(186,202), X(218,234), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(138,154), X(170,186), X(202,218), X(10,18), X(26,34), X(42,50),
+  X(58,66), X(74,82), X(90,98), X(106,114), X(122,130), X(138,146), X(154,162),
+  X(170,178), X(186,194), X(202,210), X(218,226), X(234,242), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(194,202), X(210,218), X(226,234),
+  X(6,134), X(70,198), X(6,70), X(134,198), X(38,166), X(102,230), X(38,102),
+  X(166,230), X(6,38), X(70,102), X(134,166), X(198,230), X(22,150), X(86,214),
+  X(22,86), X(150,214), X(54,182), X(118,246), X(54,118), X(182,246), X(22,54),
+  X(86,118), X(150,182), X(214,246), X(6,22), X(38,54), X(70,86), X(102,118),
+  X(134,150), X(166,182), X(198,214), X(230,246), X(14,142), X(78,206), X(14,78),
+  X(142,206), X(46,174), X(110,238), X(46,110), X(174,238), X(14,46), X(78,110),
+  X(142,174), X(206,238), X(30,158), X(94,222), X(30,94), X(158,222), X(62,126),
+  X(126,190), X(62,126), X(62,94), X(126,158), X(190,222), X(30,62), X(94,126),
+  X(158,190), X(30,46), X(62,78), X(94,110), X(126,142), X(158,174), X(190,206),
+  X(222,238), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158), X(174,190),
+  X(206,222), X(14,22), X(30,38), X(46,54), X(62,70), X(78,86), X(94,102),
+  X(110,118), X(126,134), X(142,150), X(158,166), X(174,182), X(190,198),
+  X(206,214), X(222,230), X(238,246), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(198,206), X(214,222), X(230,238), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(226,230),
+  X(234,238), X(242,246), X(4,132), X(68,196), X(4,68), X(132,196), X(36,164),
+  X(100,228), X(36,100), X(164,228), X(4,36), X(68,100), X(132,164), X(196,228),
+  X(20,148), X(84,212), X(20,84), X(148,212), X(52,180), X(116,244), X(52,116),
+  X(180,244), X(20,52), X(84,116), X(148,180), X(212,244), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(164,180), X(196,212), X(228,244),
+  X(12,140), X(76,204), X(12,76), X(140,204), X(44,172), X(108,236), X(44,108),
+  X(172,236), X(12,44), X(76,108), X(140,172), X(204,236), X(28,156), X(92,220),
+  X(28,92), X(156,220), X(60,124), X(124,188), X(60,124), X(60,92), X(124,156),
+  X(188,220), X(28,60), X(92,124), X(156,188), X(28,44), X(60,76), X(92,108),
+  X(124,140), X(156,172), X(188,204), X(220,236), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(172,188), X(204,220), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164),
+  X(172,180), X(188,196), X(204,212), X(220,228), X(236,244), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(148,156), X(164,172), X(180,188), X(196,204), X(212,220), X(228,236),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,168), X(104,232), X(40,104),
+  X(168,232), X(8,40), X(72,104), X(136,168), X(200,232), X(24,152), X(88,216),
+  X(24,88), X(152,216), X(56,184), X(120,248), X(56,120), X(184,248), X(24,56),
+  X(88,120), X(152,184), X(216,248), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(168,184), X(200,216), X(232,248), X(16,144), X(80,208), X(16,80),
+  X(144,208), X(48,176), X(112,240), X(48,112), X(176,240), X(16,48), X(80,112),
+  X(144,176), X(208,240), X(32,160), X(96,224), X(32,96), X(160,224), X(64,128),
+  X(128,192), X(64,128), X(64,96), X(128,160), X(192,224), X(32,64), X(96,128),
+  X(160,192), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208),
+  X(224,240), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(208,224), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104),
+  X(112,120), X(128,136), X(144,152), X(160,168), X(176,184), X(192,200),
+  X(208,216), X(224,232), X(240,248), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(216,224), X(232,240), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(204,208), X(212,216), X(220,224), X(228,232),
+  X(236,240), X(244,248), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212),
+  X(214,216), X(218,220), X(222,224), X(226,228), X(230,232), X(234,236),
+  X(238,240), X(242,244), X(246,248), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202), X(203,204), X(205,206), X(207,208), X(209,210), X(211,212),
+  X(213,214), X(215,216), X(217,218), X(219,220), X(221,222), X(223,224),
+  X(225,226), X(227,228), X(229,230), X(231,232), X(233,234), X(235,236),
+  X(237,238), X(239,240), X(241,242), X(243,244), X(245,246), X(247,248)
+};
+M(249) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,177), X(113,241), X(49,113), X(177,241), X(17,49),
+  X(81,113), X(145,177), X(209,241), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(193,209), X(225,241), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,185),
+  X(121,249), X(57,121), X(185,249), X(25,57), X(89,121), X(153,185), X(217,249),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(201,217),
+  X(233,249), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(193,201), X(209,217), X(225,233), X(241,249), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101),
+  X(133,165), X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,181),
+  X(117,245), X(53,117), X(181,245), X(21,53), X(85,117), X(149,181), X(213,245),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(229,245), X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237),
+  X(45,109), X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77),
+  X(93,109), X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(237,245),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205),
+  X(213,221), X(229,237), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145),
+  X(149,153), X(157,161), X(165,169), X(173,177), X(181,185), X(189,193),
+  X(197,201), X(205,209), X(213,217), X(221,225), X(229,233), X(237,241),
+  X(245,249), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(185,189), X(193,197), X(201,205),
+  X(209,213), X(217,221), X(225,229), X(233,237), X(241,245), X(3,131),
+  X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99), X(163,227),
+  X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211), X(19,83),
+  X(147,211), X(51,179), X(115,243), X(51,115), X(179,243), X(19,51), X(83,115),
+  X(147,179), X(211,243), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(195,211), X(227,243), X(11,139), X(75,203), X(11,75), X(139,203),
+  X(43,171), X(107,235), X(43,107), X(171,235), X(11,43), X(75,107), X(139,171),
+  X(203,235), X(27,155), X(91,219), X(27,91), X(155,219), X(59,123), X(123,187),
+  X(59,123), X(59,91), X(123,155), X(187,219), X(27,59), X(91,123), X(155,187),
+  X(27,43), X(59,75), X(91,107), X(123,139), X(155,171), X(187,203), X(219,235),
+  X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187), X(203,219),
+  X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(107,115),
+  X(123,131), X(139,147), X(155,163), X(171,179), X(187,195), X(203,211),
+  X(219,227), X(235,243), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(227,235), X(7,135), X(71,199), X(7,71),
+  X(135,199), X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103),
+  X(135,167), X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,183),
+  X(119,247), X(55,119), X(183,247), X(23,55), X(87,119), X(151,183), X(215,247),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215),
+  X(231,247), X(15,143), X(79,207), X(15,79), X(143,207), X(47,175), X(111,239),
+  X(47,111), X(175,239), X(15,47), X(79,111), X(143,175), X(207,239), X(31,159),
+  X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95),
+  X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(31,47), X(63,79),
+  X(95,111), X(127,143), X(159,175), X(191,207), X(223,239), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(207,215), X(223,231), X(239,247),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(199,207),
+  X(215,223), X(231,239), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191),
+  X(195,199), X(203,207), X(211,215), X(219,223), X(227,231), X(235,239),
+  X(243,247), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61),
+  X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93),
+  X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189),
+  X(191,193), X(195,197), X(199,201), X(203,205), X(207,209), X(211,213),
+  X(215,217), X(219,221), X(223,225), X(227,229), X(231,233), X(235,237),
+  X(239,241), X(243,245), X(247,249), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(185,187), X(189,191), X(193,195), X(197,199), X(201,203),
+  X(205,207), X(209,211), X(213,215), X(217,219), X(221,223), X(225,227),
+  X(229,231), X(233,235), X(237,239), X(241,243), X(245,247), X(2,130),
+  X(66,194), X(2,66), X(130,194), X(34,162), X(98,226), X(34,98), X(162,226),
+  X(2,34), X(66,98), X(130,162), X(194,226), X(18,146), X(82,210), X(18,82),
+  X(146,210), X(50,178), X(114,242), X(50,114), X(178,242), X(18,50), X(82,114),
+  X(146,178), X(210,242), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146),
+  X(162,178), X(194,210), X(226,242), X(10,138), X(74,202), X(10,74), X(138,202),
+  X(42,170), X(106,234), X(42,106), X(170,234), X(10,42), X(74,106), X(138,170),
+  X(202,234), X(26,154), X(90,218), X(26,90), X(154,218), X(58,122), X(122,186),
+  X(58,122), X(58,90), X(122,154), X(186,218), X(26,58), X(90,122), X(154,186),
+  X(26,42), X(58,74), X(90,106), X(122,138), X(154,170), X(186,202), X(218,234),
+  X(10,26), X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(202,218),
+  X(10,18), X(26,34), X(42,50), X(58,66), X(74,82), X(90,98), X(106,114),
+  X(122,130), X(138,146), X(154,162), X(170,178), X(186,194), X(202,210),
+  X(218,226), X(234,242), X(2,10), X(18,26), X(34,42), X(50,58), X(66,74),
+  X(82,90), X(98,106), X(114,122), X(130,138), X(146,154), X(162,170),
+  X(178,186), X(194,202), X(210,218), X(226,234), X(6,134), X(70,198), X(6,70),
+  X(134,198), X(38,166), X(102,230), X(38,102), X(166,230), X(6,38), X(70,102),
+  X(134,166), X(198,230), X(22,150), X(86,214), X(22,86), X(150,214), X(54,182),
+  X(118,246), X(54,118), X(182,246), X(22,54), X(86,118), X(150,182), X(214,246),
+  X(6,22), X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(198,214),
+  X(230,246), X(14,142), X(78,206), X(14,78), X(142,206), X(46,174), X(110,238),
+  X(46,110), X(174,238), X(14,46), X(78,110), X(142,174), X(206,238), X(30,158),
+  X(94,222), X(30,94), X(158,222), X(62,126), X(126,190), X(62,126), X(62,94),
+  X(126,158), X(190,222), X(30,62), X(94,126), X(158,190), X(30,46), X(62,78),
+  X(94,110), X(126,142), X(158,174), X(190,206), X(222,238), X(14,30), X(46,62),
+  X(78,94), X(110,126), X(142,158), X(174,190), X(206,222), X(14,22), X(30,38),
+  X(46,54), X(62,70), X(78,86), X(94,102), X(110,118), X(126,134), X(142,150),
+  X(158,166), X(174,182), X(190,198), X(206,214), X(222,230), X(238,246),
+  X(6,14), X(22,30), X(38,46), X(54,62), X(70,78), X(86,94), X(102,110),
+  X(118,126), X(134,142), X(150,158), X(166,174), X(182,190), X(198,206),
+  X(214,222), X(230,238), X(2,6), X(10,14), X(18,22), X(26,30), X(34,38),
+  X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86), X(90,94),
+  X(98,102), X(106,110), X(114,118), X(122,126), X(130,134), X(138,142),
+  X(146,150), X(154,158), X(162,166), X(170,174), X(178,182), X(186,190),
+  X(194,198), X(202,206), X(210,214), X(218,222), X(226,230), X(234,238),
+  X(242,246), X(4,132), X(68,196), X(4,68), X(132,196), X(36,164), X(100,228),
+  X(36,100), X(164,228), X(4,36), X(68,100), X(132,164), X(196,228), X(20,148),
+  X(84,212), X(20,84), X(148,212), X(52,180), X(116,244), X(52,116), X(180,244),
+  X(20,52), X(84,116), X(148,180), X(212,244), X(4,20), X(36,52), X(68,84),
+  X(100,116), X(132,148), X(164,180), X(196,212), X(228,244), X(12,140),
+  X(76,204), X(12,76), X(140,204), X(44,172), X(108,236), X(44,108), X(172,236),
+  X(12,44), X(76,108), X(140,172), X(204,236), X(28,156), X(92,220), X(28,92),
+  X(156,220), X(60,124), X(124,188), X(60,124), X(60,92), X(124,156), X(188,220),
+  X(28,60), X(92,124), X(156,188), X(28,44), X(60,76), X(92,108), X(124,140),
+  X(156,172), X(188,204), X(220,236), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(140,156), X(172,188), X(204,220), X(12,20), X(28,36), X(44,52), X(60,68),
+  X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164),
+  X(172,180), X(188,196), X(204,212), X(220,228), X(236,244), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(148,156), X(164,172), X(180,188), X(196,204), X(212,220), X(228,236),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,168), X(104,232), X(40,104),
+  X(168,232), X(8,40), X(72,104), X(136,168), X(200,232), X(24,152), X(88,216),
+  X(24,88), X(152,216), X(56,184), X(120,248), X(56,120), X(184,248), X(24,56),
+  X(88,120), X(152,184), X(216,248), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(168,184), X(200,216), X(232,248), X(16,144), X(80,208), X(16,80),
+  X(144,208), X(48,176), X(112,240), X(48,112), X(176,240), X(16,48), X(80,112),
+  X(144,176), X(208,240), X(32,160), X(96,224), X(32,96), X(160,224), X(64,128),
+  X(128,192), X(64,128), X(64,96), X(128,160), X(192,224), X(32,64), X(96,128),
+  X(160,192), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208),
+  X(224,240), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(208,224), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104),
+  X(112,120), X(128,136), X(144,152), X(160,168), X(176,184), X(192,200),
+  X(208,216), X(224,232), X(240,248), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(216,224), X(232,240), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(204,208), X(212,216), X(220,224), X(228,232),
+  X(236,240), X(244,248), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24),
+  X(26,28), X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56),
+  X(58,60), X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88),
+  X(90,92), X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212),
+  X(214,216), X(218,220), X(222,224), X(226,228), X(230,232), X(234,236),
+  X(238,240), X(242,244), X(246,248), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153),
+  X(154,155), X(156,157), X(158,159), X(160,161), X(162,163), X(164,165),
+  X(166,167), X(168,169), X(170,171), X(172,173), X(174,175), X(176,177),
+  X(178,179), X(180,181), X(182,183), X(184,185), X(186,187), X(188,189),
+  X(190,191), X(192,193), X(194,195), X(196,197), X(198,199), X(200,201),
+  X(202,203), X(204,205), X(206,207), X(208,209), X(210,211), X(212,213),
+  X(214,215), X(216,217), X(218,219), X(220,221), X(222,223), X(224,225),
+  X(226,227), X(228,229), X(230,231), X(232,233), X(234,235), X(236,237),
+  X(238,239), X(240,241), X(242,243), X(244,245), X(246,247), X(248,249), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(221,222), X(223,224), X(225,226), X(227,228), X(229,230),
+  X(231,232), X(233,234), X(235,236), X(237,238), X(239,240), X(241,242),
+  X(243,244), X(245,246), X(247,248)
+};
+M(250) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,177), X(113,241), X(49,113), X(177,241), X(17,49),
+  X(81,113), X(145,177), X(209,241), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(193,209), X(225,241), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,185),
+  X(121,249), X(57,121), X(185,249), X(25,57), X(89,121), X(153,185), X(217,249),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(201,217),
+  X(233,249), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(193,201), X(209,217), X(225,233), X(241,249), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101),
+  X(133,165), X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,181),
+  X(117,245), X(53,117), X(181,245), X(21,53), X(85,117), X(149,181), X(213,245),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(229,245), X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237),
+  X(45,109), X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77),
+  X(93,109), X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(237,245),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205),
+  X(213,221), X(229,237), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145),
+  X(149,153), X(157,161), X(165,169), X(173,177), X(181,185), X(189,193),
+  X(197,201), X(205,209), X(213,217), X(221,225), X(229,233), X(237,241),
+  X(245,249), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(185,189), X(193,197), X(201,205),
+  X(209,213), X(217,221), X(225,229), X(233,237), X(241,245), X(3,131),
+  X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99), X(163,227),
+  X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211), X(19,83),
+  X(147,211), X(51,179), X(115,243), X(51,115), X(179,243), X(19,51), X(83,115),
+  X(147,179), X(211,243), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(195,211), X(227,243), X(11,139), X(75,203), X(11,75), X(139,203),
+  X(43,171), X(107,235), X(43,107), X(171,235), X(11,43), X(75,107), X(139,171),
+  X(203,235), X(27,155), X(91,219), X(27,91), X(155,219), X(59,123), X(123,187),
+  X(59,123), X(59,91), X(123,155), X(187,219), X(27,59), X(91,123), X(155,187),
+  X(27,43), X(59,75), X(91,107), X(123,139), X(155,171), X(187,203), X(219,235),
+  X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187), X(203,219),
+  X(11,19), X(27,35), X(43,51), X(59,67), X(75,83), X(91,99), X(107,115),
+  X(123,131), X(139,147), X(155,163), X(171,179), X(187,195), X(203,211),
+  X(219,227), X(235,243), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75),
+  X(83,91), X(99,107), X(115,123), X(131,139), X(147,155), X(163,171),
+  X(179,187), X(195,203), X(211,219), X(227,235), X(7,135), X(71,199), X(7,71),
+  X(135,199), X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103),
+  X(135,167), X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,183),
+  X(119,247), X(55,119), X(183,247), X(23,55), X(87,119), X(151,183), X(215,247),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215),
+  X(231,247), X(15,143), X(79,207), X(15,79), X(143,207), X(47,175), X(111,239),
+  X(47,111), X(175,239), X(15,47), X(79,111), X(143,175), X(207,239), X(31,159),
+  X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95),
+  X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(31,47), X(63,79),
+  X(95,111), X(127,143), X(159,175), X(191,207), X(223,239), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(207,215), X(223,231), X(239,247),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(199,207),
+  X(215,223), X(231,239), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39),
+  X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87), X(91,95),
+  X(99,103), X(107,111), X(115,119), X(123,127), X(131,135), X(139,143),
+  X(147,151), X(155,159), X(163,167), X(171,175), X(179,183), X(187,191),
+  X(195,199), X(203,207), X(211,215), X(219,223), X(227,231), X(235,239),
+  X(243,247), X(3,5), X(7,9), X(11,13), X(15,17), X(19,21), X(23,25), X(27,29),
+  X(31,33), X(35,37), X(39,41), X(43,45), X(47,49), X(51,53), X(55,57), X(59,61),
+  X(63,65), X(67,69), X(71,73), X(75,77), X(79,81), X(83,85), X(87,89), X(91,93),
+  X(95,97), X(99,101), X(103,105), X(107,109), X(111,113), X(115,117),
+  X(119,121), X(123,125), X(127,129), X(131,133), X(135,137), X(139,141),
+  X(143,145), X(147,149), X(151,153), X(155,157), X(159,161), X(163,165),
+  X(167,169), X(171,173), X(175,177), X(179,181), X(183,185), X(187,189),
+  X(191,193), X(195,197), X(199,201), X(203,205), X(207,209), X(211,213),
+  X(215,217), X(219,221), X(223,225), X(227,229), X(231,233), X(235,237),
+  X(239,241), X(243,245), X(247,249), X(1,3), X(5,7), X(9,11), X(13,15),
+  X(17,19), X(21,23), X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47),
+  X(49,51), X(53,55), X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79),
+  X(81,83), X(85,87), X(89,91), X(93,95), X(97,99), X(101,103), X(105,107),
+  X(109,111), X(113,115), X(117,119), X(121,123), X(125,127), X(129,131),
+  X(133,135), X(137,139), X(141,143), X(145,147), X(149,151), X(153,155),
+  X(157,159), X(161,163), X(165,167), X(169,171), X(173,175), X(177,179),
+  X(181,183), X(185,187), X(189,191), X(193,195), X(197,199), X(201,203),
+  X(205,207), X(209,211), X(213,215), X(217,219), X(221,223), X(225,227),
+  X(229,231), X(233,235), X(237,239), X(241,243), X(245,247), X(2,130),
+  X(66,194), X(2,66), X(130,194), X(34,162), X(98,226), X(34,98), X(162,226),
+  X(2,34), X(66,98), X(130,162), X(194,226), X(18,146), X(82,210), X(18,82),
+  X(146,210), X(50,178), X(114,242), X(50,114), X(178,242), X(18,50), X(82,114),
+  X(146,178), X(210,242), X(2,18), X(34,50), X(66,82), X(98,114), X(130,146),
+  X(162,178), X(194,210), X(226,242), X(10,138), X(74,202), X(10,74), X(138,202),
+  X(42,170), X(106,234), X(42,106), X(170,234), X(10,42), X(74,106), X(138,170),
+  X(202,234), X(26,154), X(90,218), X(26,90), X(154,218), X(58,186), X(122,250),
+  X(58,122), X(186,250), X(26,58), X(90,122), X(154,186), X(218,250), X(10,26),
+  X(42,58), X(74,90), X(106,122), X(138,154), X(170,186), X(202,218), X(234,250),
+  X(2,10), X(18,26), X(34,42), X(50,58), X(66,74), X(82,90), X(98,106),
+  X(114,122), X(130,138), X(146,154), X(162,170), X(178,186), X(194,202),
+  X(210,218), X(226,234), X(242,250), X(6,134), X(70,198), X(6,70), X(134,198),
+  X(38,166), X(102,230), X(38,102), X(166,230), X(6,38), X(70,102), X(134,166),
+  X(198,230), X(22,150), X(86,214), X(22,86), X(150,214), X(54,182), X(118,246),
+  X(54,118), X(182,246), X(22,54), X(86,118), X(150,182), X(214,246), X(6,22),
+  X(38,54), X(70,86), X(102,118), X(134,150), X(166,182), X(198,214), X(230,246),
+  X(14,142), X(78,206), X(14,78), X(142,206), X(46,174), X(110,238), X(46,110),
+  X(174,238), X(14,46), X(78,110), X(142,174), X(206,238), X(30,158), X(94,222),
+  X(30,94), X(158,222), X(62,126), X(126,190), X(62,126), X(62,94), X(126,158),
+  X(190,222), X(30,62), X(94,126), X(158,190), X(30,46), X(62,78), X(94,110),
+  X(126,142), X(158,174), X(190,206), X(222,238), X(14,30), X(46,62), X(78,94),
+  X(110,126), X(142,158), X(174,190), X(206,222), X(14,22), X(30,38), X(46,54),
+  X(62,70), X(78,86), X(94,102), X(110,118), X(126,134), X(142,150), X(158,166),
+  X(174,182), X(190,198), X(206,214), X(222,230), X(238,246), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(166,174), X(182,190), X(198,206), X(214,222), X(230,238),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(158,162), X(166,170),
+  X(174,178), X(182,186), X(190,194), X(198,202), X(206,210), X(214,218),
+  X(222,226), X(230,234), X(238,242), X(246,250), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(226,230),
+  X(234,238), X(242,246), X(4,132), X(68,196), X(4,68), X(132,196), X(36,164),
+  X(100,228), X(36,100), X(164,228), X(4,36), X(68,100), X(132,164), X(196,228),
+  X(20,148), X(84,212), X(20,84), X(148,212), X(52,180), X(116,244), X(52,116),
+  X(180,244), X(20,52), X(84,116), X(148,180), X(212,244), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(164,180), X(196,212), X(228,244),
+  X(12,140), X(76,204), X(12,76), X(140,204), X(44,172), X(108,236), X(44,108),
+  X(172,236), X(12,44), X(76,108), X(140,172), X(204,236), X(28,156), X(92,220),
+  X(28,92), X(156,220), X(60,124), X(124,188), X(60,124), X(60,92), X(124,156),
+  X(188,220), X(28,60), X(92,124), X(156,188), X(28,44), X(60,76), X(92,108),
+  X(124,140), X(156,172), X(188,204), X(220,236), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(172,188), X(204,220), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164),
+  X(172,180), X(188,196), X(204,212), X(220,228), X(236,244), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(148,156), X(164,172), X(180,188), X(196,204), X(212,220), X(228,236),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,168), X(104,232), X(40,104),
+  X(168,232), X(8,40), X(72,104), X(136,168), X(200,232), X(24,152), X(88,216),
+  X(24,88), X(152,216), X(56,184), X(120,248), X(56,120), X(184,248), X(24,56),
+  X(88,120), X(152,184), X(216,248), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(168,184), X(200,216), X(232,248), X(16,144), X(80,208), X(16,80),
+  X(144,208), X(48,176), X(112,240), X(48,112), X(176,240), X(16,48), X(80,112),
+  X(144,176), X(208,240), X(32,160), X(96,224), X(32,96), X(160,224), X(64,128),
+  X(128,192), X(64,128), X(64,96), X(128,160), X(192,224), X(32,64), X(96,128),
+  X(160,192), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208),
+  X(224,240), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(208,224), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104),
+  X(112,120), X(128,136), X(144,152), X(160,168), X(176,184), X(192,200),
+  X(208,216), X(224,232), X(240,248), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(216,224), X(232,240), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(204,208), X(212,216), X(220,224), X(228,232),
+  X(236,240), X(244,248), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(120,122), X(124,126), X(128,130), X(132,134), X(136,138),
+  X(140,142), X(144,146), X(148,150), X(152,154), X(156,158), X(160,162),
+  X(164,166), X(168,170), X(172,174), X(176,178), X(180,182), X(184,186),
+  X(188,190), X(192,194), X(196,198), X(200,202), X(204,206), X(208,210),
+  X(212,214), X(216,218), X(220,222), X(224,226), X(228,230), X(232,234),
+  X(236,238), X(240,242), X(244,246), X(248,250), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(174,176),
+  X(178,180), X(182,184), X(186,188), X(190,192), X(194,196), X(198,200),
+  X(202,204), X(206,208), X(210,212), X(214,216), X(218,220), X(222,224),
+  X(226,228), X(230,232), X(234,236), X(238,240), X(242,244), X(246,248), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(221,222), X(223,224), X(225,226), X(227,228), X(229,230),
+  X(231,232), X(233,234), X(235,236), X(237,238), X(239,240), X(241,242),
+  X(243,244), X(245,246), X(247,248), X(249,250)
+};
+M(251) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,177), X(113,241), X(49,113), X(177,241), X(17,49),
+  X(81,113), X(145,177), X(209,241), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(193,209), X(225,241), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,185),
+  X(121,249), X(57,121), X(185,249), X(25,57), X(89,121), X(153,185), X(217,249),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(201,217),
+  X(233,249), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(193,201), X(209,217), X(225,233), X(241,249), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101),
+  X(133,165), X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,181),
+  X(117,245), X(53,117), X(181,245), X(21,53), X(85,117), X(149,181), X(213,245),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(229,245), X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237),
+  X(45,109), X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77),
+  X(93,109), X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(237,245),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205),
+  X(213,221), X(229,237), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145),
+  X(149,153), X(157,161), X(165,169), X(173,177), X(181,185), X(189,193),
+  X(197,201), X(205,209), X(213,217), X(221,225), X(229,233), X(237,241),
+  X(245,249), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(185,189), X(193,197), X(201,205),
+  X(209,213), X(217,221), X(225,229), X(233,237), X(241,245), X(3,131),
+  X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99), X(163,227),
+  X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211), X(19,83),
+  X(147,211), X(51,179), X(115,243), X(51,115), X(179,243), X(19,51), X(83,115),
+  X(147,179), X(211,243), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(195,211), X(227,243), X(11,139), X(75,203), X(11,75), X(139,203),
+  X(43,171), X(107,235), X(43,107), X(171,235), X(11,43), X(75,107), X(139,171),
+  X(203,235), X(27,155), X(91,219), X(27,91), X(155,219), X(59,187), X(123,251),
+  X(59,123), X(187,251), X(27,59), X(91,123), X(155,187), X(219,251), X(11,27),
+  X(43,59), X(75,91), X(107,123), X(139,155), X(171,187), X(203,219), X(235,251),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(131,139), X(147,155), X(163,171), X(179,187), X(195,203),
+  X(211,219), X(227,235), X(243,251), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103), X(135,167),
+  X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,183), X(119,247),
+  X(55,119), X(183,247), X(23,55), X(87,119), X(151,183), X(215,247), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215), X(231,247),
+  X(15,143), X(79,207), X(15,79), X(143,207), X(47,175), X(111,239), X(47,111),
+  X(175,239), X(15,47), X(79,111), X(143,175), X(207,239), X(31,159), X(95,223),
+  X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95), X(127,159),
+  X(191,223), X(31,63), X(95,127), X(159,191), X(31,47), X(63,79), X(95,111),
+  X(127,143), X(159,175), X(191,207), X(223,239), X(15,31), X(47,63), X(79,95),
+  X(111,127), X(143,159), X(175,191), X(207,223), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(159,167),
+  X(175,183), X(191,199), X(207,215), X(223,231), X(239,247), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(199,207), X(215,223), X(231,239),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(143,147), X(151,155), X(159,163), X(167,171),
+  X(175,179), X(183,187), X(191,195), X(199,203), X(207,211), X(215,219),
+  X(223,227), X(231,235), X(239,243), X(247,251), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(227,231),
+  X(235,239), X(243,247), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(213,215), X(217,219), X(221,223), X(225,227), X(229,231), X(233,235),
+  X(237,239), X(241,243), X(245,247), X(249,251), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,162), X(98,226), X(34,98), X(162,226), X(2,34), X(66,98),
+  X(130,162), X(194,226), X(18,146), X(82,210), X(18,82), X(146,210), X(50,178),
+  X(114,242), X(50,114), X(178,242), X(18,50), X(82,114), X(146,178), X(210,242),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(194,210),
+  X(226,242), X(10,138), X(74,202), X(10,74), X(138,202), X(42,170), X(106,234),
+  X(42,106), X(170,234), X(10,42), X(74,106), X(138,170), X(202,234), X(26,154),
+  X(90,218), X(26,90), X(154,218), X(58,186), X(122,250), X(58,122), X(186,250),
+  X(26,58), X(90,122), X(154,186), X(218,250), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(138,154), X(170,186), X(202,218), X(234,250), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(194,202), X(210,218), X(226,234),
+  X(242,250), X(6,134), X(70,198), X(6,70), X(134,198), X(38,166), X(102,230),
+  X(38,102), X(166,230), X(6,38), X(70,102), X(134,166), X(198,230), X(22,150),
+  X(86,214), X(22,86), X(150,214), X(54,182), X(118,246), X(54,118), X(182,246),
+  X(22,54), X(86,118), X(150,182), X(214,246), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(166,182), X(198,214), X(230,246), X(14,142),
+  X(78,206), X(14,78), X(142,206), X(46,174), X(110,238), X(46,110), X(174,238),
+  X(14,46), X(78,110), X(142,174), X(206,238), X(30,158), X(94,222), X(30,94),
+  X(158,222), X(62,126), X(126,190), X(62,126), X(62,94), X(126,158), X(190,222),
+  X(30,62), X(94,126), X(158,190), X(30,46), X(62,78), X(94,110), X(126,142),
+  X(158,174), X(190,206), X(222,238), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(142,158), X(174,190), X(206,222), X(14,22), X(30,38), X(46,54), X(62,70),
+  X(78,86), X(94,102), X(110,118), X(126,134), X(142,150), X(158,166),
+  X(174,182), X(190,198), X(206,214), X(222,230), X(238,246), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(166,174), X(182,190), X(198,206), X(214,222), X(230,238),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(158,162), X(166,170),
+  X(174,178), X(182,186), X(190,194), X(198,202), X(206,210), X(214,218),
+  X(222,226), X(230,234), X(238,242), X(246,250), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(226,230),
+  X(234,238), X(242,246), X(4,132), X(68,196), X(4,68), X(132,196), X(36,164),
+  X(100,228), X(36,100), X(164,228), X(4,36), X(68,100), X(132,164), X(196,228),
+  X(20,148), X(84,212), X(20,84), X(148,212), X(52,180), X(116,244), X(52,116),
+  X(180,244), X(20,52), X(84,116), X(148,180), X(212,244), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(164,180), X(196,212), X(228,244),
+  X(12,140), X(76,204), X(12,76), X(140,204), X(44,172), X(108,236), X(44,108),
+  X(172,236), X(12,44), X(76,108), X(140,172), X(204,236), X(28,156), X(92,220),
+  X(28,92), X(156,220), X(60,124), X(124,188), X(60,124), X(60,92), X(124,156),
+  X(188,220), X(28,60), X(92,124), X(156,188), X(28,44), X(60,76), X(92,108),
+  X(124,140), X(156,172), X(188,204), X(220,236), X(12,28), X(44,60), X(76,92),
+  X(108,124), X(140,156), X(172,188), X(204,220), X(12,20), X(28,36), X(44,52),
+  X(60,68), X(76,84), X(92,100), X(108,116), X(124,132), X(140,148), X(156,164),
+  X(172,180), X(188,196), X(204,212), X(220,228), X(236,244), X(4,12), X(20,28),
+  X(36,44), X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140),
+  X(148,156), X(164,172), X(180,188), X(196,204), X(212,220), X(228,236),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,168), X(104,232), X(40,104),
+  X(168,232), X(8,40), X(72,104), X(136,168), X(200,232), X(24,152), X(88,216),
+  X(24,88), X(152,216), X(56,184), X(120,248), X(56,120), X(184,248), X(24,56),
+  X(88,120), X(152,184), X(216,248), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(168,184), X(200,216), X(232,248), X(16,144), X(80,208), X(16,80),
+  X(144,208), X(48,176), X(112,240), X(48,112), X(176,240), X(16,48), X(80,112),
+  X(144,176), X(208,240), X(32,160), X(96,224), X(32,96), X(160,224), X(64,128),
+  X(128,192), X(64,128), X(64,96), X(128,160), X(192,224), X(32,64), X(96,128),
+  X(160,192), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208),
+  X(224,240), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(208,224), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104),
+  X(112,120), X(128,136), X(144,152), X(160,168), X(176,184), X(192,200),
+  X(208,216), X(224,232), X(240,248), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(216,224), X(232,240), X(4,8), X(12,16), X(20,24),
+  X(28,32), X(36,40), X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88),
+  X(92,96), X(100,104), X(108,112), X(116,120), X(124,128), X(132,136),
+  X(140,144), X(148,152), X(156,160), X(164,168), X(172,176), X(180,184),
+  X(188,192), X(196,200), X(204,208), X(212,216), X(220,224), X(228,232),
+  X(236,240), X(244,248), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22),
+  X(24,26), X(28,30), X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54),
+  X(56,58), X(60,62), X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86),
+  X(88,90), X(92,94), X(96,98), X(100,102), X(104,106), X(108,110), X(112,114),
+  X(116,118), X(120,122), X(124,126), X(128,130), X(132,134), X(136,138),
+  X(140,142), X(144,146), X(148,150), X(152,154), X(156,158), X(160,162),
+  X(164,166), X(168,170), X(172,174), X(176,178), X(180,182), X(184,186),
+  X(188,190), X(192,194), X(196,198), X(200,202), X(204,206), X(208,210),
+  X(212,214), X(216,218), X(220,222), X(224,226), X(228,230), X(232,234),
+  X(236,238), X(240,242), X(244,246), X(248,250), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(174,176),
+  X(178,180), X(182,184), X(186,188), X(190,192), X(194,196), X(198,200),
+  X(202,204), X(206,208), X(210,212), X(214,216), X(218,220), X(222,224),
+  X(226,228), X(230,232), X(234,236), X(238,240), X(242,244), X(246,248), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223), X(224,225), X(226,227), X(228,229), X(230,231),
+  X(232,233), X(234,235), X(236,237), X(238,239), X(240,241), X(242,243),
+  X(244,245), X(246,247), X(248,249), X(250,251), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202), X(203,204), X(205,206), X(207,208), X(209,210),
+  X(211,212), X(213,214), X(215,216), X(217,218), X(219,220), X(221,222),
+  X(223,224), X(225,226), X(227,228), X(229,230), X(231,232), X(233,234),
+  X(235,236), X(237,238), X(239,240), X(241,242), X(243,244), X(245,246),
+  X(247,248), X(249,250)
+};
+M(252) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,177), X(113,241), X(49,113), X(177,241), X(17,49),
+  X(81,113), X(145,177), X(209,241), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(193,209), X(225,241), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,185),
+  X(121,249), X(57,121), X(185,249), X(25,57), X(89,121), X(153,185), X(217,249),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(201,217),
+  X(233,249), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(193,201), X(209,217), X(225,233), X(241,249), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101),
+  X(133,165), X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,181),
+  X(117,245), X(53,117), X(181,245), X(21,53), X(85,117), X(149,181), X(213,245),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(229,245), X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237),
+  X(45,109), X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,125), X(125,189), X(61,125), X(61,93),
+  X(125,157), X(189,221), X(29,61), X(93,125), X(157,189), X(29,45), X(61,77),
+  X(93,109), X(125,141), X(157,173), X(189,205), X(221,237), X(13,29), X(45,61),
+  X(77,93), X(109,125), X(141,157), X(173,189), X(205,221), X(13,21), X(29,37),
+  X(45,53), X(61,69), X(77,85), X(93,101), X(109,117), X(125,133), X(141,149),
+  X(157,165), X(173,181), X(189,197), X(205,213), X(221,229), X(237,245),
+  X(5,13), X(21,29), X(37,45), X(53,61), X(69,77), X(85,93), X(101,109),
+  X(117,125), X(133,141), X(149,157), X(165,173), X(181,189), X(197,205),
+  X(213,221), X(229,237), X(5,9), X(13,17), X(21,25), X(29,33), X(37,41),
+  X(45,49), X(53,57), X(61,65), X(69,73), X(77,81), X(85,89), X(93,97),
+  X(101,105), X(109,113), X(117,121), X(125,129), X(133,137), X(141,145),
+  X(149,153), X(157,161), X(165,169), X(173,177), X(181,185), X(189,193),
+  X(197,201), X(205,209), X(213,217), X(221,225), X(229,233), X(237,241),
+  X(245,249), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(185,189), X(193,197), X(201,205),
+  X(209,213), X(217,221), X(225,229), X(233,237), X(241,245), X(3,131),
+  X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99), X(163,227),
+  X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211), X(19,83),
+  X(147,211), X(51,179), X(115,243), X(51,115), X(179,243), X(19,51), X(83,115),
+  X(147,179), X(211,243), X(3,19), X(35,51), X(67,83), X(99,115), X(131,147),
+  X(163,179), X(195,211), X(227,243), X(11,139), X(75,203), X(11,75), X(139,203),
+  X(43,171), X(107,235), X(43,107), X(171,235), X(11,43), X(75,107), X(139,171),
+  X(203,235), X(27,155), X(91,219), X(27,91), X(155,219), X(59,187), X(123,251),
+  X(59,123), X(187,251), X(27,59), X(91,123), X(155,187), X(219,251), X(11,27),
+  X(43,59), X(75,91), X(107,123), X(139,155), X(171,187), X(203,219), X(235,251),
+  X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91), X(99,107),
+  X(115,123), X(131,139), X(147,155), X(163,171), X(179,187), X(195,203),
+  X(211,219), X(227,235), X(243,251), X(7,135), X(71,199), X(7,71), X(135,199),
+  X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103), X(135,167),
+  X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,183), X(119,247),
+  X(55,119), X(183,247), X(23,55), X(87,119), X(151,183), X(215,247), X(7,23),
+  X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215), X(231,247),
+  X(15,143), X(79,207), X(15,79), X(143,207), X(47,175), X(111,239), X(47,111),
+  X(175,239), X(15,47), X(79,111), X(143,175), X(207,239), X(31,159), X(95,223),
+  X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95), X(127,159),
+  X(191,223), X(31,63), X(95,127), X(159,191), X(31,47), X(63,79), X(95,111),
+  X(127,143), X(159,175), X(191,207), X(223,239), X(15,31), X(47,63), X(79,95),
+  X(111,127), X(143,159), X(175,191), X(207,223), X(15,23), X(31,39), X(47,55),
+  X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151), X(159,167),
+  X(175,183), X(191,199), X(207,215), X(223,231), X(239,247), X(7,15), X(23,31),
+  X(39,47), X(55,63), X(71,79), X(87,95), X(103,111), X(119,127), X(135,143),
+  X(151,159), X(167,175), X(183,191), X(199,207), X(215,223), X(231,239),
+  X(7,11), X(15,19), X(23,27), X(31,35), X(39,43), X(47,51), X(55,59), X(63,67),
+  X(71,75), X(79,83), X(87,91), X(95,99), X(103,107), X(111,115), X(119,123),
+  X(127,131), X(135,139), X(143,147), X(151,155), X(159,163), X(167,171),
+  X(175,179), X(183,187), X(191,195), X(199,203), X(207,211), X(215,219),
+  X(223,227), X(231,235), X(239,243), X(247,251), X(3,7), X(11,15), X(19,23),
+  X(27,31), X(35,39), X(43,47), X(51,55), X(59,63), X(67,71), X(75,79), X(83,87),
+  X(91,95), X(99,103), X(107,111), X(115,119), X(123,127), X(131,135),
+  X(139,143), X(147,151), X(155,159), X(163,167), X(171,175), X(179,183),
+  X(187,191), X(195,199), X(203,207), X(211,215), X(219,223), X(227,231),
+  X(235,239), X(243,247), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(213,215), X(217,219), X(221,223), X(225,227), X(229,231), X(233,235),
+  X(237,239), X(241,243), X(245,247), X(249,251), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,162), X(98,226), X(34,98), X(162,226), X(2,34), X(66,98),
+  X(130,162), X(194,226), X(18,146), X(82,210), X(18,82), X(146,210), X(50,178),
+  X(114,242), X(50,114), X(178,242), X(18,50), X(82,114), X(146,178), X(210,242),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(194,210),
+  X(226,242), X(10,138), X(74,202), X(10,74), X(138,202), X(42,170), X(106,234),
+  X(42,106), X(170,234), X(10,42), X(74,106), X(138,170), X(202,234), X(26,154),
+  X(90,218), X(26,90), X(154,218), X(58,186), X(122,250), X(58,122), X(186,250),
+  X(26,58), X(90,122), X(154,186), X(218,250), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(138,154), X(170,186), X(202,218), X(234,250), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(194,202), X(210,218), X(226,234),
+  X(242,250), X(6,134), X(70,198), X(6,70), X(134,198), X(38,166), X(102,230),
+  X(38,102), X(166,230), X(6,38), X(70,102), X(134,166), X(198,230), X(22,150),
+  X(86,214), X(22,86), X(150,214), X(54,182), X(118,246), X(54,118), X(182,246),
+  X(22,54), X(86,118), X(150,182), X(214,246), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(166,182), X(198,214), X(230,246), X(14,142),
+  X(78,206), X(14,78), X(142,206), X(46,174), X(110,238), X(46,110), X(174,238),
+  X(14,46), X(78,110), X(142,174), X(206,238), X(30,158), X(94,222), X(30,94),
+  X(158,222), X(62,126), X(126,190), X(62,126), X(62,94), X(126,158), X(190,222),
+  X(30,62), X(94,126), X(158,190), X(30,46), X(62,78), X(94,110), X(126,142),
+  X(158,174), X(190,206), X(222,238), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(142,158), X(174,190), X(206,222), X(14,22), X(30,38), X(46,54), X(62,70),
+  X(78,86), X(94,102), X(110,118), X(126,134), X(142,150), X(158,166),
+  X(174,182), X(190,198), X(206,214), X(222,230), X(238,246), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(166,174), X(182,190), X(198,206), X(214,222), X(230,238),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(158,162), X(166,170),
+  X(174,178), X(182,186), X(190,194), X(198,202), X(206,210), X(214,218),
+  X(222,226), X(230,234), X(238,242), X(246,250), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(226,230),
+  X(234,238), X(242,246), X(4,132), X(68,196), X(4,68), X(132,196), X(36,164),
+  X(100,228), X(36,100), X(164,228), X(4,36), X(68,100), X(132,164), X(196,228),
+  X(20,148), X(84,212), X(20,84), X(148,212), X(52,180), X(116,244), X(52,116),
+  X(180,244), X(20,52), X(84,116), X(148,180), X(212,244), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(164,180), X(196,212), X(228,244),
+  X(12,140), X(76,204), X(12,76), X(140,204), X(44,172), X(108,236), X(44,108),
+  X(172,236), X(12,44), X(76,108), X(140,172), X(204,236), X(28,156), X(92,220),
+  X(28,92), X(156,220), X(60,188), X(124,252), X(60,124), X(188,252), X(28,60),
+  X(92,124), X(156,188), X(220,252), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(140,156), X(172,188), X(204,220), X(236,252), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156),
+  X(164,172), X(180,188), X(196,204), X(212,220), X(228,236), X(244,252),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,168), X(104,232), X(40,104),
+  X(168,232), X(8,40), X(72,104), X(136,168), X(200,232), X(24,152), X(88,216),
+  X(24,88), X(152,216), X(56,184), X(120,248), X(56,120), X(184,248), X(24,56),
+  X(88,120), X(152,184), X(216,248), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(168,184), X(200,216), X(232,248), X(16,144), X(80,208), X(16,80),
+  X(144,208), X(48,176), X(112,240), X(48,112), X(176,240), X(16,48), X(80,112),
+  X(144,176), X(208,240), X(32,160), X(96,224), X(32,96), X(160,224), X(64,128),
+  X(128,192), X(64,128), X(64,96), X(128,160), X(192,224), X(32,64), X(96,128),
+  X(160,192), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208),
+  X(224,240), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(208,224), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104),
+  X(112,120), X(128,136), X(144,152), X(160,168), X(176,184), X(192,200),
+  X(208,216), X(224,232), X(240,248), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(216,224), X(232,240), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(168,172), X(176,180), X(184,188),
+  X(192,196), X(200,204), X(208,212), X(216,220), X(224,228), X(232,236),
+  X(240,244), X(248,252), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(212,216), X(220,224), X(228,232), X(236,240),
+  X(244,248), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212),
+  X(214,216), X(218,220), X(222,224), X(226,228), X(230,232), X(234,236),
+  X(238,240), X(242,244), X(246,248), X(250,252), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202), X(203,204), X(205,206), X(207,208), X(209,210),
+  X(211,212), X(213,214), X(215,216), X(217,218), X(219,220), X(221,222),
+  X(223,224), X(225,226), X(227,228), X(229,230), X(231,232), X(233,234),
+  X(235,236), X(237,238), X(239,240), X(241,242), X(243,244), X(245,246),
+  X(247,248), X(249,250), X(251,252)
+};
+M(253) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,177), X(113,241), X(49,113), X(177,241), X(17,49),
+  X(81,113), X(145,177), X(209,241), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(193,209), X(225,241), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,185),
+  X(121,249), X(57,121), X(185,249), X(25,57), X(89,121), X(153,185), X(217,249),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(201,217),
+  X(233,249), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(193,201), X(209,217), X(225,233), X(241,249), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101),
+  X(133,165), X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,181),
+  X(117,245), X(53,117), X(181,245), X(21,53), X(85,117), X(149,181), X(213,245),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(229,245), X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237),
+  X(45,109), X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,189), X(125,253), X(61,125), X(189,253),
+  X(29,61), X(93,125), X(157,189), X(221,253), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(141,157), X(173,189), X(205,221), X(237,253), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(229,237),
+  X(245,253), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(185,189), X(193,197), X(201,205),
+  X(209,213), X(217,221), X(225,229), X(233,237), X(241,245), X(249,253),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99),
+  X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211),
+  X(19,83), X(147,211), X(51,179), X(115,243), X(51,115), X(179,243), X(19,51),
+  X(83,115), X(147,179), X(211,243), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(163,179), X(195,211), X(227,243), X(11,139), X(75,203), X(11,75),
+  X(139,203), X(43,171), X(107,235), X(43,107), X(171,235), X(11,43), X(75,107),
+  X(139,171), X(203,235), X(27,155), X(91,219), X(27,91), X(155,219), X(59,187),
+  X(123,251), X(59,123), X(187,251), X(27,59), X(91,123), X(155,187), X(219,251),
+  X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187), X(203,219),
+  X(235,251), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(179,187),
+  X(195,203), X(211,219), X(227,235), X(243,251), X(7,135), X(71,199), X(7,71),
+  X(135,199), X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103),
+  X(135,167), X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,183),
+  X(119,247), X(55,119), X(183,247), X(23,55), X(87,119), X(151,183), X(215,247),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215),
+  X(231,247), X(15,143), X(79,207), X(15,79), X(143,207), X(47,175), X(111,239),
+  X(47,111), X(175,239), X(15,47), X(79,111), X(143,175), X(207,239), X(31,159),
+  X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95),
+  X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(31,47), X(63,79),
+  X(95,111), X(127,143), X(159,175), X(191,207), X(223,239), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(207,215), X(223,231), X(239,247),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(199,207),
+  X(215,223), X(231,239), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43),
+  X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99),
+  X(103,107), X(111,115), X(119,123), X(127,131), X(135,139), X(143,147),
+  X(151,155), X(159,163), X(167,171), X(175,179), X(183,187), X(191,195),
+  X(199,203), X(207,211), X(215,219), X(223,227), X(231,235), X(239,243),
+  X(247,251), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(155,159),
+  X(163,167), X(171,175), X(179,183), X(187,191), X(195,199), X(203,207),
+  X(211,215), X(219,223), X(227,231), X(235,239), X(243,247), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41),
+  X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73),
+  X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101),
+  X(103,105), X(107,109), X(111,113), X(115,117), X(119,121), X(123,125),
+  X(127,129), X(131,133), X(135,137), X(139,141), X(143,145), X(147,149),
+  X(151,153), X(155,157), X(159,161), X(163,165), X(167,169), X(171,173),
+  X(175,177), X(179,181), X(183,185), X(187,189), X(191,193), X(195,197),
+  X(199,201), X(203,205), X(207,209), X(211,213), X(215,217), X(219,221),
+  X(223,225), X(227,229), X(231,233), X(235,237), X(239,241), X(243,245),
+  X(247,249), X(251,253), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(213,215), X(217,219), X(221,223), X(225,227), X(229,231), X(233,235),
+  X(237,239), X(241,243), X(245,247), X(249,251), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,162), X(98,226), X(34,98), X(162,226), X(2,34), X(66,98),
+  X(130,162), X(194,226), X(18,146), X(82,210), X(18,82), X(146,210), X(50,178),
+  X(114,242), X(50,114), X(178,242), X(18,50), X(82,114), X(146,178), X(210,242),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(194,210),
+  X(226,242), X(10,138), X(74,202), X(10,74), X(138,202), X(42,170), X(106,234),
+  X(42,106), X(170,234), X(10,42), X(74,106), X(138,170), X(202,234), X(26,154),
+  X(90,218), X(26,90), X(154,218), X(58,186), X(122,250), X(58,122), X(186,250),
+  X(26,58), X(90,122), X(154,186), X(218,250), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(138,154), X(170,186), X(202,218), X(234,250), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(194,202), X(210,218), X(226,234),
+  X(242,250), X(6,134), X(70,198), X(6,70), X(134,198), X(38,166), X(102,230),
+  X(38,102), X(166,230), X(6,38), X(70,102), X(134,166), X(198,230), X(22,150),
+  X(86,214), X(22,86), X(150,214), X(54,182), X(118,246), X(54,118), X(182,246),
+  X(22,54), X(86,118), X(150,182), X(214,246), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(166,182), X(198,214), X(230,246), X(14,142),
+  X(78,206), X(14,78), X(142,206), X(46,174), X(110,238), X(46,110), X(174,238),
+  X(14,46), X(78,110), X(142,174), X(206,238), X(30,158), X(94,222), X(30,94),
+  X(158,222), X(62,126), X(126,190), X(62,126), X(62,94), X(126,158), X(190,222),
+  X(30,62), X(94,126), X(158,190), X(30,46), X(62,78), X(94,110), X(126,142),
+  X(158,174), X(190,206), X(222,238), X(14,30), X(46,62), X(78,94), X(110,126),
+  X(142,158), X(174,190), X(206,222), X(14,22), X(30,38), X(46,54), X(62,70),
+  X(78,86), X(94,102), X(110,118), X(126,134), X(142,150), X(158,166),
+  X(174,182), X(190,198), X(206,214), X(222,230), X(238,246), X(6,14), X(22,30),
+  X(38,46), X(54,62), X(70,78), X(86,94), X(102,110), X(118,126), X(134,142),
+  X(150,158), X(166,174), X(182,190), X(198,206), X(214,222), X(230,238),
+  X(6,10), X(14,18), X(22,26), X(30,34), X(38,42), X(46,50), X(54,58), X(62,66),
+  X(70,74), X(78,82), X(86,90), X(94,98), X(102,106), X(110,114), X(118,122),
+  X(126,130), X(134,138), X(142,146), X(150,154), X(158,162), X(166,170),
+  X(174,178), X(182,186), X(190,194), X(198,202), X(206,210), X(214,218),
+  X(222,226), X(230,234), X(238,242), X(246,250), X(2,6), X(10,14), X(18,22),
+  X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78), X(82,86),
+  X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(226,230),
+  X(234,238), X(242,246), X(4,132), X(68,196), X(4,68), X(132,196), X(36,164),
+  X(100,228), X(36,100), X(164,228), X(4,36), X(68,100), X(132,164), X(196,228),
+  X(20,148), X(84,212), X(20,84), X(148,212), X(52,180), X(116,244), X(52,116),
+  X(180,244), X(20,52), X(84,116), X(148,180), X(212,244), X(4,20), X(36,52),
+  X(68,84), X(100,116), X(132,148), X(164,180), X(196,212), X(228,244),
+  X(12,140), X(76,204), X(12,76), X(140,204), X(44,172), X(108,236), X(44,108),
+  X(172,236), X(12,44), X(76,108), X(140,172), X(204,236), X(28,156), X(92,220),
+  X(28,92), X(156,220), X(60,188), X(124,252), X(60,124), X(188,252), X(28,60),
+  X(92,124), X(156,188), X(220,252), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(140,156), X(172,188), X(204,220), X(236,252), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156),
+  X(164,172), X(180,188), X(196,204), X(212,220), X(228,236), X(244,252),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,168), X(104,232), X(40,104),
+  X(168,232), X(8,40), X(72,104), X(136,168), X(200,232), X(24,152), X(88,216),
+  X(24,88), X(152,216), X(56,184), X(120,248), X(56,120), X(184,248), X(24,56),
+  X(88,120), X(152,184), X(216,248), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(168,184), X(200,216), X(232,248), X(16,144), X(80,208), X(16,80),
+  X(144,208), X(48,176), X(112,240), X(48,112), X(176,240), X(16,48), X(80,112),
+  X(144,176), X(208,240), X(32,160), X(96,224), X(32,96), X(160,224), X(64,128),
+  X(128,192), X(64,128), X(64,96), X(128,160), X(192,224), X(32,64), X(96,128),
+  X(160,192), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208),
+  X(224,240), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(208,224), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104),
+  X(112,120), X(128,136), X(144,152), X(160,168), X(176,184), X(192,200),
+  X(208,216), X(224,232), X(240,248), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(216,224), X(232,240), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(168,172), X(176,180), X(184,188),
+  X(192,196), X(200,204), X(208,212), X(216,220), X(224,228), X(232,236),
+  X(240,244), X(248,252), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(212,216), X(220,224), X(228,232), X(236,240),
+  X(244,248), X(2,4), X(6,8), X(10,12), X(14,16), X(18,20), X(22,24), X(26,28),
+  X(30,32), X(34,36), X(38,40), X(42,44), X(46,48), X(50,52), X(54,56), X(58,60),
+  X(62,64), X(66,68), X(70,72), X(74,76), X(78,80), X(82,84), X(86,88), X(90,92),
+  X(94,96), X(98,100), X(102,104), X(106,108), X(110,112), X(114,116),
+  X(118,120), X(122,124), X(126,128), X(130,132), X(134,136), X(138,140),
+  X(142,144), X(146,148), X(150,152), X(154,156), X(158,160), X(162,164),
+  X(166,168), X(170,172), X(174,176), X(178,180), X(182,184), X(186,188),
+  X(190,192), X(194,196), X(198,200), X(202,204), X(206,208), X(210,212),
+  X(214,216), X(218,220), X(222,224), X(226,228), X(230,232), X(234,236),
+  X(238,240), X(242,244), X(246,248), X(250,252), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(112,113), X(114,115),
+  X(116,117), X(118,119), X(120,121), X(122,123), X(124,125), X(126,127),
+  X(128,129), X(130,131), X(132,133), X(134,135), X(136,137), X(138,139),
+  X(140,141), X(142,143), X(144,145), X(146,147), X(148,149), X(150,151),
+  X(152,153), X(154,155), X(156,157), X(158,159), X(160,161), X(162,163),
+  X(164,165), X(166,167), X(168,169), X(170,171), X(172,173), X(174,175),
+  X(176,177), X(178,179), X(180,181), X(182,183), X(184,185), X(186,187),
+  X(188,189), X(190,191), X(192,193), X(194,195), X(196,197), X(198,199),
+  X(200,201), X(202,203), X(204,205), X(206,207), X(208,209), X(210,211),
+  X(212,213), X(214,215), X(216,217), X(218,219), X(220,221), X(222,223),
+  X(224,225), X(226,227), X(228,229), X(230,231), X(232,233), X(234,235),
+  X(236,237), X(238,239), X(240,241), X(242,243), X(244,245), X(246,247),
+  X(248,249), X(250,251), X(252,253), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202), X(203,204), X(205,206), X(207,208), X(209,210), X(211,212),
+  X(213,214), X(215,216), X(217,218), X(219,220), X(221,222), X(223,224),
+  X(225,226), X(227,228), X(229,230), X(231,232), X(233,234), X(235,236),
+  X(237,238), X(239,240), X(241,242), X(243,244), X(245,246), X(247,248),
+  X(249,250), X(251,252)
+};
+M(254) = {
+  X(1,129), X(65,193), X(1,65), X(129,193), X(33,161), X(97,225), X(33,97),
+  X(161,225), X(1,33), X(65,97), X(129,161), X(193,225), X(17,145), X(81,209),
+  X(17,81), X(145,209), X(49,177), X(113,241), X(49,113), X(177,241), X(17,49),
+  X(81,113), X(145,177), X(209,241), X(1,17), X(33,49), X(65,81), X(97,113),
+  X(129,145), X(161,177), X(193,209), X(225,241), X(9,137), X(73,201), X(9,73),
+  X(137,201), X(41,169), X(105,233), X(41,105), X(169,233), X(9,41), X(73,105),
+  X(137,169), X(201,233), X(25,153), X(89,217), X(25,89), X(153,217), X(57,185),
+  X(121,249), X(57,121), X(185,249), X(25,57), X(89,121), X(153,185), X(217,249),
+  X(9,25), X(41,57), X(73,89), X(105,121), X(137,153), X(169,185), X(201,217),
+  X(233,249), X(1,9), X(17,25), X(33,41), X(49,57), X(65,73), X(81,89),
+  X(97,105), X(113,121), X(129,137), X(145,153), X(161,169), X(177,185),
+  X(193,201), X(209,217), X(225,233), X(241,249), X(5,133), X(69,197), X(5,69),
+  X(133,197), X(37,165), X(101,229), X(37,101), X(165,229), X(5,37), X(69,101),
+  X(133,165), X(197,229), X(21,149), X(85,213), X(21,85), X(149,213), X(53,181),
+  X(117,245), X(53,117), X(181,245), X(21,53), X(85,117), X(149,181), X(213,245),
+  X(5,21), X(37,53), X(69,85), X(101,117), X(133,149), X(165,181), X(197,213),
+  X(229,245), X(13,141), X(77,205), X(13,77), X(141,205), X(45,173), X(109,237),
+  X(45,109), X(173,237), X(13,45), X(77,109), X(141,173), X(205,237), X(29,157),
+  X(93,221), X(29,93), X(157,221), X(61,189), X(125,253), X(61,125), X(189,253),
+  X(29,61), X(93,125), X(157,189), X(221,253), X(13,29), X(45,61), X(77,93),
+  X(109,125), X(141,157), X(173,189), X(205,221), X(237,253), X(5,13), X(21,29),
+  X(37,45), X(53,61), X(69,77), X(85,93), X(101,109), X(117,125), X(133,141),
+  X(149,157), X(165,173), X(181,189), X(197,205), X(213,221), X(229,237),
+  X(245,253), X(1,5), X(9,13), X(17,21), X(25,29), X(33,37), X(41,45), X(49,53),
+  X(57,61), X(65,69), X(73,77), X(81,85), X(89,93), X(97,101), X(105,109),
+  X(113,117), X(121,125), X(129,133), X(137,141), X(145,149), X(153,157),
+  X(161,165), X(169,173), X(177,181), X(185,189), X(193,197), X(201,205),
+  X(209,213), X(217,221), X(225,229), X(233,237), X(241,245), X(249,253),
+  X(3,131), X(67,195), X(3,67), X(131,195), X(35,163), X(99,227), X(35,99),
+  X(163,227), X(3,35), X(67,99), X(131,163), X(195,227), X(19,147), X(83,211),
+  X(19,83), X(147,211), X(51,179), X(115,243), X(51,115), X(179,243), X(19,51),
+  X(83,115), X(147,179), X(211,243), X(3,19), X(35,51), X(67,83), X(99,115),
+  X(131,147), X(163,179), X(195,211), X(227,243), X(11,139), X(75,203), X(11,75),
+  X(139,203), X(43,171), X(107,235), X(43,107), X(171,235), X(11,43), X(75,107),
+  X(139,171), X(203,235), X(27,155), X(91,219), X(27,91), X(155,219), X(59,187),
+  X(123,251), X(59,123), X(187,251), X(27,59), X(91,123), X(155,187), X(219,251),
+  X(11,27), X(43,59), X(75,91), X(107,123), X(139,155), X(171,187), X(203,219),
+  X(235,251), X(3,11), X(19,27), X(35,43), X(51,59), X(67,75), X(83,91),
+  X(99,107), X(115,123), X(131,139), X(147,155), X(163,171), X(179,187),
+  X(195,203), X(211,219), X(227,235), X(243,251), X(7,135), X(71,199), X(7,71),
+  X(135,199), X(39,167), X(103,231), X(39,103), X(167,231), X(7,39), X(71,103),
+  X(135,167), X(199,231), X(23,151), X(87,215), X(23,87), X(151,215), X(55,183),
+  X(119,247), X(55,119), X(183,247), X(23,55), X(87,119), X(151,183), X(215,247),
+  X(7,23), X(39,55), X(71,87), X(103,119), X(135,151), X(167,183), X(199,215),
+  X(231,247), X(15,143), X(79,207), X(15,79), X(143,207), X(47,175), X(111,239),
+  X(47,111), X(175,239), X(15,47), X(79,111), X(143,175), X(207,239), X(31,159),
+  X(95,223), X(31,95), X(159,223), X(63,127), X(127,191), X(63,127), X(63,95),
+  X(127,159), X(191,223), X(31,63), X(95,127), X(159,191), X(31,47), X(63,79),
+  X(95,111), X(127,143), X(159,175), X(191,207), X(223,239), X(15,31), X(47,63),
+  X(79,95), X(111,127), X(143,159), X(175,191), X(207,223), X(15,23), X(31,39),
+  X(47,55), X(63,71), X(79,87), X(95,103), X(111,119), X(127,135), X(143,151),
+  X(159,167), X(175,183), X(191,199), X(207,215), X(223,231), X(239,247),
+  X(7,15), X(23,31), X(39,47), X(55,63), X(71,79), X(87,95), X(103,111),
+  X(119,127), X(135,143), X(151,159), X(167,175), X(183,191), X(199,207),
+  X(215,223), X(231,239), X(7,11), X(15,19), X(23,27), X(31,35), X(39,43),
+  X(47,51), X(55,59), X(63,67), X(71,75), X(79,83), X(87,91), X(95,99),
+  X(103,107), X(111,115), X(119,123), X(127,131), X(135,139), X(143,147),
+  X(151,155), X(159,163), X(167,171), X(175,179), X(183,187), X(191,195),
+  X(199,203), X(207,211), X(215,219), X(223,227), X(231,235), X(239,243),
+  X(247,251), X(3,7), X(11,15), X(19,23), X(27,31), X(35,39), X(43,47), X(51,55),
+  X(59,63), X(67,71), X(75,79), X(83,87), X(91,95), X(99,103), X(107,111),
+  X(115,119), X(123,127), X(131,135), X(139,143), X(147,151), X(155,159),
+  X(163,167), X(171,175), X(179,183), X(187,191), X(195,199), X(203,207),
+  X(211,215), X(219,223), X(227,231), X(235,239), X(243,247), X(3,5), X(7,9),
+  X(11,13), X(15,17), X(19,21), X(23,25), X(27,29), X(31,33), X(35,37), X(39,41),
+  X(43,45), X(47,49), X(51,53), X(55,57), X(59,61), X(63,65), X(67,69), X(71,73),
+  X(75,77), X(79,81), X(83,85), X(87,89), X(91,93), X(95,97), X(99,101),
+  X(103,105), X(107,109), X(111,113), X(115,117), X(119,121), X(123,125),
+  X(127,129), X(131,133), X(135,137), X(139,141), X(143,145), X(147,149),
+  X(151,153), X(155,157), X(159,161), X(163,165), X(167,169), X(171,173),
+  X(175,177), X(179,181), X(183,185), X(187,189), X(191,193), X(195,197),
+  X(199,201), X(203,205), X(207,209), X(211,213), X(215,217), X(219,221),
+  X(223,225), X(227,229), X(231,233), X(235,237), X(239,241), X(243,245),
+  X(247,249), X(251,253), X(1,3), X(5,7), X(9,11), X(13,15), X(17,19), X(21,23),
+  X(25,27), X(29,31), X(33,35), X(37,39), X(41,43), X(45,47), X(49,51), X(53,55),
+  X(57,59), X(61,63), X(65,67), X(69,71), X(73,75), X(77,79), X(81,83), X(85,87),
+  X(89,91), X(93,95), X(97,99), X(101,103), X(105,107), X(109,111), X(113,115),
+  X(117,119), X(121,123), X(125,127), X(129,131), X(133,135), X(137,139),
+  X(141,143), X(145,147), X(149,151), X(153,155), X(157,159), X(161,163),
+  X(165,167), X(169,171), X(173,175), X(177,179), X(181,183), X(185,187),
+  X(189,191), X(193,195), X(197,199), X(201,203), X(205,207), X(209,211),
+  X(213,215), X(217,219), X(221,223), X(225,227), X(229,231), X(233,235),
+  X(237,239), X(241,243), X(245,247), X(249,251), X(2,130), X(66,194), X(2,66),
+  X(130,194), X(34,162), X(98,226), X(34,98), X(162,226), X(2,34), X(66,98),
+  X(130,162), X(194,226), X(18,146), X(82,210), X(18,82), X(146,210), X(50,178),
+  X(114,242), X(50,114), X(178,242), X(18,50), X(82,114), X(146,178), X(210,242),
+  X(2,18), X(34,50), X(66,82), X(98,114), X(130,146), X(162,178), X(194,210),
+  X(226,242), X(10,138), X(74,202), X(10,74), X(138,202), X(42,170), X(106,234),
+  X(42,106), X(170,234), X(10,42), X(74,106), X(138,170), X(202,234), X(26,154),
+  X(90,218), X(26,90), X(154,218), X(58,186), X(122,250), X(58,122), X(186,250),
+  X(26,58), X(90,122), X(154,186), X(218,250), X(10,26), X(42,58), X(74,90),
+  X(106,122), X(138,154), X(170,186), X(202,218), X(234,250), X(2,10), X(18,26),
+  X(34,42), X(50,58), X(66,74), X(82,90), X(98,106), X(114,122), X(130,138),
+  X(146,154), X(162,170), X(178,186), X(194,202), X(210,218), X(226,234),
+  X(242,250), X(6,134), X(70,198), X(6,70), X(134,198), X(38,166), X(102,230),
+  X(38,102), X(166,230), X(6,38), X(70,102), X(134,166), X(198,230), X(22,150),
+  X(86,214), X(22,86), X(150,214), X(54,182), X(118,246), X(54,118), X(182,246),
+  X(22,54), X(86,118), X(150,182), X(214,246), X(6,22), X(38,54), X(70,86),
+  X(102,118), X(134,150), X(166,182), X(198,214), X(230,246), X(14,142),
+  X(78,206), X(14,78), X(142,206), X(46,174), X(110,238), X(46,110), X(174,238),
+  X(14,46), X(78,110), X(142,174), X(206,238), X(30,158), X(94,222), X(30,94),
+  X(158,222), X(62,190), X(126,254), X(62,126), X(190,254), X(30,62), X(94,126),
+  X(158,190), X(222,254), X(14,30), X(46,62), X(78,94), X(110,126), X(142,158),
+  X(174,190), X(206,222), X(238,254), X(6,14), X(22,30), X(38,46), X(54,62),
+  X(70,78), X(86,94), X(102,110), X(118,126), X(134,142), X(150,158), X(166,174),
+  X(182,190), X(198,206), X(214,222), X(230,238), X(246,254), X(2,6), X(10,14),
+  X(18,22), X(26,30), X(34,38), X(42,46), X(50,54), X(58,62), X(66,70), X(74,78),
+  X(82,86), X(90,94), X(98,102), X(106,110), X(114,118), X(122,126), X(130,134),
+  X(138,142), X(146,150), X(154,158), X(162,166), X(170,174), X(178,182),
+  X(186,190), X(194,198), X(202,206), X(210,214), X(218,222), X(226,230),
+  X(234,238), X(242,246), X(250,254), X(4,132), X(68,196), X(4,68), X(132,196),
+  X(36,164), X(100,228), X(36,100), X(164,228), X(4,36), X(68,100), X(132,164),
+  X(196,228), X(20,148), X(84,212), X(20,84), X(148,212), X(52,180), X(116,244),
+  X(52,116), X(180,244), X(20,52), X(84,116), X(148,180), X(212,244), X(4,20),
+  X(36,52), X(68,84), X(100,116), X(132,148), X(164,180), X(196,212), X(228,244),
+  X(12,140), X(76,204), X(12,76), X(140,204), X(44,172), X(108,236), X(44,108),
+  X(172,236), X(12,44), X(76,108), X(140,172), X(204,236), X(28,156), X(92,220),
+  X(28,92), X(156,220), X(60,188), X(124,252), X(60,124), X(188,252), X(28,60),
+  X(92,124), X(156,188), X(220,252), X(12,28), X(44,60), X(76,92), X(108,124),
+  X(140,156), X(172,188), X(204,220), X(236,252), X(4,12), X(20,28), X(36,44),
+  X(52,60), X(68,76), X(84,92), X(100,108), X(116,124), X(132,140), X(148,156),
+  X(164,172), X(180,188), X(196,204), X(212,220), X(228,236), X(244,252),
+  X(8,136), X(72,200), X(8,72), X(136,200), X(40,168), X(104,232), X(40,104),
+  X(168,232), X(8,40), X(72,104), X(136,168), X(200,232), X(24,152), X(88,216),
+  X(24,88), X(152,216), X(56,184), X(120,248), X(56,120), X(184,248), X(24,56),
+  X(88,120), X(152,184), X(216,248), X(8,24), X(40,56), X(72,88), X(104,120),
+  X(136,152), X(168,184), X(200,216), X(232,248), X(16,144), X(80,208), X(16,80),
+  X(144,208), X(48,176), X(112,240), X(48,112), X(176,240), X(16,48), X(80,112),
+  X(144,176), X(208,240), X(32,160), X(96,224), X(32,96), X(160,224), X(64,128),
+  X(128,192), X(64,128), X(64,96), X(128,160), X(192,224), X(32,64), X(96,128),
+  X(160,192), X(32,48), X(64,80), X(96,112), X(128,144), X(160,176), X(192,208),
+  X(224,240), X(16,32), X(48,64), X(80,96), X(112,128), X(144,160), X(176,192),
+  X(208,224), X(16,24), X(32,40), X(48,56), X(64,72), X(80,88), X(96,104),
+  X(112,120), X(128,136), X(144,152), X(160,168), X(176,184), X(192,200),
+  X(208,216), X(224,232), X(240,248), X(8,16), X(24,32), X(40,48), X(56,64),
+  X(72,80), X(88,96), X(104,112), X(120,128), X(136,144), X(152,160), X(168,176),
+  X(184,192), X(200,208), X(216,224), X(232,240), X(8,12), X(16,20), X(24,28),
+  X(32,36), X(40,44), X(48,52), X(56,60), X(64,68), X(72,76), X(80,84), X(88,92),
+  X(96,100), X(104,108), X(112,116), X(120,124), X(128,132), X(136,140),
+  X(144,148), X(152,156), X(160,164), X(168,172), X(176,180), X(184,188),
+  X(192,196), X(200,204), X(208,212), X(216,220), X(224,228), X(232,236),
+  X(240,244), X(248,252), X(4,8), X(12,16), X(20,24), X(28,32), X(36,40),
+  X(44,48), X(52,56), X(60,64), X(68,72), X(76,80), X(84,88), X(92,96),
+  X(100,104), X(108,112), X(116,120), X(124,128), X(132,136), X(140,144),
+  X(148,152), X(156,160), X(164,168), X(172,176), X(180,184), X(188,192),
+  X(196,200), X(204,208), X(212,216), X(220,224), X(228,232), X(236,240),
+  X(244,248), X(4,6), X(8,10), X(12,14), X(16,18), X(20,22), X(24,26), X(28,30),
+  X(32,34), X(36,38), X(40,42), X(44,46), X(48,50), X(52,54), X(56,58), X(60,62),
+  X(64,66), X(68,70), X(72,74), X(76,78), X(80,82), X(84,86), X(88,90), X(92,94),
+  X(96,98), X(100,102), X(104,106), X(108,110), X(112,114), X(116,118),
+  X(120,122), X(124,126), X(128,130), X(132,134), X(136,138), X(140,142),
+  X(144,146), X(148,150), X(152,154), X(156,158), X(160,162), X(164,166),
+  X(168,170), X(172,174), X(176,178), X(180,182), X(184,186), X(188,190),
+  X(192,194), X(196,198), X(200,202), X(204,206), X(208,210), X(212,214),
+  X(216,218), X(220,222), X(224,226), X(228,230), X(232,234), X(236,238),
+  X(240,242), X(244,246), X(248,250), X(252,254), X(2,4), X(6,8), X(10,12),
+  X(14,16), X(18,20), X(22,24), X(26,28), X(30,32), X(34,36), X(38,40), X(42,44),
+  X(46,48), X(50,52), X(54,56), X(58,60), X(62,64), X(66,68), X(70,72), X(74,76),
+  X(78,80), X(82,84), X(86,88), X(90,92), X(94,96), X(98,100), X(102,104),
+  X(106,108), X(110,112), X(114,116), X(118,120), X(122,124), X(126,128),
+  X(130,132), X(134,136), X(138,140), X(142,144), X(146,148), X(150,152),
+  X(154,156), X(158,160), X(162,164), X(166,168), X(170,172), X(174,176),
+  X(178,180), X(182,184), X(186,188), X(190,192), X(194,196), X(198,200),
+  X(202,204), X(206,208), X(210,212), X(214,216), X(218,220), X(222,224),
+  X(226,228), X(230,232), X(234,236), X(238,240), X(242,244), X(246,248),
+  X(250,252), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194), X(195,196), X(197,198), X(199,200), X(201,202), X(203,204),
+  X(205,206), X(207,208), X(209,210), X(211,212), X(213,214), X(215,216),
+  X(217,218), X(219,220), X(221,222), X(223,224), X(225,226), X(227,228),
+  X(229,230), X(231,232), X(233,234), X(235,236), X(237,238), X(239,240),
+  X(241,242), X(243,244), X(245,246), X(247,248), X(249,250), X(251,252),
+  X(253,254)
+};
+
+//
+//
+//
+
+struct hsg_network const hsg_networks_merging[] =
+{
+  LM(2),
+  LM(3),
+  LM(4),
+  LM(5),
+  LM(6),
+  LM(7),
+  LM(8),
+  LM(9),
+  LM(10),
+  LM(11),
+  LM(12),
+  LM(13),
+  LM(14),
+  LM(15),
+  LM(16),
+  LM(17),
+  LM(18),
+  LM(19),
+  LM(20),
+  LM(21),
+  LM(22),
+  LM(23),
+  LM(24),
+  LM(25),
+  LM(26),
+  LM(27),
+  LM(28),
+  LM(29),
+  LM(30),
+  LM(31),
+  LM(32),
+  LM(33),
+  LM(34),
+  LM(35),
+  LM(36),
+  LM(37),
+  LM(38),
+  LM(39),
+  LM(40),
+  LM(41),
+  LM(42),
+  LM(43),
+  LM(44),
+  LM(45),
+  LM(46),
+  LM(47),
+  LM(48),
+  LM(49),
+  LM(50),
+  LM(51),
+  LM(52),
+  LM(53),
+  LM(54),
+  LM(55),
+  LM(56),
+  LM(57),
+  LM(58),
+  LM(59),
+  LM(60),
+  LM(61),
+  LM(62),
+  LM(63),
+  LM(64),
+  LM(65),
+  LM(66),
+  LM(67),
+  LM(68),
+  LM(69),
+  LM(70),
+  LM(71),
+  LM(72),
+  LM(73),
+  LM(74),
+  LM(75),
+  LM(76),
+  LM(77),
+  LM(78),
+  LM(79),
+  LM(80),
+  LM(81),
+  LM(82),
+  LM(83),
+  LM(84),
+  LM(85),
+  LM(86),
+  LM(87),
+  LM(88),
+  LM(89),
+  LM(90),
+  LM(91),
+  LM(92),
+  LM(93),
+  LM(94),
+  LM(95),
+  LM(96),
+  LM(97),
+  LM(98),
+  LM(99),
+  LM(100),
+  LM(101),
+  LM(102),
+  LM(103),
+  LM(104),
+  LM(105),
+  LM(106),
+  LM(107),
+  LM(108),
+  LM(109),
+  LM(110),
+  LM(111),
+  LM(112),
+  LM(113),
+  LM(114),
+  LM(115),
+  LM(116),
+  LM(117),
+  LM(118),
+  LM(119),
+  LM(120),
+  LM(121),
+  LM(122),
+  LM(123),
+  LM(124),
+  LM(125),
+  LM(126),
+  LM(127),
+  LM(128),
+  LM(129),
+  LM(130),
+  LM(131),
+  LM(132),
+  LM(133),
+  LM(134),
+  LM(135),
+  LM(136),
+  LM(137),
+  LM(138),
+  LM(139),
+  LM(140),
+  LM(141),
+  LM(142),
+  LM(143),
+  LM(144),
+  LM(145),
+  LM(146),
+  LM(147),
+  LM(148),
+  LM(149),
+  LM(150),
+  LM(151),
+  LM(152),
+  LM(153),
+  LM(154),
+  LM(155),
+  LM(156),
+  LM(157),
+  LM(158),
+  LM(159),
+  LM(160),
+  LM(161),
+  LM(162),
+  LM(163),
+  LM(164),
+  LM(165),
+  LM(166),
+  LM(167),
+  LM(168),
+  LM(169),
+  LM(170),
+  LM(171),
+  LM(172),
+  LM(173),
+  LM(174),
+  LM(175),
+  LM(176),
+  LM(177),
+  LM(178),
+  LM(179),
+  LM(180),
+  LM(181),
+  LM(182),
+  LM(183),
+  LM(184),
+  LM(185),
+  LM(186),
+  LM(187),
+  LM(188),
+  LM(189),
+  LM(190),
+  LM(191),
+  LM(192),
+  LM(193),
+  LM(194),
+  LM(195),
+  LM(196),
+  LM(197),
+  LM(198),
+  LM(199),
+  LM(200),
+  LM(201),
+  LM(202),
+  LM(203),
+  LM(204),
+  LM(205),
+  LM(206),
+  LM(207),
+  LM(208),
+  LM(209),
+  LM(210),
+  LM(211),
+  LM(212),
+  LM(213),
+  LM(214),
+  LM(215),
+  LM(216),
+  LM(217),
+  LM(218),
+  LM(219),
+  LM(220),
+  LM(221),
+  LM(222),
+  LM(223),
+  LM(224),
+  LM(225),
+  LM(226),
+  LM(227),
+  LM(228),
+  LM(229),
+  LM(230),
+  LM(231),
+  LM(232),
+  LM(233),
+  LM(234),
+  LM(235),
+  LM(236),
+  LM(237),
+  LM(238),
+  LM(239),
+  LM(240),
+  LM(241),
+  LM(242),
+  LM(243),
+  LM(244),
+  LM(245),
+  LM(246),
+  LM(247),
+  LM(248),
+  LM(249),
+  LM(250),
+  LM(251),
+  LM(252),
+  LM(253),
+  LM(254)
+};
diff --git a/src/compute/hs/gen/networks_sorting.c b/src/compute/hs/gen/networks_sorting.c
new file mode 100644
index 0000000..c7beb6b
--- /dev/null
+++ b/src/compute/hs/gen/networks_sorting.c
@@ -0,0 +1,30157 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+// This file was generated using a modified version of
+// the Perl script "algorithm-networksort-chooser" found here:
+//
+// http://search.cpan.org/dist/Algorithm-Networksort-Chooser/bin/algorithm-networksort-chooser
+//
+
+#include "networks.h"
+#include "macros.h"
+
+//
+//
+//
+
+#define S(n)   static struct hsg_op const sn##n[]
+#define X(a,b) { HSG_OP_TYPE_CMP_XCHG, { a, b }}
+
+//
+//
+//
+
+#define LS(n)  { ARRAY_LENGTH(sn##n), sn##n }
+
+//
+//
+//
+
+S(2) = {
+  X(1,2)
+};
+S(4) = {
+  X(1,3), X(2,4), X(1,2), X(3,4), X(2,3)
+};
+S(6) = {
+  X(1,5), X(2,6), X(1,3), X(2,4), X(3,5), X(4,6), X(1,2), X(3,4), X(5,6),
+  X(2,5), X(2,3), X(4,5)
+};
+S(8) = {
+  X(1,5), X(2,6), X(3,7), X(4,8), X(1,3), X(2,4), X(5,7), X(6,8), X(3,5),
+  X(4,6), X(1,2), X(3,4), X(5,6), X(7,8), X(2,5), X(4,7), X(2,3), X(4,5), X(6,7)
+};
+S(10) = {
+  X(5,10), X(4,9), X(3,8), X(2,7), X(1,6), X(2,5), X(7,10), X(1,4), X(6,9),
+  X(1,3), X(4,7), X(8,10), X(1,2), X(3,5), X(6,8), X(9,10), X(2,3), X(5,7),
+  X(8,9), X(4,6), X(3,6), X(7,9), X(2,4), X(5,8), X(3,4), X(7,8), X(4,5), X(6,7),
+  X(5,6)
+};
+S(12) = {
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(2,4), X(6,8), X(10,12),
+  X(1,3), X(5,7), X(9,11), X(2,3), X(6,7), X(10,11), X(2,6), X(7,11), X(6,10),
+  X(3,7), X(2,6), X(7,11), X(1,5), X(8,12), X(4,8), X(5,9), X(1,5), X(8,12),
+  X(2,5), X(8,11), X(4,9), X(3,4), X(9,10), X(3,5), X(8,10), X(4,6), X(7,9),
+  X(4,5), X(6,7), X(8,9)
+};
+S(14) = {
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(1,3), X(5,7),
+  X(9,11), X(2,4), X(6,8), X(10,12), X(1,5), X(9,13), X(2,6), X(10,14), X(3,7),
+  X(4,8), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(6,11), X(7,10),
+  X(4,13), X(8,12), X(2,3), X(5,9), X(2,5), X(8,14), X(3,9), X(3,5), X(6,7),
+  X(10,11), X(12,14), X(4,9), X(8,13), X(7,9), X(11,13), X(4,6), X(8,10), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(7,8), X(9,10)
+};
+S(16) = {
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(1,3),
+  X(5,7), X(9,11), X(13,15), X(2,4), X(6,8), X(10,12), X(14,16), X(1,5), X(9,13),
+  X(2,6), X(10,14), X(3,7), X(11,15), X(4,8), X(12,16), X(1,9), X(2,10), X(3,11),
+  X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(6,11), X(7,10), X(4,13),
+  X(14,15), X(8,12), X(2,3), X(5,9), X(2,5), X(8,14), X(3,9), X(12,15), X(3,5),
+  X(6,7), X(10,11), X(12,14), X(4,9), X(8,13), X(7,9), X(11,13), X(4,6), X(8,10),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(7,8), X(9,10)
+};
+S(18) = {
+  X(1,17), X(2,18), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(9,17), X(10,18), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(5,17), X(6,18), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(3,17), X(4,18), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(2,17), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17)
+};
+S(20) = {
+  X(1,17), X(2,18), X(3,19), X(4,20), X(1,9), X(2,10), X(3,11), X(4,12),
+  X(5,13), X(6,14), X(7,15), X(8,16), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(5,17),
+  X(6,18), X(7,19), X(8,20), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17),
+  X(14,18), X(15,19), X(16,20), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11),
+  X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(3,17), X(4,18), X(3,9),
+  X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(3,5), X(4,6), X(7,9), X(8,10),
+  X(11,13), X(12,14), X(15,17), X(16,18), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(2,17), X(4,19),
+  X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(2,5), X(4,7), X(6,9),
+  X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(2,3), X(4,5), X(6,7),
+  X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19)
+};
+S(22) = {
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18),
+  X(15,19), X(16,20), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(2,17), X(4,19), X(6,21),
+  X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21)
+};
+S(24) = {
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(9,17),
+  X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(1,5),
+  X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21),
+  X(18,22), X(19,23), X(20,24), X(5,17), X(6,18), X(7,19), X(8,20), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(1,3),
+  X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19),
+  X(18,20), X(21,23), X(22,24), X(3,17), X(4,18), X(7,21), X(8,22), X(3,9),
+  X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21),
+  X(16,23), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17),
+  X(16,19), X(18,21), X(20,23), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23)
+};
+S(26) = {
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(5,9), X(6,10),
+  X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26),
+  X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16),
+  X(17,19), X(18,20), X(21,23), X(22,24), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(3,5), X(4,6), X(7,9), X(8,10),
+  X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25)
+};
+S(28) = {
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(1,9), X(2,10), X(3,11), X(4,12),
+  X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16),
+  X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(3,17), X(4,18),
+  X(7,21), X(8,22), X(11,25), X(12,26), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19),
+  X(18,21), X(20,23), X(22,25), X(24,27), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27)
+};
+S(30) = {
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18),
+  X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29)
+};
+S(32) = {
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31)
+};
+S(34) = {
+  X(1,33), X(2,34), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(17,33), X(18,34), X(1,9), X(2,10), X(3,11), X(4,12),
+  X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28),
+  X(21,29), X(22,30), X(23,31), X(24,32), X(9,33), X(10,34), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(5,33), X(6,34), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(3,33), X(4,34), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(3,9), X(4,10),
+  X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26),
+  X(23,29), X(24,30), X(27,33), X(28,34), X(3,5), X(4,6), X(7,9), X(8,10),
+  X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26),
+  X(27,29), X(28,30), X(31,33), X(32,34), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(2,33), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(2,5), X(4,7), X(6,9), X(8,11),
+  X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27),
+  X(26,29), X(28,31), X(30,33), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33)
+};
+S(36) = {
+  X(1,33), X(2,34), X(3,35), X(4,36), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16),
+  X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32),
+  X(33,35), X(34,36), X(3,33), X(4,34), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(3,9), X(4,10),
+  X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26),
+  X(23,29), X(24,30), X(27,33), X(28,34), X(3,5), X(4,6), X(7,9), X(8,10),
+  X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26),
+  X(27,29), X(28,30), X(31,33), X(32,34), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(2,33), X(4,35),
+  X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31),
+  X(18,33), X(20,35), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19),
+  X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33),
+  X(34,35)
+};
+S(38) = {
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(1,17), X(2,18),
+  X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26),
+  X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(1,9), X(2,10), X(3,11), X(4,12),
+  X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28),
+  X(21,29), X(22,30), X(23,31), X(24,32), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22),
+  X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(5,33), X(6,34), X(7,35), X(8,36), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18),
+  X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34),
+  X(31,35), X(32,36), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(3,5), X(4,6), X(7,9), X(8,10),
+  X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26),
+  X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(2,33), X(4,35), X(6,37), X(2,17), X(4,19), X(6,21), X(8,23),
+  X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37)
+};
+S(40) = {
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(35,39), X(36,40), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34),
+  X(35,37), X(36,38), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27),
+  X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33),
+  X(34,35), X(36,37), X(38,39)
+};
+S(42) = {
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(1,9), X(2,10), X(3,11), X(4,12),
+  X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28),
+  X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(1,5), X(2,6),
+  X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22),
+  X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38),
+  X(35,39), X(36,40), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(5,9), X(6,10),
+  X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26),
+  X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42),
+  X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16),
+  X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32),
+  X(33,35), X(34,36), X(37,39), X(38,40), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38),
+  X(35,41), X(36,42), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41),
+  X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31),
+  X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41)
+};
+S(44) = {
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(29,37), X(30,38), X(31,39), X(32,40), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(37,41), X(38,42), X(39,43), X(40,44), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(3,9), X(4,10),
+  X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26),
+  X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34),
+  X(35,37), X(36,38), X(39,41), X(40,42), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31),
+  X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19),
+  X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35),
+  X(34,37), X(36,39), X(38,41), X(40,43), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43)
+};
+S(46) = {
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(1,17), X(2,18),
+  X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26),
+  X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(1,9), X(2,10), X(3,11), X(4,12),
+  X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28),
+  X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44),
+  X(37,45), X(38,46), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38),
+  X(15,39), X(16,40), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22),
+  X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38),
+  X(31,39), X(32,40), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14),
+  X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30),
+  X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(37,41), X(38,42), X(39,43), X(40,44), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41),
+  X(12,43), X(14,45), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27),
+  X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43),
+  X(30,45), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21),
+  X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37),
+  X(32,39), X(34,41), X(36,43), X(38,45), X(2,5), X(4,7), X(6,9), X(8,11),
+  X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27),
+  X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43),
+  X(42,45), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45)
+};
+S(48) = {
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(37,41), X(38,42), X(39,43), X(40,44), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(45,47), X(46,48), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34),
+  X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33),
+  X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47)
+};
+S(50) = {
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(33,49), X(34,50), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(1,9), X(2,10), X(3,11), X(4,12),
+  X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28),
+  X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44),
+  X(37,45), X(38,46), X(39,47), X(40,48), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(3,9), X(4,10),
+  X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26),
+  X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42),
+  X(39,45), X(40,46), X(43,49), X(44,50), X(3,5), X(4,6), X(7,9), X(8,10),
+  X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26),
+  X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42),
+  X(43,45), X(44,46), X(47,49), X(48,50), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(2,33), X(4,35), X(6,37),
+  X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(2,5), X(4,7), X(6,9), X(8,11),
+  X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27),
+  X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43),
+  X(42,45), X(44,47), X(46,49), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49)
+};
+S(52) = {
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52),
+  X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16),
+  X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32),
+  X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48),
+  X(49,51), X(50,52), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(3,9), X(4,10),
+  X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26),
+  X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42),
+  X(39,45), X(40,46), X(43,49), X(44,50), X(3,5), X(4,6), X(7,9), X(8,10),
+  X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26),
+  X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42),
+  X(43,45), X(44,46), X(47,49), X(48,50), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31),
+  X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47),
+  X(34,49), X(36,51), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19),
+  X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35),
+  X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33),
+  X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49),
+  X(50,51)
+};
+S(54) = {
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(1,17), X(2,18),
+  X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26),
+  X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50),
+  X(35,51), X(36,52), X(37,53), X(38,54), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(1,9), X(2,10), X(3,11), X(4,12),
+  X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28),
+  X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44),
+  X(37,45), X(38,46), X(39,47), X(40,48), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52),
+  X(29,53), X(30,54), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22),
+  X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38),
+  X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48),
+  X(49,53), X(50,54), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18),
+  X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34),
+  X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50),
+  X(47,51), X(48,52), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(3,5), X(4,6), X(7,9), X(8,10),
+  X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26),
+  X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42),
+  X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45),
+  X(16,47), X(18,49), X(20,51), X(22,53), X(2,17), X(4,19), X(6,21), X(8,23),
+  X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39),
+  X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53)
+};
+S(56) = {
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48),
+  X(49,53), X(50,54), X(51,55), X(52,56), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38),
+  X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34),
+  X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50),
+  X(51,53), X(52,54), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27),
+  X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43),
+  X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33),
+  X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49),
+  X(50,51), X(52,53), X(54,55)
+};
+S(58) = {
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54),
+  X(39,55), X(40,56), X(41,57), X(42,58), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(1,9), X(2,10), X(3,11), X(4,12),
+  X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28),
+  X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44),
+  X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(1,5), X(2,6),
+  X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22),
+  X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38),
+  X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54),
+  X(51,55), X(52,56), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(5,9), X(6,10),
+  X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26),
+  X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42),
+  X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58),
+  X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16),
+  X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32),
+  X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48),
+  X(49,51), X(50,52), X(53,55), X(54,56), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38),
+  X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54),
+  X(51,57), X(52,58), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41),
+  X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57),
+  X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31),
+  X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47),
+  X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45),
+  X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57)
+};
+S(60) = {
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52),
+  X(29,53), X(30,54), X(31,55), X(32,56), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52),
+  X(45,53), X(46,54), X(47,55), X(48,56), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52),
+  X(53,57), X(54,58), X(55,59), X(56,60), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56),
+  X(57,59), X(58,60), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(3,9), X(4,10),
+  X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26),
+  X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42),
+  X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34),
+  X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50),
+  X(51,53), X(52,54), X(55,57), X(56,58), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31),
+  X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47),
+  X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19),
+  X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35),
+  X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51),
+  X(50,53), X(52,55), X(54,57), X(56,59), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59)
+};
+S(62) = {
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(1,17), X(2,18),
+  X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26),
+  X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50),
+  X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58),
+  X(43,59), X(44,60), X(45,61), X(46,62), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(1,9), X(2,10), X(3,11), X(4,12),
+  X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28),
+  X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44),
+  X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60),
+  X(53,61), X(54,62), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38),
+  X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54),
+  X(31,55), X(32,56), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22),
+  X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38),
+  X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54),
+  X(47,55), X(48,56), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14),
+  X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30),
+  X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46),
+  X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52),
+  X(53,57), X(54,58), X(55,59), X(56,60), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56),
+  X(57,59), X(58,60), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50),
+  X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41),
+  X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57),
+  X(28,59), X(30,61), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27),
+  X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43),
+  X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59),
+  X(46,61), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21),
+  X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37),
+  X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53),
+  X(48,55), X(50,57), X(52,59), X(54,61), X(2,5), X(4,7), X(6,9), X(8,11),
+  X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27),
+  X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43),
+  X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59),
+  X(58,61), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61)
+};
+S(64) = {
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48),
+  X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52),
+  X(53,57), X(54,58), X(55,59), X(56,60), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56),
+  X(57,59), X(58,60), X(61,63), X(62,64), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(43,57), X(44,58), X(47,61), X(48,62), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34),
+  X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50),
+  X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(54,61), X(56,63), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33),
+  X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49),
+  X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63)
+};
+S(66) = {
+  X(1,65), X(2,66), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(33,65), X(34,66), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60),
+  X(45,61), X(46,62), X(47,63), X(48,64), X(17,65), X(18,66), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64),
+  X(9,65), X(10,66), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38),
+  X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54),
+  X(31,55), X(32,56), X(41,65), X(42,66), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52),
+  X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(1,5), X(2,6),
+  X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22),
+  X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38),
+  X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54),
+  X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(5,65), X(6,66),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(3,65), X(4,66), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(3,17), X(4,18),
+  X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34),
+  X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50),
+  X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38),
+  X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54),
+  X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(2,65),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65)
+};
+S(68) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(1,33), X(2,34), X(3,35), X(4,36),
+  X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44),
+  X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52),
+  X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60),
+  X(29,61), X(30,62), X(31,63), X(32,64), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(17,65), X(18,66), X(19,67), X(20,68), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52),
+  X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52),
+  X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68),
+  X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16),
+  X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32),
+  X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48),
+  X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64),
+  X(65,67), X(66,68), X(3,65), X(4,66), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(3,17), X(4,18),
+  X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34),
+  X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50),
+  X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38),
+  X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54),
+  X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(2,65), X(4,67), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(2,17), X(4,19), X(6,21), X(8,23),
+  X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39),
+  X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55),
+  X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(54,61), X(56,63), X(58,65), X(60,67), X(2,5), X(4,7), X(6,9), X(8,11),
+  X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27),
+  X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43),
+  X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59),
+  X(58,61), X(60,63), X(62,65), X(64,67), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67)
+};
+S(70) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(1,33), X(2,34),
+  X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42),
+  X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50),
+  X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58),
+  X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(33,65), X(34,66),
+  X(35,67), X(36,68), X(37,69), X(38,70), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60),
+  X(45,61), X(46,62), X(47,63), X(48,64), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52),
+  X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68),
+  X(61,69), X(62,70), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14),
+  X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30),
+  X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46),
+  X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62),
+  X(59,63), X(60,64), X(65,69), X(66,70), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52),
+  X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68),
+  X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16),
+  X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32),
+  X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48),
+  X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64),
+  X(65,67), X(66,68), X(3,65), X(4,66), X(7,69), X(8,70), X(3,33), X(4,34),
+  X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50),
+  X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66),
+  X(39,69), X(40,70), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(3,9), X(4,10),
+  X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26),
+  X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42),
+  X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58),
+  X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66), X(67,68), X(69,70), X(2,65), X(4,67), X(6,69), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29),
+  X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45),
+  X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61),
+  X(60,63), X(62,65), X(64,67), X(66,69), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69)
+};
+S(72) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48),
+  X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64),
+  X(65,69), X(66,70), X(67,71), X(68,72), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52),
+  X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68),
+  X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16),
+  X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32),
+  X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48),
+  X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64),
+  X(65,67), X(66,68), X(69,71), X(70,72), X(3,65), X(4,66), X(7,69), X(8,70),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38),
+  X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54),
+  X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34),
+  X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50),
+  X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66),
+  X(67,69), X(68,70), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(2,65), X(4,67),
+  X(6,69), X(8,71), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71)
+};
+S(74) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70),
+  X(39,71), X(40,72), X(41,73), X(42,74), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60),
+  X(45,61), X(46,62), X(47,63), X(48,64), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64),
+  X(65,73), X(66,74), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70),
+  X(15,71), X(16,72), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38),
+  X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54),
+  X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70),
+  X(47,71), X(48,72), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22),
+  X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38),
+  X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54),
+  X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70),
+  X(63,71), X(64,72), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14),
+  X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30),
+  X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46),
+  X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62),
+  X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(5,65), X(6,66),
+  X(7,67), X(8,68), X(13,73), X(14,74), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52),
+  X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68),
+  X(45,73), X(46,74), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52),
+  X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68),
+  X(69,73), X(70,74), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70),
+  X(43,73), X(44,74), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38),
+  X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54),
+  X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70),
+  X(67,73), X(68,74), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29),
+  X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45),
+  X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61),
+  X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73)
+};
+S(76) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(1,33), X(2,34), X(3,35), X(4,36),
+  X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44),
+  X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52),
+  X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60),
+  X(29,61), X(30,62), X(31,63), X(32,64), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72),
+  X(25,73), X(26,74), X(27,75), X(28,76), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68),
+  X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64),
+  X(65,73), X(66,74), X(67,75), X(68,76), X(9,65), X(10,66), X(11,67), X(12,68),
+  X(13,69), X(14,70), X(15,71), X(16,72), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52),
+  X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68),
+  X(45,69), X(46,70), X(47,71), X(48,72), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52),
+  X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68),
+  X(61,69), X(62,70), X(63,71), X(64,72), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52),
+  X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68),
+  X(69,73), X(70,74), X(71,75), X(72,76), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56),
+  X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72),
+  X(73,75), X(74,76), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(3,17), X(4,18),
+  X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34),
+  X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50),
+  X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66),
+  X(55,69), X(56,70), X(59,73), X(60,74), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70),
+  X(71,73), X(72,74), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(40,71), X(42,73), X(44,75), X(2,17), X(4,19), X(6,21), X(8,23),
+  X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39),
+  X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55),
+  X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71),
+  X(58,73), X(60,75), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(68,75), X(2,5), X(4,7), X(6,9), X(8,11),
+  X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27),
+  X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43),
+  X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59),
+  X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33),
+  X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49),
+  X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65),
+  X(66,67), X(68,69), X(70,71), X(72,73), X(74,75)
+};
+S(78) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(1,33), X(2,34),
+  X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42),
+  X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50),
+  X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58),
+  X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(33,65), X(34,66),
+  X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74),
+  X(43,75), X(44,76), X(45,77), X(46,78), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60),
+  X(45,61), X(46,62), X(47,63), X(48,64), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64),
+  X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(1,5), X(2,6),
+  X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22),
+  X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38),
+  X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54),
+  X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70),
+  X(67,71), X(68,72), X(73,77), X(74,78), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(13,73), X(14,74), X(15,75), X(16,76), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52),
+  X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68),
+  X(45,73), X(46,74), X(47,75), X(48,76), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16),
+  X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32),
+  X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48),
+  X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64),
+  X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(3,33), X(4,34),
+  X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50),
+  X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66),
+  X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(3,17), X(4,18),
+  X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34),
+  X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50),
+  X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66),
+  X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(3,9), X(4,10),
+  X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26),
+  X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42),
+  X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58),
+  X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74),
+  X(71,77), X(72,78), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16),
+  X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32),
+  X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48),
+  X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64),
+  X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(2,65),
+  X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77)
+};
+S(80) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72),
+  X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72),
+  X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64),
+  X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48),
+  X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64),
+  X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52),
+  X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68),
+  X(69,73), X(70,74), X(71,75), X(72,76), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56),
+  X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72),
+  X(73,75), X(74,76), X(77,79), X(78,80), X(3,65), X(4,66), X(7,69), X(8,70),
+  X(11,73), X(12,74), X(15,77), X(16,78), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70),
+  X(43,73), X(44,74), X(47,77), X(48,78), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70),
+  X(59,73), X(60,74), X(63,77), X(64,78), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34),
+  X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50),
+  X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66),
+  X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(2,65), X(4,67),
+  X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75),
+  X(70,77), X(72,79), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33),
+  X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49),
+  X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65),
+  X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79)
+};
+S(82) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70),
+  X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78),
+  X(47,79), X(48,80), X(49,81), X(50,82), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60),
+  X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22),
+  X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38),
+  X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54),
+  X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70),
+  X(63,71), X(64,72), X(73,81), X(74,82), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(73,77), X(74,78), X(75,79), X(76,80), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(5,33), X(6,34),
+  X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50),
+  X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66),
+  X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76),
+  X(69,81), X(70,82), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18),
+  X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34),
+  X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50),
+  X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66),
+  X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82),
+  X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16),
+  X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32),
+  X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48),
+  X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64),
+  X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74),
+  X(47,77), X(48,78), X(51,81), X(52,82), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70),
+  X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(3,9), X(4,10),
+  X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26),
+  X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42),
+  X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58),
+  X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74),
+  X(71,77), X(72,78), X(75,81), X(76,82), X(3,5), X(4,6), X(7,9), X(8,10),
+  X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26),
+  X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42),
+  X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58),
+  X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74),
+  X(75,77), X(76,78), X(79,81), X(80,82), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(2,65), X(4,67), X(6,69),
+  X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(2,17),
+  X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33),
+  X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49),
+  X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65),
+  X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81),
+  X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23),
+  X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39),
+  X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55),
+  X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71),
+  X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(2,5), X(4,7), X(6,9),
+  X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25),
+  X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41),
+  X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57),
+  X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73),
+  X(72,75), X(74,77), X(76,79), X(78,81), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81)
+};
+S(84) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(1,33), X(2,34), X(3,35), X(4,36),
+  X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44),
+  X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52),
+  X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60),
+  X(29,61), X(30,62), X(31,63), X(32,64), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76),
+  X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(65,81), X(66,82), X(67,83), X(68,84), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68),
+  X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76),
+  X(61,77), X(62,78), X(63,79), X(64,80), X(1,9), X(2,10), X(3,11), X(4,12),
+  X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28),
+  X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44),
+  X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60),
+  X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76),
+  X(69,77), X(70,78), X(71,79), X(72,80), X(9,65), X(10,66), X(11,67), X(12,68),
+  X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52),
+  X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68),
+  X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48),
+  X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64),
+  X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(21,81), X(22,82), X(23,83), X(24,84), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52),
+  X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68),
+  X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76),
+  X(69,81), X(70,82), X(71,83), X(72,84), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56),
+  X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72),
+  X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78),
+  X(51,81), X(52,82), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(63,77), X(64,78), X(67,81), X(68,82), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(2,65), X(4,67), X(6,69), X(8,71),
+  X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83),
+  X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31),
+  X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47),
+  X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63),
+  X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79),
+  X(66,81), X(68,83), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83),
+  X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19),
+  X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35),
+  X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51),
+  X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67),
+  X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33),
+  X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49),
+  X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65),
+  X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81),
+  X(82,83)
+};
+S(86) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(1,33), X(2,34),
+  X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42),
+  X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50),
+  X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58),
+  X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(33,65), X(34,66),
+  X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74),
+  X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82),
+  X(51,83), X(52,84), X(53,85), X(54,86), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60),
+  X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84),
+  X(69,85), X(70,86), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(63,79), X(64,80), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70),
+  X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(5,65), X(6,66),
+  X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82),
+  X(23,83), X(24,84), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18),
+  X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34),
+  X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50),
+  X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66),
+  X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82),
+  X(79,83), X(80,84), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(3,65), X(4,66), X(7,69), X(8,70),
+  X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78),
+  X(51,81), X(52,82), X(55,85), X(56,86), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70),
+  X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38),
+  X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54),
+  X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70),
+  X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34),
+  X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50),
+  X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66),
+  X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82),
+  X(83,85), X(84,86), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(2,65), X(4,67), X(6,69),
+  X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25),
+  X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41),
+  X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57),
+  X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73),
+  X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75),
+  X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(2,5), X(4,7), X(6,9),
+  X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25),
+  X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41),
+  X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57),
+  X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73),
+  X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85)
+};
+S(88) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88),
+  X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72),
+  X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72),
+  X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64),
+  X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72),
+  X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48),
+  X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64),
+  X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80),
+  X(81,85), X(82,86), X(83,87), X(84,88), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52),
+  X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68),
+  X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84),
+  X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16),
+  X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32),
+  X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48),
+  X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64),
+  X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80),
+  X(81,83), X(82,84), X(85,87), X(86,88), X(3,65), X(4,66), X(7,69), X(8,70),
+  X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78),
+  X(51,81), X(52,82), X(55,85), X(56,86), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70),
+  X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38),
+  X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54),
+  X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70),
+  X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34),
+  X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50),
+  X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66),
+  X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82),
+  X(83,85), X(84,86), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(2,65), X(4,67),
+  X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83),
+  X(22,85), X(24,87), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75),
+  X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83),
+  X(70,85), X(72,87), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83),
+  X(78,85), X(80,87), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87)
+};
+S(90) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70),
+  X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78),
+  X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86),
+  X(55,87), X(56,88), X(57,89), X(58,90), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60),
+  X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84),
+  X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72),
+  X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48),
+  X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64),
+  X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80),
+  X(81,85), X(82,86), X(83,87), X(84,88), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84),
+  X(29,89), X(30,90), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76),
+  X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(5,9), X(6,10),
+  X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26),
+  X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42),
+  X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58),
+  X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74),
+  X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90),
+  X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16),
+  X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32),
+  X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48),
+  X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64),
+  X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80),
+  X(81,83), X(82,84), X(85,87), X(86,88), X(3,65), X(4,66), X(7,69), X(8,70),
+  X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86),
+  X(27,89), X(28,90), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74),
+  X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(3,9), X(4,10),
+  X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26),
+  X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42),
+  X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58),
+  X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74),
+  X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34),
+  X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50),
+  X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66),
+  X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82),
+  X(83,85), X(84,86), X(87,89), X(88,90), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83),
+  X(54,85), X(56,87), X(58,89), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25),
+  X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41),
+  X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57),
+  X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73),
+  X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89),
+  X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23),
+  X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39),
+  X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55),
+  X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71),
+  X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87),
+  X(82,89), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17),
+  X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33),
+  X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49),
+  X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65),
+  X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81),
+  X(80,83), X(82,85), X(84,87), X(86,89), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89)
+};
+S(92) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(1,33), X(2,34), X(3,35), X(4,36),
+  X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44),
+  X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52),
+  X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60),
+  X(29,61), X(30,62), X(31,63), X(32,64), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76),
+  X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84),
+  X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88),
+  X(73,89), X(74,90), X(75,91), X(76,92), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68),
+  X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76),
+  X(61,77), X(62,78), X(63,79), X(64,80), X(1,9), X(2,10), X(3,11), X(4,12),
+  X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28),
+  X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44),
+  X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60),
+  X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76),
+  X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72),
+  X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48),
+  X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64),
+  X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80),
+  X(81,85), X(82,86), X(83,87), X(84,88), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84),
+  X(29,89), X(30,90), X(31,91), X(32,92), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52),
+  X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68),
+  X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84),
+  X(61,89), X(62,90), X(63,91), X(64,92), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16),
+  X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32),
+  X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48),
+  X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64),
+  X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80),
+  X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70),
+  X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86),
+  X(59,89), X(60,90), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38),
+  X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54),
+  X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70),
+  X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86),
+  X(83,89), X(84,90), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(2,65), X(4,67), X(6,69), X(8,71),
+  X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87),
+  X(26,89), X(28,91), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75),
+  X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91),
+  X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31),
+  X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47),
+  X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63),
+  X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79),
+  X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75),
+  X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91),
+  X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19),
+  X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35),
+  X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51),
+  X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67),
+  X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83),
+  X(82,85), X(84,87), X(86,89), X(88,91), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91)
+};
+S(94) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(1,33), X(2,34),
+  X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42),
+  X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50),
+  X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58),
+  X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(33,65), X(34,66),
+  X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74),
+  X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82),
+  X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90),
+  X(59,91), X(60,92), X(61,93), X(62,94), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60),
+  X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84),
+  X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92),
+  X(77,93), X(78,94), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(63,79), X(64,80), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72),
+  X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48),
+  X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64),
+  X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80),
+  X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(5,65), X(6,66),
+  X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82),
+  X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(5,33), X(6,34),
+  X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50),
+  X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66),
+  X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82),
+  X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(5,9), X(6,10),
+  X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26),
+  X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42),
+  X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58),
+  X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74),
+  X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90),
+  X(87,91), X(88,92), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78),
+  X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38),
+  X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54),
+  X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70),
+  X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86),
+  X(83,89), X(84,90), X(87,93), X(88,94), X(3,5), X(4,6), X(7,9), X(8,10),
+  X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26),
+  X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42),
+  X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58),
+  X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74),
+  X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90),
+  X(91,93), X(92,94), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(2,17),
+  X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33),
+  X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49),
+  X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65),
+  X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81),
+  X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75),
+  X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91),
+  X(86,93), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17),
+  X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33),
+  X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49),
+  X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65),
+  X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81),
+  X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93)
+};
+S(96) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88),
+  X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96),
+  X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72),
+  X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72),
+  X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64),
+  X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80),
+  X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72),
+  X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16),
+  X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32),
+  X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48),
+  X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64),
+  X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80),
+  X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76),
+  X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92),
+  X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20),
+  X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36),
+  X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52),
+  X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68),
+  X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84),
+  X(85,89), X(86,90), X(87,91), X(88,92), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56),
+  X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72),
+  X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88),
+  X(89,91), X(90,92), X(93,95), X(94,96), X(3,65), X(4,66), X(7,69), X(8,70),
+  X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86),
+  X(27,89), X(28,90), X(31,93), X(32,94), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70),
+  X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86),
+  X(59,89), X(60,90), X(63,93), X(64,94), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70),
+  X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86),
+  X(75,89), X(76,90), X(79,93), X(80,94), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34),
+  X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50),
+  X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66),
+  X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82),
+  X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(2,65), X(4,67),
+  X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83),
+  X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83),
+  X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83),
+  X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75),
+  X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91),
+  X(86,93), X(88,95), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33),
+  X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49),
+  X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65),
+  X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81),
+  X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95)
+};
+S(98) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(65,97), X(66,98), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76),
+  X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84),
+  X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92),
+  X(61,93), X(62,94), X(63,95), X(64,96), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60),
+  X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84),
+  X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92),
+  X(77,93), X(78,94), X(79,95), X(80,96), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64),
+  X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80),
+  X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72),
+  X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88),
+  X(41,97), X(42,98), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38),
+  X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54),
+  X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70),
+  X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86),
+  X(63,87), X(64,88), X(73,97), X(74,98), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52),
+  X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68),
+  X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84),
+  X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(1,5), X(2,6),
+  X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22),
+  X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38),
+  X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54),
+  X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70),
+  X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86),
+  X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96), X(5,65), X(6,66),
+  X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82),
+  X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92),
+  X(69,97), X(70,98), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74),
+  X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90),
+  X(31,93), X(32,94), X(35,97), X(36,98), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70),
+  X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86),
+  X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98), X(3,17), X(4,18),
+  X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34),
+  X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50),
+  X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66),
+  X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82),
+  X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38),
+  X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54),
+  X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70),
+  X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86),
+  X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70),
+  X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86),
+  X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(2,65),
+  X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81),
+  X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95),
+  X(66,97), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83),
+  X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97)
+};
+S(100) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(1,33), X(2,34), X(3,35), X(4,36),
+  X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44),
+  X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52),
+  X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60),
+  X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70),
+  X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78),
+  X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86),
+  X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94),
+  X(63,95), X(64,96), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54),
+  X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62),
+  X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86),
+  X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94),
+  X(79,95), X(80,96), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100), X(17,33),
+  X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41),
+  X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65),
+  X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73),
+  X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97),
+  X(82,98), X(83,99), X(84,100), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13),
+  X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29),
+  X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45),
+  X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61),
+  X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77),
+  X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93),
+  X(86,94), X(87,95), X(88,96), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100), X(9,33),
+  X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49),
+  X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65),
+  X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81),
+  X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97),
+  X(74,98), X(75,99), X(76,100), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21),
+  X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37),
+  X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53),
+  X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69),
+  X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85),
+  X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100), X(1,5),
+  X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21),
+  X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37),
+  X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53),
+  X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69),
+  X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80), X(81,85),
+  X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96), X(5,65),
+  X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81),
+  X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97),
+  X(38,98), X(39,99), X(40,100), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41),
+  X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57),
+  X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73),
+  X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89),
+  X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(5,17),
+  X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33),
+  X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49),
+  X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65),
+  X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81),
+  X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97),
+  X(86,98), X(87,99), X(88,100), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17),
+  X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33),
+  X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49),
+  X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65),
+  X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81),
+  X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97),
+  X(94,98), X(95,99), X(96,100), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11),
+  X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27),
+  X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43),
+  X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59),
+  X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75),
+  X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91),
+  X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(3,65), X(4,66), X(7,69),
+  X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85),
+  X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(3,33),
+  X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49),
+  X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65),
+  X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81),
+  X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97),
+  X(68,98), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17),
+  X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33),
+  X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49),
+  X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65),
+  X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81),
+  X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97),
+  X(92,98), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17),
+  X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33),
+  X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49),
+  X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65),
+  X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81),
+  X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97),
+  X(96,98), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73),
+  X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89),
+  X(28,91), X(30,93), X(32,95), X(34,97), X(36,99), X(2,33), X(4,35), X(6,37),
+  X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53),
+  X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69),
+  X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85),
+  X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(2,17),
+  X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33),
+  X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49),
+  X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65),
+  X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81),
+  X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97),
+  X(84,99), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21),
+  X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37),
+  X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53),
+  X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69),
+  X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85),
+  X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99)
+};
+S(102) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(1,33),
+  X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41),
+  X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49),
+  X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57),
+  X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97),
+  X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(33,65), X(34,66),
+  X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74),
+  X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82),
+  X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90),
+  X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(1,17), X(2,18),
+  X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26),
+  X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50),
+  X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58),
+  X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82),
+  X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90),
+  X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(17,33), X(18,34), X(19,35),
+  X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43),
+  X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67),
+  X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75),
+  X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13),
+  X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29),
+  X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45),
+  X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61),
+  X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77),
+  X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93),
+  X(86,94), X(87,95), X(88,96), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37),
+  X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53),
+  X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69),
+  X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85),
+  X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100),
+  X(77,101), X(78,102), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21),
+  X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37),
+  X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53),
+  X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69),
+  X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85),
+  X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100),
+  X(93,101), X(94,102), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14),
+  X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30),
+  X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46),
+  X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62),
+  X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78),
+  X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94),
+  X(91,95), X(92,96), X(97,101), X(98,102), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84),
+  X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99),
+  X(40,100), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43),
+  X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59),
+  X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75),
+  X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91),
+  X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(5,17), X(6,18), X(7,19),
+  X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35),
+  X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51),
+  X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67),
+  X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83),
+  X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19),
+  X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35),
+  X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51),
+  X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67),
+  X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83),
+  X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99),
+  X(96,100), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15),
+  X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31),
+  X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47),
+  X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63),
+  X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79),
+  X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95),
+  X(94,96), X(97,99), X(98,100), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73),
+  X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89),
+  X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78),
+  X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94),
+  X(67,97), X(68,98), X(71,101), X(72,102), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70),
+  X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86),
+  X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98), X(87,101),
+  X(88,102), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21),
+  X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37),
+  X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53),
+  X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69),
+  X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85),
+  X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94),
+  X(95,97), X(96,98), X(99,101), X(100,102), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79),
+  X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95),
+  X(34,97), X(36,99), X(38,101), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41),
+  X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57),
+  X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73),
+  X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89),
+  X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83),
+  X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21),
+  X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37),
+  X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53),
+  X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69),
+  X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85),
+  X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17),
+  X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33),
+  X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49),
+  X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65),
+  X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81),
+  X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97),
+  X(96,99), X(98,101), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101)
+};
+S(104) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39),
+  X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47),
+  X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55),
+  X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63),
+  X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102),
+  X(71,103), X(72,104), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69),
+  X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77),
+  X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85),
+  X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93),
+  X(62,94), X(63,95), X(64,96), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21),
+  X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29),
+  X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53),
+  X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61),
+  X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85),
+  X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93),
+  X(78,94), X(79,95), X(80,96), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69),
+  X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77),
+  X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100),
+  X(53,101), X(54,102), X(55,103), X(56,104), X(17,33), X(18,34), X(19,35),
+  X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43),
+  X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67),
+  X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75),
+  X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98),
+  X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(9,33),
+  X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49),
+  X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65),
+  X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81),
+  X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97),
+  X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(5,65), X(6,66),
+  X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82),
+  X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98),
+  X(39,99), X(40,100), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18),
+  X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34),
+  X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50),
+  X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66),
+  X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82),
+  X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98),
+  X(95,99), X(96,100), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(3,65),
+  X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81),
+  X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97),
+  X(36,98), X(39,101), X(40,102), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41),
+  X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57),
+  X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73),
+  X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89),
+  X(60,90), X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(3,5), X(4,6), X(7,9), X(8,10),
+  X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26),
+  X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42),
+  X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58),
+  X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74),
+  X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90),
+  X(91,93), X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(2,65), X(4,67), X(6,69), X(8,71),
+  X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87),
+  X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99), X(38,101),
+  X(40,103), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45),
+  X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61),
+  X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77),
+  X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93),
+  X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83),
+  X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(94,97), X(96,99), X(98,101), X(100,103), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103)
+};
+S(106) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37),
+  X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45),
+  X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53),
+  X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61),
+  X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100),
+  X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(33,65),
+  X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73),
+  X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81),
+  X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89),
+  X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(1,17),
+  X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25),
+  X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49),
+  X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57),
+  X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81),
+  X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89),
+  X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(17,65),
+  X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73),
+  X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97),
+  X(50,98), X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104),
+  X(57,105), X(58,106), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37),
+  X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45),
+  X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69),
+  X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77),
+  X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100),
+  X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(1,9),
+  X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25),
+  X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41),
+  X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57),
+  X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73),
+  X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89),
+  X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(97,105), X(98,106), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(9,33), X(10,34), X(11,35),
+  X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51),
+  X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67),
+  X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83),
+  X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(1,5),
+  X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21),
+  X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37),
+  X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53),
+  X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69),
+  X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80), X(81,85),
+  X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96),
+  X(97,101), X(98,102), X(99,103), X(100,104), X(5,65), X(6,66), X(7,67),
+  X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83),
+  X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99),
+  X(40,100), X(45,105), X(46,106), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41),
+  X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57),
+  X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73),
+  X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89),
+  X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100),
+  X(77,105), X(78,106), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105),
+  X(94,106), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19),
+  X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35),
+  X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51),
+  X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67),
+  X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83),
+  X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99),
+  X(96,100), X(101,105), X(102,106), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11),
+  X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27),
+  X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43),
+  X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59),
+  X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75),
+  X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91),
+  X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94),
+  X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(3,33),
+  X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49),
+  X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65),
+  X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81),
+  X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97),
+  X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(3,17), X(4,18),
+  X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34),
+  X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50),
+  X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66),
+  X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82),
+  X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75),
+  X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91),
+  X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95),
+  X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17),
+  X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33),
+  X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49),
+  X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65),
+  X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81),
+  X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97),
+  X(92,99), X(94,101), X(96,103), X(98,105), X(2,5), X(4,7), X(6,9), X(8,11),
+  X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27),
+  X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43),
+  X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59),
+  X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75),
+  X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91),
+  X(90,93), X(92,95), X(94,97), X(96,99), X(98,101), X(100,103), X(102,105),
+  X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17),
+  X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33),
+  X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49),
+  X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65),
+  X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81),
+  X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97),
+  X(98,99), X(100,101), X(102,103), X(104,105)
+};
+S(108) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(1,33), X(2,34),
+  X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42),
+  X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50),
+  X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58),
+  X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98),
+  X(67,99), X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105),
+  X(74,106), X(75,107), X(76,108), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76),
+  X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84),
+  X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92),
+  X(61,93), X(62,94), X(63,95), X(64,96), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60),
+  X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84),
+  X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92),
+  X(77,93), X(78,94), X(79,95), X(80,96), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37),
+  X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45),
+  X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69),
+  X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77),
+  X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100),
+  X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107),
+  X(92,108), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15),
+  X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31),
+  X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47),
+  X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63),
+  X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79),
+  X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95),
+  X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98),
+  X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(9,33),
+  X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49),
+  X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65),
+  X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81),
+  X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97),
+  X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(5,65), X(6,66),
+  X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82),
+  X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98),
+  X(39,99), X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(5,33),
+  X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49),
+  X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65),
+  X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81),
+  X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97),
+  X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107), X(80,108),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76),
+  X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92),
+  X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106), X(95,107),
+  X(96,108), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19),
+  X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35),
+  X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51),
+  X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67),
+  X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83),
+  X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99),
+  X(96,100), X(101,105), X(102,106), X(103,107), X(104,108), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70),
+  X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86),
+  X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98), X(71,101),
+  X(72,102), X(75,105), X(76,106), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25),
+  X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41),
+  X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57),
+  X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73),
+  X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89),
+  X(76,90), X(79,93), X(80,94), X(83,97), X(84,98), X(87,101), X(88,102),
+  X(91,105), X(92,106), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50),
+  X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66),
+  X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82),
+  X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(3,5), X(4,6), X(7,9), X(8,10),
+  X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26),
+  X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42),
+  X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58),
+  X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74),
+  X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90),
+  X(91,93), X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(103,105),
+  X(104,106), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79),
+  X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95),
+  X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(2,33),
+  X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49),
+  X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65),
+  X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81),
+  X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97),
+  X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83),
+  X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107)
+};
+S(110) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103),
+  X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88),
+  X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96),
+  X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72),
+  X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80),
+  X(49,97), X(50,98), X(51,99), X(52,100), X(53,101), X(54,102), X(55,103),
+  X(56,104), X(57,105), X(58,106), X(59,107), X(60,108), X(61,109), X(62,110),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72),
+  X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80),
+  X(81,97), X(82,98), X(83,99), X(84,100), X(85,101), X(86,102), X(87,103),
+  X(88,104), X(89,105), X(90,106), X(91,107), X(92,108), X(93,109), X(94,110),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64),
+  X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80),
+  X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(9,65),
+  X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81),
+  X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97),
+  X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88),
+  X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103),
+  X(80,104), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23),
+  X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39),
+  X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55),
+  X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71),
+  X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87),
+  X(80,88), X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102),
+  X(95,103), X(96,104), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14),
+  X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30),
+  X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46),
+  X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62),
+  X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78),
+  X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94),
+  X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109),
+  X(106,110), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105),
+  X(78,106), X(79,107), X(80,108), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25),
+  X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41),
+  X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57),
+  X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73),
+  X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89),
+  X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100),
+  X(93,105), X(94,106), X(95,107), X(96,108), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15),
+  X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31),
+  X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47),
+  X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63),
+  X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79),
+  X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95),
+  X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107), X(106,108),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94),
+  X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109),
+  X(48,110), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90),
+  X(79,93), X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105),
+  X(92,106), X(95,109), X(96,110), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17),
+  X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33),
+  X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49),
+  X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65),
+  X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81),
+  X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97),
+  X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18),
+  X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34),
+  X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50),
+  X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66),
+  X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82),
+  X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110), X(2,65),
+  X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81),
+  X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97),
+  X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(2,33),
+  X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49),
+  X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65),
+  X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81),
+  X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97),
+  X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(2,17),
+  X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33),
+  X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49),
+  X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65),
+  X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81),
+  X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97),
+  X(84,99), X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57),
+  X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73),
+  X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89),
+  X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103),
+  X(98,105), X(100,107), X(102,109), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29),
+  X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45),
+  X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61),
+  X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77),
+  X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93),
+  X(92,95), X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107),
+  X(106,109), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109)
+};
+S(112) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101),
+  X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108),
+  X(77,109), X(78,110), X(79,111), X(80,112), X(33,65), X(34,66), X(35,67),
+  X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75),
+  X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83),
+  X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91),
+  X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(17,65), X(18,66), X(19,67),
+  X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75),
+  X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(17,33),
+  X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41),
+  X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65),
+  X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73),
+  X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97),
+  X(82,98), X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104),
+  X(89,105), X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111),
+  X(96,112), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15),
+  X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31),
+  X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47),
+  X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63),
+  X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79),
+  X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95),
+  X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(9,33), X(10,34), X(11,35),
+  X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51),
+  X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67),
+  X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83),
+  X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(1,5),
+  X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21),
+  X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37),
+  X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53),
+  X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69),
+  X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80), X(81,85),
+  X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96),
+  X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74),
+  X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90),
+  X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105),
+  X(46,106), X(47,107), X(48,108), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41),
+  X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57),
+  X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73),
+  X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89),
+  X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100),
+  X(77,105), X(78,106), X(79,107), X(80,108), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(5,9), X(6,10),
+  X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26),
+  X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42),
+  X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58),
+  X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74),
+  X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90),
+  X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105),
+  X(102,106), X(103,107), X(104,108), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11),
+  X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27),
+  X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43),
+  X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59),
+  X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75),
+  X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91),
+  X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104),
+  X(105,107), X(106,108), X(109,111), X(110,112), X(3,65), X(4,66), X(7,69),
+  X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85),
+  X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(3,33),
+  X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49),
+  X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65),
+  X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81),
+  X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97),
+  X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21),
+  X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37),
+  X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53),
+  X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69),
+  X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85),
+  X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107),
+  X(46,109), X(48,111), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75),
+  X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91),
+  X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105),
+  X(76,107), X(78,109), X(80,111), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25),
+  X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41),
+  X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57),
+  X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73),
+  X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89),
+  X(76,91), X(78,93), X(80,95), X(82,97), X(84,99), X(86,101), X(88,103),
+  X(90,105), X(92,107), X(94,109), X(96,111), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17),
+  X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33),
+  X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49),
+  X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65),
+  X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81),
+  X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97),
+  X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111)
+};
+S(114) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(1,33), X(2,34), X(3,35), X(4,36),
+  X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44),
+  X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52),
+  X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60),
+  X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70),
+  X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78),
+  X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86),
+  X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94),
+  X(63,95), X(64,96), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54),
+  X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62),
+  X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86),
+  X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94),
+  X(79,95), X(80,96), X(97,113), X(98,114), X(17,65), X(18,66), X(19,67),
+  X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75),
+  X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(17,33),
+  X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41),
+  X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65),
+  X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73),
+  X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97),
+  X(82,98), X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104),
+  X(89,105), X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111),
+  X(96,112), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15),
+  X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31),
+  X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47),
+  X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63),
+  X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79),
+  X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95),
+  X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(9,33),
+  X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49),
+  X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65),
+  X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81),
+  X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97),
+  X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104),
+  X(89,113), X(90,114), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21),
+  X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37),
+  X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53),
+  X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69),
+  X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85),
+  X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100),
+  X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(1,5),
+  X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21),
+  X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37),
+  X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53),
+  X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69),
+  X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80), X(81,85),
+  X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96),
+  X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74),
+  X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90),
+  X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105),
+  X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(5,33), X(6,34),
+  X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50),
+  X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66),
+  X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82),
+  X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98),
+  X(71,99), X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113),
+  X(86,114), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27),
+  X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43),
+  X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59),
+  X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75),
+  X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91),
+  X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106),
+  X(95,107), X(96,108), X(101,113), X(102,114), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27),
+  X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43),
+  X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59),
+  X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75),
+  X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91),
+  X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106),
+  X(103,107), X(104,108), X(109,113), X(110,114), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56),
+  X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72),
+  X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88),
+  X(89,91), X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(101,103),
+  X(102,104), X(105,107), X(106,108), X(109,111), X(110,112), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(83,113), X(84,114), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70),
+  X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86),
+  X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98), X(87,101),
+  X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113), X(100,114),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38),
+  X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54),
+  X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70),
+  X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86),
+  X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98), X(95,101),
+  X(96,102), X(99,105), X(100,106), X(103,109), X(104,110), X(107,113),
+  X(108,114), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17),
+  X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33),
+  X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49),
+  X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65),
+  X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81),
+  X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97),
+  X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(2,65), X(4,67),
+  X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83),
+  X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99),
+  X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95),
+  X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109),
+  X(80,111), X(82,113), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27),
+  X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43),
+  X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59),
+  X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75),
+  X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91),
+  X(78,93), X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105),
+  X(92,107), X(94,109), X(96,111), X(98,113), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113)
+};
+S(116) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(1,33),
+  X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41),
+  X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49),
+  X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57),
+  X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97),
+  X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103), X(72,104),
+  X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110), X(79,111),
+  X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(33,65), X(34,66),
+  X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74),
+  X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82),
+  X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90),
+  X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(1,17), X(2,18),
+  X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26),
+  X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50),
+  X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58),
+  X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82),
+  X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90),
+  X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113),
+  X(98,114), X(99,115), X(100,116), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(17,33),
+  X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41),
+  X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65),
+  X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73),
+  X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97),
+  X(82,98), X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104),
+  X(89,105), X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111),
+  X(96,112), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15),
+  X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31),
+  X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47),
+  X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63),
+  X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79),
+  X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95),
+  X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115),
+  X(60,116), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39),
+  X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55),
+  X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71),
+  X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87),
+  X(64,88), X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102),
+  X(79,103), X(80,104), X(89,113), X(90,114), X(91,115), X(92,116), X(9,17),
+  X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33),
+  X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49),
+  X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65),
+  X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81),
+  X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97),
+  X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104),
+  X(105,113), X(106,114), X(107,115), X(108,116), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88),
+  X(89,93), X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103),
+  X(100,104), X(105,109), X(106,110), X(107,111), X(108,112), X(5,65), X(6,66),
+  X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82),
+  X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98),
+  X(39,99), X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113),
+  X(54,114), X(55,115), X(56,116), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41),
+  X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57),
+  X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73),
+  X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89),
+  X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100),
+  X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115),
+  X(88,116), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27),
+  X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43),
+  X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59),
+  X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75),
+  X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91),
+  X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106),
+  X(95,107), X(96,108), X(101,113), X(102,114), X(103,115), X(104,116), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25),
+  X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41),
+  X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57),
+  X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73),
+  X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89),
+  X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100),
+  X(101,105), X(102,106), X(103,107), X(104,108), X(109,113), X(110,114),
+  X(111,115), X(112,116), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(83,113), X(84,114), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70),
+  X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86),
+  X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98), X(87,101),
+  X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113), X(100,114),
+  X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22),
+  X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38),
+  X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54),
+  X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70),
+  X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86),
+  X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98), X(95,101),
+  X(96,102), X(99,105), X(100,106), X(103,109), X(104,110), X(107,113),
+  X(108,114), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17),
+  X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33),
+  X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49),
+  X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65),
+  X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81),
+  X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97),
+  X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79),
+  X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95),
+  X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109),
+  X(48,111), X(50,113), X(52,115), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41),
+  X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57),
+  X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73),
+  X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89),
+  X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103),
+  X(74,105), X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(2,17),
+  X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33),
+  X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49),
+  X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65),
+  X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81),
+  X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97),
+  X(84,99), X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111),
+  X(98,113), X(100,115), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83),
+  X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115)
+};
+S(118) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39),
+  X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47),
+  X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55),
+  X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63),
+  X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102),
+  X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109),
+  X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116),
+  X(85,117), X(86,118), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69),
+  X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77),
+  X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85),
+  X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93),
+  X(62,94), X(63,95), X(64,96), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21),
+  X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29),
+  X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53),
+  X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61),
+  X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85),
+  X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93),
+  X(78,94), X(79,95), X(80,96), X(97,113), X(98,114), X(99,115), X(100,116),
+  X(101,117), X(102,118), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69),
+  X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77),
+  X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100),
+  X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107),
+  X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64),
+  X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80),
+  X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115),
+  X(60,116), X(61,117), X(62,118), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52),
+  X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68),
+  X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84),
+  X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(9,17), X(10,18), X(11,19),
+  X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35),
+  X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51),
+  X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67),
+  X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83),
+  X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88),
+  X(89,93), X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103),
+  X(100,104), X(105,109), X(106,110), X(107,111), X(108,112), X(113,117),
+  X(114,118), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(5,33),
+  X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49),
+  X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65),
+  X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81),
+  X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97),
+  X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107), X(80,108),
+  X(85,113), X(86,114), X(87,115), X(88,116), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18),
+  X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34),
+  X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50),
+  X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66),
+  X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82),
+  X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98),
+  X(95,99), X(96,100), X(101,105), X(102,106), X(103,107), X(104,108),
+  X(109,113), X(110,114), X(111,115), X(112,116), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56),
+  X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72),
+  X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88),
+  X(89,91), X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(101,103),
+  X(102,104), X(105,107), X(106,108), X(109,111), X(110,112), X(113,115),
+  X(114,116), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77),
+  X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93),
+  X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106),
+  X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(3,33),
+  X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49),
+  X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65),
+  X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81),
+  X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97),
+  X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110),
+  X(83,113), X(84,114), X(87,117), X(88,118), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70),
+  X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86),
+  X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98), X(87,101),
+  X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113), X(100,114),
+  X(103,117), X(104,118), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50),
+  X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66),
+  X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82),
+  X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(3,5), X(4,6), X(7,9),
+  X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25),
+  X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41),
+  X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57),
+  X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73),
+  X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89),
+  X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101), X(100,102),
+  X(103,105), X(104,106), X(107,109), X(108,110), X(111,113), X(112,114),
+  X(115,117), X(116,118), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79),
+  X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95),
+  X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109),
+  X(48,111), X(50,113), X(52,115), X(54,117), X(2,33), X(4,35), X(6,37), X(8,39),
+  X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55),
+  X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71),
+  X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87),
+  X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101),
+  X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113), X(84,115),
+  X(86,117), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75),
+  X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91),
+  X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105),
+  X(100,107), X(102,109), X(104,111), X(106,113), X(108,115), X(110,117), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117)
+};
+S(120) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(55,119), X(56,120), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37),
+  X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45),
+  X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53),
+  X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61),
+  X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100),
+  X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107),
+  X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114),
+  X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(33,65),
+  X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73),
+  X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81),
+  X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89),
+  X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(1,17),
+  X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25),
+  X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49),
+  X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57),
+  X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81),
+  X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89),
+  X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96),
+  X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69),
+  X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77),
+  X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100),
+  X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107),
+  X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16),
+  X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32),
+  X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48),
+  X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64),
+  X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80),
+  X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115),
+  X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(105,113), X(106,114), X(107,115), X(108,116), X(109,117),
+  X(110,118), X(111,119), X(112,120), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74),
+  X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90),
+  X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105),
+  X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92),
+  X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107),
+  X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41),
+  X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57),
+  X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73),
+  X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89),
+  X(60,90), X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102),
+  X(75,105), X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117),
+  X(88,118), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(3,9),
+  X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25),
+  X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41),
+  X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57),
+  X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73),
+  X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89),
+  X(84,90), X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102),
+  X(99,105), X(100,106), X(103,109), X(104,110), X(107,113), X(108,114),
+  X(111,117), X(112,118), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94),
+  X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(115,117), X(116,118), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(2,65), X(4,67),
+  X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83),
+  X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99),
+  X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113),
+  X(52,115), X(54,117), X(56,119), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41),
+  X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57),
+  X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73),
+  X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89),
+  X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103),
+  X(74,105), X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117),
+  X(88,119), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57),
+  X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73),
+  X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89),
+  X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103),
+  X(98,105), X(100,107), X(102,109), X(104,111), X(106,113), X(108,115),
+  X(110,117), X(112,119), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119)
+};
+S(122) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(1,33), X(2,34),
+  X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42),
+  X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50),
+  X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58),
+  X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98),
+  X(67,99), X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105),
+  X(74,106), X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112),
+  X(81,113), X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119),
+  X(88,120), X(89,121), X(90,122), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76),
+  X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84),
+  X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92),
+  X(61,93), X(62,94), X(63,95), X(64,96), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60),
+  X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84),
+  X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92),
+  X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114), X(99,115),
+  X(100,116), X(101,117), X(102,118), X(103,119), X(104,120), X(105,121),
+  X(106,122), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100), X(53,101),
+  X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107), X(60,108),
+  X(61,109), X(62,110), X(63,111), X(64,112), X(17,33), X(18,34), X(19,35),
+  X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43),
+  X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67),
+  X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75),
+  X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(1,9),
+  X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25),
+  X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41),
+  X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57),
+  X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73),
+  X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89),
+  X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(9,65), X(10,66), X(11,67),
+  X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83),
+  X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99),
+  X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114),
+  X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(9,33),
+  X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49),
+  X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65),
+  X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81),
+  X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97),
+  X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104),
+  X(89,113), X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119),
+  X(96,120), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23),
+  X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39),
+  X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55),
+  X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71),
+  X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87),
+  X(80,88), X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102),
+  X(95,103), X(96,104), X(105,113), X(106,114), X(107,115), X(108,116),
+  X(109,117), X(110,118), X(111,119), X(112,120), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88),
+  X(89,93), X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103),
+  X(100,104), X(105,109), X(106,110), X(107,111), X(108,112), X(113,117),
+  X(114,118), X(115,119), X(116,120), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84),
+  X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99),
+  X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114),
+  X(55,115), X(56,116), X(61,121), X(62,122), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52),
+  X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68),
+  X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84),
+  X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27),
+  X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43),
+  X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59),
+  X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75),
+  X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91),
+  X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106),
+  X(103,107), X(104,108), X(109,113), X(110,114), X(111,115), X(112,116),
+  X(117,121), X(118,122), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77),
+  X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93),
+  X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106),
+  X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121),
+  X(60,122), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121),
+  X(92,122), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50),
+  X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66),
+  X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82),
+  X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79),
+  X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95),
+  X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109),
+  X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(2,33),
+  X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49),
+  X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65),
+  X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81),
+  X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97),
+  X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111),
+  X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83),
+  X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45),
+  X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61),
+  X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77),
+  X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93),
+  X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107),
+  X(102,109), X(104,111), X(106,113), X(108,115), X(110,117), X(112,119),
+  X(114,121), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17),
+  X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33),
+  X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49),
+  X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65),
+  X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81),
+  X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97),
+  X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121)
+};
+S(124) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103),
+  X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110),
+  X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117),
+  X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88),
+  X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96),
+  X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72),
+  X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80),
+  X(49,97), X(50,98), X(51,99), X(52,100), X(53,101), X(54,102), X(55,103),
+  X(56,104), X(57,105), X(58,106), X(59,107), X(60,108), X(61,109), X(62,110),
+  X(63,111), X(64,112), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37),
+  X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45),
+  X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69),
+  X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77),
+  X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100),
+  X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107),
+  X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98),
+  X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113),
+  X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88),
+  X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103),
+  X(80,104), X(89,113), X(90,114), X(91,115), X(92,116), X(93,117), X(94,118),
+  X(95,119), X(96,120), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21),
+  X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37),
+  X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53),
+  X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69),
+  X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85),
+  X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100),
+  X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(1,5), X(2,6),
+  X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22),
+  X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38),
+  X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54),
+  X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70),
+  X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86),
+  X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96), X(97,101),
+  X(98,102), X(99,103), X(100,104), X(105,109), X(106,110), X(107,111),
+  X(108,112), X(113,117), X(114,118), X(115,119), X(116,120), X(5,65), X(6,66),
+  X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82),
+  X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98),
+  X(39,99), X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113),
+  X(54,114), X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92),
+  X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107),
+  X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121), X(94,122),
+  X(95,123), X(96,124), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105),
+  X(94,106), X(95,107), X(96,108), X(101,113), X(102,114), X(103,115),
+  X(104,116), X(109,121), X(110,122), X(111,123), X(112,124), X(5,9), X(6,10),
+  X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26),
+  X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42),
+  X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58),
+  X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74),
+  X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90),
+  X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105),
+  X(102,106), X(103,107), X(104,108), X(109,113), X(110,114), X(111,115),
+  X(112,116), X(117,121), X(118,122), X(119,123), X(120,124), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77),
+  X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93),
+  X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106),
+  X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121),
+  X(60,122), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121),
+  X(92,122), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50),
+  X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66),
+  X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82),
+  X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107),
+  X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121),
+  X(60,123), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45),
+  X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61),
+  X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77),
+  X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93),
+  X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107),
+  X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121),
+  X(92,123), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83),
+  X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123)
+};
+S(126) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124),
+  X(61,125), X(62,126), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101),
+  X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108),
+  X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115),
+  X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122),
+  X(91,123), X(92,124), X(93,125), X(94,126), X(33,65), X(34,66), X(35,67),
+  X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75),
+  X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83),
+  X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91),
+  X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72),
+  X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80),
+  X(49,97), X(50,98), X(51,99), X(52,100), X(53,101), X(54,102), X(55,103),
+  X(56,104), X(57,105), X(58,106), X(59,107), X(60,108), X(61,109), X(62,110),
+  X(63,111), X(64,112), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37),
+  X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45),
+  X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69),
+  X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77),
+  X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100),
+  X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107),
+  X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(117,125),
+  X(118,126), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70),
+  X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86),
+  X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100), X(45,101),
+  X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115), X(60,116),
+  X(61,117), X(62,118), X(63,119), X(64,120), X(9,33), X(10,34), X(11,35),
+  X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51),
+  X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67),
+  X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83),
+  X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(9,17),
+  X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33),
+  X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49),
+  X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65),
+  X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81),
+  X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97),
+  X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104),
+  X(105,113), X(106,114), X(107,115), X(108,116), X(109,117), X(110,118),
+  X(111,119), X(112,120), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14),
+  X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30),
+  X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46),
+  X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62),
+  X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78),
+  X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94),
+  X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109),
+  X(106,110), X(107,111), X(108,112), X(113,117), X(114,118), X(115,119),
+  X(116,120), X(121,125), X(122,126), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84),
+  X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99),
+  X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114),
+  X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(5,33),
+  X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49),
+  X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65),
+  X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81),
+  X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97),
+  X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107), X(80,108),
+  X(85,113), X(86,114), X(87,115), X(88,116), X(93,121), X(94,122), X(95,123),
+  X(96,124), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27),
+  X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43),
+  X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59),
+  X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75),
+  X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91),
+  X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106),
+  X(95,107), X(96,108), X(101,113), X(102,114), X(103,115), X(104,116),
+  X(109,121), X(110,122), X(111,123), X(112,124), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27),
+  X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43),
+  X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59),
+  X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75),
+  X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91),
+  X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106),
+  X(103,107), X(104,108), X(109,113), X(110,114), X(111,115), X(112,116),
+  X(117,121), X(118,122), X(119,123), X(120,124), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56),
+  X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72),
+  X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88),
+  X(89,91), X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(101,103),
+  X(102,104), X(105,107), X(106,108), X(109,111), X(110,112), X(113,115),
+  X(114,116), X(117,119), X(118,120), X(121,123), X(122,124), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78),
+  X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94),
+  X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109),
+  X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121), X(92,122),
+  X(95,125), X(96,126), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90),
+  X(79,93), X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105),
+  X(92,106), X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(3,9), X(4,10), X(7,13),
+  X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29),
+  X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45),
+  X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61),
+  X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77),
+  X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93),
+  X(88,94), X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106),
+  X(103,109), X(104,110), X(107,113), X(108,114), X(111,117), X(112,118),
+  X(115,121), X(116,122), X(119,125), X(120,126), X(3,5), X(4,6), X(7,9),
+  X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25),
+  X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41),
+  X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57),
+  X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73),
+  X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89),
+  X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101), X(100,102),
+  X(103,105), X(104,106), X(107,109), X(108,110), X(111,113), X(112,114),
+  X(115,117), X(116,118), X(119,121), X(120,122), X(123,125), X(124,126), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75),
+  X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91),
+  X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105),
+  X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119),
+  X(58,121), X(60,123), X(62,125), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41),
+  X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57),
+  X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73),
+  X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89),
+  X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103),
+  X(74,105), X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117),
+  X(88,119), X(90,121), X(92,123), X(94,125), X(2,17), X(4,19), X(6,21), X(8,23),
+  X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39),
+  X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55),
+  X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71),
+  X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87),
+  X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99), X(86,101),
+  X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113), X(100,115),
+  X(102,117), X(104,119), X(106,121), X(108,123), X(110,125), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75),
+  X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91),
+  X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105),
+  X(100,107), X(102,109), X(104,111), X(106,113), X(108,115), X(110,117),
+  X(112,119), X(114,121), X(116,123), X(118,125), X(2,5), X(4,7), X(6,9),
+  X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25),
+  X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41),
+  X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57),
+  X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73),
+  X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89),
+  X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101), X(100,103),
+  X(102,105), X(104,107), X(106,109), X(108,111), X(110,113), X(112,115),
+  X(114,117), X(116,119), X(118,121), X(120,123), X(122,125), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125)
+};
+S(128) = {
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124),
+  X(61,125), X(62,126), X(63,127), X(64,128), X(1,33), X(2,34), X(3,35), X(4,36),
+  X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44),
+  X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52),
+  X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60),
+  X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70),
+  X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78),
+  X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86),
+  X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94),
+  X(63,95), X(64,96), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54),
+  X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62),
+  X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86),
+  X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94),
+  X(79,95), X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117),
+  X(102,118), X(103,119), X(104,120), X(105,121), X(106,122), X(107,123),
+  X(108,124), X(109,125), X(110,126), X(111,127), X(112,128), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72),
+  X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80),
+  X(81,97), X(82,98), X(83,99), X(84,100), X(85,101), X(86,102), X(87,103),
+  X(88,104), X(89,105), X(90,106), X(91,107), X(92,108), X(93,109), X(94,110),
+  X(95,111), X(96,112), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109),
+  X(102,110), X(103,111), X(104,112), X(113,121), X(114,122), X(115,123),
+  X(116,124), X(117,125), X(118,126), X(119,127), X(120,128), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98),
+  X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113),
+  X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88),
+  X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103),
+  X(80,104), X(89,113), X(90,114), X(91,115), X(92,116), X(93,117), X(94,118),
+  X(95,119), X(96,120), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21),
+  X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37),
+  X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53),
+  X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69),
+  X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85),
+  X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100),
+  X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(1,5), X(2,6),
+  X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22),
+  X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38),
+  X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54),
+  X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70),
+  X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86),
+  X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96), X(97,101),
+  X(98,102), X(99,103), X(100,104), X(105,109), X(106,110), X(107,111),
+  X(108,112), X(113,117), X(114,118), X(115,119), X(116,120), X(121,125),
+  X(122,126), X(123,127), X(124,128), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84),
+  X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99),
+  X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114),
+  X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(5,33),
+  X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49),
+  X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65),
+  X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81),
+  X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97),
+  X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107), X(80,108),
+  X(85,113), X(86,114), X(87,115), X(88,116), X(93,121), X(94,122), X(95,123),
+  X(96,124), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27),
+  X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43),
+  X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59),
+  X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75),
+  X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91),
+  X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106),
+  X(95,107), X(96,108), X(101,113), X(102,114), X(103,115), X(104,116),
+  X(109,121), X(110,122), X(111,123), X(112,124), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27),
+  X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43),
+  X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59),
+  X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75),
+  X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91),
+  X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106),
+  X(103,107), X(104,108), X(109,113), X(110,114), X(111,115), X(112,116),
+  X(117,121), X(118,122), X(119,123), X(120,124), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56),
+  X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72),
+  X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88),
+  X(89,91), X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(101,103),
+  X(102,104), X(105,107), X(106,108), X(109,111), X(110,112), X(113,115),
+  X(114,116), X(117,119), X(118,120), X(121,123), X(122,124), X(125,127),
+  X(126,128), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77),
+  X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93),
+  X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106),
+  X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121),
+  X(60,122), X(63,125), X(64,126), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41),
+  X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57),
+  X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73),
+  X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89),
+  X(60,90), X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102),
+  X(75,105), X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117),
+  X(88,118), X(91,121), X(92,122), X(95,125), X(96,126), X(3,17), X(4,18),
+  X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34),
+  X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50),
+  X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66),
+  X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82),
+  X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21),
+  X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37),
+  X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53),
+  X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69),
+  X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85),
+  X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94),
+  X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(115,117), X(116,118), X(119,121),
+  X(120,122), X(123,125), X(124,126), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79),
+  X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95),
+  X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109),
+  X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(60,123),
+  X(62,125), X(64,127), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75),
+  X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91),
+  X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105),
+  X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119),
+  X(90,121), X(92,123), X(94,125), X(96,127), X(2,17), X(4,19), X(6,21), X(8,23),
+  X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39),
+  X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55),
+  X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71),
+  X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87),
+  X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99), X(86,101),
+  X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113), X(100,115),
+  X(102,117), X(104,119), X(106,121), X(108,123), X(110,125), X(112,127), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57),
+  X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73),
+  X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89),
+  X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103),
+  X(98,105), X(100,107), X(102,109), X(104,111), X(106,113), X(108,115),
+  X(110,117), X(112,119), X(114,121), X(116,123), X(118,125), X(120,127), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(120,123),
+  X(122,125), X(124,127), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127)
+};
+S(130) = {
+  X(1,129), X(2,130), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70),
+  X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78),
+  X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86),
+  X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94),
+  X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101),
+  X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108),
+  X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115),
+  X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122),
+  X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(65,129),
+  X(66,130), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39),
+  X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47),
+  X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55),
+  X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63),
+  X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102),
+  X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109),
+  X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116),
+  X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123),
+  X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(33,129), X(34,130),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54),
+  X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62),
+  X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86),
+  X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94),
+  X(79,95), X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117),
+  X(102,118), X(103,119), X(104,120), X(105,121), X(106,122), X(107,123),
+  X(108,124), X(109,125), X(110,126), X(111,127), X(112,128), X(17,129),
+  X(18,130), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100), X(53,101),
+  X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107), X(60,108),
+  X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130), X(17,33),
+  X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41),
+  X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65),
+  X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73),
+  X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97),
+  X(82,98), X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104),
+  X(89,105), X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111),
+  X(96,112), X(113,129), X(114,130), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13),
+  X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29),
+  X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45),
+  X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61),
+  X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77),
+  X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93),
+  X(86,94), X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108),
+  X(101,109), X(102,110), X(103,111), X(104,112), X(113,121), X(114,122),
+  X(115,123), X(116,124), X(117,125), X(118,126), X(119,127), X(120,128),
+  X(9,129), X(10,130), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70),
+  X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86),
+  X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100), X(45,101),
+  X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115), X(60,116),
+  X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130), X(9,33),
+  X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49),
+  X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65),
+  X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81),
+  X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97),
+  X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104),
+  X(89,113), X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119),
+  X(96,120), X(105,129), X(106,130), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52),
+  X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68),
+  X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84),
+  X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14),
+  X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30),
+  X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46),
+  X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62),
+  X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78),
+  X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94),
+  X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109),
+  X(106,110), X(107,111), X(108,112), X(113,117), X(114,118), X(115,119),
+  X(116,120), X(121,125), X(122,126), X(123,127), X(124,128), X(5,129), X(6,130),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92),
+  X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107),
+  X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122),
+  X(63,123), X(64,124), X(69,129), X(70,130), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52),
+  X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68),
+  X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84),
+  X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27),
+  X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43),
+  X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59),
+  X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75),
+  X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91),
+  X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106),
+  X(95,107), X(96,108), X(101,113), X(102,114), X(103,115), X(104,116),
+  X(109,121), X(110,122), X(111,123), X(112,124), X(117,129), X(118,130), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25),
+  X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41),
+  X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57),
+  X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73),
+  X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89),
+  X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100),
+  X(101,105), X(102,106), X(103,107), X(104,108), X(109,113), X(110,114),
+  X(111,115), X(112,116), X(117,121), X(118,122), X(119,123), X(120,124),
+  X(125,129), X(126,130), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(3,129), X(4,130),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94),
+  X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109),
+  X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122),
+  X(63,125), X(64,126), X(67,129), X(68,130), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70),
+  X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86),
+  X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98), X(71,101),
+  X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113), X(84,114),
+  X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126), X(99,129),
+  X(100,130), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(3,9),
+  X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25),
+  X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41),
+  X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57),
+  X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73),
+  X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89),
+  X(84,90), X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102),
+  X(99,105), X(100,106), X(103,109), X(104,110), X(107,113), X(108,114),
+  X(111,117), X(112,118), X(115,121), X(116,122), X(119,125), X(120,126),
+  X(123,129), X(124,130), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94),
+  X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(115,117), X(116,118), X(119,121),
+  X(120,122), X(123,125), X(124,126), X(127,129), X(128,130), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(2,129), X(2,65), X(4,67),
+  X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83),
+  X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99),
+  X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113),
+  X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127),
+  X(66,129), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45),
+  X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61),
+  X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77),
+  X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93),
+  X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107),
+  X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121),
+  X(92,123), X(94,125), X(96,127), X(98,129), X(2,17), X(4,19), X(6,21), X(8,23),
+  X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39),
+  X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55),
+  X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71),
+  X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87),
+  X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99), X(86,101),
+  X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113), X(100,115),
+  X(102,117), X(104,119), X(106,121), X(108,123), X(110,125), X(112,127),
+  X(114,129), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21),
+  X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37),
+  X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53),
+  X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69),
+  X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85),
+  X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29),
+  X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45),
+  X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61),
+  X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77),
+  X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93),
+  X(92,95), X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107),
+  X(106,109), X(108,111), X(110,113), X(112,115), X(114,117), X(116,119),
+  X(118,121), X(120,123), X(122,125), X(124,127), X(126,129), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129)
+};
+S(132) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(1,65), X(2,66), X(3,67), X(4,68),
+  X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76),
+  X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84),
+  X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92),
+  X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99),
+  X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106),
+  X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113),
+  X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120),
+  X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127),
+  X(64,128), X(65,129), X(66,130), X(67,131), X(68,132), X(1,33), X(2,34),
+  X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42),
+  X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50),
+  X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58),
+  X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98),
+  X(67,99), X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105),
+  X(74,106), X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112),
+  X(81,113), X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119),
+  X(88,120), X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126),
+  X(95,127), X(96,128), X(33,129), X(34,130), X(35,131), X(36,132), X(33,65),
+  X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73),
+  X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81),
+  X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89),
+  X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(17,129), X(18,130), X(19,131), X(20,132), X(17,65),
+  X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73),
+  X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97),
+  X(50,98), X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104),
+  X(57,105), X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111),
+  X(64,112), X(81,129), X(82,130), X(83,131), X(84,132), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(1,9), X(2,10), X(3,11),
+  X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27),
+  X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43),
+  X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59),
+  X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75),
+  X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91),
+  X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105), X(98,106),
+  X(99,107), X(100,108), X(101,109), X(102,110), X(103,111), X(104,112),
+  X(113,121), X(114,122), X(115,123), X(116,124), X(117,125), X(118,126),
+  X(119,127), X(120,128), X(9,129), X(10,130), X(11,131), X(12,132), X(9,65),
+  X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81),
+  X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97),
+  X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104),
+  X(57,113), X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119),
+  X(64,120), X(73,129), X(74,130), X(75,131), X(76,132), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(105,129), X(106,130), X(107,131), X(108,132), X(9,17), X(10,18), X(11,19),
+  X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35),
+  X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51),
+  X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67),
+  X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83),
+  X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88),
+  X(89,93), X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103),
+  X(100,104), X(105,109), X(106,110), X(107,111), X(108,112), X(113,117),
+  X(114,118), X(115,119), X(116,120), X(121,125), X(122,126), X(123,127),
+  X(124,128), X(5,129), X(6,130), X(7,131), X(8,132), X(5,65), X(6,66), X(7,67),
+  X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83),
+  X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99),
+  X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114),
+  X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129),
+  X(70,130), X(71,131), X(72,132), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41),
+  X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57),
+  X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73),
+  X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89),
+  X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100),
+  X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115),
+  X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130),
+  X(103,131), X(104,132), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105),
+  X(94,106), X(95,107), X(96,108), X(101,113), X(102,114), X(103,115),
+  X(104,116), X(109,121), X(110,122), X(111,123), X(112,124), X(117,129),
+  X(118,130), X(119,131), X(120,132), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15),
+  X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31),
+  X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47),
+  X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63),
+  X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79),
+  X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95),
+  X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107), X(106,108),
+  X(109,111), X(110,112), X(113,115), X(114,116), X(117,119), X(118,120),
+  X(121,123), X(122,124), X(125,127), X(126,128), X(129,131), X(130,132),
+  X(3,129), X(4,130), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74),
+  X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90),
+  X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105),
+  X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118),
+  X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130), X(3,33),
+  X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49),
+  X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65),
+  X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81),
+  X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97),
+  X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110),
+  X(83,113), X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125),
+  X(96,126), X(99,129), X(100,130), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25),
+  X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41),
+  X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57),
+  X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73),
+  X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89),
+  X(76,90), X(79,93), X(80,94), X(83,97), X(84,98), X(87,101), X(88,102),
+  X(91,105), X(92,106), X(95,109), X(96,110), X(99,113), X(100,114), X(103,117),
+  X(104,118), X(107,121), X(108,122), X(111,125), X(112,126), X(115,129),
+  X(116,130), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21),
+  X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37),
+  X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53),
+  X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69),
+  X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85),
+  X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(3,5), X(4,6), X(7,9),
+  X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25),
+  X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41),
+  X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57),
+  X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73),
+  X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89),
+  X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101), X(100,102),
+  X(103,105), X(104,106), X(107,109), X(108,110), X(111,113), X(112,114),
+  X(115,117), X(116,118), X(119,121), X(120,122), X(123,125), X(124,126),
+  X(127,129), X(128,130), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(2,129), X(4,131), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73),
+  X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89),
+  X(28,91), X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103),
+  X(42,105), X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117),
+  X(56,119), X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95),
+  X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109),
+  X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(92,123),
+  X(94,125), X(96,127), X(98,129), X(100,131), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(108,115), X(110,117), X(112,119), X(114,121),
+  X(116,123), X(118,125), X(120,127), X(122,129), X(124,131), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131)
+};
+S(134) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(1,65), X(2,66),
+  X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74),
+  X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82),
+  X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90),
+  X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98),
+  X(35,99), X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105),
+  X(42,106), X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112),
+  X(49,113), X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119),
+  X(56,120), X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126),
+  X(63,127), X(64,128), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133),
+  X(70,134), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39),
+  X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47),
+  X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55),
+  X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63),
+  X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102),
+  X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109),
+  X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116),
+  X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123),
+  X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(33,129), X(34,130),
+  X(35,131), X(36,132), X(37,133), X(38,134), X(33,65), X(34,66), X(35,67),
+  X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75),
+  X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83),
+  X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91),
+  X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130),
+  X(99,131), X(100,132), X(101,133), X(102,134), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100), X(53,101),
+  X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107), X(60,108),
+  X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130), X(83,131),
+  X(84,132), X(85,133), X(86,134), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68),
+  X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76),
+  X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129),
+  X(114,130), X(115,131), X(116,132), X(117,133), X(118,134), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(117,125),
+  X(118,126), X(119,127), X(120,128), X(9,129), X(10,130), X(11,131), X(12,132),
+  X(13,133), X(14,134), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115),
+  X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130),
+  X(75,131), X(76,132), X(77,133), X(78,134), X(9,33), X(10,34), X(11,35),
+  X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51),
+  X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67),
+  X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83),
+  X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113),
+  X(106,114), X(107,115), X(108,116), X(109,117), X(110,118), X(111,119),
+  X(112,120), X(121,129), X(122,130), X(123,131), X(124,132), X(125,133),
+  X(126,134), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84),
+  X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99),
+  X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114),
+  X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129),
+  X(70,130), X(71,131), X(72,132), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41),
+  X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57),
+  X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73),
+  X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89),
+  X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100),
+  X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115),
+  X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130),
+  X(103,131), X(104,132), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105),
+  X(94,106), X(95,107), X(96,108), X(101,113), X(102,114), X(103,115),
+  X(104,116), X(109,121), X(110,122), X(111,123), X(112,124), X(117,129),
+  X(118,130), X(119,131), X(120,132), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15),
+  X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31),
+  X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47),
+  X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63),
+  X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79),
+  X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95),
+  X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107), X(106,108),
+  X(109,111), X(110,112), X(113,115), X(114,116), X(117,119), X(118,120),
+  X(121,123), X(122,124), X(125,127), X(126,128), X(129,131), X(130,132),
+  X(3,129), X(4,130), X(7,133), X(8,134), X(3,65), X(4,66), X(7,69), X(8,70),
+  X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86),
+  X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(39,101),
+  X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113), X(52,114),
+  X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126), X(67,129),
+  X(68,130), X(71,133), X(72,134), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41),
+  X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57),
+  X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73),
+  X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89),
+  X(60,90), X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102),
+  X(75,105), X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117),
+  X(88,118), X(91,121), X(92,122), X(95,125), X(96,126), X(99,129), X(100,130),
+  X(103,133), X(104,134), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90),
+  X(79,93), X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105),
+  X(92,106), X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50),
+  X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66),
+  X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82),
+  X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(2,129), X(4,131), X(6,133), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73),
+  X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89),
+  X(28,91), X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103),
+  X(42,105), X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117),
+  X(56,119), X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131),
+  X(70,133), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45),
+  X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61),
+  X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77),
+  X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93),
+  X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107),
+  X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121),
+  X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(2,17),
+  X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33),
+  X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49),
+  X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65),
+  X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81),
+  X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97),
+  X(84,99), X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111),
+  X(98,113), X(100,115), X(102,117), X(104,119), X(106,121), X(108,123),
+  X(110,125), X(112,127), X(114,129), X(116,131), X(118,133), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75),
+  X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91),
+  X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105),
+  X(100,107), X(102,109), X(104,111), X(106,113), X(108,115), X(110,117),
+  X(112,119), X(114,121), X(116,123), X(118,125), X(120,127), X(122,129),
+  X(124,131), X(126,133), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133)
+};
+S(136) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71),
+  X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79),
+  X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87),
+  X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95),
+  X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102),
+  X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109),
+  X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116),
+  X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123),
+  X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(65,129), X(66,130),
+  X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136), X(1,33),
+  X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41),
+  X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49),
+  X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57),
+  X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97),
+  X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103), X(72,104),
+  X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110), X(79,111),
+  X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117), X(86,118),
+  X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124), X(93,125),
+  X(94,126), X(95,127), X(96,128), X(33,129), X(34,130), X(35,131), X(36,132),
+  X(37,133), X(38,134), X(39,135), X(40,136), X(33,65), X(34,66), X(35,67),
+  X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75),
+  X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83),
+  X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91),
+  X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130),
+  X(99,131), X(100,132), X(101,133), X(102,134), X(103,135), X(104,136), X(1,17),
+  X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25),
+  X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49),
+  X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57),
+  X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81),
+  X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89),
+  X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96),
+  X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(17,129), X(18,130),
+  X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136), X(17,65),
+  X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73),
+  X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97),
+  X(50,98), X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104),
+  X(57,105), X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111),
+  X(64,112), X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134),
+  X(87,135), X(88,136), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37),
+  X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45),
+  X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69),
+  X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77),
+  X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100),
+  X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107),
+  X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130),
+  X(115,131), X(116,132), X(117,133), X(118,134), X(119,135), X(120,136), X(1,9),
+  X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25),
+  X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41),
+  X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57),
+  X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73),
+  X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89),
+  X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(9,129), X(10,130), X(11,131),
+  X(12,132), X(13,133), X(14,134), X(15,135), X(16,136), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98),
+  X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113),
+  X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120),
+  X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135),
+  X(80,136), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39),
+  X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55),
+  X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71),
+  X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87),
+  X(64,88), X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102),
+  X(79,103), X(80,104), X(89,113), X(90,114), X(91,115), X(92,116), X(93,117),
+  X(94,118), X(95,119), X(96,120), X(105,129), X(106,130), X(107,131),
+  X(108,132), X(109,133), X(110,134), X(111,135), X(112,136), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113),
+  X(106,114), X(107,115), X(108,116), X(109,117), X(110,118), X(111,119),
+  X(112,120), X(121,129), X(122,130), X(123,131), X(124,132), X(125,133),
+  X(126,134), X(127,135), X(128,136), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(5,129), X(6,130), X(7,131),
+  X(8,132), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92),
+  X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107),
+  X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121), X(94,122),
+  X(95,123), X(96,124), X(101,129), X(102,130), X(103,131), X(104,132), X(5,17),
+  X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33),
+  X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49),
+  X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65),
+  X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81),
+  X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97),
+  X(86,98), X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108),
+  X(101,113), X(102,114), X(103,115), X(104,116), X(109,121), X(110,122),
+  X(111,123), X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25),
+  X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41),
+  X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57),
+  X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73),
+  X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89),
+  X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100),
+  X(101,105), X(102,106), X(103,107), X(104,108), X(109,113), X(110,114),
+  X(111,115), X(112,116), X(117,121), X(118,122), X(119,123), X(120,124),
+  X(125,129), X(126,130), X(127,131), X(128,132), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56),
+  X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72),
+  X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88),
+  X(89,91), X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(101,103),
+  X(102,104), X(105,107), X(106,108), X(109,111), X(110,112), X(113,115),
+  X(114,116), X(117,119), X(118,120), X(121,123), X(122,124), X(125,127),
+  X(126,128), X(129,131), X(130,132), X(133,135), X(134,136), X(3,129), X(4,130),
+  X(7,133), X(8,134), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74),
+  X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90),
+  X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105),
+  X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118),
+  X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130), X(71,133),
+  X(72,134), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121),
+  X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(107,121),
+  X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(119,133),
+  X(120,134), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21),
+  X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37),
+  X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53),
+  X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69),
+  X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85),
+  X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(2,129), X(4,131), X(6,133), X(8,135), X(2,65), X(4,67), X(6,69),
+  X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85),
+  X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99),
+  X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113),
+  X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127),
+  X(66,129), X(68,131), X(70,133), X(72,135), X(2,33), X(4,35), X(6,37), X(8,39),
+  X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55),
+  X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71),
+  X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87),
+  X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101),
+  X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113), X(84,115),
+  X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127), X(98,129),
+  X(100,131), X(102,133), X(104,135), X(2,17), X(4,19), X(6,21), X(8,23),
+  X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39),
+  X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55),
+  X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71),
+  X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87),
+  X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99), X(86,101),
+  X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113), X(100,115),
+  X(102,117), X(104,119), X(106,121), X(108,123), X(110,125), X(112,127),
+  X(114,129), X(116,131), X(118,133), X(120,135), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45),
+  X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61),
+  X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77),
+  X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93),
+  X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107),
+  X(102,109), X(104,111), X(106,113), X(108,115), X(110,117), X(112,119),
+  X(114,121), X(116,123), X(118,125), X(120,127), X(122,129), X(124,131),
+  X(126,133), X(128,135), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133),
+  X(132,135), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(132,133),
+  X(134,135)
+};
+S(138) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69),
+  X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77),
+  X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85),
+  X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93),
+  X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100),
+  X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107),
+  X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114),
+  X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121),
+  X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128),
+  X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135),
+  X(72,136), X(73,137), X(74,138), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37),
+  X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45),
+  X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53),
+  X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61),
+  X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100),
+  X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107),
+  X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114),
+  X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(89,121),
+  X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127), X(96,128),
+  X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134), X(39,135),
+  X(40,136), X(41,137), X(42,138), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76),
+  X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84),
+  X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92),
+  X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131),
+  X(100,132), X(101,133), X(102,134), X(103,135), X(104,136), X(105,137),
+  X(106,138), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23),
+  X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31),
+  X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55),
+  X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63),
+  X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87),
+  X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95),
+  X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(17,129), X(18,130),
+  X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136), X(25,137),
+  X(26,138), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100), X(53,101),
+  X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107), X(60,108),
+  X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130), X(83,131),
+  X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137), X(90,138),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72),
+  X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80),
+  X(81,97), X(82,98), X(83,99), X(84,100), X(85,101), X(86,102), X(87,103),
+  X(88,104), X(89,105), X(90,106), X(91,107), X(92,108), X(93,109), X(94,110),
+  X(95,111), X(96,112), X(113,129), X(114,130), X(115,131), X(116,132),
+  X(117,133), X(118,134), X(119,135), X(120,136), X(121,137), X(122,138), X(1,9),
+  X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25),
+  X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41),
+  X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57),
+  X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73),
+  X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89),
+  X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135),
+  X(16,136), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71),
+  X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87),
+  X(32,88), X(41,97), X(42,98), X(43,99), X(44,100), X(45,101), X(46,102),
+  X(47,103), X(48,104), X(57,113), X(58,114), X(59,115), X(60,116), X(61,117),
+  X(62,118), X(63,119), X(64,120), X(73,129), X(74,130), X(75,131), X(76,132),
+  X(77,133), X(78,134), X(79,135), X(80,136), X(9,33), X(10,34), X(11,35),
+  X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51),
+  X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67),
+  X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83),
+  X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22),
+  X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38),
+  X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54),
+  X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70),
+  X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86),
+  X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100), X(93,101),
+  X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137),
+  X(14,138), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105),
+  X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116),
+  X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25),
+  X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41),
+  X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57),
+  X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73),
+  X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89),
+  X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100),
+  X(101,105), X(102,106), X(103,107), X(104,108), X(109,113), X(110,114),
+  X(111,115), X(112,116), X(117,121), X(118,122), X(119,123), X(120,124),
+  X(125,129), X(126,130), X(127,131), X(128,132), X(133,137), X(134,138), X(1,3),
+  X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19),
+  X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35),
+  X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51),
+  X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67),
+  X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83),
+  X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94),
+  X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109),
+  X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122),
+  X(63,125), X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137),
+  X(76,138), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121),
+  X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90),
+  X(79,93), X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105),
+  X(92,106), X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(3,9), X(4,10), X(7,13),
+  X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29),
+  X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45),
+  X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61),
+  X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77),
+  X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93),
+  X(88,94), X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106),
+  X(103,109), X(104,110), X(107,113), X(108,114), X(111,117), X(112,118),
+  X(115,121), X(116,122), X(119,125), X(120,126), X(123,129), X(124,130),
+  X(127,133), X(128,134), X(131,137), X(132,138), X(3,5), X(4,6), X(7,9),
+  X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25),
+  X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41),
+  X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57),
+  X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73),
+  X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89),
+  X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101), X(100,102),
+  X(103,105), X(104,106), X(107,109), X(108,110), X(111,113), X(112,114),
+  X(115,117), X(116,118), X(119,121), X(120,122), X(123,125), X(124,126),
+  X(127,129), X(128,130), X(131,133), X(132,134), X(135,137), X(136,138), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137),
+  X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79),
+  X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95),
+  X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109),
+  X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(60,123),
+  X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135), X(74,137),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95),
+  X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109),
+  X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(92,123),
+  X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(108,115), X(110,117), X(112,119), X(114,121),
+  X(116,123), X(118,125), X(120,127), X(122,129), X(124,131), X(126,133),
+  X(128,135), X(130,137), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133),
+  X(132,135), X(134,137), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137)
+};
+S(140) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(1,65), X(2,66), X(3,67),
+  X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75),
+  X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83),
+  X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91),
+  X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99),
+  X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106),
+  X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113),
+  X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120),
+  X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127),
+  X(64,128), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134),
+  X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(1,33),
+  X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41),
+  X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49),
+  X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57),
+  X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97),
+  X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103), X(72,104),
+  X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110), X(79,111),
+  X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117), X(86,118),
+  X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124), X(93,125),
+  X(94,126), X(95,127), X(96,128), X(33,129), X(34,130), X(35,131), X(36,132),
+  X(37,133), X(38,134), X(39,135), X(40,136), X(41,137), X(42,138), X(43,139),
+  X(44,140), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70),
+  X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78),
+  X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86),
+  X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94),
+  X(63,95), X(64,96), X(97,129), X(98,130), X(99,131), X(100,132), X(101,133),
+  X(102,134), X(103,135), X(104,136), X(105,137), X(106,138), X(107,139),
+  X(108,140), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23),
+  X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31),
+  X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55),
+  X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63),
+  X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87),
+  X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95),
+  X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(17,129), X(18,130),
+  X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136), X(25,137),
+  X(26,138), X(27,139), X(28,140), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(17,33), X(18,34), X(19,35),
+  X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43),
+  X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67),
+  X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75),
+  X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129),
+  X(114,130), X(115,131), X(116,132), X(117,133), X(118,134), X(119,135),
+  X(120,136), X(121,137), X(122,138), X(123,139), X(124,140), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(117,125),
+  X(118,126), X(119,127), X(120,128), X(129,137), X(130,138), X(131,139),
+  X(132,140), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134),
+  X(15,135), X(16,136), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115),
+  X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130),
+  X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136), X(9,33),
+  X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49),
+  X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65),
+  X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81),
+  X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97),
+  X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104),
+  X(89,113), X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119),
+  X(96,120), X(105,129), X(106,130), X(107,131), X(108,132), X(109,133),
+  X(110,134), X(111,135), X(112,136), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52),
+  X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68),
+  X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84),
+  X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(125,133), X(126,134),
+  X(127,135), X(128,136), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14),
+  X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30),
+  X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46),
+  X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62),
+  X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78),
+  X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94),
+  X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109),
+  X(106,110), X(107,111), X(108,112), X(113,117), X(114,118), X(115,119),
+  X(116,120), X(121,125), X(122,126), X(123,127), X(124,128), X(129,133),
+  X(130,134), X(131,135), X(132,136), X(5,129), X(6,130), X(7,131), X(8,132),
+  X(13,137), X(14,138), X(15,139), X(16,140), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84),
+  X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99),
+  X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114),
+  X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129),
+  X(70,130), X(71,131), X(72,132), X(77,137), X(78,138), X(79,139), X(80,140),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92),
+  X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107),
+  X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121), X(94,122),
+  X(95,123), X(96,124), X(101,129), X(102,130), X(103,131), X(104,132),
+  X(109,137), X(110,138), X(111,139), X(112,140), X(5,17), X(6,18), X(7,19),
+  X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35),
+  X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51),
+  X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67),
+  X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83),
+  X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18),
+  X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34),
+  X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50),
+  X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66),
+  X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82),
+  X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98),
+  X(95,99), X(96,100), X(101,105), X(102,106), X(103,107), X(104,108),
+  X(109,113), X(110,114), X(111,115), X(112,116), X(117,121), X(118,122),
+  X(119,123), X(120,124), X(125,129), X(126,130), X(127,131), X(128,132),
+  X(133,137), X(134,138), X(135,139), X(136,140), X(1,3), X(2,4), X(5,7), X(6,8),
+  X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24),
+  X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40),
+  X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56),
+  X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72),
+  X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88),
+  X(89,91), X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(101,103),
+  X(102,104), X(105,107), X(106,108), X(109,111), X(110,112), X(113,115),
+  X(114,116), X(117,119), X(118,120), X(121,123), X(122,124), X(125,127),
+  X(126,128), X(129,131), X(130,132), X(133,135), X(134,136), X(137,139),
+  X(138,140), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94),
+  X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109),
+  X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122),
+  X(63,125), X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137),
+  X(76,138), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121),
+  X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90),
+  X(79,93), X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105),
+  X(92,106), X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(3,9), X(4,10), X(7,13),
+  X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29),
+  X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45),
+  X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61),
+  X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77),
+  X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93),
+  X(88,94), X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106),
+  X(103,109), X(104,110), X(107,113), X(108,114), X(111,117), X(112,118),
+  X(115,121), X(116,122), X(119,125), X(120,126), X(123,129), X(124,130),
+  X(127,133), X(128,134), X(131,137), X(132,138), X(3,5), X(4,6), X(7,9),
+  X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25),
+  X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41),
+  X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57),
+  X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73),
+  X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89),
+  X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101), X(100,102),
+  X(103,105), X(104,106), X(107,109), X(108,110), X(111,113), X(112,114),
+  X(115,117), X(116,118), X(119,121), X(120,122), X(123,125), X(124,126),
+  X(127,129), X(128,130), X(131,133), X(132,134), X(135,137), X(136,138), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(2,129), X(4,131), X(6,133), X(8,135),
+  X(10,137), X(12,139), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75),
+  X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91),
+  X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105),
+  X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119),
+  X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133),
+  X(72,135), X(74,137), X(76,139), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41),
+  X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57),
+  X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73),
+  X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89),
+  X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103),
+  X(74,105), X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117),
+  X(88,119), X(90,121), X(92,123), X(94,125), X(96,127), X(98,129), X(100,131),
+  X(102,133), X(104,135), X(106,137), X(108,139), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21),
+  X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37),
+  X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53),
+  X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69),
+  X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85),
+  X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133),
+  X(132,135), X(134,137), X(136,139), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139)
+};
+S(142) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124),
+  X(61,125), X(62,126), X(63,127), X(64,128), X(65,129), X(66,130), X(67,131),
+  X(68,132), X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138),
+  X(75,139), X(76,140), X(77,141), X(78,142), X(1,33), X(2,34), X(3,35), X(4,36),
+  X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44),
+  X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52),
+  X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60),
+  X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70),
+  X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78),
+  X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86),
+  X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94),
+  X(63,95), X(64,96), X(97,129), X(98,130), X(99,131), X(100,132), X(101,133),
+  X(102,134), X(103,135), X(104,136), X(105,137), X(106,138), X(107,139),
+  X(108,140), X(109,141), X(110,142), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60),
+  X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84),
+  X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92),
+  X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114), X(99,115),
+  X(100,116), X(101,117), X(102,118), X(103,119), X(104,120), X(105,121),
+  X(106,122), X(107,123), X(108,124), X(109,125), X(110,126), X(111,127),
+  X(112,128), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134),
+  X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141),
+  X(30,142), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100), X(53,101),
+  X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107), X(60,108),
+  X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130), X(83,131),
+  X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137), X(90,138),
+  X(91,139), X(92,140), X(93,141), X(94,142), X(17,33), X(18,34), X(19,35),
+  X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43),
+  X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67),
+  X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75),
+  X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129),
+  X(114,130), X(115,131), X(116,132), X(117,133), X(118,134), X(119,135),
+  X(120,136), X(121,137), X(122,138), X(123,139), X(124,140), X(125,141),
+  X(126,142), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15),
+  X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31),
+  X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47),
+  X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63),
+  X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79),
+  X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95),
+  X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(9,129), X(10,130), X(11,131),
+  X(12,132), X(13,133), X(14,134), X(15,135), X(16,136), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98),
+  X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113),
+  X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120),
+  X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135),
+  X(80,136), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39),
+  X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55),
+  X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71),
+  X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87),
+  X(64,88), X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102),
+  X(79,103), X(80,104), X(89,113), X(90,114), X(91,115), X(92,116), X(93,117),
+  X(94,118), X(95,119), X(96,120), X(105,129), X(106,130), X(107,131),
+  X(108,132), X(109,133), X(110,134), X(111,135), X(112,136), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113),
+  X(106,114), X(107,115), X(108,116), X(109,117), X(110,118), X(111,119),
+  X(112,120), X(121,129), X(122,130), X(123,131), X(124,132), X(125,133),
+  X(126,134), X(127,135), X(128,136), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52),
+  X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68),
+  X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84),
+  X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(103,131), X(104,132), X(109,137), X(110,138), X(111,139),
+  X(112,140), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27),
+  X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43),
+  X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59),
+  X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75),
+  X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91),
+  X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106),
+  X(95,107), X(96,108), X(101,113), X(102,114), X(103,115), X(104,116),
+  X(109,121), X(110,122), X(111,123), X(112,124), X(117,129), X(118,130),
+  X(119,131), X(120,132), X(125,137), X(126,138), X(127,139), X(128,140), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25),
+  X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41),
+  X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57),
+  X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73),
+  X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89),
+  X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100),
+  X(101,105), X(102,106), X(103,107), X(104,108), X(109,113), X(110,114),
+  X(111,115), X(112,116), X(117,121), X(118,122), X(119,123), X(120,124),
+  X(125,129), X(126,130), X(127,131), X(128,132), X(133,137), X(134,138),
+  X(135,139), X(136,140), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(129,131),
+  X(130,132), X(133,135), X(134,136), X(137,139), X(138,140), X(3,129), X(4,130),
+  X(7,133), X(8,134), X(11,137), X(12,138), X(15,141), X(16,142), X(3,65),
+  X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81),
+  X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97),
+  X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110),
+  X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125),
+  X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138),
+  X(79,141), X(80,142), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74),
+  X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90),
+  X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105),
+  X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118),
+  X(91,121), X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133),
+  X(104,134), X(107,137), X(108,138), X(111,141), X(112,142), X(3,17), X(4,18),
+  X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34),
+  X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50),
+  X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66),
+  X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82),
+  X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70),
+  X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86),
+  X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101),
+  X(100,102), X(103,105), X(104,106), X(107,109), X(108,110), X(111,113),
+  X(112,114), X(115,117), X(116,118), X(119,121), X(120,122), X(123,125),
+  X(124,126), X(127,129), X(128,130), X(131,133), X(132,134), X(135,137),
+  X(136,138), X(139,141), X(140,142), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107),
+  X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121),
+  X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135),
+  X(74,137), X(76,139), X(78,141), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41),
+  X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57),
+  X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73),
+  X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89),
+  X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103),
+  X(74,105), X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117),
+  X(88,119), X(90,121), X(92,123), X(94,125), X(96,127), X(98,129), X(100,131),
+  X(102,133), X(104,135), X(106,137), X(108,139), X(110,141), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83),
+  X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83),
+  X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(134,141), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29),
+  X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45),
+  X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61),
+  X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77),
+  X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93),
+  X(92,95), X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107),
+  X(106,109), X(108,111), X(110,113), X(112,115), X(114,117), X(116,119),
+  X(118,121), X(120,123), X(122,125), X(124,127), X(126,129), X(128,131),
+  X(130,133), X(132,135), X(134,137), X(136,139), X(138,141), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141)
+};
+S(144) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70),
+  X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78),
+  X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86),
+  X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94),
+  X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101),
+  X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108),
+  X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115),
+  X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122),
+  X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(65,129),
+  X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136),
+  X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143),
+  X(80,144), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39),
+  X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47),
+  X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55),
+  X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63),
+  X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102),
+  X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109),
+  X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116),
+  X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123),
+  X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(33,129), X(34,130),
+  X(35,131), X(36,132), X(37,133), X(38,134), X(39,135), X(40,136), X(41,137),
+  X(42,138), X(43,139), X(44,140), X(45,141), X(46,142), X(47,143), X(48,144),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(17,65), X(18,66), X(19,67),
+  X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75),
+  X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100), X(85,101),
+  X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107), X(92,108),
+  X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130), X(115,131),
+  X(116,132), X(117,133), X(118,134), X(119,135), X(120,136), X(121,137),
+  X(122,138), X(123,139), X(124,140), X(125,141), X(126,142), X(127,143),
+  X(128,144), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15),
+  X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31),
+  X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47),
+  X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63),
+  X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79),
+  X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95),
+  X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135),
+  X(16,136), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71),
+  X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87),
+  X(32,88), X(41,97), X(42,98), X(43,99), X(44,100), X(45,101), X(46,102),
+  X(47,103), X(48,104), X(57,113), X(58,114), X(59,115), X(60,116), X(61,117),
+  X(62,118), X(63,119), X(64,120), X(73,129), X(74,130), X(75,131), X(76,132),
+  X(77,133), X(78,134), X(79,135), X(80,136), X(9,33), X(10,34), X(11,35),
+  X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51),
+  X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67),
+  X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83),
+  X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22),
+  X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38),
+  X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54),
+  X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70),
+  X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86),
+  X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100), X(93,101),
+  X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52),
+  X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68),
+  X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84),
+  X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(103,131), X(104,132), X(109,137), X(110,138), X(111,139),
+  X(112,140), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27),
+  X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43),
+  X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59),
+  X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75),
+  X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91),
+  X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106),
+  X(95,107), X(96,108), X(101,113), X(102,114), X(103,115), X(104,116),
+  X(109,121), X(110,122), X(111,123), X(112,124), X(117,129), X(118,130),
+  X(119,131), X(120,132), X(125,137), X(126,138), X(127,139), X(128,140), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25),
+  X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41),
+  X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57),
+  X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73),
+  X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89),
+  X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100),
+  X(101,105), X(102,106), X(103,107), X(104,108), X(109,113), X(110,114),
+  X(111,115), X(112,116), X(117,121), X(118,122), X(119,123), X(120,124),
+  X(125,129), X(126,130), X(127,131), X(128,132), X(133,137), X(134,138),
+  X(135,139), X(136,140), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(129,131),
+  X(130,132), X(133,135), X(134,136), X(137,139), X(138,140), X(141,143),
+  X(142,144), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74),
+  X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90),
+  X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105),
+  X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118),
+  X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130), X(71,133),
+  X(72,134), X(75,137), X(76,138), X(79,141), X(80,142), X(3,33), X(4,34),
+  X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50),
+  X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66),
+  X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82),
+  X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90),
+  X(79,93), X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105),
+  X(92,106), X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142), X(3,9),
+  X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25),
+  X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41),
+  X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57),
+  X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73),
+  X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89),
+  X(84,90), X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102),
+  X(99,105), X(100,106), X(103,109), X(104,110), X(107,113), X(108,114),
+  X(111,117), X(112,118), X(115,121), X(116,122), X(119,125), X(120,126),
+  X(123,129), X(124,130), X(127,133), X(128,134), X(131,137), X(132,138),
+  X(135,141), X(136,142), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94),
+  X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(115,117), X(116,118), X(119,121),
+  X(120,122), X(123,125), X(124,126), X(127,129), X(128,130), X(131,133),
+  X(132,134), X(135,137), X(136,138), X(139,141), X(140,142), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(2,129), X(4,131),
+  X(6,133), X(8,135), X(10,137), X(12,139), X(14,141), X(16,143), X(2,65),
+  X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81),
+  X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97),
+  X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111),
+  X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125),
+  X(64,127), X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139),
+  X(78,141), X(80,143), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75),
+  X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91),
+  X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105),
+  X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119),
+  X(90,121), X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133),
+  X(104,135), X(106,137), X(108,139), X(110,141), X(112,143), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83),
+  X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(108,115), X(110,117), X(112,119), X(114,121),
+  X(116,123), X(118,125), X(120,127), X(122,129), X(124,131), X(126,133),
+  X(128,135), X(130,137), X(132,139), X(134,141), X(136,143), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(130,133), X(132,135), X(134,137),
+  X(136,139), X(138,141), X(140,143), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143)
+};
+S(146) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(1,65), X(2,66), X(3,67), X(4,68),
+  X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76),
+  X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84),
+  X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92),
+  X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99),
+  X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106),
+  X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113),
+  X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120),
+  X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127),
+  X(64,128), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134),
+  X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141),
+  X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(1,33), X(2,34),
+  X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42),
+  X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50),
+  X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58),
+  X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98),
+  X(67,99), X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105),
+  X(74,106), X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112),
+  X(81,113), X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119),
+  X(88,120), X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126),
+  X(95,127), X(96,128), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133),
+  X(38,134), X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140),
+  X(45,141), X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(33,65),
+  X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73),
+  X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81),
+  X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89),
+  X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88),
+  X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96),
+  X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(129,145), X(130,146),
+  X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134), X(23,135),
+  X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141), X(30,142),
+  X(31,143), X(32,144), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69),
+  X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77),
+  X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100),
+  X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107),
+  X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130),
+  X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137),
+  X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143), X(96,144),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72),
+  X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80),
+  X(81,97), X(82,98), X(83,99), X(84,100), X(85,101), X(86,102), X(87,103),
+  X(88,104), X(89,105), X(90,106), X(91,107), X(92,108), X(93,109), X(94,110),
+  X(95,111), X(96,112), X(113,129), X(114,130), X(115,131), X(116,132),
+  X(117,133), X(118,134), X(119,135), X(120,136), X(121,137), X(122,138),
+  X(123,139), X(124,140), X(125,141), X(126,142), X(127,143), X(128,144), X(1,9),
+  X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25),
+  X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41),
+  X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57),
+  X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73),
+  X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89),
+  X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135),
+  X(16,136), X(25,145), X(26,146), X(9,65), X(10,66), X(11,67), X(12,68),
+  X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84),
+  X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99),
+  X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114),
+  X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129),
+  X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136),
+  X(89,145), X(90,146), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37),
+  X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53),
+  X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69),
+  X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85),
+  X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100),
+  X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115),
+  X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130),
+  X(107,131), X(108,132), X(109,133), X(110,134), X(111,135), X(112,136),
+  X(121,145), X(122,146), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21),
+  X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37),
+  X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53),
+  X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69),
+  X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85),
+  X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100),
+  X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137),
+  X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(5,65), X(6,66),
+  X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82),
+  X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98),
+  X(39,99), X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113),
+  X(54,114), X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124),
+  X(69,129), X(70,130), X(71,131), X(72,132), X(77,137), X(78,138), X(79,139),
+  X(80,140), X(85,145), X(86,146), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41),
+  X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57),
+  X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73),
+  X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89),
+  X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100),
+  X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115),
+  X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130),
+  X(103,131), X(104,132), X(109,137), X(110,138), X(111,139), X(112,140),
+  X(117,145), X(118,146), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105),
+  X(94,106), X(95,107), X(96,108), X(101,113), X(102,114), X(103,115),
+  X(104,116), X(109,121), X(110,122), X(111,123), X(112,124), X(117,129),
+  X(118,130), X(119,131), X(120,132), X(125,137), X(126,138), X(127,139),
+  X(128,140), X(133,145), X(134,146), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15),
+  X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31),
+  X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47),
+  X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63),
+  X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79),
+  X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95),
+  X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107), X(106,108),
+  X(109,111), X(110,112), X(113,115), X(114,116), X(117,119), X(118,120),
+  X(121,123), X(122,124), X(125,127), X(126,128), X(129,131), X(130,132),
+  X(133,135), X(134,136), X(137,139), X(138,140), X(141,143), X(142,144),
+  X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138), X(15,141),
+  X(16,142), X(19,145), X(20,146), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73),
+  X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89),
+  X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102),
+  X(43,105), X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117),
+  X(56,118), X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130),
+  X(71,133), X(72,134), X(75,137), X(76,138), X(79,141), X(80,142), X(83,145),
+  X(84,146), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121),
+  X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(107,121),
+  X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(119,133),
+  X(120,134), X(123,137), X(124,138), X(127,141), X(128,142), X(131,145),
+  X(132,146), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21),
+  X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37),
+  X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53),
+  X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69),
+  X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85),
+  X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134),
+  X(131,137), X(132,138), X(135,141), X(136,142), X(139,145), X(140,146), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134),
+  X(135,137), X(136,138), X(139,141), X(140,142), X(143,145), X(144,146), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139), X(14,141),
+  X(16,143), X(18,145), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75),
+  X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91),
+  X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105),
+  X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119),
+  X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133),
+  X(72,135), X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(2,33),
+  X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49),
+  X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65),
+  X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81),
+  X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97),
+  X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111),
+  X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125),
+  X(96,127), X(98,129), X(100,131), X(102,133), X(104,135), X(106,137),
+  X(108,139), X(110,141), X(112,143), X(114,145), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45),
+  X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61),
+  X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77),
+  X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93),
+  X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107),
+  X(102,109), X(104,111), X(106,113), X(108,115), X(110,117), X(112,119),
+  X(114,121), X(116,123), X(118,125), X(120,127), X(122,129), X(124,131),
+  X(126,133), X(128,135), X(130,137), X(132,139), X(134,141), X(136,143),
+  X(138,145), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17),
+  X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33),
+  X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49),
+  X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65),
+  X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81),
+  X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97),
+  X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133),
+  X(132,135), X(134,137), X(136,139), X(138,141), X(140,143), X(142,145), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145)
+};
+S(148) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(1,65),
+  X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73),
+  X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81),
+  X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89),
+  X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97),
+  X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103), X(40,104),
+  X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110), X(47,111),
+  X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117), X(54,118),
+  X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124), X(61,125),
+  X(62,126), X(63,127), X(64,128), X(65,129), X(66,130), X(67,131), X(68,132),
+  X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139),
+  X(76,140), X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146),
+  X(83,147), X(84,148), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101),
+  X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108),
+  X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115),
+  X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122),
+  X(91,123), X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(33,129),
+  X(34,130), X(35,131), X(36,132), X(37,133), X(38,134), X(39,135), X(40,136),
+  X(41,137), X(42,138), X(43,139), X(44,140), X(45,141), X(46,142), X(47,143),
+  X(48,144), X(49,145), X(50,146), X(51,147), X(52,148), X(33,65), X(34,66),
+  X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74),
+  X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82),
+  X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90),
+  X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(97,129),
+  X(98,130), X(99,131), X(100,132), X(101,133), X(102,134), X(103,135),
+  X(104,136), X(105,137), X(106,138), X(107,139), X(108,140), X(109,141),
+  X(110,142), X(111,143), X(112,144), X(113,145), X(114,146), X(115,147),
+  X(116,148), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23),
+  X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31),
+  X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55),
+  X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63),
+  X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87),
+  X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95),
+  X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(129,145), X(130,146),
+  X(131,147), X(132,148), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(17,65), X(18,66), X(19,67),
+  X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75),
+  X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100), X(85,101),
+  X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107), X(92,108),
+  X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130), X(115,131),
+  X(116,132), X(117,133), X(118,134), X(119,135), X(120,136), X(121,137),
+  X(122,138), X(123,139), X(124,140), X(125,141), X(126,142), X(127,143),
+  X(128,144), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15),
+  X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31),
+  X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47),
+  X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63),
+  X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79),
+  X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95),
+  X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135),
+  X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98),
+  X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113),
+  X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120),
+  X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135),
+  X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(105,129), X(106,130), X(107,131), X(108,132), X(109,133), X(110,134),
+  X(111,135), X(112,136), X(121,145), X(122,146), X(123,147), X(124,148),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(105,113), X(106,114), X(107,115), X(108,116), X(109,117),
+  X(110,118), X(111,119), X(112,120), X(121,129), X(122,130), X(123,131),
+  X(124,132), X(125,133), X(126,134), X(127,135), X(128,136), X(137,145),
+  X(138,146), X(139,147), X(140,148), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137),
+  X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92),
+  X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107),
+  X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122),
+  X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132), X(77,137),
+  X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147), X(88,148),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92),
+  X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107),
+  X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121), X(94,122),
+  X(95,123), X(96,124), X(101,129), X(102,130), X(103,131), X(104,132),
+  X(109,137), X(110,138), X(111,139), X(112,140), X(117,145), X(118,146),
+  X(119,147), X(120,148), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105),
+  X(94,106), X(95,107), X(96,108), X(101,113), X(102,114), X(103,115),
+  X(104,116), X(109,121), X(110,122), X(111,123), X(112,124), X(117,129),
+  X(118,130), X(119,131), X(120,132), X(125,137), X(126,138), X(127,139),
+  X(128,140), X(133,145), X(134,146), X(135,147), X(136,148), X(5,9), X(6,10),
+  X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26),
+  X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42),
+  X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58),
+  X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74),
+  X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90),
+  X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105),
+  X(102,106), X(103,107), X(104,108), X(109,113), X(110,114), X(111,115),
+  X(112,116), X(117,121), X(118,122), X(119,123), X(120,124), X(125,129),
+  X(126,130), X(127,131), X(128,132), X(133,137), X(134,138), X(135,139),
+  X(136,140), X(141,145), X(142,146), X(143,147), X(144,148), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(3,65), X(4,66), X(7,69), X(8,70),
+  X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86),
+  X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(39,101),
+  X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113), X(52,114),
+  X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126), X(67,129),
+  X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141), X(80,142),
+  X(83,145), X(84,146), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74),
+  X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90),
+  X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105),
+  X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118),
+  X(91,121), X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133),
+  X(104,134), X(107,137), X(108,138), X(111,141), X(112,142), X(115,145),
+  X(116,146), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50),
+  X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66),
+  X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82),
+  X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134),
+  X(131,137), X(132,138), X(135,141), X(136,142), X(139,145), X(140,146), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134),
+  X(135,137), X(136,138), X(139,141), X(140,142), X(143,145), X(144,146), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(2,65), X(4,67), X(6,69), X(8,71),
+  X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87),
+  X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99), X(38,101),
+  X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113), X(52,115),
+  X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127), X(66,129),
+  X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141), X(80,143),
+  X(82,145), X(84,147), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75),
+  X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91),
+  X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105),
+  X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119),
+  X(90,121), X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133),
+  X(104,135), X(106,137), X(108,139), X(110,141), X(112,143), X(114,145),
+  X(116,147), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83),
+  X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(134,141), X(136,143), X(138,145), X(140,147), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(120,123),
+  X(122,125), X(124,127), X(126,129), X(128,131), X(130,133), X(132,135),
+  X(134,137), X(136,139), X(138,141), X(140,143), X(142,145), X(144,147), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147)
+};
+S(150) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71),
+  X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79),
+  X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87),
+  X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95),
+  X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102),
+  X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109),
+  X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116),
+  X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123),
+  X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(65,129), X(66,130),
+  X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136), X(73,137),
+  X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143), X(80,144),
+  X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150), X(1,33),
+  X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41),
+  X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49),
+  X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57),
+  X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97),
+  X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103), X(72,104),
+  X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110), X(79,111),
+  X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117), X(86,118),
+  X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124), X(93,125),
+  X(94,126), X(95,127), X(96,128), X(33,129), X(34,130), X(35,131), X(36,132),
+  X(37,133), X(38,134), X(39,135), X(40,136), X(41,137), X(42,138), X(43,139),
+  X(44,140), X(45,141), X(46,142), X(47,143), X(48,144), X(49,145), X(50,146),
+  X(51,147), X(52,148), X(53,149), X(54,150), X(33,65), X(34,66), X(35,67),
+  X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75),
+  X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83),
+  X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91),
+  X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130),
+  X(99,131), X(100,132), X(101,133), X(102,134), X(103,135), X(104,136),
+  X(105,137), X(106,138), X(107,139), X(108,140), X(109,141), X(110,142),
+  X(111,143), X(112,144), X(113,145), X(114,146), X(115,147), X(116,148),
+  X(117,149), X(118,150), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54),
+  X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62),
+  X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86),
+  X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94),
+  X(79,95), X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117),
+  X(102,118), X(103,119), X(104,120), X(105,121), X(106,122), X(107,123),
+  X(108,124), X(109,125), X(110,126), X(111,127), X(112,128), X(129,145),
+  X(130,146), X(131,147), X(132,148), X(133,149), X(134,150), X(17,129),
+  X(18,130), X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136),
+  X(25,137), X(26,138), X(27,139), X(28,140), X(29,141), X(30,142), X(31,143),
+  X(32,144), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100), X(53,101),
+  X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107), X(60,108),
+  X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130), X(83,131),
+  X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137), X(90,138),
+  X(91,139), X(92,140), X(93,141), X(94,142), X(95,143), X(96,144), X(17,33),
+  X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41),
+  X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65),
+  X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73),
+  X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97),
+  X(82,98), X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104),
+  X(89,105), X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111),
+  X(96,112), X(113,129), X(114,130), X(115,131), X(116,132), X(117,133),
+  X(118,134), X(119,135), X(120,136), X(121,137), X(122,138), X(123,139),
+  X(124,140), X(125,141), X(126,142), X(127,143), X(128,144), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(117,125),
+  X(118,126), X(119,127), X(120,128), X(129,137), X(130,138), X(131,139),
+  X(132,140), X(133,141), X(134,142), X(135,143), X(136,144), X(9,129),
+  X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135), X(16,136),
+  X(25,145), X(26,146), X(27,147), X(28,148), X(29,149), X(30,150), X(9,65),
+  X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81),
+  X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97),
+  X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104),
+  X(57,113), X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119),
+  X(64,120), X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134),
+  X(79,135), X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149),
+  X(94,150), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39),
+  X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55),
+  X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71),
+  X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87),
+  X(64,88), X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102),
+  X(79,103), X(80,104), X(89,113), X(90,114), X(91,115), X(92,116), X(93,117),
+  X(94,118), X(95,119), X(96,120), X(105,129), X(106,130), X(107,131),
+  X(108,132), X(109,133), X(110,134), X(111,135), X(112,136), X(121,145),
+  X(122,146), X(123,147), X(124,148), X(125,149), X(126,150), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113),
+  X(106,114), X(107,115), X(108,116), X(109,117), X(110,118), X(111,119),
+  X(112,120), X(121,129), X(122,130), X(123,131), X(124,132), X(125,133),
+  X(126,134), X(127,135), X(128,136), X(137,145), X(138,146), X(139,147),
+  X(140,148), X(141,149), X(142,150), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(5,129), X(6,130), X(7,131),
+  X(8,132), X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146),
+  X(23,147), X(24,148), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74),
+  X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90),
+  X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105),
+  X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116),
+  X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131),
+  X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146),
+  X(87,147), X(88,148), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105),
+  X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116),
+  X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25),
+  X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41),
+  X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57),
+  X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73),
+  X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89),
+  X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100),
+  X(101,105), X(102,106), X(103,107), X(104,108), X(109,113), X(110,114),
+  X(111,115), X(112,116), X(117,121), X(118,122), X(119,123), X(120,124),
+  X(125,129), X(126,130), X(127,131), X(128,132), X(133,137), X(134,138),
+  X(135,139), X(136,140), X(141,145), X(142,146), X(143,147), X(144,148), X(1,3),
+  X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19),
+  X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35),
+  X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51),
+  X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67),
+  X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83),
+  X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(3,65),
+  X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81),
+  X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97),
+  X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110),
+  X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125),
+  X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138),
+  X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(3,33),
+  X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49),
+  X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65),
+  X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81),
+  X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97),
+  X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110),
+  X(83,113), X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125),
+  X(96,126), X(99,129), X(100,130), X(103,133), X(104,134), X(107,137),
+  X(108,138), X(111,141), X(112,142), X(115,145), X(116,146), X(119,149),
+  X(120,150), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(3,9), X(4,10), X(7,13),
+  X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29),
+  X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45),
+  X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61),
+  X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77),
+  X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93),
+  X(88,94), X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106),
+  X(103,109), X(104,110), X(107,113), X(108,114), X(111,117), X(112,118),
+  X(115,121), X(116,122), X(119,125), X(120,126), X(123,129), X(124,130),
+  X(127,133), X(128,134), X(131,137), X(132,138), X(135,141), X(136,142),
+  X(139,145), X(140,146), X(143,149), X(144,150), X(3,5), X(4,6), X(7,9),
+  X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25),
+  X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41),
+  X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57),
+  X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73),
+  X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89),
+  X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101), X(100,102),
+  X(103,105), X(104,106), X(107,109), X(108,110), X(111,113), X(112,114),
+  X(115,117), X(116,118), X(119,121), X(120,122), X(123,125), X(124,126),
+  X(127,129), X(128,130), X(131,133), X(132,134), X(135,137), X(136,138),
+  X(139,141), X(140,142), X(143,145), X(144,146), X(147,149), X(148,150), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137),
+  X(12,139), X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(2,65),
+  X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81),
+  X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97),
+  X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111),
+  X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125),
+  X(64,127), X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139),
+  X(78,141), X(80,143), X(82,145), X(84,147), X(86,149), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83),
+  X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99),
+  X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113),
+  X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127),
+  X(98,129), X(100,131), X(102,133), X(104,135), X(106,137), X(108,139),
+  X(110,141), X(112,143), X(114,145), X(116,147), X(118,149), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83),
+  X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57),
+  X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73),
+  X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89),
+  X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103),
+  X(98,105), X(100,107), X(102,109), X(104,111), X(106,113), X(108,115),
+  X(110,117), X(112,119), X(114,121), X(116,123), X(118,125), X(120,127),
+  X(122,129), X(124,131), X(126,133), X(128,135), X(130,137), X(132,139),
+  X(134,141), X(136,143), X(138,145), X(140,147), X(142,149), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(130,133), X(132,135), X(134,137),
+  X(136,139), X(138,141), X(140,143), X(142,145), X(144,147), X(146,149), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149)
+};
+S(152) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69),
+  X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77),
+  X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85),
+  X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93),
+  X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100),
+  X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107),
+  X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114),
+  X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121),
+  X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128),
+  X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135),
+  X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142),
+  X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149),
+  X(86,150), X(87,151), X(88,152), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37),
+  X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45),
+  X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53),
+  X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61),
+  X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100),
+  X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107),
+  X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114),
+  X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(89,121),
+  X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127), X(96,128),
+  X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134), X(39,135),
+  X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141), X(46,142),
+  X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148), X(53,149),
+  X(54,150), X(55,151), X(56,152), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76),
+  X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84),
+  X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92),
+  X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131),
+  X(100,132), X(101,133), X(102,134), X(103,135), X(104,136), X(105,137),
+  X(106,138), X(107,139), X(108,140), X(109,141), X(110,142), X(111,143),
+  X(112,144), X(113,145), X(114,146), X(115,147), X(116,148), X(117,149),
+  X(118,150), X(119,151), X(120,152), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60),
+  X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84),
+  X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92),
+  X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114), X(99,115),
+  X(100,116), X(101,117), X(102,118), X(103,119), X(104,120), X(105,121),
+  X(106,122), X(107,123), X(108,124), X(109,125), X(110,126), X(111,127),
+  X(112,128), X(129,145), X(130,146), X(131,147), X(132,148), X(133,149),
+  X(134,150), X(135,151), X(136,152), X(17,129), X(18,130), X(19,131), X(20,132),
+  X(21,133), X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139),
+  X(28,140), X(29,141), X(30,142), X(31,143), X(32,144), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135),
+  X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142),
+  X(95,143), X(96,144), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37),
+  X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45),
+  X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69),
+  X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77),
+  X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100),
+  X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107),
+  X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130),
+  X(115,131), X(116,132), X(117,133), X(118,134), X(119,135), X(120,136),
+  X(121,137), X(122,138), X(123,139), X(124,140), X(125,141), X(126,142),
+  X(127,143), X(128,144), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109),
+  X(102,110), X(103,111), X(104,112), X(113,121), X(114,122), X(115,123),
+  X(116,124), X(117,125), X(118,126), X(119,127), X(120,128), X(129,137),
+  X(130,138), X(131,139), X(132,140), X(133,141), X(134,142), X(135,143),
+  X(136,144), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134),
+  X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149),
+  X(30,150), X(31,151), X(32,152), X(9,65), X(10,66), X(11,67), X(12,68),
+  X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84),
+  X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99),
+  X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114),
+  X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129),
+  X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136),
+  X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151),
+  X(96,152), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39),
+  X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55),
+  X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71),
+  X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87),
+  X(64,88), X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102),
+  X(79,103), X(80,104), X(89,113), X(90,114), X(91,115), X(92,116), X(93,117),
+  X(94,118), X(95,119), X(96,120), X(105,129), X(106,130), X(107,131),
+  X(108,132), X(109,133), X(110,134), X(111,135), X(112,136), X(121,145),
+  X(122,146), X(123,147), X(124,148), X(125,149), X(126,150), X(127,151),
+  X(128,152), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22),
+  X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38),
+  X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54),
+  X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70),
+  X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86),
+  X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100), X(93,101),
+  X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(139,147), X(140,148), X(141,149),
+  X(142,150), X(143,151), X(144,152), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(147,151), X(148,152),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(5,65), X(6,66),
+  X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82),
+  X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98),
+  X(39,99), X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113),
+  X(54,114), X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124),
+  X(69,129), X(70,130), X(71,131), X(72,132), X(77,137), X(78,138), X(79,139),
+  X(80,140), X(85,145), X(86,146), X(87,147), X(88,148), X(5,33), X(6,34),
+  X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50),
+  X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66),
+  X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82),
+  X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98),
+  X(71,99), X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113),
+  X(86,114), X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124),
+  X(101,129), X(102,130), X(103,131), X(104,132), X(109,137), X(110,138),
+  X(111,139), X(112,140), X(117,145), X(118,146), X(119,147), X(120,148),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76),
+  X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92),
+  X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106), X(95,107),
+  X(96,108), X(101,113), X(102,114), X(103,115), X(104,116), X(109,121),
+  X(110,122), X(111,123), X(112,124), X(117,129), X(118,130), X(119,131),
+  X(120,132), X(125,137), X(126,138), X(127,139), X(128,140), X(133,145),
+  X(134,146), X(135,147), X(136,148), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11),
+  X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27),
+  X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43),
+  X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59),
+  X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75),
+  X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91),
+  X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104),
+  X(105,107), X(106,108), X(109,111), X(110,112), X(113,115), X(114,116),
+  X(117,119), X(118,120), X(121,123), X(122,124), X(125,127), X(126,128),
+  X(129,131), X(130,132), X(133,135), X(134,136), X(137,139), X(138,140),
+  X(141,143), X(142,144), X(145,147), X(146,148), X(149,151), X(150,152),
+  X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138), X(15,141),
+  X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(3,33), X(4,34),
+  X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50),
+  X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66),
+  X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82),
+  X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(107,121),
+  X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(119,133),
+  X(120,134), X(123,137), X(124,138), X(127,141), X(128,142), X(131,145),
+  X(132,146), X(135,149), X(136,150), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13),
+  X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29),
+  X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45),
+  X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61),
+  X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77),
+  X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93),
+  X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106),
+  X(107,109), X(108,110), X(111,113), X(112,114), X(115,117), X(116,118),
+  X(119,121), X(120,122), X(123,125), X(124,126), X(127,129), X(128,130),
+  X(131,133), X(132,134), X(135,137), X(136,138), X(139,141), X(140,142),
+  X(143,145), X(144,146), X(147,149), X(148,150), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(2,65),
+  X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81),
+  X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97),
+  X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111),
+  X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125),
+  X(64,127), X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139),
+  X(78,141), X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(2,33),
+  X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49),
+  X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65),
+  X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81),
+  X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97),
+  X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111),
+  X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125),
+  X(96,127), X(98,129), X(100,131), X(102,133), X(104,135), X(106,137),
+  X(108,139), X(110,141), X(112,143), X(114,145), X(116,147), X(118,149),
+  X(120,151), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45),
+  X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61),
+  X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77),
+  X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93),
+  X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107),
+  X(102,109), X(104,111), X(106,113), X(108,115), X(110,117), X(112,119),
+  X(114,121), X(116,123), X(118,125), X(120,127), X(122,129), X(124,131),
+  X(126,133), X(128,135), X(130,137), X(132,139), X(134,141), X(136,143),
+  X(138,145), X(140,147), X(142,149), X(144,151), X(2,5), X(4,7), X(6,9),
+  X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25),
+  X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41),
+  X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57),
+  X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73),
+  X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89),
+  X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101), X(100,103),
+  X(102,105), X(104,107), X(106,109), X(108,111), X(110,113), X(112,115),
+  X(114,117), X(116,119), X(118,121), X(120,123), X(122,125), X(124,127),
+  X(126,129), X(128,131), X(130,133), X(132,135), X(134,137), X(136,139),
+  X(138,141), X(140,143), X(142,145), X(144,147), X(146,149), X(148,151), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151)
+};
+S(154) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(1,65), X(2,66),
+  X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74),
+  X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82),
+  X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90),
+  X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98),
+  X(35,99), X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105),
+  X(42,106), X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112),
+  X(49,113), X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119),
+  X(56,120), X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126),
+  X(63,127), X(64,128), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133),
+  X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140),
+  X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147),
+  X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103),
+  X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110),
+  X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117),
+  X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124),
+  X(93,125), X(94,126), X(95,127), X(96,128), X(33,129), X(34,130), X(35,131),
+  X(36,132), X(37,133), X(38,134), X(39,135), X(40,136), X(41,137), X(42,138),
+  X(43,139), X(44,140), X(45,141), X(46,142), X(47,143), X(48,144), X(49,145),
+  X(50,146), X(51,147), X(52,148), X(53,149), X(54,150), X(55,151), X(56,152),
+  X(57,153), X(58,154), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69),
+  X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77),
+  X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85),
+  X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93),
+  X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131), X(100,132),
+  X(101,133), X(102,134), X(103,135), X(104,136), X(105,137), X(106,138),
+  X(107,139), X(108,140), X(109,141), X(110,142), X(111,143), X(112,144),
+  X(113,145), X(114,146), X(115,147), X(116,148), X(117,149), X(118,150),
+  X(119,151), X(120,152), X(121,153), X(122,154), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134), X(23,135),
+  X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141), X(30,142),
+  X(31,143), X(32,144), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69),
+  X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77),
+  X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100),
+  X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107),
+  X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130),
+  X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137),
+  X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143), X(96,144),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72),
+  X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80),
+  X(81,97), X(82,98), X(83,99), X(84,100), X(85,101), X(86,102), X(87,103),
+  X(88,104), X(89,105), X(90,106), X(91,107), X(92,108), X(93,109), X(94,110),
+  X(95,111), X(96,112), X(113,129), X(114,130), X(115,131), X(116,132),
+  X(117,133), X(118,134), X(119,135), X(120,136), X(121,137), X(122,138),
+  X(123,139), X(124,140), X(125,141), X(126,142), X(127,143), X(128,144), X(1,9),
+  X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25),
+  X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41),
+  X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57),
+  X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73),
+  X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89),
+  X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(145,153), X(146,154), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133),
+  X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148),
+  X(29,149), X(30,150), X(31,151), X(32,152), X(9,65), X(10,66), X(11,67),
+  X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83),
+  X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99),
+  X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114),
+  X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129),
+  X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136),
+  X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151),
+  X(96,152), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39),
+  X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55),
+  X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71),
+  X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87),
+  X(64,88), X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102),
+  X(79,103), X(80,104), X(89,113), X(90,114), X(91,115), X(92,116), X(93,117),
+  X(94,118), X(95,119), X(96,120), X(105,129), X(106,130), X(107,131),
+  X(108,132), X(109,133), X(110,134), X(111,135), X(112,136), X(121,145),
+  X(122,146), X(123,147), X(124,148), X(125,149), X(126,150), X(127,151),
+  X(128,152), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22),
+  X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38),
+  X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54),
+  X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70),
+  X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86),
+  X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100), X(93,101),
+  X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(139,147), X(140,148), X(141,149),
+  X(142,150), X(143,151), X(144,152), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(147,151), X(148,152),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153), X(30,154),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92),
+  X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107),
+  X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122),
+  X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132), X(77,137),
+  X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147), X(88,148),
+  X(93,153), X(94,154), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105),
+  X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116),
+  X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(149,153), X(150,154), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(3,129), X(4,130), X(7,133), X(8,134),
+  X(11,137), X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149),
+  X(24,150), X(27,153), X(28,154), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73),
+  X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89),
+  X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102),
+  X(43,105), X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117),
+  X(56,118), X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130),
+  X(71,133), X(72,134), X(75,137), X(76,138), X(79,141), X(80,142), X(83,145),
+  X(84,146), X(87,149), X(88,150), X(91,153), X(92,154), X(3,33), X(4,34),
+  X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50),
+  X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66),
+  X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82),
+  X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90),
+  X(79,93), X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105),
+  X(92,106), X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154), X(3,9),
+  X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25),
+  X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41),
+  X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57),
+  X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73),
+  X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89),
+  X(84,90), X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102),
+  X(99,105), X(100,106), X(103,109), X(104,110), X(107,113), X(108,114),
+  X(111,117), X(112,118), X(115,121), X(116,122), X(119,125), X(120,126),
+  X(123,129), X(124,130), X(127,133), X(128,134), X(131,137), X(132,138),
+  X(135,141), X(136,142), X(139,145), X(140,146), X(143,149), X(144,150),
+  X(147,153), X(148,154), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94),
+  X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(115,117), X(116,118), X(119,121),
+  X(120,122), X(123,125), X(124,126), X(127,129), X(128,130), X(131,133),
+  X(132,134), X(135,137), X(136,138), X(139,141), X(140,142), X(143,145),
+  X(144,146), X(147,149), X(148,150), X(151,153), X(152,154), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(2,129), X(4,131), X(6,133),
+  X(8,135), X(10,137), X(12,139), X(14,141), X(16,143), X(18,145), X(20,147),
+  X(22,149), X(24,151), X(26,153), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73),
+  X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89),
+  X(28,91), X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103),
+  X(42,105), X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117),
+  X(56,119), X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131),
+  X(70,133), X(72,135), X(74,137), X(76,139), X(78,141), X(80,143), X(82,145),
+  X(84,147), X(86,149), X(88,151), X(90,153), X(2,33), X(4,35), X(6,37), X(8,39),
+  X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55),
+  X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71),
+  X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87),
+  X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101),
+  X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113), X(84,115),
+  X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127), X(98,129),
+  X(100,131), X(102,133), X(104,135), X(106,137), X(108,139), X(110,141),
+  X(112,143), X(114,145), X(116,147), X(118,149), X(120,151), X(122,153),
+  X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31),
+  X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47),
+  X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63),
+  X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79),
+  X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95),
+  X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107), X(94,109),
+  X(96,111), X(98,113), X(100,115), X(102,117), X(104,119), X(106,121),
+  X(108,123), X(110,125), X(112,127), X(114,129), X(116,131), X(118,133),
+  X(120,135), X(122,137), X(124,139), X(126,141), X(128,143), X(130,145),
+  X(132,147), X(134,149), X(136,151), X(138,153), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45),
+  X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61),
+  X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77),
+  X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93),
+  X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107),
+  X(102,109), X(104,111), X(106,113), X(108,115), X(110,117), X(112,119),
+  X(114,121), X(116,123), X(118,125), X(120,127), X(122,129), X(124,131),
+  X(126,133), X(128,135), X(130,137), X(132,139), X(134,141), X(136,143),
+  X(138,145), X(140,147), X(142,149), X(144,151), X(146,153), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(130,133), X(132,135), X(134,137),
+  X(136,139), X(138,141), X(140,143), X(142,145), X(144,147), X(146,149),
+  X(148,151), X(150,153), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(142,143),
+  X(144,145), X(146,147), X(148,149), X(150,151), X(152,153)
+};
+S(156) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124),
+  X(61,125), X(62,126), X(63,127), X(64,128), X(65,129), X(66,130), X(67,131),
+  X(68,132), X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138),
+  X(75,139), X(76,140), X(77,141), X(78,142), X(79,143), X(80,144), X(81,145),
+  X(82,146), X(83,147), X(84,148), X(85,149), X(86,150), X(87,151), X(88,152),
+  X(89,153), X(90,154), X(91,155), X(92,156), X(1,33), X(2,34), X(3,35), X(4,36),
+  X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44),
+  X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52),
+  X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60),
+  X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70),
+  X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78),
+  X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86),
+  X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94),
+  X(63,95), X(64,96), X(97,129), X(98,130), X(99,131), X(100,132), X(101,133),
+  X(102,134), X(103,135), X(104,136), X(105,137), X(106,138), X(107,139),
+  X(108,140), X(109,141), X(110,142), X(111,143), X(112,144), X(113,145),
+  X(114,146), X(115,147), X(116,148), X(117,149), X(118,150), X(119,151),
+  X(120,152), X(121,153), X(122,154), X(123,155), X(124,156), X(1,17), X(2,18),
+  X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26),
+  X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50),
+  X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58),
+  X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82),
+  X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90),
+  X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113),
+  X(98,114), X(99,115), X(100,116), X(101,117), X(102,118), X(103,119),
+  X(104,120), X(105,121), X(106,122), X(107,123), X(108,124), X(109,125),
+  X(110,126), X(111,127), X(112,128), X(129,145), X(130,146), X(131,147),
+  X(132,148), X(133,149), X(134,150), X(135,151), X(136,152), X(137,153),
+  X(138,154), X(139,155), X(140,156), X(17,129), X(18,130), X(19,131), X(20,132),
+  X(21,133), X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139),
+  X(28,140), X(29,141), X(30,142), X(31,143), X(32,144), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135),
+  X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142),
+  X(95,143), X(96,144), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37),
+  X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45),
+  X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69),
+  X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77),
+  X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100),
+  X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107),
+  X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130),
+  X(115,131), X(116,132), X(117,133), X(118,134), X(119,135), X(120,136),
+  X(121,137), X(122,138), X(123,139), X(124,140), X(125,141), X(126,142),
+  X(127,143), X(128,144), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109),
+  X(102,110), X(103,111), X(104,112), X(113,121), X(114,122), X(115,123),
+  X(116,124), X(117,125), X(118,126), X(119,127), X(120,128), X(129,137),
+  X(130,138), X(131,139), X(132,140), X(133,141), X(134,142), X(135,143),
+  X(136,144), X(145,153), X(146,154), X(147,155), X(148,156), X(9,129),
+  X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135), X(16,136),
+  X(25,145), X(26,146), X(27,147), X(28,148), X(29,149), X(30,150), X(31,151),
+  X(32,152), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71),
+  X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87),
+  X(32,88), X(41,97), X(42,98), X(43,99), X(44,100), X(45,101), X(46,102),
+  X(47,103), X(48,104), X(57,113), X(58,114), X(59,115), X(60,116), X(61,117),
+  X(62,118), X(63,119), X(64,120), X(73,129), X(74,130), X(75,131), X(76,132),
+  X(77,133), X(78,134), X(79,135), X(80,136), X(89,145), X(90,146), X(91,147),
+  X(92,148), X(93,149), X(94,150), X(95,151), X(96,152), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(105,129), X(106,130), X(107,131), X(108,132), X(109,133), X(110,134),
+  X(111,135), X(112,136), X(121,145), X(122,146), X(123,147), X(124,148),
+  X(125,149), X(126,150), X(127,151), X(128,152), X(9,17), X(10,18), X(11,19),
+  X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35),
+  X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51),
+  X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67),
+  X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83),
+  X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(125,133), X(126,134),
+  X(127,135), X(128,136), X(137,145), X(138,146), X(139,147), X(140,148),
+  X(141,149), X(142,150), X(143,151), X(144,152), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88),
+  X(89,93), X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103),
+  X(100,104), X(105,109), X(106,110), X(107,111), X(108,112), X(113,117),
+  X(114,118), X(115,119), X(116,120), X(121,125), X(122,126), X(123,127),
+  X(124,128), X(129,133), X(130,134), X(131,135), X(132,136), X(137,141),
+  X(138,142), X(139,143), X(140,144), X(145,149), X(146,150), X(147,151),
+  X(148,152), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138),
+  X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153),
+  X(30,154), X(31,155), X(32,156), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73),
+  X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89),
+  X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100),
+  X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115),
+  X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130),
+  X(71,131), X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145),
+  X(86,146), X(87,147), X(88,148), X(93,153), X(94,154), X(95,155), X(96,156),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92),
+  X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107),
+  X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121), X(94,122),
+  X(95,123), X(96,124), X(101,129), X(102,130), X(103,131), X(104,132),
+  X(109,137), X(110,138), X(111,139), X(112,140), X(117,145), X(118,146),
+  X(119,147), X(120,148), X(125,153), X(126,154), X(127,155), X(128,156),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76),
+  X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92),
+  X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106), X(95,107),
+  X(96,108), X(101,113), X(102,114), X(103,115), X(104,116), X(109,121),
+  X(110,122), X(111,123), X(112,124), X(117,129), X(118,130), X(119,131),
+  X(120,132), X(125,137), X(126,138), X(127,139), X(128,140), X(133,145),
+  X(134,146), X(135,147), X(136,148), X(141,153), X(142,154), X(143,155),
+  X(144,156), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19),
+  X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35),
+  X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51),
+  X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67),
+  X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83),
+  X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99),
+  X(96,100), X(101,105), X(102,106), X(103,107), X(104,108), X(109,113),
+  X(110,114), X(111,115), X(112,116), X(117,121), X(118,122), X(119,123),
+  X(120,124), X(125,129), X(126,130), X(127,131), X(128,132), X(133,137),
+  X(134,138), X(135,139), X(136,140), X(141,145), X(142,146), X(143,147),
+  X(144,148), X(149,153), X(150,154), X(151,155), X(152,156), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(3,129), X(4,130),
+  X(7,133), X(8,134), X(11,137), X(12,138), X(15,141), X(16,142), X(19,145),
+  X(20,146), X(23,149), X(24,150), X(27,153), X(28,154), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78),
+  X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94),
+  X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109),
+  X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121), X(92,122),
+  X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(3,17), X(4,18), X(7,21),
+  X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37),
+  X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53),
+  X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69),
+  X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85),
+  X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70),
+  X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86),
+  X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101),
+  X(100,102), X(103,105), X(104,106), X(107,109), X(108,110), X(111,113),
+  X(112,114), X(115,117), X(116,118), X(119,121), X(120,122), X(123,125),
+  X(124,126), X(127,129), X(128,130), X(131,133), X(132,134), X(135,137),
+  X(136,138), X(139,141), X(140,142), X(143,145), X(144,146), X(147,149),
+  X(148,150), X(151,153), X(152,154), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137),
+  X(12,139), X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151),
+  X(26,153), X(28,155), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75),
+  X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91),
+  X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105),
+  X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119),
+  X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133),
+  X(72,135), X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147),
+  X(86,149), X(88,151), X(90,153), X(92,155), X(2,33), X(4,35), X(6,37), X(8,39),
+  X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55),
+  X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71),
+  X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87),
+  X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101),
+  X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113), X(84,115),
+  X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127), X(98,129),
+  X(100,131), X(102,133), X(104,135), X(106,137), X(108,139), X(110,141),
+  X(112,143), X(114,145), X(116,147), X(118,149), X(120,151), X(122,153),
+  X(124,155), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57),
+  X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73),
+  X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89),
+  X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103),
+  X(98,105), X(100,107), X(102,109), X(104,111), X(106,113), X(108,115),
+  X(110,117), X(112,119), X(114,121), X(116,123), X(118,125), X(120,127),
+  X(122,129), X(124,131), X(126,133), X(128,135), X(130,137), X(132,139),
+  X(134,141), X(136,143), X(138,145), X(140,147), X(142,149), X(144,151),
+  X(146,153), X(148,155), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133),
+  X(132,135), X(134,137), X(136,139), X(138,141), X(140,143), X(142,145),
+  X(144,147), X(146,149), X(148,151), X(150,153), X(152,155), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155)
+};
+S(158) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70),
+  X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78),
+  X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86),
+  X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94),
+  X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101),
+  X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108),
+  X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115),
+  X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122),
+  X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(65,129),
+  X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136),
+  X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143),
+  X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150),
+  X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157),
+  X(94,158), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39),
+  X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47),
+  X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55),
+  X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63),
+  X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102),
+  X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109),
+  X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116),
+  X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123),
+  X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(33,129), X(34,130),
+  X(35,131), X(36,132), X(37,133), X(38,134), X(39,135), X(40,136), X(41,137),
+  X(42,138), X(43,139), X(44,140), X(45,141), X(46,142), X(47,143), X(48,144),
+  X(49,145), X(50,146), X(51,147), X(52,148), X(53,149), X(54,150), X(55,151),
+  X(56,152), X(57,153), X(58,154), X(59,155), X(60,156), X(61,157), X(62,158),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88),
+  X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96),
+  X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(129,145), X(130,146),
+  X(131,147), X(132,148), X(133,149), X(134,150), X(135,151), X(136,152),
+  X(137,153), X(138,154), X(139,155), X(140,156), X(141,157), X(142,158),
+  X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134), X(23,135),
+  X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141), X(30,142),
+  X(31,143), X(32,144), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69),
+  X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77),
+  X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100),
+  X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107),
+  X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130),
+  X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137),
+  X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143), X(96,144),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72),
+  X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80),
+  X(81,97), X(82,98), X(83,99), X(84,100), X(85,101), X(86,102), X(87,103),
+  X(88,104), X(89,105), X(90,106), X(91,107), X(92,108), X(93,109), X(94,110),
+  X(95,111), X(96,112), X(113,129), X(114,130), X(115,131), X(116,132),
+  X(117,133), X(118,134), X(119,135), X(120,136), X(121,137), X(122,138),
+  X(123,139), X(124,140), X(125,141), X(126,142), X(127,143), X(128,144), X(1,9),
+  X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25),
+  X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41),
+  X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57),
+  X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73),
+  X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89),
+  X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(145,153), X(146,154), X(147,155), X(148,156), X(149,157), X(150,158),
+  X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135),
+  X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149), X(30,150),
+  X(31,151), X(32,152), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115),
+  X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130),
+  X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136), X(89,145),
+  X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151), X(96,152),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88),
+  X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103),
+  X(80,104), X(89,113), X(90,114), X(91,115), X(92,116), X(93,117), X(94,118),
+  X(95,119), X(96,120), X(105,129), X(106,130), X(107,131), X(108,132),
+  X(109,133), X(110,134), X(111,135), X(112,136), X(121,145), X(122,146),
+  X(123,147), X(124,148), X(125,149), X(126,150), X(127,151), X(128,152),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(105,113), X(106,114), X(107,115), X(108,116), X(109,117),
+  X(110,118), X(111,119), X(112,120), X(121,129), X(122,130), X(123,131),
+  X(124,132), X(125,133), X(126,134), X(127,135), X(128,136), X(137,145),
+  X(138,146), X(139,147), X(140,148), X(141,149), X(142,150), X(143,151),
+  X(144,152), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153), X(30,154),
+  X(31,155), X(32,156), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74),
+  X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90),
+  X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105),
+  X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116),
+  X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131),
+  X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146),
+  X(87,147), X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(5,33),
+  X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49),
+  X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65),
+  X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81),
+  X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97),
+  X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107), X(80,108),
+  X(85,113), X(86,114), X(87,115), X(88,116), X(93,121), X(94,122), X(95,123),
+  X(96,124), X(101,129), X(102,130), X(103,131), X(104,132), X(109,137),
+  X(110,138), X(111,139), X(112,140), X(117,145), X(118,146), X(119,147),
+  X(120,148), X(125,153), X(126,154), X(127,155), X(128,156), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(143,155), X(144,156), X(5,9), X(6,10),
+  X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26),
+  X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42),
+  X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58),
+  X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74),
+  X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90),
+  X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105),
+  X(102,106), X(103,107), X(104,108), X(109,113), X(110,114), X(111,115),
+  X(112,116), X(117,121), X(118,122), X(119,123), X(120,124), X(125,129),
+  X(126,130), X(127,131), X(128,132), X(133,137), X(134,138), X(135,139),
+  X(136,140), X(141,145), X(142,146), X(143,147), X(144,148), X(149,153),
+  X(150,154), X(151,155), X(152,156), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11),
+  X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27),
+  X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43),
+  X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59),
+  X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75),
+  X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91),
+  X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104),
+  X(105,107), X(106,108), X(109,111), X(110,112), X(113,115), X(114,116),
+  X(117,119), X(118,120), X(121,123), X(122,124), X(125,127), X(126,128),
+  X(129,131), X(130,132), X(133,135), X(134,136), X(137,139), X(138,140),
+  X(141,143), X(142,144), X(145,147), X(146,148), X(149,151), X(150,152),
+  X(153,155), X(154,156), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137),
+  X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150),
+  X(27,153), X(28,154), X(31,157), X(32,158), X(3,65), X(4,66), X(7,69), X(8,70),
+  X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86),
+  X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(39,101),
+  X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113), X(52,114),
+  X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126), X(67,129),
+  X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141), X(80,142),
+  X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154), X(95,157),
+  X(96,158), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121),
+  X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(127,157), X(128,158),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(107,121),
+  X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(119,133),
+  X(120,134), X(123,137), X(124,138), X(127,141), X(128,142), X(131,145),
+  X(132,146), X(135,149), X(136,150), X(139,153), X(140,154), X(143,157),
+  X(144,158), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21),
+  X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37),
+  X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53),
+  X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69),
+  X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85),
+  X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134),
+  X(131,137), X(132,138), X(135,141), X(136,142), X(139,145), X(140,146),
+  X(143,149), X(144,150), X(147,153), X(148,154), X(151,157), X(152,158), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134),
+  X(135,137), X(136,138), X(139,141), X(140,142), X(143,145), X(144,146),
+  X(147,149), X(148,150), X(151,153), X(152,154), X(155,157), X(156,158), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139), X(14,141),
+  X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153), X(28,155),
+  X(30,157), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107),
+  X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121),
+  X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135),
+  X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149),
+  X(88,151), X(90,153), X(92,155), X(94,157), X(2,33), X(4,35), X(6,37), X(8,39),
+  X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55),
+  X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71),
+  X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87),
+  X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101),
+  X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113), X(84,115),
+  X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127), X(98,129),
+  X(100,131), X(102,133), X(104,135), X(106,137), X(108,139), X(110,141),
+  X(112,143), X(114,145), X(116,147), X(118,149), X(120,151), X(122,153),
+  X(124,155), X(126,157), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27),
+  X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43),
+  X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59),
+  X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75),
+  X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91),
+  X(78,93), X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105),
+  X(92,107), X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21),
+  X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37),
+  X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53),
+  X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69),
+  X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85),
+  X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(134,141), X(136,143), X(138,145), X(140,147),
+  X(142,149), X(144,151), X(146,153), X(148,155), X(150,157), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(130,133), X(132,135), X(134,137),
+  X(136,139), X(138,141), X(140,143), X(142,145), X(144,147), X(146,149),
+  X(148,151), X(150,153), X(152,155), X(154,157), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(112,113), X(114,115),
+  X(116,117), X(118,119), X(120,121), X(122,123), X(124,125), X(126,127),
+  X(128,129), X(130,131), X(132,133), X(134,135), X(136,137), X(138,139),
+  X(140,141), X(142,143), X(144,145), X(146,147), X(148,149), X(150,151),
+  X(152,153), X(154,155), X(156,157)
+};
+S(160) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(1,65), X(2,66), X(3,67), X(4,68),
+  X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76),
+  X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84),
+  X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92),
+  X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99),
+  X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106),
+  X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113),
+  X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120),
+  X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127),
+  X(64,128), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134),
+  X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141),
+  X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148),
+  X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154), X(91,155),
+  X(92,156), X(93,157), X(94,158), X(95,159), X(96,160), X(1,33), X(2,34),
+  X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42),
+  X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50),
+  X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58),
+  X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98),
+  X(67,99), X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105),
+  X(74,106), X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112),
+  X(81,113), X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119),
+  X(88,120), X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126),
+  X(95,127), X(96,128), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133),
+  X(38,134), X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140),
+  X(45,141), X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147),
+  X(52,148), X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154),
+  X(59,155), X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(33,65),
+  X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73),
+  X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81),
+  X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89),
+  X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54),
+  X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62),
+  X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86),
+  X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94),
+  X(79,95), X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117),
+  X(102,118), X(103,119), X(104,120), X(105,121), X(106,122), X(107,123),
+  X(108,124), X(109,125), X(110,126), X(111,127), X(112,128), X(129,145),
+  X(130,146), X(131,147), X(132,148), X(133,149), X(134,150), X(135,151),
+  X(136,152), X(137,153), X(138,154), X(139,155), X(140,156), X(141,157),
+  X(142,158), X(143,159), X(144,160), X(17,129), X(18,130), X(19,131), X(20,132),
+  X(21,133), X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139),
+  X(28,140), X(29,141), X(30,142), X(31,143), X(32,144), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135),
+  X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142),
+  X(95,143), X(96,144), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37),
+  X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45),
+  X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69),
+  X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77),
+  X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100),
+  X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107),
+  X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130),
+  X(115,131), X(116,132), X(117,133), X(118,134), X(119,135), X(120,136),
+  X(121,137), X(122,138), X(123,139), X(124,140), X(125,141), X(126,142),
+  X(127,143), X(128,144), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109),
+  X(102,110), X(103,111), X(104,112), X(113,121), X(114,122), X(115,123),
+  X(116,124), X(117,125), X(118,126), X(119,127), X(120,128), X(129,137),
+  X(130,138), X(131,139), X(132,140), X(133,141), X(134,142), X(135,143),
+  X(136,144), X(145,153), X(146,154), X(147,155), X(148,156), X(149,157),
+  X(150,158), X(151,159), X(152,160), X(9,129), X(10,130), X(11,131), X(12,132),
+  X(13,133), X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147),
+  X(28,148), X(29,149), X(30,150), X(31,151), X(32,152), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98),
+  X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113),
+  X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120),
+  X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135),
+  X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150),
+  X(95,151), X(96,152), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37),
+  X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53),
+  X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69),
+  X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85),
+  X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100),
+  X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115),
+  X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130),
+  X(107,131), X(108,132), X(109,133), X(110,134), X(111,135), X(112,136),
+  X(121,145), X(122,146), X(123,147), X(124,148), X(125,149), X(126,150),
+  X(127,151), X(128,152), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21),
+  X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37),
+  X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53),
+  X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69),
+  X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85),
+  X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100),
+  X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(139,147), X(140,148), X(141,149),
+  X(142,150), X(143,151), X(144,152), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(147,151), X(148,152),
+  X(153,157), X(154,158), X(155,159), X(156,160), X(5,129), X(6,130), X(7,131),
+  X(8,132), X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146),
+  X(23,147), X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(5,65),
+  X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81),
+  X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97),
+  X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107), X(48,108),
+  X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122), X(63,123),
+  X(64,124), X(69,129), X(70,130), X(71,131), X(72,132), X(77,137), X(78,138),
+  X(79,139), X(80,140), X(85,145), X(86,146), X(87,147), X(88,148), X(93,153),
+  X(94,154), X(95,155), X(96,156), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41),
+  X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57),
+  X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73),
+  X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89),
+  X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100),
+  X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115),
+  X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130),
+  X(103,131), X(104,132), X(109,137), X(110,138), X(111,139), X(112,140),
+  X(117,145), X(118,146), X(119,147), X(120,148), X(125,153), X(126,154),
+  X(127,155), X(128,156), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105),
+  X(94,106), X(95,107), X(96,108), X(101,113), X(102,114), X(103,115),
+  X(104,116), X(109,121), X(110,122), X(111,123), X(112,124), X(117,129),
+  X(118,130), X(119,131), X(120,132), X(125,137), X(126,138), X(127,139),
+  X(128,140), X(133,145), X(134,146), X(135,147), X(136,148), X(141,153),
+  X(142,154), X(143,155), X(144,156), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(149,153), X(150,154), X(151,155),
+  X(152,156), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15),
+  X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31),
+  X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47),
+  X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63),
+  X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79),
+  X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95),
+  X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107), X(106,108),
+  X(109,111), X(110,112), X(113,115), X(114,116), X(117,119), X(118,120),
+  X(121,123), X(122,124), X(125,127), X(126,128), X(129,131), X(130,132),
+  X(133,135), X(134,136), X(137,139), X(138,140), X(141,143), X(142,144),
+  X(145,147), X(146,148), X(149,151), X(150,152), X(153,155), X(154,156),
+  X(157,159), X(158,160), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137),
+  X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150),
+  X(27,153), X(28,154), X(31,157), X(32,158), X(3,65), X(4,66), X(7,69), X(8,70),
+  X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86),
+  X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(39,101),
+  X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113), X(52,114),
+  X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126), X(67,129),
+  X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141), X(80,142),
+  X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154), X(95,157),
+  X(96,158), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121),
+  X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(127,157), X(128,158),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(107,121),
+  X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(119,133),
+  X(120,134), X(123,137), X(124,138), X(127,141), X(128,142), X(131,145),
+  X(132,146), X(135,149), X(136,150), X(139,153), X(140,154), X(143,157),
+  X(144,158), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21),
+  X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37),
+  X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53),
+  X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69),
+  X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85),
+  X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134),
+  X(131,137), X(132,138), X(135,141), X(136,142), X(139,145), X(140,146),
+  X(143,149), X(144,150), X(147,153), X(148,154), X(151,157), X(152,158), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134),
+  X(135,137), X(136,138), X(139,141), X(140,142), X(143,145), X(144,146),
+  X(147,149), X(148,150), X(151,153), X(152,154), X(155,157), X(156,158), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73),
+  X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89),
+  X(28,91), X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103),
+  X(42,105), X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117),
+  X(56,119), X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131),
+  X(70,133), X(72,135), X(74,137), X(76,139), X(78,141), X(80,143), X(82,145),
+  X(84,147), X(86,149), X(88,151), X(90,153), X(92,155), X(94,157), X(96,159),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95),
+  X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109),
+  X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(92,123),
+  X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31),
+  X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47),
+  X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63),
+  X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79),
+  X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95),
+  X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107), X(94,109),
+  X(96,111), X(98,113), X(100,115), X(102,117), X(104,119), X(106,121),
+  X(108,123), X(110,125), X(112,127), X(114,129), X(116,131), X(118,133),
+  X(120,135), X(122,137), X(124,139), X(126,141), X(128,143), X(130,145),
+  X(132,147), X(134,149), X(136,151), X(138,153), X(140,155), X(142,157),
+  X(144,159), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21),
+  X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37),
+  X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53),
+  X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69),
+  X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85),
+  X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(134,141), X(136,143), X(138,145), X(140,147),
+  X(142,149), X(144,151), X(146,153), X(148,155), X(150,157), X(152,159), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(120,123),
+  X(122,125), X(124,127), X(126,129), X(128,131), X(130,133), X(132,135),
+  X(134,137), X(136,139), X(138,141), X(140,143), X(142,145), X(144,147),
+  X(146,149), X(148,151), X(150,153), X(152,155), X(154,157), X(156,159), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159)
+};
+S(162) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(1,65),
+  X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73),
+  X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81),
+  X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89),
+  X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97),
+  X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103), X(40,104),
+  X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110), X(47,111),
+  X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117), X(54,118),
+  X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124), X(61,125),
+  X(62,126), X(63,127), X(64,128), X(65,129), X(66,130), X(67,131), X(68,132),
+  X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139),
+  X(76,140), X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146),
+  X(83,147), X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153),
+  X(90,154), X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160),
+  X(97,161), X(98,162), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101),
+  X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108),
+  X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115),
+  X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122),
+  X(91,123), X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161),
+  X(130,162), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(33,65), X(34,66),
+  X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74),
+  X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82),
+  X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90),
+  X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(97,129),
+  X(98,130), X(99,131), X(100,132), X(101,133), X(102,134), X(103,135),
+  X(104,136), X(105,137), X(106,138), X(107,139), X(108,140), X(109,141),
+  X(110,142), X(111,143), X(112,144), X(113,145), X(114,146), X(115,147),
+  X(116,148), X(117,149), X(118,150), X(119,151), X(120,152), X(121,153),
+  X(122,154), X(123,155), X(124,156), X(125,157), X(126,158), X(127,159),
+  X(128,160), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23),
+  X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31),
+  X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55),
+  X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63),
+  X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87),
+  X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95),
+  X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(129,145), X(130,146),
+  X(131,147), X(132,148), X(133,149), X(134,150), X(135,151), X(136,152),
+  X(137,153), X(138,154), X(139,155), X(140,156), X(141,157), X(142,158),
+  X(143,159), X(144,160), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(17,65),
+  X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73),
+  X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97),
+  X(50,98), X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104),
+  X(57,105), X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111),
+  X(64,112), X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134),
+  X(87,135), X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141),
+  X(94,142), X(95,143), X(96,144), X(113,161), X(114,162), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(117,133), X(118,134),
+  X(119,135), X(120,136), X(121,137), X(122,138), X(123,139), X(124,140),
+  X(125,141), X(126,142), X(127,143), X(128,144), X(145,161), X(146,162), X(1,9),
+  X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25),
+  X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41),
+  X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57),
+  X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73),
+  X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89),
+  X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(145,153), X(146,154), X(147,155), X(148,156), X(149,157), X(150,158),
+  X(151,159), X(152,160), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133),
+  X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148),
+  X(29,149), X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(9,65),
+  X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81),
+  X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97),
+  X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104),
+  X(57,113), X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119),
+  X(64,120), X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134),
+  X(79,135), X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149),
+  X(94,150), X(95,151), X(96,152), X(105,161), X(106,162), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(105,129), X(106,130), X(107,131), X(108,132), X(109,133), X(110,134),
+  X(111,135), X(112,136), X(121,145), X(122,146), X(123,147), X(124,148),
+  X(125,149), X(126,150), X(127,151), X(128,152), X(137,161), X(138,162),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(105,113), X(106,114), X(107,115), X(108,116), X(109,117),
+  X(110,118), X(111,119), X(112,120), X(121,129), X(122,130), X(123,131),
+  X(124,132), X(125,133), X(126,134), X(127,135), X(128,136), X(137,145),
+  X(138,146), X(139,147), X(140,148), X(141,149), X(142,150), X(143,151),
+  X(144,152), X(153,161), X(154,162), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(147,151), X(148,152),
+  X(153,157), X(154,158), X(155,159), X(156,160), X(5,129), X(6,130), X(7,131),
+  X(8,132), X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146),
+  X(23,147), X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(37,161),
+  X(38,162), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147),
+  X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92),
+  X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107),
+  X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121), X(94,122),
+  X(95,123), X(96,124), X(101,129), X(102,130), X(103,131), X(104,132),
+  X(109,137), X(110,138), X(111,139), X(112,140), X(117,145), X(118,146),
+  X(119,147), X(120,148), X(125,153), X(126,154), X(127,155), X(128,156),
+  X(133,161), X(134,162), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105),
+  X(94,106), X(95,107), X(96,108), X(101,113), X(102,114), X(103,115),
+  X(104,116), X(109,121), X(110,122), X(111,123), X(112,124), X(117,129),
+  X(118,130), X(119,131), X(120,132), X(125,137), X(126,138), X(127,139),
+  X(128,140), X(133,145), X(134,146), X(135,147), X(136,148), X(141,153),
+  X(142,154), X(143,155), X(144,156), X(149,161), X(150,162), X(5,9), X(6,10),
+  X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26),
+  X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42),
+  X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58),
+  X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74),
+  X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90),
+  X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105),
+  X(102,106), X(103,107), X(104,108), X(109,113), X(110,114), X(111,115),
+  X(112,116), X(117,121), X(118,122), X(119,123), X(120,124), X(125,129),
+  X(126,130), X(127,131), X(128,132), X(133,137), X(134,138), X(135,139),
+  X(136,140), X(141,145), X(142,146), X(143,147), X(144,148), X(149,153),
+  X(150,154), X(151,155), X(152,156), X(157,161), X(158,162), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154),
+  X(95,157), X(96,158), X(99,161), X(100,162), X(3,33), X(4,34), X(7,37),
+  X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53),
+  X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69),
+  X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85),
+  X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(127,157), X(128,158), X(131,161), X(132,162),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(107,121),
+  X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(119,133),
+  X(120,134), X(123,137), X(124,138), X(127,141), X(128,142), X(131,145),
+  X(132,146), X(135,149), X(136,150), X(139,153), X(140,154), X(143,157),
+  X(144,158), X(147,161), X(148,162), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13),
+  X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29),
+  X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45),
+  X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61),
+  X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77),
+  X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93),
+  X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106),
+  X(107,109), X(108,110), X(111,113), X(112,114), X(115,117), X(116,118),
+  X(119,121), X(120,122), X(123,125), X(124,126), X(127,129), X(128,130),
+  X(131,133), X(132,134), X(135,137), X(136,138), X(139,141), X(140,142),
+  X(143,145), X(144,146), X(147,149), X(148,150), X(151,153), X(152,154),
+  X(155,157), X(156,158), X(159,161), X(160,162), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139), X(14,141),
+  X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153), X(28,155),
+  X(30,157), X(32,159), X(34,161), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73),
+  X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89),
+  X(28,91), X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103),
+  X(42,105), X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117),
+  X(56,119), X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131),
+  X(70,133), X(72,135), X(74,137), X(76,139), X(78,141), X(80,143), X(82,145),
+  X(84,147), X(86,149), X(88,151), X(90,153), X(92,155), X(94,157), X(96,159),
+  X(98,161), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45),
+  X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61),
+  X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77),
+  X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93),
+  X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107),
+  X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121),
+  X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(108,115), X(110,117), X(112,119), X(114,121),
+  X(116,123), X(118,125), X(120,127), X(122,129), X(124,131), X(126,133),
+  X(128,135), X(130,137), X(132,139), X(134,141), X(136,143), X(138,145),
+  X(140,147), X(142,149), X(144,151), X(146,153), X(148,155), X(150,157),
+  X(152,159), X(154,161), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133),
+  X(132,135), X(134,137), X(136,139), X(138,141), X(140,143), X(142,145),
+  X(144,147), X(146,149), X(148,151), X(150,153), X(152,155), X(154,157),
+  X(156,159), X(158,161), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(142,143),
+  X(144,145), X(146,147), X(148,149), X(150,151), X(152,153), X(154,155),
+  X(156,157), X(158,159), X(160,161)
+};
+S(164) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71),
+  X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79),
+  X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87),
+  X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95),
+  X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102),
+  X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109),
+  X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116),
+  X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123),
+  X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(65,129), X(66,130),
+  X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136), X(73,137),
+  X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143), X(80,144),
+  X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150), X(87,151),
+  X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157), X(94,158),
+  X(95,159), X(96,160), X(97,161), X(98,162), X(99,163), X(100,164), X(1,33),
+  X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41),
+  X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49),
+  X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57),
+  X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97),
+  X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103), X(72,104),
+  X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110), X(79,111),
+  X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117), X(86,118),
+  X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124), X(93,125),
+  X(94,126), X(95,127), X(96,128), X(129,161), X(130,162), X(131,163),
+  X(132,164), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(33,65), X(34,66),
+  X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74),
+  X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82),
+  X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90),
+  X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(97,129),
+  X(98,130), X(99,131), X(100,132), X(101,133), X(102,134), X(103,135),
+  X(104,136), X(105,137), X(106,138), X(107,139), X(108,140), X(109,141),
+  X(110,142), X(111,143), X(112,144), X(113,145), X(114,146), X(115,147),
+  X(116,148), X(117,149), X(118,150), X(119,151), X(120,152), X(121,153),
+  X(122,154), X(123,155), X(124,156), X(125,157), X(126,158), X(127,159),
+  X(128,160), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23),
+  X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31),
+  X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55),
+  X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63),
+  X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87),
+  X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95),
+  X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(129,145), X(130,146),
+  X(131,147), X(132,148), X(133,149), X(134,150), X(135,151), X(136,152),
+  X(137,153), X(138,154), X(139,155), X(140,156), X(141,157), X(142,158),
+  X(143,159), X(144,160), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163),
+  X(52,164), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100), X(53,101),
+  X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107), X(60,108),
+  X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130), X(83,131),
+  X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137), X(90,138),
+  X(91,139), X(92,140), X(93,141), X(94,142), X(95,143), X(96,144), X(113,161),
+  X(114,162), X(115,163), X(116,164), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68),
+  X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76),
+  X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129),
+  X(114,130), X(115,131), X(116,132), X(117,133), X(118,134), X(119,135),
+  X(120,136), X(121,137), X(122,138), X(123,139), X(124,140), X(125,141),
+  X(126,142), X(127,143), X(128,144), X(145,161), X(146,162), X(147,163),
+  X(148,164), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15),
+  X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31),
+  X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47),
+  X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63),
+  X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79),
+  X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95),
+  X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(145,153), X(146,154), X(147,155), X(148,156), X(149,157), X(150,158),
+  X(151,159), X(152,160), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133),
+  X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148),
+  X(29,149), X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163),
+  X(44,164), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71),
+  X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87),
+  X(32,88), X(41,97), X(42,98), X(43,99), X(44,100), X(45,101), X(46,102),
+  X(47,103), X(48,104), X(57,113), X(58,114), X(59,115), X(60,116), X(61,117),
+  X(62,118), X(63,119), X(64,120), X(73,129), X(74,130), X(75,131), X(76,132),
+  X(77,133), X(78,134), X(79,135), X(80,136), X(89,145), X(90,146), X(91,147),
+  X(92,148), X(93,149), X(94,150), X(95,151), X(96,152), X(105,161), X(106,162),
+  X(107,163), X(108,164), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37),
+  X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53),
+  X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69),
+  X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85),
+  X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100),
+  X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115),
+  X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130),
+  X(107,131), X(108,132), X(109,133), X(110,134), X(111,135), X(112,136),
+  X(121,145), X(122,146), X(123,147), X(124,148), X(125,149), X(126,150),
+  X(127,151), X(128,152), X(137,161), X(138,162), X(139,163), X(140,164),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(105,113), X(106,114), X(107,115), X(108,116), X(109,117),
+  X(110,118), X(111,119), X(112,120), X(121,129), X(122,130), X(123,131),
+  X(124,132), X(125,133), X(126,134), X(127,135), X(128,136), X(137,145),
+  X(138,146), X(139,147), X(140,148), X(141,149), X(142,150), X(143,151),
+  X(144,152), X(153,161), X(154,162), X(155,163), X(156,164), X(1,5), X(2,6),
+  X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22),
+  X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38),
+  X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54),
+  X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70),
+  X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86),
+  X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96), X(97,101),
+  X(98,102), X(99,103), X(100,104), X(105,109), X(106,110), X(107,111),
+  X(108,112), X(113,117), X(114,118), X(115,119), X(116,120), X(121,125),
+  X(122,126), X(123,127), X(124,128), X(129,133), X(130,134), X(131,135),
+  X(132,136), X(137,141), X(138,142), X(139,143), X(140,144), X(145,149),
+  X(146,150), X(147,151), X(148,152), X(153,157), X(154,158), X(155,159),
+  X(156,160), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138),
+  X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153),
+  X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92),
+  X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107),
+  X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122),
+  X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132), X(77,137),
+  X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147), X(88,148),
+  X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162), X(103,163),
+  X(104,164), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43),
+  X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59),
+  X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75),
+  X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91),
+  X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106),
+  X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121),
+  X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(143,155), X(144,156), X(149,161),
+  X(150,162), X(151,163), X(152,164), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(149,153), X(150,154), X(151,155),
+  X(152,156), X(157,161), X(158,162), X(159,163), X(160,164), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(3,129), X(4,130), X(7,133), X(8,134),
+  X(11,137), X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149),
+  X(24,150), X(27,153), X(28,154), X(31,157), X(32,158), X(35,161), X(36,162),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94),
+  X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109),
+  X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122),
+  X(63,125), X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137),
+  X(76,138), X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150),
+  X(91,153), X(92,154), X(95,157), X(96,158), X(99,161), X(100,162), X(3,33),
+  X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49),
+  X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65),
+  X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81),
+  X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97),
+  X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110),
+  X(83,113), X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125),
+  X(96,126), X(99,129), X(100,130), X(103,133), X(104,134), X(107,137),
+  X(108,138), X(111,141), X(112,142), X(115,145), X(116,146), X(119,149),
+  X(120,150), X(123,153), X(124,154), X(127,157), X(128,158), X(131,161),
+  X(132,162), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(3,9), X(4,10), X(7,13),
+  X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29),
+  X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45),
+  X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61),
+  X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77),
+  X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93),
+  X(88,94), X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106),
+  X(103,109), X(104,110), X(107,113), X(108,114), X(111,117), X(112,118),
+  X(115,121), X(116,122), X(119,125), X(120,126), X(123,129), X(124,130),
+  X(127,133), X(128,134), X(131,137), X(132,138), X(135,141), X(136,142),
+  X(139,145), X(140,146), X(143,149), X(144,150), X(147,153), X(148,154),
+  X(151,157), X(152,158), X(155,161), X(156,162), X(3,5), X(4,6), X(7,9),
+  X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25),
+  X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41),
+  X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57),
+  X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73),
+  X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89),
+  X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101), X(100,102),
+  X(103,105), X(104,106), X(107,109), X(108,110), X(111,113), X(112,114),
+  X(115,117), X(116,118), X(119,121), X(120,122), X(123,125), X(124,126),
+  X(127,129), X(128,130), X(131,133), X(132,134), X(135,137), X(136,138),
+  X(139,141), X(140,142), X(143,145), X(144,146), X(147,149), X(148,150),
+  X(151,153), X(152,154), X(155,157), X(156,158), X(159,161), X(160,162), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(2,129), X(4,131), X(6,133), X(8,135),
+  X(10,137), X(12,139), X(14,141), X(16,143), X(18,145), X(20,147), X(22,149),
+  X(24,151), X(26,153), X(28,155), X(30,157), X(32,159), X(34,161), X(36,163),
+  X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79),
+  X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95),
+  X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109),
+  X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(60,123),
+  X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135), X(74,137),
+  X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149), X(88,151),
+  X(90,153), X(92,155), X(94,157), X(96,159), X(98,161), X(100,163), X(2,33),
+  X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49),
+  X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65),
+  X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81),
+  X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97),
+  X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111),
+  X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125),
+  X(96,127), X(98,129), X(100,131), X(102,133), X(104,135), X(106,137),
+  X(108,139), X(110,141), X(112,143), X(114,145), X(116,147), X(118,149),
+  X(120,151), X(122,153), X(124,155), X(126,157), X(128,159), X(130,161),
+  X(132,163), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45),
+  X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61),
+  X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77),
+  X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93),
+  X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107),
+  X(102,109), X(104,111), X(106,113), X(108,115), X(110,117), X(112,119),
+  X(114,121), X(116,123), X(118,125), X(120,127), X(122,129), X(124,131),
+  X(126,133), X(128,135), X(130,137), X(132,139), X(134,141), X(136,143),
+  X(138,145), X(140,147), X(142,149), X(144,151), X(146,153), X(148,155),
+  X(150,157), X(152,159), X(154,161), X(156,163), X(2,5), X(4,7), X(6,9),
+  X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25),
+  X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41),
+  X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57),
+  X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73),
+  X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89),
+  X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101), X(100,103),
+  X(102,105), X(104,107), X(106,109), X(108,111), X(110,113), X(112,115),
+  X(114,117), X(116,119), X(118,121), X(120,123), X(122,125), X(124,127),
+  X(126,129), X(128,131), X(130,133), X(132,135), X(134,137), X(136,139),
+  X(138,141), X(140,143), X(142,145), X(144,147), X(146,149), X(148,151),
+  X(150,153), X(152,155), X(154,157), X(156,159), X(158,161), X(160,163), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163)
+};
+S(166) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69),
+  X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77),
+  X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85),
+  X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93),
+  X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100),
+  X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107),
+  X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114),
+  X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121),
+  X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128),
+  X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135),
+  X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142),
+  X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149),
+  X(86,150), X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156),
+  X(93,157), X(94,158), X(95,159), X(96,160), X(97,161), X(98,162), X(99,163),
+  X(100,164), X(101,165), X(102,166), X(1,33), X(2,34), X(3,35), X(4,36),
+  X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44),
+  X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52),
+  X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60),
+  X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(33,65), X(34,66),
+  X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74),
+  X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82),
+  X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90),
+  X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(97,129),
+  X(98,130), X(99,131), X(100,132), X(101,133), X(102,134), X(103,135),
+  X(104,136), X(105,137), X(106,138), X(107,139), X(108,140), X(109,141),
+  X(110,142), X(111,143), X(112,144), X(113,145), X(114,146), X(115,147),
+  X(116,148), X(117,149), X(118,150), X(119,151), X(120,152), X(121,153),
+  X(122,154), X(123,155), X(124,156), X(125,157), X(126,158), X(127,159),
+  X(128,160), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23),
+  X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31),
+  X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55),
+  X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63),
+  X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87),
+  X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95),
+  X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(129,145), X(130,146),
+  X(131,147), X(132,148), X(133,149), X(134,150), X(135,151), X(136,152),
+  X(137,153), X(138,154), X(139,155), X(140,156), X(141,157), X(142,158),
+  X(143,159), X(144,160), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163),
+  X(52,164), X(53,165), X(54,166), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100), X(85,101),
+  X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107), X(92,108),
+  X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130), X(115,131),
+  X(116,132), X(117,133), X(118,134), X(119,135), X(120,136), X(121,137),
+  X(122,138), X(123,139), X(124,140), X(125,141), X(126,142), X(127,143),
+  X(128,144), X(145,161), X(146,162), X(147,163), X(148,164), X(149,165),
+  X(150,166), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15),
+  X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31),
+  X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47),
+  X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63),
+  X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79),
+  X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95),
+  X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(145,153), X(146,154), X(147,155), X(148,156), X(149,157), X(150,158),
+  X(151,159), X(152,160), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133),
+  X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148),
+  X(29,149), X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163),
+  X(44,164), X(45,165), X(46,166), X(9,65), X(10,66), X(11,67), X(12,68),
+  X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84),
+  X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99),
+  X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114),
+  X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129),
+  X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136),
+  X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151),
+  X(96,152), X(105,161), X(106,162), X(107,163), X(108,164), X(109,165),
+  X(110,166), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38),
+  X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54),
+  X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70),
+  X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86),
+  X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100), X(77,101),
+  X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115), X(92,116),
+  X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130), X(107,131),
+  X(108,132), X(109,133), X(110,134), X(111,135), X(112,136), X(121,145),
+  X(122,146), X(123,147), X(124,148), X(125,149), X(126,150), X(127,151),
+  X(128,152), X(137,161), X(138,162), X(139,163), X(140,164), X(141,165),
+  X(142,166), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22),
+  X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38),
+  X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54),
+  X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70),
+  X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86),
+  X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100), X(93,101),
+  X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(139,147), X(140,148), X(141,149),
+  X(142,150), X(143,151), X(144,152), X(153,161), X(154,162), X(155,163),
+  X(156,164), X(157,165), X(158,166), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(147,151), X(148,152),
+  X(153,157), X(154,158), X(155,159), X(156,160), X(161,165), X(162,166),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153), X(30,154),
+  X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164), X(5,65),
+  X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81),
+  X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97),
+  X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107), X(48,108),
+  X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122), X(63,123),
+  X(64,124), X(69,129), X(70,130), X(71,131), X(72,132), X(77,137), X(78,138),
+  X(79,139), X(80,140), X(85,145), X(86,146), X(87,147), X(88,148), X(93,153),
+  X(94,154), X(95,155), X(96,156), X(101,161), X(102,162), X(103,163),
+  X(104,164), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43),
+  X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59),
+  X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75),
+  X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91),
+  X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106),
+  X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121),
+  X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(143,155), X(144,156), X(149,161),
+  X(150,162), X(151,163), X(152,164), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(149,153), X(150,154), X(151,155),
+  X(152,156), X(157,161), X(158,162), X(159,163), X(160,164), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(3,129), X(4,130), X(7,133), X(8,134),
+  X(11,137), X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149),
+  X(24,150), X(27,153), X(28,154), X(31,157), X(32,158), X(35,161), X(36,162),
+  X(39,165), X(40,166), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74),
+  X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90),
+  X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105),
+  X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118),
+  X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130), X(71,133),
+  X(72,134), X(75,137), X(76,138), X(79,141), X(80,142), X(83,145), X(84,146),
+  X(87,149), X(88,150), X(91,153), X(92,154), X(95,157), X(96,158), X(99,161),
+  X(100,162), X(103,165), X(104,166), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70),
+  X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86),
+  X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98), X(71,101),
+  X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113), X(84,114),
+  X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126), X(99,129),
+  X(100,130), X(103,133), X(104,134), X(107,137), X(108,138), X(111,141),
+  X(112,142), X(115,145), X(116,146), X(119,149), X(120,150), X(123,153),
+  X(124,154), X(127,157), X(128,158), X(131,161), X(132,162), X(135,165),
+  X(136,166), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166), X(3,9),
+  X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25),
+  X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41),
+  X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57),
+  X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73),
+  X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89),
+  X(84,90), X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102),
+  X(99,105), X(100,106), X(103,109), X(104,110), X(107,113), X(108,114),
+  X(111,117), X(112,118), X(115,121), X(116,122), X(119,125), X(120,126),
+  X(123,129), X(124,130), X(127,133), X(128,134), X(131,137), X(132,138),
+  X(135,141), X(136,142), X(139,145), X(140,146), X(143,149), X(144,150),
+  X(147,153), X(148,154), X(151,157), X(152,158), X(155,161), X(156,162),
+  X(159,165), X(160,166), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94),
+  X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(115,117), X(116,118), X(119,121),
+  X(120,122), X(123,125), X(124,126), X(127,129), X(128,130), X(131,133),
+  X(132,134), X(135,137), X(136,138), X(139,141), X(140,142), X(143,145),
+  X(144,146), X(147,149), X(148,150), X(151,153), X(152,154), X(155,157),
+  X(156,158), X(159,161), X(160,162), X(163,165), X(164,166), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(2,129), X(4,131), X(6,133),
+  X(8,135), X(10,137), X(12,139), X(14,141), X(16,143), X(18,145), X(20,147),
+  X(22,149), X(24,151), X(26,153), X(28,155), X(30,157), X(32,159), X(34,161),
+  X(36,163), X(38,165), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75),
+  X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91),
+  X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105),
+  X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119),
+  X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133),
+  X(72,135), X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147),
+  X(86,149), X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161),
+  X(100,163), X(102,165), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75),
+  X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91),
+  X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105),
+  X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119),
+  X(90,121), X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133),
+  X(104,135), X(106,137), X(108,139), X(110,141), X(112,143), X(114,145),
+  X(116,147), X(118,149), X(120,151), X(122,153), X(124,155), X(126,157),
+  X(128,159), X(130,161), X(132,163), X(134,165), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83),
+  X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(134,141), X(136,143), X(138,145), X(140,147),
+  X(142,149), X(144,151), X(146,153), X(148,155), X(150,157), X(152,159),
+  X(154,161), X(156,163), X(158,165), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29),
+  X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45),
+  X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61),
+  X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77),
+  X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93),
+  X(92,95), X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107),
+  X(106,109), X(108,111), X(110,113), X(112,115), X(114,117), X(116,119),
+  X(118,121), X(120,123), X(122,125), X(124,127), X(126,129), X(128,131),
+  X(130,133), X(132,135), X(134,137), X(136,139), X(138,141), X(140,143),
+  X(142,145), X(144,147), X(146,149), X(148,151), X(150,153), X(152,155),
+  X(154,157), X(156,159), X(158,161), X(160,163), X(162,165), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165)
+};
+S(168) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(1,65), X(2,66),
+  X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74),
+  X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82),
+  X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90),
+  X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98),
+  X(35,99), X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105),
+  X(42,106), X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112),
+  X(49,113), X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119),
+  X(56,120), X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126),
+  X(63,127), X(64,128), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133),
+  X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140),
+  X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147),
+  X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154),
+  X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160), X(97,161),
+  X(98,162), X(99,163), X(100,164), X(101,165), X(102,166), X(103,167),
+  X(104,168), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39),
+  X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47),
+  X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55),
+  X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63),
+  X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102),
+  X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109),
+  X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116),
+  X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123),
+  X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161), X(130,162),
+  X(131,163), X(132,164), X(133,165), X(134,166), X(135,167), X(136,168),
+  X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134), X(39,135),
+  X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141), X(46,142),
+  X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148), X(53,149),
+  X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155), X(60,156),
+  X(61,157), X(62,158), X(63,159), X(64,160), X(33,65), X(34,66), X(35,67),
+  X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75),
+  X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83),
+  X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91),
+  X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130),
+  X(99,131), X(100,132), X(101,133), X(102,134), X(103,135), X(104,136),
+  X(105,137), X(106,138), X(107,139), X(108,140), X(109,141), X(110,142),
+  X(111,143), X(112,144), X(113,145), X(114,146), X(115,147), X(116,148),
+  X(117,149), X(118,150), X(119,151), X(120,152), X(121,153), X(122,154),
+  X(123,155), X(124,156), X(125,157), X(126,158), X(127,159), X(128,160),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88),
+  X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96),
+  X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(129,145), X(130,146),
+  X(131,147), X(132,148), X(133,149), X(134,150), X(135,151), X(136,152),
+  X(137,153), X(138,154), X(139,155), X(140,156), X(141,157), X(142,158),
+  X(143,159), X(144,160), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163),
+  X(52,164), X(53,165), X(54,166), X(55,167), X(56,168), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135),
+  X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142),
+  X(95,143), X(96,144), X(113,161), X(114,162), X(115,163), X(116,164),
+  X(117,165), X(118,166), X(119,167), X(120,168), X(17,33), X(18,34), X(19,35),
+  X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43),
+  X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67),
+  X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75),
+  X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129),
+  X(114,130), X(115,131), X(116,132), X(117,133), X(118,134), X(119,135),
+  X(120,136), X(121,137), X(122,138), X(123,139), X(124,140), X(125,141),
+  X(126,142), X(127,143), X(128,144), X(145,161), X(146,162), X(147,163),
+  X(148,164), X(149,165), X(150,166), X(151,167), X(152,168), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(117,125),
+  X(118,126), X(119,127), X(120,128), X(129,137), X(130,138), X(131,139),
+  X(132,140), X(133,141), X(134,142), X(135,143), X(136,144), X(145,153),
+  X(146,154), X(147,155), X(148,156), X(149,157), X(150,158), X(151,159),
+  X(152,160), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134),
+  X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149),
+  X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164),
+  X(45,165), X(46,166), X(47,167), X(48,168), X(9,65), X(10,66), X(11,67),
+  X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83),
+  X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99),
+  X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114),
+  X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129),
+  X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136),
+  X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151),
+  X(96,152), X(105,161), X(106,162), X(107,163), X(108,164), X(109,165),
+  X(110,166), X(111,167), X(112,168), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52),
+  X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68),
+  X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84),
+  X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(121,145), X(122,146), X(123,147), X(124,148), X(125,149),
+  X(126,150), X(127,151), X(128,152), X(137,161), X(138,162), X(139,163),
+  X(140,164), X(141,165), X(142,166), X(143,167), X(144,168), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113),
+  X(106,114), X(107,115), X(108,116), X(109,117), X(110,118), X(111,119),
+  X(112,120), X(121,129), X(122,130), X(123,131), X(124,132), X(125,133),
+  X(126,134), X(127,135), X(128,136), X(137,145), X(138,146), X(139,147),
+  X(140,148), X(141,149), X(142,150), X(143,151), X(144,152), X(153,161),
+  X(154,162), X(155,163), X(156,164), X(157,165), X(158,166), X(159,167),
+  X(160,168), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153), X(30,154),
+  X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164), X(5,65),
+  X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81),
+  X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97),
+  X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107), X(48,108),
+  X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122), X(63,123),
+  X(64,124), X(69,129), X(70,130), X(71,131), X(72,132), X(77,137), X(78,138),
+  X(79,139), X(80,140), X(85,145), X(86,146), X(87,147), X(88,148), X(93,153),
+  X(94,154), X(95,155), X(96,156), X(101,161), X(102,162), X(103,163),
+  X(104,164), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43),
+  X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59),
+  X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75),
+  X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91),
+  X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106),
+  X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121),
+  X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(143,155), X(144,156), X(149,161),
+  X(150,162), X(151,163), X(152,164), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(149,153), X(150,154), X(151,155),
+  X(152,156), X(157,161), X(158,162), X(159,163), X(160,164), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(3,129), X(4,130),
+  X(7,133), X(8,134), X(11,137), X(12,138), X(15,141), X(16,142), X(19,145),
+  X(20,146), X(23,149), X(24,150), X(27,153), X(28,154), X(31,157), X(32,158),
+  X(35,161), X(36,162), X(39,165), X(40,166), X(3,65), X(4,66), X(7,69), X(8,70),
+  X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86),
+  X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(39,101),
+  X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113), X(52,114),
+  X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126), X(67,129),
+  X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141), X(80,142),
+  X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154), X(95,157),
+  X(96,158), X(99,161), X(100,162), X(103,165), X(104,166), X(3,33), X(4,34),
+  X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50),
+  X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66),
+  X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82),
+  X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(127,157), X(128,158), X(131,161), X(132,162),
+  X(135,165), X(136,166), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90),
+  X(79,93), X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105),
+  X(92,106), X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166), X(3,9),
+  X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25),
+  X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41),
+  X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57),
+  X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73),
+  X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89),
+  X(84,90), X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102),
+  X(99,105), X(100,106), X(103,109), X(104,110), X(107,113), X(108,114),
+  X(111,117), X(112,118), X(115,121), X(116,122), X(119,125), X(120,126),
+  X(123,129), X(124,130), X(127,133), X(128,134), X(131,137), X(132,138),
+  X(135,141), X(136,142), X(139,145), X(140,146), X(143,149), X(144,150),
+  X(147,153), X(148,154), X(151,157), X(152,158), X(155,161), X(156,162),
+  X(159,165), X(160,166), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94),
+  X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(115,117), X(116,118), X(119,121),
+  X(120,122), X(123,125), X(124,126), X(127,129), X(128,130), X(131,133),
+  X(132,134), X(135,137), X(136,138), X(139,141), X(140,142), X(143,145),
+  X(144,146), X(147,149), X(148,150), X(151,153), X(152,154), X(155,157),
+  X(156,158), X(159,161), X(160,162), X(163,165), X(164,166), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(2,129), X(4,131),
+  X(6,133), X(8,135), X(10,137), X(12,139), X(14,141), X(16,143), X(18,145),
+  X(20,147), X(22,149), X(24,151), X(26,153), X(28,155), X(30,157), X(32,159),
+  X(34,161), X(36,163), X(38,165), X(40,167), X(2,65), X(4,67), X(6,69), X(8,71),
+  X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87),
+  X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99), X(38,101),
+  X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113), X(52,115),
+  X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127), X(66,129),
+  X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141), X(80,143),
+  X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155), X(94,157),
+  X(96,159), X(98,161), X(100,163), X(102,165), X(104,167), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83),
+  X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99),
+  X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113),
+  X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127),
+  X(98,129), X(100,131), X(102,133), X(104,135), X(106,137), X(108,139),
+  X(110,141), X(112,143), X(114,145), X(116,147), X(118,149), X(120,151),
+  X(122,153), X(124,155), X(126,157), X(128,159), X(130,161), X(132,163),
+  X(134,165), X(136,167), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27),
+  X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43),
+  X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59),
+  X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75),
+  X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91),
+  X(78,93), X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105),
+  X(92,107), X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57),
+  X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73),
+  X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89),
+  X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103),
+  X(98,105), X(100,107), X(102,109), X(104,111), X(106,113), X(108,115),
+  X(110,117), X(112,119), X(114,121), X(116,123), X(118,125), X(120,127),
+  X(122,129), X(124,131), X(126,133), X(128,135), X(130,137), X(132,139),
+  X(134,141), X(136,143), X(138,145), X(140,147), X(142,149), X(144,151),
+  X(146,153), X(148,155), X(150,157), X(152,159), X(154,161), X(156,163),
+  X(158,165), X(160,167), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133),
+  X(132,135), X(134,137), X(136,139), X(138,141), X(140,143), X(142,145),
+  X(144,147), X(146,149), X(148,151), X(150,153), X(152,155), X(154,157),
+  X(156,159), X(158,161), X(160,163), X(162,165), X(164,167), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167)
+};
+S(170) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124),
+  X(61,125), X(62,126), X(63,127), X(64,128), X(65,129), X(66,130), X(67,131),
+  X(68,132), X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138),
+  X(75,139), X(76,140), X(77,141), X(78,142), X(79,143), X(80,144), X(81,145),
+  X(82,146), X(83,147), X(84,148), X(85,149), X(86,150), X(87,151), X(88,152),
+  X(89,153), X(90,154), X(91,155), X(92,156), X(93,157), X(94,158), X(95,159),
+  X(96,160), X(97,161), X(98,162), X(99,163), X(100,164), X(101,165), X(102,166),
+  X(103,167), X(104,168), X(105,169), X(106,170), X(1,33), X(2,34), X(3,35),
+  X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43),
+  X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51),
+  X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59),
+  X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(135,167), X(136,168), X(137,169), X(138,170), X(33,129),
+  X(34,130), X(35,131), X(36,132), X(37,133), X(38,134), X(39,135), X(40,136),
+  X(41,137), X(42,138), X(43,139), X(44,140), X(45,141), X(46,142), X(47,143),
+  X(48,144), X(49,145), X(50,146), X(51,147), X(52,148), X(53,149), X(54,150),
+  X(55,151), X(56,152), X(57,153), X(58,154), X(59,155), X(60,156), X(61,157),
+  X(62,158), X(63,159), X(64,160), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76),
+  X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84),
+  X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92),
+  X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131),
+  X(100,132), X(101,133), X(102,134), X(103,135), X(104,136), X(105,137),
+  X(106,138), X(107,139), X(108,140), X(109,141), X(110,142), X(111,143),
+  X(112,144), X(113,145), X(114,146), X(115,147), X(116,148), X(117,149),
+  X(118,150), X(119,151), X(120,152), X(121,153), X(122,154), X(123,155),
+  X(124,156), X(125,157), X(126,158), X(127,159), X(128,160), X(1,17), X(2,18),
+  X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26),
+  X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50),
+  X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58),
+  X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82),
+  X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90),
+  X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113),
+  X(98,114), X(99,115), X(100,116), X(101,117), X(102,118), X(103,119),
+  X(104,120), X(105,121), X(106,122), X(107,123), X(108,124), X(109,125),
+  X(110,126), X(111,127), X(112,128), X(129,145), X(130,146), X(131,147),
+  X(132,148), X(133,149), X(134,150), X(135,151), X(136,152), X(137,153),
+  X(138,154), X(139,155), X(140,156), X(141,157), X(142,158), X(143,159),
+  X(144,160), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134),
+  X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141),
+  X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164),
+  X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(17,65),
+  X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73),
+  X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97),
+  X(50,98), X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104),
+  X(57,105), X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111),
+  X(64,112), X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134),
+  X(87,135), X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141),
+  X(94,142), X(95,143), X(96,144), X(113,161), X(114,162), X(115,163),
+  X(116,164), X(117,165), X(118,166), X(119,167), X(120,168), X(121,169),
+  X(122,170), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100), X(85,101),
+  X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107), X(92,108),
+  X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130), X(115,131),
+  X(116,132), X(117,133), X(118,134), X(119,135), X(120,136), X(121,137),
+  X(122,138), X(123,139), X(124,140), X(125,141), X(126,142), X(127,143),
+  X(128,144), X(145,161), X(146,162), X(147,163), X(148,164), X(149,165),
+  X(150,166), X(151,167), X(152,168), X(153,169), X(154,170), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(117,125),
+  X(118,126), X(119,127), X(120,128), X(129,137), X(130,138), X(131,139),
+  X(132,140), X(133,141), X(134,142), X(135,143), X(136,144), X(145,153),
+  X(146,154), X(147,155), X(148,156), X(149,157), X(150,158), X(151,159),
+  X(152,160), X(161,169), X(162,170), X(9,129), X(10,130), X(11,131), X(12,132),
+  X(13,133), X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147),
+  X(28,148), X(29,149), X(30,150), X(31,151), X(32,152), X(41,161), X(42,162),
+  X(43,163), X(44,164), X(45,165), X(46,166), X(47,167), X(48,168), X(9,65),
+  X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81),
+  X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97),
+  X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104),
+  X(57,113), X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119),
+  X(64,120), X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134),
+  X(79,135), X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149),
+  X(94,150), X(95,151), X(96,152), X(105,161), X(106,162), X(107,163),
+  X(108,164), X(109,165), X(110,166), X(111,167), X(112,168), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(105,129), X(106,130), X(107,131), X(108,132), X(109,133), X(110,134),
+  X(111,135), X(112,136), X(121,145), X(122,146), X(123,147), X(124,148),
+  X(125,149), X(126,150), X(127,151), X(128,152), X(137,161), X(138,162),
+  X(139,163), X(140,164), X(141,165), X(142,166), X(143,167), X(144,168),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(105,113), X(106,114), X(107,115), X(108,116), X(109,117),
+  X(110,118), X(111,119), X(112,120), X(121,129), X(122,130), X(123,131),
+  X(124,132), X(125,133), X(126,134), X(127,135), X(128,136), X(137,145),
+  X(138,146), X(139,147), X(140,148), X(141,149), X(142,150), X(143,151),
+  X(144,152), X(153,161), X(154,162), X(155,163), X(156,164), X(157,165),
+  X(158,166), X(159,167), X(160,168), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(147,151), X(148,152),
+  X(153,157), X(154,158), X(155,159), X(156,160), X(161,165), X(162,166),
+  X(163,167), X(164,168), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137),
+  X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148),
+  X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163),
+  X(40,164), X(45,169), X(46,170), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73),
+  X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89),
+  X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100),
+  X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115),
+  X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130),
+  X(71,131), X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145),
+  X(86,146), X(87,147), X(88,148), X(93,153), X(94,154), X(95,155), X(96,156),
+  X(101,161), X(102,162), X(103,163), X(104,164), X(109,169), X(110,170),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92),
+  X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107),
+  X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121), X(94,122),
+  X(95,123), X(96,124), X(101,129), X(102,130), X(103,131), X(104,132),
+  X(109,137), X(110,138), X(111,139), X(112,140), X(117,145), X(118,146),
+  X(119,147), X(120,148), X(125,153), X(126,154), X(127,155), X(128,156),
+  X(133,161), X(134,162), X(135,163), X(136,164), X(141,169), X(142,170),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76),
+  X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92),
+  X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106), X(95,107),
+  X(96,108), X(101,113), X(102,114), X(103,115), X(104,116), X(109,121),
+  X(110,122), X(111,123), X(112,124), X(117,129), X(118,130), X(119,131),
+  X(120,132), X(125,137), X(126,138), X(127,139), X(128,140), X(133,145),
+  X(134,146), X(135,147), X(136,148), X(141,153), X(142,154), X(143,155),
+  X(144,156), X(149,161), X(150,162), X(151,163), X(152,164), X(157,169),
+  X(158,170), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19),
+  X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35),
+  X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51),
+  X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67),
+  X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83),
+  X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99),
+  X(96,100), X(101,105), X(102,106), X(103,107), X(104,108), X(109,113),
+  X(110,114), X(111,115), X(112,116), X(117,121), X(118,122), X(119,123),
+  X(120,124), X(125,129), X(126,130), X(127,131), X(128,132), X(133,137),
+  X(134,138), X(135,139), X(136,140), X(141,145), X(142,146), X(143,147),
+  X(144,148), X(149,153), X(150,154), X(151,155), X(152,156), X(157,161),
+  X(158,162), X(159,163), X(160,164), X(165,169), X(166,170), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(3,129), X(4,130),
+  X(7,133), X(8,134), X(11,137), X(12,138), X(15,141), X(16,142), X(19,145),
+  X(20,146), X(23,149), X(24,150), X(27,153), X(28,154), X(31,157), X(32,158),
+  X(35,161), X(36,162), X(39,165), X(40,166), X(43,169), X(44,170), X(3,65),
+  X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81),
+  X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97),
+  X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110),
+  X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125),
+  X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138),
+  X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153),
+  X(92,154), X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74),
+  X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90),
+  X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105),
+  X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118),
+  X(91,121), X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133),
+  X(104,134), X(107,137), X(108,138), X(111,141), X(112,142), X(115,145),
+  X(116,146), X(119,149), X(120,150), X(123,153), X(124,154), X(127,157),
+  X(128,158), X(131,161), X(132,162), X(135,165), X(136,166), X(139,169),
+  X(140,170), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166),
+  X(155,169), X(156,170), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50),
+  X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66),
+  X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82),
+  X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134),
+  X(131,137), X(132,138), X(135,141), X(136,142), X(139,145), X(140,146),
+  X(143,149), X(144,150), X(147,153), X(148,154), X(151,157), X(152,158),
+  X(155,161), X(156,162), X(159,165), X(160,166), X(163,169), X(164,170), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134),
+  X(135,137), X(136,138), X(139,141), X(140,142), X(143,145), X(144,146),
+  X(147,149), X(148,150), X(151,153), X(152,154), X(155,157), X(156,158),
+  X(159,161), X(160,162), X(163,165), X(164,166), X(167,169), X(168,170), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139), X(14,141),
+  X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153), X(28,155),
+  X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167), X(42,169),
+  X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79),
+  X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95),
+  X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109),
+  X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(60,123),
+  X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135), X(74,137),
+  X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149), X(88,151),
+  X(90,153), X(92,155), X(94,157), X(96,159), X(98,161), X(100,163), X(102,165),
+  X(104,167), X(106,169), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75),
+  X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91),
+  X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105),
+  X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119),
+  X(90,121), X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133),
+  X(104,135), X(106,137), X(108,139), X(110,141), X(112,143), X(114,145),
+  X(116,147), X(118,149), X(120,151), X(122,153), X(124,155), X(126,157),
+  X(128,159), X(130,161), X(132,163), X(134,165), X(136,167), X(138,169),
+  X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31),
+  X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47),
+  X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63),
+  X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79),
+  X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95),
+  X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107), X(94,109),
+  X(96,111), X(98,113), X(100,115), X(102,117), X(104,119), X(106,121),
+  X(108,123), X(110,125), X(112,127), X(114,129), X(116,131), X(118,133),
+  X(120,135), X(122,137), X(124,139), X(126,141), X(128,143), X(130,145),
+  X(132,147), X(134,149), X(136,151), X(138,153), X(140,155), X(142,157),
+  X(144,159), X(146,161), X(148,163), X(150,165), X(152,167), X(154,169), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57),
+  X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73),
+  X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89),
+  X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103),
+  X(98,105), X(100,107), X(102,109), X(104,111), X(106,113), X(108,115),
+  X(110,117), X(112,119), X(114,121), X(116,123), X(118,125), X(120,127),
+  X(122,129), X(124,131), X(126,133), X(128,135), X(130,137), X(132,139),
+  X(134,141), X(136,143), X(138,145), X(140,147), X(142,149), X(144,151),
+  X(146,153), X(148,155), X(150,157), X(152,159), X(154,161), X(156,163),
+  X(158,165), X(160,167), X(162,169), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29),
+  X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45),
+  X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61),
+  X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77),
+  X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93),
+  X(92,95), X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107),
+  X(106,109), X(108,111), X(110,113), X(112,115), X(114,117), X(116,119),
+  X(118,121), X(120,123), X(122,125), X(124,127), X(126,129), X(128,131),
+  X(130,133), X(132,135), X(134,137), X(136,139), X(138,141), X(140,143),
+  X(142,145), X(144,147), X(146,149), X(148,151), X(150,153), X(152,155),
+  X(154,157), X(156,159), X(158,161), X(160,163), X(162,165), X(164,167),
+  X(166,169), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15),
+  X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31),
+  X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47),
+  X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63),
+  X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79),
+  X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95),
+  X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107), X(108,109),
+  X(110,111), X(112,113), X(114,115), X(116,117), X(118,119), X(120,121),
+  X(122,123), X(124,125), X(126,127), X(128,129), X(130,131), X(132,133),
+  X(134,135), X(136,137), X(138,139), X(140,141), X(142,143), X(144,145),
+  X(146,147), X(148,149), X(150,151), X(152,153), X(154,155), X(156,157),
+  X(158,159), X(160,161), X(162,163), X(164,165), X(166,167), X(168,169)
+};
+S(172) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70),
+  X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78),
+  X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86),
+  X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94),
+  X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101),
+  X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108),
+  X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115),
+  X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122),
+  X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(65,129),
+  X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136),
+  X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143),
+  X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150),
+  X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157),
+  X(94,158), X(95,159), X(96,160), X(97,161), X(98,162), X(99,163), X(100,164),
+  X(101,165), X(102,166), X(103,167), X(104,168), X(105,169), X(106,170),
+  X(107,171), X(108,172), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101),
+  X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108),
+  X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115),
+  X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122),
+  X(91,123), X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161),
+  X(130,162), X(131,163), X(132,164), X(133,165), X(134,166), X(135,167),
+  X(136,168), X(137,169), X(138,170), X(139,171), X(140,172), X(33,129),
+  X(34,130), X(35,131), X(36,132), X(37,133), X(38,134), X(39,135), X(40,136),
+  X(41,137), X(42,138), X(43,139), X(44,140), X(45,141), X(46,142), X(47,143),
+  X(48,144), X(49,145), X(50,146), X(51,147), X(52,148), X(53,149), X(54,150),
+  X(55,151), X(56,152), X(57,153), X(58,154), X(59,155), X(60,156), X(61,157),
+  X(62,158), X(63,159), X(64,160), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76),
+  X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84),
+  X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92),
+  X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131),
+  X(100,132), X(101,133), X(102,134), X(103,135), X(104,136), X(105,137),
+  X(106,138), X(107,139), X(108,140), X(109,141), X(110,142), X(111,143),
+  X(112,144), X(113,145), X(114,146), X(115,147), X(116,148), X(117,149),
+  X(118,150), X(119,151), X(120,152), X(121,153), X(122,154), X(123,155),
+  X(124,156), X(125,157), X(126,158), X(127,159), X(128,160), X(1,17), X(2,18),
+  X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26),
+  X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50),
+  X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58),
+  X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82),
+  X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90),
+  X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113),
+  X(98,114), X(99,115), X(100,116), X(101,117), X(102,118), X(103,119),
+  X(104,120), X(105,121), X(106,122), X(107,123), X(108,124), X(109,125),
+  X(110,126), X(111,127), X(112,128), X(129,145), X(130,146), X(131,147),
+  X(132,148), X(133,149), X(134,150), X(135,151), X(136,152), X(137,153),
+  X(138,154), X(139,155), X(140,156), X(141,157), X(142,158), X(143,159),
+  X(144,160), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134),
+  X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141),
+  X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164),
+  X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171),
+  X(60,172), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100), X(53,101),
+  X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107), X(60,108),
+  X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130), X(83,131),
+  X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137), X(90,138),
+  X(91,139), X(92,140), X(93,141), X(94,142), X(95,143), X(96,144), X(113,161),
+  X(114,162), X(115,163), X(116,164), X(117,165), X(118,166), X(119,167),
+  X(120,168), X(121,169), X(122,170), X(123,171), X(124,172), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(117,133), X(118,134),
+  X(119,135), X(120,136), X(121,137), X(122,138), X(123,139), X(124,140),
+  X(125,141), X(126,142), X(127,143), X(128,144), X(145,161), X(146,162),
+  X(147,163), X(148,164), X(149,165), X(150,166), X(151,167), X(152,168),
+  X(153,169), X(154,170), X(155,171), X(156,172), X(1,9), X(2,10), X(3,11),
+  X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27),
+  X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43),
+  X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59),
+  X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75),
+  X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91),
+  X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105), X(98,106),
+  X(99,107), X(100,108), X(101,109), X(102,110), X(103,111), X(104,112),
+  X(113,121), X(114,122), X(115,123), X(116,124), X(117,125), X(118,126),
+  X(119,127), X(120,128), X(129,137), X(130,138), X(131,139), X(132,140),
+  X(133,141), X(134,142), X(135,143), X(136,144), X(145,153), X(146,154),
+  X(147,155), X(148,156), X(149,157), X(150,158), X(151,159), X(152,160),
+  X(161,169), X(162,170), X(163,171), X(164,172), X(9,129), X(10,130), X(11,131),
+  X(12,132), X(13,133), X(14,134), X(15,135), X(16,136), X(25,145), X(26,146),
+  X(27,147), X(28,148), X(29,149), X(30,150), X(31,151), X(32,152), X(41,161),
+  X(42,162), X(43,163), X(44,164), X(45,165), X(46,166), X(47,167), X(48,168),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72),
+  X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88),
+  X(41,97), X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103),
+  X(48,104), X(57,113), X(58,114), X(59,115), X(60,116), X(61,117), X(62,118),
+  X(63,119), X(64,120), X(73,129), X(74,130), X(75,131), X(76,132), X(77,133),
+  X(78,134), X(79,135), X(80,136), X(89,145), X(90,146), X(91,147), X(92,148),
+  X(93,149), X(94,150), X(95,151), X(96,152), X(105,161), X(106,162), X(107,163),
+  X(108,164), X(109,165), X(110,166), X(111,167), X(112,168), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(105,129), X(106,130), X(107,131), X(108,132), X(109,133), X(110,134),
+  X(111,135), X(112,136), X(121,145), X(122,146), X(123,147), X(124,148),
+  X(125,149), X(126,150), X(127,151), X(128,152), X(137,161), X(138,162),
+  X(139,163), X(140,164), X(141,165), X(142,166), X(143,167), X(144,168),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(105,113), X(106,114), X(107,115), X(108,116), X(109,117),
+  X(110,118), X(111,119), X(112,120), X(121,129), X(122,130), X(123,131),
+  X(124,132), X(125,133), X(126,134), X(127,135), X(128,136), X(137,145),
+  X(138,146), X(139,147), X(140,148), X(141,149), X(142,150), X(143,151),
+  X(144,152), X(153,161), X(154,162), X(155,163), X(156,164), X(157,165),
+  X(158,166), X(159,167), X(160,168), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(147,151), X(148,152),
+  X(153,157), X(154,158), X(155,159), X(156,160), X(161,165), X(162,166),
+  X(163,167), X(164,168), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137),
+  X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148),
+  X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163),
+  X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(5,65), X(6,66),
+  X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82),
+  X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98),
+  X(39,99), X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113),
+  X(54,114), X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124),
+  X(69,129), X(70,130), X(71,131), X(72,132), X(77,137), X(78,138), X(79,139),
+  X(80,140), X(85,145), X(86,146), X(87,147), X(88,148), X(93,153), X(94,154),
+  X(95,155), X(96,156), X(101,161), X(102,162), X(103,163), X(104,164),
+  X(109,169), X(110,170), X(111,171), X(112,172), X(5,33), X(6,34), X(7,35),
+  X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51),
+  X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67),
+  X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83),
+  X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(103,131), X(104,132), X(109,137), X(110,138), X(111,139),
+  X(112,140), X(117,145), X(118,146), X(119,147), X(120,148), X(125,153),
+  X(126,154), X(127,155), X(128,156), X(133,161), X(134,162), X(135,163),
+  X(136,164), X(141,169), X(142,170), X(143,171), X(144,172), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(143,155), X(144,156), X(149,161),
+  X(150,162), X(151,163), X(152,164), X(157,169), X(158,170), X(159,171),
+  X(160,172), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19),
+  X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35),
+  X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51),
+  X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67),
+  X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83),
+  X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99),
+  X(96,100), X(101,105), X(102,106), X(103,107), X(104,108), X(109,113),
+  X(110,114), X(111,115), X(112,116), X(117,121), X(118,122), X(119,123),
+  X(120,124), X(125,129), X(126,130), X(127,131), X(128,132), X(133,137),
+  X(134,138), X(135,139), X(136,140), X(141,145), X(142,146), X(143,147),
+  X(144,148), X(149,153), X(150,154), X(151,155), X(152,156), X(157,161),
+  X(158,162), X(159,163), X(160,164), X(165,169), X(166,170), X(167,171),
+  X(168,172), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15),
+  X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31),
+  X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47),
+  X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63),
+  X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79),
+  X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95),
+  X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107), X(106,108),
+  X(109,111), X(110,112), X(113,115), X(114,116), X(117,119), X(118,120),
+  X(121,123), X(122,124), X(125,127), X(126,128), X(129,131), X(130,132),
+  X(133,135), X(134,136), X(137,139), X(138,140), X(141,143), X(142,144),
+  X(145,147), X(146,148), X(149,151), X(150,152), X(153,155), X(154,156),
+  X(157,159), X(158,160), X(161,163), X(162,164), X(165,167), X(166,168),
+  X(169,171), X(170,172), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137),
+  X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150),
+  X(27,153), X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165),
+  X(40,166), X(43,169), X(44,170), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73),
+  X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89),
+  X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102),
+  X(43,105), X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117),
+  X(56,118), X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130),
+  X(71,133), X(72,134), X(75,137), X(76,138), X(79,141), X(80,142), X(83,145),
+  X(84,146), X(87,149), X(88,150), X(91,153), X(92,154), X(95,157), X(96,158),
+  X(99,161), X(100,162), X(103,165), X(104,166), X(107,169), X(108,170), X(3,33),
+  X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49),
+  X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65),
+  X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81),
+  X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97),
+  X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110),
+  X(83,113), X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125),
+  X(96,126), X(99,129), X(100,130), X(103,133), X(104,134), X(107,137),
+  X(108,138), X(111,141), X(112,142), X(115,145), X(116,146), X(119,149),
+  X(120,150), X(123,153), X(124,154), X(127,157), X(128,158), X(131,161),
+  X(132,162), X(135,165), X(136,166), X(139,169), X(140,170), X(3,17), X(4,18),
+  X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34),
+  X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50),
+  X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66),
+  X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82),
+  X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(143,157), X(144,158), X(147,161),
+  X(148,162), X(151,165), X(152,166), X(155,169), X(156,170), X(3,9), X(4,10),
+  X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26),
+  X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42),
+  X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58),
+  X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74),
+  X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90),
+  X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102), X(99,105),
+  X(100,106), X(103,109), X(104,110), X(107,113), X(108,114), X(111,117),
+  X(112,118), X(115,121), X(116,122), X(119,125), X(120,126), X(123,129),
+  X(124,130), X(127,133), X(128,134), X(131,137), X(132,138), X(135,141),
+  X(136,142), X(139,145), X(140,146), X(143,149), X(144,150), X(147,153),
+  X(148,154), X(151,157), X(152,158), X(155,161), X(156,162), X(159,165),
+  X(160,166), X(163,169), X(164,170), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13),
+  X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29),
+  X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45),
+  X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61),
+  X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77),
+  X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93),
+  X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106),
+  X(107,109), X(108,110), X(111,113), X(112,114), X(115,117), X(116,118),
+  X(119,121), X(120,122), X(123,125), X(124,126), X(127,129), X(128,130),
+  X(131,133), X(132,134), X(135,137), X(136,138), X(139,141), X(140,142),
+  X(143,145), X(144,146), X(147,149), X(148,150), X(151,153), X(152,154),
+  X(155,157), X(156,158), X(159,161), X(160,162), X(163,165), X(164,166),
+  X(167,169), X(168,170), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(2,129), X(4,131), X(6,133), X(8,135),
+  X(10,137), X(12,139), X(14,141), X(16,143), X(18,145), X(20,147), X(22,149),
+  X(24,151), X(26,153), X(28,155), X(30,157), X(32,159), X(34,161), X(36,163),
+  X(38,165), X(40,167), X(42,169), X(44,171), X(2,65), X(4,67), X(6,69), X(8,71),
+  X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87),
+  X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99), X(38,101),
+  X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113), X(52,115),
+  X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127), X(66,129),
+  X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141), X(80,143),
+  X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155), X(94,157),
+  X(96,159), X(98,161), X(100,163), X(102,165), X(104,167), X(106,169),
+  X(108,171), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45),
+  X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61),
+  X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77),
+  X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93),
+  X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107),
+  X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121),
+  X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31),
+  X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47),
+  X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63),
+  X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79),
+  X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95),
+  X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107), X(94,109),
+  X(96,111), X(98,113), X(100,115), X(102,117), X(104,119), X(106,121),
+  X(108,123), X(110,125), X(112,127), X(114,129), X(116,131), X(118,133),
+  X(120,135), X(122,137), X(124,139), X(126,141), X(128,143), X(130,145),
+  X(132,147), X(134,149), X(136,151), X(138,153), X(140,155), X(142,157),
+  X(144,159), X(146,161), X(148,163), X(150,165), X(152,167), X(154,169),
+  X(156,171), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21),
+  X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37),
+  X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53),
+  X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69),
+  X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85),
+  X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(134,141), X(136,143), X(138,145), X(140,147),
+  X(142,149), X(144,151), X(146,153), X(148,155), X(150,157), X(152,159),
+  X(154,161), X(156,163), X(158,165), X(160,167), X(162,169), X(164,171), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(120,123),
+  X(122,125), X(124,127), X(126,129), X(128,131), X(130,133), X(132,135),
+  X(134,137), X(136,139), X(138,141), X(140,143), X(142,145), X(144,147),
+  X(146,149), X(148,151), X(150,153), X(152,155), X(154,157), X(156,159),
+  X(158,161), X(160,163), X(162,165), X(164,167), X(166,169), X(168,171), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171)
+};
+S(174) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(1,65), X(2,66), X(3,67), X(4,68),
+  X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76),
+  X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84),
+  X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92),
+  X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99),
+  X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106),
+  X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113),
+  X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120),
+  X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127),
+  X(64,128), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134),
+  X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141),
+  X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148),
+  X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154), X(91,155),
+  X(92,156), X(93,157), X(94,158), X(95,159), X(96,160), X(97,161), X(98,162),
+  X(99,163), X(100,164), X(101,165), X(102,166), X(103,167), X(104,168),
+  X(105,169), X(106,170), X(107,171), X(108,172), X(109,173), X(110,174),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103),
+  X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110),
+  X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117),
+  X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124),
+  X(93,125), X(94,126), X(95,127), X(96,128), X(129,161), X(130,162), X(131,163),
+  X(132,164), X(133,165), X(134,166), X(135,167), X(136,168), X(137,169),
+  X(138,170), X(139,171), X(140,172), X(141,173), X(142,174), X(33,129),
+  X(34,130), X(35,131), X(36,132), X(37,133), X(38,134), X(39,135), X(40,136),
+  X(41,137), X(42,138), X(43,139), X(44,140), X(45,141), X(46,142), X(47,143),
+  X(48,144), X(49,145), X(50,146), X(51,147), X(52,148), X(53,149), X(54,150),
+  X(55,151), X(56,152), X(57,153), X(58,154), X(59,155), X(60,156), X(61,157),
+  X(62,158), X(63,159), X(64,160), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76),
+  X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84),
+  X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92),
+  X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131),
+  X(100,132), X(101,133), X(102,134), X(103,135), X(104,136), X(105,137),
+  X(106,138), X(107,139), X(108,140), X(109,141), X(110,142), X(111,143),
+  X(112,144), X(113,145), X(114,146), X(115,147), X(116,148), X(117,149),
+  X(118,150), X(119,151), X(120,152), X(121,153), X(122,154), X(123,155),
+  X(124,156), X(125,157), X(126,158), X(127,159), X(128,160), X(1,17), X(2,18),
+  X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26),
+  X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50),
+  X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58),
+  X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82),
+  X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90),
+  X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113),
+  X(98,114), X(99,115), X(100,116), X(101,117), X(102,118), X(103,119),
+  X(104,120), X(105,121), X(106,122), X(107,123), X(108,124), X(109,125),
+  X(110,126), X(111,127), X(112,128), X(129,145), X(130,146), X(131,147),
+  X(132,148), X(133,149), X(134,150), X(135,151), X(136,152), X(137,153),
+  X(138,154), X(139,155), X(140,156), X(141,157), X(142,158), X(143,159),
+  X(144,160), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134),
+  X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141),
+  X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164),
+  X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171),
+  X(60,172), X(61,173), X(62,174), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(119,167), X(120,168), X(121,169), X(122,170), X(123,171),
+  X(124,172), X(125,173), X(126,174), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68),
+  X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76),
+  X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129),
+  X(114,130), X(115,131), X(116,132), X(117,133), X(118,134), X(119,135),
+  X(120,136), X(121,137), X(122,138), X(123,139), X(124,140), X(125,141),
+  X(126,142), X(127,143), X(128,144), X(145,161), X(146,162), X(147,163),
+  X(148,164), X(149,165), X(150,166), X(151,167), X(152,168), X(153,169),
+  X(154,170), X(155,171), X(156,172), X(157,173), X(158,174), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(117,125),
+  X(118,126), X(119,127), X(120,128), X(129,137), X(130,138), X(131,139),
+  X(132,140), X(133,141), X(134,142), X(135,143), X(136,144), X(145,153),
+  X(146,154), X(147,155), X(148,156), X(149,157), X(150,158), X(151,159),
+  X(152,160), X(161,169), X(162,170), X(163,171), X(164,172), X(165,173),
+  X(166,174), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134),
+  X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149),
+  X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164),
+  X(45,165), X(46,166), X(47,167), X(48,168), X(9,65), X(10,66), X(11,67),
+  X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83),
+  X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99),
+  X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114),
+  X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129),
+  X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136),
+  X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151),
+  X(96,152), X(105,161), X(106,162), X(107,163), X(108,164), X(109,165),
+  X(110,166), X(111,167), X(112,168), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52),
+  X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68),
+  X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84),
+  X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(121,145), X(122,146), X(123,147), X(124,148), X(125,149),
+  X(126,150), X(127,151), X(128,152), X(137,161), X(138,162), X(139,163),
+  X(140,164), X(141,165), X(142,166), X(143,167), X(144,168), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113),
+  X(106,114), X(107,115), X(108,116), X(109,117), X(110,118), X(111,119),
+  X(112,120), X(121,129), X(122,130), X(123,131), X(124,132), X(125,133),
+  X(126,134), X(127,135), X(128,136), X(137,145), X(138,146), X(139,147),
+  X(140,148), X(141,149), X(142,150), X(143,151), X(144,152), X(153,161),
+  X(154,162), X(155,163), X(156,164), X(157,165), X(158,166), X(159,167),
+  X(160,168), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137),
+  X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148),
+  X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163),
+  X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(5,65), X(6,66),
+  X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82),
+  X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98),
+  X(39,99), X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113),
+  X(54,114), X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124),
+  X(69,129), X(70,130), X(71,131), X(72,132), X(77,137), X(78,138), X(79,139),
+  X(80,140), X(85,145), X(86,146), X(87,147), X(88,148), X(93,153), X(94,154),
+  X(95,155), X(96,156), X(101,161), X(102,162), X(103,163), X(104,164),
+  X(109,169), X(110,170), X(111,171), X(112,172), X(5,33), X(6,34), X(7,35),
+  X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51),
+  X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67),
+  X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83),
+  X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(103,131), X(104,132), X(109,137), X(110,138), X(111,139),
+  X(112,140), X(117,145), X(118,146), X(119,147), X(120,148), X(125,153),
+  X(126,154), X(127,155), X(128,156), X(133,161), X(134,162), X(135,163),
+  X(136,164), X(141,169), X(142,170), X(143,171), X(144,172), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(143,155), X(144,156), X(149,161),
+  X(150,162), X(151,163), X(152,164), X(157,169), X(158,170), X(159,171),
+  X(160,172), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19),
+  X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35),
+  X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51),
+  X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67),
+  X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83),
+  X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99),
+  X(96,100), X(101,105), X(102,106), X(103,107), X(104,108), X(109,113),
+  X(110,114), X(111,115), X(112,116), X(117,121), X(118,122), X(119,123),
+  X(120,124), X(125,129), X(126,130), X(127,131), X(128,132), X(133,137),
+  X(134,138), X(135,139), X(136,140), X(141,145), X(142,146), X(143,147),
+  X(144,148), X(149,153), X(150,154), X(151,155), X(152,156), X(157,161),
+  X(158,162), X(159,163), X(160,164), X(165,169), X(166,170), X(167,171),
+  X(168,172), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15),
+  X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31),
+  X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47),
+  X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63),
+  X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79),
+  X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95),
+  X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107), X(106,108),
+  X(109,111), X(110,112), X(113,115), X(114,116), X(117,119), X(118,120),
+  X(121,123), X(122,124), X(125,127), X(126,128), X(129,131), X(130,132),
+  X(133,135), X(134,136), X(137,139), X(138,140), X(141,143), X(142,144),
+  X(145,147), X(146,148), X(149,151), X(150,152), X(153,155), X(154,156),
+  X(157,159), X(158,160), X(161,163), X(162,164), X(165,167), X(166,168),
+  X(169,171), X(170,172), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137),
+  X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150),
+  X(27,153), X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165),
+  X(40,166), X(43,169), X(44,170), X(47,173), X(48,174), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154),
+  X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(3,33), X(4,34), X(7,37),
+  X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53),
+  X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69),
+  X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85),
+  X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(127,157), X(128,158), X(131,161), X(132,162),
+  X(135,165), X(136,166), X(139,169), X(140,170), X(143,173), X(144,174),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(107,121),
+  X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(119,133),
+  X(120,134), X(123,137), X(124,138), X(127,141), X(128,142), X(131,145),
+  X(132,146), X(135,149), X(136,150), X(139,153), X(140,154), X(143,157),
+  X(144,158), X(147,161), X(148,162), X(151,165), X(152,166), X(155,169),
+  X(156,170), X(159,173), X(160,174), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13),
+  X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29),
+  X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45),
+  X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61),
+  X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77),
+  X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93),
+  X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106),
+  X(107,109), X(108,110), X(111,113), X(112,114), X(115,117), X(116,118),
+  X(119,121), X(120,122), X(123,125), X(124,126), X(127,129), X(128,130),
+  X(131,133), X(132,134), X(135,137), X(136,138), X(139,141), X(140,142),
+  X(143,145), X(144,146), X(147,149), X(148,150), X(151,153), X(152,154),
+  X(155,157), X(156,158), X(159,161), X(160,162), X(163,165), X(164,166),
+  X(167,169), X(168,170), X(171,173), X(172,174), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139), X(14,141),
+  X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153), X(28,155),
+  X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167), X(42,169),
+  X(44,171), X(46,173), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75),
+  X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91),
+  X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105),
+  X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119),
+  X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133),
+  X(72,135), X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147),
+  X(86,149), X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161),
+  X(100,163), X(102,165), X(104,167), X(106,169), X(108,171), X(110,173),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95),
+  X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109),
+  X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(92,123),
+  X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(108,115), X(110,117), X(112,119), X(114,121),
+  X(116,123), X(118,125), X(120,127), X(122,129), X(124,131), X(126,133),
+  X(128,135), X(130,137), X(132,139), X(134,141), X(136,143), X(138,145),
+  X(140,147), X(142,149), X(144,151), X(146,153), X(148,155), X(150,157),
+  X(152,159), X(154,161), X(156,163), X(158,165), X(160,167), X(162,169),
+  X(164,171), X(166,173), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133),
+  X(132,135), X(134,137), X(136,139), X(138,141), X(140,143), X(142,145),
+  X(144,147), X(146,149), X(148,151), X(150,153), X(152,155), X(154,157),
+  X(156,159), X(158,161), X(160,163), X(162,165), X(164,167), X(166,169),
+  X(168,171), X(170,173), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(142,143),
+  X(144,145), X(146,147), X(148,149), X(150,151), X(152,153), X(154,155),
+  X(156,157), X(158,159), X(160,161), X(162,163), X(164,165), X(166,167),
+  X(168,169), X(170,171), X(172,173)
+};
+S(176) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(1,65),
+  X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73),
+  X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81),
+  X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89),
+  X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97),
+  X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103), X(40,104),
+  X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110), X(47,111),
+  X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117), X(54,118),
+  X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124), X(61,125),
+  X(62,126), X(63,127), X(64,128), X(65,129), X(66,130), X(67,131), X(68,132),
+  X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139),
+  X(76,140), X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146),
+  X(83,147), X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153),
+  X(90,154), X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160),
+  X(97,161), X(98,162), X(99,163), X(100,164), X(101,165), X(102,166),
+  X(103,167), X(104,168), X(105,169), X(106,170), X(107,171), X(108,172),
+  X(109,173), X(110,174), X(111,175), X(112,176), X(1,33), X(2,34), X(3,35),
+  X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43),
+  X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51),
+  X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59),
+  X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(135,167), X(136,168), X(137,169), X(138,170), X(139,171),
+  X(140,172), X(141,173), X(142,174), X(143,175), X(144,176), X(33,129),
+  X(34,130), X(35,131), X(36,132), X(37,133), X(38,134), X(39,135), X(40,136),
+  X(41,137), X(42,138), X(43,139), X(44,140), X(45,141), X(46,142), X(47,143),
+  X(48,144), X(49,145), X(50,146), X(51,147), X(52,148), X(53,149), X(54,150),
+  X(55,151), X(56,152), X(57,153), X(58,154), X(59,155), X(60,156), X(61,157),
+  X(62,158), X(63,159), X(64,160), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76),
+  X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84),
+  X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92),
+  X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131),
+  X(100,132), X(101,133), X(102,134), X(103,135), X(104,136), X(105,137),
+  X(106,138), X(107,139), X(108,140), X(109,141), X(110,142), X(111,143),
+  X(112,144), X(113,145), X(114,146), X(115,147), X(116,148), X(117,149),
+  X(118,150), X(119,151), X(120,152), X(121,153), X(122,154), X(123,155),
+  X(124,156), X(125,157), X(126,158), X(127,159), X(128,160), X(1,17), X(2,18),
+  X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26),
+  X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50),
+  X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58),
+  X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82),
+  X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90),
+  X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113),
+  X(98,114), X(99,115), X(100,116), X(101,117), X(102,118), X(103,119),
+  X(104,120), X(105,121), X(106,122), X(107,123), X(108,124), X(109,125),
+  X(110,126), X(111,127), X(112,128), X(129,145), X(130,146), X(131,147),
+  X(132,148), X(133,149), X(134,150), X(135,151), X(136,152), X(137,153),
+  X(138,154), X(139,155), X(140,156), X(141,157), X(142,158), X(143,159),
+  X(144,160), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134),
+  X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141),
+  X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164),
+  X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171),
+  X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135),
+  X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142),
+  X(95,143), X(96,144), X(113,161), X(114,162), X(115,163), X(116,164),
+  X(117,165), X(118,166), X(119,167), X(120,168), X(121,169), X(122,170),
+  X(123,171), X(124,172), X(125,173), X(126,174), X(127,175), X(128,176),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72),
+  X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80),
+  X(81,97), X(82,98), X(83,99), X(84,100), X(85,101), X(86,102), X(87,103),
+  X(88,104), X(89,105), X(90,106), X(91,107), X(92,108), X(93,109), X(94,110),
+  X(95,111), X(96,112), X(113,129), X(114,130), X(115,131), X(116,132),
+  X(117,133), X(118,134), X(119,135), X(120,136), X(121,137), X(122,138),
+  X(123,139), X(124,140), X(125,141), X(126,142), X(127,143), X(128,144),
+  X(145,161), X(146,162), X(147,163), X(148,164), X(149,165), X(150,166),
+  X(151,167), X(152,168), X(153,169), X(154,170), X(155,171), X(156,172),
+  X(157,173), X(158,174), X(159,175), X(160,176), X(1,9), X(2,10), X(3,11),
+  X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27),
+  X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43),
+  X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59),
+  X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75),
+  X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91),
+  X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105), X(98,106),
+  X(99,107), X(100,108), X(101,109), X(102,110), X(103,111), X(104,112),
+  X(113,121), X(114,122), X(115,123), X(116,124), X(117,125), X(118,126),
+  X(119,127), X(120,128), X(129,137), X(130,138), X(131,139), X(132,140),
+  X(133,141), X(134,142), X(135,143), X(136,144), X(145,153), X(146,154),
+  X(147,155), X(148,156), X(149,157), X(150,158), X(151,159), X(152,160),
+  X(161,169), X(162,170), X(163,171), X(164,172), X(165,173), X(166,174),
+  X(167,175), X(168,176), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133),
+  X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148),
+  X(29,149), X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163),
+  X(44,164), X(45,165), X(46,166), X(47,167), X(48,168), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98),
+  X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113),
+  X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120),
+  X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135),
+  X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150),
+  X(95,151), X(96,152), X(105,161), X(106,162), X(107,163), X(108,164),
+  X(109,165), X(110,166), X(111,167), X(112,168), X(9,33), X(10,34), X(11,35),
+  X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51),
+  X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67),
+  X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83),
+  X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(121,145), X(122,146), X(123,147), X(124,148), X(125,149),
+  X(126,150), X(127,151), X(128,152), X(137,161), X(138,162), X(139,163),
+  X(140,164), X(141,165), X(142,166), X(143,167), X(144,168), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113),
+  X(106,114), X(107,115), X(108,116), X(109,117), X(110,118), X(111,119),
+  X(112,120), X(121,129), X(122,130), X(123,131), X(124,132), X(125,133),
+  X(126,134), X(127,135), X(128,136), X(137,145), X(138,146), X(139,147),
+  X(140,148), X(141,149), X(142,150), X(143,151), X(144,152), X(153,161),
+  X(154,162), X(155,163), X(156,164), X(157,165), X(158,166), X(159,167),
+  X(160,168), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(5,129), X(6,130), X(7,131),
+  X(8,132), X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146),
+  X(23,147), X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(37,161),
+  X(38,162), X(39,163), X(40,164), X(45,169), X(46,170), X(47,171), X(48,172),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92),
+  X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107),
+  X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122),
+  X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132), X(77,137),
+  X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147), X(88,148),
+  X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162), X(103,163),
+  X(104,164), X(109,169), X(110,170), X(111,171), X(112,172), X(5,33), X(6,34),
+  X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50),
+  X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66),
+  X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82),
+  X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98),
+  X(71,99), X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113),
+  X(86,114), X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124),
+  X(101,129), X(102,130), X(103,131), X(104,132), X(109,137), X(110,138),
+  X(111,139), X(112,140), X(117,145), X(118,146), X(119,147), X(120,148),
+  X(125,153), X(126,154), X(127,155), X(128,156), X(133,161), X(134,162),
+  X(135,163), X(136,164), X(141,169), X(142,170), X(143,171), X(144,172),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76),
+  X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92),
+  X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106), X(95,107),
+  X(96,108), X(101,113), X(102,114), X(103,115), X(104,116), X(109,121),
+  X(110,122), X(111,123), X(112,124), X(117,129), X(118,130), X(119,131),
+  X(120,132), X(125,137), X(126,138), X(127,139), X(128,140), X(133,145),
+  X(134,146), X(135,147), X(136,148), X(141,153), X(142,154), X(143,155),
+  X(144,156), X(149,161), X(150,162), X(151,163), X(152,164), X(157,169),
+  X(158,170), X(159,171), X(160,172), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(149,153), X(150,154), X(151,155),
+  X(152,156), X(157,161), X(158,162), X(159,163), X(160,164), X(165,169),
+  X(166,170), X(167,171), X(168,172), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11),
+  X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27),
+  X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43),
+  X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59),
+  X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75),
+  X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91),
+  X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104),
+  X(105,107), X(106,108), X(109,111), X(110,112), X(113,115), X(114,116),
+  X(117,119), X(118,120), X(121,123), X(122,124), X(125,127), X(126,128),
+  X(129,131), X(130,132), X(133,135), X(134,136), X(137,139), X(138,140),
+  X(141,143), X(142,144), X(145,147), X(146,148), X(149,151), X(150,152),
+  X(153,155), X(154,156), X(157,159), X(158,160), X(161,163), X(162,164),
+  X(165,167), X(166,168), X(169,171), X(170,172), X(173,175), X(174,176),
+  X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138), X(15,141),
+  X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153), X(28,154),
+  X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166), X(43,169),
+  X(44,170), X(47,173), X(48,174), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73),
+  X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89),
+  X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102),
+  X(43,105), X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117),
+  X(56,118), X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130),
+  X(71,133), X(72,134), X(75,137), X(76,138), X(79,141), X(80,142), X(83,145),
+  X(84,146), X(87,149), X(88,150), X(91,153), X(92,154), X(95,157), X(96,158),
+  X(99,161), X(100,162), X(103,165), X(104,166), X(107,169), X(108,170),
+  X(111,173), X(112,174), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74),
+  X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90),
+  X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105),
+  X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118),
+  X(91,121), X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133),
+  X(104,134), X(107,137), X(108,138), X(111,141), X(112,142), X(115,145),
+  X(116,146), X(119,149), X(120,150), X(123,153), X(124,154), X(127,157),
+  X(128,158), X(131,161), X(132,162), X(135,165), X(136,166), X(139,169),
+  X(140,170), X(143,173), X(144,174), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70),
+  X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86),
+  X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98), X(87,101),
+  X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113), X(100,114),
+  X(103,117), X(104,118), X(107,121), X(108,122), X(111,125), X(112,126),
+  X(115,129), X(116,130), X(119,133), X(120,134), X(123,137), X(124,138),
+  X(127,141), X(128,142), X(131,145), X(132,146), X(135,149), X(136,150),
+  X(139,153), X(140,154), X(143,157), X(144,158), X(147,161), X(148,162),
+  X(151,165), X(152,166), X(155,169), X(156,170), X(159,173), X(160,174), X(3,9),
+  X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25),
+  X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41),
+  X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57),
+  X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73),
+  X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89),
+  X(84,90), X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102),
+  X(99,105), X(100,106), X(103,109), X(104,110), X(107,113), X(108,114),
+  X(111,117), X(112,118), X(115,121), X(116,122), X(119,125), X(120,126),
+  X(123,129), X(124,130), X(127,133), X(128,134), X(131,137), X(132,138),
+  X(135,141), X(136,142), X(139,145), X(140,146), X(143,149), X(144,150),
+  X(147,153), X(148,154), X(151,157), X(152,158), X(155,161), X(156,162),
+  X(159,165), X(160,166), X(163,169), X(164,170), X(167,173), X(168,174), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134),
+  X(135,137), X(136,138), X(139,141), X(140,142), X(143,145), X(144,146),
+  X(147,149), X(148,150), X(151,153), X(152,154), X(155,157), X(156,158),
+  X(159,161), X(160,162), X(163,165), X(164,166), X(167,169), X(168,170),
+  X(171,173), X(172,174), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(2,129), X(4,131),
+  X(6,133), X(8,135), X(10,137), X(12,139), X(14,141), X(16,143), X(18,145),
+  X(20,147), X(22,149), X(24,151), X(26,153), X(28,155), X(30,157), X(32,159),
+  X(34,161), X(36,163), X(38,165), X(40,167), X(42,169), X(44,171), X(46,173),
+  X(48,175), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107),
+  X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121),
+  X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135),
+  X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149),
+  X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161), X(100,163),
+  X(102,165), X(104,167), X(106,169), X(108,171), X(110,173), X(112,175),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95),
+  X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109),
+  X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(92,123),
+  X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27),
+  X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43),
+  X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59),
+  X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75),
+  X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91),
+  X(78,93), X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105),
+  X(92,107), X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(160,175), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45),
+  X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61),
+  X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77),
+  X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93),
+  X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107),
+  X(102,109), X(104,111), X(106,113), X(108,115), X(110,117), X(112,119),
+  X(114,121), X(116,123), X(118,125), X(120,127), X(122,129), X(124,131),
+  X(126,133), X(128,135), X(130,137), X(132,139), X(134,141), X(136,143),
+  X(138,145), X(140,147), X(142,149), X(144,151), X(146,153), X(148,155),
+  X(150,157), X(152,159), X(154,161), X(156,163), X(158,165), X(160,167),
+  X(162,169), X(164,171), X(166,173), X(168,175), X(2,5), X(4,7), X(6,9),
+  X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25),
+  X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41),
+  X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57),
+  X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73),
+  X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89),
+  X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101), X(100,103),
+  X(102,105), X(104,107), X(106,109), X(108,111), X(110,113), X(112,115),
+  X(114,117), X(116,119), X(118,121), X(120,123), X(122,125), X(124,127),
+  X(126,129), X(128,131), X(130,133), X(132,135), X(134,137), X(136,139),
+  X(138,141), X(140,143), X(142,145), X(144,147), X(146,149), X(148,151),
+  X(150,153), X(152,155), X(154,157), X(156,159), X(158,161), X(160,163),
+  X(162,165), X(164,167), X(166,169), X(168,171), X(170,173), X(172,175), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175)
+};
+S(178) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71),
+  X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79),
+  X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87),
+  X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95),
+  X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102),
+  X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109),
+  X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116),
+  X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123),
+  X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(65,129), X(66,130),
+  X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136), X(73,137),
+  X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143), X(80,144),
+  X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150), X(87,151),
+  X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157), X(94,158),
+  X(95,159), X(96,160), X(97,161), X(98,162), X(99,163), X(100,164), X(101,165),
+  X(102,166), X(103,167), X(104,168), X(105,169), X(106,170), X(107,171),
+  X(108,172), X(109,173), X(110,174), X(111,175), X(112,176), X(113,177),
+  X(114,178), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39),
+  X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47),
+  X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55),
+  X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63),
+  X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102),
+  X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109),
+  X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116),
+  X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123),
+  X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161), X(130,162),
+  X(131,163), X(132,164), X(133,165), X(134,166), X(135,167), X(136,168),
+  X(137,169), X(138,170), X(139,171), X(140,172), X(141,173), X(142,174),
+  X(143,175), X(144,176), X(145,177), X(146,178), X(33,129), X(34,130),
+  X(35,131), X(36,132), X(37,133), X(38,134), X(39,135), X(40,136), X(41,137),
+  X(42,138), X(43,139), X(44,140), X(45,141), X(46,142), X(47,143), X(48,144),
+  X(49,145), X(50,146), X(51,147), X(52,148), X(53,149), X(54,150), X(55,151),
+  X(56,152), X(57,153), X(58,154), X(59,155), X(60,156), X(61,157), X(62,158),
+  X(63,159), X(64,160), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69),
+  X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77),
+  X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85),
+  X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93),
+  X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131), X(100,132),
+  X(101,133), X(102,134), X(103,135), X(104,136), X(105,137), X(106,138),
+  X(107,139), X(108,140), X(109,141), X(110,142), X(111,143), X(112,144),
+  X(113,145), X(114,146), X(115,147), X(116,148), X(117,149), X(118,150),
+  X(119,151), X(120,152), X(121,153), X(122,154), X(123,155), X(124,156),
+  X(125,157), X(126,158), X(127,159), X(128,160), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163),
+  X(52,164), X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170),
+  X(59,171), X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(17,65),
+  X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73),
+  X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97),
+  X(50,98), X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104),
+  X(57,105), X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111),
+  X(64,112), X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134),
+  X(87,135), X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141),
+  X(94,142), X(95,143), X(96,144), X(113,161), X(114,162), X(115,163),
+  X(116,164), X(117,165), X(118,166), X(119,167), X(120,168), X(121,169),
+  X(122,170), X(123,171), X(124,172), X(125,173), X(126,174), X(127,175),
+  X(128,176), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100), X(85,101),
+  X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107), X(92,108),
+  X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130), X(115,131),
+  X(116,132), X(117,133), X(118,134), X(119,135), X(120,136), X(121,137),
+  X(122,138), X(123,139), X(124,140), X(125,141), X(126,142), X(127,143),
+  X(128,144), X(145,161), X(146,162), X(147,163), X(148,164), X(149,165),
+  X(150,166), X(151,167), X(152,168), X(153,169), X(154,170), X(155,171),
+  X(156,172), X(157,173), X(158,174), X(159,175), X(160,176), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(117,125),
+  X(118,126), X(119,127), X(120,128), X(129,137), X(130,138), X(131,139),
+  X(132,140), X(133,141), X(134,142), X(135,143), X(136,144), X(145,153),
+  X(146,154), X(147,155), X(148,156), X(149,157), X(150,158), X(151,159),
+  X(152,160), X(161,169), X(162,170), X(163,171), X(164,172), X(165,173),
+  X(166,174), X(167,175), X(168,176), X(9,129), X(10,130), X(11,131), X(12,132),
+  X(13,133), X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147),
+  X(28,148), X(29,149), X(30,150), X(31,151), X(32,152), X(41,161), X(42,162),
+  X(43,163), X(44,164), X(45,165), X(46,166), X(47,167), X(48,168), X(57,177),
+  X(58,178), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71),
+  X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87),
+  X(32,88), X(41,97), X(42,98), X(43,99), X(44,100), X(45,101), X(46,102),
+  X(47,103), X(48,104), X(57,113), X(58,114), X(59,115), X(60,116), X(61,117),
+  X(62,118), X(63,119), X(64,120), X(73,129), X(74,130), X(75,131), X(76,132),
+  X(77,133), X(78,134), X(79,135), X(80,136), X(89,145), X(90,146), X(91,147),
+  X(92,148), X(93,149), X(94,150), X(95,151), X(96,152), X(105,161), X(106,162),
+  X(107,163), X(108,164), X(109,165), X(110,166), X(111,167), X(112,168),
+  X(121,177), X(122,178), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37),
+  X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53),
+  X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69),
+  X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85),
+  X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100),
+  X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115),
+  X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130),
+  X(107,131), X(108,132), X(109,133), X(110,134), X(111,135), X(112,136),
+  X(121,145), X(122,146), X(123,147), X(124,148), X(125,149), X(126,150),
+  X(127,151), X(128,152), X(137,161), X(138,162), X(139,163), X(140,164),
+  X(141,165), X(142,166), X(143,167), X(144,168), X(153,177), X(154,178),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(105,113), X(106,114), X(107,115), X(108,116), X(109,117),
+  X(110,118), X(111,119), X(112,120), X(121,129), X(122,130), X(123,131),
+  X(124,132), X(125,133), X(126,134), X(127,135), X(128,136), X(137,145),
+  X(138,146), X(139,147), X(140,148), X(141,149), X(142,150), X(143,151),
+  X(144,152), X(153,161), X(154,162), X(155,163), X(156,164), X(157,165),
+  X(158,166), X(159,167), X(160,168), X(169,177), X(170,178), X(1,5), X(2,6),
+  X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22),
+  X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38),
+  X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54),
+  X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70),
+  X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86),
+  X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96), X(97,101),
+  X(98,102), X(99,103), X(100,104), X(105,109), X(106,110), X(107,111),
+  X(108,112), X(113,117), X(114,118), X(115,119), X(116,120), X(121,125),
+  X(122,126), X(123,127), X(124,128), X(129,133), X(130,134), X(131,135),
+  X(132,136), X(137,141), X(138,142), X(139,143), X(140,144), X(145,149),
+  X(146,150), X(147,151), X(148,152), X(153,157), X(154,158), X(155,159),
+  X(156,160), X(161,165), X(162,166), X(163,167), X(164,168), X(169,173),
+  X(170,174), X(171,175), X(172,176), X(5,129), X(6,130), X(7,131), X(8,132),
+  X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147),
+  X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162),
+  X(39,163), X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(53,177),
+  X(54,178), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147),
+  X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162),
+  X(103,163), X(104,164), X(109,169), X(110,170), X(111,171), X(112,172),
+  X(117,177), X(118,178), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105),
+  X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116),
+  X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(143,155), X(144,156), X(149,161),
+  X(150,162), X(151,163), X(152,164), X(157,169), X(158,170), X(159,171),
+  X(160,172), X(165,177), X(166,178), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(149,153), X(150,154), X(151,155),
+  X(152,156), X(157,161), X(158,162), X(159,163), X(160,164), X(165,169),
+  X(166,170), X(167,171), X(168,172), X(173,177), X(174,178), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(3,129), X(4,130), X(7,133), X(8,134),
+  X(11,137), X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149),
+  X(24,150), X(27,153), X(28,154), X(31,157), X(32,158), X(35,161), X(36,162),
+  X(39,165), X(40,166), X(43,169), X(44,170), X(47,173), X(48,174), X(51,177),
+  X(52,178), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77),
+  X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93),
+  X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106),
+  X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121),
+  X(60,122), X(63,125), X(64,126), X(67,129), X(68,130), X(71,133), X(72,134),
+  X(75,137), X(76,138), X(79,141), X(80,142), X(83,145), X(84,146), X(87,149),
+  X(88,150), X(91,153), X(92,154), X(95,157), X(96,158), X(99,161), X(100,162),
+  X(103,165), X(104,166), X(107,169), X(108,170), X(111,173), X(112,174),
+  X(115,177), X(116,178), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74),
+  X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90),
+  X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105),
+  X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118),
+  X(91,121), X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133),
+  X(104,134), X(107,137), X(108,138), X(111,141), X(112,142), X(115,145),
+  X(116,146), X(119,149), X(120,150), X(123,153), X(124,154), X(127,157),
+  X(128,158), X(131,161), X(132,162), X(135,165), X(136,166), X(139,169),
+  X(140,170), X(143,173), X(144,174), X(147,177), X(148,178), X(3,17), X(4,18),
+  X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34),
+  X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50),
+  X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66),
+  X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82),
+  X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(143,157), X(144,158), X(147,161),
+  X(148,162), X(151,165), X(152,166), X(155,169), X(156,170), X(159,173),
+  X(160,174), X(163,177), X(164,178), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70),
+  X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86),
+  X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101),
+  X(100,102), X(103,105), X(104,106), X(107,109), X(108,110), X(111,113),
+  X(112,114), X(115,117), X(116,118), X(119,121), X(120,122), X(123,125),
+  X(124,126), X(127,129), X(128,130), X(131,133), X(132,134), X(135,137),
+  X(136,138), X(139,141), X(140,142), X(143,145), X(144,146), X(147,149),
+  X(148,150), X(151,153), X(152,154), X(155,157), X(156,158), X(159,161),
+  X(160,162), X(163,165), X(164,166), X(167,169), X(168,170), X(171,173),
+  X(172,174), X(175,177), X(176,178), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(2,65), X(4,67),
+  X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83),
+  X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99),
+  X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113),
+  X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127),
+  X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141),
+  X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155),
+  X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83),
+  X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99),
+  X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113),
+  X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127),
+  X(98,129), X(100,131), X(102,133), X(104,135), X(106,137), X(108,139),
+  X(110,141), X(112,143), X(114,145), X(116,147), X(118,149), X(120,151),
+  X(122,153), X(124,155), X(126,157), X(128,159), X(130,161), X(132,163),
+  X(134,165), X(136,167), X(138,169), X(140,171), X(142,173), X(144,175),
+  X(146,177), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(160,175), X(162,177), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75),
+  X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91),
+  X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105),
+  X(100,107), X(102,109), X(104,111), X(106,113), X(108,115), X(110,117),
+  X(112,119), X(114,121), X(116,123), X(118,125), X(120,127), X(122,129),
+  X(124,131), X(126,133), X(128,135), X(130,137), X(132,139), X(134,141),
+  X(136,143), X(138,145), X(140,147), X(142,149), X(144,151), X(146,153),
+  X(148,155), X(150,157), X(152,159), X(154,161), X(156,163), X(158,165),
+  X(160,167), X(162,169), X(164,171), X(166,173), X(168,175), X(170,177), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(120,123),
+  X(122,125), X(124,127), X(126,129), X(128,131), X(130,133), X(132,135),
+  X(134,137), X(136,139), X(138,141), X(140,143), X(142,145), X(144,147),
+  X(146,149), X(148,151), X(150,153), X(152,155), X(154,157), X(156,159),
+  X(158,161), X(160,163), X(162,165), X(164,167), X(166,169), X(168,171),
+  X(170,173), X(172,175), X(174,177), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153),
+  X(154,155), X(156,157), X(158,159), X(160,161), X(162,163), X(164,165),
+  X(166,167), X(168,169), X(170,171), X(172,173), X(174,175), X(176,177)
+};
+S(180) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69),
+  X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77),
+  X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85),
+  X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93),
+  X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100),
+  X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107),
+  X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114),
+  X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121),
+  X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128),
+  X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135),
+  X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142),
+  X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149),
+  X(86,150), X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156),
+  X(93,157), X(94,158), X(95,159), X(96,160), X(97,161), X(98,162), X(99,163),
+  X(100,164), X(101,165), X(102,166), X(103,167), X(104,168), X(105,169),
+  X(106,170), X(107,171), X(108,172), X(109,173), X(110,174), X(111,175),
+  X(112,176), X(113,177), X(114,178), X(115,179), X(116,180), X(1,33), X(2,34),
+  X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42),
+  X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50),
+  X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58),
+  X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98),
+  X(67,99), X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105),
+  X(74,106), X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112),
+  X(81,113), X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119),
+  X(88,120), X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126),
+  X(95,127), X(96,128), X(129,161), X(130,162), X(131,163), X(132,164),
+  X(133,165), X(134,166), X(135,167), X(136,168), X(137,169), X(138,170),
+  X(139,171), X(140,172), X(141,173), X(142,174), X(143,175), X(144,176),
+  X(145,177), X(146,178), X(147,179), X(148,180), X(33,129), X(34,130),
+  X(35,131), X(36,132), X(37,133), X(38,134), X(39,135), X(40,136), X(41,137),
+  X(42,138), X(43,139), X(44,140), X(45,141), X(46,142), X(47,143), X(48,144),
+  X(49,145), X(50,146), X(51,147), X(52,148), X(53,149), X(54,150), X(55,151),
+  X(56,152), X(57,153), X(58,154), X(59,155), X(60,156), X(61,157), X(62,158),
+  X(63,159), X(64,160), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69),
+  X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77),
+  X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85),
+  X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93),
+  X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131), X(100,132),
+  X(101,133), X(102,134), X(103,135), X(104,136), X(105,137), X(106,138),
+  X(107,139), X(108,140), X(109,141), X(110,142), X(111,143), X(112,144),
+  X(113,145), X(114,146), X(115,147), X(116,148), X(117,149), X(118,150),
+  X(119,151), X(120,152), X(121,153), X(122,154), X(123,155), X(124,156),
+  X(125,157), X(126,158), X(127,159), X(128,160), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(17,129), X(18,130),
+  X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136), X(25,137),
+  X(26,138), X(27,139), X(28,140), X(29,141), X(30,142), X(31,143), X(32,144),
+  X(49,161), X(50,162), X(51,163), X(52,164), X(53,165), X(54,166), X(55,167),
+  X(56,168), X(57,169), X(58,170), X(59,171), X(60,172), X(61,173), X(62,174),
+  X(63,175), X(64,176), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69),
+  X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77),
+  X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100),
+  X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107),
+  X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130),
+  X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137),
+  X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143), X(96,144),
+  X(113,161), X(114,162), X(115,163), X(116,164), X(117,165), X(118,166),
+  X(119,167), X(120,168), X(121,169), X(122,170), X(123,171), X(124,172),
+  X(125,173), X(126,174), X(127,175), X(128,176), X(17,33), X(18,34), X(19,35),
+  X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43),
+  X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67),
+  X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75),
+  X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129),
+  X(114,130), X(115,131), X(116,132), X(117,133), X(118,134), X(119,135),
+  X(120,136), X(121,137), X(122,138), X(123,139), X(124,140), X(125,141),
+  X(126,142), X(127,143), X(128,144), X(145,161), X(146,162), X(147,163),
+  X(148,164), X(149,165), X(150,166), X(151,167), X(152,168), X(153,169),
+  X(154,170), X(155,171), X(156,172), X(157,173), X(158,174), X(159,175),
+  X(160,176), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15),
+  X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31),
+  X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47),
+  X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63),
+  X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79),
+  X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95),
+  X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(145,153), X(146,154), X(147,155), X(148,156), X(149,157), X(150,158),
+  X(151,159), X(152,160), X(161,169), X(162,170), X(163,171), X(164,172),
+  X(165,173), X(166,174), X(167,175), X(168,176), X(9,129), X(10,130), X(11,131),
+  X(12,132), X(13,133), X(14,134), X(15,135), X(16,136), X(25,145), X(26,146),
+  X(27,147), X(28,148), X(29,149), X(30,150), X(31,151), X(32,152), X(41,161),
+  X(42,162), X(43,163), X(44,164), X(45,165), X(46,166), X(47,167), X(48,168),
+  X(57,177), X(58,178), X(59,179), X(60,180), X(9,65), X(10,66), X(11,67),
+  X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83),
+  X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99),
+  X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114),
+  X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129),
+  X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136),
+  X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151),
+  X(96,152), X(105,161), X(106,162), X(107,163), X(108,164), X(109,165),
+  X(110,166), X(111,167), X(112,168), X(121,177), X(122,178), X(123,179),
+  X(124,180), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38),
+  X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54),
+  X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70),
+  X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86),
+  X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100), X(77,101),
+  X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115), X(92,116),
+  X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130), X(107,131),
+  X(108,132), X(109,133), X(110,134), X(111,135), X(112,136), X(121,145),
+  X(122,146), X(123,147), X(124,148), X(125,149), X(126,150), X(127,151),
+  X(128,152), X(137,161), X(138,162), X(139,163), X(140,164), X(141,165),
+  X(142,166), X(143,167), X(144,168), X(153,177), X(154,178), X(155,179),
+  X(156,180), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22),
+  X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38),
+  X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54),
+  X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70),
+  X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86),
+  X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100), X(93,101),
+  X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(139,147), X(140,148), X(141,149),
+  X(142,150), X(143,151), X(144,152), X(153,161), X(154,162), X(155,163),
+  X(156,164), X(157,165), X(158,166), X(159,167), X(160,168), X(169,177),
+  X(170,178), X(171,179), X(172,180), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(147,151), X(148,152),
+  X(153,157), X(154,158), X(155,159), X(156,160), X(161,165), X(162,166),
+  X(163,167), X(164,168), X(169,173), X(170,174), X(171,175), X(172,176),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153), X(30,154),
+  X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164), X(45,169),
+  X(46,170), X(47,171), X(48,172), X(53,177), X(54,178), X(55,179), X(56,180),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92),
+  X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107),
+  X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122),
+  X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132), X(77,137),
+  X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147), X(88,148),
+  X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162), X(103,163),
+  X(104,164), X(109,169), X(110,170), X(111,171), X(112,172), X(117,177),
+  X(118,178), X(119,179), X(120,180), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52),
+  X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68),
+  X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84),
+  X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(103,131), X(104,132), X(109,137), X(110,138), X(111,139),
+  X(112,140), X(117,145), X(118,146), X(119,147), X(120,148), X(125,153),
+  X(126,154), X(127,155), X(128,156), X(133,161), X(134,162), X(135,163),
+  X(136,164), X(141,169), X(142,170), X(143,171), X(144,172), X(149,177),
+  X(150,178), X(151,179), X(152,180), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27),
+  X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43),
+  X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59),
+  X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75),
+  X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91),
+  X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106),
+  X(103,107), X(104,108), X(109,113), X(110,114), X(111,115), X(112,116),
+  X(117,121), X(118,122), X(119,123), X(120,124), X(125,129), X(126,130),
+  X(127,131), X(128,132), X(133,137), X(134,138), X(135,139), X(136,140),
+  X(141,145), X(142,146), X(143,147), X(144,148), X(149,153), X(150,154),
+  X(151,155), X(152,156), X(157,161), X(158,162), X(159,163), X(160,164),
+  X(165,169), X(166,170), X(167,171), X(168,172), X(173,177), X(174,178),
+  X(175,179), X(176,180), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(129,131),
+  X(130,132), X(133,135), X(134,136), X(137,139), X(138,140), X(141,143),
+  X(142,144), X(145,147), X(146,148), X(149,151), X(150,152), X(153,155),
+  X(154,156), X(157,159), X(158,160), X(161,163), X(162,164), X(165,167),
+  X(166,168), X(169,171), X(170,172), X(173,175), X(174,176), X(177,179),
+  X(178,180), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(3,65),
+  X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81),
+  X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97),
+  X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110),
+  X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125),
+  X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138),
+  X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153),
+  X(92,154), X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78),
+  X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94),
+  X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109),
+  X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121), X(92,122),
+  X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(127,157), X(128,158),
+  X(131,161), X(132,162), X(135,165), X(136,166), X(139,169), X(140,170),
+  X(143,173), X(144,174), X(147,177), X(148,178), X(3,17), X(4,18), X(7,21),
+  X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37),
+  X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53),
+  X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69),
+  X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85),
+  X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(143,157), X(144,158), X(147,161),
+  X(148,162), X(151,165), X(152,166), X(155,169), X(156,170), X(159,173),
+  X(160,174), X(163,177), X(164,178), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70),
+  X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86),
+  X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101),
+  X(100,102), X(103,105), X(104,106), X(107,109), X(108,110), X(111,113),
+  X(112,114), X(115,117), X(116,118), X(119,121), X(120,122), X(123,125),
+  X(124,126), X(127,129), X(128,130), X(131,133), X(132,134), X(135,137),
+  X(136,138), X(139,141), X(140,142), X(143,145), X(144,146), X(147,149),
+  X(148,150), X(151,153), X(152,154), X(155,157), X(156,158), X(159,161),
+  X(160,162), X(163,165), X(164,166), X(167,169), X(168,170), X(171,173),
+  X(172,174), X(175,177), X(176,178), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137),
+  X(12,139), X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151),
+  X(26,153), X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165),
+  X(40,167), X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179),
+  X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79),
+  X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95),
+  X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109),
+  X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(60,123),
+  X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135), X(74,137),
+  X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149), X(88,151),
+  X(90,153), X(92,155), X(94,157), X(96,159), X(98,161), X(100,163), X(102,165),
+  X(104,167), X(106,169), X(108,171), X(110,173), X(112,175), X(114,177),
+  X(116,179), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45),
+  X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61),
+  X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77),
+  X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93),
+  X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107),
+  X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121),
+  X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(146,177), X(148,179), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(108,115), X(110,117), X(112,119), X(114,121),
+  X(116,123), X(118,125), X(120,127), X(122,129), X(124,131), X(126,133),
+  X(128,135), X(130,137), X(132,139), X(134,141), X(136,143), X(138,145),
+  X(140,147), X(142,149), X(144,151), X(146,153), X(148,155), X(150,157),
+  X(152,159), X(154,161), X(156,163), X(158,165), X(160,167), X(162,169),
+  X(164,171), X(166,173), X(168,175), X(170,177), X(172,179), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(130,133), X(132,135), X(134,137),
+  X(136,139), X(138,141), X(140,143), X(142,145), X(144,147), X(146,149),
+  X(148,151), X(150,153), X(152,155), X(154,157), X(156,159), X(158,161),
+  X(160,163), X(162,165), X(164,167), X(166,169), X(168,171), X(170,173),
+  X(172,175), X(174,177), X(176,179), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153),
+  X(154,155), X(156,157), X(158,159), X(160,161), X(162,163), X(164,165),
+  X(166,167), X(168,169), X(170,171), X(172,173), X(174,175), X(176,177),
+  X(178,179)
+};
+S(182) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(1,65), X(2,66),
+  X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74),
+  X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82),
+  X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90),
+  X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98),
+  X(35,99), X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105),
+  X(42,106), X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112),
+  X(49,113), X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119),
+  X(56,120), X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126),
+  X(63,127), X(64,128), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133),
+  X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140),
+  X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147),
+  X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154),
+  X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160), X(97,161),
+  X(98,162), X(99,163), X(100,164), X(101,165), X(102,166), X(103,167),
+  X(104,168), X(105,169), X(106,170), X(107,171), X(108,172), X(109,173),
+  X(110,174), X(111,175), X(112,176), X(113,177), X(114,178), X(115,179),
+  X(116,180), X(117,181), X(118,182), X(1,33), X(2,34), X(3,35), X(4,36),
+  X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44),
+  X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52),
+  X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60),
+  X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(135,167), X(136,168), X(137,169), X(138,170), X(139,171),
+  X(140,172), X(141,173), X(142,174), X(143,175), X(144,176), X(145,177),
+  X(146,178), X(147,179), X(148,180), X(149,181), X(150,182), X(33,129),
+  X(34,130), X(35,131), X(36,132), X(37,133), X(38,134), X(39,135), X(40,136),
+  X(41,137), X(42,138), X(43,139), X(44,140), X(45,141), X(46,142), X(47,143),
+  X(48,144), X(49,145), X(50,146), X(51,147), X(52,148), X(53,149), X(54,150),
+  X(55,151), X(56,152), X(57,153), X(58,154), X(59,155), X(60,156), X(61,157),
+  X(62,158), X(63,159), X(64,160), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76),
+  X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84),
+  X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92),
+  X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131),
+  X(100,132), X(101,133), X(102,134), X(103,135), X(104,136), X(105,137),
+  X(106,138), X(107,139), X(108,140), X(109,141), X(110,142), X(111,143),
+  X(112,144), X(113,145), X(114,146), X(115,147), X(116,148), X(117,149),
+  X(118,150), X(119,151), X(120,152), X(121,153), X(122,154), X(123,155),
+  X(124,156), X(125,157), X(126,158), X(127,159), X(128,160), X(1,17), X(2,18),
+  X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26),
+  X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50),
+  X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58),
+  X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82),
+  X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90),
+  X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113),
+  X(98,114), X(99,115), X(100,116), X(101,117), X(102,118), X(103,119),
+  X(104,120), X(105,121), X(106,122), X(107,123), X(108,124), X(109,125),
+  X(110,126), X(111,127), X(112,128), X(129,145), X(130,146), X(131,147),
+  X(132,148), X(133,149), X(134,150), X(135,151), X(136,152), X(137,153),
+  X(138,154), X(139,155), X(140,156), X(141,157), X(142,158), X(143,159),
+  X(144,160), X(161,177), X(162,178), X(163,179), X(164,180), X(165,181),
+  X(166,182), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134),
+  X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141),
+  X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164),
+  X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171),
+  X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135),
+  X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142),
+  X(95,143), X(96,144), X(113,161), X(114,162), X(115,163), X(116,164),
+  X(117,165), X(118,166), X(119,167), X(120,168), X(121,169), X(122,170),
+  X(123,171), X(124,172), X(125,173), X(126,174), X(127,175), X(128,176),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72),
+  X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80),
+  X(81,97), X(82,98), X(83,99), X(84,100), X(85,101), X(86,102), X(87,103),
+  X(88,104), X(89,105), X(90,106), X(91,107), X(92,108), X(93,109), X(94,110),
+  X(95,111), X(96,112), X(113,129), X(114,130), X(115,131), X(116,132),
+  X(117,133), X(118,134), X(119,135), X(120,136), X(121,137), X(122,138),
+  X(123,139), X(124,140), X(125,141), X(126,142), X(127,143), X(128,144),
+  X(145,161), X(146,162), X(147,163), X(148,164), X(149,165), X(150,166),
+  X(151,167), X(152,168), X(153,169), X(154,170), X(155,171), X(156,172),
+  X(157,173), X(158,174), X(159,175), X(160,176), X(1,9), X(2,10), X(3,11),
+  X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27),
+  X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43),
+  X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59),
+  X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75),
+  X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91),
+  X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105), X(98,106),
+  X(99,107), X(100,108), X(101,109), X(102,110), X(103,111), X(104,112),
+  X(113,121), X(114,122), X(115,123), X(116,124), X(117,125), X(118,126),
+  X(119,127), X(120,128), X(129,137), X(130,138), X(131,139), X(132,140),
+  X(133,141), X(134,142), X(135,143), X(136,144), X(145,153), X(146,154),
+  X(147,155), X(148,156), X(149,157), X(150,158), X(151,159), X(152,160),
+  X(161,169), X(162,170), X(163,171), X(164,172), X(165,173), X(166,174),
+  X(167,175), X(168,176), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133),
+  X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148),
+  X(29,149), X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163),
+  X(44,164), X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178),
+  X(59,179), X(60,180), X(61,181), X(62,182), X(9,65), X(10,66), X(11,67),
+  X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83),
+  X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99),
+  X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114),
+  X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129),
+  X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136),
+  X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151),
+  X(96,152), X(105,161), X(106,162), X(107,163), X(108,164), X(109,165),
+  X(110,166), X(111,167), X(112,168), X(121,177), X(122,178), X(123,179),
+  X(124,180), X(125,181), X(126,182), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52),
+  X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68),
+  X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84),
+  X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(121,145), X(122,146), X(123,147), X(124,148), X(125,149),
+  X(126,150), X(127,151), X(128,152), X(137,161), X(138,162), X(139,163),
+  X(140,164), X(141,165), X(142,166), X(143,167), X(144,168), X(153,177),
+  X(154,178), X(155,179), X(156,180), X(157,181), X(158,182), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113),
+  X(106,114), X(107,115), X(108,116), X(109,117), X(110,118), X(111,119),
+  X(112,120), X(121,129), X(122,130), X(123,131), X(124,132), X(125,133),
+  X(126,134), X(127,135), X(128,136), X(137,145), X(138,146), X(139,147),
+  X(140,148), X(141,149), X(142,150), X(143,151), X(144,152), X(153,161),
+  X(154,162), X(155,163), X(156,164), X(157,165), X(158,166), X(159,167),
+  X(160,168), X(169,177), X(170,178), X(171,179), X(172,180), X(173,181),
+  X(174,182), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153), X(30,154),
+  X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164), X(45,169),
+  X(46,170), X(47,171), X(48,172), X(53,177), X(54,178), X(55,179), X(56,180),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92),
+  X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107),
+  X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122),
+  X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132), X(77,137),
+  X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147), X(88,148),
+  X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162), X(103,163),
+  X(104,164), X(109,169), X(110,170), X(111,171), X(112,172), X(117,177),
+  X(118,178), X(119,179), X(120,180), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52),
+  X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68),
+  X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84),
+  X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(103,131), X(104,132), X(109,137), X(110,138), X(111,139),
+  X(112,140), X(117,145), X(118,146), X(119,147), X(120,148), X(125,153),
+  X(126,154), X(127,155), X(128,156), X(133,161), X(134,162), X(135,163),
+  X(136,164), X(141,169), X(142,170), X(143,171), X(144,172), X(149,177),
+  X(150,178), X(151,179), X(152,180), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27),
+  X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43),
+  X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59),
+  X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75),
+  X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91),
+  X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106),
+  X(103,107), X(104,108), X(109,113), X(110,114), X(111,115), X(112,116),
+  X(117,121), X(118,122), X(119,123), X(120,124), X(125,129), X(126,130),
+  X(127,131), X(128,132), X(133,137), X(134,138), X(135,139), X(136,140),
+  X(141,145), X(142,146), X(143,147), X(144,148), X(149,153), X(150,154),
+  X(151,155), X(152,156), X(157,161), X(158,162), X(159,163), X(160,164),
+  X(165,169), X(166,170), X(167,171), X(168,172), X(173,177), X(174,178),
+  X(175,179), X(176,180), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(129,131),
+  X(130,132), X(133,135), X(134,136), X(137,139), X(138,140), X(141,143),
+  X(142,144), X(145,147), X(146,148), X(149,151), X(150,152), X(153,155),
+  X(154,156), X(157,159), X(158,160), X(161,163), X(162,164), X(165,167),
+  X(166,168), X(169,171), X(170,172), X(173,175), X(174,176), X(177,179),
+  X(178,180), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77),
+  X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93),
+  X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106),
+  X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121),
+  X(60,122), X(63,125), X(64,126), X(67,129), X(68,130), X(71,133), X(72,134),
+  X(75,137), X(76,138), X(79,141), X(80,142), X(83,145), X(84,146), X(87,149),
+  X(88,150), X(91,153), X(92,154), X(95,157), X(96,158), X(99,161), X(100,162),
+  X(103,165), X(104,166), X(107,169), X(108,170), X(111,173), X(112,174),
+  X(115,177), X(116,178), X(119,181), X(120,182), X(3,33), X(4,34), X(7,37),
+  X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53),
+  X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69),
+  X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85),
+  X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(127,157), X(128,158), X(131,161), X(132,162),
+  X(135,165), X(136,166), X(139,169), X(140,170), X(143,173), X(144,174),
+  X(147,177), X(148,178), X(151,181), X(152,182), X(3,17), X(4,18), X(7,21),
+  X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37),
+  X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53),
+  X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69),
+  X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85),
+  X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(143,157), X(144,158), X(147,161),
+  X(148,162), X(151,165), X(152,166), X(155,169), X(156,170), X(159,173),
+  X(160,174), X(163,177), X(164,178), X(167,181), X(168,182), X(3,9), X(4,10),
+  X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26),
+  X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42),
+  X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58),
+  X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74),
+  X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90),
+  X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102), X(99,105),
+  X(100,106), X(103,109), X(104,110), X(107,113), X(108,114), X(111,117),
+  X(112,118), X(115,121), X(116,122), X(119,125), X(120,126), X(123,129),
+  X(124,130), X(127,133), X(128,134), X(131,137), X(132,138), X(135,141),
+  X(136,142), X(139,145), X(140,146), X(143,149), X(144,150), X(147,153),
+  X(148,154), X(151,157), X(152,158), X(155,161), X(156,162), X(159,165),
+  X(160,166), X(163,169), X(164,170), X(167,173), X(168,174), X(171,177),
+  X(172,178), X(175,181), X(176,182), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13),
+  X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29),
+  X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45),
+  X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61),
+  X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77),
+  X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93),
+  X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106),
+  X(107,109), X(108,110), X(111,113), X(112,114), X(115,117), X(116,118),
+  X(119,121), X(120,122), X(123,125), X(124,126), X(127,129), X(128,130),
+  X(131,133), X(132,134), X(135,137), X(136,138), X(139,141), X(140,142),
+  X(143,145), X(144,146), X(147,149), X(148,150), X(151,153), X(152,154),
+  X(155,157), X(156,158), X(159,161), X(160,162), X(163,165), X(164,166),
+  X(167,169), X(168,170), X(171,173), X(172,174), X(175,177), X(176,178),
+  X(179,181), X(180,182), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137),
+  X(12,139), X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151),
+  X(26,153), X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165),
+  X(40,167), X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179),
+  X(54,181), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107),
+  X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121),
+  X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135),
+  X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149),
+  X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161), X(100,163),
+  X(102,165), X(104,167), X(106,169), X(108,171), X(110,173), X(112,175),
+  X(114,177), X(116,179), X(118,181), X(2,33), X(4,35), X(6,37), X(8,39),
+  X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55),
+  X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71),
+  X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87),
+  X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101),
+  X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113), X(84,115),
+  X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127), X(98,129),
+  X(100,131), X(102,133), X(104,135), X(106,137), X(108,139), X(110,141),
+  X(112,143), X(114,145), X(116,147), X(118,149), X(120,151), X(122,153),
+  X(124,155), X(126,157), X(128,159), X(130,161), X(132,163), X(134,165),
+  X(136,167), X(138,169), X(140,171), X(142,173), X(144,175), X(146,177),
+  X(148,179), X(150,181), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27),
+  X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43),
+  X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59),
+  X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75),
+  X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91),
+  X(78,93), X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105),
+  X(92,107), X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(160,175), X(162,177), X(164,179),
+  X(166,181), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21),
+  X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37),
+  X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53),
+  X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69),
+  X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85),
+  X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(134,141), X(136,143), X(138,145), X(140,147),
+  X(142,149), X(144,151), X(146,153), X(148,155), X(150,157), X(152,159),
+  X(154,161), X(156,163), X(158,165), X(160,167), X(162,169), X(164,171),
+  X(166,173), X(168,175), X(170,177), X(172,179), X(174,181), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(130,133), X(132,135), X(134,137),
+  X(136,139), X(138,141), X(140,143), X(142,145), X(144,147), X(146,149),
+  X(148,151), X(150,153), X(152,155), X(154,157), X(156,159), X(158,161),
+  X(160,163), X(162,165), X(164,167), X(166,169), X(168,171), X(170,173),
+  X(172,175), X(174,177), X(176,179), X(178,181), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(112,113), X(114,115),
+  X(116,117), X(118,119), X(120,121), X(122,123), X(124,125), X(126,127),
+  X(128,129), X(130,131), X(132,133), X(134,135), X(136,137), X(138,139),
+  X(140,141), X(142,143), X(144,145), X(146,147), X(148,149), X(150,151),
+  X(152,153), X(154,155), X(156,157), X(158,159), X(160,161), X(162,163),
+  X(164,165), X(166,167), X(168,169), X(170,171), X(172,173), X(174,175),
+  X(176,177), X(178,179), X(180,181)
+};
+S(184) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124),
+  X(61,125), X(62,126), X(63,127), X(64,128), X(65,129), X(66,130), X(67,131),
+  X(68,132), X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138),
+  X(75,139), X(76,140), X(77,141), X(78,142), X(79,143), X(80,144), X(81,145),
+  X(82,146), X(83,147), X(84,148), X(85,149), X(86,150), X(87,151), X(88,152),
+  X(89,153), X(90,154), X(91,155), X(92,156), X(93,157), X(94,158), X(95,159),
+  X(96,160), X(97,161), X(98,162), X(99,163), X(100,164), X(101,165), X(102,166),
+  X(103,167), X(104,168), X(105,169), X(106,170), X(107,171), X(108,172),
+  X(109,173), X(110,174), X(111,175), X(112,176), X(113,177), X(114,178),
+  X(115,179), X(116,180), X(117,181), X(118,182), X(119,183), X(120,184),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103),
+  X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110),
+  X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117),
+  X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124),
+  X(93,125), X(94,126), X(95,127), X(96,128), X(129,161), X(130,162), X(131,163),
+  X(132,164), X(133,165), X(134,166), X(135,167), X(136,168), X(137,169),
+  X(138,170), X(139,171), X(140,172), X(141,173), X(142,174), X(143,175),
+  X(144,176), X(145,177), X(146,178), X(147,179), X(148,180), X(149,181),
+  X(150,182), X(151,183), X(152,184), X(33,129), X(34,130), X(35,131), X(36,132),
+  X(37,133), X(38,134), X(39,135), X(40,136), X(41,137), X(42,138), X(43,139),
+  X(44,140), X(45,141), X(46,142), X(47,143), X(48,144), X(49,145), X(50,146),
+  X(51,147), X(52,148), X(53,149), X(54,150), X(55,151), X(56,152), X(57,153),
+  X(58,154), X(59,155), X(60,156), X(61,157), X(62,158), X(63,159), X(64,160),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54),
+  X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62),
+  X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86),
+  X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94),
+  X(79,95), X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117),
+  X(102,118), X(103,119), X(104,120), X(105,121), X(106,122), X(107,123),
+  X(108,124), X(109,125), X(110,126), X(111,127), X(112,128), X(129,145),
+  X(130,146), X(131,147), X(132,148), X(133,149), X(134,150), X(135,151),
+  X(136,152), X(137,153), X(138,154), X(139,155), X(140,156), X(141,157),
+  X(142,158), X(143,159), X(144,160), X(161,177), X(162,178), X(163,179),
+  X(164,180), X(165,181), X(166,182), X(167,183), X(168,184), X(17,129),
+  X(18,130), X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136),
+  X(25,137), X(26,138), X(27,139), X(28,140), X(29,141), X(30,142), X(31,143),
+  X(32,144), X(49,161), X(50,162), X(51,163), X(52,164), X(53,165), X(54,166),
+  X(55,167), X(56,168), X(57,169), X(58,170), X(59,171), X(60,172), X(61,173),
+  X(62,174), X(63,175), X(64,176), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(119,167), X(120,168), X(121,169), X(122,170), X(123,171),
+  X(124,172), X(125,173), X(126,174), X(127,175), X(128,176), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(117,133), X(118,134),
+  X(119,135), X(120,136), X(121,137), X(122,138), X(123,139), X(124,140),
+  X(125,141), X(126,142), X(127,143), X(128,144), X(145,161), X(146,162),
+  X(147,163), X(148,164), X(149,165), X(150,166), X(151,167), X(152,168),
+  X(153,169), X(154,170), X(155,171), X(156,172), X(157,173), X(158,174),
+  X(159,175), X(160,176), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109),
+  X(102,110), X(103,111), X(104,112), X(113,121), X(114,122), X(115,123),
+  X(116,124), X(117,125), X(118,126), X(119,127), X(120,128), X(129,137),
+  X(130,138), X(131,139), X(132,140), X(133,141), X(134,142), X(135,143),
+  X(136,144), X(145,153), X(146,154), X(147,155), X(148,156), X(149,157),
+  X(150,158), X(151,159), X(152,160), X(161,169), X(162,170), X(163,171),
+  X(164,172), X(165,173), X(166,174), X(167,175), X(168,176), X(9,129),
+  X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135), X(16,136),
+  X(25,145), X(26,146), X(27,147), X(28,148), X(29,149), X(30,150), X(31,151),
+  X(32,152), X(41,161), X(42,162), X(43,163), X(44,164), X(45,165), X(46,166),
+  X(47,167), X(48,168), X(57,177), X(58,178), X(59,179), X(60,180), X(61,181),
+  X(62,182), X(63,183), X(64,184), X(9,65), X(10,66), X(11,67), X(12,68),
+  X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84),
+  X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99),
+  X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114),
+  X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129),
+  X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136),
+  X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151),
+  X(96,152), X(105,161), X(106,162), X(107,163), X(108,164), X(109,165),
+  X(110,166), X(111,167), X(112,168), X(121,177), X(122,178), X(123,179),
+  X(124,180), X(125,181), X(126,182), X(127,183), X(128,184), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(105,129), X(106,130), X(107,131), X(108,132), X(109,133), X(110,134),
+  X(111,135), X(112,136), X(121,145), X(122,146), X(123,147), X(124,148),
+  X(125,149), X(126,150), X(127,151), X(128,152), X(137,161), X(138,162),
+  X(139,163), X(140,164), X(141,165), X(142,166), X(143,167), X(144,168),
+  X(153,177), X(154,178), X(155,179), X(156,180), X(157,181), X(158,182),
+  X(159,183), X(160,184), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21),
+  X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37),
+  X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53),
+  X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69),
+  X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85),
+  X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100),
+  X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(139,147), X(140,148), X(141,149),
+  X(142,150), X(143,151), X(144,152), X(153,161), X(154,162), X(155,163),
+  X(156,164), X(157,165), X(158,166), X(159,167), X(160,168), X(169,177),
+  X(170,178), X(171,179), X(172,180), X(173,181), X(174,182), X(175,183),
+  X(176,184), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137),
+  X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148),
+  X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163),
+  X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(53,177), X(54,178),
+  X(55,179), X(56,180), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74),
+  X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90),
+  X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105),
+  X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116),
+  X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131),
+  X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146),
+  X(87,147), X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161),
+  X(102,162), X(103,163), X(104,164), X(109,169), X(110,170), X(111,171),
+  X(112,172), X(117,177), X(118,178), X(119,179), X(120,180), X(5,33), X(6,34),
+  X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50),
+  X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66),
+  X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82),
+  X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98),
+  X(71,99), X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113),
+  X(86,114), X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124),
+  X(101,129), X(102,130), X(103,131), X(104,132), X(109,137), X(110,138),
+  X(111,139), X(112,140), X(117,145), X(118,146), X(119,147), X(120,148),
+  X(125,153), X(126,154), X(127,155), X(128,156), X(133,161), X(134,162),
+  X(135,163), X(136,164), X(141,169), X(142,170), X(143,171), X(144,172),
+  X(149,177), X(150,178), X(151,179), X(152,180), X(5,17), X(6,18), X(7,19),
+  X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35),
+  X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51),
+  X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67),
+  X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83),
+  X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27),
+  X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43),
+  X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59),
+  X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75),
+  X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91),
+  X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106),
+  X(103,107), X(104,108), X(109,113), X(110,114), X(111,115), X(112,116),
+  X(117,121), X(118,122), X(119,123), X(120,124), X(125,129), X(126,130),
+  X(127,131), X(128,132), X(133,137), X(134,138), X(135,139), X(136,140),
+  X(141,145), X(142,146), X(143,147), X(144,148), X(149,153), X(150,154),
+  X(151,155), X(152,156), X(157,161), X(158,162), X(159,163), X(160,164),
+  X(165,169), X(166,170), X(167,171), X(168,172), X(173,177), X(174,178),
+  X(175,179), X(176,180), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(129,131),
+  X(130,132), X(133,135), X(134,136), X(137,139), X(138,140), X(141,143),
+  X(142,144), X(145,147), X(146,148), X(149,151), X(150,152), X(153,155),
+  X(154,156), X(157,159), X(158,160), X(161,163), X(162,164), X(165,167),
+  X(166,168), X(169,171), X(170,172), X(173,175), X(174,176), X(177,179),
+  X(178,180), X(181,183), X(182,184), X(3,129), X(4,130), X(7,133), X(8,134),
+  X(11,137), X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149),
+  X(24,150), X(27,153), X(28,154), X(31,157), X(32,158), X(35,161), X(36,162),
+  X(39,165), X(40,166), X(43,169), X(44,170), X(47,173), X(48,174), X(51,177),
+  X(52,178), X(55,181), X(56,182), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73),
+  X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89),
+  X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102),
+  X(43,105), X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117),
+  X(56,118), X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130),
+  X(71,133), X(72,134), X(75,137), X(76,138), X(79,141), X(80,142), X(83,145),
+  X(84,146), X(87,149), X(88,150), X(91,153), X(92,154), X(95,157), X(96,158),
+  X(99,161), X(100,162), X(103,165), X(104,166), X(107,169), X(108,170),
+  X(111,173), X(112,174), X(115,177), X(116,178), X(119,181), X(120,182),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78),
+  X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94),
+  X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109),
+  X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121), X(92,122),
+  X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(127,157), X(128,158),
+  X(131,161), X(132,162), X(135,165), X(136,166), X(139,169), X(140,170),
+  X(143,173), X(144,174), X(147,177), X(148,178), X(151,181), X(152,182),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(107,121),
+  X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(119,133),
+  X(120,134), X(123,137), X(124,138), X(127,141), X(128,142), X(131,145),
+  X(132,146), X(135,149), X(136,150), X(139,153), X(140,154), X(143,157),
+  X(144,158), X(147,161), X(148,162), X(151,165), X(152,166), X(155,169),
+  X(156,170), X(159,173), X(160,174), X(163,177), X(164,178), X(167,181),
+  X(168,182), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21),
+  X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37),
+  X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53),
+  X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69),
+  X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85),
+  X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134),
+  X(131,137), X(132,138), X(135,141), X(136,142), X(139,145), X(140,146),
+  X(143,149), X(144,150), X(147,153), X(148,154), X(151,157), X(152,158),
+  X(155,161), X(156,162), X(159,165), X(160,166), X(163,169), X(164,170),
+  X(167,173), X(168,174), X(171,177), X(172,178), X(175,181), X(176,182), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134),
+  X(135,137), X(136,138), X(139,141), X(140,142), X(143,145), X(144,146),
+  X(147,149), X(148,150), X(151,153), X(152,154), X(155,157), X(156,158),
+  X(159,161), X(160,162), X(163,165), X(164,166), X(167,169), X(168,170),
+  X(171,173), X(172,174), X(175,177), X(176,178), X(179,181), X(180,182), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181),
+  X(56,183), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107),
+  X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121),
+  X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135),
+  X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149),
+  X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161), X(100,163),
+  X(102,165), X(104,167), X(106,169), X(108,171), X(110,173), X(112,175),
+  X(114,177), X(116,179), X(118,181), X(120,183), X(2,33), X(4,35), X(6,37),
+  X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53),
+  X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69),
+  X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85),
+  X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99),
+  X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113),
+  X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127),
+  X(98,129), X(100,131), X(102,133), X(104,135), X(106,137), X(108,139),
+  X(110,141), X(112,143), X(114,145), X(116,147), X(118,149), X(120,151),
+  X(122,153), X(124,155), X(126,157), X(128,159), X(130,161), X(132,163),
+  X(134,165), X(136,167), X(138,169), X(140,171), X(142,173), X(144,175),
+  X(146,177), X(148,179), X(150,181), X(152,183), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75),
+  X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91),
+  X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105),
+  X(100,107), X(102,109), X(104,111), X(106,113), X(108,115), X(110,117),
+  X(112,119), X(114,121), X(116,123), X(118,125), X(120,127), X(122,129),
+  X(124,131), X(126,133), X(128,135), X(130,137), X(132,139), X(134,141),
+  X(136,143), X(138,145), X(140,147), X(142,149), X(144,151), X(146,153),
+  X(148,155), X(150,157), X(152,159), X(154,161), X(156,163), X(158,165),
+  X(160,167), X(162,169), X(164,171), X(166,173), X(168,175), X(170,177),
+  X(172,179), X(174,181), X(176,183), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29),
+  X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45),
+  X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61),
+  X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77),
+  X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93),
+  X(92,95), X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107),
+  X(106,109), X(108,111), X(110,113), X(112,115), X(114,117), X(116,119),
+  X(118,121), X(120,123), X(122,125), X(124,127), X(126,129), X(128,131),
+  X(130,133), X(132,135), X(134,137), X(136,139), X(138,141), X(140,143),
+  X(142,145), X(144,147), X(146,149), X(148,151), X(150,153), X(152,155),
+  X(154,157), X(156,159), X(158,161), X(160,163), X(162,165), X(164,167),
+  X(166,169), X(168,171), X(170,173), X(172,175), X(174,177), X(176,179),
+  X(178,181), X(180,183), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(142,143),
+  X(144,145), X(146,147), X(148,149), X(150,151), X(152,153), X(154,155),
+  X(156,157), X(158,159), X(160,161), X(162,163), X(164,165), X(166,167),
+  X(168,169), X(170,171), X(172,173), X(174,175), X(176,177), X(178,179),
+  X(180,181), X(182,183)
+};
+S(186) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70),
+  X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78),
+  X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86),
+  X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94),
+  X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101),
+  X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108),
+  X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115),
+  X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122),
+  X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(65,129),
+  X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136),
+  X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143),
+  X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150),
+  X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157),
+  X(94,158), X(95,159), X(96,160), X(97,161), X(98,162), X(99,163), X(100,164),
+  X(101,165), X(102,166), X(103,167), X(104,168), X(105,169), X(106,170),
+  X(107,171), X(108,172), X(109,173), X(110,174), X(111,175), X(112,176),
+  X(113,177), X(114,178), X(115,179), X(116,180), X(117,181), X(118,182),
+  X(119,183), X(120,184), X(121,185), X(122,186), X(1,33), X(2,34), X(3,35),
+  X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43),
+  X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51),
+  X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59),
+  X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(135,167), X(136,168), X(137,169), X(138,170), X(139,171),
+  X(140,172), X(141,173), X(142,174), X(143,175), X(144,176), X(145,177),
+  X(146,178), X(147,179), X(148,180), X(149,181), X(150,182), X(151,183),
+  X(152,184), X(153,185), X(154,186), X(33,129), X(34,130), X(35,131), X(36,132),
+  X(37,133), X(38,134), X(39,135), X(40,136), X(41,137), X(42,138), X(43,139),
+  X(44,140), X(45,141), X(46,142), X(47,143), X(48,144), X(49,145), X(50,146),
+  X(51,147), X(52,148), X(53,149), X(54,150), X(55,151), X(56,152), X(57,153),
+  X(58,154), X(59,155), X(60,156), X(61,157), X(62,158), X(63,159), X(64,160),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54),
+  X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62),
+  X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86),
+  X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94),
+  X(79,95), X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117),
+  X(102,118), X(103,119), X(104,120), X(105,121), X(106,122), X(107,123),
+  X(108,124), X(109,125), X(110,126), X(111,127), X(112,128), X(129,145),
+  X(130,146), X(131,147), X(132,148), X(133,149), X(134,150), X(135,151),
+  X(136,152), X(137,153), X(138,154), X(139,155), X(140,156), X(141,157),
+  X(142,158), X(143,159), X(144,160), X(161,177), X(162,178), X(163,179),
+  X(164,180), X(165,181), X(166,182), X(167,183), X(168,184), X(169,185),
+  X(170,186), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134),
+  X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141),
+  X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164),
+  X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171),
+  X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135),
+  X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142),
+  X(95,143), X(96,144), X(113,161), X(114,162), X(115,163), X(116,164),
+  X(117,165), X(118,166), X(119,167), X(120,168), X(121,169), X(122,170),
+  X(123,171), X(124,172), X(125,173), X(126,174), X(127,175), X(128,176),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72),
+  X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80),
+  X(81,97), X(82,98), X(83,99), X(84,100), X(85,101), X(86,102), X(87,103),
+  X(88,104), X(89,105), X(90,106), X(91,107), X(92,108), X(93,109), X(94,110),
+  X(95,111), X(96,112), X(113,129), X(114,130), X(115,131), X(116,132),
+  X(117,133), X(118,134), X(119,135), X(120,136), X(121,137), X(122,138),
+  X(123,139), X(124,140), X(125,141), X(126,142), X(127,143), X(128,144),
+  X(145,161), X(146,162), X(147,163), X(148,164), X(149,165), X(150,166),
+  X(151,167), X(152,168), X(153,169), X(154,170), X(155,171), X(156,172),
+  X(157,173), X(158,174), X(159,175), X(160,176), X(1,9), X(2,10), X(3,11),
+  X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27),
+  X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43),
+  X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59),
+  X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75),
+  X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91),
+  X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105), X(98,106),
+  X(99,107), X(100,108), X(101,109), X(102,110), X(103,111), X(104,112),
+  X(113,121), X(114,122), X(115,123), X(116,124), X(117,125), X(118,126),
+  X(119,127), X(120,128), X(129,137), X(130,138), X(131,139), X(132,140),
+  X(133,141), X(134,142), X(135,143), X(136,144), X(145,153), X(146,154),
+  X(147,155), X(148,156), X(149,157), X(150,158), X(151,159), X(152,160),
+  X(161,169), X(162,170), X(163,171), X(164,172), X(165,173), X(166,174),
+  X(167,175), X(168,176), X(177,185), X(178,186), X(9,129), X(10,130), X(11,131),
+  X(12,132), X(13,133), X(14,134), X(15,135), X(16,136), X(25,145), X(26,146),
+  X(27,147), X(28,148), X(29,149), X(30,150), X(31,151), X(32,152), X(41,161),
+  X(42,162), X(43,163), X(44,164), X(45,165), X(46,166), X(47,167), X(48,168),
+  X(57,177), X(58,178), X(59,179), X(60,180), X(61,181), X(62,182), X(63,183),
+  X(64,184), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71),
+  X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87),
+  X(32,88), X(41,97), X(42,98), X(43,99), X(44,100), X(45,101), X(46,102),
+  X(47,103), X(48,104), X(57,113), X(58,114), X(59,115), X(60,116), X(61,117),
+  X(62,118), X(63,119), X(64,120), X(73,129), X(74,130), X(75,131), X(76,132),
+  X(77,133), X(78,134), X(79,135), X(80,136), X(89,145), X(90,146), X(91,147),
+  X(92,148), X(93,149), X(94,150), X(95,151), X(96,152), X(105,161), X(106,162),
+  X(107,163), X(108,164), X(109,165), X(110,166), X(111,167), X(112,168),
+  X(121,177), X(122,178), X(123,179), X(124,180), X(125,181), X(126,182),
+  X(127,183), X(128,184), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37),
+  X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53),
+  X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69),
+  X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85),
+  X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100),
+  X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115),
+  X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130),
+  X(107,131), X(108,132), X(109,133), X(110,134), X(111,135), X(112,136),
+  X(121,145), X(122,146), X(123,147), X(124,148), X(125,149), X(126,150),
+  X(127,151), X(128,152), X(137,161), X(138,162), X(139,163), X(140,164),
+  X(141,165), X(142,166), X(143,167), X(144,168), X(153,177), X(154,178),
+  X(155,179), X(156,180), X(157,181), X(158,182), X(159,183), X(160,184),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(105,113), X(106,114), X(107,115), X(108,116), X(109,117),
+  X(110,118), X(111,119), X(112,120), X(121,129), X(122,130), X(123,131),
+  X(124,132), X(125,133), X(126,134), X(127,135), X(128,136), X(137,145),
+  X(138,146), X(139,147), X(140,148), X(141,149), X(142,150), X(143,151),
+  X(144,152), X(153,161), X(154,162), X(155,163), X(156,164), X(157,165),
+  X(158,166), X(159,167), X(160,168), X(169,177), X(170,178), X(171,179),
+  X(172,180), X(173,181), X(174,182), X(175,183), X(176,184), X(1,5), X(2,6),
+  X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22),
+  X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38),
+  X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54),
+  X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70),
+  X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86),
+  X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96), X(97,101),
+  X(98,102), X(99,103), X(100,104), X(105,109), X(106,110), X(107,111),
+  X(108,112), X(113,117), X(114,118), X(115,119), X(116,120), X(121,125),
+  X(122,126), X(123,127), X(124,128), X(129,133), X(130,134), X(131,135),
+  X(132,136), X(137,141), X(138,142), X(139,143), X(140,144), X(145,149),
+  X(146,150), X(147,151), X(148,152), X(153,157), X(154,158), X(155,159),
+  X(156,160), X(161,165), X(162,166), X(163,167), X(164,168), X(169,173),
+  X(170,174), X(171,175), X(172,176), X(177,181), X(178,182), X(179,183),
+  X(180,184), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138),
+  X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153),
+  X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164),
+  X(45,169), X(46,170), X(47,171), X(48,172), X(53,177), X(54,178), X(55,179),
+  X(56,180), X(61,185), X(62,186), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73),
+  X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89),
+  X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100),
+  X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115),
+  X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130),
+  X(71,131), X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145),
+  X(86,146), X(87,147), X(88,148), X(93,153), X(94,154), X(95,155), X(96,156),
+  X(101,161), X(102,162), X(103,163), X(104,164), X(109,169), X(110,170),
+  X(111,171), X(112,172), X(117,177), X(118,178), X(119,179), X(120,180),
+  X(125,185), X(126,186), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105),
+  X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116),
+  X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(151,179),
+  X(152,180), X(157,185), X(158,186), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(173,185), X(174,186), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25),
+  X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41),
+  X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57),
+  X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73),
+  X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89),
+  X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100),
+  X(101,105), X(102,106), X(103,107), X(104,108), X(109,113), X(110,114),
+  X(111,115), X(112,116), X(117,121), X(118,122), X(119,123), X(120,124),
+  X(125,129), X(126,130), X(127,131), X(128,132), X(133,137), X(134,138),
+  X(135,139), X(136,140), X(141,145), X(142,146), X(143,147), X(144,148),
+  X(149,153), X(150,154), X(151,155), X(152,156), X(157,161), X(158,162),
+  X(159,163), X(160,164), X(165,169), X(166,170), X(167,171), X(168,172),
+  X(173,177), X(174,178), X(175,179), X(176,180), X(181,185), X(182,186), X(1,3),
+  X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19),
+  X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35),
+  X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51),
+  X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67),
+  X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83),
+  X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73),
+  X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89),
+  X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102),
+  X(43,105), X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117),
+  X(56,118), X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130),
+  X(71,133), X(72,134), X(75,137), X(76,138), X(79,141), X(80,142), X(83,145),
+  X(84,146), X(87,149), X(88,150), X(91,153), X(92,154), X(95,157), X(96,158),
+  X(99,161), X(100,162), X(103,165), X(104,166), X(107,169), X(108,170),
+  X(111,173), X(112,174), X(115,177), X(116,178), X(119,181), X(120,182),
+  X(123,185), X(124,186), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74),
+  X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90),
+  X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105),
+  X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118),
+  X(91,121), X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133),
+  X(104,134), X(107,137), X(108,138), X(111,141), X(112,142), X(115,145),
+  X(116,146), X(119,149), X(120,150), X(123,153), X(124,154), X(127,157),
+  X(128,158), X(131,161), X(132,162), X(135,165), X(136,166), X(139,169),
+  X(140,170), X(143,173), X(144,174), X(147,177), X(148,178), X(151,181),
+  X(152,182), X(155,185), X(156,186), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70),
+  X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86),
+  X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98), X(87,101),
+  X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113), X(100,114),
+  X(103,117), X(104,118), X(107,121), X(108,122), X(111,125), X(112,126),
+  X(115,129), X(116,130), X(119,133), X(120,134), X(123,137), X(124,138),
+  X(127,141), X(128,142), X(131,145), X(132,146), X(135,149), X(136,150),
+  X(139,153), X(140,154), X(143,157), X(144,158), X(147,161), X(148,162),
+  X(151,165), X(152,166), X(155,169), X(156,170), X(159,173), X(160,174),
+  X(163,177), X(164,178), X(167,181), X(168,182), X(171,185), X(172,186), X(3,9),
+  X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25),
+  X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41),
+  X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57),
+  X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73),
+  X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89),
+  X(84,90), X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102),
+  X(99,105), X(100,106), X(103,109), X(104,110), X(107,113), X(108,114),
+  X(111,117), X(112,118), X(115,121), X(116,122), X(119,125), X(120,126),
+  X(123,129), X(124,130), X(127,133), X(128,134), X(131,137), X(132,138),
+  X(135,141), X(136,142), X(139,145), X(140,146), X(143,149), X(144,150),
+  X(147,153), X(148,154), X(151,157), X(152,158), X(155,161), X(156,162),
+  X(159,165), X(160,166), X(163,169), X(164,170), X(167,173), X(168,174),
+  X(171,177), X(172,178), X(175,181), X(176,182), X(179,185), X(180,186), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134),
+  X(135,137), X(136,138), X(139,141), X(140,142), X(143,145), X(144,146),
+  X(147,149), X(148,150), X(151,153), X(152,154), X(155,157), X(156,158),
+  X(159,161), X(160,162), X(163,165), X(164,166), X(167,169), X(168,170),
+  X(171,173), X(172,174), X(175,177), X(176,178), X(179,181), X(180,182),
+  X(183,185), X(184,186), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(2,129), X(4,131), X(6,133),
+  X(8,135), X(10,137), X(12,139), X(14,141), X(16,143), X(18,145), X(20,147),
+  X(22,149), X(24,151), X(26,153), X(28,155), X(30,157), X(32,159), X(34,161),
+  X(36,163), X(38,165), X(40,167), X(42,169), X(44,171), X(46,173), X(48,175),
+  X(50,177), X(52,179), X(54,181), X(56,183), X(58,185), X(2,65), X(4,67),
+  X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83),
+  X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99),
+  X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113),
+  X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127),
+  X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141),
+  X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155),
+  X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(2,33), X(4,35), X(6,37), X(8,39),
+  X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55),
+  X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71),
+  X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87),
+  X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101),
+  X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113), X(84,115),
+  X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127), X(98,129),
+  X(100,131), X(102,133), X(104,135), X(106,137), X(108,139), X(110,141),
+  X(112,143), X(114,145), X(116,147), X(118,149), X(120,151), X(122,153),
+  X(124,155), X(126,157), X(128,159), X(130,161), X(132,163), X(134,165),
+  X(136,167), X(138,169), X(140,171), X(142,173), X(144,175), X(146,177),
+  X(148,179), X(150,181), X(152,183), X(154,185), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(170,185), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57),
+  X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73),
+  X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89),
+  X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103),
+  X(98,105), X(100,107), X(102,109), X(104,111), X(106,113), X(108,115),
+  X(110,117), X(112,119), X(114,121), X(116,123), X(118,125), X(120,127),
+  X(122,129), X(124,131), X(126,133), X(128,135), X(130,137), X(132,139),
+  X(134,141), X(136,143), X(138,145), X(140,147), X(142,149), X(144,151),
+  X(146,153), X(148,155), X(150,157), X(152,159), X(154,161), X(156,163),
+  X(158,165), X(160,167), X(162,169), X(164,171), X(166,173), X(168,175),
+  X(170,177), X(172,179), X(174,181), X(176,183), X(178,185), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(130,133), X(132,135), X(134,137),
+  X(136,139), X(138,141), X(140,143), X(142,145), X(144,147), X(146,149),
+  X(148,151), X(150,153), X(152,155), X(154,157), X(156,159), X(158,161),
+  X(160,163), X(162,165), X(164,167), X(166,169), X(168,171), X(170,173),
+  X(172,175), X(174,177), X(176,179), X(178,181), X(180,183), X(182,185), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185)
+};
+S(188) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(1,65), X(2,66), X(3,67), X(4,68),
+  X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76),
+  X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84),
+  X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92),
+  X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99),
+  X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106),
+  X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113),
+  X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120),
+  X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127),
+  X(64,128), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134),
+  X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141),
+  X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148),
+  X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154), X(91,155),
+  X(92,156), X(93,157), X(94,158), X(95,159), X(96,160), X(97,161), X(98,162),
+  X(99,163), X(100,164), X(101,165), X(102,166), X(103,167), X(104,168),
+  X(105,169), X(106,170), X(107,171), X(108,172), X(109,173), X(110,174),
+  X(111,175), X(112,176), X(113,177), X(114,178), X(115,179), X(116,180),
+  X(117,181), X(118,182), X(119,183), X(120,184), X(121,185), X(122,186),
+  X(123,187), X(124,188), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101),
+  X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108),
+  X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115),
+  X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122),
+  X(91,123), X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161),
+  X(130,162), X(131,163), X(132,164), X(133,165), X(134,166), X(135,167),
+  X(136,168), X(137,169), X(138,170), X(139,171), X(140,172), X(141,173),
+  X(142,174), X(143,175), X(144,176), X(145,177), X(146,178), X(147,179),
+  X(148,180), X(149,181), X(150,182), X(151,183), X(152,184), X(153,185),
+  X(154,186), X(155,187), X(156,188), X(33,129), X(34,130), X(35,131), X(36,132),
+  X(37,133), X(38,134), X(39,135), X(40,136), X(41,137), X(42,138), X(43,139),
+  X(44,140), X(45,141), X(46,142), X(47,143), X(48,144), X(49,145), X(50,146),
+  X(51,147), X(52,148), X(53,149), X(54,150), X(55,151), X(56,152), X(57,153),
+  X(58,154), X(59,155), X(60,156), X(61,157), X(62,158), X(63,159), X(64,160),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54),
+  X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62),
+  X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86),
+  X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94),
+  X(79,95), X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117),
+  X(102,118), X(103,119), X(104,120), X(105,121), X(106,122), X(107,123),
+  X(108,124), X(109,125), X(110,126), X(111,127), X(112,128), X(129,145),
+  X(130,146), X(131,147), X(132,148), X(133,149), X(134,150), X(135,151),
+  X(136,152), X(137,153), X(138,154), X(139,155), X(140,156), X(141,157),
+  X(142,158), X(143,159), X(144,160), X(161,177), X(162,178), X(163,179),
+  X(164,180), X(165,181), X(166,182), X(167,183), X(168,184), X(169,185),
+  X(170,186), X(171,187), X(172,188), X(17,129), X(18,130), X(19,131), X(20,132),
+  X(21,133), X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139),
+  X(28,140), X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162),
+  X(51,163), X(52,164), X(53,165), X(54,166), X(55,167), X(56,168), X(57,169),
+  X(58,170), X(59,171), X(60,172), X(61,173), X(62,174), X(63,175), X(64,176),
+  X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72),
+  X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80),
+  X(49,97), X(50,98), X(51,99), X(52,100), X(53,101), X(54,102), X(55,103),
+  X(56,104), X(57,105), X(58,106), X(59,107), X(60,108), X(61,109), X(62,110),
+  X(63,111), X(64,112), X(81,129), X(82,130), X(83,131), X(84,132), X(85,133),
+  X(86,134), X(87,135), X(88,136), X(89,137), X(90,138), X(91,139), X(92,140),
+  X(93,141), X(94,142), X(95,143), X(96,144), X(113,161), X(114,162), X(115,163),
+  X(116,164), X(117,165), X(118,166), X(119,167), X(120,168), X(121,169),
+  X(122,170), X(123,171), X(124,172), X(125,173), X(126,174), X(127,175),
+  X(128,176), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100), X(85,101),
+  X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107), X(92,108),
+  X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130), X(115,131),
+  X(116,132), X(117,133), X(118,134), X(119,135), X(120,136), X(121,137),
+  X(122,138), X(123,139), X(124,140), X(125,141), X(126,142), X(127,143),
+  X(128,144), X(145,161), X(146,162), X(147,163), X(148,164), X(149,165),
+  X(150,166), X(151,167), X(152,168), X(153,169), X(154,170), X(155,171),
+  X(156,172), X(157,173), X(158,174), X(159,175), X(160,176), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(117,125),
+  X(118,126), X(119,127), X(120,128), X(129,137), X(130,138), X(131,139),
+  X(132,140), X(133,141), X(134,142), X(135,143), X(136,144), X(145,153),
+  X(146,154), X(147,155), X(148,156), X(149,157), X(150,158), X(151,159),
+  X(152,160), X(161,169), X(162,170), X(163,171), X(164,172), X(165,173),
+  X(166,174), X(167,175), X(168,176), X(177,185), X(178,186), X(179,187),
+  X(180,188), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134),
+  X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149),
+  X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164),
+  X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178), X(59,179),
+  X(60,180), X(61,181), X(62,182), X(63,183), X(64,184), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98),
+  X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113),
+  X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120),
+  X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135),
+  X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150),
+  X(95,151), X(96,152), X(105,161), X(106,162), X(107,163), X(108,164),
+  X(109,165), X(110,166), X(111,167), X(112,168), X(121,177), X(122,178),
+  X(123,179), X(124,180), X(125,181), X(126,182), X(127,183), X(128,184),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88),
+  X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103),
+  X(80,104), X(89,113), X(90,114), X(91,115), X(92,116), X(93,117), X(94,118),
+  X(95,119), X(96,120), X(105,129), X(106,130), X(107,131), X(108,132),
+  X(109,133), X(110,134), X(111,135), X(112,136), X(121,145), X(122,146),
+  X(123,147), X(124,148), X(125,149), X(126,150), X(127,151), X(128,152),
+  X(137,161), X(138,162), X(139,163), X(140,164), X(141,165), X(142,166),
+  X(143,167), X(144,168), X(153,177), X(154,178), X(155,179), X(156,180),
+  X(157,181), X(158,182), X(159,183), X(160,184), X(9,17), X(10,18), X(11,19),
+  X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35),
+  X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51),
+  X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67),
+  X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83),
+  X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(125,133), X(126,134),
+  X(127,135), X(128,136), X(137,145), X(138,146), X(139,147), X(140,148),
+  X(141,149), X(142,150), X(143,151), X(144,152), X(153,161), X(154,162),
+  X(155,163), X(156,164), X(157,165), X(158,166), X(159,167), X(160,168),
+  X(169,177), X(170,178), X(171,179), X(172,180), X(173,181), X(174,182),
+  X(175,183), X(176,184), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14),
+  X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30),
+  X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46),
+  X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62),
+  X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78),
+  X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94),
+  X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109),
+  X(106,110), X(107,111), X(108,112), X(113,117), X(114,118), X(115,119),
+  X(116,120), X(121,125), X(122,126), X(123,127), X(124,128), X(129,133),
+  X(130,134), X(131,135), X(132,136), X(137,141), X(138,142), X(139,143),
+  X(140,144), X(145,149), X(146,150), X(147,151), X(148,152), X(153,157),
+  X(154,158), X(155,159), X(156,160), X(161,165), X(162,166), X(163,167),
+  X(164,168), X(169,173), X(170,174), X(171,175), X(172,176), X(177,181),
+  X(178,182), X(179,183), X(180,184), X(5,129), X(6,130), X(7,131), X(8,132),
+  X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147),
+  X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162),
+  X(39,163), X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(53,177),
+  X(54,178), X(55,179), X(56,180), X(61,185), X(62,186), X(63,187), X(64,188),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92),
+  X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107),
+  X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122),
+  X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132), X(77,137),
+  X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147), X(88,148),
+  X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162), X(103,163),
+  X(104,164), X(109,169), X(110,170), X(111,171), X(112,172), X(117,177),
+  X(118,178), X(119,179), X(120,180), X(125,185), X(126,186), X(127,187),
+  X(128,188), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43),
+  X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59),
+  X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75),
+  X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91),
+  X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106),
+  X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121),
+  X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(151,179),
+  X(152,180), X(157,185), X(158,186), X(159,187), X(160,188), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(143,155), X(144,156), X(149,161),
+  X(150,162), X(151,163), X(152,164), X(157,169), X(158,170), X(159,171),
+  X(160,172), X(165,177), X(166,178), X(167,179), X(168,180), X(173,185),
+  X(174,186), X(175,187), X(176,188), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(149,153), X(150,154), X(151,155),
+  X(152,156), X(157,161), X(158,162), X(159,163), X(160,164), X(165,169),
+  X(166,170), X(167,171), X(168,172), X(173,177), X(174,178), X(175,179),
+  X(176,180), X(181,185), X(182,186), X(183,187), X(184,188), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(3,129), X(4,130), X(7,133), X(8,134),
+  X(11,137), X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149),
+  X(24,150), X(27,153), X(28,154), X(31,157), X(32,158), X(35,161), X(36,162),
+  X(39,165), X(40,166), X(43,169), X(44,170), X(47,173), X(48,174), X(51,177),
+  X(52,178), X(55,181), X(56,182), X(59,185), X(60,186), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154),
+  X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(3,33), X(4,34), X(7,37),
+  X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53),
+  X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69),
+  X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85),
+  X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(127,157), X(128,158), X(131,161), X(132,162),
+  X(135,165), X(136,166), X(139,169), X(140,170), X(143,173), X(144,174),
+  X(147,177), X(148,178), X(151,181), X(152,182), X(155,185), X(156,186),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(107,121),
+  X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(119,133),
+  X(120,134), X(123,137), X(124,138), X(127,141), X(128,142), X(131,145),
+  X(132,146), X(135,149), X(136,150), X(139,153), X(140,154), X(143,157),
+  X(144,158), X(147,161), X(148,162), X(151,165), X(152,166), X(155,169),
+  X(156,170), X(159,173), X(160,174), X(163,177), X(164,178), X(167,181),
+  X(168,182), X(171,185), X(172,186), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(175,181),
+  X(176,182), X(179,185), X(180,186), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13),
+  X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29),
+  X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45),
+  X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61),
+  X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77),
+  X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93),
+  X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106),
+  X(107,109), X(108,110), X(111,113), X(112,114), X(115,117), X(116,118),
+  X(119,121), X(120,122), X(123,125), X(124,126), X(127,129), X(128,130),
+  X(131,133), X(132,134), X(135,137), X(136,138), X(139,141), X(140,142),
+  X(143,145), X(144,146), X(147,149), X(148,150), X(151,153), X(152,154),
+  X(155,157), X(156,158), X(159,161), X(160,162), X(163,165), X(164,166),
+  X(167,169), X(168,170), X(171,173), X(172,174), X(175,177), X(176,178),
+  X(179,181), X(180,182), X(183,185), X(184,186), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181),
+  X(56,183), X(58,185), X(60,187), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73),
+  X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89),
+  X(28,91), X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103),
+  X(42,105), X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117),
+  X(56,119), X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131),
+  X(70,133), X(72,135), X(74,137), X(76,139), X(78,141), X(80,143), X(82,145),
+  X(84,147), X(86,149), X(88,151), X(90,153), X(92,155), X(94,157), X(96,159),
+  X(98,161), X(100,163), X(102,165), X(104,167), X(106,169), X(108,171),
+  X(110,173), X(112,175), X(114,177), X(116,179), X(118,181), X(120,183),
+  X(122,185), X(124,187), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75),
+  X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91),
+  X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105),
+  X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119),
+  X(90,121), X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133),
+  X(104,135), X(106,137), X(108,139), X(110,141), X(112,143), X(114,145),
+  X(116,147), X(118,149), X(120,151), X(122,153), X(124,155), X(126,157),
+  X(128,159), X(130,161), X(132,163), X(134,165), X(136,167), X(138,169),
+  X(140,171), X(142,173), X(144,175), X(146,177), X(148,179), X(150,181),
+  X(152,183), X(154,185), X(156,187), X(2,17), X(4,19), X(6,21), X(8,23),
+  X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39),
+  X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55),
+  X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71),
+  X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87),
+  X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99), X(86,101),
+  X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113), X(100,115),
+  X(102,117), X(104,119), X(106,121), X(108,123), X(110,125), X(112,127),
+  X(114,129), X(116,131), X(118,133), X(120,135), X(122,137), X(124,139),
+  X(126,141), X(128,143), X(130,145), X(132,147), X(134,149), X(136,151),
+  X(138,153), X(140,155), X(142,157), X(144,159), X(146,161), X(148,163),
+  X(150,165), X(152,167), X(154,169), X(156,171), X(158,173), X(160,175),
+  X(162,177), X(164,179), X(166,181), X(168,183), X(170,185), X(172,187), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57),
+  X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73),
+  X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89),
+  X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103),
+  X(98,105), X(100,107), X(102,109), X(104,111), X(106,113), X(108,115),
+  X(110,117), X(112,119), X(114,121), X(116,123), X(118,125), X(120,127),
+  X(122,129), X(124,131), X(126,133), X(128,135), X(130,137), X(132,139),
+  X(134,141), X(136,143), X(138,145), X(140,147), X(142,149), X(144,151),
+  X(146,153), X(148,155), X(150,157), X(152,159), X(154,161), X(156,163),
+  X(158,165), X(160,167), X(162,169), X(164,171), X(166,173), X(168,175),
+  X(170,177), X(172,179), X(174,181), X(176,183), X(178,185), X(180,187), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(120,123),
+  X(122,125), X(124,127), X(126,129), X(128,131), X(130,133), X(132,135),
+  X(134,137), X(136,139), X(138,141), X(140,143), X(142,145), X(144,147),
+  X(146,149), X(148,151), X(150,153), X(152,155), X(154,157), X(156,159),
+  X(158,161), X(160,163), X(162,165), X(164,167), X(166,169), X(168,171),
+  X(170,173), X(172,175), X(174,177), X(176,179), X(178,181), X(180,183),
+  X(182,185), X(184,187), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(142,143),
+  X(144,145), X(146,147), X(148,149), X(150,151), X(152,153), X(154,155),
+  X(156,157), X(158,159), X(160,161), X(162,163), X(164,165), X(166,167),
+  X(168,169), X(170,171), X(172,173), X(174,175), X(176,177), X(178,179),
+  X(180,181), X(182,183), X(184,185), X(186,187)
+};
+S(190) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(1,65),
+  X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73),
+  X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81),
+  X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89),
+  X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97),
+  X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103), X(40,104),
+  X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110), X(47,111),
+  X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117), X(54,118),
+  X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124), X(61,125),
+  X(62,126), X(63,127), X(64,128), X(65,129), X(66,130), X(67,131), X(68,132),
+  X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139),
+  X(76,140), X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146),
+  X(83,147), X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153),
+  X(90,154), X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160),
+  X(97,161), X(98,162), X(99,163), X(100,164), X(101,165), X(102,166),
+  X(103,167), X(104,168), X(105,169), X(106,170), X(107,171), X(108,172),
+  X(109,173), X(110,174), X(111,175), X(112,176), X(113,177), X(114,178),
+  X(115,179), X(116,180), X(117,181), X(118,182), X(119,183), X(120,184),
+  X(121,185), X(122,186), X(123,187), X(124,188), X(125,189), X(126,190),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103),
+  X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110),
+  X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117),
+  X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124),
+  X(93,125), X(94,126), X(95,127), X(96,128), X(129,161), X(130,162), X(131,163),
+  X(132,164), X(133,165), X(134,166), X(135,167), X(136,168), X(137,169),
+  X(138,170), X(139,171), X(140,172), X(141,173), X(142,174), X(143,175),
+  X(144,176), X(145,177), X(146,178), X(147,179), X(148,180), X(149,181),
+  X(150,182), X(151,183), X(152,184), X(153,185), X(154,186), X(155,187),
+  X(156,188), X(157,189), X(158,190), X(33,129), X(34,130), X(35,131), X(36,132),
+  X(37,133), X(38,134), X(39,135), X(40,136), X(41,137), X(42,138), X(43,139),
+  X(44,140), X(45,141), X(46,142), X(47,143), X(48,144), X(49,145), X(50,146),
+  X(51,147), X(52,148), X(53,149), X(54,150), X(55,151), X(56,152), X(57,153),
+  X(58,154), X(59,155), X(60,156), X(61,157), X(62,158), X(63,159), X(64,160),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54),
+  X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62),
+  X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86),
+  X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94),
+  X(79,95), X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117),
+  X(102,118), X(103,119), X(104,120), X(105,121), X(106,122), X(107,123),
+  X(108,124), X(109,125), X(110,126), X(111,127), X(112,128), X(129,145),
+  X(130,146), X(131,147), X(132,148), X(133,149), X(134,150), X(135,151),
+  X(136,152), X(137,153), X(138,154), X(139,155), X(140,156), X(141,157),
+  X(142,158), X(143,159), X(144,160), X(161,177), X(162,178), X(163,179),
+  X(164,180), X(165,181), X(166,182), X(167,183), X(168,184), X(169,185),
+  X(170,186), X(171,187), X(172,188), X(173,189), X(174,190), X(17,129),
+  X(18,130), X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136),
+  X(25,137), X(26,138), X(27,139), X(28,140), X(29,141), X(30,142), X(31,143),
+  X(32,144), X(49,161), X(50,162), X(51,163), X(52,164), X(53,165), X(54,166),
+  X(55,167), X(56,168), X(57,169), X(58,170), X(59,171), X(60,172), X(61,173),
+  X(62,174), X(63,175), X(64,176), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(119,167), X(120,168), X(121,169), X(122,170), X(123,171),
+  X(124,172), X(125,173), X(126,174), X(127,175), X(128,176), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(117,133), X(118,134),
+  X(119,135), X(120,136), X(121,137), X(122,138), X(123,139), X(124,140),
+  X(125,141), X(126,142), X(127,143), X(128,144), X(145,161), X(146,162),
+  X(147,163), X(148,164), X(149,165), X(150,166), X(151,167), X(152,168),
+  X(153,169), X(154,170), X(155,171), X(156,172), X(157,173), X(158,174),
+  X(159,175), X(160,176), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109),
+  X(102,110), X(103,111), X(104,112), X(113,121), X(114,122), X(115,123),
+  X(116,124), X(117,125), X(118,126), X(119,127), X(120,128), X(129,137),
+  X(130,138), X(131,139), X(132,140), X(133,141), X(134,142), X(135,143),
+  X(136,144), X(145,153), X(146,154), X(147,155), X(148,156), X(149,157),
+  X(150,158), X(151,159), X(152,160), X(161,169), X(162,170), X(163,171),
+  X(164,172), X(165,173), X(166,174), X(167,175), X(168,176), X(177,185),
+  X(178,186), X(179,187), X(180,188), X(181,189), X(182,190), X(9,129),
+  X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135), X(16,136),
+  X(25,145), X(26,146), X(27,147), X(28,148), X(29,149), X(30,150), X(31,151),
+  X(32,152), X(41,161), X(42,162), X(43,163), X(44,164), X(45,165), X(46,166),
+  X(47,167), X(48,168), X(57,177), X(58,178), X(59,179), X(60,180), X(61,181),
+  X(62,182), X(63,183), X(64,184), X(9,65), X(10,66), X(11,67), X(12,68),
+  X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84),
+  X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99),
+  X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114),
+  X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129),
+  X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136),
+  X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151),
+  X(96,152), X(105,161), X(106,162), X(107,163), X(108,164), X(109,165),
+  X(110,166), X(111,167), X(112,168), X(121,177), X(122,178), X(123,179),
+  X(124,180), X(125,181), X(126,182), X(127,183), X(128,184), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(105,129), X(106,130), X(107,131), X(108,132), X(109,133), X(110,134),
+  X(111,135), X(112,136), X(121,145), X(122,146), X(123,147), X(124,148),
+  X(125,149), X(126,150), X(127,151), X(128,152), X(137,161), X(138,162),
+  X(139,163), X(140,164), X(141,165), X(142,166), X(143,167), X(144,168),
+  X(153,177), X(154,178), X(155,179), X(156,180), X(157,181), X(158,182),
+  X(159,183), X(160,184), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21),
+  X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37),
+  X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53),
+  X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69),
+  X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85),
+  X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100),
+  X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(139,147), X(140,148), X(141,149),
+  X(142,150), X(143,151), X(144,152), X(153,161), X(154,162), X(155,163),
+  X(156,164), X(157,165), X(158,166), X(159,167), X(160,168), X(169,177),
+  X(170,178), X(171,179), X(172,180), X(173,181), X(174,182), X(175,183),
+  X(176,184), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(185,189), X(186,190), X(5,129), X(6,130), X(7,131),
+  X(8,132), X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146),
+  X(23,147), X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(37,161),
+  X(38,162), X(39,163), X(40,164), X(45,169), X(46,170), X(47,171), X(48,172),
+  X(53,177), X(54,178), X(55,179), X(56,180), X(61,185), X(62,186), X(63,187),
+  X(64,188), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147),
+  X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162),
+  X(103,163), X(104,164), X(109,169), X(110,170), X(111,171), X(112,172),
+  X(117,177), X(118,178), X(119,179), X(120,180), X(125,185), X(126,186),
+  X(127,187), X(128,188), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105),
+  X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116),
+  X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(151,179),
+  X(152,180), X(157,185), X(158,186), X(159,187), X(160,188), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(143,155), X(144,156), X(149,161),
+  X(150,162), X(151,163), X(152,164), X(157,169), X(158,170), X(159,171),
+  X(160,172), X(165,177), X(166,178), X(167,179), X(168,180), X(173,185),
+  X(174,186), X(175,187), X(176,188), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(149,153), X(150,154), X(151,155),
+  X(152,156), X(157,161), X(158,162), X(159,163), X(160,164), X(165,169),
+  X(166,170), X(167,171), X(168,172), X(173,177), X(174,178), X(175,179),
+  X(176,180), X(181,185), X(182,186), X(183,187), X(184,188), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(3,129), X(4,130), X(7,133), X(8,134),
+  X(11,137), X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149),
+  X(24,150), X(27,153), X(28,154), X(31,157), X(32,158), X(35,161), X(36,162),
+  X(39,165), X(40,166), X(43,169), X(44,170), X(47,173), X(48,174), X(51,177),
+  X(52,178), X(55,181), X(56,182), X(59,185), X(60,186), X(63,189), X(64,190),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94),
+  X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109),
+  X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122),
+  X(63,125), X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137),
+  X(76,138), X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150),
+  X(91,153), X(92,154), X(95,157), X(96,158), X(99,161), X(100,162), X(103,165),
+  X(104,166), X(107,169), X(108,170), X(111,173), X(112,174), X(115,177),
+  X(116,178), X(119,181), X(120,182), X(123,185), X(124,186), X(127,189),
+  X(128,190), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121),
+  X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(127,157), X(128,158),
+  X(131,161), X(132,162), X(135,165), X(136,166), X(139,169), X(140,170),
+  X(143,173), X(144,174), X(147,177), X(148,178), X(151,181), X(152,182),
+  X(155,185), X(156,186), X(159,189), X(160,190), X(3,17), X(4,18), X(7,21),
+  X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37),
+  X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53),
+  X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69),
+  X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85),
+  X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(143,157), X(144,158), X(147,161),
+  X(148,162), X(151,165), X(152,166), X(155,169), X(156,170), X(159,173),
+  X(160,174), X(163,177), X(164,178), X(167,181), X(168,182), X(171,185),
+  X(172,186), X(175,189), X(176,190), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(175,181),
+  X(176,182), X(179,185), X(180,186), X(183,189), X(184,190), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70),
+  X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86),
+  X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101),
+  X(100,102), X(103,105), X(104,106), X(107,109), X(108,110), X(111,113),
+  X(112,114), X(115,117), X(116,118), X(119,121), X(120,122), X(123,125),
+  X(124,126), X(127,129), X(128,130), X(131,133), X(132,134), X(135,137),
+  X(136,138), X(139,141), X(140,142), X(143,145), X(144,146), X(147,149),
+  X(148,150), X(151,153), X(152,154), X(155,157), X(156,158), X(159,161),
+  X(160,162), X(163,165), X(164,166), X(167,169), X(168,170), X(171,173),
+  X(172,174), X(175,177), X(176,178), X(179,181), X(180,182), X(183,185),
+  X(184,186), X(187,189), X(188,190), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181),
+  X(56,183), X(58,185), X(60,187), X(62,189), X(2,65), X(4,67), X(6,69), X(8,71),
+  X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87),
+  X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99), X(38,101),
+  X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113), X(52,115),
+  X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127), X(66,129),
+  X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141), X(80,143),
+  X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155), X(94,157),
+  X(96,159), X(98,161), X(100,163), X(102,165), X(104,167), X(106,169),
+  X(108,171), X(110,173), X(112,175), X(114,177), X(116,179), X(118,181),
+  X(120,183), X(122,185), X(124,187), X(126,189), X(2,33), X(4,35), X(6,37),
+  X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53),
+  X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69),
+  X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85),
+  X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99),
+  X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113),
+  X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127),
+  X(98,129), X(100,131), X(102,133), X(104,135), X(106,137), X(108,139),
+  X(110,141), X(112,143), X(114,145), X(116,147), X(118,149), X(120,151),
+  X(122,153), X(124,155), X(126,157), X(128,159), X(130,161), X(132,163),
+  X(134,165), X(136,167), X(138,169), X(140,171), X(142,173), X(144,175),
+  X(146,177), X(148,179), X(150,181), X(152,183), X(154,185), X(156,187),
+  X(158,189), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(160,175), X(162,177), X(164,179),
+  X(166,181), X(168,183), X(170,185), X(172,187), X(174,189), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75),
+  X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91),
+  X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105),
+  X(100,107), X(102,109), X(104,111), X(106,113), X(108,115), X(110,117),
+  X(112,119), X(114,121), X(116,123), X(118,125), X(120,127), X(122,129),
+  X(124,131), X(126,133), X(128,135), X(130,137), X(132,139), X(134,141),
+  X(136,143), X(138,145), X(140,147), X(142,149), X(144,151), X(146,153),
+  X(148,155), X(150,157), X(152,159), X(154,161), X(156,163), X(158,165),
+  X(160,167), X(162,169), X(164,171), X(166,173), X(168,175), X(170,177),
+  X(172,179), X(174,181), X(176,183), X(178,185), X(180,187), X(182,189), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(120,123),
+  X(122,125), X(124,127), X(126,129), X(128,131), X(130,133), X(132,135),
+  X(134,137), X(136,139), X(138,141), X(140,143), X(142,145), X(144,147),
+  X(146,149), X(148,151), X(150,153), X(152,155), X(154,157), X(156,159),
+  X(158,161), X(160,163), X(162,165), X(164,167), X(166,169), X(168,171),
+  X(170,173), X(172,175), X(174,177), X(176,179), X(178,181), X(180,183),
+  X(182,185), X(184,187), X(186,189), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153),
+  X(154,155), X(156,157), X(158,159), X(160,161), X(162,163), X(164,165),
+  X(166,167), X(168,169), X(170,171), X(172,173), X(174,175), X(176,177),
+  X(178,179), X(180,181), X(182,183), X(184,185), X(186,187), X(188,189)
+};
+S(192) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71),
+  X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79),
+  X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87),
+  X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95),
+  X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102),
+  X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109),
+  X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116),
+  X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123),
+  X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(65,129), X(66,130),
+  X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136), X(73,137),
+  X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143), X(80,144),
+  X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150), X(87,151),
+  X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157), X(94,158),
+  X(95,159), X(96,160), X(97,161), X(98,162), X(99,163), X(100,164), X(101,165),
+  X(102,166), X(103,167), X(104,168), X(105,169), X(106,170), X(107,171),
+  X(108,172), X(109,173), X(110,174), X(111,175), X(112,176), X(113,177),
+  X(114,178), X(115,179), X(116,180), X(117,181), X(118,182), X(119,183),
+  X(120,184), X(121,185), X(122,186), X(123,187), X(124,188), X(125,189),
+  X(126,190), X(127,191), X(128,192), X(1,33), X(2,34), X(3,35), X(4,36),
+  X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44),
+  X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52),
+  X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60),
+  X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(135,167), X(136,168), X(137,169), X(138,170), X(139,171),
+  X(140,172), X(141,173), X(142,174), X(143,175), X(144,176), X(145,177),
+  X(146,178), X(147,179), X(148,180), X(149,181), X(150,182), X(151,183),
+  X(152,184), X(153,185), X(154,186), X(155,187), X(156,188), X(157,189),
+  X(158,190), X(159,191), X(160,192), X(33,129), X(34,130), X(35,131), X(36,132),
+  X(37,133), X(38,134), X(39,135), X(40,136), X(41,137), X(42,138), X(43,139),
+  X(44,140), X(45,141), X(46,142), X(47,143), X(48,144), X(49,145), X(50,146),
+  X(51,147), X(52,148), X(53,149), X(54,150), X(55,151), X(56,152), X(57,153),
+  X(58,154), X(59,155), X(60,156), X(61,157), X(62,158), X(63,159), X(64,160),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54),
+  X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62),
+  X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86),
+  X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94),
+  X(79,95), X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117),
+  X(102,118), X(103,119), X(104,120), X(105,121), X(106,122), X(107,123),
+  X(108,124), X(109,125), X(110,126), X(111,127), X(112,128), X(129,145),
+  X(130,146), X(131,147), X(132,148), X(133,149), X(134,150), X(135,151),
+  X(136,152), X(137,153), X(138,154), X(139,155), X(140,156), X(141,157),
+  X(142,158), X(143,159), X(144,160), X(161,177), X(162,178), X(163,179),
+  X(164,180), X(165,181), X(166,182), X(167,183), X(168,184), X(169,185),
+  X(170,186), X(171,187), X(172,188), X(173,189), X(174,190), X(175,191),
+  X(176,192), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134),
+  X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141),
+  X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164),
+  X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171),
+  X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135),
+  X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142),
+  X(95,143), X(96,144), X(113,161), X(114,162), X(115,163), X(116,164),
+  X(117,165), X(118,166), X(119,167), X(120,168), X(121,169), X(122,170),
+  X(123,171), X(124,172), X(125,173), X(126,174), X(127,175), X(128,176),
+  X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40),
+  X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48),
+  X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72),
+  X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80),
+  X(81,97), X(82,98), X(83,99), X(84,100), X(85,101), X(86,102), X(87,103),
+  X(88,104), X(89,105), X(90,106), X(91,107), X(92,108), X(93,109), X(94,110),
+  X(95,111), X(96,112), X(113,129), X(114,130), X(115,131), X(116,132),
+  X(117,133), X(118,134), X(119,135), X(120,136), X(121,137), X(122,138),
+  X(123,139), X(124,140), X(125,141), X(126,142), X(127,143), X(128,144),
+  X(145,161), X(146,162), X(147,163), X(148,164), X(149,165), X(150,166),
+  X(151,167), X(152,168), X(153,169), X(154,170), X(155,171), X(156,172),
+  X(157,173), X(158,174), X(159,175), X(160,176), X(1,9), X(2,10), X(3,11),
+  X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27),
+  X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43),
+  X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59),
+  X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75),
+  X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91),
+  X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105), X(98,106),
+  X(99,107), X(100,108), X(101,109), X(102,110), X(103,111), X(104,112),
+  X(113,121), X(114,122), X(115,123), X(116,124), X(117,125), X(118,126),
+  X(119,127), X(120,128), X(129,137), X(130,138), X(131,139), X(132,140),
+  X(133,141), X(134,142), X(135,143), X(136,144), X(145,153), X(146,154),
+  X(147,155), X(148,156), X(149,157), X(150,158), X(151,159), X(152,160),
+  X(161,169), X(162,170), X(163,171), X(164,172), X(165,173), X(166,174),
+  X(167,175), X(168,176), X(177,185), X(178,186), X(179,187), X(180,188),
+  X(181,189), X(182,190), X(183,191), X(184,192), X(9,129), X(10,130), X(11,131),
+  X(12,132), X(13,133), X(14,134), X(15,135), X(16,136), X(25,145), X(26,146),
+  X(27,147), X(28,148), X(29,149), X(30,150), X(31,151), X(32,152), X(41,161),
+  X(42,162), X(43,163), X(44,164), X(45,165), X(46,166), X(47,167), X(48,168),
+  X(57,177), X(58,178), X(59,179), X(60,180), X(61,181), X(62,182), X(63,183),
+  X(64,184), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71),
+  X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87),
+  X(32,88), X(41,97), X(42,98), X(43,99), X(44,100), X(45,101), X(46,102),
+  X(47,103), X(48,104), X(57,113), X(58,114), X(59,115), X(60,116), X(61,117),
+  X(62,118), X(63,119), X(64,120), X(73,129), X(74,130), X(75,131), X(76,132),
+  X(77,133), X(78,134), X(79,135), X(80,136), X(89,145), X(90,146), X(91,147),
+  X(92,148), X(93,149), X(94,150), X(95,151), X(96,152), X(105,161), X(106,162),
+  X(107,163), X(108,164), X(109,165), X(110,166), X(111,167), X(112,168),
+  X(121,177), X(122,178), X(123,179), X(124,180), X(125,181), X(126,182),
+  X(127,183), X(128,184), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37),
+  X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53),
+  X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69),
+  X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85),
+  X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100),
+  X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115),
+  X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130),
+  X(107,131), X(108,132), X(109,133), X(110,134), X(111,135), X(112,136),
+  X(121,145), X(122,146), X(123,147), X(124,148), X(125,149), X(126,150),
+  X(127,151), X(128,152), X(137,161), X(138,162), X(139,163), X(140,164),
+  X(141,165), X(142,166), X(143,167), X(144,168), X(153,177), X(154,178),
+  X(155,179), X(156,180), X(157,181), X(158,182), X(159,183), X(160,184),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(105,113), X(106,114), X(107,115), X(108,116), X(109,117),
+  X(110,118), X(111,119), X(112,120), X(121,129), X(122,130), X(123,131),
+  X(124,132), X(125,133), X(126,134), X(127,135), X(128,136), X(137,145),
+  X(138,146), X(139,147), X(140,148), X(141,149), X(142,150), X(143,151),
+  X(144,152), X(153,161), X(154,162), X(155,163), X(156,164), X(157,165),
+  X(158,166), X(159,167), X(160,168), X(169,177), X(170,178), X(171,179),
+  X(172,180), X(173,181), X(174,182), X(175,183), X(176,184), X(1,5), X(2,6),
+  X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22),
+  X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38),
+  X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54),
+  X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70),
+  X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86),
+  X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96), X(97,101),
+  X(98,102), X(99,103), X(100,104), X(105,109), X(106,110), X(107,111),
+  X(108,112), X(113,117), X(114,118), X(115,119), X(116,120), X(121,125),
+  X(122,126), X(123,127), X(124,128), X(129,133), X(130,134), X(131,135),
+  X(132,136), X(137,141), X(138,142), X(139,143), X(140,144), X(145,149),
+  X(146,150), X(147,151), X(148,152), X(153,157), X(154,158), X(155,159),
+  X(156,160), X(161,165), X(162,166), X(163,167), X(164,168), X(169,173),
+  X(170,174), X(171,175), X(172,176), X(177,181), X(178,182), X(179,183),
+  X(180,184), X(185,189), X(186,190), X(187,191), X(188,192), X(5,129), X(6,130),
+  X(7,131), X(8,132), X(13,137), X(14,138), X(15,139), X(16,140), X(21,145),
+  X(22,146), X(23,147), X(24,148), X(29,153), X(30,154), X(31,155), X(32,156),
+  X(37,161), X(38,162), X(39,163), X(40,164), X(45,169), X(46,170), X(47,171),
+  X(48,172), X(53,177), X(54,178), X(55,179), X(56,180), X(61,185), X(62,186),
+  X(63,187), X(64,188), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74),
+  X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90),
+  X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105),
+  X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116),
+  X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131),
+  X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146),
+  X(87,147), X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161),
+  X(102,162), X(103,163), X(104,164), X(109,169), X(110,170), X(111,171),
+  X(112,172), X(117,177), X(118,178), X(119,179), X(120,180), X(125,185),
+  X(126,186), X(127,187), X(128,188), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52),
+  X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68),
+  X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84),
+  X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(103,131), X(104,132), X(109,137), X(110,138), X(111,139),
+  X(112,140), X(117,145), X(118,146), X(119,147), X(120,148), X(125,153),
+  X(126,154), X(127,155), X(128,156), X(133,161), X(134,162), X(135,163),
+  X(136,164), X(141,169), X(142,170), X(143,171), X(144,172), X(149,177),
+  X(150,178), X(151,179), X(152,180), X(157,185), X(158,186), X(159,187),
+  X(160,188), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27),
+  X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43),
+  X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59),
+  X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75),
+  X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91),
+  X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106),
+  X(95,107), X(96,108), X(101,113), X(102,114), X(103,115), X(104,116),
+  X(109,121), X(110,122), X(111,123), X(112,124), X(117,129), X(118,130),
+  X(119,131), X(120,132), X(125,137), X(126,138), X(127,139), X(128,140),
+  X(133,145), X(134,146), X(135,147), X(136,148), X(141,153), X(142,154),
+  X(143,155), X(144,156), X(149,161), X(150,162), X(151,163), X(152,164),
+  X(157,169), X(158,170), X(159,171), X(160,172), X(165,177), X(166,178),
+  X(167,179), X(168,180), X(173,185), X(174,186), X(175,187), X(176,188), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25),
+  X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41),
+  X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57),
+  X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73),
+  X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89),
+  X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100),
+  X(101,105), X(102,106), X(103,107), X(104,108), X(109,113), X(110,114),
+  X(111,115), X(112,116), X(117,121), X(118,122), X(119,123), X(120,124),
+  X(125,129), X(126,130), X(127,131), X(128,132), X(133,137), X(134,138),
+  X(135,139), X(136,140), X(141,145), X(142,146), X(143,147), X(144,148),
+  X(149,153), X(150,154), X(151,155), X(152,156), X(157,161), X(158,162),
+  X(159,163), X(160,164), X(165,169), X(166,170), X(167,171), X(168,172),
+  X(173,177), X(174,178), X(175,179), X(176,180), X(181,185), X(182,186),
+  X(183,187), X(184,188), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(129,131),
+  X(130,132), X(133,135), X(134,136), X(137,139), X(138,140), X(141,143),
+  X(142,144), X(145,147), X(146,148), X(149,151), X(150,152), X(153,155),
+  X(154,156), X(157,159), X(158,160), X(161,163), X(162,164), X(165,167),
+  X(166,168), X(169,171), X(170,172), X(173,175), X(174,176), X(177,179),
+  X(178,180), X(181,183), X(182,184), X(185,187), X(186,188), X(189,191),
+  X(190,192), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154),
+  X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(127,189), X(128,190),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78),
+  X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94),
+  X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109),
+  X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121), X(92,122),
+  X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(127,157), X(128,158),
+  X(131,161), X(132,162), X(135,165), X(136,166), X(139,169), X(140,170),
+  X(143,173), X(144,174), X(147,177), X(148,178), X(151,181), X(152,182),
+  X(155,185), X(156,186), X(159,189), X(160,190), X(3,17), X(4,18), X(7,21),
+  X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37),
+  X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53),
+  X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69),
+  X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85),
+  X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(143,157), X(144,158), X(147,161),
+  X(148,162), X(151,165), X(152,166), X(155,169), X(156,170), X(159,173),
+  X(160,174), X(163,177), X(164,178), X(167,181), X(168,182), X(171,185),
+  X(172,186), X(175,189), X(176,190), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(175,181),
+  X(176,182), X(179,185), X(180,186), X(183,189), X(184,190), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70),
+  X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86),
+  X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101),
+  X(100,102), X(103,105), X(104,106), X(107,109), X(108,110), X(111,113),
+  X(112,114), X(115,117), X(116,118), X(119,121), X(120,122), X(123,125),
+  X(124,126), X(127,129), X(128,130), X(131,133), X(132,134), X(135,137),
+  X(136,138), X(139,141), X(140,142), X(143,145), X(144,146), X(147,149),
+  X(148,150), X(151,153), X(152,154), X(155,157), X(156,158), X(159,161),
+  X(160,162), X(163,165), X(164,166), X(167,169), X(168,170), X(171,173),
+  X(172,174), X(175,177), X(176,178), X(179,181), X(180,182), X(183,185),
+  X(184,186), X(187,189), X(188,190), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137),
+  X(12,139), X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151),
+  X(26,153), X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165),
+  X(40,167), X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179),
+  X(54,181), X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(2,65),
+  X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81),
+  X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97),
+  X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111),
+  X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125),
+  X(64,127), X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139),
+  X(78,141), X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153),
+  X(92,155), X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(124,187), X(126,189), X(128,191),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95),
+  X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109),
+  X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(92,123),
+  X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(146,177), X(148,179), X(150,181), X(152,183),
+  X(154,185), X(156,187), X(158,189), X(160,191), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(170,185),
+  X(172,187), X(174,189), X(176,191), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(108,115), X(110,117), X(112,119), X(114,121),
+  X(116,123), X(118,125), X(120,127), X(122,129), X(124,131), X(126,133),
+  X(128,135), X(130,137), X(132,139), X(134,141), X(136,143), X(138,145),
+  X(140,147), X(142,149), X(144,151), X(146,153), X(148,155), X(150,157),
+  X(152,159), X(154,161), X(156,163), X(158,165), X(160,167), X(162,169),
+  X(164,171), X(166,173), X(168,175), X(170,177), X(172,179), X(174,181),
+  X(176,183), X(178,185), X(180,187), X(182,189), X(184,191), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(130,133), X(132,135), X(134,137),
+  X(136,139), X(138,141), X(140,143), X(142,145), X(144,147), X(146,149),
+  X(148,151), X(150,153), X(152,155), X(154,157), X(156,159), X(158,161),
+  X(160,163), X(162,165), X(164,167), X(166,169), X(168,171), X(170,173),
+  X(172,175), X(174,177), X(176,179), X(178,181), X(180,183), X(182,185),
+  X(184,187), X(186,189), X(188,191), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153),
+  X(154,155), X(156,157), X(158,159), X(160,161), X(162,163), X(164,165),
+  X(166,167), X(168,169), X(170,171), X(172,173), X(174,175), X(176,177),
+  X(178,179), X(180,181), X(182,183), X(184,185), X(186,187), X(188,189),
+  X(190,191)
+};
+S(194) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69),
+  X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77),
+  X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85),
+  X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93),
+  X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100),
+  X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107),
+  X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114),
+  X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121),
+  X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128),
+  X(129,193), X(130,194), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133),
+  X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140),
+  X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147),
+  X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154),
+  X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160), X(97,161),
+  X(98,162), X(99,163), X(100,164), X(101,165), X(102,166), X(103,167),
+  X(104,168), X(105,169), X(106,170), X(107,171), X(108,172), X(109,173),
+  X(110,174), X(111,175), X(112,176), X(113,177), X(114,178), X(115,179),
+  X(116,180), X(117,181), X(118,182), X(119,183), X(120,184), X(121,185),
+  X(122,186), X(123,187), X(124,188), X(125,189), X(126,190), X(127,191),
+  X(128,192), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39),
+  X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47),
+  X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55),
+  X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63),
+  X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102),
+  X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109),
+  X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116),
+  X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123),
+  X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161), X(130,162),
+  X(131,163), X(132,164), X(133,165), X(134,166), X(135,167), X(136,168),
+  X(137,169), X(138,170), X(139,171), X(140,172), X(141,173), X(142,174),
+  X(143,175), X(144,176), X(145,177), X(146,178), X(147,179), X(148,180),
+  X(149,181), X(150,182), X(151,183), X(152,184), X(153,185), X(154,186),
+  X(155,187), X(156,188), X(157,189), X(158,190), X(159,191), X(160,192),
+  X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134), X(39,135),
+  X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141), X(46,142),
+  X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148), X(53,149),
+  X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155), X(60,156),
+  X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194), X(33,65),
+  X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73),
+  X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81),
+  X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89),
+  X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(17,129), X(18,130),
+  X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136), X(25,137),
+  X(26,138), X(27,139), X(28,140), X(29,141), X(30,142), X(31,143), X(32,144),
+  X(49,161), X(50,162), X(51,163), X(52,164), X(53,165), X(54,166), X(55,167),
+  X(56,168), X(57,169), X(58,170), X(59,171), X(60,172), X(61,173), X(62,174),
+  X(63,175), X(64,176), X(81,193), X(82,194), X(17,65), X(18,66), X(19,67),
+  X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75),
+  X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(119,167), X(120,168), X(121,169), X(122,170), X(123,171),
+  X(124,172), X(125,173), X(126,174), X(127,175), X(128,176), X(145,193),
+  X(146,194), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100), X(85,101),
+  X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107), X(92,108),
+  X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130), X(115,131),
+  X(116,132), X(117,133), X(118,134), X(119,135), X(120,136), X(121,137),
+  X(122,138), X(123,139), X(124,140), X(125,141), X(126,142), X(127,143),
+  X(128,144), X(145,161), X(146,162), X(147,163), X(148,164), X(149,165),
+  X(150,166), X(151,167), X(152,168), X(153,169), X(154,170), X(155,171),
+  X(156,172), X(157,173), X(158,174), X(159,175), X(160,176), X(177,193),
+  X(178,194), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15),
+  X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31),
+  X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47),
+  X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63),
+  X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79),
+  X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95),
+  X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(145,153), X(146,154), X(147,155), X(148,156), X(149,157), X(150,158),
+  X(151,159), X(152,160), X(161,169), X(162,170), X(163,171), X(164,172),
+  X(165,173), X(166,174), X(167,175), X(168,176), X(177,185), X(178,186),
+  X(179,187), X(180,188), X(181,189), X(182,190), X(183,191), X(184,192),
+  X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135),
+  X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149), X(30,150),
+  X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164), X(45,165),
+  X(46,166), X(47,167), X(48,168), X(57,177), X(58,178), X(59,179), X(60,180),
+  X(61,181), X(62,182), X(63,183), X(64,184), X(73,193), X(74,194), X(9,65),
+  X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81),
+  X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97),
+  X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104),
+  X(57,113), X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119),
+  X(64,120), X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134),
+  X(79,135), X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149),
+  X(94,150), X(95,151), X(96,152), X(105,161), X(106,162), X(107,163),
+  X(108,164), X(109,165), X(110,166), X(111,167), X(112,168), X(121,177),
+  X(122,178), X(123,179), X(124,180), X(125,181), X(126,182), X(127,183),
+  X(128,184), X(137,193), X(138,194), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52),
+  X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68),
+  X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84),
+  X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(121,145), X(122,146), X(123,147), X(124,148), X(125,149),
+  X(126,150), X(127,151), X(128,152), X(137,161), X(138,162), X(139,163),
+  X(140,164), X(141,165), X(142,166), X(143,167), X(144,168), X(153,177),
+  X(154,178), X(155,179), X(156,180), X(157,181), X(158,182), X(159,183),
+  X(160,184), X(169,193), X(170,194), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52),
+  X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68),
+  X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84),
+  X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(125,133), X(126,134),
+  X(127,135), X(128,136), X(137,145), X(138,146), X(139,147), X(140,148),
+  X(141,149), X(142,150), X(143,151), X(144,152), X(153,161), X(154,162),
+  X(155,163), X(156,164), X(157,165), X(158,166), X(159,167), X(160,168),
+  X(169,177), X(170,178), X(171,179), X(172,180), X(173,181), X(174,182),
+  X(175,183), X(176,184), X(185,193), X(186,194), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88),
+  X(89,93), X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103),
+  X(100,104), X(105,109), X(106,110), X(107,111), X(108,112), X(113,117),
+  X(114,118), X(115,119), X(116,120), X(121,125), X(122,126), X(123,127),
+  X(124,128), X(129,133), X(130,134), X(131,135), X(132,136), X(137,141),
+  X(138,142), X(139,143), X(140,144), X(145,149), X(146,150), X(147,151),
+  X(148,152), X(153,157), X(154,158), X(155,159), X(156,160), X(161,165),
+  X(162,166), X(163,167), X(164,168), X(169,173), X(170,174), X(171,175),
+  X(172,176), X(177,181), X(178,182), X(179,183), X(180,184), X(185,189),
+  X(186,190), X(187,191), X(188,192), X(5,129), X(6,130), X(7,131), X(8,132),
+  X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147),
+  X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162),
+  X(39,163), X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(53,177),
+  X(54,178), X(55,179), X(56,180), X(61,185), X(62,186), X(63,187), X(64,188),
+  X(69,193), X(70,194), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74),
+  X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90),
+  X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105),
+  X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116),
+  X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131),
+  X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146),
+  X(87,147), X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161),
+  X(102,162), X(103,163), X(104,164), X(109,169), X(110,170), X(111,171),
+  X(112,172), X(117,177), X(118,178), X(119,179), X(120,180), X(125,185),
+  X(126,186), X(127,187), X(128,188), X(133,193), X(134,194), X(5,33), X(6,34),
+  X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50),
+  X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66),
+  X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82),
+  X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98),
+  X(71,99), X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113),
+  X(86,114), X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124),
+  X(101,129), X(102,130), X(103,131), X(104,132), X(109,137), X(110,138),
+  X(111,139), X(112,140), X(117,145), X(118,146), X(119,147), X(120,148),
+  X(125,153), X(126,154), X(127,155), X(128,156), X(133,161), X(134,162),
+  X(135,163), X(136,164), X(141,169), X(142,170), X(143,171), X(144,172),
+  X(149,177), X(150,178), X(151,179), X(152,180), X(157,185), X(158,186),
+  X(159,187), X(160,188), X(165,193), X(166,194), X(5,17), X(6,18), X(7,19),
+  X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35),
+  X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51),
+  X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67),
+  X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83),
+  X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(173,185), X(174,186),
+  X(175,187), X(176,188), X(181,193), X(182,194), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27),
+  X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43),
+  X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59),
+  X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75),
+  X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91),
+  X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106),
+  X(103,107), X(104,108), X(109,113), X(110,114), X(111,115), X(112,116),
+  X(117,121), X(118,122), X(119,123), X(120,124), X(125,129), X(126,130),
+  X(127,131), X(128,132), X(133,137), X(134,138), X(135,139), X(136,140),
+  X(141,145), X(142,146), X(143,147), X(144,148), X(149,153), X(150,154),
+  X(151,155), X(152,156), X(157,161), X(158,162), X(159,163), X(160,164),
+  X(165,169), X(166,170), X(167,171), X(168,172), X(173,177), X(174,178),
+  X(175,179), X(176,180), X(181,185), X(182,186), X(183,187), X(184,188),
+  X(189,193), X(190,194), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(129,131),
+  X(130,132), X(133,135), X(134,136), X(137,139), X(138,140), X(141,143),
+  X(142,144), X(145,147), X(146,148), X(149,151), X(150,152), X(153,155),
+  X(154,156), X(157,159), X(158,160), X(161,163), X(162,164), X(165,167),
+  X(166,168), X(169,171), X(170,172), X(173,175), X(174,176), X(177,179),
+  X(178,180), X(181,183), X(182,184), X(185,187), X(186,188), X(189,191),
+  X(190,192), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94),
+  X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109),
+  X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122),
+  X(63,125), X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137),
+  X(76,138), X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150),
+  X(91,153), X(92,154), X(95,157), X(96,158), X(99,161), X(100,162), X(103,165),
+  X(104,166), X(107,169), X(108,170), X(111,173), X(112,174), X(115,177),
+  X(116,178), X(119,181), X(120,182), X(123,185), X(124,186), X(127,189),
+  X(128,190), X(131,193), X(132,194), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70),
+  X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86),
+  X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98), X(71,101),
+  X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113), X(84,114),
+  X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126), X(99,129),
+  X(100,130), X(103,133), X(104,134), X(107,137), X(108,138), X(111,141),
+  X(112,142), X(115,145), X(116,146), X(119,149), X(120,150), X(123,153),
+  X(124,154), X(127,157), X(128,158), X(131,161), X(132,162), X(135,165),
+  X(136,166), X(139,169), X(140,170), X(143,173), X(144,174), X(147,177),
+  X(148,178), X(151,181), X(152,182), X(155,185), X(156,186), X(159,189),
+  X(160,190), X(163,193), X(164,194), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70),
+  X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86),
+  X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98), X(87,101),
+  X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113), X(100,114),
+  X(103,117), X(104,118), X(107,121), X(108,122), X(111,125), X(112,126),
+  X(115,129), X(116,130), X(119,133), X(120,134), X(123,137), X(124,138),
+  X(127,141), X(128,142), X(131,145), X(132,146), X(135,149), X(136,150),
+  X(139,153), X(140,154), X(143,157), X(144,158), X(147,161), X(148,162),
+  X(151,165), X(152,166), X(155,169), X(156,170), X(159,173), X(160,174),
+  X(163,177), X(164,178), X(167,181), X(168,182), X(171,185), X(172,186),
+  X(175,189), X(176,190), X(179,193), X(180,194), X(3,9), X(4,10), X(7,13),
+  X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29),
+  X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45),
+  X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61),
+  X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77),
+  X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93),
+  X(88,94), X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106),
+  X(103,109), X(104,110), X(107,113), X(108,114), X(111,117), X(112,118),
+  X(115,121), X(116,122), X(119,125), X(120,126), X(123,129), X(124,130),
+  X(127,133), X(128,134), X(131,137), X(132,138), X(135,141), X(136,142),
+  X(139,145), X(140,146), X(143,149), X(144,150), X(147,153), X(148,154),
+  X(151,157), X(152,158), X(155,161), X(156,162), X(159,165), X(160,166),
+  X(163,169), X(164,170), X(167,173), X(168,174), X(171,177), X(172,178),
+  X(175,181), X(176,182), X(179,185), X(180,186), X(183,189), X(184,190),
+  X(187,193), X(188,194), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94),
+  X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(115,117), X(116,118), X(119,121),
+  X(120,122), X(123,125), X(124,126), X(127,129), X(128,130), X(131,133),
+  X(132,134), X(135,137), X(136,138), X(139,141), X(140,142), X(143,145),
+  X(144,146), X(147,149), X(148,150), X(151,153), X(152,154), X(155,157),
+  X(156,158), X(159,161), X(160,162), X(163,165), X(164,166), X(167,169),
+  X(168,170), X(171,173), X(172,174), X(175,177), X(176,178), X(179,181),
+  X(180,182), X(183,185), X(184,186), X(187,189), X(188,190), X(191,193),
+  X(192,194), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181),
+  X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(2,65),
+  X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81),
+  X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97),
+  X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111),
+  X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125),
+  X(64,127), X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139),
+  X(78,141), X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153),
+  X(92,155), X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(124,187), X(126,189), X(128,191),
+  X(130,193), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45),
+  X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61),
+  X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77),
+  X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93),
+  X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107),
+  X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121),
+  X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(146,177), X(148,179), X(150,181), X(152,183),
+  X(154,185), X(156,187), X(158,189), X(160,191), X(162,193), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83),
+  X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(170,185),
+  X(172,187), X(174,189), X(176,191), X(178,193), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45),
+  X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61),
+  X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77),
+  X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93),
+  X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107),
+  X(102,109), X(104,111), X(106,113), X(108,115), X(110,117), X(112,119),
+  X(114,121), X(116,123), X(118,125), X(120,127), X(122,129), X(124,131),
+  X(126,133), X(128,135), X(130,137), X(132,139), X(134,141), X(136,143),
+  X(138,145), X(140,147), X(142,149), X(144,151), X(146,153), X(148,155),
+  X(150,157), X(152,159), X(154,161), X(156,163), X(158,165), X(160,167),
+  X(162,169), X(164,171), X(166,173), X(168,175), X(170,177), X(172,179),
+  X(174,181), X(176,183), X(178,185), X(180,187), X(182,189), X(184,191),
+  X(186,193), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17),
+  X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33),
+  X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49),
+  X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65),
+  X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81),
+  X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97),
+  X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133),
+  X(132,135), X(134,137), X(136,139), X(138,141), X(140,143), X(142,145),
+  X(144,147), X(146,149), X(148,151), X(150,153), X(152,155), X(154,157),
+  X(156,159), X(158,161), X(160,163), X(162,165), X(164,167), X(166,169),
+  X(168,171), X(170,173), X(172,175), X(174,177), X(176,179), X(178,181),
+  X(180,183), X(182,185), X(184,187), X(186,189), X(188,191), X(190,193), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193)
+};
+S(196) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(1,65), X(2,66),
+  X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74),
+  X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82),
+  X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90),
+  X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98),
+  X(35,99), X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105),
+  X(42,106), X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112),
+  X(49,113), X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119),
+  X(56,120), X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126),
+  X(63,127), X(64,128), X(129,193), X(130,194), X(131,195), X(132,196),
+  X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135),
+  X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142),
+  X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149),
+  X(86,150), X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156),
+  X(93,157), X(94,158), X(95,159), X(96,160), X(97,161), X(98,162), X(99,163),
+  X(100,164), X(101,165), X(102,166), X(103,167), X(104,168), X(105,169),
+  X(106,170), X(107,171), X(108,172), X(109,173), X(110,174), X(111,175),
+  X(112,176), X(113,177), X(114,178), X(115,179), X(116,180), X(117,181),
+  X(118,182), X(119,183), X(120,184), X(121,185), X(122,186), X(123,187),
+  X(124,188), X(125,189), X(126,190), X(127,191), X(128,192), X(1,33), X(2,34),
+  X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42),
+  X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50),
+  X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58),
+  X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98),
+  X(67,99), X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105),
+  X(74,106), X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112),
+  X(81,113), X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119),
+  X(88,120), X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126),
+  X(95,127), X(96,128), X(129,161), X(130,162), X(131,163), X(132,164),
+  X(133,165), X(134,166), X(135,167), X(136,168), X(137,169), X(138,170),
+  X(139,171), X(140,172), X(141,173), X(142,174), X(143,175), X(144,176),
+  X(145,177), X(146,178), X(147,179), X(148,180), X(149,181), X(150,182),
+  X(151,183), X(152,184), X(153,185), X(154,186), X(155,187), X(156,188),
+  X(157,189), X(158,190), X(159,191), X(160,192), X(33,129), X(34,130),
+  X(35,131), X(36,132), X(37,133), X(38,134), X(39,135), X(40,136), X(41,137),
+  X(42,138), X(43,139), X(44,140), X(45,141), X(46,142), X(47,143), X(48,144),
+  X(49,145), X(50,146), X(51,147), X(52,148), X(53,149), X(54,150), X(55,151),
+  X(56,152), X(57,153), X(58,154), X(59,155), X(60,156), X(61,157), X(62,158),
+  X(63,159), X(64,160), X(97,193), X(98,194), X(99,195), X(100,196), X(33,65),
+  X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73),
+  X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81),
+  X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89),
+  X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88),
+  X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96),
+  X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(129,145), X(130,146),
+  X(131,147), X(132,148), X(133,149), X(134,150), X(135,151), X(136,152),
+  X(137,153), X(138,154), X(139,155), X(140,156), X(141,157), X(142,158),
+  X(143,159), X(144,160), X(161,177), X(162,178), X(163,179), X(164,180),
+  X(165,181), X(166,182), X(167,183), X(168,184), X(169,185), X(170,186),
+  X(171,187), X(172,188), X(173,189), X(174,190), X(175,191), X(176,192),
+  X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134), X(23,135),
+  X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141), X(30,142),
+  X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164), X(53,165),
+  X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171), X(60,172),
+  X(61,173), X(62,174), X(63,175), X(64,176), X(81,193), X(82,194), X(83,195),
+  X(84,196), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100), X(53,101),
+  X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107), X(60,108),
+  X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130), X(83,131),
+  X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137), X(90,138),
+  X(91,139), X(92,140), X(93,141), X(94,142), X(95,143), X(96,144), X(113,161),
+  X(114,162), X(115,163), X(116,164), X(117,165), X(118,166), X(119,167),
+  X(120,168), X(121,169), X(122,170), X(123,171), X(124,172), X(125,173),
+  X(126,174), X(127,175), X(128,176), X(145,193), X(146,194), X(147,195),
+  X(148,196), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100), X(85,101),
+  X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107), X(92,108),
+  X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130), X(115,131),
+  X(116,132), X(117,133), X(118,134), X(119,135), X(120,136), X(121,137),
+  X(122,138), X(123,139), X(124,140), X(125,141), X(126,142), X(127,143),
+  X(128,144), X(145,161), X(146,162), X(147,163), X(148,164), X(149,165),
+  X(150,166), X(151,167), X(152,168), X(153,169), X(154,170), X(155,171),
+  X(156,172), X(157,173), X(158,174), X(159,175), X(160,176), X(177,193),
+  X(178,194), X(179,195), X(180,196), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13),
+  X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29),
+  X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45),
+  X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61),
+  X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77),
+  X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93),
+  X(86,94), X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108),
+  X(101,109), X(102,110), X(103,111), X(104,112), X(113,121), X(114,122),
+  X(115,123), X(116,124), X(117,125), X(118,126), X(119,127), X(120,128),
+  X(129,137), X(130,138), X(131,139), X(132,140), X(133,141), X(134,142),
+  X(135,143), X(136,144), X(145,153), X(146,154), X(147,155), X(148,156),
+  X(149,157), X(150,158), X(151,159), X(152,160), X(161,169), X(162,170),
+  X(163,171), X(164,172), X(165,173), X(166,174), X(167,175), X(168,176),
+  X(177,185), X(178,186), X(179,187), X(180,188), X(181,189), X(182,190),
+  X(183,191), X(184,192), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133),
+  X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148),
+  X(29,149), X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163),
+  X(44,164), X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178),
+  X(59,179), X(60,180), X(61,181), X(62,182), X(63,183), X(64,184), X(73,193),
+  X(74,194), X(75,195), X(76,196), X(9,65), X(10,66), X(11,67), X(12,68),
+  X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84),
+  X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99),
+  X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114),
+  X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129),
+  X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136),
+  X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151),
+  X(96,152), X(105,161), X(106,162), X(107,163), X(108,164), X(109,165),
+  X(110,166), X(111,167), X(112,168), X(121,177), X(122,178), X(123,179),
+  X(124,180), X(125,181), X(126,182), X(127,183), X(128,184), X(137,193),
+  X(138,194), X(139,195), X(140,196), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52),
+  X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68),
+  X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84),
+  X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(121,145), X(122,146), X(123,147), X(124,148), X(125,149),
+  X(126,150), X(127,151), X(128,152), X(137,161), X(138,162), X(139,163),
+  X(140,164), X(141,165), X(142,166), X(143,167), X(144,168), X(153,177),
+  X(154,178), X(155,179), X(156,180), X(157,181), X(158,182), X(159,183),
+  X(160,184), X(169,193), X(170,194), X(171,195), X(172,196), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113),
+  X(106,114), X(107,115), X(108,116), X(109,117), X(110,118), X(111,119),
+  X(112,120), X(121,129), X(122,130), X(123,131), X(124,132), X(125,133),
+  X(126,134), X(127,135), X(128,136), X(137,145), X(138,146), X(139,147),
+  X(140,148), X(141,149), X(142,150), X(143,151), X(144,152), X(153,161),
+  X(154,162), X(155,163), X(156,164), X(157,165), X(158,166), X(159,167),
+  X(160,168), X(169,177), X(170,178), X(171,179), X(172,180), X(173,181),
+  X(174,182), X(175,183), X(176,184), X(185,193), X(186,194), X(187,195),
+  X(188,196), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(185,189), X(186,190), X(187,191), X(188,192),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153), X(30,154),
+  X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164), X(45,169),
+  X(46,170), X(47,171), X(48,172), X(53,177), X(54,178), X(55,179), X(56,180),
+  X(61,185), X(62,186), X(63,187), X(64,188), X(69,193), X(70,194), X(71,195),
+  X(72,196), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147),
+  X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162),
+  X(103,163), X(104,164), X(109,169), X(110,170), X(111,171), X(112,172),
+  X(117,177), X(118,178), X(119,179), X(120,180), X(125,185), X(126,186),
+  X(127,187), X(128,188), X(133,193), X(134,194), X(135,195), X(136,196),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92),
+  X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107),
+  X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121), X(94,122),
+  X(95,123), X(96,124), X(101,129), X(102,130), X(103,131), X(104,132),
+  X(109,137), X(110,138), X(111,139), X(112,140), X(117,145), X(118,146),
+  X(119,147), X(120,148), X(125,153), X(126,154), X(127,155), X(128,156),
+  X(133,161), X(134,162), X(135,163), X(136,164), X(141,169), X(142,170),
+  X(143,171), X(144,172), X(149,177), X(150,178), X(151,179), X(152,180),
+  X(157,185), X(158,186), X(159,187), X(160,188), X(165,193), X(166,194),
+  X(167,195), X(168,196), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105),
+  X(94,106), X(95,107), X(96,108), X(101,113), X(102,114), X(103,115),
+  X(104,116), X(109,121), X(110,122), X(111,123), X(112,124), X(117,129),
+  X(118,130), X(119,131), X(120,132), X(125,137), X(126,138), X(127,139),
+  X(128,140), X(133,145), X(134,146), X(135,147), X(136,148), X(141,153),
+  X(142,154), X(143,155), X(144,156), X(149,161), X(150,162), X(151,163),
+  X(152,164), X(157,169), X(158,170), X(159,171), X(160,172), X(165,177),
+  X(166,178), X(167,179), X(168,180), X(173,185), X(174,186), X(175,187),
+  X(176,188), X(181,193), X(182,194), X(183,195), X(184,196), X(5,9), X(6,10),
+  X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26),
+  X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42),
+  X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58),
+  X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74),
+  X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90),
+  X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105),
+  X(102,106), X(103,107), X(104,108), X(109,113), X(110,114), X(111,115),
+  X(112,116), X(117,121), X(118,122), X(119,123), X(120,124), X(125,129),
+  X(126,130), X(127,131), X(128,132), X(133,137), X(134,138), X(135,139),
+  X(136,140), X(141,145), X(142,146), X(143,147), X(144,148), X(149,153),
+  X(150,154), X(151,155), X(152,156), X(157,161), X(158,162), X(159,163),
+  X(160,164), X(165,169), X(166,170), X(167,171), X(168,172), X(173,177),
+  X(174,178), X(175,179), X(176,180), X(181,185), X(182,186), X(183,187),
+  X(184,188), X(189,193), X(190,194), X(191,195), X(192,196), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94),
+  X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109),
+  X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122),
+  X(63,125), X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137),
+  X(76,138), X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150),
+  X(91,153), X(92,154), X(95,157), X(96,158), X(99,161), X(100,162), X(103,165),
+  X(104,166), X(107,169), X(108,170), X(111,173), X(112,174), X(115,177),
+  X(116,178), X(119,181), X(120,182), X(123,185), X(124,186), X(127,189),
+  X(128,190), X(131,193), X(132,194), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70),
+  X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86),
+  X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98), X(71,101),
+  X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113), X(84,114),
+  X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126), X(99,129),
+  X(100,130), X(103,133), X(104,134), X(107,137), X(108,138), X(111,141),
+  X(112,142), X(115,145), X(116,146), X(119,149), X(120,150), X(123,153),
+  X(124,154), X(127,157), X(128,158), X(131,161), X(132,162), X(135,165),
+  X(136,166), X(139,169), X(140,170), X(143,173), X(144,174), X(147,177),
+  X(148,178), X(151,181), X(152,182), X(155,185), X(156,186), X(159,189),
+  X(160,190), X(163,193), X(164,194), X(3,17), X(4,18), X(7,21), X(8,22),
+  X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38),
+  X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54),
+  X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70),
+  X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86),
+  X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98), X(87,101),
+  X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113), X(100,114),
+  X(103,117), X(104,118), X(107,121), X(108,122), X(111,125), X(112,126),
+  X(115,129), X(116,130), X(119,133), X(120,134), X(123,137), X(124,138),
+  X(127,141), X(128,142), X(131,145), X(132,146), X(135,149), X(136,150),
+  X(139,153), X(140,154), X(143,157), X(144,158), X(147,161), X(148,162),
+  X(151,165), X(152,166), X(155,169), X(156,170), X(159,173), X(160,174),
+  X(163,177), X(164,178), X(167,181), X(168,182), X(171,185), X(172,186),
+  X(175,189), X(176,190), X(179,193), X(180,194), X(3,9), X(4,10), X(7,13),
+  X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29),
+  X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45),
+  X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61),
+  X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77),
+  X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93),
+  X(88,94), X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106),
+  X(103,109), X(104,110), X(107,113), X(108,114), X(111,117), X(112,118),
+  X(115,121), X(116,122), X(119,125), X(120,126), X(123,129), X(124,130),
+  X(127,133), X(128,134), X(131,137), X(132,138), X(135,141), X(136,142),
+  X(139,145), X(140,146), X(143,149), X(144,150), X(147,153), X(148,154),
+  X(151,157), X(152,158), X(155,161), X(156,162), X(159,165), X(160,166),
+  X(163,169), X(164,170), X(167,173), X(168,174), X(171,177), X(172,178),
+  X(175,181), X(176,182), X(179,185), X(180,186), X(183,189), X(184,190),
+  X(187,193), X(188,194), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94),
+  X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(115,117), X(116,118), X(119,121),
+  X(120,122), X(123,125), X(124,126), X(127,129), X(128,130), X(131,133),
+  X(132,134), X(135,137), X(136,138), X(139,141), X(140,142), X(143,145),
+  X(144,146), X(147,149), X(148,150), X(151,153), X(152,154), X(155,157),
+  X(156,158), X(159,161), X(160,162), X(163,165), X(164,166), X(167,169),
+  X(168,170), X(171,173), X(172,174), X(175,177), X(176,178), X(179,181),
+  X(180,182), X(183,185), X(184,186), X(187,189), X(188,190), X(191,193),
+  X(192,194), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14),
+  X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30),
+  X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46),
+  X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62),
+  X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78),
+  X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94),
+  X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106), X(107,108),
+  X(109,110), X(111,112), X(113,114), X(115,116), X(117,118), X(119,120),
+  X(121,122), X(123,124), X(125,126), X(127,128), X(129,130), X(131,132),
+  X(133,134), X(135,136), X(137,138), X(139,140), X(141,142), X(143,144),
+  X(145,146), X(147,148), X(149,150), X(151,152), X(153,154), X(155,156),
+  X(157,158), X(159,160), X(161,162), X(163,164), X(165,166), X(167,168),
+  X(169,170), X(171,172), X(173,174), X(175,176), X(177,178), X(179,180),
+  X(181,182), X(183,184), X(185,186), X(187,188), X(189,190), X(191,192),
+  X(193,194), X(195,196), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137),
+  X(12,139), X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151),
+  X(26,153), X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165),
+  X(40,167), X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179),
+  X(54,181), X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193),
+  X(68,195), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107),
+  X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121),
+  X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135),
+  X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149),
+  X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161), X(100,163),
+  X(102,165), X(104,167), X(106,169), X(108,171), X(110,173), X(112,175),
+  X(114,177), X(116,179), X(118,181), X(120,183), X(122,185), X(124,187),
+  X(126,189), X(128,191), X(130,193), X(132,195), X(2,33), X(4,35), X(6,37),
+  X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53),
+  X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69),
+  X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85),
+  X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99),
+  X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113),
+  X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127),
+  X(98,129), X(100,131), X(102,133), X(104,135), X(106,137), X(108,139),
+  X(110,141), X(112,143), X(114,145), X(116,147), X(118,149), X(120,151),
+  X(122,153), X(124,155), X(126,157), X(128,159), X(130,161), X(132,163),
+  X(134,165), X(136,167), X(138,169), X(140,171), X(142,173), X(144,175),
+  X(146,177), X(148,179), X(150,181), X(152,183), X(154,185), X(156,187),
+  X(158,189), X(160,191), X(162,193), X(164,195), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(170,185),
+  X(172,187), X(174,189), X(176,191), X(178,193), X(180,195), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75),
+  X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91),
+  X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105),
+  X(100,107), X(102,109), X(104,111), X(106,113), X(108,115), X(110,117),
+  X(112,119), X(114,121), X(116,123), X(118,125), X(120,127), X(122,129),
+  X(124,131), X(126,133), X(128,135), X(130,137), X(132,139), X(134,141),
+  X(136,143), X(138,145), X(140,147), X(142,149), X(144,151), X(146,153),
+  X(148,155), X(150,157), X(152,159), X(154,161), X(156,163), X(158,165),
+  X(160,167), X(162,169), X(164,171), X(166,173), X(168,175), X(170,177),
+  X(172,179), X(174,181), X(176,183), X(178,185), X(180,187), X(182,189),
+  X(184,191), X(186,193), X(188,195), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29),
+  X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45),
+  X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61),
+  X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77),
+  X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93),
+  X(92,95), X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107),
+  X(106,109), X(108,111), X(110,113), X(112,115), X(114,117), X(116,119),
+  X(118,121), X(120,123), X(122,125), X(124,127), X(126,129), X(128,131),
+  X(130,133), X(132,135), X(134,137), X(136,139), X(138,141), X(140,143),
+  X(142,145), X(144,147), X(146,149), X(148,151), X(150,153), X(152,155),
+  X(154,157), X(156,159), X(158,161), X(160,163), X(162,165), X(164,167),
+  X(166,169), X(168,171), X(170,173), X(172,175), X(174,177), X(176,179),
+  X(178,181), X(180,183), X(182,185), X(184,187), X(186,189), X(188,191),
+  X(190,193), X(192,195), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(142,143),
+  X(144,145), X(146,147), X(148,149), X(150,151), X(152,153), X(154,155),
+  X(156,157), X(158,159), X(160,161), X(162,163), X(164,165), X(166,167),
+  X(168,169), X(170,171), X(172,173), X(174,175), X(176,177), X(178,179),
+  X(180,181), X(182,183), X(184,185), X(186,187), X(188,189), X(190,191),
+  X(192,193), X(194,195)
+};
+S(198) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124),
+  X(61,125), X(62,126), X(63,127), X(64,128), X(129,193), X(130,194), X(131,195),
+  X(132,196), X(133,197), X(134,198), X(65,129), X(66,130), X(67,131), X(68,132),
+  X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139),
+  X(76,140), X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146),
+  X(83,147), X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153),
+  X(90,154), X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160),
+  X(97,161), X(98,162), X(99,163), X(100,164), X(101,165), X(102,166),
+  X(103,167), X(104,168), X(105,169), X(106,170), X(107,171), X(108,172),
+  X(109,173), X(110,174), X(111,175), X(112,176), X(113,177), X(114,178),
+  X(115,179), X(116,180), X(117,181), X(118,182), X(119,183), X(120,184),
+  X(121,185), X(122,186), X(123,187), X(124,188), X(125,189), X(126,190),
+  X(127,191), X(128,192), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101),
+  X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108),
+  X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115),
+  X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122),
+  X(91,123), X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161),
+  X(130,162), X(131,163), X(132,164), X(133,165), X(134,166), X(135,167),
+  X(136,168), X(137,169), X(138,170), X(139,171), X(140,172), X(141,173),
+  X(142,174), X(143,175), X(144,176), X(145,177), X(146,178), X(147,179),
+  X(148,180), X(149,181), X(150,182), X(151,183), X(152,184), X(153,185),
+  X(154,186), X(155,187), X(156,188), X(157,189), X(158,190), X(159,191),
+  X(160,192), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(33,65), X(34,66), X(35,67),
+  X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75),
+  X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83),
+  X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91),
+  X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130),
+  X(99,131), X(100,132), X(101,133), X(102,134), X(103,135), X(104,136),
+  X(105,137), X(106,138), X(107,139), X(108,140), X(109,141), X(110,142),
+  X(111,143), X(112,144), X(113,145), X(114,146), X(115,147), X(116,148),
+  X(117,149), X(118,150), X(119,151), X(120,152), X(121,153), X(122,154),
+  X(123,155), X(124,156), X(125,157), X(126,158), X(127,159), X(128,160),
+  X(161,193), X(162,194), X(163,195), X(164,196), X(165,197), X(166,198),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88),
+  X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96),
+  X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(129,145), X(130,146),
+  X(131,147), X(132,148), X(133,149), X(134,150), X(135,151), X(136,152),
+  X(137,153), X(138,154), X(139,155), X(140,156), X(141,157), X(142,158),
+  X(143,159), X(144,160), X(161,177), X(162,178), X(163,179), X(164,180),
+  X(165,181), X(166,182), X(167,183), X(168,184), X(169,185), X(170,186),
+  X(171,187), X(172,188), X(173,189), X(174,190), X(175,191), X(176,192),
+  X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134), X(23,135),
+  X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141), X(30,142),
+  X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164), X(53,165),
+  X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171), X(60,172),
+  X(61,173), X(62,174), X(63,175), X(64,176), X(81,193), X(82,194), X(83,195),
+  X(84,196), X(85,197), X(86,198), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(119,167), X(120,168), X(121,169), X(122,170), X(123,171),
+  X(124,172), X(125,173), X(126,174), X(127,175), X(128,176), X(145,193),
+  X(146,194), X(147,195), X(148,196), X(149,197), X(150,198), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(117,133), X(118,134),
+  X(119,135), X(120,136), X(121,137), X(122,138), X(123,139), X(124,140),
+  X(125,141), X(126,142), X(127,143), X(128,144), X(145,161), X(146,162),
+  X(147,163), X(148,164), X(149,165), X(150,166), X(151,167), X(152,168),
+  X(153,169), X(154,170), X(155,171), X(156,172), X(157,173), X(158,174),
+  X(159,175), X(160,176), X(177,193), X(178,194), X(179,195), X(180,196),
+  X(181,197), X(182,198), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109),
+  X(102,110), X(103,111), X(104,112), X(113,121), X(114,122), X(115,123),
+  X(116,124), X(117,125), X(118,126), X(119,127), X(120,128), X(129,137),
+  X(130,138), X(131,139), X(132,140), X(133,141), X(134,142), X(135,143),
+  X(136,144), X(145,153), X(146,154), X(147,155), X(148,156), X(149,157),
+  X(150,158), X(151,159), X(152,160), X(161,169), X(162,170), X(163,171),
+  X(164,172), X(165,173), X(166,174), X(167,175), X(168,176), X(177,185),
+  X(178,186), X(179,187), X(180,188), X(181,189), X(182,190), X(183,191),
+  X(184,192), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134),
+  X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149),
+  X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164),
+  X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178), X(59,179),
+  X(60,180), X(61,181), X(62,182), X(63,183), X(64,184), X(73,193), X(74,194),
+  X(75,195), X(76,196), X(77,197), X(78,198), X(9,65), X(10,66), X(11,67),
+  X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83),
+  X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99),
+  X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114),
+  X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129),
+  X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136),
+  X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151),
+  X(96,152), X(105,161), X(106,162), X(107,163), X(108,164), X(109,165),
+  X(110,166), X(111,167), X(112,168), X(121,177), X(122,178), X(123,179),
+  X(124,180), X(125,181), X(126,182), X(127,183), X(128,184), X(137,193),
+  X(138,194), X(139,195), X(140,196), X(141,197), X(142,198), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(105,129), X(106,130), X(107,131), X(108,132), X(109,133), X(110,134),
+  X(111,135), X(112,136), X(121,145), X(122,146), X(123,147), X(124,148),
+  X(125,149), X(126,150), X(127,151), X(128,152), X(137,161), X(138,162),
+  X(139,163), X(140,164), X(141,165), X(142,166), X(143,167), X(144,168),
+  X(153,177), X(154,178), X(155,179), X(156,180), X(157,181), X(158,182),
+  X(159,183), X(160,184), X(169,193), X(170,194), X(171,195), X(172,196),
+  X(173,197), X(174,198), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21),
+  X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37),
+  X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53),
+  X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69),
+  X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85),
+  X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100),
+  X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(139,147), X(140,148), X(141,149),
+  X(142,150), X(143,151), X(144,152), X(153,161), X(154,162), X(155,163),
+  X(156,164), X(157,165), X(158,166), X(159,167), X(160,168), X(169,177),
+  X(170,178), X(171,179), X(172,180), X(173,181), X(174,182), X(175,183),
+  X(176,184), X(185,193), X(186,194), X(187,195), X(188,196), X(189,197),
+  X(190,198), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(185,189), X(186,190), X(187,191), X(188,192),
+  X(193,197), X(194,198), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137),
+  X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148),
+  X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163),
+  X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(53,177), X(54,178),
+  X(55,179), X(56,180), X(61,185), X(62,186), X(63,187), X(64,188), X(69,193),
+  X(70,194), X(71,195), X(72,196), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73),
+  X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89),
+  X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100),
+  X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115),
+  X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130),
+  X(71,131), X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145),
+  X(86,146), X(87,147), X(88,148), X(93,153), X(94,154), X(95,155), X(96,156),
+  X(101,161), X(102,162), X(103,163), X(104,164), X(109,169), X(110,170),
+  X(111,171), X(112,172), X(117,177), X(118,178), X(119,179), X(120,180),
+  X(125,185), X(126,186), X(127,187), X(128,188), X(133,193), X(134,194),
+  X(135,195), X(136,196), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105),
+  X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116),
+  X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(151,179),
+  X(152,180), X(157,185), X(158,186), X(159,187), X(160,188), X(165,193),
+  X(166,194), X(167,195), X(168,196), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(173,185), X(174,186),
+  X(175,187), X(176,188), X(181,193), X(182,194), X(183,195), X(184,196), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25),
+  X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41),
+  X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57),
+  X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73),
+  X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89),
+  X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100),
+  X(101,105), X(102,106), X(103,107), X(104,108), X(109,113), X(110,114),
+  X(111,115), X(112,116), X(117,121), X(118,122), X(119,123), X(120,124),
+  X(125,129), X(126,130), X(127,131), X(128,132), X(133,137), X(134,138),
+  X(135,139), X(136,140), X(141,145), X(142,146), X(143,147), X(144,148),
+  X(149,153), X(150,154), X(151,155), X(152,156), X(157,161), X(158,162),
+  X(159,163), X(160,164), X(165,169), X(166,170), X(167,171), X(168,172),
+  X(173,177), X(174,178), X(175,179), X(176,180), X(181,185), X(182,186),
+  X(183,187), X(184,188), X(189,193), X(190,194), X(191,195), X(192,196), X(1,3),
+  X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19),
+  X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35),
+  X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51),
+  X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67),
+  X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83),
+  X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194),
+  X(71,197), X(72,198), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74),
+  X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90),
+  X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105),
+  X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118),
+  X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130), X(71,133),
+  X(72,134), X(75,137), X(76,138), X(79,141), X(80,142), X(83,145), X(84,146),
+  X(87,149), X(88,150), X(91,153), X(92,154), X(95,157), X(96,158), X(99,161),
+  X(100,162), X(103,165), X(104,166), X(107,169), X(108,170), X(111,173),
+  X(112,174), X(115,177), X(116,178), X(119,181), X(120,182), X(123,185),
+  X(124,186), X(127,189), X(128,190), X(131,193), X(132,194), X(135,197),
+  X(136,198), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121),
+  X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(127,157), X(128,158),
+  X(131,161), X(132,162), X(135,165), X(136,166), X(139,169), X(140,170),
+  X(143,173), X(144,174), X(147,177), X(148,178), X(151,181), X(152,182),
+  X(155,185), X(156,186), X(159,189), X(160,190), X(163,193), X(164,194),
+  X(167,197), X(168,198), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90),
+  X(79,93), X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105),
+  X(92,106), X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166),
+  X(155,169), X(156,170), X(159,173), X(160,174), X(163,177), X(164,178),
+  X(167,181), X(168,182), X(171,185), X(172,186), X(175,189), X(176,190),
+  X(179,193), X(180,194), X(183,197), X(184,198), X(3,9), X(4,10), X(7,13),
+  X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29),
+  X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45),
+  X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61),
+  X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77),
+  X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93),
+  X(88,94), X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106),
+  X(103,109), X(104,110), X(107,113), X(108,114), X(111,117), X(112,118),
+  X(115,121), X(116,122), X(119,125), X(120,126), X(123,129), X(124,130),
+  X(127,133), X(128,134), X(131,137), X(132,138), X(135,141), X(136,142),
+  X(139,145), X(140,146), X(143,149), X(144,150), X(147,153), X(148,154),
+  X(151,157), X(152,158), X(155,161), X(156,162), X(159,165), X(160,166),
+  X(163,169), X(164,170), X(167,173), X(168,174), X(171,177), X(172,178),
+  X(175,181), X(176,182), X(179,185), X(180,186), X(183,189), X(184,190),
+  X(187,193), X(188,194), X(191,197), X(192,198), X(3,5), X(4,6), X(7,9),
+  X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25),
+  X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41),
+  X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57),
+  X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73),
+  X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89),
+  X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101), X(100,102),
+  X(103,105), X(104,106), X(107,109), X(108,110), X(111,113), X(112,114),
+  X(115,117), X(116,118), X(119,121), X(120,122), X(123,125), X(124,126),
+  X(127,129), X(128,130), X(131,133), X(132,134), X(135,137), X(136,138),
+  X(139,141), X(140,142), X(143,145), X(144,146), X(147,149), X(148,150),
+  X(151,153), X(152,154), X(155,157), X(156,158), X(159,161), X(160,162),
+  X(163,165), X(164,166), X(167,169), X(168,170), X(171,173), X(172,174),
+  X(175,177), X(176,178), X(179,181), X(180,182), X(183,185), X(184,186),
+  X(187,189), X(188,190), X(191,193), X(192,194), X(195,197), X(196,198), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137),
+  X(12,139), X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151),
+  X(26,153), X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165),
+  X(40,167), X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179),
+  X(54,181), X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193),
+  X(68,195), X(70,197), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75),
+  X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91),
+  X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105),
+  X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119),
+  X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133),
+  X(72,135), X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147),
+  X(86,149), X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161),
+  X(100,163), X(102,165), X(104,167), X(106,169), X(108,171), X(110,173),
+  X(112,175), X(114,177), X(116,179), X(118,181), X(120,183), X(122,185),
+  X(124,187), X(126,189), X(128,191), X(130,193), X(132,195), X(134,197),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95),
+  X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109),
+  X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(92,123),
+  X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(146,177), X(148,179), X(150,181), X(152,183),
+  X(154,185), X(156,187), X(158,189), X(160,191), X(162,193), X(164,195),
+  X(166,197), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(160,175), X(162,177), X(164,179),
+  X(166,181), X(168,183), X(170,185), X(172,187), X(174,189), X(176,191),
+  X(178,193), X(180,195), X(182,197), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(108,115), X(110,117), X(112,119), X(114,121),
+  X(116,123), X(118,125), X(120,127), X(122,129), X(124,131), X(126,133),
+  X(128,135), X(130,137), X(132,139), X(134,141), X(136,143), X(138,145),
+  X(140,147), X(142,149), X(144,151), X(146,153), X(148,155), X(150,157),
+  X(152,159), X(154,161), X(156,163), X(158,165), X(160,167), X(162,169),
+  X(164,171), X(166,173), X(168,175), X(170,177), X(172,179), X(174,181),
+  X(176,183), X(178,185), X(180,187), X(182,189), X(184,191), X(186,193),
+  X(188,195), X(190,197), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133),
+  X(132,135), X(134,137), X(136,139), X(138,141), X(140,143), X(142,145),
+  X(144,147), X(146,149), X(148,151), X(150,153), X(152,155), X(154,157),
+  X(156,159), X(158,161), X(160,163), X(162,165), X(164,167), X(166,169),
+  X(168,171), X(170,173), X(172,175), X(174,177), X(176,179), X(178,181),
+  X(180,183), X(182,185), X(184,187), X(186,189), X(188,191), X(190,193),
+  X(192,195), X(194,197), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11), X(12,13),
+  X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27), X(28,29),
+  X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43), X(44,45),
+  X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59), X(60,61),
+  X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75), X(76,77),
+  X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91), X(92,93),
+  X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105), X(106,107),
+  X(108,109), X(110,111), X(112,113), X(114,115), X(116,117), X(118,119),
+  X(120,121), X(122,123), X(124,125), X(126,127), X(128,129), X(130,131),
+  X(132,133), X(134,135), X(136,137), X(138,139), X(140,141), X(142,143),
+  X(144,145), X(146,147), X(148,149), X(150,151), X(152,153), X(154,155),
+  X(156,157), X(158,159), X(160,161), X(162,163), X(164,165), X(166,167),
+  X(168,169), X(170,171), X(172,173), X(174,175), X(176,177), X(178,179),
+  X(180,181), X(182,183), X(184,185), X(186,187), X(188,189), X(190,191),
+  X(192,193), X(194,195), X(196,197)
+};
+S(200) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70),
+  X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78),
+  X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86),
+  X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94),
+  X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101),
+  X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108),
+  X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115),
+  X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122),
+  X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(129,193),
+  X(130,194), X(131,195), X(132,196), X(133,197), X(134,198), X(135,199),
+  X(136,200), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134),
+  X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141),
+  X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148),
+  X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154), X(91,155),
+  X(92,156), X(93,157), X(94,158), X(95,159), X(96,160), X(97,161), X(98,162),
+  X(99,163), X(100,164), X(101,165), X(102,166), X(103,167), X(104,168),
+  X(105,169), X(106,170), X(107,171), X(108,172), X(109,173), X(110,174),
+  X(111,175), X(112,176), X(113,177), X(114,178), X(115,179), X(116,180),
+  X(117,181), X(118,182), X(119,183), X(120,184), X(121,185), X(122,186),
+  X(123,187), X(124,188), X(125,189), X(126,190), X(127,191), X(128,192),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103),
+  X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110),
+  X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117),
+  X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124),
+  X(93,125), X(94,126), X(95,127), X(96,128), X(129,161), X(130,162), X(131,163),
+  X(132,164), X(133,165), X(134,166), X(135,167), X(136,168), X(137,169),
+  X(138,170), X(139,171), X(140,172), X(141,173), X(142,174), X(143,175),
+  X(144,176), X(145,177), X(146,178), X(147,179), X(148,180), X(149,181),
+  X(150,182), X(151,183), X(152,184), X(153,185), X(154,186), X(155,187),
+  X(156,188), X(157,189), X(158,190), X(159,191), X(160,192), X(33,129),
+  X(34,130), X(35,131), X(36,132), X(37,133), X(38,134), X(39,135), X(40,136),
+  X(41,137), X(42,138), X(43,139), X(44,140), X(45,141), X(46,142), X(47,143),
+  X(48,144), X(49,145), X(50,146), X(51,147), X(52,148), X(53,149), X(54,150),
+  X(55,151), X(56,152), X(57,153), X(58,154), X(59,155), X(60,156), X(61,157),
+  X(62,158), X(63,159), X(64,160), X(97,193), X(98,194), X(99,195), X(100,196),
+  X(101,197), X(102,198), X(103,199), X(104,200), X(33,65), X(34,66), X(35,67),
+  X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75),
+  X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83),
+  X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91),
+  X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130),
+  X(99,131), X(100,132), X(101,133), X(102,134), X(103,135), X(104,136),
+  X(105,137), X(106,138), X(107,139), X(108,140), X(109,141), X(110,142),
+  X(111,143), X(112,144), X(113,145), X(114,146), X(115,147), X(116,148),
+  X(117,149), X(118,150), X(119,151), X(120,152), X(121,153), X(122,154),
+  X(123,155), X(124,156), X(125,157), X(126,158), X(127,159), X(128,160),
+  X(161,193), X(162,194), X(163,195), X(164,196), X(165,197), X(166,198),
+  X(167,199), X(168,200), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54),
+  X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62),
+  X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86),
+  X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94),
+  X(79,95), X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117),
+  X(102,118), X(103,119), X(104,120), X(105,121), X(106,122), X(107,123),
+  X(108,124), X(109,125), X(110,126), X(111,127), X(112,128), X(129,145),
+  X(130,146), X(131,147), X(132,148), X(133,149), X(134,150), X(135,151),
+  X(136,152), X(137,153), X(138,154), X(139,155), X(140,156), X(141,157),
+  X(142,158), X(143,159), X(144,160), X(161,177), X(162,178), X(163,179),
+  X(164,180), X(165,181), X(166,182), X(167,183), X(168,184), X(169,185),
+  X(170,186), X(171,187), X(172,188), X(173,189), X(174,190), X(175,191),
+  X(176,192), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134),
+  X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141),
+  X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164),
+  X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171),
+  X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(81,193), X(82,194),
+  X(83,195), X(84,196), X(85,197), X(86,198), X(87,199), X(88,200), X(17,65),
+  X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73),
+  X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97),
+  X(50,98), X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104),
+  X(57,105), X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111),
+  X(64,112), X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134),
+  X(87,135), X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141),
+  X(94,142), X(95,143), X(96,144), X(113,161), X(114,162), X(115,163),
+  X(116,164), X(117,165), X(118,166), X(119,167), X(120,168), X(121,169),
+  X(122,170), X(123,171), X(124,172), X(125,173), X(126,174), X(127,175),
+  X(128,176), X(145,193), X(146,194), X(147,195), X(148,196), X(149,197),
+  X(150,198), X(151,199), X(152,200), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68),
+  X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76),
+  X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129),
+  X(114,130), X(115,131), X(116,132), X(117,133), X(118,134), X(119,135),
+  X(120,136), X(121,137), X(122,138), X(123,139), X(124,140), X(125,141),
+  X(126,142), X(127,143), X(128,144), X(145,161), X(146,162), X(147,163),
+  X(148,164), X(149,165), X(150,166), X(151,167), X(152,168), X(153,169),
+  X(154,170), X(155,171), X(156,172), X(157,173), X(158,174), X(159,175),
+  X(160,176), X(177,193), X(178,194), X(179,195), X(180,196), X(181,197),
+  X(182,198), X(183,199), X(184,200), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13),
+  X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29),
+  X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45),
+  X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61),
+  X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77),
+  X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93),
+  X(86,94), X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108),
+  X(101,109), X(102,110), X(103,111), X(104,112), X(113,121), X(114,122),
+  X(115,123), X(116,124), X(117,125), X(118,126), X(119,127), X(120,128),
+  X(129,137), X(130,138), X(131,139), X(132,140), X(133,141), X(134,142),
+  X(135,143), X(136,144), X(145,153), X(146,154), X(147,155), X(148,156),
+  X(149,157), X(150,158), X(151,159), X(152,160), X(161,169), X(162,170),
+  X(163,171), X(164,172), X(165,173), X(166,174), X(167,175), X(168,176),
+  X(177,185), X(178,186), X(179,187), X(180,188), X(181,189), X(182,190),
+  X(183,191), X(184,192), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133),
+  X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148),
+  X(29,149), X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163),
+  X(44,164), X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178),
+  X(59,179), X(60,180), X(61,181), X(62,182), X(63,183), X(64,184), X(73,193),
+  X(74,194), X(75,195), X(76,196), X(77,197), X(78,198), X(79,199), X(80,200),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72),
+  X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88),
+  X(41,97), X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103),
+  X(48,104), X(57,113), X(58,114), X(59,115), X(60,116), X(61,117), X(62,118),
+  X(63,119), X(64,120), X(73,129), X(74,130), X(75,131), X(76,132), X(77,133),
+  X(78,134), X(79,135), X(80,136), X(89,145), X(90,146), X(91,147), X(92,148),
+  X(93,149), X(94,150), X(95,151), X(96,152), X(105,161), X(106,162), X(107,163),
+  X(108,164), X(109,165), X(110,166), X(111,167), X(112,168), X(121,177),
+  X(122,178), X(123,179), X(124,180), X(125,181), X(126,182), X(127,183),
+  X(128,184), X(137,193), X(138,194), X(139,195), X(140,196), X(141,197),
+  X(142,198), X(143,199), X(144,200), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52),
+  X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68),
+  X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84),
+  X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(121,145), X(122,146), X(123,147), X(124,148), X(125,149),
+  X(126,150), X(127,151), X(128,152), X(137,161), X(138,162), X(139,163),
+  X(140,164), X(141,165), X(142,166), X(143,167), X(144,168), X(153,177),
+  X(154,178), X(155,179), X(156,180), X(157,181), X(158,182), X(159,183),
+  X(160,184), X(169,193), X(170,194), X(171,195), X(172,196), X(173,197),
+  X(174,198), X(175,199), X(176,200), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52),
+  X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68),
+  X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84),
+  X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(125,133), X(126,134),
+  X(127,135), X(128,136), X(137,145), X(138,146), X(139,147), X(140,148),
+  X(141,149), X(142,150), X(143,151), X(144,152), X(153,161), X(154,162),
+  X(155,163), X(156,164), X(157,165), X(158,166), X(159,167), X(160,168),
+  X(169,177), X(170,178), X(171,179), X(172,180), X(173,181), X(174,182),
+  X(175,183), X(176,184), X(185,193), X(186,194), X(187,195), X(188,196),
+  X(189,197), X(190,198), X(191,199), X(192,200), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88),
+  X(89,93), X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103),
+  X(100,104), X(105,109), X(106,110), X(107,111), X(108,112), X(113,117),
+  X(114,118), X(115,119), X(116,120), X(121,125), X(122,126), X(123,127),
+  X(124,128), X(129,133), X(130,134), X(131,135), X(132,136), X(137,141),
+  X(138,142), X(139,143), X(140,144), X(145,149), X(146,150), X(147,151),
+  X(148,152), X(153,157), X(154,158), X(155,159), X(156,160), X(161,165),
+  X(162,166), X(163,167), X(164,168), X(169,173), X(170,174), X(171,175),
+  X(172,176), X(177,181), X(178,182), X(179,183), X(180,184), X(185,189),
+  X(186,190), X(187,191), X(188,192), X(193,197), X(194,198), X(195,199),
+  X(196,200), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138),
+  X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153),
+  X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164),
+  X(45,169), X(46,170), X(47,171), X(48,172), X(53,177), X(54,178), X(55,179),
+  X(56,180), X(61,185), X(62,186), X(63,187), X(64,188), X(69,193), X(70,194),
+  X(71,195), X(72,196), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74),
+  X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90),
+  X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105),
+  X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116),
+  X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131),
+  X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146),
+  X(87,147), X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161),
+  X(102,162), X(103,163), X(104,164), X(109,169), X(110,170), X(111,171),
+  X(112,172), X(117,177), X(118,178), X(119,179), X(120,180), X(125,185),
+  X(126,186), X(127,187), X(128,188), X(133,193), X(134,194), X(135,195),
+  X(136,196), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43),
+  X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59),
+  X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75),
+  X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91),
+  X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106),
+  X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121),
+  X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(151,179),
+  X(152,180), X(157,185), X(158,186), X(159,187), X(160,188), X(165,193),
+  X(166,194), X(167,195), X(168,196), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(173,185), X(174,186),
+  X(175,187), X(176,188), X(181,193), X(182,194), X(183,195), X(184,196), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25),
+  X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41),
+  X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57),
+  X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73),
+  X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89),
+  X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100),
+  X(101,105), X(102,106), X(103,107), X(104,108), X(109,113), X(110,114),
+  X(111,115), X(112,116), X(117,121), X(118,122), X(119,123), X(120,124),
+  X(125,129), X(126,130), X(127,131), X(128,132), X(133,137), X(134,138),
+  X(135,139), X(136,140), X(141,145), X(142,146), X(143,147), X(144,148),
+  X(149,153), X(150,154), X(151,155), X(152,156), X(157,161), X(158,162),
+  X(159,163), X(160,164), X(165,169), X(166,170), X(167,171), X(168,172),
+  X(173,177), X(174,178), X(175,179), X(176,180), X(181,185), X(182,186),
+  X(183,187), X(184,188), X(189,193), X(190,194), X(191,195), X(192,196), X(1,3),
+  X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19),
+  X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35),
+  X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51),
+  X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67),
+  X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83),
+  X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(197,199), X(198,200), X(3,129), X(4,130), X(7,133), X(8,134),
+  X(11,137), X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149),
+  X(24,150), X(27,153), X(28,154), X(31,157), X(32,158), X(35,161), X(36,162),
+  X(39,165), X(40,166), X(43,169), X(44,170), X(47,173), X(48,174), X(51,177),
+  X(52,178), X(55,181), X(56,182), X(59,185), X(60,186), X(63,189), X(64,190),
+  X(67,193), X(68,194), X(71,197), X(72,198), X(3,65), X(4,66), X(7,69), X(8,70),
+  X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86),
+  X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(39,101),
+  X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113), X(52,114),
+  X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126), X(67,129),
+  X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141), X(80,142),
+  X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154), X(95,157),
+  X(96,158), X(99,161), X(100,162), X(103,165), X(104,166), X(107,169),
+  X(108,170), X(111,173), X(112,174), X(115,177), X(116,178), X(119,181),
+  X(120,182), X(123,185), X(124,186), X(127,189), X(128,190), X(131,193),
+  X(132,194), X(135,197), X(136,198), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70),
+  X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86),
+  X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98), X(71,101),
+  X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113), X(84,114),
+  X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126), X(99,129),
+  X(100,130), X(103,133), X(104,134), X(107,137), X(108,138), X(111,141),
+  X(112,142), X(115,145), X(116,146), X(119,149), X(120,150), X(123,153),
+  X(124,154), X(127,157), X(128,158), X(131,161), X(132,162), X(135,165),
+  X(136,166), X(139,169), X(140,170), X(143,173), X(144,174), X(147,177),
+  X(148,178), X(151,181), X(152,182), X(155,185), X(156,186), X(159,189),
+  X(160,190), X(163,193), X(164,194), X(167,197), X(168,198), X(3,17), X(4,18),
+  X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34),
+  X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50),
+  X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66),
+  X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82),
+  X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(143,157), X(144,158), X(147,161),
+  X(148,162), X(151,165), X(152,166), X(155,169), X(156,170), X(159,173),
+  X(160,174), X(163,177), X(164,178), X(167,181), X(168,182), X(171,185),
+  X(172,186), X(175,189), X(176,190), X(179,193), X(180,194), X(183,197),
+  X(184,198), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21),
+  X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37),
+  X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53),
+  X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69),
+  X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85),
+  X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134),
+  X(131,137), X(132,138), X(135,141), X(136,142), X(139,145), X(140,146),
+  X(143,149), X(144,150), X(147,153), X(148,154), X(151,157), X(152,158),
+  X(155,161), X(156,162), X(159,165), X(160,166), X(163,169), X(164,170),
+  X(167,173), X(168,174), X(171,177), X(172,178), X(175,181), X(176,182),
+  X(179,185), X(180,186), X(183,189), X(184,190), X(187,193), X(188,194),
+  X(191,197), X(192,198), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94),
+  X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(115,117), X(116,118), X(119,121),
+  X(120,122), X(123,125), X(124,126), X(127,129), X(128,130), X(131,133),
+  X(132,134), X(135,137), X(136,138), X(139,141), X(140,142), X(143,145),
+  X(144,146), X(147,149), X(148,150), X(151,153), X(152,154), X(155,157),
+  X(156,158), X(159,161), X(160,162), X(163,165), X(164,166), X(167,169),
+  X(168,170), X(171,173), X(172,174), X(175,177), X(176,178), X(179,181),
+  X(180,182), X(183,185), X(184,186), X(187,189), X(188,190), X(191,193),
+  X(192,194), X(195,197), X(196,198), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139), X(14,141),
+  X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153), X(28,155),
+  X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167), X(42,169),
+  X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181), X(56,183),
+  X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195), X(70,197),
+  X(72,199), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107),
+  X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121),
+  X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135),
+  X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149),
+  X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161), X(100,163),
+  X(102,165), X(104,167), X(106,169), X(108,171), X(110,173), X(112,175),
+  X(114,177), X(116,179), X(118,181), X(120,183), X(122,185), X(124,187),
+  X(126,189), X(128,191), X(130,193), X(132,195), X(134,197), X(136,199),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95),
+  X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109),
+  X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(92,123),
+  X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(146,177), X(148,179), X(150,181), X(152,183),
+  X(154,185), X(156,187), X(158,189), X(160,191), X(162,193), X(164,195),
+  X(166,197), X(168,199), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27),
+  X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43),
+  X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59),
+  X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75),
+  X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91),
+  X(78,93), X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105),
+  X(92,107), X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(160,175), X(162,177), X(164,179),
+  X(166,181), X(168,183), X(170,185), X(172,187), X(174,189), X(176,191),
+  X(178,193), X(180,195), X(182,197), X(184,199), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45),
+  X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61),
+  X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77),
+  X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93),
+  X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107),
+  X(102,109), X(104,111), X(106,113), X(108,115), X(110,117), X(112,119),
+  X(114,121), X(116,123), X(118,125), X(120,127), X(122,129), X(124,131),
+  X(126,133), X(128,135), X(130,137), X(132,139), X(134,141), X(136,143),
+  X(138,145), X(140,147), X(142,149), X(144,151), X(146,153), X(148,155),
+  X(150,157), X(152,159), X(154,161), X(156,163), X(158,165), X(160,167),
+  X(162,169), X(164,171), X(166,173), X(168,175), X(170,177), X(172,179),
+  X(174,181), X(176,183), X(178,185), X(180,187), X(182,189), X(184,191),
+  X(186,193), X(188,195), X(190,197), X(192,199), X(2,5), X(4,7), X(6,9),
+  X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25),
+  X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41),
+  X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57),
+  X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73),
+  X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89),
+  X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101), X(100,103),
+  X(102,105), X(104,107), X(106,109), X(108,111), X(110,113), X(112,115),
+  X(114,117), X(116,119), X(118,121), X(120,123), X(122,125), X(124,127),
+  X(126,129), X(128,131), X(130,133), X(132,135), X(134,137), X(136,139),
+  X(138,141), X(140,143), X(142,145), X(144,147), X(146,149), X(148,151),
+  X(150,153), X(152,155), X(154,157), X(156,159), X(158,161), X(160,163),
+  X(162,165), X(164,167), X(166,169), X(168,171), X(170,173), X(172,175),
+  X(174,177), X(176,179), X(178,181), X(180,183), X(182,185), X(184,187),
+  X(186,189), X(188,191), X(190,193), X(192,195), X(194,197), X(196,199), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199)
+};
+S(202) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(1,65), X(2,66), X(3,67), X(4,68),
+  X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76),
+  X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84),
+  X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92),
+  X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99),
+  X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106),
+  X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113),
+  X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120),
+  X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127),
+  X(64,128), X(129,193), X(130,194), X(131,195), X(132,196), X(133,197),
+  X(134,198), X(135,199), X(136,200), X(137,201), X(138,202), X(65,129),
+  X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136),
+  X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143),
+  X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150),
+  X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157),
+  X(94,158), X(95,159), X(96,160), X(97,161), X(98,162), X(99,163), X(100,164),
+  X(101,165), X(102,166), X(103,167), X(104,168), X(105,169), X(106,170),
+  X(107,171), X(108,172), X(109,173), X(110,174), X(111,175), X(112,176),
+  X(113,177), X(114,178), X(115,179), X(116,180), X(117,181), X(118,182),
+  X(119,183), X(120,184), X(121,185), X(122,186), X(123,187), X(124,188),
+  X(125,189), X(126,190), X(127,191), X(128,192), X(1,33), X(2,34), X(3,35),
+  X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43),
+  X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51),
+  X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59),
+  X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(135,167), X(136,168), X(137,169), X(138,170), X(139,171),
+  X(140,172), X(141,173), X(142,174), X(143,175), X(144,176), X(145,177),
+  X(146,178), X(147,179), X(148,180), X(149,181), X(150,182), X(151,183),
+  X(152,184), X(153,185), X(154,186), X(155,187), X(156,188), X(157,189),
+  X(158,190), X(159,191), X(160,192), X(33,129), X(34,130), X(35,131), X(36,132),
+  X(37,133), X(38,134), X(39,135), X(40,136), X(41,137), X(42,138), X(43,139),
+  X(44,140), X(45,141), X(46,142), X(47,143), X(48,144), X(49,145), X(50,146),
+  X(51,147), X(52,148), X(53,149), X(54,150), X(55,151), X(56,152), X(57,153),
+  X(58,154), X(59,155), X(60,156), X(61,157), X(62,158), X(63,159), X(64,160),
+  X(97,193), X(98,194), X(99,195), X(100,196), X(101,197), X(102,198),
+  X(103,199), X(104,200), X(105,201), X(106,202), X(33,65), X(34,66), X(35,67),
+  X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75),
+  X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83),
+  X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91),
+  X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130),
+  X(99,131), X(100,132), X(101,133), X(102,134), X(103,135), X(104,136),
+  X(105,137), X(106,138), X(107,139), X(108,140), X(109,141), X(110,142),
+  X(111,143), X(112,144), X(113,145), X(114,146), X(115,147), X(116,148),
+  X(117,149), X(118,150), X(119,151), X(120,152), X(121,153), X(122,154),
+  X(123,155), X(124,156), X(125,157), X(126,158), X(127,159), X(128,160),
+  X(161,193), X(162,194), X(163,195), X(164,196), X(165,197), X(166,198),
+  X(167,199), X(168,200), X(169,201), X(170,202), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(17,129), X(18,130),
+  X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136), X(25,137),
+  X(26,138), X(27,139), X(28,140), X(29,141), X(30,142), X(31,143), X(32,144),
+  X(49,161), X(50,162), X(51,163), X(52,164), X(53,165), X(54,166), X(55,167),
+  X(56,168), X(57,169), X(58,170), X(59,171), X(60,172), X(61,173), X(62,174),
+  X(63,175), X(64,176), X(81,193), X(82,194), X(83,195), X(84,196), X(85,197),
+  X(86,198), X(87,199), X(88,200), X(89,201), X(90,202), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135),
+  X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142),
+  X(95,143), X(96,144), X(113,161), X(114,162), X(115,163), X(116,164),
+  X(117,165), X(118,166), X(119,167), X(120,168), X(121,169), X(122,170),
+  X(123,171), X(124,172), X(125,173), X(126,174), X(127,175), X(128,176),
+  X(145,193), X(146,194), X(147,195), X(148,196), X(149,197), X(150,198),
+  X(151,199), X(152,200), X(153,201), X(154,202), X(17,33), X(18,34), X(19,35),
+  X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43),
+  X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67),
+  X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75),
+  X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129),
+  X(114,130), X(115,131), X(116,132), X(117,133), X(118,134), X(119,135),
+  X(120,136), X(121,137), X(122,138), X(123,139), X(124,140), X(125,141),
+  X(126,142), X(127,143), X(128,144), X(145,161), X(146,162), X(147,163),
+  X(148,164), X(149,165), X(150,166), X(151,167), X(152,168), X(153,169),
+  X(154,170), X(155,171), X(156,172), X(157,173), X(158,174), X(159,175),
+  X(160,176), X(177,193), X(178,194), X(179,195), X(180,196), X(181,197),
+  X(182,198), X(183,199), X(184,200), X(185,201), X(186,202), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(117,125),
+  X(118,126), X(119,127), X(120,128), X(129,137), X(130,138), X(131,139),
+  X(132,140), X(133,141), X(134,142), X(135,143), X(136,144), X(145,153),
+  X(146,154), X(147,155), X(148,156), X(149,157), X(150,158), X(151,159),
+  X(152,160), X(161,169), X(162,170), X(163,171), X(164,172), X(165,173),
+  X(166,174), X(167,175), X(168,176), X(177,185), X(178,186), X(179,187),
+  X(180,188), X(181,189), X(182,190), X(183,191), X(184,192), X(193,201),
+  X(194,202), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134),
+  X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149),
+  X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164),
+  X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178), X(59,179),
+  X(60,180), X(61,181), X(62,182), X(63,183), X(64,184), X(73,193), X(74,194),
+  X(75,195), X(76,196), X(77,197), X(78,198), X(79,199), X(80,200), X(9,65),
+  X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81),
+  X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97),
+  X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104),
+  X(57,113), X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119),
+  X(64,120), X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134),
+  X(79,135), X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149),
+  X(94,150), X(95,151), X(96,152), X(105,161), X(106,162), X(107,163),
+  X(108,164), X(109,165), X(110,166), X(111,167), X(112,168), X(121,177),
+  X(122,178), X(123,179), X(124,180), X(125,181), X(126,182), X(127,183),
+  X(128,184), X(137,193), X(138,194), X(139,195), X(140,196), X(141,197),
+  X(142,198), X(143,199), X(144,200), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52),
+  X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68),
+  X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84),
+  X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(121,145), X(122,146), X(123,147), X(124,148), X(125,149),
+  X(126,150), X(127,151), X(128,152), X(137,161), X(138,162), X(139,163),
+  X(140,164), X(141,165), X(142,166), X(143,167), X(144,168), X(153,177),
+  X(154,178), X(155,179), X(156,180), X(157,181), X(158,182), X(159,183),
+  X(160,184), X(169,193), X(170,194), X(171,195), X(172,196), X(173,197),
+  X(174,198), X(175,199), X(176,200), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52),
+  X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68),
+  X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84),
+  X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(125,133), X(126,134),
+  X(127,135), X(128,136), X(137,145), X(138,146), X(139,147), X(140,148),
+  X(141,149), X(142,150), X(143,151), X(144,152), X(153,161), X(154,162),
+  X(155,163), X(156,164), X(157,165), X(158,166), X(159,167), X(160,168),
+  X(169,177), X(170,178), X(171,179), X(172,180), X(173,181), X(174,182),
+  X(175,183), X(176,184), X(185,193), X(186,194), X(187,195), X(188,196),
+  X(189,197), X(190,198), X(191,199), X(192,200), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88),
+  X(89,93), X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103),
+  X(100,104), X(105,109), X(106,110), X(107,111), X(108,112), X(113,117),
+  X(114,118), X(115,119), X(116,120), X(121,125), X(122,126), X(123,127),
+  X(124,128), X(129,133), X(130,134), X(131,135), X(132,136), X(137,141),
+  X(138,142), X(139,143), X(140,144), X(145,149), X(146,150), X(147,151),
+  X(148,152), X(153,157), X(154,158), X(155,159), X(156,160), X(161,165),
+  X(162,166), X(163,167), X(164,168), X(169,173), X(170,174), X(171,175),
+  X(172,176), X(177,181), X(178,182), X(179,183), X(180,184), X(185,189),
+  X(186,190), X(187,191), X(188,192), X(193,197), X(194,198), X(195,199),
+  X(196,200), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138),
+  X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153),
+  X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164),
+  X(45,169), X(46,170), X(47,171), X(48,172), X(53,177), X(54,178), X(55,179),
+  X(56,180), X(61,185), X(62,186), X(63,187), X(64,188), X(69,193), X(70,194),
+  X(71,195), X(72,196), X(77,201), X(78,202), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84),
+  X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99),
+  X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114),
+  X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129),
+  X(70,130), X(71,131), X(72,132), X(77,137), X(78,138), X(79,139), X(80,140),
+  X(85,145), X(86,146), X(87,147), X(88,148), X(93,153), X(94,154), X(95,155),
+  X(96,156), X(101,161), X(102,162), X(103,163), X(104,164), X(109,169),
+  X(110,170), X(111,171), X(112,172), X(117,177), X(118,178), X(119,179),
+  X(120,180), X(125,185), X(126,186), X(127,187), X(128,188), X(133,193),
+  X(134,194), X(135,195), X(136,196), X(141,201), X(142,202), X(5,33), X(6,34),
+  X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50),
+  X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66),
+  X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82),
+  X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98),
+  X(71,99), X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113),
+  X(86,114), X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124),
+  X(101,129), X(102,130), X(103,131), X(104,132), X(109,137), X(110,138),
+  X(111,139), X(112,140), X(117,145), X(118,146), X(119,147), X(120,148),
+  X(125,153), X(126,154), X(127,155), X(128,156), X(133,161), X(134,162),
+  X(135,163), X(136,164), X(141,169), X(142,170), X(143,171), X(144,172),
+  X(149,177), X(150,178), X(151,179), X(152,180), X(157,185), X(158,186),
+  X(159,187), X(160,188), X(165,193), X(166,194), X(167,195), X(168,196),
+  X(173,201), X(174,202), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105),
+  X(94,106), X(95,107), X(96,108), X(101,113), X(102,114), X(103,115),
+  X(104,116), X(109,121), X(110,122), X(111,123), X(112,124), X(117,129),
+  X(118,130), X(119,131), X(120,132), X(125,137), X(126,138), X(127,139),
+  X(128,140), X(133,145), X(134,146), X(135,147), X(136,148), X(141,153),
+  X(142,154), X(143,155), X(144,156), X(149,161), X(150,162), X(151,163),
+  X(152,164), X(157,169), X(158,170), X(159,171), X(160,172), X(165,177),
+  X(166,178), X(167,179), X(168,180), X(173,185), X(174,186), X(175,187),
+  X(176,188), X(181,193), X(182,194), X(183,195), X(184,196), X(189,201),
+  X(190,202), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19),
+  X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35),
+  X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51),
+  X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67),
+  X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83),
+  X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99),
+  X(96,100), X(101,105), X(102,106), X(103,107), X(104,108), X(109,113),
+  X(110,114), X(111,115), X(112,116), X(117,121), X(118,122), X(119,123),
+  X(120,124), X(125,129), X(126,130), X(127,131), X(128,132), X(133,137),
+  X(134,138), X(135,139), X(136,140), X(141,145), X(142,146), X(143,147),
+  X(144,148), X(149,153), X(150,154), X(151,155), X(152,156), X(157,161),
+  X(158,162), X(159,163), X(160,164), X(165,169), X(166,170), X(167,171),
+  X(168,172), X(173,177), X(174,178), X(175,179), X(176,180), X(181,185),
+  X(182,186), X(183,187), X(184,188), X(189,193), X(190,194), X(191,195),
+  X(192,196), X(197,201), X(198,202), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11),
+  X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27),
+  X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43),
+  X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59),
+  X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75),
+  X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91),
+  X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104),
+  X(105,107), X(106,108), X(109,111), X(110,112), X(113,115), X(114,116),
+  X(117,119), X(118,120), X(121,123), X(122,124), X(125,127), X(126,128),
+  X(129,131), X(130,132), X(133,135), X(134,136), X(137,139), X(138,140),
+  X(141,143), X(142,144), X(145,147), X(146,148), X(149,151), X(150,152),
+  X(153,155), X(154,156), X(157,159), X(158,160), X(161,163), X(162,164),
+  X(165,167), X(166,168), X(169,171), X(170,172), X(173,175), X(174,176),
+  X(177,179), X(178,180), X(181,183), X(182,184), X(185,187), X(186,188),
+  X(189,191), X(190,192), X(193,195), X(194,196), X(197,199), X(198,200),
+  X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138), X(15,141),
+  X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153), X(28,154),
+  X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166), X(43,169),
+  X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181), X(56,182),
+  X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194), X(71,197),
+  X(72,198), X(75,201), X(76,202), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73),
+  X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89),
+  X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102),
+  X(43,105), X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117),
+  X(56,118), X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130),
+  X(71,133), X(72,134), X(75,137), X(76,138), X(79,141), X(80,142), X(83,145),
+  X(84,146), X(87,149), X(88,150), X(91,153), X(92,154), X(95,157), X(96,158),
+  X(99,161), X(100,162), X(103,165), X(104,166), X(107,169), X(108,170),
+  X(111,173), X(112,174), X(115,177), X(116,178), X(119,181), X(120,182),
+  X(123,185), X(124,186), X(127,189), X(128,190), X(131,193), X(132,194),
+  X(135,197), X(136,198), X(139,201), X(140,202), X(3,33), X(4,34), X(7,37),
+  X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53),
+  X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69),
+  X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85),
+  X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(127,157), X(128,158), X(131,161), X(132,162),
+  X(135,165), X(136,166), X(139,169), X(140,170), X(143,173), X(144,174),
+  X(147,177), X(148,178), X(151,181), X(152,182), X(155,185), X(156,186),
+  X(159,189), X(160,190), X(163,193), X(164,194), X(167,197), X(168,198),
+  X(171,201), X(172,202), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90),
+  X(79,93), X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105),
+  X(92,106), X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166),
+  X(155,169), X(156,170), X(159,173), X(160,174), X(163,177), X(164,178),
+  X(167,181), X(168,182), X(171,185), X(172,186), X(175,189), X(176,190),
+  X(179,193), X(180,194), X(183,197), X(184,198), X(187,201), X(188,202), X(3,9),
+  X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25),
+  X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41),
+  X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57),
+  X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73),
+  X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89),
+  X(84,90), X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102),
+  X(99,105), X(100,106), X(103,109), X(104,110), X(107,113), X(108,114),
+  X(111,117), X(112,118), X(115,121), X(116,122), X(119,125), X(120,126),
+  X(123,129), X(124,130), X(127,133), X(128,134), X(131,137), X(132,138),
+  X(135,141), X(136,142), X(139,145), X(140,146), X(143,149), X(144,150),
+  X(147,153), X(148,154), X(151,157), X(152,158), X(155,161), X(156,162),
+  X(159,165), X(160,166), X(163,169), X(164,170), X(167,173), X(168,174),
+  X(171,177), X(172,178), X(175,181), X(176,182), X(179,185), X(180,186),
+  X(183,189), X(184,190), X(187,193), X(188,194), X(191,197), X(192,198),
+  X(195,201), X(196,202), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94),
+  X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(115,117), X(116,118), X(119,121),
+  X(120,122), X(123,125), X(124,126), X(127,129), X(128,130), X(131,133),
+  X(132,134), X(135,137), X(136,138), X(139,141), X(140,142), X(143,145),
+  X(144,146), X(147,149), X(148,150), X(151,153), X(152,154), X(155,157),
+  X(156,158), X(159,161), X(160,162), X(163,165), X(164,166), X(167,169),
+  X(168,170), X(171,173), X(172,174), X(175,177), X(176,178), X(179,181),
+  X(180,182), X(183,185), X(184,186), X(187,189), X(188,190), X(191,193),
+  X(192,194), X(195,197), X(196,198), X(199,201), X(200,202), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(2,129), X(4,131), X(6,133),
+  X(8,135), X(10,137), X(12,139), X(14,141), X(16,143), X(18,145), X(20,147),
+  X(22,149), X(24,151), X(26,153), X(28,155), X(30,157), X(32,159), X(34,161),
+  X(36,163), X(38,165), X(40,167), X(42,169), X(44,171), X(46,173), X(48,175),
+  X(50,177), X(52,179), X(54,181), X(56,183), X(58,185), X(60,187), X(62,189),
+  X(64,191), X(66,193), X(68,195), X(70,197), X(72,199), X(74,201), X(2,65),
+  X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81),
+  X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97),
+  X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111),
+  X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125),
+  X(64,127), X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139),
+  X(78,141), X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153),
+  X(92,155), X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(124,187), X(126,189), X(128,191),
+  X(130,193), X(132,195), X(134,197), X(136,199), X(138,201), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83),
+  X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99),
+  X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113),
+  X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127),
+  X(98,129), X(100,131), X(102,133), X(104,135), X(106,137), X(108,139),
+  X(110,141), X(112,143), X(114,145), X(116,147), X(118,149), X(120,151),
+  X(122,153), X(124,155), X(126,157), X(128,159), X(130,161), X(132,163),
+  X(134,165), X(136,167), X(138,169), X(140,171), X(142,173), X(144,175),
+  X(146,177), X(148,179), X(150,181), X(152,183), X(154,185), X(156,187),
+  X(158,189), X(160,191), X(162,193), X(164,195), X(166,197), X(168,199),
+  X(170,201), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(160,175), X(162,177), X(164,179),
+  X(166,181), X(168,183), X(170,185), X(172,187), X(174,189), X(176,191),
+  X(178,193), X(180,195), X(182,197), X(184,199), X(186,201), X(2,9), X(4,11),
+  X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27),
+  X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43),
+  X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59),
+  X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75),
+  X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91),
+  X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105),
+  X(100,107), X(102,109), X(104,111), X(106,113), X(108,115), X(110,117),
+  X(112,119), X(114,121), X(116,123), X(118,125), X(120,127), X(122,129),
+  X(124,131), X(126,133), X(128,135), X(130,137), X(132,139), X(134,141),
+  X(136,143), X(138,145), X(140,147), X(142,149), X(144,151), X(146,153),
+  X(148,155), X(150,157), X(152,159), X(154,161), X(156,163), X(158,165),
+  X(160,167), X(162,169), X(164,171), X(166,173), X(168,175), X(170,177),
+  X(172,179), X(174,181), X(176,183), X(178,185), X(180,187), X(182,189),
+  X(184,191), X(186,193), X(188,195), X(190,197), X(192,199), X(194,201), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(120,123),
+  X(122,125), X(124,127), X(126,129), X(128,131), X(130,133), X(132,135),
+  X(134,137), X(136,139), X(138,141), X(140,143), X(142,145), X(144,147),
+  X(146,149), X(148,151), X(150,153), X(152,155), X(154,157), X(156,159),
+  X(158,161), X(160,163), X(162,165), X(164,167), X(166,169), X(168,171),
+  X(170,173), X(172,175), X(174,177), X(176,179), X(178,181), X(180,183),
+  X(182,185), X(184,187), X(186,189), X(188,191), X(190,193), X(192,195),
+  X(194,197), X(196,199), X(198,201), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153),
+  X(154,155), X(156,157), X(158,159), X(160,161), X(162,163), X(164,165),
+  X(166,167), X(168,169), X(170,171), X(172,173), X(174,175), X(176,177),
+  X(178,179), X(180,181), X(182,183), X(184,185), X(186,187), X(188,189),
+  X(190,191), X(192,193), X(194,195), X(196,197), X(198,199), X(200,201)
+};
+S(204) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(1,65),
+  X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73),
+  X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81),
+  X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89),
+  X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97),
+  X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103), X(40,104),
+  X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110), X(47,111),
+  X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117), X(54,118),
+  X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124), X(61,125),
+  X(62,126), X(63,127), X(64,128), X(129,193), X(130,194), X(131,195),
+  X(132,196), X(133,197), X(134,198), X(135,199), X(136,200), X(137,201),
+  X(138,202), X(139,203), X(140,204), X(65,129), X(66,130), X(67,131), X(68,132),
+  X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139),
+  X(76,140), X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146),
+  X(83,147), X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153),
+  X(90,154), X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160),
+  X(97,161), X(98,162), X(99,163), X(100,164), X(101,165), X(102,166),
+  X(103,167), X(104,168), X(105,169), X(106,170), X(107,171), X(108,172),
+  X(109,173), X(110,174), X(111,175), X(112,176), X(113,177), X(114,178),
+  X(115,179), X(116,180), X(117,181), X(118,182), X(119,183), X(120,184),
+  X(121,185), X(122,186), X(123,187), X(124,188), X(125,189), X(126,190),
+  X(127,191), X(128,192), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101),
+  X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108),
+  X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115),
+  X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122),
+  X(91,123), X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161),
+  X(130,162), X(131,163), X(132,164), X(133,165), X(134,166), X(135,167),
+  X(136,168), X(137,169), X(138,170), X(139,171), X(140,172), X(141,173),
+  X(142,174), X(143,175), X(144,176), X(145,177), X(146,178), X(147,179),
+  X(148,180), X(149,181), X(150,182), X(151,183), X(152,184), X(153,185),
+  X(154,186), X(155,187), X(156,188), X(157,189), X(158,190), X(159,191),
+  X(160,192), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(33,65), X(34,66), X(35,67),
+  X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75),
+  X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83),
+  X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91),
+  X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130),
+  X(99,131), X(100,132), X(101,133), X(102,134), X(103,135), X(104,136),
+  X(105,137), X(106,138), X(107,139), X(108,140), X(109,141), X(110,142),
+  X(111,143), X(112,144), X(113,145), X(114,146), X(115,147), X(116,148),
+  X(117,149), X(118,150), X(119,151), X(120,152), X(121,153), X(122,154),
+  X(123,155), X(124,156), X(125,157), X(126,158), X(127,159), X(128,160),
+  X(161,193), X(162,194), X(163,195), X(164,196), X(165,197), X(166,198),
+  X(167,199), X(168,200), X(169,201), X(170,202), X(171,203), X(172,204),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88),
+  X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96),
+  X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(129,145), X(130,146),
+  X(131,147), X(132,148), X(133,149), X(134,150), X(135,151), X(136,152),
+  X(137,153), X(138,154), X(139,155), X(140,156), X(141,157), X(142,158),
+  X(143,159), X(144,160), X(161,177), X(162,178), X(163,179), X(164,180),
+  X(165,181), X(166,182), X(167,183), X(168,184), X(169,185), X(170,186),
+  X(171,187), X(172,188), X(173,189), X(174,190), X(175,191), X(176,192),
+  X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134), X(23,135),
+  X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141), X(30,142),
+  X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164), X(53,165),
+  X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171), X(60,172),
+  X(61,173), X(62,174), X(63,175), X(64,176), X(81,193), X(82,194), X(83,195),
+  X(84,196), X(85,197), X(86,198), X(87,199), X(88,200), X(89,201), X(90,202),
+  X(91,203), X(92,204), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69),
+  X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77),
+  X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100),
+  X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107),
+  X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130),
+  X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137),
+  X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143), X(96,144),
+  X(113,161), X(114,162), X(115,163), X(116,164), X(117,165), X(118,166),
+  X(119,167), X(120,168), X(121,169), X(122,170), X(123,171), X(124,172),
+  X(125,173), X(126,174), X(127,175), X(128,176), X(145,193), X(146,194),
+  X(147,195), X(148,196), X(149,197), X(150,198), X(151,199), X(152,200),
+  X(153,201), X(154,202), X(155,203), X(156,204), X(17,33), X(18,34), X(19,35),
+  X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43),
+  X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67),
+  X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75),
+  X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129),
+  X(114,130), X(115,131), X(116,132), X(117,133), X(118,134), X(119,135),
+  X(120,136), X(121,137), X(122,138), X(123,139), X(124,140), X(125,141),
+  X(126,142), X(127,143), X(128,144), X(145,161), X(146,162), X(147,163),
+  X(148,164), X(149,165), X(150,166), X(151,167), X(152,168), X(153,169),
+  X(154,170), X(155,171), X(156,172), X(157,173), X(158,174), X(159,175),
+  X(160,176), X(177,193), X(178,194), X(179,195), X(180,196), X(181,197),
+  X(182,198), X(183,199), X(184,200), X(185,201), X(186,202), X(187,203),
+  X(188,204), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15),
+  X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31),
+  X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47),
+  X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63),
+  X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79),
+  X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95),
+  X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(145,153), X(146,154), X(147,155), X(148,156), X(149,157), X(150,158),
+  X(151,159), X(152,160), X(161,169), X(162,170), X(163,171), X(164,172),
+  X(165,173), X(166,174), X(167,175), X(168,176), X(177,185), X(178,186),
+  X(179,187), X(180,188), X(181,189), X(182,190), X(183,191), X(184,192),
+  X(193,201), X(194,202), X(195,203), X(196,204), X(9,129), X(10,130), X(11,131),
+  X(12,132), X(13,133), X(14,134), X(15,135), X(16,136), X(25,145), X(26,146),
+  X(27,147), X(28,148), X(29,149), X(30,150), X(31,151), X(32,152), X(41,161),
+  X(42,162), X(43,163), X(44,164), X(45,165), X(46,166), X(47,167), X(48,168),
+  X(57,177), X(58,178), X(59,179), X(60,180), X(61,181), X(62,182), X(63,183),
+  X(64,184), X(73,193), X(74,194), X(75,195), X(76,196), X(77,197), X(78,198),
+  X(79,199), X(80,200), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115),
+  X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130),
+  X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136), X(89,145),
+  X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151), X(96,152),
+  X(105,161), X(106,162), X(107,163), X(108,164), X(109,165), X(110,166),
+  X(111,167), X(112,168), X(121,177), X(122,178), X(123,179), X(124,180),
+  X(125,181), X(126,182), X(127,183), X(128,184), X(137,193), X(138,194),
+  X(139,195), X(140,196), X(141,197), X(142,198), X(143,199), X(144,200),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88),
+  X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103),
+  X(80,104), X(89,113), X(90,114), X(91,115), X(92,116), X(93,117), X(94,118),
+  X(95,119), X(96,120), X(105,129), X(106,130), X(107,131), X(108,132),
+  X(109,133), X(110,134), X(111,135), X(112,136), X(121,145), X(122,146),
+  X(123,147), X(124,148), X(125,149), X(126,150), X(127,151), X(128,152),
+  X(137,161), X(138,162), X(139,163), X(140,164), X(141,165), X(142,166),
+  X(143,167), X(144,168), X(153,177), X(154,178), X(155,179), X(156,180),
+  X(157,181), X(158,182), X(159,183), X(160,184), X(169,193), X(170,194),
+  X(171,195), X(172,196), X(173,197), X(174,198), X(175,199), X(176,200),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(105,113), X(106,114), X(107,115), X(108,116), X(109,117),
+  X(110,118), X(111,119), X(112,120), X(121,129), X(122,130), X(123,131),
+  X(124,132), X(125,133), X(126,134), X(127,135), X(128,136), X(137,145),
+  X(138,146), X(139,147), X(140,148), X(141,149), X(142,150), X(143,151),
+  X(144,152), X(153,161), X(154,162), X(155,163), X(156,164), X(157,165),
+  X(158,166), X(159,167), X(160,168), X(169,177), X(170,178), X(171,179),
+  X(172,180), X(173,181), X(174,182), X(175,183), X(176,184), X(185,193),
+  X(186,194), X(187,195), X(188,196), X(189,197), X(190,198), X(191,199),
+  X(192,200), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(185,189), X(186,190), X(187,191), X(188,192),
+  X(193,197), X(194,198), X(195,199), X(196,200), X(5,129), X(6,130), X(7,131),
+  X(8,132), X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146),
+  X(23,147), X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(37,161),
+  X(38,162), X(39,163), X(40,164), X(45,169), X(46,170), X(47,171), X(48,172),
+  X(53,177), X(54,178), X(55,179), X(56,180), X(61,185), X(62,186), X(63,187),
+  X(64,188), X(69,193), X(70,194), X(71,195), X(72,196), X(77,201), X(78,202),
+  X(79,203), X(80,204), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74),
+  X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90),
+  X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105),
+  X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116),
+  X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131),
+  X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146),
+  X(87,147), X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161),
+  X(102,162), X(103,163), X(104,164), X(109,169), X(110,170), X(111,171),
+  X(112,172), X(117,177), X(118,178), X(119,179), X(120,180), X(125,185),
+  X(126,186), X(127,187), X(128,188), X(133,193), X(134,194), X(135,195),
+  X(136,196), X(141,201), X(142,202), X(143,203), X(144,204), X(5,33), X(6,34),
+  X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50),
+  X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66),
+  X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82),
+  X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98),
+  X(71,99), X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113),
+  X(86,114), X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124),
+  X(101,129), X(102,130), X(103,131), X(104,132), X(109,137), X(110,138),
+  X(111,139), X(112,140), X(117,145), X(118,146), X(119,147), X(120,148),
+  X(125,153), X(126,154), X(127,155), X(128,156), X(133,161), X(134,162),
+  X(135,163), X(136,164), X(141,169), X(142,170), X(143,171), X(144,172),
+  X(149,177), X(150,178), X(151,179), X(152,180), X(157,185), X(158,186),
+  X(159,187), X(160,188), X(165,193), X(166,194), X(167,195), X(168,196),
+  X(173,201), X(174,202), X(175,203), X(176,204), X(5,17), X(6,18), X(7,19),
+  X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35),
+  X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51),
+  X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67),
+  X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83),
+  X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(173,185), X(174,186),
+  X(175,187), X(176,188), X(181,193), X(182,194), X(183,195), X(184,196),
+  X(189,201), X(190,202), X(191,203), X(192,204), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27),
+  X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43),
+  X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59),
+  X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75),
+  X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91),
+  X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106),
+  X(103,107), X(104,108), X(109,113), X(110,114), X(111,115), X(112,116),
+  X(117,121), X(118,122), X(119,123), X(120,124), X(125,129), X(126,130),
+  X(127,131), X(128,132), X(133,137), X(134,138), X(135,139), X(136,140),
+  X(141,145), X(142,146), X(143,147), X(144,148), X(149,153), X(150,154),
+  X(151,155), X(152,156), X(157,161), X(158,162), X(159,163), X(160,164),
+  X(165,169), X(166,170), X(167,171), X(168,172), X(173,177), X(174,178),
+  X(175,179), X(176,180), X(181,185), X(182,186), X(183,187), X(184,188),
+  X(189,193), X(190,194), X(191,195), X(192,196), X(197,201), X(198,202),
+  X(199,203), X(200,204), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(129,131),
+  X(130,132), X(133,135), X(134,136), X(137,139), X(138,140), X(141,143),
+  X(142,144), X(145,147), X(146,148), X(149,151), X(150,152), X(153,155),
+  X(154,156), X(157,159), X(158,160), X(161,163), X(162,164), X(165,167),
+  X(166,168), X(169,171), X(170,172), X(173,175), X(174,176), X(177,179),
+  X(178,180), X(181,183), X(182,184), X(185,187), X(186,188), X(189,191),
+  X(190,192), X(193,195), X(194,196), X(197,199), X(198,200), X(201,203),
+  X(202,204), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194),
+  X(71,197), X(72,198), X(75,201), X(76,202), X(3,65), X(4,66), X(7,69), X(8,70),
+  X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86),
+  X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98), X(39,101),
+  X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113), X(52,114),
+  X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126), X(67,129),
+  X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141), X(80,142),
+  X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154), X(95,157),
+  X(96,158), X(99,161), X(100,162), X(103,165), X(104,166), X(107,169),
+  X(108,170), X(111,173), X(112,174), X(115,177), X(116,178), X(119,181),
+  X(120,182), X(123,185), X(124,186), X(127,189), X(128,190), X(131,193),
+  X(132,194), X(135,197), X(136,198), X(139,201), X(140,202), X(3,33), X(4,34),
+  X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50),
+  X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66),
+  X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82),
+  X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(127,157), X(128,158), X(131,161), X(132,162),
+  X(135,165), X(136,166), X(139,169), X(140,170), X(143,173), X(144,174),
+  X(147,177), X(148,178), X(151,181), X(152,182), X(155,185), X(156,186),
+  X(159,189), X(160,190), X(163,193), X(164,194), X(167,197), X(168,198),
+  X(171,201), X(172,202), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90),
+  X(79,93), X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105),
+  X(92,106), X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166),
+  X(155,169), X(156,170), X(159,173), X(160,174), X(163,177), X(164,178),
+  X(167,181), X(168,182), X(171,185), X(172,186), X(175,189), X(176,190),
+  X(179,193), X(180,194), X(183,197), X(184,198), X(187,201), X(188,202), X(3,9),
+  X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25),
+  X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41),
+  X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57),
+  X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73),
+  X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89),
+  X(84,90), X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102),
+  X(99,105), X(100,106), X(103,109), X(104,110), X(107,113), X(108,114),
+  X(111,117), X(112,118), X(115,121), X(116,122), X(119,125), X(120,126),
+  X(123,129), X(124,130), X(127,133), X(128,134), X(131,137), X(132,138),
+  X(135,141), X(136,142), X(139,145), X(140,146), X(143,149), X(144,150),
+  X(147,153), X(148,154), X(151,157), X(152,158), X(155,161), X(156,162),
+  X(159,165), X(160,166), X(163,169), X(164,170), X(167,173), X(168,174),
+  X(171,177), X(172,178), X(175,181), X(176,182), X(179,185), X(180,186),
+  X(183,189), X(184,190), X(187,193), X(188,194), X(191,197), X(192,198),
+  X(195,201), X(196,202), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94),
+  X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(115,117), X(116,118), X(119,121),
+  X(120,122), X(123,125), X(124,126), X(127,129), X(128,130), X(131,133),
+  X(132,134), X(135,137), X(136,138), X(139,141), X(140,142), X(143,145),
+  X(144,146), X(147,149), X(148,150), X(151,153), X(152,154), X(155,157),
+  X(156,158), X(159,161), X(160,162), X(163,165), X(164,166), X(167,169),
+  X(168,170), X(171,173), X(172,174), X(175,177), X(176,178), X(179,181),
+  X(180,182), X(183,185), X(184,186), X(187,189), X(188,190), X(191,193),
+  X(192,194), X(195,197), X(196,198), X(199,201), X(200,202), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(2,129), X(4,131),
+  X(6,133), X(8,135), X(10,137), X(12,139), X(14,141), X(16,143), X(18,145),
+  X(20,147), X(22,149), X(24,151), X(26,153), X(28,155), X(30,157), X(32,159),
+  X(34,161), X(36,163), X(38,165), X(40,167), X(42,169), X(44,171), X(46,173),
+  X(48,175), X(50,177), X(52,179), X(54,181), X(56,183), X(58,185), X(60,187),
+  X(62,189), X(64,191), X(66,193), X(68,195), X(70,197), X(72,199), X(74,201),
+  X(76,203), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107),
+  X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121),
+  X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135),
+  X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149),
+  X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161), X(100,163),
+  X(102,165), X(104,167), X(106,169), X(108,171), X(110,173), X(112,175),
+  X(114,177), X(116,179), X(118,181), X(120,183), X(122,185), X(124,187),
+  X(126,189), X(128,191), X(130,193), X(132,195), X(134,197), X(136,199),
+  X(138,201), X(140,203), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75),
+  X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91),
+  X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105),
+  X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119),
+  X(90,121), X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133),
+  X(104,135), X(106,137), X(108,139), X(110,141), X(112,143), X(114,145),
+  X(116,147), X(118,149), X(120,151), X(122,153), X(124,155), X(126,157),
+  X(128,159), X(130,161), X(132,163), X(134,165), X(136,167), X(138,169),
+  X(140,171), X(142,173), X(144,175), X(146,177), X(148,179), X(150,181),
+  X(152,183), X(154,185), X(156,187), X(158,189), X(160,191), X(162,193),
+  X(164,195), X(166,197), X(168,199), X(170,201), X(172,203), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83),
+  X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(170,185),
+  X(172,187), X(174,189), X(176,191), X(178,193), X(180,195), X(182,197),
+  X(184,199), X(186,201), X(188,203), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(108,115), X(110,117), X(112,119), X(114,121),
+  X(116,123), X(118,125), X(120,127), X(122,129), X(124,131), X(126,133),
+  X(128,135), X(130,137), X(132,139), X(134,141), X(136,143), X(138,145),
+  X(140,147), X(142,149), X(144,151), X(146,153), X(148,155), X(150,157),
+  X(152,159), X(154,161), X(156,163), X(158,165), X(160,167), X(162,169),
+  X(164,171), X(166,173), X(168,175), X(170,177), X(172,179), X(174,181),
+  X(176,183), X(178,185), X(180,187), X(182,189), X(184,191), X(186,193),
+  X(188,195), X(190,197), X(192,199), X(194,201), X(196,203), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(130,133), X(132,135), X(134,137),
+  X(136,139), X(138,141), X(140,143), X(142,145), X(144,147), X(146,149),
+  X(148,151), X(150,153), X(152,155), X(154,157), X(156,159), X(158,161),
+  X(160,163), X(162,165), X(164,167), X(166,169), X(168,171), X(170,173),
+  X(172,175), X(174,177), X(176,179), X(178,181), X(180,183), X(182,185),
+  X(184,187), X(186,189), X(188,191), X(190,193), X(192,195), X(194,197),
+  X(196,199), X(198,201), X(200,203), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153),
+  X(154,155), X(156,157), X(158,159), X(160,161), X(162,163), X(164,165),
+  X(166,167), X(168,169), X(170,171), X(172,173), X(174,175), X(176,177),
+  X(178,179), X(180,181), X(182,183), X(184,185), X(186,187), X(188,189),
+  X(190,191), X(192,193), X(194,195), X(196,197), X(198,199), X(200,201),
+  X(202,203)
+};
+S(206) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71),
+  X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79),
+  X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87),
+  X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95),
+  X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102),
+  X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109),
+  X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116),
+  X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123),
+  X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(129,193), X(130,194),
+  X(131,195), X(132,196), X(133,197), X(134,198), X(135,199), X(136,200),
+  X(137,201), X(138,202), X(139,203), X(140,204), X(141,205), X(142,206),
+  X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135),
+  X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142),
+  X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149),
+  X(86,150), X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156),
+  X(93,157), X(94,158), X(95,159), X(96,160), X(97,161), X(98,162), X(99,163),
+  X(100,164), X(101,165), X(102,166), X(103,167), X(104,168), X(105,169),
+  X(106,170), X(107,171), X(108,172), X(109,173), X(110,174), X(111,175),
+  X(112,176), X(113,177), X(114,178), X(115,179), X(116,180), X(117,181),
+  X(118,182), X(119,183), X(120,184), X(121,185), X(122,186), X(123,187),
+  X(124,188), X(125,189), X(126,190), X(127,191), X(128,192), X(1,33), X(2,34),
+  X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42),
+  X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50),
+  X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58),
+  X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98),
+  X(67,99), X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105),
+  X(74,106), X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112),
+  X(81,113), X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119),
+  X(88,120), X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126),
+  X(95,127), X(96,128), X(129,161), X(130,162), X(131,163), X(132,164),
+  X(133,165), X(134,166), X(135,167), X(136,168), X(137,169), X(138,170),
+  X(139,171), X(140,172), X(141,173), X(142,174), X(143,175), X(144,176),
+  X(145,177), X(146,178), X(147,179), X(148,180), X(149,181), X(150,182),
+  X(151,183), X(152,184), X(153,185), X(154,186), X(155,187), X(156,188),
+  X(157,189), X(158,190), X(159,191), X(160,192), X(33,129), X(34,130),
+  X(35,131), X(36,132), X(37,133), X(38,134), X(39,135), X(40,136), X(41,137),
+  X(42,138), X(43,139), X(44,140), X(45,141), X(46,142), X(47,143), X(48,144),
+  X(49,145), X(50,146), X(51,147), X(52,148), X(53,149), X(54,150), X(55,151),
+  X(56,152), X(57,153), X(58,154), X(59,155), X(60,156), X(61,157), X(62,158),
+  X(63,159), X(64,160), X(97,193), X(98,194), X(99,195), X(100,196), X(101,197),
+  X(102,198), X(103,199), X(104,200), X(105,201), X(106,202), X(107,203),
+  X(108,204), X(109,205), X(110,206), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76),
+  X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84),
+  X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92),
+  X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131),
+  X(100,132), X(101,133), X(102,134), X(103,135), X(104,136), X(105,137),
+  X(106,138), X(107,139), X(108,140), X(109,141), X(110,142), X(111,143),
+  X(112,144), X(113,145), X(114,146), X(115,147), X(116,148), X(117,149),
+  X(118,150), X(119,151), X(120,152), X(121,153), X(122,154), X(123,155),
+  X(124,156), X(125,157), X(126,158), X(127,159), X(128,160), X(161,193),
+  X(162,194), X(163,195), X(164,196), X(165,197), X(166,198), X(167,199),
+  X(168,200), X(169,201), X(170,202), X(171,203), X(172,204), X(173,205),
+  X(174,206), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23),
+  X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31),
+  X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55),
+  X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63),
+  X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87),
+  X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95),
+  X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(129,145), X(130,146),
+  X(131,147), X(132,148), X(133,149), X(134,150), X(135,151), X(136,152),
+  X(137,153), X(138,154), X(139,155), X(140,156), X(141,157), X(142,158),
+  X(143,159), X(144,160), X(161,177), X(162,178), X(163,179), X(164,180),
+  X(165,181), X(166,182), X(167,183), X(168,184), X(169,185), X(170,186),
+  X(171,187), X(172,188), X(173,189), X(174,190), X(175,191), X(176,192),
+  X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134), X(23,135),
+  X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141), X(30,142),
+  X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164), X(53,165),
+  X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171), X(60,172),
+  X(61,173), X(62,174), X(63,175), X(64,176), X(81,193), X(82,194), X(83,195),
+  X(84,196), X(85,197), X(86,198), X(87,199), X(88,200), X(89,201), X(90,202),
+  X(91,203), X(92,204), X(93,205), X(94,206), X(17,65), X(18,66), X(19,67),
+  X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75),
+  X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(119,167), X(120,168), X(121,169), X(122,170), X(123,171),
+  X(124,172), X(125,173), X(126,174), X(127,175), X(128,176), X(145,193),
+  X(146,194), X(147,195), X(148,196), X(149,197), X(150,198), X(151,199),
+  X(152,200), X(153,201), X(154,202), X(155,203), X(156,204), X(157,205),
+  X(158,206), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100), X(85,101),
+  X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107), X(92,108),
+  X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130), X(115,131),
+  X(116,132), X(117,133), X(118,134), X(119,135), X(120,136), X(121,137),
+  X(122,138), X(123,139), X(124,140), X(125,141), X(126,142), X(127,143),
+  X(128,144), X(145,161), X(146,162), X(147,163), X(148,164), X(149,165),
+  X(150,166), X(151,167), X(152,168), X(153,169), X(154,170), X(155,171),
+  X(156,172), X(157,173), X(158,174), X(159,175), X(160,176), X(177,193),
+  X(178,194), X(179,195), X(180,196), X(181,197), X(182,198), X(183,199),
+  X(184,200), X(185,201), X(186,202), X(187,203), X(188,204), X(189,205),
+  X(190,206), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15),
+  X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31),
+  X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47),
+  X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63),
+  X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79),
+  X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95),
+  X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(145,153), X(146,154), X(147,155), X(148,156), X(149,157), X(150,158),
+  X(151,159), X(152,160), X(161,169), X(162,170), X(163,171), X(164,172),
+  X(165,173), X(166,174), X(167,175), X(168,176), X(177,185), X(178,186),
+  X(179,187), X(180,188), X(181,189), X(182,190), X(183,191), X(184,192),
+  X(193,201), X(194,202), X(195,203), X(196,204), X(197,205), X(198,206),
+  X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135),
+  X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149), X(30,150),
+  X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164), X(45,165),
+  X(46,166), X(47,167), X(48,168), X(57,177), X(58,178), X(59,179), X(60,180),
+  X(61,181), X(62,182), X(63,183), X(64,184), X(73,193), X(74,194), X(75,195),
+  X(76,196), X(77,197), X(78,198), X(79,199), X(80,200), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98),
+  X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113),
+  X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120),
+  X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135),
+  X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150),
+  X(95,151), X(96,152), X(105,161), X(106,162), X(107,163), X(108,164),
+  X(109,165), X(110,166), X(111,167), X(112,168), X(121,177), X(122,178),
+  X(123,179), X(124,180), X(125,181), X(126,182), X(127,183), X(128,184),
+  X(137,193), X(138,194), X(139,195), X(140,196), X(141,197), X(142,198),
+  X(143,199), X(144,200), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37),
+  X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53),
+  X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69),
+  X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85),
+  X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100),
+  X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115),
+  X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130),
+  X(107,131), X(108,132), X(109,133), X(110,134), X(111,135), X(112,136),
+  X(121,145), X(122,146), X(123,147), X(124,148), X(125,149), X(126,150),
+  X(127,151), X(128,152), X(137,161), X(138,162), X(139,163), X(140,164),
+  X(141,165), X(142,166), X(143,167), X(144,168), X(153,177), X(154,178),
+  X(155,179), X(156,180), X(157,181), X(158,182), X(159,183), X(160,184),
+  X(169,193), X(170,194), X(171,195), X(172,196), X(173,197), X(174,198),
+  X(175,199), X(176,200), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21),
+  X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37),
+  X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53),
+  X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69),
+  X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85),
+  X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100),
+  X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(139,147), X(140,148), X(141,149),
+  X(142,150), X(143,151), X(144,152), X(153,161), X(154,162), X(155,163),
+  X(156,164), X(157,165), X(158,166), X(159,167), X(160,168), X(169,177),
+  X(170,178), X(171,179), X(172,180), X(173,181), X(174,182), X(175,183),
+  X(176,184), X(185,193), X(186,194), X(187,195), X(188,196), X(189,197),
+  X(190,198), X(191,199), X(192,200), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(147,151), X(148,152),
+  X(153,157), X(154,158), X(155,159), X(156,160), X(161,165), X(162,166),
+  X(163,167), X(164,168), X(169,173), X(170,174), X(171,175), X(172,176),
+  X(177,181), X(178,182), X(179,183), X(180,184), X(185,189), X(186,190),
+  X(187,191), X(188,192), X(193,197), X(194,198), X(195,199), X(196,200),
+  X(201,205), X(202,206), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137),
+  X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148),
+  X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163),
+  X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(53,177), X(54,178),
+  X(55,179), X(56,180), X(61,185), X(62,186), X(63,187), X(64,188), X(69,193),
+  X(70,194), X(71,195), X(72,196), X(77,201), X(78,202), X(79,203), X(80,204),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92),
+  X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107),
+  X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122),
+  X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132), X(77,137),
+  X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147), X(88,148),
+  X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162), X(103,163),
+  X(104,164), X(109,169), X(110,170), X(111,171), X(112,172), X(117,177),
+  X(118,178), X(119,179), X(120,180), X(125,185), X(126,186), X(127,187),
+  X(128,188), X(133,193), X(134,194), X(135,195), X(136,196), X(141,201),
+  X(142,202), X(143,203), X(144,204), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52),
+  X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68),
+  X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84),
+  X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(103,131), X(104,132), X(109,137), X(110,138), X(111,139),
+  X(112,140), X(117,145), X(118,146), X(119,147), X(120,148), X(125,153),
+  X(126,154), X(127,155), X(128,156), X(133,161), X(134,162), X(135,163),
+  X(136,164), X(141,169), X(142,170), X(143,171), X(144,172), X(149,177),
+  X(150,178), X(151,179), X(152,180), X(157,185), X(158,186), X(159,187),
+  X(160,188), X(165,193), X(166,194), X(167,195), X(168,196), X(173,201),
+  X(174,202), X(175,203), X(176,204), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(173,185), X(174,186),
+  X(175,187), X(176,188), X(181,193), X(182,194), X(183,195), X(184,196),
+  X(189,201), X(190,202), X(191,203), X(192,204), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27),
+  X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43),
+  X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59),
+  X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75),
+  X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91),
+  X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106),
+  X(103,107), X(104,108), X(109,113), X(110,114), X(111,115), X(112,116),
+  X(117,121), X(118,122), X(119,123), X(120,124), X(125,129), X(126,130),
+  X(127,131), X(128,132), X(133,137), X(134,138), X(135,139), X(136,140),
+  X(141,145), X(142,146), X(143,147), X(144,148), X(149,153), X(150,154),
+  X(151,155), X(152,156), X(157,161), X(158,162), X(159,163), X(160,164),
+  X(165,169), X(166,170), X(167,171), X(168,172), X(173,177), X(174,178),
+  X(175,179), X(176,180), X(181,185), X(182,186), X(183,187), X(184,188),
+  X(189,193), X(190,194), X(191,195), X(192,196), X(197,201), X(198,202),
+  X(199,203), X(200,204), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(129,131),
+  X(130,132), X(133,135), X(134,136), X(137,139), X(138,140), X(141,143),
+  X(142,144), X(145,147), X(146,148), X(149,151), X(150,152), X(153,155),
+  X(154,156), X(157,159), X(158,160), X(161,163), X(162,164), X(165,167),
+  X(166,168), X(169,171), X(170,172), X(173,175), X(174,176), X(177,179),
+  X(178,180), X(181,183), X(182,184), X(185,187), X(186,188), X(189,191),
+  X(190,192), X(193,195), X(194,196), X(197,199), X(198,200), X(201,203),
+  X(202,204), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194),
+  X(71,197), X(72,198), X(75,201), X(76,202), X(79,205), X(80,206), X(3,65),
+  X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81),
+  X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97),
+  X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110),
+  X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125),
+  X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138),
+  X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153),
+  X(92,154), X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(127,189), X(128,190),
+  X(131,193), X(132,194), X(135,197), X(136,198), X(139,201), X(140,202),
+  X(143,205), X(144,206), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74),
+  X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90),
+  X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105),
+  X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118),
+  X(91,121), X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133),
+  X(104,134), X(107,137), X(108,138), X(111,141), X(112,142), X(115,145),
+  X(116,146), X(119,149), X(120,150), X(123,153), X(124,154), X(127,157),
+  X(128,158), X(131,161), X(132,162), X(135,165), X(136,166), X(139,169),
+  X(140,170), X(143,173), X(144,174), X(147,177), X(148,178), X(151,181),
+  X(152,182), X(155,185), X(156,186), X(159,189), X(160,190), X(163,193),
+  X(164,194), X(167,197), X(168,198), X(171,201), X(172,202), X(175,205),
+  X(176,206), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166),
+  X(155,169), X(156,170), X(159,173), X(160,174), X(163,177), X(164,178),
+  X(167,181), X(168,182), X(171,185), X(172,186), X(175,189), X(176,190),
+  X(179,193), X(180,194), X(183,197), X(184,198), X(187,201), X(188,202),
+  X(191,205), X(192,206), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50),
+  X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66),
+  X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82),
+  X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134),
+  X(131,137), X(132,138), X(135,141), X(136,142), X(139,145), X(140,146),
+  X(143,149), X(144,150), X(147,153), X(148,154), X(151,157), X(152,158),
+  X(155,161), X(156,162), X(159,165), X(160,166), X(163,169), X(164,170),
+  X(167,173), X(168,174), X(171,177), X(172,178), X(175,181), X(176,182),
+  X(179,185), X(180,186), X(183,189), X(184,190), X(187,193), X(188,194),
+  X(191,197), X(192,198), X(195,201), X(196,202), X(199,205), X(200,206), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134),
+  X(135,137), X(136,138), X(139,141), X(140,142), X(143,145), X(144,146),
+  X(147,149), X(148,150), X(151,153), X(152,154), X(155,157), X(156,158),
+  X(159,161), X(160,162), X(163,165), X(164,166), X(167,169), X(168,170),
+  X(171,173), X(172,174), X(175,177), X(176,178), X(179,181), X(180,182),
+  X(183,185), X(184,186), X(187,189), X(188,190), X(191,193), X(192,194),
+  X(195,197), X(196,198), X(199,201), X(200,202), X(203,205), X(204,206), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139), X(14,141),
+  X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153), X(28,155),
+  X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167), X(42,169),
+  X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181), X(56,183),
+  X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195), X(70,197),
+  X(72,199), X(74,201), X(76,203), X(78,205), X(2,65), X(4,67), X(6,69), X(8,71),
+  X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87),
+  X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99), X(38,101),
+  X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113), X(52,115),
+  X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127), X(66,129),
+  X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141), X(80,143),
+  X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155), X(94,157),
+  X(96,159), X(98,161), X(100,163), X(102,165), X(104,167), X(106,169),
+  X(108,171), X(110,173), X(112,175), X(114,177), X(116,179), X(118,181),
+  X(120,183), X(122,185), X(124,187), X(126,189), X(128,191), X(130,193),
+  X(132,195), X(134,197), X(136,199), X(138,201), X(140,203), X(142,205),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95),
+  X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109),
+  X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(92,123),
+  X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(146,177), X(148,179), X(150,181), X(152,183),
+  X(154,185), X(156,187), X(158,189), X(160,191), X(162,193), X(164,195),
+  X(166,197), X(168,199), X(170,201), X(172,203), X(174,205), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83),
+  X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(170,185),
+  X(172,187), X(174,189), X(176,191), X(178,193), X(180,195), X(182,197),
+  X(184,199), X(186,201), X(188,203), X(190,205), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45),
+  X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61),
+  X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77),
+  X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93),
+  X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107),
+  X(102,109), X(104,111), X(106,113), X(108,115), X(110,117), X(112,119),
+  X(114,121), X(116,123), X(118,125), X(120,127), X(122,129), X(124,131),
+  X(126,133), X(128,135), X(130,137), X(132,139), X(134,141), X(136,143),
+  X(138,145), X(140,147), X(142,149), X(144,151), X(146,153), X(148,155),
+  X(150,157), X(152,159), X(154,161), X(156,163), X(158,165), X(160,167),
+  X(162,169), X(164,171), X(166,173), X(168,175), X(170,177), X(172,179),
+  X(174,181), X(176,183), X(178,185), X(180,187), X(182,189), X(184,191),
+  X(186,193), X(188,195), X(190,197), X(192,199), X(194,201), X(196,203),
+  X(198,205), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17),
+  X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33),
+  X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49),
+  X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65),
+  X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81),
+  X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97),
+  X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133),
+  X(132,135), X(134,137), X(136,139), X(138,141), X(140,143), X(142,145),
+  X(144,147), X(146,149), X(148,151), X(150,153), X(152,155), X(154,157),
+  X(156,159), X(158,161), X(160,163), X(162,165), X(164,167), X(166,169),
+  X(168,171), X(170,173), X(172,175), X(174,177), X(176,179), X(178,181),
+  X(180,183), X(182,185), X(184,187), X(186,189), X(188,191), X(190,193),
+  X(192,195), X(194,197), X(196,199), X(198,201), X(200,203), X(202,205), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205)
+};
+S(208) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69),
+  X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77),
+  X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85),
+  X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93),
+  X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100),
+  X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107),
+  X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114),
+  X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121),
+  X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128),
+  X(129,193), X(130,194), X(131,195), X(132,196), X(133,197), X(134,198),
+  X(135,199), X(136,200), X(137,201), X(138,202), X(139,203), X(140,204),
+  X(141,205), X(142,206), X(143,207), X(144,208), X(65,129), X(66,130),
+  X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136), X(73,137),
+  X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143), X(80,144),
+  X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150), X(87,151),
+  X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157), X(94,158),
+  X(95,159), X(96,160), X(97,161), X(98,162), X(99,163), X(100,164), X(101,165),
+  X(102,166), X(103,167), X(104,168), X(105,169), X(106,170), X(107,171),
+  X(108,172), X(109,173), X(110,174), X(111,175), X(112,176), X(113,177),
+  X(114,178), X(115,179), X(116,180), X(117,181), X(118,182), X(119,183),
+  X(120,184), X(121,185), X(122,186), X(123,187), X(124,188), X(125,189),
+  X(126,190), X(127,191), X(128,192), X(1,33), X(2,34), X(3,35), X(4,36),
+  X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44),
+  X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52),
+  X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60),
+  X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(135,167), X(136,168), X(137,169), X(138,170), X(139,171),
+  X(140,172), X(141,173), X(142,174), X(143,175), X(144,176), X(145,177),
+  X(146,178), X(147,179), X(148,180), X(149,181), X(150,182), X(151,183),
+  X(152,184), X(153,185), X(154,186), X(155,187), X(156,188), X(157,189),
+  X(158,190), X(159,191), X(160,192), X(33,129), X(34,130), X(35,131), X(36,132),
+  X(37,133), X(38,134), X(39,135), X(40,136), X(41,137), X(42,138), X(43,139),
+  X(44,140), X(45,141), X(46,142), X(47,143), X(48,144), X(49,145), X(50,146),
+  X(51,147), X(52,148), X(53,149), X(54,150), X(55,151), X(56,152), X(57,153),
+  X(58,154), X(59,155), X(60,156), X(61,157), X(62,158), X(63,159), X(64,160),
+  X(97,193), X(98,194), X(99,195), X(100,196), X(101,197), X(102,198),
+  X(103,199), X(104,200), X(105,201), X(106,202), X(107,203), X(108,204),
+  X(109,205), X(110,206), X(111,207), X(112,208), X(33,65), X(34,66), X(35,67),
+  X(36,68), X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75),
+  X(44,76), X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83),
+  X(52,84), X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91),
+  X(60,92), X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130),
+  X(99,131), X(100,132), X(101,133), X(102,134), X(103,135), X(104,136),
+  X(105,137), X(106,138), X(107,139), X(108,140), X(109,141), X(110,142),
+  X(111,143), X(112,144), X(113,145), X(114,146), X(115,147), X(116,148),
+  X(117,149), X(118,150), X(119,151), X(120,152), X(121,153), X(122,154),
+  X(123,155), X(124,156), X(125,157), X(126,158), X(127,159), X(128,160),
+  X(161,193), X(162,194), X(163,195), X(164,196), X(165,197), X(166,198),
+  X(167,199), X(168,200), X(169,201), X(170,202), X(171,203), X(172,204),
+  X(173,205), X(174,206), X(175,207), X(176,208), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(17,129), X(18,130),
+  X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136), X(25,137),
+  X(26,138), X(27,139), X(28,140), X(29,141), X(30,142), X(31,143), X(32,144),
+  X(49,161), X(50,162), X(51,163), X(52,164), X(53,165), X(54,166), X(55,167),
+  X(56,168), X(57,169), X(58,170), X(59,171), X(60,172), X(61,173), X(62,174),
+  X(63,175), X(64,176), X(81,193), X(82,194), X(83,195), X(84,196), X(85,197),
+  X(86,198), X(87,199), X(88,200), X(89,201), X(90,202), X(91,203), X(92,204),
+  X(93,205), X(94,206), X(95,207), X(96,208), X(17,65), X(18,66), X(19,67),
+  X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75),
+  X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(119,167), X(120,168), X(121,169), X(122,170), X(123,171),
+  X(124,172), X(125,173), X(126,174), X(127,175), X(128,176), X(145,193),
+  X(146,194), X(147,195), X(148,196), X(149,197), X(150,198), X(151,199),
+  X(152,200), X(153,201), X(154,202), X(155,203), X(156,204), X(157,205),
+  X(158,206), X(159,207), X(160,208), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68),
+  X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76),
+  X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129),
+  X(114,130), X(115,131), X(116,132), X(117,133), X(118,134), X(119,135),
+  X(120,136), X(121,137), X(122,138), X(123,139), X(124,140), X(125,141),
+  X(126,142), X(127,143), X(128,144), X(145,161), X(146,162), X(147,163),
+  X(148,164), X(149,165), X(150,166), X(151,167), X(152,168), X(153,169),
+  X(154,170), X(155,171), X(156,172), X(157,173), X(158,174), X(159,175),
+  X(160,176), X(177,193), X(178,194), X(179,195), X(180,196), X(181,197),
+  X(182,198), X(183,199), X(184,200), X(185,201), X(186,202), X(187,203),
+  X(188,204), X(189,205), X(190,206), X(191,207), X(192,208), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(117,125),
+  X(118,126), X(119,127), X(120,128), X(129,137), X(130,138), X(131,139),
+  X(132,140), X(133,141), X(134,142), X(135,143), X(136,144), X(145,153),
+  X(146,154), X(147,155), X(148,156), X(149,157), X(150,158), X(151,159),
+  X(152,160), X(161,169), X(162,170), X(163,171), X(164,172), X(165,173),
+  X(166,174), X(167,175), X(168,176), X(177,185), X(178,186), X(179,187),
+  X(180,188), X(181,189), X(182,190), X(183,191), X(184,192), X(193,201),
+  X(194,202), X(195,203), X(196,204), X(197,205), X(198,206), X(199,207),
+  X(200,208), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134),
+  X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149),
+  X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164),
+  X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178), X(59,179),
+  X(60,180), X(61,181), X(62,182), X(63,183), X(64,184), X(73,193), X(74,194),
+  X(75,195), X(76,196), X(77,197), X(78,198), X(79,199), X(80,200), X(9,65),
+  X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81),
+  X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97),
+  X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104),
+  X(57,113), X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119),
+  X(64,120), X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134),
+  X(79,135), X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149),
+  X(94,150), X(95,151), X(96,152), X(105,161), X(106,162), X(107,163),
+  X(108,164), X(109,165), X(110,166), X(111,167), X(112,168), X(121,177),
+  X(122,178), X(123,179), X(124,180), X(125,181), X(126,182), X(127,183),
+  X(128,184), X(137,193), X(138,194), X(139,195), X(140,196), X(141,197),
+  X(142,198), X(143,199), X(144,200), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52),
+  X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68),
+  X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84),
+  X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(121,145), X(122,146), X(123,147), X(124,148), X(125,149),
+  X(126,150), X(127,151), X(128,152), X(137,161), X(138,162), X(139,163),
+  X(140,164), X(141,165), X(142,166), X(143,167), X(144,168), X(153,177),
+  X(154,178), X(155,179), X(156,180), X(157,181), X(158,182), X(159,183),
+  X(160,184), X(169,193), X(170,194), X(171,195), X(172,196), X(173,197),
+  X(174,198), X(175,199), X(176,200), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52),
+  X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68),
+  X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84),
+  X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(125,133), X(126,134),
+  X(127,135), X(128,136), X(137,145), X(138,146), X(139,147), X(140,148),
+  X(141,149), X(142,150), X(143,151), X(144,152), X(153,161), X(154,162),
+  X(155,163), X(156,164), X(157,165), X(158,166), X(159,167), X(160,168),
+  X(169,177), X(170,178), X(171,179), X(172,180), X(173,181), X(174,182),
+  X(175,183), X(176,184), X(185,193), X(186,194), X(187,195), X(188,196),
+  X(189,197), X(190,198), X(191,199), X(192,200), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88),
+  X(89,93), X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103),
+  X(100,104), X(105,109), X(106,110), X(107,111), X(108,112), X(113,117),
+  X(114,118), X(115,119), X(116,120), X(121,125), X(122,126), X(123,127),
+  X(124,128), X(129,133), X(130,134), X(131,135), X(132,136), X(137,141),
+  X(138,142), X(139,143), X(140,144), X(145,149), X(146,150), X(147,151),
+  X(148,152), X(153,157), X(154,158), X(155,159), X(156,160), X(161,165),
+  X(162,166), X(163,167), X(164,168), X(169,173), X(170,174), X(171,175),
+  X(172,176), X(177,181), X(178,182), X(179,183), X(180,184), X(185,189),
+  X(186,190), X(187,191), X(188,192), X(193,197), X(194,198), X(195,199),
+  X(196,200), X(201,205), X(202,206), X(203,207), X(204,208), X(5,129), X(6,130),
+  X(7,131), X(8,132), X(13,137), X(14,138), X(15,139), X(16,140), X(21,145),
+  X(22,146), X(23,147), X(24,148), X(29,153), X(30,154), X(31,155), X(32,156),
+  X(37,161), X(38,162), X(39,163), X(40,164), X(45,169), X(46,170), X(47,171),
+  X(48,172), X(53,177), X(54,178), X(55,179), X(56,180), X(61,185), X(62,186),
+  X(63,187), X(64,188), X(69,193), X(70,194), X(71,195), X(72,196), X(77,201),
+  X(78,202), X(79,203), X(80,204), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73),
+  X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89),
+  X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100),
+  X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115),
+  X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130),
+  X(71,131), X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145),
+  X(86,146), X(87,147), X(88,148), X(93,153), X(94,154), X(95,155), X(96,156),
+  X(101,161), X(102,162), X(103,163), X(104,164), X(109,169), X(110,170),
+  X(111,171), X(112,172), X(117,177), X(118,178), X(119,179), X(120,180),
+  X(125,185), X(126,186), X(127,187), X(128,188), X(133,193), X(134,194),
+  X(135,195), X(136,196), X(141,201), X(142,202), X(143,203), X(144,204),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92),
+  X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107),
+  X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121), X(94,122),
+  X(95,123), X(96,124), X(101,129), X(102,130), X(103,131), X(104,132),
+  X(109,137), X(110,138), X(111,139), X(112,140), X(117,145), X(118,146),
+  X(119,147), X(120,148), X(125,153), X(126,154), X(127,155), X(128,156),
+  X(133,161), X(134,162), X(135,163), X(136,164), X(141,169), X(142,170),
+  X(143,171), X(144,172), X(149,177), X(150,178), X(151,179), X(152,180),
+  X(157,185), X(158,186), X(159,187), X(160,188), X(165,193), X(166,194),
+  X(167,195), X(168,196), X(173,201), X(174,202), X(175,203), X(176,204),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76),
+  X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92),
+  X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106), X(95,107),
+  X(96,108), X(101,113), X(102,114), X(103,115), X(104,116), X(109,121),
+  X(110,122), X(111,123), X(112,124), X(117,129), X(118,130), X(119,131),
+  X(120,132), X(125,137), X(126,138), X(127,139), X(128,140), X(133,145),
+  X(134,146), X(135,147), X(136,148), X(141,153), X(142,154), X(143,155),
+  X(144,156), X(149,161), X(150,162), X(151,163), X(152,164), X(157,169),
+  X(158,170), X(159,171), X(160,172), X(165,177), X(166,178), X(167,179),
+  X(168,180), X(173,185), X(174,186), X(175,187), X(176,188), X(181,193),
+  X(182,194), X(183,195), X(184,196), X(189,201), X(190,202), X(191,203),
+  X(192,204), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19),
+  X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35),
+  X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51),
+  X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67),
+  X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83),
+  X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99),
+  X(96,100), X(101,105), X(102,106), X(103,107), X(104,108), X(109,113),
+  X(110,114), X(111,115), X(112,116), X(117,121), X(118,122), X(119,123),
+  X(120,124), X(125,129), X(126,130), X(127,131), X(128,132), X(133,137),
+  X(134,138), X(135,139), X(136,140), X(141,145), X(142,146), X(143,147),
+  X(144,148), X(149,153), X(150,154), X(151,155), X(152,156), X(157,161),
+  X(158,162), X(159,163), X(160,164), X(165,169), X(166,170), X(167,171),
+  X(168,172), X(173,177), X(174,178), X(175,179), X(176,180), X(181,185),
+  X(182,186), X(183,187), X(184,188), X(189,193), X(190,194), X(191,195),
+  X(192,196), X(197,201), X(198,202), X(199,203), X(200,204), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(197,199), X(198,200), X(201,203), X(202,204), X(205,207),
+  X(206,208), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194),
+  X(71,197), X(72,198), X(75,201), X(76,202), X(79,205), X(80,206), X(3,65),
+  X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81),
+  X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97),
+  X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110),
+  X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125),
+  X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138),
+  X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153),
+  X(92,154), X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(127,189), X(128,190),
+  X(131,193), X(132,194), X(135,197), X(136,198), X(139,201), X(140,202),
+  X(143,205), X(144,206), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74),
+  X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90),
+  X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105),
+  X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118),
+  X(91,121), X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133),
+  X(104,134), X(107,137), X(108,138), X(111,141), X(112,142), X(115,145),
+  X(116,146), X(119,149), X(120,150), X(123,153), X(124,154), X(127,157),
+  X(128,158), X(131,161), X(132,162), X(135,165), X(136,166), X(139,169),
+  X(140,170), X(143,173), X(144,174), X(147,177), X(148,178), X(151,181),
+  X(152,182), X(155,185), X(156,186), X(159,189), X(160,190), X(163,193),
+  X(164,194), X(167,197), X(168,198), X(171,201), X(172,202), X(175,205),
+  X(176,206), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166),
+  X(155,169), X(156,170), X(159,173), X(160,174), X(163,177), X(164,178),
+  X(167,181), X(168,182), X(171,185), X(172,186), X(175,189), X(176,190),
+  X(179,193), X(180,194), X(183,197), X(184,198), X(187,201), X(188,202),
+  X(191,205), X(192,206), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50),
+  X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66),
+  X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82),
+  X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134),
+  X(131,137), X(132,138), X(135,141), X(136,142), X(139,145), X(140,146),
+  X(143,149), X(144,150), X(147,153), X(148,154), X(151,157), X(152,158),
+  X(155,161), X(156,162), X(159,165), X(160,166), X(163,169), X(164,170),
+  X(167,173), X(168,174), X(171,177), X(172,178), X(175,181), X(176,182),
+  X(179,185), X(180,186), X(183,189), X(184,190), X(187,193), X(188,194),
+  X(191,197), X(192,198), X(195,201), X(196,202), X(199,205), X(200,206), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134),
+  X(135,137), X(136,138), X(139,141), X(140,142), X(143,145), X(144,146),
+  X(147,149), X(148,150), X(151,153), X(152,154), X(155,157), X(156,158),
+  X(159,161), X(160,162), X(163,165), X(164,166), X(167,169), X(168,170),
+  X(171,173), X(172,174), X(175,177), X(176,178), X(179,181), X(180,182),
+  X(183,185), X(184,186), X(187,189), X(188,190), X(191,193), X(192,194),
+  X(195,197), X(196,198), X(199,201), X(200,202), X(203,205), X(204,206), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181),
+  X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195),
+  X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(2,65),
+  X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81),
+  X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97),
+  X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111),
+  X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125),
+  X(64,127), X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139),
+  X(78,141), X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153),
+  X(92,155), X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(124,187), X(126,189), X(128,191),
+  X(130,193), X(132,195), X(134,197), X(136,199), X(138,201), X(140,203),
+  X(142,205), X(144,207), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75),
+  X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91),
+  X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105),
+  X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119),
+  X(90,121), X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133),
+  X(104,135), X(106,137), X(108,139), X(110,141), X(112,143), X(114,145),
+  X(116,147), X(118,149), X(120,151), X(122,153), X(124,155), X(126,157),
+  X(128,159), X(130,161), X(132,163), X(134,165), X(136,167), X(138,169),
+  X(140,171), X(142,173), X(144,175), X(146,177), X(148,179), X(150,181),
+  X(152,183), X(154,185), X(156,187), X(158,189), X(160,191), X(162,193),
+  X(164,195), X(166,197), X(168,199), X(170,201), X(172,203), X(174,205),
+  X(176,207), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(160,175), X(162,177), X(164,179),
+  X(166,181), X(168,183), X(170,185), X(172,187), X(174,189), X(176,191),
+  X(178,193), X(180,195), X(182,197), X(184,199), X(186,201), X(188,203),
+  X(190,205), X(192,207), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83),
+  X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(134,141), X(136,143), X(138,145), X(140,147),
+  X(142,149), X(144,151), X(146,153), X(148,155), X(150,157), X(152,159),
+  X(154,161), X(156,163), X(158,165), X(160,167), X(162,169), X(164,171),
+  X(166,173), X(168,175), X(170,177), X(172,179), X(174,181), X(176,183),
+  X(178,185), X(180,187), X(182,189), X(184,191), X(186,193), X(188,195),
+  X(190,197), X(192,199), X(194,201), X(196,203), X(198,205), X(200,207), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(120,123),
+  X(122,125), X(124,127), X(126,129), X(128,131), X(130,133), X(132,135),
+  X(134,137), X(136,139), X(138,141), X(140,143), X(142,145), X(144,147),
+  X(146,149), X(148,151), X(150,153), X(152,155), X(154,157), X(156,159),
+  X(158,161), X(160,163), X(162,165), X(164,167), X(166,169), X(168,171),
+  X(170,173), X(172,175), X(174,177), X(176,179), X(178,181), X(180,183),
+  X(182,185), X(184,187), X(186,189), X(188,191), X(190,193), X(192,195),
+  X(194,197), X(196,199), X(198,201), X(200,203), X(202,205), X(204,207), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207)
+};
+S(210) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(1,65), X(2,66),
+  X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74),
+  X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82),
+  X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90),
+  X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98),
+  X(35,99), X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105),
+  X(42,106), X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112),
+  X(49,113), X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119),
+  X(56,120), X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126),
+  X(63,127), X(64,128), X(129,193), X(130,194), X(131,195), X(132,196),
+  X(133,197), X(134,198), X(135,199), X(136,200), X(137,201), X(138,202),
+  X(139,203), X(140,204), X(141,205), X(142,206), X(143,207), X(144,208),
+  X(145,209), X(146,210), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133),
+  X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140),
+  X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147),
+  X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154),
+  X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160), X(97,161),
+  X(98,162), X(99,163), X(100,164), X(101,165), X(102,166), X(103,167),
+  X(104,168), X(105,169), X(106,170), X(107,171), X(108,172), X(109,173),
+  X(110,174), X(111,175), X(112,176), X(113,177), X(114,178), X(115,179),
+  X(116,180), X(117,181), X(118,182), X(119,183), X(120,184), X(121,185),
+  X(122,186), X(123,187), X(124,188), X(125,189), X(126,190), X(127,191),
+  X(128,192), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39),
+  X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47),
+  X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55),
+  X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63),
+  X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102),
+  X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109),
+  X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116),
+  X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123),
+  X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161), X(130,162),
+  X(131,163), X(132,164), X(133,165), X(134,166), X(135,167), X(136,168),
+  X(137,169), X(138,170), X(139,171), X(140,172), X(141,173), X(142,174),
+  X(143,175), X(144,176), X(145,177), X(146,178), X(147,179), X(148,180),
+  X(149,181), X(150,182), X(151,183), X(152,184), X(153,185), X(154,186),
+  X(155,187), X(156,188), X(157,189), X(158,190), X(159,191), X(160,192),
+  X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134), X(39,135),
+  X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141), X(46,142),
+  X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148), X(53,149),
+  X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155), X(60,156),
+  X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194), X(99,195),
+  X(100,196), X(101,197), X(102,198), X(103,199), X(104,200), X(105,201),
+  X(106,202), X(107,203), X(108,204), X(109,205), X(110,206), X(111,207),
+  X(112,208), X(113,209), X(114,210), X(33,65), X(34,66), X(35,67), X(36,68),
+  X(37,69), X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76),
+  X(45,77), X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84),
+  X(53,85), X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92),
+  X(61,93), X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131),
+  X(100,132), X(101,133), X(102,134), X(103,135), X(104,136), X(105,137),
+  X(106,138), X(107,139), X(108,140), X(109,141), X(110,142), X(111,143),
+  X(112,144), X(113,145), X(114,146), X(115,147), X(116,148), X(117,149),
+  X(118,150), X(119,151), X(120,152), X(121,153), X(122,154), X(123,155),
+  X(124,156), X(125,157), X(126,158), X(127,159), X(128,160), X(161,193),
+  X(162,194), X(163,195), X(164,196), X(165,197), X(166,198), X(167,199),
+  X(168,200), X(169,201), X(170,202), X(171,203), X(172,204), X(173,205),
+  X(174,206), X(175,207), X(176,208), X(177,209), X(178,210), X(1,17), X(2,18),
+  X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26),
+  X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50),
+  X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58),
+  X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82),
+  X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90),
+  X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113),
+  X(98,114), X(99,115), X(100,116), X(101,117), X(102,118), X(103,119),
+  X(104,120), X(105,121), X(106,122), X(107,123), X(108,124), X(109,125),
+  X(110,126), X(111,127), X(112,128), X(129,145), X(130,146), X(131,147),
+  X(132,148), X(133,149), X(134,150), X(135,151), X(136,152), X(137,153),
+  X(138,154), X(139,155), X(140,156), X(141,157), X(142,158), X(143,159),
+  X(144,160), X(161,177), X(162,178), X(163,179), X(164,180), X(165,181),
+  X(166,182), X(167,183), X(168,184), X(169,185), X(170,186), X(171,187),
+  X(172,188), X(173,189), X(174,190), X(175,191), X(176,192), X(193,209),
+  X(194,210), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134),
+  X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141),
+  X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164),
+  X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171),
+  X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(81,193), X(82,194),
+  X(83,195), X(84,196), X(85,197), X(86,198), X(87,199), X(88,200), X(89,201),
+  X(90,202), X(91,203), X(92,204), X(93,205), X(94,206), X(95,207), X(96,208),
+  X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72),
+  X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80),
+  X(49,97), X(50,98), X(51,99), X(52,100), X(53,101), X(54,102), X(55,103),
+  X(56,104), X(57,105), X(58,106), X(59,107), X(60,108), X(61,109), X(62,110),
+  X(63,111), X(64,112), X(81,129), X(82,130), X(83,131), X(84,132), X(85,133),
+  X(86,134), X(87,135), X(88,136), X(89,137), X(90,138), X(91,139), X(92,140),
+  X(93,141), X(94,142), X(95,143), X(96,144), X(113,161), X(114,162), X(115,163),
+  X(116,164), X(117,165), X(118,166), X(119,167), X(120,168), X(121,169),
+  X(122,170), X(123,171), X(124,172), X(125,173), X(126,174), X(127,175),
+  X(128,176), X(145,193), X(146,194), X(147,195), X(148,196), X(149,197),
+  X(150,198), X(151,199), X(152,200), X(153,201), X(154,202), X(155,203),
+  X(156,204), X(157,205), X(158,206), X(159,207), X(160,208), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(117,133), X(118,134),
+  X(119,135), X(120,136), X(121,137), X(122,138), X(123,139), X(124,140),
+  X(125,141), X(126,142), X(127,143), X(128,144), X(145,161), X(146,162),
+  X(147,163), X(148,164), X(149,165), X(150,166), X(151,167), X(152,168),
+  X(153,169), X(154,170), X(155,171), X(156,172), X(157,173), X(158,174),
+  X(159,175), X(160,176), X(177,193), X(178,194), X(179,195), X(180,196),
+  X(181,197), X(182,198), X(183,199), X(184,200), X(185,201), X(186,202),
+  X(187,203), X(188,204), X(189,205), X(190,206), X(191,207), X(192,208), X(1,9),
+  X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25),
+  X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41),
+  X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57),
+  X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73),
+  X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89),
+  X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(145,153), X(146,154), X(147,155), X(148,156), X(149,157), X(150,158),
+  X(151,159), X(152,160), X(161,169), X(162,170), X(163,171), X(164,172),
+  X(165,173), X(166,174), X(167,175), X(168,176), X(177,185), X(178,186),
+  X(179,187), X(180,188), X(181,189), X(182,190), X(183,191), X(184,192),
+  X(193,201), X(194,202), X(195,203), X(196,204), X(197,205), X(198,206),
+  X(199,207), X(200,208), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133),
+  X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148),
+  X(29,149), X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163),
+  X(44,164), X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178),
+  X(59,179), X(60,180), X(61,181), X(62,182), X(63,183), X(64,184), X(73,193),
+  X(74,194), X(75,195), X(76,196), X(77,197), X(78,198), X(79,199), X(80,200),
+  X(89,209), X(90,210), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115),
+  X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130),
+  X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136), X(89,145),
+  X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151), X(96,152),
+  X(105,161), X(106,162), X(107,163), X(108,164), X(109,165), X(110,166),
+  X(111,167), X(112,168), X(121,177), X(122,178), X(123,179), X(124,180),
+  X(125,181), X(126,182), X(127,183), X(128,184), X(137,193), X(138,194),
+  X(139,195), X(140,196), X(141,197), X(142,198), X(143,199), X(144,200),
+  X(153,209), X(154,210), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37),
+  X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53),
+  X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69),
+  X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85),
+  X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100),
+  X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115),
+  X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130),
+  X(107,131), X(108,132), X(109,133), X(110,134), X(111,135), X(112,136),
+  X(121,145), X(122,146), X(123,147), X(124,148), X(125,149), X(126,150),
+  X(127,151), X(128,152), X(137,161), X(138,162), X(139,163), X(140,164),
+  X(141,165), X(142,166), X(143,167), X(144,168), X(153,177), X(154,178),
+  X(155,179), X(156,180), X(157,181), X(158,182), X(159,183), X(160,184),
+  X(169,193), X(170,194), X(171,195), X(172,196), X(173,197), X(174,198),
+  X(175,199), X(176,200), X(185,209), X(186,210), X(9,17), X(10,18), X(11,19),
+  X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35),
+  X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51),
+  X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67),
+  X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83),
+  X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(125,133), X(126,134),
+  X(127,135), X(128,136), X(137,145), X(138,146), X(139,147), X(140,148),
+  X(141,149), X(142,150), X(143,151), X(144,152), X(153,161), X(154,162),
+  X(155,163), X(156,164), X(157,165), X(158,166), X(159,167), X(160,168),
+  X(169,177), X(170,178), X(171,179), X(172,180), X(173,181), X(174,182),
+  X(175,183), X(176,184), X(185,193), X(186,194), X(187,195), X(188,196),
+  X(189,197), X(190,198), X(191,199), X(192,200), X(201,209), X(202,210), X(1,5),
+  X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21),
+  X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37),
+  X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53),
+  X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69),
+  X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80), X(81,85),
+  X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96),
+  X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(185,189), X(186,190), X(187,191), X(188,192),
+  X(193,197), X(194,198), X(195,199), X(196,200), X(201,205), X(202,206),
+  X(203,207), X(204,208), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137),
+  X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148),
+  X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163),
+  X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(53,177), X(54,178),
+  X(55,179), X(56,180), X(61,185), X(62,186), X(63,187), X(64,188), X(69,193),
+  X(70,194), X(71,195), X(72,196), X(77,201), X(78,202), X(79,203), X(80,204),
+  X(85,209), X(86,210), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74),
+  X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90),
+  X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105),
+  X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116),
+  X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131),
+  X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146),
+  X(87,147), X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161),
+  X(102,162), X(103,163), X(104,164), X(109,169), X(110,170), X(111,171),
+  X(112,172), X(117,177), X(118,178), X(119,179), X(120,180), X(125,185),
+  X(126,186), X(127,187), X(128,188), X(133,193), X(134,194), X(135,195),
+  X(136,196), X(141,201), X(142,202), X(143,203), X(144,204), X(149,209),
+  X(150,210), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43),
+  X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59),
+  X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75),
+  X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91),
+  X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106),
+  X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121),
+  X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(151,179),
+  X(152,180), X(157,185), X(158,186), X(159,187), X(160,188), X(165,193),
+  X(166,194), X(167,195), X(168,196), X(173,201), X(174,202), X(175,203),
+  X(176,204), X(181,209), X(182,210), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(173,185), X(174,186),
+  X(175,187), X(176,188), X(181,193), X(182,194), X(183,195), X(184,196),
+  X(189,201), X(190,202), X(191,203), X(192,204), X(197,209), X(198,210), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25),
+  X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41),
+  X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57),
+  X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73),
+  X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89),
+  X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100),
+  X(101,105), X(102,106), X(103,107), X(104,108), X(109,113), X(110,114),
+  X(111,115), X(112,116), X(117,121), X(118,122), X(119,123), X(120,124),
+  X(125,129), X(126,130), X(127,131), X(128,132), X(133,137), X(134,138),
+  X(135,139), X(136,140), X(141,145), X(142,146), X(143,147), X(144,148),
+  X(149,153), X(150,154), X(151,155), X(152,156), X(157,161), X(158,162),
+  X(159,163), X(160,164), X(165,169), X(166,170), X(167,171), X(168,172),
+  X(173,177), X(174,178), X(175,179), X(176,180), X(181,185), X(182,186),
+  X(183,187), X(184,188), X(189,193), X(190,194), X(191,195), X(192,196),
+  X(197,201), X(198,202), X(199,203), X(200,204), X(205,209), X(206,210), X(1,3),
+  X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19),
+  X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35),
+  X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51),
+  X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67),
+  X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83),
+  X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(197,199), X(198,200), X(201,203), X(202,204), X(205,207),
+  X(206,208), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194),
+  X(71,197), X(72,198), X(75,201), X(76,202), X(79,205), X(80,206), X(83,209),
+  X(84,210), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77),
+  X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93),
+  X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106),
+  X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121),
+  X(60,122), X(63,125), X(64,126), X(67,129), X(68,130), X(71,133), X(72,134),
+  X(75,137), X(76,138), X(79,141), X(80,142), X(83,145), X(84,146), X(87,149),
+  X(88,150), X(91,153), X(92,154), X(95,157), X(96,158), X(99,161), X(100,162),
+  X(103,165), X(104,166), X(107,169), X(108,170), X(111,173), X(112,174),
+  X(115,177), X(116,178), X(119,181), X(120,182), X(123,185), X(124,186),
+  X(127,189), X(128,190), X(131,193), X(132,194), X(135,197), X(136,198),
+  X(139,201), X(140,202), X(143,205), X(144,206), X(147,209), X(148,210),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78),
+  X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94),
+  X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109),
+  X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121), X(92,122),
+  X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(127,157), X(128,158),
+  X(131,161), X(132,162), X(135,165), X(136,166), X(139,169), X(140,170),
+  X(143,173), X(144,174), X(147,177), X(148,178), X(151,181), X(152,182),
+  X(155,185), X(156,186), X(159,189), X(160,190), X(163,193), X(164,194),
+  X(167,197), X(168,198), X(171,201), X(172,202), X(175,205), X(176,206),
+  X(179,209), X(180,210), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90),
+  X(79,93), X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105),
+  X(92,106), X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166),
+  X(155,169), X(156,170), X(159,173), X(160,174), X(163,177), X(164,178),
+  X(167,181), X(168,182), X(171,185), X(172,186), X(175,189), X(176,190),
+  X(179,193), X(180,194), X(183,197), X(184,198), X(187,201), X(188,202),
+  X(191,205), X(192,206), X(195,209), X(196,210), X(3,9), X(4,10), X(7,13),
+  X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29),
+  X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45),
+  X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61),
+  X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77),
+  X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93),
+  X(88,94), X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106),
+  X(103,109), X(104,110), X(107,113), X(108,114), X(111,117), X(112,118),
+  X(115,121), X(116,122), X(119,125), X(120,126), X(123,129), X(124,130),
+  X(127,133), X(128,134), X(131,137), X(132,138), X(135,141), X(136,142),
+  X(139,145), X(140,146), X(143,149), X(144,150), X(147,153), X(148,154),
+  X(151,157), X(152,158), X(155,161), X(156,162), X(159,165), X(160,166),
+  X(163,169), X(164,170), X(167,173), X(168,174), X(171,177), X(172,178),
+  X(175,181), X(176,182), X(179,185), X(180,186), X(183,189), X(184,190),
+  X(187,193), X(188,194), X(191,197), X(192,198), X(195,201), X(196,202),
+  X(199,205), X(200,206), X(203,209), X(204,210), X(3,5), X(4,6), X(7,9),
+  X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25),
+  X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41),
+  X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57),
+  X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73),
+  X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89),
+  X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101), X(100,102),
+  X(103,105), X(104,106), X(107,109), X(108,110), X(111,113), X(112,114),
+  X(115,117), X(116,118), X(119,121), X(120,122), X(123,125), X(124,126),
+  X(127,129), X(128,130), X(131,133), X(132,134), X(135,137), X(136,138),
+  X(139,141), X(140,142), X(143,145), X(144,146), X(147,149), X(148,150),
+  X(151,153), X(152,154), X(155,157), X(156,158), X(159,161), X(160,162),
+  X(163,165), X(164,166), X(167,169), X(168,170), X(171,173), X(172,174),
+  X(175,177), X(176,178), X(179,181), X(180,182), X(183,185), X(184,186),
+  X(187,189), X(188,190), X(191,193), X(192,194), X(195,197), X(196,198),
+  X(199,201), X(200,202), X(203,205), X(204,206), X(207,209), X(208,210), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137),
+  X(12,139), X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151),
+  X(26,153), X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165),
+  X(40,167), X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179),
+  X(54,181), X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193),
+  X(68,195), X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207),
+  X(82,209), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107),
+  X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121),
+  X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135),
+  X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149),
+  X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161), X(100,163),
+  X(102,165), X(104,167), X(106,169), X(108,171), X(110,173), X(112,175),
+  X(114,177), X(116,179), X(118,181), X(120,183), X(122,185), X(124,187),
+  X(126,189), X(128,191), X(130,193), X(132,195), X(134,197), X(136,199),
+  X(138,201), X(140,203), X(142,205), X(144,207), X(146,209), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83),
+  X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99),
+  X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113),
+  X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127),
+  X(98,129), X(100,131), X(102,133), X(104,135), X(106,137), X(108,139),
+  X(110,141), X(112,143), X(114,145), X(116,147), X(118,149), X(120,151),
+  X(122,153), X(124,155), X(126,157), X(128,159), X(130,161), X(132,163),
+  X(134,165), X(136,167), X(138,169), X(140,171), X(142,173), X(144,175),
+  X(146,177), X(148,179), X(150,181), X(152,183), X(154,185), X(156,187),
+  X(158,189), X(160,191), X(162,193), X(164,195), X(166,197), X(168,199),
+  X(170,201), X(172,203), X(174,205), X(176,207), X(178,209), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83),
+  X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(170,185),
+  X(172,187), X(174,189), X(176,191), X(178,193), X(180,195), X(182,197),
+  X(184,199), X(186,201), X(188,203), X(190,205), X(192,207), X(194,209), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57),
+  X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73),
+  X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89),
+  X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103),
+  X(98,105), X(100,107), X(102,109), X(104,111), X(106,113), X(108,115),
+  X(110,117), X(112,119), X(114,121), X(116,123), X(118,125), X(120,127),
+  X(122,129), X(124,131), X(126,133), X(128,135), X(130,137), X(132,139),
+  X(134,141), X(136,143), X(138,145), X(140,147), X(142,149), X(144,151),
+  X(146,153), X(148,155), X(150,157), X(152,159), X(154,161), X(156,163),
+  X(158,165), X(160,167), X(162,169), X(164,171), X(166,173), X(168,175),
+  X(170,177), X(172,179), X(174,181), X(176,183), X(178,185), X(180,187),
+  X(182,189), X(184,191), X(186,193), X(188,195), X(190,197), X(192,199),
+  X(194,201), X(196,203), X(198,205), X(200,207), X(202,209), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(130,133), X(132,135), X(134,137),
+  X(136,139), X(138,141), X(140,143), X(142,145), X(144,147), X(146,149),
+  X(148,151), X(150,153), X(152,155), X(154,157), X(156,159), X(158,161),
+  X(160,163), X(162,165), X(164,167), X(166,169), X(168,171), X(170,173),
+  X(172,175), X(174,177), X(176,179), X(178,181), X(180,183), X(182,185),
+  X(184,187), X(186,189), X(188,191), X(190,193), X(192,195), X(194,197),
+  X(196,199), X(198,201), X(200,203), X(202,205), X(204,207), X(206,209), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209)
+};
+S(212) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124),
+  X(61,125), X(62,126), X(63,127), X(64,128), X(129,193), X(130,194), X(131,195),
+  X(132,196), X(133,197), X(134,198), X(135,199), X(136,200), X(137,201),
+  X(138,202), X(139,203), X(140,204), X(141,205), X(142,206), X(143,207),
+  X(144,208), X(145,209), X(146,210), X(147,211), X(148,212), X(65,129),
+  X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136),
+  X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143),
+  X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150),
+  X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157),
+  X(94,158), X(95,159), X(96,160), X(97,161), X(98,162), X(99,163), X(100,164),
+  X(101,165), X(102,166), X(103,167), X(104,168), X(105,169), X(106,170),
+  X(107,171), X(108,172), X(109,173), X(110,174), X(111,175), X(112,176),
+  X(113,177), X(114,178), X(115,179), X(116,180), X(117,181), X(118,182),
+  X(119,183), X(120,184), X(121,185), X(122,186), X(123,187), X(124,188),
+  X(125,189), X(126,190), X(127,191), X(128,192), X(1,33), X(2,34), X(3,35),
+  X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43),
+  X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51),
+  X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59),
+  X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(135,167), X(136,168), X(137,169), X(138,170), X(139,171),
+  X(140,172), X(141,173), X(142,174), X(143,175), X(144,176), X(145,177),
+  X(146,178), X(147,179), X(148,180), X(149,181), X(150,182), X(151,183),
+  X(152,184), X(153,185), X(154,186), X(155,187), X(156,188), X(157,189),
+  X(158,190), X(159,191), X(160,192), X(33,129), X(34,130), X(35,131), X(36,132),
+  X(37,133), X(38,134), X(39,135), X(40,136), X(41,137), X(42,138), X(43,139),
+  X(44,140), X(45,141), X(46,142), X(47,143), X(48,144), X(49,145), X(50,146),
+  X(51,147), X(52,148), X(53,149), X(54,150), X(55,151), X(56,152), X(57,153),
+  X(58,154), X(59,155), X(60,156), X(61,157), X(62,158), X(63,159), X(64,160),
+  X(97,193), X(98,194), X(99,195), X(100,196), X(101,197), X(102,198),
+  X(103,199), X(104,200), X(105,201), X(106,202), X(107,203), X(108,204),
+  X(109,205), X(110,206), X(111,207), X(112,208), X(113,209), X(114,210),
+  X(115,211), X(116,212), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69),
+  X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77),
+  X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85),
+  X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93),
+  X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131), X(100,132),
+  X(101,133), X(102,134), X(103,135), X(104,136), X(105,137), X(106,138),
+  X(107,139), X(108,140), X(109,141), X(110,142), X(111,143), X(112,144),
+  X(113,145), X(114,146), X(115,147), X(116,148), X(117,149), X(118,150),
+  X(119,151), X(120,152), X(121,153), X(122,154), X(123,155), X(124,156),
+  X(125,157), X(126,158), X(127,159), X(128,160), X(161,193), X(162,194),
+  X(163,195), X(164,196), X(165,197), X(166,198), X(167,199), X(168,200),
+  X(169,201), X(170,202), X(171,203), X(172,204), X(173,205), X(174,206),
+  X(175,207), X(176,208), X(177,209), X(178,210), X(179,211), X(180,212),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88),
+  X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96),
+  X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(129,145), X(130,146),
+  X(131,147), X(132,148), X(133,149), X(134,150), X(135,151), X(136,152),
+  X(137,153), X(138,154), X(139,155), X(140,156), X(141,157), X(142,158),
+  X(143,159), X(144,160), X(161,177), X(162,178), X(163,179), X(164,180),
+  X(165,181), X(166,182), X(167,183), X(168,184), X(169,185), X(170,186),
+  X(171,187), X(172,188), X(173,189), X(174,190), X(175,191), X(176,192),
+  X(193,209), X(194,210), X(195,211), X(196,212), X(17,129), X(18,130),
+  X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136), X(25,137),
+  X(26,138), X(27,139), X(28,140), X(29,141), X(30,142), X(31,143), X(32,144),
+  X(49,161), X(50,162), X(51,163), X(52,164), X(53,165), X(54,166), X(55,167),
+  X(56,168), X(57,169), X(58,170), X(59,171), X(60,172), X(61,173), X(62,174),
+  X(63,175), X(64,176), X(81,193), X(82,194), X(83,195), X(84,196), X(85,197),
+  X(86,198), X(87,199), X(88,200), X(89,201), X(90,202), X(91,203), X(92,204),
+  X(93,205), X(94,206), X(95,207), X(96,208), X(17,65), X(18,66), X(19,67),
+  X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75),
+  X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(119,167), X(120,168), X(121,169), X(122,170), X(123,171),
+  X(124,172), X(125,173), X(126,174), X(127,175), X(128,176), X(145,193),
+  X(146,194), X(147,195), X(148,196), X(149,197), X(150,198), X(151,199),
+  X(152,200), X(153,201), X(154,202), X(155,203), X(156,204), X(157,205),
+  X(158,206), X(159,207), X(160,208), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68),
+  X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76),
+  X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129),
+  X(114,130), X(115,131), X(116,132), X(117,133), X(118,134), X(119,135),
+  X(120,136), X(121,137), X(122,138), X(123,139), X(124,140), X(125,141),
+  X(126,142), X(127,143), X(128,144), X(145,161), X(146,162), X(147,163),
+  X(148,164), X(149,165), X(150,166), X(151,167), X(152,168), X(153,169),
+  X(154,170), X(155,171), X(156,172), X(157,173), X(158,174), X(159,175),
+  X(160,176), X(177,193), X(178,194), X(179,195), X(180,196), X(181,197),
+  X(182,198), X(183,199), X(184,200), X(185,201), X(186,202), X(187,203),
+  X(188,204), X(189,205), X(190,206), X(191,207), X(192,208), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(117,125),
+  X(118,126), X(119,127), X(120,128), X(129,137), X(130,138), X(131,139),
+  X(132,140), X(133,141), X(134,142), X(135,143), X(136,144), X(145,153),
+  X(146,154), X(147,155), X(148,156), X(149,157), X(150,158), X(151,159),
+  X(152,160), X(161,169), X(162,170), X(163,171), X(164,172), X(165,173),
+  X(166,174), X(167,175), X(168,176), X(177,185), X(178,186), X(179,187),
+  X(180,188), X(181,189), X(182,190), X(183,191), X(184,192), X(193,201),
+  X(194,202), X(195,203), X(196,204), X(197,205), X(198,206), X(199,207),
+  X(200,208), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134),
+  X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149),
+  X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164),
+  X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178), X(59,179),
+  X(60,180), X(61,181), X(62,182), X(63,183), X(64,184), X(73,193), X(74,194),
+  X(75,195), X(76,196), X(77,197), X(78,198), X(79,199), X(80,200), X(89,209),
+  X(90,210), X(91,211), X(92,212), X(9,65), X(10,66), X(11,67), X(12,68),
+  X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84),
+  X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99),
+  X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114),
+  X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129),
+  X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136),
+  X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151),
+  X(96,152), X(105,161), X(106,162), X(107,163), X(108,164), X(109,165),
+  X(110,166), X(111,167), X(112,168), X(121,177), X(122,178), X(123,179),
+  X(124,180), X(125,181), X(126,182), X(127,183), X(128,184), X(137,193),
+  X(138,194), X(139,195), X(140,196), X(141,197), X(142,198), X(143,199),
+  X(144,200), X(153,209), X(154,210), X(155,211), X(156,212), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(105,129), X(106,130), X(107,131), X(108,132), X(109,133), X(110,134),
+  X(111,135), X(112,136), X(121,145), X(122,146), X(123,147), X(124,148),
+  X(125,149), X(126,150), X(127,151), X(128,152), X(137,161), X(138,162),
+  X(139,163), X(140,164), X(141,165), X(142,166), X(143,167), X(144,168),
+  X(153,177), X(154,178), X(155,179), X(156,180), X(157,181), X(158,182),
+  X(159,183), X(160,184), X(169,193), X(170,194), X(171,195), X(172,196),
+  X(173,197), X(174,198), X(175,199), X(176,200), X(185,209), X(186,210),
+  X(187,211), X(188,212), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21),
+  X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37),
+  X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53),
+  X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69),
+  X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85),
+  X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100),
+  X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(139,147), X(140,148), X(141,149),
+  X(142,150), X(143,151), X(144,152), X(153,161), X(154,162), X(155,163),
+  X(156,164), X(157,165), X(158,166), X(159,167), X(160,168), X(169,177),
+  X(170,178), X(171,179), X(172,180), X(173,181), X(174,182), X(175,183),
+  X(176,184), X(185,193), X(186,194), X(187,195), X(188,196), X(189,197),
+  X(190,198), X(191,199), X(192,200), X(201,209), X(202,210), X(203,211),
+  X(204,212), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(185,189), X(186,190), X(187,191), X(188,192),
+  X(193,197), X(194,198), X(195,199), X(196,200), X(201,205), X(202,206),
+  X(203,207), X(204,208), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137),
+  X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148),
+  X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163),
+  X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(53,177), X(54,178),
+  X(55,179), X(56,180), X(61,185), X(62,186), X(63,187), X(64,188), X(69,193),
+  X(70,194), X(71,195), X(72,196), X(77,201), X(78,202), X(79,203), X(80,204),
+  X(85,209), X(86,210), X(87,211), X(88,212), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84),
+  X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99),
+  X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114),
+  X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129),
+  X(70,130), X(71,131), X(72,132), X(77,137), X(78,138), X(79,139), X(80,140),
+  X(85,145), X(86,146), X(87,147), X(88,148), X(93,153), X(94,154), X(95,155),
+  X(96,156), X(101,161), X(102,162), X(103,163), X(104,164), X(109,169),
+  X(110,170), X(111,171), X(112,172), X(117,177), X(118,178), X(119,179),
+  X(120,180), X(125,185), X(126,186), X(127,187), X(128,188), X(133,193),
+  X(134,194), X(135,195), X(136,196), X(141,201), X(142,202), X(143,203),
+  X(144,204), X(149,209), X(150,210), X(151,211), X(152,212), X(5,33), X(6,34),
+  X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50),
+  X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66),
+  X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82),
+  X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98),
+  X(71,99), X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113),
+  X(86,114), X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124),
+  X(101,129), X(102,130), X(103,131), X(104,132), X(109,137), X(110,138),
+  X(111,139), X(112,140), X(117,145), X(118,146), X(119,147), X(120,148),
+  X(125,153), X(126,154), X(127,155), X(128,156), X(133,161), X(134,162),
+  X(135,163), X(136,164), X(141,169), X(142,170), X(143,171), X(144,172),
+  X(149,177), X(150,178), X(151,179), X(152,180), X(157,185), X(158,186),
+  X(159,187), X(160,188), X(165,193), X(166,194), X(167,195), X(168,196),
+  X(173,201), X(174,202), X(175,203), X(176,204), X(181,209), X(182,210),
+  X(183,211), X(184,212), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105),
+  X(94,106), X(95,107), X(96,108), X(101,113), X(102,114), X(103,115),
+  X(104,116), X(109,121), X(110,122), X(111,123), X(112,124), X(117,129),
+  X(118,130), X(119,131), X(120,132), X(125,137), X(126,138), X(127,139),
+  X(128,140), X(133,145), X(134,146), X(135,147), X(136,148), X(141,153),
+  X(142,154), X(143,155), X(144,156), X(149,161), X(150,162), X(151,163),
+  X(152,164), X(157,169), X(158,170), X(159,171), X(160,172), X(165,177),
+  X(166,178), X(167,179), X(168,180), X(173,185), X(174,186), X(175,187),
+  X(176,188), X(181,193), X(182,194), X(183,195), X(184,196), X(189,201),
+  X(190,202), X(191,203), X(192,204), X(197,209), X(198,210), X(199,211),
+  X(200,212), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19),
+  X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35),
+  X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51),
+  X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67),
+  X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83),
+  X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99),
+  X(96,100), X(101,105), X(102,106), X(103,107), X(104,108), X(109,113),
+  X(110,114), X(111,115), X(112,116), X(117,121), X(118,122), X(119,123),
+  X(120,124), X(125,129), X(126,130), X(127,131), X(128,132), X(133,137),
+  X(134,138), X(135,139), X(136,140), X(141,145), X(142,146), X(143,147),
+  X(144,148), X(149,153), X(150,154), X(151,155), X(152,156), X(157,161),
+  X(158,162), X(159,163), X(160,164), X(165,169), X(166,170), X(167,171),
+  X(168,172), X(173,177), X(174,178), X(175,179), X(176,180), X(181,185),
+  X(182,186), X(183,187), X(184,188), X(189,193), X(190,194), X(191,195),
+  X(192,196), X(197,201), X(198,202), X(199,203), X(200,204), X(205,209),
+  X(206,210), X(207,211), X(208,212), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11),
+  X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27),
+  X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43),
+  X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59),
+  X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75),
+  X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91),
+  X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104),
+  X(105,107), X(106,108), X(109,111), X(110,112), X(113,115), X(114,116),
+  X(117,119), X(118,120), X(121,123), X(122,124), X(125,127), X(126,128),
+  X(129,131), X(130,132), X(133,135), X(134,136), X(137,139), X(138,140),
+  X(141,143), X(142,144), X(145,147), X(146,148), X(149,151), X(150,152),
+  X(153,155), X(154,156), X(157,159), X(158,160), X(161,163), X(162,164),
+  X(165,167), X(166,168), X(169,171), X(170,172), X(173,175), X(174,176),
+  X(177,179), X(178,180), X(181,183), X(182,184), X(185,187), X(186,188),
+  X(189,191), X(190,192), X(193,195), X(194,196), X(197,199), X(198,200),
+  X(201,203), X(202,204), X(205,207), X(206,208), X(209,211), X(210,212),
+  X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138), X(15,141),
+  X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153), X(28,154),
+  X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166), X(43,169),
+  X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181), X(56,182),
+  X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194), X(71,197),
+  X(72,198), X(75,201), X(76,202), X(79,205), X(80,206), X(83,209), X(84,210),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94),
+  X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109),
+  X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122),
+  X(63,125), X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137),
+  X(76,138), X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150),
+  X(91,153), X(92,154), X(95,157), X(96,158), X(99,161), X(100,162), X(103,165),
+  X(104,166), X(107,169), X(108,170), X(111,173), X(112,174), X(115,177),
+  X(116,178), X(119,181), X(120,182), X(123,185), X(124,186), X(127,189),
+  X(128,190), X(131,193), X(132,194), X(135,197), X(136,198), X(139,201),
+  X(140,202), X(143,205), X(144,206), X(147,209), X(148,210), X(3,33), X(4,34),
+  X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50),
+  X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66),
+  X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82),
+  X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(127,157), X(128,158), X(131,161), X(132,162),
+  X(135,165), X(136,166), X(139,169), X(140,170), X(143,173), X(144,174),
+  X(147,177), X(148,178), X(151,181), X(152,182), X(155,185), X(156,186),
+  X(159,189), X(160,190), X(163,193), X(164,194), X(167,197), X(168,198),
+  X(171,201), X(172,202), X(175,205), X(176,206), X(179,209), X(180,210),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(107,121),
+  X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(119,133),
+  X(120,134), X(123,137), X(124,138), X(127,141), X(128,142), X(131,145),
+  X(132,146), X(135,149), X(136,150), X(139,153), X(140,154), X(143,157),
+  X(144,158), X(147,161), X(148,162), X(151,165), X(152,166), X(155,169),
+  X(156,170), X(159,173), X(160,174), X(163,177), X(164,178), X(167,181),
+  X(168,182), X(171,185), X(172,186), X(175,189), X(176,190), X(179,193),
+  X(180,194), X(183,197), X(184,198), X(187,201), X(188,202), X(191,205),
+  X(192,206), X(195,209), X(196,210), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(175,181),
+  X(176,182), X(179,185), X(180,186), X(183,189), X(184,190), X(187,193),
+  X(188,194), X(191,197), X(192,198), X(195,201), X(196,202), X(199,205),
+  X(200,206), X(203,209), X(204,210), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13),
+  X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29),
+  X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45),
+  X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61),
+  X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77),
+  X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93),
+  X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106),
+  X(107,109), X(108,110), X(111,113), X(112,114), X(115,117), X(116,118),
+  X(119,121), X(120,122), X(123,125), X(124,126), X(127,129), X(128,130),
+  X(131,133), X(132,134), X(135,137), X(136,138), X(139,141), X(140,142),
+  X(143,145), X(144,146), X(147,149), X(148,150), X(151,153), X(152,154),
+  X(155,157), X(156,158), X(159,161), X(160,162), X(163,165), X(164,166),
+  X(167,169), X(168,170), X(171,173), X(172,174), X(175,177), X(176,178),
+  X(179,181), X(180,182), X(183,185), X(184,186), X(187,189), X(188,190),
+  X(191,193), X(192,194), X(195,197), X(196,198), X(199,201), X(200,202),
+  X(203,205), X(204,206), X(207,209), X(208,210), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202), X(203,204), X(205,206), X(207,208), X(209,210),
+  X(211,212), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181),
+  X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195),
+  X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(82,209),
+  X(84,211), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107),
+  X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121),
+  X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135),
+  X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149),
+  X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161), X(100,163),
+  X(102,165), X(104,167), X(106,169), X(108,171), X(110,173), X(112,175),
+  X(114,177), X(116,179), X(118,181), X(120,183), X(122,185), X(124,187),
+  X(126,189), X(128,191), X(130,193), X(132,195), X(134,197), X(136,199),
+  X(138,201), X(140,203), X(142,205), X(144,207), X(146,209), X(148,211),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95),
+  X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109),
+  X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(92,123),
+  X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(146,177), X(148,179), X(150,181), X(152,183),
+  X(154,185), X(156,187), X(158,189), X(160,191), X(162,193), X(164,195),
+  X(166,197), X(168,199), X(170,201), X(172,203), X(174,205), X(176,207),
+  X(178,209), X(180,211), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27),
+  X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43),
+  X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59),
+  X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75),
+  X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91),
+  X(78,93), X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105),
+  X(92,107), X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(160,175), X(162,177), X(164,179),
+  X(166,181), X(168,183), X(170,185), X(172,187), X(174,189), X(176,191),
+  X(178,193), X(180,195), X(182,197), X(184,199), X(186,201), X(188,203),
+  X(190,205), X(192,207), X(194,209), X(196,211), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45),
+  X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61),
+  X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77),
+  X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93),
+  X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107),
+  X(102,109), X(104,111), X(106,113), X(108,115), X(110,117), X(112,119),
+  X(114,121), X(116,123), X(118,125), X(120,127), X(122,129), X(124,131),
+  X(126,133), X(128,135), X(130,137), X(132,139), X(134,141), X(136,143),
+  X(138,145), X(140,147), X(142,149), X(144,151), X(146,153), X(148,155),
+  X(150,157), X(152,159), X(154,161), X(156,163), X(158,165), X(160,167),
+  X(162,169), X(164,171), X(166,173), X(168,175), X(170,177), X(172,179),
+  X(174,181), X(176,183), X(178,185), X(180,187), X(182,189), X(184,191),
+  X(186,193), X(188,195), X(190,197), X(192,199), X(194,201), X(196,203),
+  X(198,205), X(200,207), X(202,209), X(204,211), X(2,5), X(4,7), X(6,9),
+  X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25),
+  X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41),
+  X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57),
+  X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73),
+  X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89),
+  X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101), X(100,103),
+  X(102,105), X(104,107), X(106,109), X(108,111), X(110,113), X(112,115),
+  X(114,117), X(116,119), X(118,121), X(120,123), X(122,125), X(124,127),
+  X(126,129), X(128,131), X(130,133), X(132,135), X(134,137), X(136,139),
+  X(138,141), X(140,143), X(142,145), X(144,147), X(146,149), X(148,151),
+  X(150,153), X(152,155), X(154,157), X(156,159), X(158,161), X(160,163),
+  X(162,165), X(164,167), X(166,169), X(168,171), X(170,173), X(172,175),
+  X(174,177), X(176,179), X(178,181), X(180,183), X(182,185), X(184,187),
+  X(186,189), X(188,191), X(190,193), X(192,195), X(194,197), X(196,199),
+  X(198,201), X(200,203), X(202,205), X(204,207), X(206,209), X(208,211), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211)
+};
+S(214) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70),
+  X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78),
+  X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86),
+  X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94),
+  X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101),
+  X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108),
+  X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115),
+  X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122),
+  X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(129,193),
+  X(130,194), X(131,195), X(132,196), X(133,197), X(134,198), X(135,199),
+  X(136,200), X(137,201), X(138,202), X(139,203), X(140,204), X(141,205),
+  X(142,206), X(143,207), X(144,208), X(145,209), X(146,210), X(147,211),
+  X(148,212), X(149,213), X(150,214), X(65,129), X(66,130), X(67,131), X(68,132),
+  X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139),
+  X(76,140), X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146),
+  X(83,147), X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153),
+  X(90,154), X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160),
+  X(97,161), X(98,162), X(99,163), X(100,164), X(101,165), X(102,166),
+  X(103,167), X(104,168), X(105,169), X(106,170), X(107,171), X(108,172),
+  X(109,173), X(110,174), X(111,175), X(112,176), X(113,177), X(114,178),
+  X(115,179), X(116,180), X(117,181), X(118,182), X(119,183), X(120,184),
+  X(121,185), X(122,186), X(123,187), X(124,188), X(125,189), X(126,190),
+  X(127,191), X(128,192), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101),
+  X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108),
+  X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115),
+  X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122),
+  X(91,123), X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161),
+  X(130,162), X(131,163), X(132,164), X(133,165), X(134,166), X(135,167),
+  X(136,168), X(137,169), X(138,170), X(139,171), X(140,172), X(141,173),
+  X(142,174), X(143,175), X(144,176), X(145,177), X(146,178), X(147,179),
+  X(148,180), X(149,181), X(150,182), X(151,183), X(152,184), X(153,185),
+  X(154,186), X(155,187), X(156,188), X(157,189), X(158,190), X(159,191),
+  X(160,192), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69),
+  X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77),
+  X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85),
+  X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93),
+  X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131), X(100,132),
+  X(101,133), X(102,134), X(103,135), X(104,136), X(105,137), X(106,138),
+  X(107,139), X(108,140), X(109,141), X(110,142), X(111,143), X(112,144),
+  X(113,145), X(114,146), X(115,147), X(116,148), X(117,149), X(118,150),
+  X(119,151), X(120,152), X(121,153), X(122,154), X(123,155), X(124,156),
+  X(125,157), X(126,158), X(127,159), X(128,160), X(161,193), X(162,194),
+  X(163,195), X(164,196), X(165,197), X(166,198), X(167,199), X(168,200),
+  X(169,201), X(170,202), X(171,203), X(172,204), X(173,205), X(174,206),
+  X(175,207), X(176,208), X(177,209), X(178,210), X(179,211), X(180,212),
+  X(181,213), X(182,214), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22),
+  X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30),
+  X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54),
+  X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62),
+  X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86),
+  X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94),
+  X(79,95), X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117),
+  X(102,118), X(103,119), X(104,120), X(105,121), X(106,122), X(107,123),
+  X(108,124), X(109,125), X(110,126), X(111,127), X(112,128), X(129,145),
+  X(130,146), X(131,147), X(132,148), X(133,149), X(134,150), X(135,151),
+  X(136,152), X(137,153), X(138,154), X(139,155), X(140,156), X(141,157),
+  X(142,158), X(143,159), X(144,160), X(161,177), X(162,178), X(163,179),
+  X(164,180), X(165,181), X(166,182), X(167,183), X(168,184), X(169,185),
+  X(170,186), X(171,187), X(172,188), X(173,189), X(174,190), X(175,191),
+  X(176,192), X(193,209), X(194,210), X(195,211), X(196,212), X(197,213),
+  X(198,214), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134),
+  X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141),
+  X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164),
+  X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171),
+  X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(81,193), X(82,194),
+  X(83,195), X(84,196), X(85,197), X(86,198), X(87,199), X(88,200), X(89,201),
+  X(90,202), X(91,203), X(92,204), X(93,205), X(94,206), X(95,207), X(96,208),
+  X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72),
+  X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80),
+  X(49,97), X(50,98), X(51,99), X(52,100), X(53,101), X(54,102), X(55,103),
+  X(56,104), X(57,105), X(58,106), X(59,107), X(60,108), X(61,109), X(62,110),
+  X(63,111), X(64,112), X(81,129), X(82,130), X(83,131), X(84,132), X(85,133),
+  X(86,134), X(87,135), X(88,136), X(89,137), X(90,138), X(91,139), X(92,140),
+  X(93,141), X(94,142), X(95,143), X(96,144), X(113,161), X(114,162), X(115,163),
+  X(116,164), X(117,165), X(118,166), X(119,167), X(120,168), X(121,169),
+  X(122,170), X(123,171), X(124,172), X(125,173), X(126,174), X(127,175),
+  X(128,176), X(145,193), X(146,194), X(147,195), X(148,196), X(149,197),
+  X(150,198), X(151,199), X(152,200), X(153,201), X(154,202), X(155,203),
+  X(156,204), X(157,205), X(158,206), X(159,207), X(160,208), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(117,133), X(118,134),
+  X(119,135), X(120,136), X(121,137), X(122,138), X(123,139), X(124,140),
+  X(125,141), X(126,142), X(127,143), X(128,144), X(145,161), X(146,162),
+  X(147,163), X(148,164), X(149,165), X(150,166), X(151,167), X(152,168),
+  X(153,169), X(154,170), X(155,171), X(156,172), X(157,173), X(158,174),
+  X(159,175), X(160,176), X(177,193), X(178,194), X(179,195), X(180,196),
+  X(181,197), X(182,198), X(183,199), X(184,200), X(185,201), X(186,202),
+  X(187,203), X(188,204), X(189,205), X(190,206), X(191,207), X(192,208), X(1,9),
+  X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25),
+  X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41),
+  X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57),
+  X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73),
+  X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89),
+  X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(145,153), X(146,154), X(147,155), X(148,156), X(149,157), X(150,158),
+  X(151,159), X(152,160), X(161,169), X(162,170), X(163,171), X(164,172),
+  X(165,173), X(166,174), X(167,175), X(168,176), X(177,185), X(178,186),
+  X(179,187), X(180,188), X(181,189), X(182,190), X(183,191), X(184,192),
+  X(193,201), X(194,202), X(195,203), X(196,204), X(197,205), X(198,206),
+  X(199,207), X(200,208), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133),
+  X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148),
+  X(29,149), X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163),
+  X(44,164), X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178),
+  X(59,179), X(60,180), X(61,181), X(62,182), X(63,183), X(64,184), X(73,193),
+  X(74,194), X(75,195), X(76,196), X(77,197), X(78,198), X(79,199), X(80,200),
+  X(89,209), X(90,210), X(91,211), X(92,212), X(93,213), X(94,214), X(9,65),
+  X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81),
+  X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97),
+  X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104),
+  X(57,113), X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119),
+  X(64,120), X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134),
+  X(79,135), X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149),
+  X(94,150), X(95,151), X(96,152), X(105,161), X(106,162), X(107,163),
+  X(108,164), X(109,165), X(110,166), X(111,167), X(112,168), X(121,177),
+  X(122,178), X(123,179), X(124,180), X(125,181), X(126,182), X(127,183),
+  X(128,184), X(137,193), X(138,194), X(139,195), X(140,196), X(141,197),
+  X(142,198), X(143,199), X(144,200), X(153,209), X(154,210), X(155,211),
+  X(156,212), X(157,213), X(158,214), X(9,33), X(10,34), X(11,35), X(12,36),
+  X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52),
+  X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68),
+  X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84),
+  X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(121,145), X(122,146), X(123,147), X(124,148), X(125,149),
+  X(126,150), X(127,151), X(128,152), X(137,161), X(138,162), X(139,163),
+  X(140,164), X(141,165), X(142,166), X(143,167), X(144,168), X(153,177),
+  X(154,178), X(155,179), X(156,180), X(157,181), X(158,182), X(159,183),
+  X(160,184), X(169,193), X(170,194), X(171,195), X(172,196), X(173,197),
+  X(174,198), X(175,199), X(176,200), X(185,209), X(186,210), X(187,211),
+  X(188,212), X(189,213), X(190,214), X(9,17), X(10,18), X(11,19), X(12,20),
+  X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36),
+  X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52),
+  X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68),
+  X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84),
+  X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(125,133), X(126,134),
+  X(127,135), X(128,136), X(137,145), X(138,146), X(139,147), X(140,148),
+  X(141,149), X(142,150), X(143,151), X(144,152), X(153,161), X(154,162),
+  X(155,163), X(156,164), X(157,165), X(158,166), X(159,167), X(160,168),
+  X(169,177), X(170,178), X(171,179), X(172,180), X(173,181), X(174,182),
+  X(175,183), X(176,184), X(185,193), X(186,194), X(187,195), X(188,196),
+  X(189,197), X(190,198), X(191,199), X(192,200), X(201,209), X(202,210),
+  X(203,211), X(204,212), X(205,213), X(206,214), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88),
+  X(89,93), X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103),
+  X(100,104), X(105,109), X(106,110), X(107,111), X(108,112), X(113,117),
+  X(114,118), X(115,119), X(116,120), X(121,125), X(122,126), X(123,127),
+  X(124,128), X(129,133), X(130,134), X(131,135), X(132,136), X(137,141),
+  X(138,142), X(139,143), X(140,144), X(145,149), X(146,150), X(147,151),
+  X(148,152), X(153,157), X(154,158), X(155,159), X(156,160), X(161,165),
+  X(162,166), X(163,167), X(164,168), X(169,173), X(170,174), X(171,175),
+  X(172,176), X(177,181), X(178,182), X(179,183), X(180,184), X(185,189),
+  X(186,190), X(187,191), X(188,192), X(193,197), X(194,198), X(195,199),
+  X(196,200), X(201,205), X(202,206), X(203,207), X(204,208), X(209,213),
+  X(210,214), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138),
+  X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153),
+  X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164),
+  X(45,169), X(46,170), X(47,171), X(48,172), X(53,177), X(54,178), X(55,179),
+  X(56,180), X(61,185), X(62,186), X(63,187), X(64,188), X(69,193), X(70,194),
+  X(71,195), X(72,196), X(77,201), X(78,202), X(79,203), X(80,204), X(85,209),
+  X(86,210), X(87,211), X(88,212), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73),
+  X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89),
+  X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100),
+  X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115),
+  X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130),
+  X(71,131), X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145),
+  X(86,146), X(87,147), X(88,148), X(93,153), X(94,154), X(95,155), X(96,156),
+  X(101,161), X(102,162), X(103,163), X(104,164), X(109,169), X(110,170),
+  X(111,171), X(112,172), X(117,177), X(118,178), X(119,179), X(120,180),
+  X(125,185), X(126,186), X(127,187), X(128,188), X(133,193), X(134,194),
+  X(135,195), X(136,196), X(141,201), X(142,202), X(143,203), X(144,204),
+  X(149,209), X(150,210), X(151,211), X(152,212), X(5,33), X(6,34), X(7,35),
+  X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51),
+  X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67),
+  X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83),
+  X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(103,131), X(104,132), X(109,137), X(110,138), X(111,139),
+  X(112,140), X(117,145), X(118,146), X(119,147), X(120,148), X(125,153),
+  X(126,154), X(127,155), X(128,156), X(133,161), X(134,162), X(135,163),
+  X(136,164), X(141,169), X(142,170), X(143,171), X(144,172), X(149,177),
+  X(150,178), X(151,179), X(152,180), X(157,185), X(158,186), X(159,187),
+  X(160,188), X(165,193), X(166,194), X(167,195), X(168,196), X(173,201),
+  X(174,202), X(175,203), X(176,204), X(181,209), X(182,210), X(183,211),
+  X(184,212), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27),
+  X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43),
+  X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59),
+  X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75),
+  X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91),
+  X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106),
+  X(95,107), X(96,108), X(101,113), X(102,114), X(103,115), X(104,116),
+  X(109,121), X(110,122), X(111,123), X(112,124), X(117,129), X(118,130),
+  X(119,131), X(120,132), X(125,137), X(126,138), X(127,139), X(128,140),
+  X(133,145), X(134,146), X(135,147), X(136,148), X(141,153), X(142,154),
+  X(143,155), X(144,156), X(149,161), X(150,162), X(151,163), X(152,164),
+  X(157,169), X(158,170), X(159,171), X(160,172), X(165,177), X(166,178),
+  X(167,179), X(168,180), X(173,185), X(174,186), X(175,187), X(176,188),
+  X(181,193), X(182,194), X(183,195), X(184,196), X(189,201), X(190,202),
+  X(191,203), X(192,204), X(197,209), X(198,210), X(199,211), X(200,212), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25),
+  X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41),
+  X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57),
+  X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73),
+  X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89),
+  X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100),
+  X(101,105), X(102,106), X(103,107), X(104,108), X(109,113), X(110,114),
+  X(111,115), X(112,116), X(117,121), X(118,122), X(119,123), X(120,124),
+  X(125,129), X(126,130), X(127,131), X(128,132), X(133,137), X(134,138),
+  X(135,139), X(136,140), X(141,145), X(142,146), X(143,147), X(144,148),
+  X(149,153), X(150,154), X(151,155), X(152,156), X(157,161), X(158,162),
+  X(159,163), X(160,164), X(165,169), X(166,170), X(167,171), X(168,172),
+  X(173,177), X(174,178), X(175,179), X(176,180), X(181,185), X(182,186),
+  X(183,187), X(184,188), X(189,193), X(190,194), X(191,195), X(192,196),
+  X(197,201), X(198,202), X(199,203), X(200,204), X(205,209), X(206,210),
+  X(207,211), X(208,212), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(129,131),
+  X(130,132), X(133,135), X(134,136), X(137,139), X(138,140), X(141,143),
+  X(142,144), X(145,147), X(146,148), X(149,151), X(150,152), X(153,155),
+  X(154,156), X(157,159), X(158,160), X(161,163), X(162,164), X(165,167),
+  X(166,168), X(169,171), X(170,172), X(173,175), X(174,176), X(177,179),
+  X(178,180), X(181,183), X(182,184), X(185,187), X(186,188), X(189,191),
+  X(190,192), X(193,195), X(194,196), X(197,199), X(198,200), X(201,203),
+  X(202,204), X(205,207), X(206,208), X(209,211), X(210,212), X(3,129), X(4,130),
+  X(7,133), X(8,134), X(11,137), X(12,138), X(15,141), X(16,142), X(19,145),
+  X(20,146), X(23,149), X(24,150), X(27,153), X(28,154), X(31,157), X(32,158),
+  X(35,161), X(36,162), X(39,165), X(40,166), X(43,169), X(44,170), X(47,173),
+  X(48,174), X(51,177), X(52,178), X(55,181), X(56,182), X(59,185), X(60,186),
+  X(63,189), X(64,190), X(67,193), X(68,194), X(71,197), X(72,198), X(75,201),
+  X(76,202), X(79,205), X(80,206), X(83,209), X(84,210), X(87,213), X(88,214),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94),
+  X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109),
+  X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122),
+  X(63,125), X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137),
+  X(76,138), X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150),
+  X(91,153), X(92,154), X(95,157), X(96,158), X(99,161), X(100,162), X(103,165),
+  X(104,166), X(107,169), X(108,170), X(111,173), X(112,174), X(115,177),
+  X(116,178), X(119,181), X(120,182), X(123,185), X(124,186), X(127,189),
+  X(128,190), X(131,193), X(132,194), X(135,197), X(136,198), X(139,201),
+  X(140,202), X(143,205), X(144,206), X(147,209), X(148,210), X(151,213),
+  X(152,214), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121),
+  X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(127,157), X(128,158),
+  X(131,161), X(132,162), X(135,165), X(136,166), X(139,169), X(140,170),
+  X(143,173), X(144,174), X(147,177), X(148,178), X(151,181), X(152,182),
+  X(155,185), X(156,186), X(159,189), X(160,190), X(163,193), X(164,194),
+  X(167,197), X(168,198), X(171,201), X(172,202), X(175,205), X(176,206),
+  X(179,209), X(180,210), X(183,213), X(184,214), X(3,17), X(4,18), X(7,21),
+  X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37),
+  X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53),
+  X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69),
+  X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85),
+  X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(143,157), X(144,158), X(147,161),
+  X(148,162), X(151,165), X(152,166), X(155,169), X(156,170), X(159,173),
+  X(160,174), X(163,177), X(164,178), X(167,181), X(168,182), X(171,185),
+  X(172,186), X(175,189), X(176,190), X(179,193), X(180,194), X(183,197),
+  X(184,198), X(187,201), X(188,202), X(191,205), X(192,206), X(195,209),
+  X(196,210), X(199,213), X(200,214), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(175,181),
+  X(176,182), X(179,185), X(180,186), X(183,189), X(184,190), X(187,193),
+  X(188,194), X(191,197), X(192,198), X(195,201), X(196,202), X(199,205),
+  X(200,206), X(203,209), X(204,210), X(207,213), X(208,214), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70),
+  X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86),
+  X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101),
+  X(100,102), X(103,105), X(104,106), X(107,109), X(108,110), X(111,113),
+  X(112,114), X(115,117), X(116,118), X(119,121), X(120,122), X(123,125),
+  X(124,126), X(127,129), X(128,130), X(131,133), X(132,134), X(135,137),
+  X(136,138), X(139,141), X(140,142), X(143,145), X(144,146), X(147,149),
+  X(148,150), X(151,153), X(152,154), X(155,157), X(156,158), X(159,161),
+  X(160,162), X(163,165), X(164,166), X(167,169), X(168,170), X(171,173),
+  X(172,174), X(175,177), X(176,178), X(179,181), X(180,182), X(183,185),
+  X(184,186), X(187,189), X(188,190), X(191,193), X(192,194), X(195,197),
+  X(196,198), X(199,201), X(200,202), X(203,205), X(204,206), X(207,209),
+  X(208,210), X(211,213), X(212,214), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202), X(203,204), X(205,206), X(207,208), X(209,210), X(211,212),
+  X(213,214), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181),
+  X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195),
+  X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(82,209),
+  X(84,211), X(86,213), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75),
+  X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91),
+  X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105),
+  X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119),
+  X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133),
+  X(72,135), X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147),
+  X(86,149), X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161),
+  X(100,163), X(102,165), X(104,167), X(106,169), X(108,171), X(110,173),
+  X(112,175), X(114,177), X(116,179), X(118,181), X(120,183), X(122,185),
+  X(124,187), X(126,189), X(128,191), X(130,193), X(132,195), X(134,197),
+  X(136,199), X(138,201), X(140,203), X(142,205), X(144,207), X(146,209),
+  X(148,211), X(150,213), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75),
+  X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91),
+  X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105),
+  X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119),
+  X(90,121), X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133),
+  X(104,135), X(106,137), X(108,139), X(110,141), X(112,143), X(114,145),
+  X(116,147), X(118,149), X(120,151), X(122,153), X(124,155), X(126,157),
+  X(128,159), X(130,161), X(132,163), X(134,165), X(136,167), X(138,169),
+  X(140,171), X(142,173), X(144,175), X(146,177), X(148,179), X(150,181),
+  X(152,183), X(154,185), X(156,187), X(158,189), X(160,191), X(162,193),
+  X(164,195), X(166,197), X(168,199), X(170,201), X(172,203), X(174,205),
+  X(176,207), X(178,209), X(180,211), X(182,213), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(170,185),
+  X(172,187), X(174,189), X(176,191), X(178,193), X(180,195), X(182,197),
+  X(184,199), X(186,201), X(188,203), X(190,205), X(192,207), X(194,209),
+  X(196,211), X(198,213), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83),
+  X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(134,141), X(136,143), X(138,145), X(140,147),
+  X(142,149), X(144,151), X(146,153), X(148,155), X(150,157), X(152,159),
+  X(154,161), X(156,163), X(158,165), X(160,167), X(162,169), X(164,171),
+  X(166,173), X(168,175), X(170,177), X(172,179), X(174,181), X(176,183),
+  X(178,185), X(180,187), X(182,189), X(184,191), X(186,193), X(188,195),
+  X(190,197), X(192,199), X(194,201), X(196,203), X(198,205), X(200,207),
+  X(202,209), X(204,211), X(206,213), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29),
+  X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45),
+  X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61),
+  X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77),
+  X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93),
+  X(92,95), X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107),
+  X(106,109), X(108,111), X(110,113), X(112,115), X(114,117), X(116,119),
+  X(118,121), X(120,123), X(122,125), X(124,127), X(126,129), X(128,131),
+  X(130,133), X(132,135), X(134,137), X(136,139), X(138,141), X(140,143),
+  X(142,145), X(144,147), X(146,149), X(148,151), X(150,153), X(152,155),
+  X(154,157), X(156,159), X(158,161), X(160,163), X(162,165), X(164,167),
+  X(166,169), X(168,171), X(170,173), X(172,175), X(174,177), X(176,179),
+  X(178,181), X(180,183), X(182,185), X(184,187), X(186,189), X(188,191),
+  X(190,193), X(192,195), X(194,197), X(196,199), X(198,201), X(200,203),
+  X(202,205), X(204,207), X(206,209), X(208,211), X(210,213), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213)
+};
+S(216) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(1,65), X(2,66), X(3,67), X(4,68),
+  X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76),
+  X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84),
+  X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92),
+  X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99),
+  X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106),
+  X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113),
+  X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120),
+  X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127),
+  X(64,128), X(129,193), X(130,194), X(131,195), X(132,196), X(133,197),
+  X(134,198), X(135,199), X(136,200), X(137,201), X(138,202), X(139,203),
+  X(140,204), X(141,205), X(142,206), X(143,207), X(144,208), X(145,209),
+  X(146,210), X(147,211), X(148,212), X(149,213), X(150,214), X(151,215),
+  X(152,216), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134),
+  X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141),
+  X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148),
+  X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154), X(91,155),
+  X(92,156), X(93,157), X(94,158), X(95,159), X(96,160), X(97,161), X(98,162),
+  X(99,163), X(100,164), X(101,165), X(102,166), X(103,167), X(104,168),
+  X(105,169), X(106,170), X(107,171), X(108,172), X(109,173), X(110,174),
+  X(111,175), X(112,176), X(113,177), X(114,178), X(115,179), X(116,180),
+  X(117,181), X(118,182), X(119,183), X(120,184), X(121,185), X(122,186),
+  X(123,187), X(124,188), X(125,189), X(126,190), X(127,191), X(128,192),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103),
+  X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110),
+  X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117),
+  X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124),
+  X(93,125), X(94,126), X(95,127), X(96,128), X(129,161), X(130,162), X(131,163),
+  X(132,164), X(133,165), X(134,166), X(135,167), X(136,168), X(137,169),
+  X(138,170), X(139,171), X(140,172), X(141,173), X(142,174), X(143,175),
+  X(144,176), X(145,177), X(146,178), X(147,179), X(148,180), X(149,181),
+  X(150,182), X(151,183), X(152,184), X(153,185), X(154,186), X(155,187),
+  X(156,188), X(157,189), X(158,190), X(159,191), X(160,192), X(33,129),
+  X(34,130), X(35,131), X(36,132), X(37,133), X(38,134), X(39,135), X(40,136),
+  X(41,137), X(42,138), X(43,139), X(44,140), X(45,141), X(46,142), X(47,143),
+  X(48,144), X(49,145), X(50,146), X(51,147), X(52,148), X(53,149), X(54,150),
+  X(55,151), X(56,152), X(57,153), X(58,154), X(59,155), X(60,156), X(61,157),
+  X(62,158), X(63,159), X(64,160), X(97,193), X(98,194), X(99,195), X(100,196),
+  X(101,197), X(102,198), X(103,199), X(104,200), X(105,201), X(106,202),
+  X(107,203), X(108,204), X(109,205), X(110,206), X(111,207), X(112,208),
+  X(113,209), X(114,210), X(115,211), X(116,212), X(117,213), X(118,214),
+  X(119,215), X(120,216), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69),
+  X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77),
+  X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85),
+  X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93),
+  X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131), X(100,132),
+  X(101,133), X(102,134), X(103,135), X(104,136), X(105,137), X(106,138),
+  X(107,139), X(108,140), X(109,141), X(110,142), X(111,143), X(112,144),
+  X(113,145), X(114,146), X(115,147), X(116,148), X(117,149), X(118,150),
+  X(119,151), X(120,152), X(121,153), X(122,154), X(123,155), X(124,156),
+  X(125,157), X(126,158), X(127,159), X(128,160), X(161,193), X(162,194),
+  X(163,195), X(164,196), X(165,197), X(166,198), X(167,199), X(168,200),
+  X(169,201), X(170,202), X(171,203), X(172,204), X(173,205), X(174,206),
+  X(175,207), X(176,208), X(177,209), X(178,210), X(179,211), X(180,212),
+  X(181,213), X(182,214), X(183,215), X(184,216), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134), X(23,135),
+  X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141), X(30,142),
+  X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164), X(53,165),
+  X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171), X(60,172),
+  X(61,173), X(62,174), X(63,175), X(64,176), X(81,193), X(82,194), X(83,195),
+  X(84,196), X(85,197), X(86,198), X(87,199), X(88,200), X(89,201), X(90,202),
+  X(91,203), X(92,204), X(93,205), X(94,206), X(95,207), X(96,208), X(17,65),
+  X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73),
+  X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97),
+  X(50,98), X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104),
+  X(57,105), X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111),
+  X(64,112), X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134),
+  X(87,135), X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141),
+  X(94,142), X(95,143), X(96,144), X(113,161), X(114,162), X(115,163),
+  X(116,164), X(117,165), X(118,166), X(119,167), X(120,168), X(121,169),
+  X(122,170), X(123,171), X(124,172), X(125,173), X(126,174), X(127,175),
+  X(128,176), X(145,193), X(146,194), X(147,195), X(148,196), X(149,197),
+  X(150,198), X(151,199), X(152,200), X(153,201), X(154,202), X(155,203),
+  X(156,204), X(157,205), X(158,206), X(159,207), X(160,208), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(117,133), X(118,134),
+  X(119,135), X(120,136), X(121,137), X(122,138), X(123,139), X(124,140),
+  X(125,141), X(126,142), X(127,143), X(128,144), X(145,161), X(146,162),
+  X(147,163), X(148,164), X(149,165), X(150,166), X(151,167), X(152,168),
+  X(153,169), X(154,170), X(155,171), X(156,172), X(157,173), X(158,174),
+  X(159,175), X(160,176), X(177,193), X(178,194), X(179,195), X(180,196),
+  X(181,197), X(182,198), X(183,199), X(184,200), X(185,201), X(186,202),
+  X(187,203), X(188,204), X(189,205), X(190,206), X(191,207), X(192,208), X(1,9),
+  X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25),
+  X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41),
+  X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57),
+  X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73),
+  X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89),
+  X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(145,153), X(146,154), X(147,155), X(148,156), X(149,157), X(150,158),
+  X(151,159), X(152,160), X(161,169), X(162,170), X(163,171), X(164,172),
+  X(165,173), X(166,174), X(167,175), X(168,176), X(177,185), X(178,186),
+  X(179,187), X(180,188), X(181,189), X(182,190), X(183,191), X(184,192),
+  X(193,201), X(194,202), X(195,203), X(196,204), X(197,205), X(198,206),
+  X(199,207), X(200,208), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133),
+  X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148),
+  X(29,149), X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163),
+  X(44,164), X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178),
+  X(59,179), X(60,180), X(61,181), X(62,182), X(63,183), X(64,184), X(73,193),
+  X(74,194), X(75,195), X(76,196), X(77,197), X(78,198), X(79,199), X(80,200),
+  X(89,209), X(90,210), X(91,211), X(92,212), X(93,213), X(94,214), X(95,215),
+  X(96,216), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71),
+  X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87),
+  X(32,88), X(41,97), X(42,98), X(43,99), X(44,100), X(45,101), X(46,102),
+  X(47,103), X(48,104), X(57,113), X(58,114), X(59,115), X(60,116), X(61,117),
+  X(62,118), X(63,119), X(64,120), X(73,129), X(74,130), X(75,131), X(76,132),
+  X(77,133), X(78,134), X(79,135), X(80,136), X(89,145), X(90,146), X(91,147),
+  X(92,148), X(93,149), X(94,150), X(95,151), X(96,152), X(105,161), X(106,162),
+  X(107,163), X(108,164), X(109,165), X(110,166), X(111,167), X(112,168),
+  X(121,177), X(122,178), X(123,179), X(124,180), X(125,181), X(126,182),
+  X(127,183), X(128,184), X(137,193), X(138,194), X(139,195), X(140,196),
+  X(141,197), X(142,198), X(143,199), X(144,200), X(153,209), X(154,210),
+  X(155,211), X(156,212), X(157,213), X(158,214), X(159,215), X(160,216),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88),
+  X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103),
+  X(80,104), X(89,113), X(90,114), X(91,115), X(92,116), X(93,117), X(94,118),
+  X(95,119), X(96,120), X(105,129), X(106,130), X(107,131), X(108,132),
+  X(109,133), X(110,134), X(111,135), X(112,136), X(121,145), X(122,146),
+  X(123,147), X(124,148), X(125,149), X(126,150), X(127,151), X(128,152),
+  X(137,161), X(138,162), X(139,163), X(140,164), X(141,165), X(142,166),
+  X(143,167), X(144,168), X(153,177), X(154,178), X(155,179), X(156,180),
+  X(157,181), X(158,182), X(159,183), X(160,184), X(169,193), X(170,194),
+  X(171,195), X(172,196), X(173,197), X(174,198), X(175,199), X(176,200),
+  X(185,209), X(186,210), X(187,211), X(188,212), X(189,213), X(190,214),
+  X(191,215), X(192,216), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21),
+  X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37),
+  X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53),
+  X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69),
+  X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85),
+  X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100),
+  X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(139,147), X(140,148), X(141,149),
+  X(142,150), X(143,151), X(144,152), X(153,161), X(154,162), X(155,163),
+  X(156,164), X(157,165), X(158,166), X(159,167), X(160,168), X(169,177),
+  X(170,178), X(171,179), X(172,180), X(173,181), X(174,182), X(175,183),
+  X(176,184), X(185,193), X(186,194), X(187,195), X(188,196), X(189,197),
+  X(190,198), X(191,199), X(192,200), X(201,209), X(202,210), X(203,211),
+  X(204,212), X(205,213), X(206,214), X(207,215), X(208,216), X(1,5), X(2,6),
+  X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22),
+  X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38),
+  X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54),
+  X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70),
+  X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86),
+  X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96), X(97,101),
+  X(98,102), X(99,103), X(100,104), X(105,109), X(106,110), X(107,111),
+  X(108,112), X(113,117), X(114,118), X(115,119), X(116,120), X(121,125),
+  X(122,126), X(123,127), X(124,128), X(129,133), X(130,134), X(131,135),
+  X(132,136), X(137,141), X(138,142), X(139,143), X(140,144), X(145,149),
+  X(146,150), X(147,151), X(148,152), X(153,157), X(154,158), X(155,159),
+  X(156,160), X(161,165), X(162,166), X(163,167), X(164,168), X(169,173),
+  X(170,174), X(171,175), X(172,176), X(177,181), X(178,182), X(179,183),
+  X(180,184), X(185,189), X(186,190), X(187,191), X(188,192), X(193,197),
+  X(194,198), X(195,199), X(196,200), X(201,205), X(202,206), X(203,207),
+  X(204,208), X(209,213), X(210,214), X(211,215), X(212,216), X(5,129), X(6,130),
+  X(7,131), X(8,132), X(13,137), X(14,138), X(15,139), X(16,140), X(21,145),
+  X(22,146), X(23,147), X(24,148), X(29,153), X(30,154), X(31,155), X(32,156),
+  X(37,161), X(38,162), X(39,163), X(40,164), X(45,169), X(46,170), X(47,171),
+  X(48,172), X(53,177), X(54,178), X(55,179), X(56,180), X(61,185), X(62,186),
+  X(63,187), X(64,188), X(69,193), X(70,194), X(71,195), X(72,196), X(77,201),
+  X(78,202), X(79,203), X(80,204), X(85,209), X(86,210), X(87,211), X(88,212),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92),
+  X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107),
+  X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122),
+  X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132), X(77,137),
+  X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147), X(88,148),
+  X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162), X(103,163),
+  X(104,164), X(109,169), X(110,170), X(111,171), X(112,172), X(117,177),
+  X(118,178), X(119,179), X(120,180), X(125,185), X(126,186), X(127,187),
+  X(128,188), X(133,193), X(134,194), X(135,195), X(136,196), X(141,201),
+  X(142,202), X(143,203), X(144,204), X(149,209), X(150,210), X(151,211),
+  X(152,212), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43),
+  X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59),
+  X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75),
+  X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91),
+  X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106),
+  X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121),
+  X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(151,179),
+  X(152,180), X(157,185), X(158,186), X(159,187), X(160,188), X(165,193),
+  X(166,194), X(167,195), X(168,196), X(173,201), X(174,202), X(175,203),
+  X(176,204), X(181,209), X(182,210), X(183,211), X(184,212), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(143,155), X(144,156), X(149,161),
+  X(150,162), X(151,163), X(152,164), X(157,169), X(158,170), X(159,171),
+  X(160,172), X(165,177), X(166,178), X(167,179), X(168,180), X(173,185),
+  X(174,186), X(175,187), X(176,188), X(181,193), X(182,194), X(183,195),
+  X(184,196), X(189,201), X(190,202), X(191,203), X(192,204), X(197,209),
+  X(198,210), X(199,211), X(200,212), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(149,153), X(150,154), X(151,155),
+  X(152,156), X(157,161), X(158,162), X(159,163), X(160,164), X(165,169),
+  X(166,170), X(167,171), X(168,172), X(173,177), X(174,178), X(175,179),
+  X(176,180), X(181,185), X(182,186), X(183,187), X(184,188), X(189,193),
+  X(190,194), X(191,195), X(192,196), X(197,201), X(198,202), X(199,203),
+  X(200,204), X(205,209), X(206,210), X(207,211), X(208,212), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(197,199), X(198,200), X(201,203), X(202,204), X(205,207),
+  X(206,208), X(209,211), X(210,212), X(213,215), X(214,216), X(3,129), X(4,130),
+  X(7,133), X(8,134), X(11,137), X(12,138), X(15,141), X(16,142), X(19,145),
+  X(20,146), X(23,149), X(24,150), X(27,153), X(28,154), X(31,157), X(32,158),
+  X(35,161), X(36,162), X(39,165), X(40,166), X(43,169), X(44,170), X(47,173),
+  X(48,174), X(51,177), X(52,178), X(55,181), X(56,182), X(59,185), X(60,186),
+  X(63,189), X(64,190), X(67,193), X(68,194), X(71,197), X(72,198), X(75,201),
+  X(76,202), X(79,205), X(80,206), X(83,209), X(84,210), X(87,213), X(88,214),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94),
+  X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109),
+  X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122),
+  X(63,125), X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137),
+  X(76,138), X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150),
+  X(91,153), X(92,154), X(95,157), X(96,158), X(99,161), X(100,162), X(103,165),
+  X(104,166), X(107,169), X(108,170), X(111,173), X(112,174), X(115,177),
+  X(116,178), X(119,181), X(120,182), X(123,185), X(124,186), X(127,189),
+  X(128,190), X(131,193), X(132,194), X(135,197), X(136,198), X(139,201),
+  X(140,202), X(143,205), X(144,206), X(147,209), X(148,210), X(151,213),
+  X(152,214), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121),
+  X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(127,157), X(128,158),
+  X(131,161), X(132,162), X(135,165), X(136,166), X(139,169), X(140,170),
+  X(143,173), X(144,174), X(147,177), X(148,178), X(151,181), X(152,182),
+  X(155,185), X(156,186), X(159,189), X(160,190), X(163,193), X(164,194),
+  X(167,197), X(168,198), X(171,201), X(172,202), X(175,205), X(176,206),
+  X(179,209), X(180,210), X(183,213), X(184,214), X(3,17), X(4,18), X(7,21),
+  X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37),
+  X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53),
+  X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69),
+  X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85),
+  X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(143,157), X(144,158), X(147,161),
+  X(148,162), X(151,165), X(152,166), X(155,169), X(156,170), X(159,173),
+  X(160,174), X(163,177), X(164,178), X(167,181), X(168,182), X(171,185),
+  X(172,186), X(175,189), X(176,190), X(179,193), X(180,194), X(183,197),
+  X(184,198), X(187,201), X(188,202), X(191,205), X(192,206), X(195,209),
+  X(196,210), X(199,213), X(200,214), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(175,181),
+  X(176,182), X(179,185), X(180,186), X(183,189), X(184,190), X(187,193),
+  X(188,194), X(191,197), X(192,198), X(195,201), X(196,202), X(199,205),
+  X(200,206), X(203,209), X(204,210), X(207,213), X(208,214), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70),
+  X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86),
+  X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101),
+  X(100,102), X(103,105), X(104,106), X(107,109), X(108,110), X(111,113),
+  X(112,114), X(115,117), X(116,118), X(119,121), X(120,122), X(123,125),
+  X(124,126), X(127,129), X(128,130), X(131,133), X(132,134), X(135,137),
+  X(136,138), X(139,141), X(140,142), X(143,145), X(144,146), X(147,149),
+  X(148,150), X(151,153), X(152,154), X(155,157), X(156,158), X(159,161),
+  X(160,162), X(163,165), X(164,166), X(167,169), X(168,170), X(171,173),
+  X(172,174), X(175,177), X(176,178), X(179,181), X(180,182), X(183,185),
+  X(184,186), X(187,189), X(188,190), X(191,193), X(192,194), X(195,197),
+  X(196,198), X(199,201), X(200,202), X(203,205), X(204,206), X(207,209),
+  X(208,210), X(211,213), X(212,214), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202), X(203,204), X(205,206), X(207,208), X(209,210), X(211,212),
+  X(213,214), X(215,216), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137),
+  X(12,139), X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151),
+  X(26,153), X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165),
+  X(40,167), X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179),
+  X(54,181), X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193),
+  X(68,195), X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207),
+  X(82,209), X(84,211), X(86,213), X(88,215), X(2,65), X(4,67), X(6,69), X(8,71),
+  X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87),
+  X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99), X(38,101),
+  X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113), X(52,115),
+  X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127), X(66,129),
+  X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141), X(80,143),
+  X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155), X(94,157),
+  X(96,159), X(98,161), X(100,163), X(102,165), X(104,167), X(106,169),
+  X(108,171), X(110,173), X(112,175), X(114,177), X(116,179), X(118,181),
+  X(120,183), X(122,185), X(124,187), X(126,189), X(128,191), X(130,193),
+  X(132,195), X(134,197), X(136,199), X(138,201), X(140,203), X(142,205),
+  X(144,207), X(146,209), X(148,211), X(150,213), X(152,215), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83),
+  X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99),
+  X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113),
+  X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127),
+  X(98,129), X(100,131), X(102,133), X(104,135), X(106,137), X(108,139),
+  X(110,141), X(112,143), X(114,145), X(116,147), X(118,149), X(120,151),
+  X(122,153), X(124,155), X(126,157), X(128,159), X(130,161), X(132,163),
+  X(134,165), X(136,167), X(138,169), X(140,171), X(142,173), X(144,175),
+  X(146,177), X(148,179), X(150,181), X(152,183), X(154,185), X(156,187),
+  X(158,189), X(160,191), X(162,193), X(164,195), X(166,197), X(168,199),
+  X(170,201), X(172,203), X(174,205), X(176,207), X(178,209), X(180,211),
+  X(182,213), X(184,215), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27),
+  X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43),
+  X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59),
+  X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75),
+  X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91),
+  X(78,93), X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105),
+  X(92,107), X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(160,175), X(162,177), X(164,179),
+  X(166,181), X(168,183), X(170,185), X(172,187), X(174,189), X(176,191),
+  X(178,193), X(180,195), X(182,197), X(184,199), X(186,201), X(188,203),
+  X(190,205), X(192,207), X(194,209), X(196,211), X(198,213), X(200,215), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57),
+  X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73),
+  X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89),
+  X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103),
+  X(98,105), X(100,107), X(102,109), X(104,111), X(106,113), X(108,115),
+  X(110,117), X(112,119), X(114,121), X(116,123), X(118,125), X(120,127),
+  X(122,129), X(124,131), X(126,133), X(128,135), X(130,137), X(132,139),
+  X(134,141), X(136,143), X(138,145), X(140,147), X(142,149), X(144,151),
+  X(146,153), X(148,155), X(150,157), X(152,159), X(154,161), X(156,163),
+  X(158,165), X(160,167), X(162,169), X(164,171), X(166,173), X(168,175),
+  X(170,177), X(172,179), X(174,181), X(176,183), X(178,185), X(180,187),
+  X(182,189), X(184,191), X(186,193), X(188,195), X(190,197), X(192,199),
+  X(194,201), X(196,203), X(198,205), X(200,207), X(202,209), X(204,211),
+  X(206,213), X(208,215), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133),
+  X(132,135), X(134,137), X(136,139), X(138,141), X(140,143), X(142,145),
+  X(144,147), X(146,149), X(148,151), X(150,153), X(152,155), X(154,157),
+  X(156,159), X(158,161), X(160,163), X(162,165), X(164,167), X(166,169),
+  X(168,171), X(170,173), X(172,175), X(174,177), X(176,179), X(178,181),
+  X(180,183), X(182,185), X(184,187), X(186,189), X(188,191), X(190,193),
+  X(192,195), X(194,197), X(196,199), X(198,201), X(200,203), X(202,205),
+  X(204,207), X(206,209), X(208,211), X(210,213), X(212,215), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215)
+};
+S(218) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(1,65),
+  X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73),
+  X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81),
+  X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89),
+  X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97),
+  X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103), X(40,104),
+  X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110), X(47,111),
+  X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117), X(54,118),
+  X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124), X(61,125),
+  X(62,126), X(63,127), X(64,128), X(129,193), X(130,194), X(131,195),
+  X(132,196), X(133,197), X(134,198), X(135,199), X(136,200), X(137,201),
+  X(138,202), X(139,203), X(140,204), X(141,205), X(142,206), X(143,207),
+  X(144,208), X(145,209), X(146,210), X(147,211), X(148,212), X(149,213),
+  X(150,214), X(151,215), X(152,216), X(153,217), X(154,218), X(65,129),
+  X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136),
+  X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143),
+  X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150),
+  X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157),
+  X(94,158), X(95,159), X(96,160), X(97,161), X(98,162), X(99,163), X(100,164),
+  X(101,165), X(102,166), X(103,167), X(104,168), X(105,169), X(106,170),
+  X(107,171), X(108,172), X(109,173), X(110,174), X(111,175), X(112,176),
+  X(113,177), X(114,178), X(115,179), X(116,180), X(117,181), X(118,182),
+  X(119,183), X(120,184), X(121,185), X(122,186), X(123,187), X(124,188),
+  X(125,189), X(126,190), X(127,191), X(128,192), X(1,33), X(2,34), X(3,35),
+  X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43),
+  X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51),
+  X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59),
+  X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(135,167), X(136,168), X(137,169), X(138,170), X(139,171),
+  X(140,172), X(141,173), X(142,174), X(143,175), X(144,176), X(145,177),
+  X(146,178), X(147,179), X(148,180), X(149,181), X(150,182), X(151,183),
+  X(152,184), X(153,185), X(154,186), X(155,187), X(156,188), X(157,189),
+  X(158,190), X(159,191), X(160,192), X(33,129), X(34,130), X(35,131), X(36,132),
+  X(37,133), X(38,134), X(39,135), X(40,136), X(41,137), X(42,138), X(43,139),
+  X(44,140), X(45,141), X(46,142), X(47,143), X(48,144), X(49,145), X(50,146),
+  X(51,147), X(52,148), X(53,149), X(54,150), X(55,151), X(56,152), X(57,153),
+  X(58,154), X(59,155), X(60,156), X(61,157), X(62,158), X(63,159), X(64,160),
+  X(97,193), X(98,194), X(99,195), X(100,196), X(101,197), X(102,198),
+  X(103,199), X(104,200), X(105,201), X(106,202), X(107,203), X(108,204),
+  X(109,205), X(110,206), X(111,207), X(112,208), X(113,209), X(114,210),
+  X(115,211), X(116,212), X(117,213), X(118,214), X(119,215), X(120,216),
+  X(121,217), X(122,218), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69),
+  X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77),
+  X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85),
+  X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93),
+  X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131), X(100,132),
+  X(101,133), X(102,134), X(103,135), X(104,136), X(105,137), X(106,138),
+  X(107,139), X(108,140), X(109,141), X(110,142), X(111,143), X(112,144),
+  X(113,145), X(114,146), X(115,147), X(116,148), X(117,149), X(118,150),
+  X(119,151), X(120,152), X(121,153), X(122,154), X(123,155), X(124,156),
+  X(125,157), X(126,158), X(127,159), X(128,160), X(161,193), X(162,194),
+  X(163,195), X(164,196), X(165,197), X(166,198), X(167,199), X(168,200),
+  X(169,201), X(170,202), X(171,203), X(172,204), X(173,205), X(174,206),
+  X(175,207), X(176,208), X(177,209), X(178,210), X(179,211), X(180,212),
+  X(181,213), X(182,214), X(183,215), X(184,216), X(185,217), X(186,218),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88),
+  X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96),
+  X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(129,145), X(130,146),
+  X(131,147), X(132,148), X(133,149), X(134,150), X(135,151), X(136,152),
+  X(137,153), X(138,154), X(139,155), X(140,156), X(141,157), X(142,158),
+  X(143,159), X(144,160), X(161,177), X(162,178), X(163,179), X(164,180),
+  X(165,181), X(166,182), X(167,183), X(168,184), X(169,185), X(170,186),
+  X(171,187), X(172,188), X(173,189), X(174,190), X(175,191), X(176,192),
+  X(193,209), X(194,210), X(195,211), X(196,212), X(197,213), X(198,214),
+  X(199,215), X(200,216), X(201,217), X(202,218), X(17,129), X(18,130),
+  X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136), X(25,137),
+  X(26,138), X(27,139), X(28,140), X(29,141), X(30,142), X(31,143), X(32,144),
+  X(49,161), X(50,162), X(51,163), X(52,164), X(53,165), X(54,166), X(55,167),
+  X(56,168), X(57,169), X(58,170), X(59,171), X(60,172), X(61,173), X(62,174),
+  X(63,175), X(64,176), X(81,193), X(82,194), X(83,195), X(84,196), X(85,197),
+  X(86,198), X(87,199), X(88,200), X(89,201), X(90,202), X(91,203), X(92,204),
+  X(93,205), X(94,206), X(95,207), X(96,208), X(17,65), X(18,66), X(19,67),
+  X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75),
+  X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(119,167), X(120,168), X(121,169), X(122,170), X(123,171),
+  X(124,172), X(125,173), X(126,174), X(127,175), X(128,176), X(145,193),
+  X(146,194), X(147,195), X(148,196), X(149,197), X(150,198), X(151,199),
+  X(152,200), X(153,201), X(154,202), X(155,203), X(156,204), X(157,205),
+  X(158,206), X(159,207), X(160,208), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68),
+  X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76),
+  X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129),
+  X(114,130), X(115,131), X(116,132), X(117,133), X(118,134), X(119,135),
+  X(120,136), X(121,137), X(122,138), X(123,139), X(124,140), X(125,141),
+  X(126,142), X(127,143), X(128,144), X(145,161), X(146,162), X(147,163),
+  X(148,164), X(149,165), X(150,166), X(151,167), X(152,168), X(153,169),
+  X(154,170), X(155,171), X(156,172), X(157,173), X(158,174), X(159,175),
+  X(160,176), X(177,193), X(178,194), X(179,195), X(180,196), X(181,197),
+  X(182,198), X(183,199), X(184,200), X(185,201), X(186,202), X(187,203),
+  X(188,204), X(189,205), X(190,206), X(191,207), X(192,208), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(117,125),
+  X(118,126), X(119,127), X(120,128), X(129,137), X(130,138), X(131,139),
+  X(132,140), X(133,141), X(134,142), X(135,143), X(136,144), X(145,153),
+  X(146,154), X(147,155), X(148,156), X(149,157), X(150,158), X(151,159),
+  X(152,160), X(161,169), X(162,170), X(163,171), X(164,172), X(165,173),
+  X(166,174), X(167,175), X(168,176), X(177,185), X(178,186), X(179,187),
+  X(180,188), X(181,189), X(182,190), X(183,191), X(184,192), X(193,201),
+  X(194,202), X(195,203), X(196,204), X(197,205), X(198,206), X(199,207),
+  X(200,208), X(209,217), X(210,218), X(9,129), X(10,130), X(11,131), X(12,132),
+  X(13,133), X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147),
+  X(28,148), X(29,149), X(30,150), X(31,151), X(32,152), X(41,161), X(42,162),
+  X(43,163), X(44,164), X(45,165), X(46,166), X(47,167), X(48,168), X(57,177),
+  X(58,178), X(59,179), X(60,180), X(61,181), X(62,182), X(63,183), X(64,184),
+  X(73,193), X(74,194), X(75,195), X(76,196), X(77,197), X(78,198), X(79,199),
+  X(80,200), X(89,209), X(90,210), X(91,211), X(92,212), X(93,213), X(94,214),
+  X(95,215), X(96,216), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115),
+  X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130),
+  X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136), X(89,145),
+  X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151), X(96,152),
+  X(105,161), X(106,162), X(107,163), X(108,164), X(109,165), X(110,166),
+  X(111,167), X(112,168), X(121,177), X(122,178), X(123,179), X(124,180),
+  X(125,181), X(126,182), X(127,183), X(128,184), X(137,193), X(138,194),
+  X(139,195), X(140,196), X(141,197), X(142,198), X(143,199), X(144,200),
+  X(153,209), X(154,210), X(155,211), X(156,212), X(157,213), X(158,214),
+  X(159,215), X(160,216), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37),
+  X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53),
+  X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69),
+  X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85),
+  X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100),
+  X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115),
+  X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130),
+  X(107,131), X(108,132), X(109,133), X(110,134), X(111,135), X(112,136),
+  X(121,145), X(122,146), X(123,147), X(124,148), X(125,149), X(126,150),
+  X(127,151), X(128,152), X(137,161), X(138,162), X(139,163), X(140,164),
+  X(141,165), X(142,166), X(143,167), X(144,168), X(153,177), X(154,178),
+  X(155,179), X(156,180), X(157,181), X(158,182), X(159,183), X(160,184),
+  X(169,193), X(170,194), X(171,195), X(172,196), X(173,197), X(174,198),
+  X(175,199), X(176,200), X(185,209), X(186,210), X(187,211), X(188,212),
+  X(189,213), X(190,214), X(191,215), X(192,216), X(9,17), X(10,18), X(11,19),
+  X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35),
+  X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51),
+  X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67),
+  X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83),
+  X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(125,133), X(126,134),
+  X(127,135), X(128,136), X(137,145), X(138,146), X(139,147), X(140,148),
+  X(141,149), X(142,150), X(143,151), X(144,152), X(153,161), X(154,162),
+  X(155,163), X(156,164), X(157,165), X(158,166), X(159,167), X(160,168),
+  X(169,177), X(170,178), X(171,179), X(172,180), X(173,181), X(174,182),
+  X(175,183), X(176,184), X(185,193), X(186,194), X(187,195), X(188,196),
+  X(189,197), X(190,198), X(191,199), X(192,200), X(201,209), X(202,210),
+  X(203,211), X(204,212), X(205,213), X(206,214), X(207,215), X(208,216), X(1,5),
+  X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21),
+  X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37),
+  X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53),
+  X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69),
+  X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80), X(81,85),
+  X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96),
+  X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(185,189), X(186,190), X(187,191), X(188,192),
+  X(193,197), X(194,198), X(195,199), X(196,200), X(201,205), X(202,206),
+  X(203,207), X(204,208), X(209,213), X(210,214), X(211,215), X(212,216),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153), X(30,154),
+  X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164), X(45,169),
+  X(46,170), X(47,171), X(48,172), X(53,177), X(54,178), X(55,179), X(56,180),
+  X(61,185), X(62,186), X(63,187), X(64,188), X(69,193), X(70,194), X(71,195),
+  X(72,196), X(77,201), X(78,202), X(79,203), X(80,204), X(85,209), X(86,210),
+  X(87,211), X(88,212), X(93,217), X(94,218), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84),
+  X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99),
+  X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114),
+  X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129),
+  X(70,130), X(71,131), X(72,132), X(77,137), X(78,138), X(79,139), X(80,140),
+  X(85,145), X(86,146), X(87,147), X(88,148), X(93,153), X(94,154), X(95,155),
+  X(96,156), X(101,161), X(102,162), X(103,163), X(104,164), X(109,169),
+  X(110,170), X(111,171), X(112,172), X(117,177), X(118,178), X(119,179),
+  X(120,180), X(125,185), X(126,186), X(127,187), X(128,188), X(133,193),
+  X(134,194), X(135,195), X(136,196), X(141,201), X(142,202), X(143,203),
+  X(144,204), X(149,209), X(150,210), X(151,211), X(152,212), X(157,217),
+  X(158,218), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43),
+  X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59),
+  X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75),
+  X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91),
+  X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106),
+  X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121),
+  X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(151,179),
+  X(152,180), X(157,185), X(158,186), X(159,187), X(160,188), X(165,193),
+  X(166,194), X(167,195), X(168,196), X(173,201), X(174,202), X(175,203),
+  X(176,204), X(181,209), X(182,210), X(183,211), X(184,212), X(189,217),
+  X(190,218), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27),
+  X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43),
+  X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59),
+  X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75),
+  X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91),
+  X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106),
+  X(95,107), X(96,108), X(101,113), X(102,114), X(103,115), X(104,116),
+  X(109,121), X(110,122), X(111,123), X(112,124), X(117,129), X(118,130),
+  X(119,131), X(120,132), X(125,137), X(126,138), X(127,139), X(128,140),
+  X(133,145), X(134,146), X(135,147), X(136,148), X(141,153), X(142,154),
+  X(143,155), X(144,156), X(149,161), X(150,162), X(151,163), X(152,164),
+  X(157,169), X(158,170), X(159,171), X(160,172), X(165,177), X(166,178),
+  X(167,179), X(168,180), X(173,185), X(174,186), X(175,187), X(176,188),
+  X(181,193), X(182,194), X(183,195), X(184,196), X(189,201), X(190,202),
+  X(191,203), X(192,204), X(197,209), X(198,210), X(199,211), X(200,212),
+  X(205,217), X(206,218), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18),
+  X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34),
+  X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50),
+  X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66),
+  X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82),
+  X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98),
+  X(95,99), X(96,100), X(101,105), X(102,106), X(103,107), X(104,108),
+  X(109,113), X(110,114), X(111,115), X(112,116), X(117,121), X(118,122),
+  X(119,123), X(120,124), X(125,129), X(126,130), X(127,131), X(128,132),
+  X(133,137), X(134,138), X(135,139), X(136,140), X(141,145), X(142,146),
+  X(143,147), X(144,148), X(149,153), X(150,154), X(151,155), X(152,156),
+  X(157,161), X(158,162), X(159,163), X(160,164), X(165,169), X(166,170),
+  X(167,171), X(168,172), X(173,177), X(174,178), X(175,179), X(176,180),
+  X(181,185), X(182,186), X(183,187), X(184,188), X(189,193), X(190,194),
+  X(191,195), X(192,196), X(197,201), X(198,202), X(199,203), X(200,204),
+  X(205,209), X(206,210), X(207,211), X(208,212), X(213,217), X(214,218), X(1,3),
+  X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19),
+  X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35),
+  X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51),
+  X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67),
+  X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83),
+  X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(197,199), X(198,200), X(201,203), X(202,204), X(205,207),
+  X(206,208), X(209,211), X(210,212), X(213,215), X(214,216), X(3,129), X(4,130),
+  X(7,133), X(8,134), X(11,137), X(12,138), X(15,141), X(16,142), X(19,145),
+  X(20,146), X(23,149), X(24,150), X(27,153), X(28,154), X(31,157), X(32,158),
+  X(35,161), X(36,162), X(39,165), X(40,166), X(43,169), X(44,170), X(47,173),
+  X(48,174), X(51,177), X(52,178), X(55,181), X(56,182), X(59,185), X(60,186),
+  X(63,189), X(64,190), X(67,193), X(68,194), X(71,197), X(72,198), X(75,201),
+  X(76,202), X(79,205), X(80,206), X(83,209), X(84,210), X(87,213), X(88,214),
+  X(91,217), X(92,218), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74),
+  X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90),
+  X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105),
+  X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118),
+  X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130), X(71,133),
+  X(72,134), X(75,137), X(76,138), X(79,141), X(80,142), X(83,145), X(84,146),
+  X(87,149), X(88,150), X(91,153), X(92,154), X(95,157), X(96,158), X(99,161),
+  X(100,162), X(103,165), X(104,166), X(107,169), X(108,170), X(111,173),
+  X(112,174), X(115,177), X(116,178), X(119,181), X(120,182), X(123,185),
+  X(124,186), X(127,189), X(128,190), X(131,193), X(132,194), X(135,197),
+  X(136,198), X(139,201), X(140,202), X(143,205), X(144,206), X(147,209),
+  X(148,210), X(151,213), X(152,214), X(155,217), X(156,218), X(3,33), X(4,34),
+  X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50),
+  X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66),
+  X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82),
+  X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(127,157), X(128,158), X(131,161), X(132,162),
+  X(135,165), X(136,166), X(139,169), X(140,170), X(143,173), X(144,174),
+  X(147,177), X(148,178), X(151,181), X(152,182), X(155,185), X(156,186),
+  X(159,189), X(160,190), X(163,193), X(164,194), X(167,197), X(168,198),
+  X(171,201), X(172,202), X(175,205), X(176,206), X(179,209), X(180,210),
+  X(183,213), X(184,214), X(187,217), X(188,218), X(3,17), X(4,18), X(7,21),
+  X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37),
+  X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53),
+  X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69),
+  X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85),
+  X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(143,157), X(144,158), X(147,161),
+  X(148,162), X(151,165), X(152,166), X(155,169), X(156,170), X(159,173),
+  X(160,174), X(163,177), X(164,178), X(167,181), X(168,182), X(171,185),
+  X(172,186), X(175,189), X(176,190), X(179,193), X(180,194), X(183,197),
+  X(184,198), X(187,201), X(188,202), X(191,205), X(192,206), X(195,209),
+  X(196,210), X(199,213), X(200,214), X(203,217), X(204,218), X(3,9), X(4,10),
+  X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26),
+  X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42),
+  X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58),
+  X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74),
+  X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90),
+  X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102), X(99,105),
+  X(100,106), X(103,109), X(104,110), X(107,113), X(108,114), X(111,117),
+  X(112,118), X(115,121), X(116,122), X(119,125), X(120,126), X(123,129),
+  X(124,130), X(127,133), X(128,134), X(131,137), X(132,138), X(135,141),
+  X(136,142), X(139,145), X(140,146), X(143,149), X(144,150), X(147,153),
+  X(148,154), X(151,157), X(152,158), X(155,161), X(156,162), X(159,165),
+  X(160,166), X(163,169), X(164,170), X(167,173), X(168,174), X(171,177),
+  X(172,178), X(175,181), X(176,182), X(179,185), X(180,186), X(183,189),
+  X(184,190), X(187,193), X(188,194), X(191,197), X(192,198), X(195,201),
+  X(196,202), X(199,205), X(200,206), X(203,209), X(204,210), X(207,213),
+  X(208,214), X(211,217), X(212,218), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13),
+  X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29),
+  X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45),
+  X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61),
+  X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77),
+  X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93),
+  X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106),
+  X(107,109), X(108,110), X(111,113), X(112,114), X(115,117), X(116,118),
+  X(119,121), X(120,122), X(123,125), X(124,126), X(127,129), X(128,130),
+  X(131,133), X(132,134), X(135,137), X(136,138), X(139,141), X(140,142),
+  X(143,145), X(144,146), X(147,149), X(148,150), X(151,153), X(152,154),
+  X(155,157), X(156,158), X(159,161), X(160,162), X(163,165), X(164,166),
+  X(167,169), X(168,170), X(171,173), X(172,174), X(175,177), X(176,178),
+  X(179,181), X(180,182), X(183,185), X(184,186), X(187,189), X(188,190),
+  X(191,193), X(192,194), X(195,197), X(196,198), X(199,201), X(200,202),
+  X(203,205), X(204,206), X(207,209), X(208,210), X(211,213), X(212,214),
+  X(215,217), X(216,218), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(187,188), X(189,190),
+  X(191,192), X(193,194), X(195,196), X(197,198), X(199,200), X(201,202),
+  X(203,204), X(205,206), X(207,208), X(209,210), X(211,212), X(213,214),
+  X(215,216), X(217,218), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137),
+  X(12,139), X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151),
+  X(26,153), X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165),
+  X(40,167), X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179),
+  X(54,181), X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193),
+  X(68,195), X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207),
+  X(82,209), X(84,211), X(86,213), X(88,215), X(90,217), X(2,65), X(4,67),
+  X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83),
+  X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99),
+  X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113),
+  X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127),
+  X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141),
+  X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155),
+  X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(124,187), X(126,189), X(128,191),
+  X(130,193), X(132,195), X(134,197), X(136,199), X(138,201), X(140,203),
+  X(142,205), X(144,207), X(146,209), X(148,211), X(150,213), X(152,215),
+  X(154,217), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45),
+  X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61),
+  X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77),
+  X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93),
+  X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107),
+  X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121),
+  X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(146,177), X(148,179), X(150,181), X(152,183),
+  X(154,185), X(156,187), X(158,189), X(160,191), X(162,193), X(164,195),
+  X(166,197), X(168,199), X(170,201), X(172,203), X(174,205), X(176,207),
+  X(178,209), X(180,211), X(182,213), X(184,215), X(186,217), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83),
+  X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(170,185),
+  X(172,187), X(174,189), X(176,191), X(178,193), X(180,195), X(182,197),
+  X(184,199), X(186,201), X(188,203), X(190,205), X(192,207), X(194,209),
+  X(196,211), X(198,213), X(200,215), X(202,217), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45),
+  X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61),
+  X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77),
+  X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93),
+  X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107),
+  X(102,109), X(104,111), X(106,113), X(108,115), X(110,117), X(112,119),
+  X(114,121), X(116,123), X(118,125), X(120,127), X(122,129), X(124,131),
+  X(126,133), X(128,135), X(130,137), X(132,139), X(134,141), X(136,143),
+  X(138,145), X(140,147), X(142,149), X(144,151), X(146,153), X(148,155),
+  X(150,157), X(152,159), X(154,161), X(156,163), X(158,165), X(160,167),
+  X(162,169), X(164,171), X(166,173), X(168,175), X(170,177), X(172,179),
+  X(174,181), X(176,183), X(178,185), X(180,187), X(182,189), X(184,191),
+  X(186,193), X(188,195), X(190,197), X(192,199), X(194,201), X(196,203),
+  X(198,205), X(200,207), X(202,209), X(204,211), X(206,213), X(208,215),
+  X(210,217), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17),
+  X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33),
+  X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49),
+  X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65),
+  X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81),
+  X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97),
+  X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133),
+  X(132,135), X(134,137), X(136,139), X(138,141), X(140,143), X(142,145),
+  X(144,147), X(146,149), X(148,151), X(150,153), X(152,155), X(154,157),
+  X(156,159), X(158,161), X(160,163), X(162,165), X(164,167), X(166,169),
+  X(168,171), X(170,173), X(172,175), X(174,177), X(176,179), X(178,181),
+  X(180,183), X(182,185), X(184,187), X(186,189), X(188,191), X(190,193),
+  X(192,195), X(194,197), X(196,199), X(198,201), X(200,203), X(202,205),
+  X(204,207), X(206,209), X(208,211), X(210,213), X(212,215), X(214,217), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217)
+};
+S(220) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71),
+  X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79),
+  X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87),
+  X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95),
+  X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102),
+  X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109),
+  X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116),
+  X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123),
+  X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(129,193), X(130,194),
+  X(131,195), X(132,196), X(133,197), X(134,198), X(135,199), X(136,200),
+  X(137,201), X(138,202), X(139,203), X(140,204), X(141,205), X(142,206),
+  X(143,207), X(144,208), X(145,209), X(146,210), X(147,211), X(148,212),
+  X(149,213), X(150,214), X(151,215), X(152,216), X(153,217), X(154,218),
+  X(155,219), X(156,220), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133),
+  X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140),
+  X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147),
+  X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154),
+  X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160), X(97,161),
+  X(98,162), X(99,163), X(100,164), X(101,165), X(102,166), X(103,167),
+  X(104,168), X(105,169), X(106,170), X(107,171), X(108,172), X(109,173),
+  X(110,174), X(111,175), X(112,176), X(113,177), X(114,178), X(115,179),
+  X(116,180), X(117,181), X(118,182), X(119,183), X(120,184), X(121,185),
+  X(122,186), X(123,187), X(124,188), X(125,189), X(126,190), X(127,191),
+  X(128,192), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39),
+  X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47),
+  X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55),
+  X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63),
+  X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102),
+  X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109),
+  X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116),
+  X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123),
+  X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161), X(130,162),
+  X(131,163), X(132,164), X(133,165), X(134,166), X(135,167), X(136,168),
+  X(137,169), X(138,170), X(139,171), X(140,172), X(141,173), X(142,174),
+  X(143,175), X(144,176), X(145,177), X(146,178), X(147,179), X(148,180),
+  X(149,181), X(150,182), X(151,183), X(152,184), X(153,185), X(154,186),
+  X(155,187), X(156,188), X(157,189), X(158,190), X(159,191), X(160,192),
+  X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134), X(39,135),
+  X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141), X(46,142),
+  X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148), X(53,149),
+  X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155), X(60,156),
+  X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194), X(99,195),
+  X(100,196), X(101,197), X(102,198), X(103,199), X(104,200), X(105,201),
+  X(106,202), X(107,203), X(108,204), X(109,205), X(110,206), X(111,207),
+  X(112,208), X(113,209), X(114,210), X(115,211), X(116,212), X(117,213),
+  X(118,214), X(119,215), X(120,216), X(121,217), X(122,218), X(123,219),
+  X(124,220), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70),
+  X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78),
+  X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86),
+  X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94),
+  X(63,95), X(64,96), X(97,129), X(98,130), X(99,131), X(100,132), X(101,133),
+  X(102,134), X(103,135), X(104,136), X(105,137), X(106,138), X(107,139),
+  X(108,140), X(109,141), X(110,142), X(111,143), X(112,144), X(113,145),
+  X(114,146), X(115,147), X(116,148), X(117,149), X(118,150), X(119,151),
+  X(120,152), X(121,153), X(122,154), X(123,155), X(124,156), X(125,157),
+  X(126,158), X(127,159), X(128,160), X(161,193), X(162,194), X(163,195),
+  X(164,196), X(165,197), X(166,198), X(167,199), X(168,200), X(169,201),
+  X(170,202), X(171,203), X(172,204), X(173,205), X(174,206), X(175,207),
+  X(176,208), X(177,209), X(178,210), X(179,211), X(180,212), X(181,213),
+  X(182,214), X(183,215), X(184,216), X(185,217), X(186,218), X(187,219),
+  X(188,220), X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23),
+  X(8,24), X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31),
+  X(16,32), X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55),
+  X(40,56), X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63),
+  X(48,64), X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87),
+  X(72,88), X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95),
+  X(80,96), X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(129,145), X(130,146),
+  X(131,147), X(132,148), X(133,149), X(134,150), X(135,151), X(136,152),
+  X(137,153), X(138,154), X(139,155), X(140,156), X(141,157), X(142,158),
+  X(143,159), X(144,160), X(161,177), X(162,178), X(163,179), X(164,180),
+  X(165,181), X(166,182), X(167,183), X(168,184), X(169,185), X(170,186),
+  X(171,187), X(172,188), X(173,189), X(174,190), X(175,191), X(176,192),
+  X(193,209), X(194,210), X(195,211), X(196,212), X(197,213), X(198,214),
+  X(199,215), X(200,216), X(201,217), X(202,218), X(203,219), X(204,220),
+  X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134), X(23,135),
+  X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141), X(30,142),
+  X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164), X(53,165),
+  X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171), X(60,172),
+  X(61,173), X(62,174), X(63,175), X(64,176), X(81,193), X(82,194), X(83,195),
+  X(84,196), X(85,197), X(86,198), X(87,199), X(88,200), X(89,201), X(90,202),
+  X(91,203), X(92,204), X(93,205), X(94,206), X(95,207), X(96,208), X(17,65),
+  X(18,66), X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73),
+  X(26,74), X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97),
+  X(50,98), X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104),
+  X(57,105), X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111),
+  X(64,112), X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134),
+  X(87,135), X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141),
+  X(94,142), X(95,143), X(96,144), X(113,161), X(114,162), X(115,163),
+  X(116,164), X(117,165), X(118,166), X(119,167), X(120,168), X(121,169),
+  X(122,170), X(123,171), X(124,172), X(125,173), X(126,174), X(127,175),
+  X(128,176), X(145,193), X(146,194), X(147,195), X(148,196), X(149,197),
+  X(150,198), X(151,199), X(152,200), X(153,201), X(154,202), X(155,203),
+  X(156,204), X(157,205), X(158,206), X(159,207), X(160,208), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(117,133), X(118,134),
+  X(119,135), X(120,136), X(121,137), X(122,138), X(123,139), X(124,140),
+  X(125,141), X(126,142), X(127,143), X(128,144), X(145,161), X(146,162),
+  X(147,163), X(148,164), X(149,165), X(150,166), X(151,167), X(152,168),
+  X(153,169), X(154,170), X(155,171), X(156,172), X(157,173), X(158,174),
+  X(159,175), X(160,176), X(177,193), X(178,194), X(179,195), X(180,196),
+  X(181,197), X(182,198), X(183,199), X(184,200), X(185,201), X(186,202),
+  X(187,203), X(188,204), X(189,205), X(190,206), X(191,207), X(192,208), X(1,9),
+  X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25),
+  X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41),
+  X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57),
+  X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73),
+  X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89),
+  X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96),
+  X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(145,153), X(146,154), X(147,155), X(148,156), X(149,157), X(150,158),
+  X(151,159), X(152,160), X(161,169), X(162,170), X(163,171), X(164,172),
+  X(165,173), X(166,174), X(167,175), X(168,176), X(177,185), X(178,186),
+  X(179,187), X(180,188), X(181,189), X(182,190), X(183,191), X(184,192),
+  X(193,201), X(194,202), X(195,203), X(196,204), X(197,205), X(198,206),
+  X(199,207), X(200,208), X(209,217), X(210,218), X(211,219), X(212,220),
+  X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135),
+  X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149), X(30,150),
+  X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164), X(45,165),
+  X(46,166), X(47,167), X(48,168), X(57,177), X(58,178), X(59,179), X(60,180),
+  X(61,181), X(62,182), X(63,183), X(64,184), X(73,193), X(74,194), X(75,195),
+  X(76,196), X(77,197), X(78,198), X(79,199), X(80,200), X(89,209), X(90,210),
+  X(91,211), X(92,212), X(93,213), X(94,214), X(95,215), X(96,216), X(9,65),
+  X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81),
+  X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97),
+  X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104),
+  X(57,113), X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119),
+  X(64,120), X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134),
+  X(79,135), X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149),
+  X(94,150), X(95,151), X(96,152), X(105,161), X(106,162), X(107,163),
+  X(108,164), X(109,165), X(110,166), X(111,167), X(112,168), X(121,177),
+  X(122,178), X(123,179), X(124,180), X(125,181), X(126,182), X(127,183),
+  X(128,184), X(137,193), X(138,194), X(139,195), X(140,196), X(141,197),
+  X(142,198), X(143,199), X(144,200), X(153,209), X(154,210), X(155,211),
+  X(156,212), X(157,213), X(158,214), X(159,215), X(160,216), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(105,129), X(106,130), X(107,131), X(108,132), X(109,133), X(110,134),
+  X(111,135), X(112,136), X(121,145), X(122,146), X(123,147), X(124,148),
+  X(125,149), X(126,150), X(127,151), X(128,152), X(137,161), X(138,162),
+  X(139,163), X(140,164), X(141,165), X(142,166), X(143,167), X(144,168),
+  X(153,177), X(154,178), X(155,179), X(156,180), X(157,181), X(158,182),
+  X(159,183), X(160,184), X(169,193), X(170,194), X(171,195), X(172,196),
+  X(173,197), X(174,198), X(175,199), X(176,200), X(185,209), X(186,210),
+  X(187,211), X(188,212), X(189,213), X(190,214), X(191,215), X(192,216),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(105,113), X(106,114), X(107,115), X(108,116), X(109,117),
+  X(110,118), X(111,119), X(112,120), X(121,129), X(122,130), X(123,131),
+  X(124,132), X(125,133), X(126,134), X(127,135), X(128,136), X(137,145),
+  X(138,146), X(139,147), X(140,148), X(141,149), X(142,150), X(143,151),
+  X(144,152), X(153,161), X(154,162), X(155,163), X(156,164), X(157,165),
+  X(158,166), X(159,167), X(160,168), X(169,177), X(170,178), X(171,179),
+  X(172,180), X(173,181), X(174,182), X(175,183), X(176,184), X(185,193),
+  X(186,194), X(187,195), X(188,196), X(189,197), X(190,198), X(191,199),
+  X(192,200), X(201,209), X(202,210), X(203,211), X(204,212), X(205,213),
+  X(206,214), X(207,215), X(208,216), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(147,151), X(148,152),
+  X(153,157), X(154,158), X(155,159), X(156,160), X(161,165), X(162,166),
+  X(163,167), X(164,168), X(169,173), X(170,174), X(171,175), X(172,176),
+  X(177,181), X(178,182), X(179,183), X(180,184), X(185,189), X(186,190),
+  X(187,191), X(188,192), X(193,197), X(194,198), X(195,199), X(196,200),
+  X(201,205), X(202,206), X(203,207), X(204,208), X(209,213), X(210,214),
+  X(211,215), X(212,216), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137),
+  X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148),
+  X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163),
+  X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(53,177), X(54,178),
+  X(55,179), X(56,180), X(61,185), X(62,186), X(63,187), X(64,188), X(69,193),
+  X(70,194), X(71,195), X(72,196), X(77,201), X(78,202), X(79,203), X(80,204),
+  X(85,209), X(86,210), X(87,211), X(88,212), X(93,217), X(94,218), X(95,219),
+  X(96,220), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147),
+  X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162),
+  X(103,163), X(104,164), X(109,169), X(110,170), X(111,171), X(112,172),
+  X(117,177), X(118,178), X(119,179), X(120,180), X(125,185), X(126,186),
+  X(127,187), X(128,188), X(133,193), X(134,194), X(135,195), X(136,196),
+  X(141,201), X(142,202), X(143,203), X(144,204), X(149,209), X(150,210),
+  X(151,211), X(152,212), X(157,217), X(158,218), X(159,219), X(160,220),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92),
+  X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107),
+  X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121), X(94,122),
+  X(95,123), X(96,124), X(101,129), X(102,130), X(103,131), X(104,132),
+  X(109,137), X(110,138), X(111,139), X(112,140), X(117,145), X(118,146),
+  X(119,147), X(120,148), X(125,153), X(126,154), X(127,155), X(128,156),
+  X(133,161), X(134,162), X(135,163), X(136,164), X(141,169), X(142,170),
+  X(143,171), X(144,172), X(149,177), X(150,178), X(151,179), X(152,180),
+  X(157,185), X(158,186), X(159,187), X(160,188), X(165,193), X(166,194),
+  X(167,195), X(168,196), X(173,201), X(174,202), X(175,203), X(176,204),
+  X(181,209), X(182,210), X(183,211), X(184,212), X(189,217), X(190,218),
+  X(191,219), X(192,220), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105),
+  X(94,106), X(95,107), X(96,108), X(101,113), X(102,114), X(103,115),
+  X(104,116), X(109,121), X(110,122), X(111,123), X(112,124), X(117,129),
+  X(118,130), X(119,131), X(120,132), X(125,137), X(126,138), X(127,139),
+  X(128,140), X(133,145), X(134,146), X(135,147), X(136,148), X(141,153),
+  X(142,154), X(143,155), X(144,156), X(149,161), X(150,162), X(151,163),
+  X(152,164), X(157,169), X(158,170), X(159,171), X(160,172), X(165,177),
+  X(166,178), X(167,179), X(168,180), X(173,185), X(174,186), X(175,187),
+  X(176,188), X(181,193), X(182,194), X(183,195), X(184,196), X(189,201),
+  X(190,202), X(191,203), X(192,204), X(197,209), X(198,210), X(199,211),
+  X(200,212), X(205,217), X(206,218), X(207,219), X(208,220), X(5,9), X(6,10),
+  X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26),
+  X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42),
+  X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58),
+  X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74),
+  X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90),
+  X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105),
+  X(102,106), X(103,107), X(104,108), X(109,113), X(110,114), X(111,115),
+  X(112,116), X(117,121), X(118,122), X(119,123), X(120,124), X(125,129),
+  X(126,130), X(127,131), X(128,132), X(133,137), X(134,138), X(135,139),
+  X(136,140), X(141,145), X(142,146), X(143,147), X(144,148), X(149,153),
+  X(150,154), X(151,155), X(152,156), X(157,161), X(158,162), X(159,163),
+  X(160,164), X(165,169), X(166,170), X(167,171), X(168,172), X(173,177),
+  X(174,178), X(175,179), X(176,180), X(181,185), X(182,186), X(183,187),
+  X(184,188), X(189,193), X(190,194), X(191,195), X(192,196), X(197,201),
+  X(198,202), X(199,203), X(200,204), X(205,209), X(206,210), X(207,211),
+  X(208,212), X(213,217), X(214,218), X(215,219), X(216,220), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(197,199), X(198,200), X(201,203), X(202,204), X(205,207),
+  X(206,208), X(209,211), X(210,212), X(213,215), X(214,216), X(217,219),
+  X(218,220), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194),
+  X(71,197), X(72,198), X(75,201), X(76,202), X(79,205), X(80,206), X(83,209),
+  X(84,210), X(87,213), X(88,214), X(91,217), X(92,218), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154),
+  X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(127,189), X(128,190),
+  X(131,193), X(132,194), X(135,197), X(136,198), X(139,201), X(140,202),
+  X(143,205), X(144,206), X(147,209), X(148,210), X(151,213), X(152,214),
+  X(155,217), X(156,218), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74),
+  X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90),
+  X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105),
+  X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118),
+  X(91,121), X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133),
+  X(104,134), X(107,137), X(108,138), X(111,141), X(112,142), X(115,145),
+  X(116,146), X(119,149), X(120,150), X(123,153), X(124,154), X(127,157),
+  X(128,158), X(131,161), X(132,162), X(135,165), X(136,166), X(139,169),
+  X(140,170), X(143,173), X(144,174), X(147,177), X(148,178), X(151,181),
+  X(152,182), X(155,185), X(156,186), X(159,189), X(160,190), X(163,193),
+  X(164,194), X(167,197), X(168,198), X(171,201), X(172,202), X(175,205),
+  X(176,206), X(179,209), X(180,210), X(183,213), X(184,214), X(187,217),
+  X(188,218), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166),
+  X(155,169), X(156,170), X(159,173), X(160,174), X(163,177), X(164,178),
+  X(167,181), X(168,182), X(171,185), X(172,186), X(175,189), X(176,190),
+  X(179,193), X(180,194), X(183,197), X(184,198), X(187,201), X(188,202),
+  X(191,205), X(192,206), X(195,209), X(196,210), X(199,213), X(200,214),
+  X(203,217), X(204,218), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50),
+  X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66),
+  X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82),
+  X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134),
+  X(131,137), X(132,138), X(135,141), X(136,142), X(139,145), X(140,146),
+  X(143,149), X(144,150), X(147,153), X(148,154), X(151,157), X(152,158),
+  X(155,161), X(156,162), X(159,165), X(160,166), X(163,169), X(164,170),
+  X(167,173), X(168,174), X(171,177), X(172,178), X(175,181), X(176,182),
+  X(179,185), X(180,186), X(183,189), X(184,190), X(187,193), X(188,194),
+  X(191,197), X(192,198), X(195,201), X(196,202), X(199,205), X(200,206),
+  X(203,209), X(204,210), X(207,213), X(208,214), X(211,217), X(212,218), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134),
+  X(135,137), X(136,138), X(139,141), X(140,142), X(143,145), X(144,146),
+  X(147,149), X(148,150), X(151,153), X(152,154), X(155,157), X(156,158),
+  X(159,161), X(160,162), X(163,165), X(164,166), X(167,169), X(168,170),
+  X(171,173), X(172,174), X(175,177), X(176,178), X(179,181), X(180,182),
+  X(183,185), X(184,186), X(187,189), X(188,190), X(191,193), X(192,194),
+  X(195,197), X(196,198), X(199,201), X(200,202), X(203,205), X(204,206),
+  X(207,209), X(208,210), X(211,213), X(212,214), X(215,217), X(216,218), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181),
+  X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195),
+  X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(82,209),
+  X(84,211), X(86,213), X(88,215), X(90,217), X(92,219), X(2,65), X(4,67),
+  X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83),
+  X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99),
+  X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113),
+  X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127),
+  X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141),
+  X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155),
+  X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(124,187), X(126,189), X(128,191),
+  X(130,193), X(132,195), X(134,197), X(136,199), X(138,201), X(140,203),
+  X(142,205), X(144,207), X(146,209), X(148,211), X(150,213), X(152,215),
+  X(154,217), X(156,219), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75),
+  X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91),
+  X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105),
+  X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119),
+  X(90,121), X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133),
+  X(104,135), X(106,137), X(108,139), X(110,141), X(112,143), X(114,145),
+  X(116,147), X(118,149), X(120,151), X(122,153), X(124,155), X(126,157),
+  X(128,159), X(130,161), X(132,163), X(134,165), X(136,167), X(138,169),
+  X(140,171), X(142,173), X(144,175), X(146,177), X(148,179), X(150,181),
+  X(152,183), X(154,185), X(156,187), X(158,189), X(160,191), X(162,193),
+  X(164,195), X(166,197), X(168,199), X(170,201), X(172,203), X(174,205),
+  X(176,207), X(178,209), X(180,211), X(182,213), X(184,215), X(186,217),
+  X(188,219), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(160,175), X(162,177), X(164,179),
+  X(166,181), X(168,183), X(170,185), X(172,187), X(174,189), X(176,191),
+  X(178,193), X(180,195), X(182,197), X(184,199), X(186,201), X(188,203),
+  X(190,205), X(192,207), X(194,209), X(196,211), X(198,213), X(200,215),
+  X(202,217), X(204,219), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83),
+  X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(134,141), X(136,143), X(138,145), X(140,147),
+  X(142,149), X(144,151), X(146,153), X(148,155), X(150,157), X(152,159),
+  X(154,161), X(156,163), X(158,165), X(160,167), X(162,169), X(164,171),
+  X(166,173), X(168,175), X(170,177), X(172,179), X(174,181), X(176,183),
+  X(178,185), X(180,187), X(182,189), X(184,191), X(186,193), X(188,195),
+  X(190,197), X(192,199), X(194,201), X(196,203), X(198,205), X(200,207),
+  X(202,209), X(204,211), X(206,213), X(208,215), X(210,217), X(212,219), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(120,123),
+  X(122,125), X(124,127), X(126,129), X(128,131), X(130,133), X(132,135),
+  X(134,137), X(136,139), X(138,141), X(140,143), X(142,145), X(144,147),
+  X(146,149), X(148,151), X(150,153), X(152,155), X(154,157), X(156,159),
+  X(158,161), X(160,163), X(162,165), X(164,167), X(166,169), X(168,171),
+  X(170,173), X(172,175), X(174,177), X(176,179), X(178,181), X(180,183),
+  X(182,185), X(184,187), X(186,189), X(188,191), X(190,193), X(192,195),
+  X(194,197), X(196,199), X(198,201), X(200,203), X(202,205), X(204,207),
+  X(206,209), X(208,211), X(210,213), X(212,215), X(214,217), X(216,219), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219)
+};
+S(222) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69),
+  X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77),
+  X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85),
+  X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93),
+  X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100),
+  X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107),
+  X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114),
+  X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121),
+  X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128),
+  X(129,193), X(130,194), X(131,195), X(132,196), X(133,197), X(134,198),
+  X(135,199), X(136,200), X(137,201), X(138,202), X(139,203), X(140,204),
+  X(141,205), X(142,206), X(143,207), X(144,208), X(145,209), X(146,210),
+  X(147,211), X(148,212), X(149,213), X(150,214), X(151,215), X(152,216),
+  X(153,217), X(154,218), X(155,219), X(156,220), X(157,221), X(158,222),
+  X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135),
+  X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142),
+  X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149),
+  X(86,150), X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156),
+  X(93,157), X(94,158), X(95,159), X(96,160), X(97,161), X(98,162), X(99,163),
+  X(100,164), X(101,165), X(102,166), X(103,167), X(104,168), X(105,169),
+  X(106,170), X(107,171), X(108,172), X(109,173), X(110,174), X(111,175),
+  X(112,176), X(113,177), X(114,178), X(115,179), X(116,180), X(117,181),
+  X(118,182), X(119,183), X(120,184), X(121,185), X(122,186), X(123,187),
+  X(124,188), X(125,189), X(126,190), X(127,191), X(128,192), X(1,33), X(2,34),
+  X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42),
+  X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50),
+  X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58),
+  X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98),
+  X(67,99), X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105),
+  X(74,106), X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112),
+  X(81,113), X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119),
+  X(88,120), X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126),
+  X(95,127), X(96,128), X(129,161), X(130,162), X(131,163), X(132,164),
+  X(133,165), X(134,166), X(135,167), X(136,168), X(137,169), X(138,170),
+  X(139,171), X(140,172), X(141,173), X(142,174), X(143,175), X(144,176),
+  X(145,177), X(146,178), X(147,179), X(148,180), X(149,181), X(150,182),
+  X(151,183), X(152,184), X(153,185), X(154,186), X(155,187), X(156,188),
+  X(157,189), X(158,190), X(159,191), X(160,192), X(33,129), X(34,130),
+  X(35,131), X(36,132), X(37,133), X(38,134), X(39,135), X(40,136), X(41,137),
+  X(42,138), X(43,139), X(44,140), X(45,141), X(46,142), X(47,143), X(48,144),
+  X(49,145), X(50,146), X(51,147), X(52,148), X(53,149), X(54,150), X(55,151),
+  X(56,152), X(57,153), X(58,154), X(59,155), X(60,156), X(61,157), X(62,158),
+  X(63,159), X(64,160), X(97,193), X(98,194), X(99,195), X(100,196), X(101,197),
+  X(102,198), X(103,199), X(104,200), X(105,201), X(106,202), X(107,203),
+  X(108,204), X(109,205), X(110,206), X(111,207), X(112,208), X(113,209),
+  X(114,210), X(115,211), X(116,212), X(117,213), X(118,214), X(119,215),
+  X(120,216), X(121,217), X(122,218), X(123,219), X(124,220), X(125,221),
+  X(126,222), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70),
+  X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78),
+  X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86),
+  X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94),
+  X(63,95), X(64,96), X(97,129), X(98,130), X(99,131), X(100,132), X(101,133),
+  X(102,134), X(103,135), X(104,136), X(105,137), X(106,138), X(107,139),
+  X(108,140), X(109,141), X(110,142), X(111,143), X(112,144), X(113,145),
+  X(114,146), X(115,147), X(116,148), X(117,149), X(118,150), X(119,151),
+  X(120,152), X(121,153), X(122,154), X(123,155), X(124,156), X(125,157),
+  X(126,158), X(127,159), X(128,160), X(161,193), X(162,194), X(163,195),
+  X(164,196), X(165,197), X(166,198), X(167,199), X(168,200), X(169,201),
+  X(170,202), X(171,203), X(172,204), X(173,205), X(174,206), X(175,207),
+  X(176,208), X(177,209), X(178,210), X(179,211), X(180,212), X(181,213),
+  X(182,214), X(183,215), X(184,216), X(185,217), X(186,218), X(187,219),
+  X(188,220), X(189,221), X(190,222), X(1,17), X(2,18), X(3,19), X(4,20),
+  X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27), X(12,28),
+  X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51), X(36,52),
+  X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59), X(44,60),
+  X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83), X(68,84),
+  X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91), X(76,92),
+  X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114), X(99,115),
+  X(100,116), X(101,117), X(102,118), X(103,119), X(104,120), X(105,121),
+  X(106,122), X(107,123), X(108,124), X(109,125), X(110,126), X(111,127),
+  X(112,128), X(129,145), X(130,146), X(131,147), X(132,148), X(133,149),
+  X(134,150), X(135,151), X(136,152), X(137,153), X(138,154), X(139,155),
+  X(140,156), X(141,157), X(142,158), X(143,159), X(144,160), X(161,177),
+  X(162,178), X(163,179), X(164,180), X(165,181), X(166,182), X(167,183),
+  X(168,184), X(169,185), X(170,186), X(171,187), X(172,188), X(173,189),
+  X(174,190), X(175,191), X(176,192), X(193,209), X(194,210), X(195,211),
+  X(196,212), X(197,213), X(198,214), X(199,215), X(200,216), X(201,217),
+  X(202,218), X(203,219), X(204,220), X(205,221), X(206,222), X(17,129),
+  X(18,130), X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136),
+  X(25,137), X(26,138), X(27,139), X(28,140), X(29,141), X(30,142), X(31,143),
+  X(32,144), X(49,161), X(50,162), X(51,163), X(52,164), X(53,165), X(54,166),
+  X(55,167), X(56,168), X(57,169), X(58,170), X(59,171), X(60,172), X(61,173),
+  X(62,174), X(63,175), X(64,176), X(81,193), X(82,194), X(83,195), X(84,196),
+  X(85,197), X(86,198), X(87,199), X(88,200), X(89,201), X(90,202), X(91,203),
+  X(92,204), X(93,205), X(94,206), X(95,207), X(96,208), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135),
+  X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142),
+  X(95,143), X(96,144), X(113,161), X(114,162), X(115,163), X(116,164),
+  X(117,165), X(118,166), X(119,167), X(120,168), X(121,169), X(122,170),
+  X(123,171), X(124,172), X(125,173), X(126,174), X(127,175), X(128,176),
+  X(145,193), X(146,194), X(147,195), X(148,196), X(149,197), X(150,198),
+  X(151,199), X(152,200), X(153,201), X(154,202), X(155,203), X(156,204),
+  X(157,205), X(158,206), X(159,207), X(160,208), X(17,33), X(18,34), X(19,35),
+  X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43),
+  X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67),
+  X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75),
+  X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129),
+  X(114,130), X(115,131), X(116,132), X(117,133), X(118,134), X(119,135),
+  X(120,136), X(121,137), X(122,138), X(123,139), X(124,140), X(125,141),
+  X(126,142), X(127,143), X(128,144), X(145,161), X(146,162), X(147,163),
+  X(148,164), X(149,165), X(150,166), X(151,167), X(152,168), X(153,169),
+  X(154,170), X(155,171), X(156,172), X(157,173), X(158,174), X(159,175),
+  X(160,176), X(177,193), X(178,194), X(179,195), X(180,196), X(181,197),
+  X(182,198), X(183,199), X(184,200), X(185,201), X(186,202), X(187,203),
+  X(188,204), X(189,205), X(190,206), X(191,207), X(192,208), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(117,125),
+  X(118,126), X(119,127), X(120,128), X(129,137), X(130,138), X(131,139),
+  X(132,140), X(133,141), X(134,142), X(135,143), X(136,144), X(145,153),
+  X(146,154), X(147,155), X(148,156), X(149,157), X(150,158), X(151,159),
+  X(152,160), X(161,169), X(162,170), X(163,171), X(164,172), X(165,173),
+  X(166,174), X(167,175), X(168,176), X(177,185), X(178,186), X(179,187),
+  X(180,188), X(181,189), X(182,190), X(183,191), X(184,192), X(193,201),
+  X(194,202), X(195,203), X(196,204), X(197,205), X(198,206), X(199,207),
+  X(200,208), X(209,217), X(210,218), X(211,219), X(212,220), X(213,221),
+  X(214,222), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134),
+  X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149),
+  X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164),
+  X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178), X(59,179),
+  X(60,180), X(61,181), X(62,182), X(63,183), X(64,184), X(73,193), X(74,194),
+  X(75,195), X(76,196), X(77,197), X(78,198), X(79,199), X(80,200), X(89,209),
+  X(90,210), X(91,211), X(92,212), X(93,213), X(94,214), X(95,215), X(96,216),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72),
+  X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88),
+  X(41,97), X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103),
+  X(48,104), X(57,113), X(58,114), X(59,115), X(60,116), X(61,117), X(62,118),
+  X(63,119), X(64,120), X(73,129), X(74,130), X(75,131), X(76,132), X(77,133),
+  X(78,134), X(79,135), X(80,136), X(89,145), X(90,146), X(91,147), X(92,148),
+  X(93,149), X(94,150), X(95,151), X(96,152), X(105,161), X(106,162), X(107,163),
+  X(108,164), X(109,165), X(110,166), X(111,167), X(112,168), X(121,177),
+  X(122,178), X(123,179), X(124,180), X(125,181), X(126,182), X(127,183),
+  X(128,184), X(137,193), X(138,194), X(139,195), X(140,196), X(141,197),
+  X(142,198), X(143,199), X(144,200), X(153,209), X(154,210), X(155,211),
+  X(156,212), X(157,213), X(158,214), X(159,215), X(160,216), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(105,129), X(106,130), X(107,131), X(108,132), X(109,133), X(110,134),
+  X(111,135), X(112,136), X(121,145), X(122,146), X(123,147), X(124,148),
+  X(125,149), X(126,150), X(127,151), X(128,152), X(137,161), X(138,162),
+  X(139,163), X(140,164), X(141,165), X(142,166), X(143,167), X(144,168),
+  X(153,177), X(154,178), X(155,179), X(156,180), X(157,181), X(158,182),
+  X(159,183), X(160,184), X(169,193), X(170,194), X(171,195), X(172,196),
+  X(173,197), X(174,198), X(175,199), X(176,200), X(185,209), X(186,210),
+  X(187,211), X(188,212), X(189,213), X(190,214), X(191,215), X(192,216),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(105,113), X(106,114), X(107,115), X(108,116), X(109,117),
+  X(110,118), X(111,119), X(112,120), X(121,129), X(122,130), X(123,131),
+  X(124,132), X(125,133), X(126,134), X(127,135), X(128,136), X(137,145),
+  X(138,146), X(139,147), X(140,148), X(141,149), X(142,150), X(143,151),
+  X(144,152), X(153,161), X(154,162), X(155,163), X(156,164), X(157,165),
+  X(158,166), X(159,167), X(160,168), X(169,177), X(170,178), X(171,179),
+  X(172,180), X(173,181), X(174,182), X(175,183), X(176,184), X(185,193),
+  X(186,194), X(187,195), X(188,196), X(189,197), X(190,198), X(191,199),
+  X(192,200), X(201,209), X(202,210), X(203,211), X(204,212), X(205,213),
+  X(206,214), X(207,215), X(208,216), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(147,151), X(148,152),
+  X(153,157), X(154,158), X(155,159), X(156,160), X(161,165), X(162,166),
+  X(163,167), X(164,168), X(169,173), X(170,174), X(171,175), X(172,176),
+  X(177,181), X(178,182), X(179,183), X(180,184), X(185,189), X(186,190),
+  X(187,191), X(188,192), X(193,197), X(194,198), X(195,199), X(196,200),
+  X(201,205), X(202,206), X(203,207), X(204,208), X(209,213), X(210,214),
+  X(211,215), X(212,216), X(217,221), X(218,222), X(5,129), X(6,130), X(7,131),
+  X(8,132), X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146),
+  X(23,147), X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(37,161),
+  X(38,162), X(39,163), X(40,164), X(45,169), X(46,170), X(47,171), X(48,172),
+  X(53,177), X(54,178), X(55,179), X(56,180), X(61,185), X(62,186), X(63,187),
+  X(64,188), X(69,193), X(70,194), X(71,195), X(72,196), X(77,201), X(78,202),
+  X(79,203), X(80,204), X(85,209), X(86,210), X(87,211), X(88,212), X(93,217),
+  X(94,218), X(95,219), X(96,220), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73),
+  X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89),
+  X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100),
+  X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115),
+  X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130),
+  X(71,131), X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145),
+  X(86,146), X(87,147), X(88,148), X(93,153), X(94,154), X(95,155), X(96,156),
+  X(101,161), X(102,162), X(103,163), X(104,164), X(109,169), X(110,170),
+  X(111,171), X(112,172), X(117,177), X(118,178), X(119,179), X(120,180),
+  X(125,185), X(126,186), X(127,187), X(128,188), X(133,193), X(134,194),
+  X(135,195), X(136,196), X(141,201), X(142,202), X(143,203), X(144,204),
+  X(149,209), X(150,210), X(151,211), X(152,212), X(157,217), X(158,218),
+  X(159,219), X(160,220), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105),
+  X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116),
+  X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(151,179),
+  X(152,180), X(157,185), X(158,186), X(159,187), X(160,188), X(165,193),
+  X(166,194), X(167,195), X(168,196), X(173,201), X(174,202), X(175,203),
+  X(176,204), X(181,209), X(182,210), X(183,211), X(184,212), X(189,217),
+  X(190,218), X(191,219), X(192,220), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(173,185), X(174,186),
+  X(175,187), X(176,188), X(181,193), X(182,194), X(183,195), X(184,196),
+  X(189,201), X(190,202), X(191,203), X(192,204), X(197,209), X(198,210),
+  X(199,211), X(200,212), X(205,217), X(206,218), X(207,219), X(208,220), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25),
+  X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41),
+  X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57),
+  X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73),
+  X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89),
+  X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100),
+  X(101,105), X(102,106), X(103,107), X(104,108), X(109,113), X(110,114),
+  X(111,115), X(112,116), X(117,121), X(118,122), X(119,123), X(120,124),
+  X(125,129), X(126,130), X(127,131), X(128,132), X(133,137), X(134,138),
+  X(135,139), X(136,140), X(141,145), X(142,146), X(143,147), X(144,148),
+  X(149,153), X(150,154), X(151,155), X(152,156), X(157,161), X(158,162),
+  X(159,163), X(160,164), X(165,169), X(166,170), X(167,171), X(168,172),
+  X(173,177), X(174,178), X(175,179), X(176,180), X(181,185), X(182,186),
+  X(183,187), X(184,188), X(189,193), X(190,194), X(191,195), X(192,196),
+  X(197,201), X(198,202), X(199,203), X(200,204), X(205,209), X(206,210),
+  X(207,211), X(208,212), X(213,217), X(214,218), X(215,219), X(216,220), X(1,3),
+  X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19),
+  X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35),
+  X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51),
+  X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67),
+  X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83),
+  X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(197,199), X(198,200), X(201,203), X(202,204), X(205,207),
+  X(206,208), X(209,211), X(210,212), X(213,215), X(214,216), X(217,219),
+  X(218,220), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194),
+  X(71,197), X(72,198), X(75,201), X(76,202), X(79,205), X(80,206), X(83,209),
+  X(84,210), X(87,213), X(88,214), X(91,217), X(92,218), X(95,221), X(96,222),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94),
+  X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109),
+  X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122),
+  X(63,125), X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137),
+  X(76,138), X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150),
+  X(91,153), X(92,154), X(95,157), X(96,158), X(99,161), X(100,162), X(103,165),
+  X(104,166), X(107,169), X(108,170), X(111,173), X(112,174), X(115,177),
+  X(116,178), X(119,181), X(120,182), X(123,185), X(124,186), X(127,189),
+  X(128,190), X(131,193), X(132,194), X(135,197), X(136,198), X(139,201),
+  X(140,202), X(143,205), X(144,206), X(147,209), X(148,210), X(151,213),
+  X(152,214), X(155,217), X(156,218), X(159,221), X(160,222), X(3,33), X(4,34),
+  X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50),
+  X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66),
+  X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82),
+  X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(127,157), X(128,158), X(131,161), X(132,162),
+  X(135,165), X(136,166), X(139,169), X(140,170), X(143,173), X(144,174),
+  X(147,177), X(148,178), X(151,181), X(152,182), X(155,185), X(156,186),
+  X(159,189), X(160,190), X(163,193), X(164,194), X(167,197), X(168,198),
+  X(171,201), X(172,202), X(175,205), X(176,206), X(179,209), X(180,210),
+  X(183,213), X(184,214), X(187,217), X(188,218), X(191,221), X(192,222),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(107,121),
+  X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(119,133),
+  X(120,134), X(123,137), X(124,138), X(127,141), X(128,142), X(131,145),
+  X(132,146), X(135,149), X(136,150), X(139,153), X(140,154), X(143,157),
+  X(144,158), X(147,161), X(148,162), X(151,165), X(152,166), X(155,169),
+  X(156,170), X(159,173), X(160,174), X(163,177), X(164,178), X(167,181),
+  X(168,182), X(171,185), X(172,186), X(175,189), X(176,190), X(179,193),
+  X(180,194), X(183,197), X(184,198), X(187,201), X(188,202), X(191,205),
+  X(192,206), X(195,209), X(196,210), X(199,213), X(200,214), X(203,217),
+  X(204,218), X(207,221), X(208,222), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(175,181),
+  X(176,182), X(179,185), X(180,186), X(183,189), X(184,190), X(187,193),
+  X(188,194), X(191,197), X(192,198), X(195,201), X(196,202), X(199,205),
+  X(200,206), X(203,209), X(204,210), X(207,213), X(208,214), X(211,217),
+  X(212,218), X(215,221), X(216,222), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13),
+  X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29),
+  X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45),
+  X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61),
+  X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77),
+  X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93),
+  X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106),
+  X(107,109), X(108,110), X(111,113), X(112,114), X(115,117), X(116,118),
+  X(119,121), X(120,122), X(123,125), X(124,126), X(127,129), X(128,130),
+  X(131,133), X(132,134), X(135,137), X(136,138), X(139,141), X(140,142),
+  X(143,145), X(144,146), X(147,149), X(148,150), X(151,153), X(152,154),
+  X(155,157), X(156,158), X(159,161), X(160,162), X(163,165), X(164,166),
+  X(167,169), X(168,170), X(171,173), X(172,174), X(175,177), X(176,178),
+  X(179,181), X(180,182), X(183,185), X(184,186), X(187,189), X(188,190),
+  X(191,193), X(192,194), X(195,197), X(196,198), X(199,201), X(200,202),
+  X(203,205), X(204,206), X(207,209), X(208,210), X(211,213), X(212,214),
+  X(215,217), X(216,218), X(219,221), X(220,222), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202), X(203,204), X(205,206), X(207,208), X(209,210),
+  X(211,212), X(213,214), X(215,216), X(217,218), X(219,220), X(221,222),
+  X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139), X(14,141),
+  X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153), X(28,155),
+  X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167), X(42,169),
+  X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181), X(56,183),
+  X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195), X(70,197),
+  X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(82,209), X(84,211),
+  X(86,213), X(88,215), X(90,217), X(92,219), X(94,221), X(2,65), X(4,67),
+  X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83),
+  X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99),
+  X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113),
+  X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127),
+  X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141),
+  X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155),
+  X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(124,187), X(126,189), X(128,191),
+  X(130,193), X(132,195), X(134,197), X(136,199), X(138,201), X(140,203),
+  X(142,205), X(144,207), X(146,209), X(148,211), X(150,213), X(152,215),
+  X(154,217), X(156,219), X(158,221), X(2,33), X(4,35), X(6,37), X(8,39),
+  X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55),
+  X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71),
+  X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87),
+  X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101),
+  X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113), X(84,115),
+  X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127), X(98,129),
+  X(100,131), X(102,133), X(104,135), X(106,137), X(108,139), X(110,141),
+  X(112,143), X(114,145), X(116,147), X(118,149), X(120,151), X(122,153),
+  X(124,155), X(126,157), X(128,159), X(130,161), X(132,163), X(134,165),
+  X(136,167), X(138,169), X(140,171), X(142,173), X(144,175), X(146,177),
+  X(148,179), X(150,181), X(152,183), X(154,185), X(156,187), X(158,189),
+  X(160,191), X(162,193), X(164,195), X(166,197), X(168,199), X(170,201),
+  X(172,203), X(174,205), X(176,207), X(178,209), X(180,211), X(182,213),
+  X(184,215), X(186,217), X(188,219), X(190,221), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(170,185),
+  X(172,187), X(174,189), X(176,191), X(178,193), X(180,195), X(182,197),
+  X(184,199), X(186,201), X(188,203), X(190,205), X(192,207), X(194,209),
+  X(196,211), X(198,213), X(200,215), X(202,217), X(204,219), X(206,221), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57),
+  X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73),
+  X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89),
+  X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103),
+  X(98,105), X(100,107), X(102,109), X(104,111), X(106,113), X(108,115),
+  X(110,117), X(112,119), X(114,121), X(116,123), X(118,125), X(120,127),
+  X(122,129), X(124,131), X(126,133), X(128,135), X(130,137), X(132,139),
+  X(134,141), X(136,143), X(138,145), X(140,147), X(142,149), X(144,151),
+  X(146,153), X(148,155), X(150,157), X(152,159), X(154,161), X(156,163),
+  X(158,165), X(160,167), X(162,169), X(164,171), X(166,173), X(168,175),
+  X(170,177), X(172,179), X(174,181), X(176,183), X(178,185), X(180,187),
+  X(182,189), X(184,191), X(186,193), X(188,195), X(190,197), X(192,199),
+  X(194,201), X(196,203), X(198,205), X(200,207), X(202,209), X(204,211),
+  X(206,213), X(208,215), X(210,217), X(212,219), X(214,221), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(130,133), X(132,135), X(134,137),
+  X(136,139), X(138,141), X(140,143), X(142,145), X(144,147), X(146,149),
+  X(148,151), X(150,153), X(152,155), X(154,157), X(156,159), X(158,161),
+  X(160,163), X(162,165), X(164,167), X(166,169), X(168,171), X(170,173),
+  X(172,175), X(174,177), X(176,179), X(178,181), X(180,183), X(182,185),
+  X(184,187), X(186,189), X(188,191), X(190,193), X(192,195), X(194,197),
+  X(196,199), X(198,201), X(200,203), X(202,205), X(204,207), X(206,209),
+  X(208,211), X(210,213), X(212,215), X(214,217), X(216,219), X(218,221), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221)
+};
+S(224) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(1,65), X(2,66),
+  X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74),
+  X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82),
+  X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90),
+  X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98),
+  X(35,99), X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105),
+  X(42,106), X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112),
+  X(49,113), X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119),
+  X(56,120), X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126),
+  X(63,127), X(64,128), X(129,193), X(130,194), X(131,195), X(132,196),
+  X(133,197), X(134,198), X(135,199), X(136,200), X(137,201), X(138,202),
+  X(139,203), X(140,204), X(141,205), X(142,206), X(143,207), X(144,208),
+  X(145,209), X(146,210), X(147,211), X(148,212), X(149,213), X(150,214),
+  X(151,215), X(152,216), X(153,217), X(154,218), X(155,219), X(156,220),
+  X(157,221), X(158,222), X(159,223), X(160,224), X(65,129), X(66,130),
+  X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136), X(73,137),
+  X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143), X(80,144),
+  X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150), X(87,151),
+  X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157), X(94,158),
+  X(95,159), X(96,160), X(97,161), X(98,162), X(99,163), X(100,164), X(101,165),
+  X(102,166), X(103,167), X(104,168), X(105,169), X(106,170), X(107,171),
+  X(108,172), X(109,173), X(110,174), X(111,175), X(112,176), X(113,177),
+  X(114,178), X(115,179), X(116,180), X(117,181), X(118,182), X(119,183),
+  X(120,184), X(121,185), X(122,186), X(123,187), X(124,188), X(125,189),
+  X(126,190), X(127,191), X(128,192), X(1,33), X(2,34), X(3,35), X(4,36),
+  X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44),
+  X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52),
+  X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60),
+  X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(135,167), X(136,168), X(137,169), X(138,170), X(139,171),
+  X(140,172), X(141,173), X(142,174), X(143,175), X(144,176), X(145,177),
+  X(146,178), X(147,179), X(148,180), X(149,181), X(150,182), X(151,183),
+  X(152,184), X(153,185), X(154,186), X(155,187), X(156,188), X(157,189),
+  X(158,190), X(159,191), X(160,192), X(33,129), X(34,130), X(35,131), X(36,132),
+  X(37,133), X(38,134), X(39,135), X(40,136), X(41,137), X(42,138), X(43,139),
+  X(44,140), X(45,141), X(46,142), X(47,143), X(48,144), X(49,145), X(50,146),
+  X(51,147), X(52,148), X(53,149), X(54,150), X(55,151), X(56,152), X(57,153),
+  X(58,154), X(59,155), X(60,156), X(61,157), X(62,158), X(63,159), X(64,160),
+  X(97,193), X(98,194), X(99,195), X(100,196), X(101,197), X(102,198),
+  X(103,199), X(104,200), X(105,201), X(106,202), X(107,203), X(108,204),
+  X(109,205), X(110,206), X(111,207), X(112,208), X(113,209), X(114,210),
+  X(115,211), X(116,212), X(117,213), X(118,214), X(119,215), X(120,216),
+  X(121,217), X(122,218), X(123,219), X(124,220), X(125,221), X(126,222),
+  X(127,223), X(128,224), X(33,65), X(34,66), X(35,67), X(36,68), X(37,69),
+  X(38,70), X(39,71), X(40,72), X(41,73), X(42,74), X(43,75), X(44,76), X(45,77),
+  X(46,78), X(47,79), X(48,80), X(49,81), X(50,82), X(51,83), X(52,84), X(53,85),
+  X(54,86), X(55,87), X(56,88), X(57,89), X(58,90), X(59,91), X(60,92), X(61,93),
+  X(62,94), X(63,95), X(64,96), X(97,129), X(98,130), X(99,131), X(100,132),
+  X(101,133), X(102,134), X(103,135), X(104,136), X(105,137), X(106,138),
+  X(107,139), X(108,140), X(109,141), X(110,142), X(111,143), X(112,144),
+  X(113,145), X(114,146), X(115,147), X(116,148), X(117,149), X(118,150),
+  X(119,151), X(120,152), X(121,153), X(122,154), X(123,155), X(124,156),
+  X(125,157), X(126,158), X(127,159), X(128,160), X(161,193), X(162,194),
+  X(163,195), X(164,196), X(165,197), X(166,198), X(167,199), X(168,200),
+  X(169,201), X(170,202), X(171,203), X(172,204), X(173,205), X(174,206),
+  X(175,207), X(176,208), X(177,209), X(178,210), X(179,211), X(180,212),
+  X(181,213), X(182,214), X(183,215), X(184,216), X(185,217), X(186,218),
+  X(187,219), X(188,220), X(189,221), X(190,222), X(191,223), X(192,224),
+  X(1,17), X(2,18), X(3,19), X(4,20), X(5,21), X(6,22), X(7,23), X(8,24),
+  X(9,25), X(10,26), X(11,27), X(12,28), X(13,29), X(14,30), X(15,31), X(16,32),
+  X(33,49), X(34,50), X(35,51), X(36,52), X(37,53), X(38,54), X(39,55), X(40,56),
+  X(41,57), X(42,58), X(43,59), X(44,60), X(45,61), X(46,62), X(47,63), X(48,64),
+  X(65,81), X(66,82), X(67,83), X(68,84), X(69,85), X(70,86), X(71,87), X(72,88),
+  X(73,89), X(74,90), X(75,91), X(76,92), X(77,93), X(78,94), X(79,95), X(80,96),
+  X(97,113), X(98,114), X(99,115), X(100,116), X(101,117), X(102,118),
+  X(103,119), X(104,120), X(105,121), X(106,122), X(107,123), X(108,124),
+  X(109,125), X(110,126), X(111,127), X(112,128), X(129,145), X(130,146),
+  X(131,147), X(132,148), X(133,149), X(134,150), X(135,151), X(136,152),
+  X(137,153), X(138,154), X(139,155), X(140,156), X(141,157), X(142,158),
+  X(143,159), X(144,160), X(161,177), X(162,178), X(163,179), X(164,180),
+  X(165,181), X(166,182), X(167,183), X(168,184), X(169,185), X(170,186),
+  X(171,187), X(172,188), X(173,189), X(174,190), X(175,191), X(176,192),
+  X(193,209), X(194,210), X(195,211), X(196,212), X(197,213), X(198,214),
+  X(199,215), X(200,216), X(201,217), X(202,218), X(203,219), X(204,220),
+  X(205,221), X(206,222), X(207,223), X(208,224), X(17,129), X(18,130),
+  X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136), X(25,137),
+  X(26,138), X(27,139), X(28,140), X(29,141), X(30,142), X(31,143), X(32,144),
+  X(49,161), X(50,162), X(51,163), X(52,164), X(53,165), X(54,166), X(55,167),
+  X(56,168), X(57,169), X(58,170), X(59,171), X(60,172), X(61,173), X(62,174),
+  X(63,175), X(64,176), X(81,193), X(82,194), X(83,195), X(84,196), X(85,197),
+  X(86,198), X(87,199), X(88,200), X(89,201), X(90,202), X(91,203), X(92,204),
+  X(93,205), X(94,206), X(95,207), X(96,208), X(17,65), X(18,66), X(19,67),
+  X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75),
+  X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(119,167), X(120,168), X(121,169), X(122,170), X(123,171),
+  X(124,172), X(125,173), X(126,174), X(127,175), X(128,176), X(145,193),
+  X(146,194), X(147,195), X(148,196), X(149,197), X(150,198), X(151,199),
+  X(152,200), X(153,201), X(154,202), X(155,203), X(156,204), X(157,205),
+  X(158,206), X(159,207), X(160,208), X(17,33), X(18,34), X(19,35), X(20,36),
+  X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44),
+  X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68),
+  X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76),
+  X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99),
+  X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106),
+  X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129),
+  X(114,130), X(115,131), X(116,132), X(117,133), X(118,134), X(119,135),
+  X(120,136), X(121,137), X(122,138), X(123,139), X(124,140), X(125,141),
+  X(126,142), X(127,143), X(128,144), X(145,161), X(146,162), X(147,163),
+  X(148,164), X(149,165), X(150,166), X(151,167), X(152,168), X(153,169),
+  X(154,170), X(155,171), X(156,172), X(157,173), X(158,174), X(159,175),
+  X(160,176), X(177,193), X(178,194), X(179,195), X(180,196), X(181,197),
+  X(182,198), X(183,199), X(184,200), X(185,201), X(186,202), X(187,203),
+  X(188,204), X(189,205), X(190,206), X(191,207), X(192,208), X(1,9), X(2,10),
+  X(3,11), X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26),
+  X(19,27), X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42),
+  X(35,43), X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58),
+  X(51,59), X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74),
+  X(67,75), X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90),
+  X(83,91), X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105),
+  X(98,106), X(99,107), X(100,108), X(101,109), X(102,110), X(103,111),
+  X(104,112), X(113,121), X(114,122), X(115,123), X(116,124), X(117,125),
+  X(118,126), X(119,127), X(120,128), X(129,137), X(130,138), X(131,139),
+  X(132,140), X(133,141), X(134,142), X(135,143), X(136,144), X(145,153),
+  X(146,154), X(147,155), X(148,156), X(149,157), X(150,158), X(151,159),
+  X(152,160), X(161,169), X(162,170), X(163,171), X(164,172), X(165,173),
+  X(166,174), X(167,175), X(168,176), X(177,185), X(178,186), X(179,187),
+  X(180,188), X(181,189), X(182,190), X(183,191), X(184,192), X(193,201),
+  X(194,202), X(195,203), X(196,204), X(197,205), X(198,206), X(199,207),
+  X(200,208), X(209,217), X(210,218), X(211,219), X(212,220), X(213,221),
+  X(214,222), X(215,223), X(216,224), X(9,129), X(10,130), X(11,131), X(12,132),
+  X(13,133), X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147),
+  X(28,148), X(29,149), X(30,150), X(31,151), X(32,152), X(41,161), X(42,162),
+  X(43,163), X(44,164), X(45,165), X(46,166), X(47,167), X(48,168), X(57,177),
+  X(58,178), X(59,179), X(60,180), X(61,181), X(62,182), X(63,183), X(64,184),
+  X(73,193), X(74,194), X(75,195), X(76,196), X(77,197), X(78,198), X(79,199),
+  X(80,200), X(89,209), X(90,210), X(91,211), X(92,212), X(93,213), X(94,214),
+  X(95,215), X(96,216), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115),
+  X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130),
+  X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136), X(89,145),
+  X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151), X(96,152),
+  X(105,161), X(106,162), X(107,163), X(108,164), X(109,165), X(110,166),
+  X(111,167), X(112,168), X(121,177), X(122,178), X(123,179), X(124,180),
+  X(125,181), X(126,182), X(127,183), X(128,184), X(137,193), X(138,194),
+  X(139,195), X(140,196), X(141,197), X(142,198), X(143,199), X(144,200),
+  X(153,209), X(154,210), X(155,211), X(156,212), X(157,213), X(158,214),
+  X(159,215), X(160,216), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37),
+  X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53),
+  X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69),
+  X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85),
+  X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100),
+  X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115),
+  X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130),
+  X(107,131), X(108,132), X(109,133), X(110,134), X(111,135), X(112,136),
+  X(121,145), X(122,146), X(123,147), X(124,148), X(125,149), X(126,150),
+  X(127,151), X(128,152), X(137,161), X(138,162), X(139,163), X(140,164),
+  X(141,165), X(142,166), X(143,167), X(144,168), X(153,177), X(154,178),
+  X(155,179), X(156,180), X(157,181), X(158,182), X(159,183), X(160,184),
+  X(169,193), X(170,194), X(171,195), X(172,196), X(173,197), X(174,198),
+  X(175,199), X(176,200), X(185,209), X(186,210), X(187,211), X(188,212),
+  X(189,213), X(190,214), X(191,215), X(192,216), X(9,17), X(10,18), X(11,19),
+  X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35),
+  X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51),
+  X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67),
+  X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83),
+  X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(125,133), X(126,134),
+  X(127,135), X(128,136), X(137,145), X(138,146), X(139,147), X(140,148),
+  X(141,149), X(142,150), X(143,151), X(144,152), X(153,161), X(154,162),
+  X(155,163), X(156,164), X(157,165), X(158,166), X(159,167), X(160,168),
+  X(169,177), X(170,178), X(171,179), X(172,180), X(173,181), X(174,182),
+  X(175,183), X(176,184), X(185,193), X(186,194), X(187,195), X(188,196),
+  X(189,197), X(190,198), X(191,199), X(192,200), X(201,209), X(202,210),
+  X(203,211), X(204,212), X(205,213), X(206,214), X(207,215), X(208,216), X(1,5),
+  X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15), X(12,16), X(17,21),
+  X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31), X(28,32), X(33,37),
+  X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47), X(44,48), X(49,53),
+  X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63), X(60,64), X(65,69),
+  X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79), X(76,80), X(81,85),
+  X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95), X(92,96),
+  X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(185,189), X(186,190), X(187,191), X(188,192),
+  X(193,197), X(194,198), X(195,199), X(196,200), X(201,205), X(202,206),
+  X(203,207), X(204,208), X(209,213), X(210,214), X(211,215), X(212,216),
+  X(217,221), X(218,222), X(219,223), X(220,224), X(5,129), X(6,130), X(7,131),
+  X(8,132), X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146),
+  X(23,147), X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(37,161),
+  X(38,162), X(39,163), X(40,164), X(45,169), X(46,170), X(47,171), X(48,172),
+  X(53,177), X(54,178), X(55,179), X(56,180), X(61,185), X(62,186), X(63,187),
+  X(64,188), X(69,193), X(70,194), X(71,195), X(72,196), X(77,201), X(78,202),
+  X(79,203), X(80,204), X(85,209), X(86,210), X(87,211), X(88,212), X(93,217),
+  X(94,218), X(95,219), X(96,220), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73),
+  X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89),
+  X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99), X(40,100),
+  X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114), X(55,115),
+  X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129), X(70,130),
+  X(71,131), X(72,132), X(77,137), X(78,138), X(79,139), X(80,140), X(85,145),
+  X(86,146), X(87,147), X(88,148), X(93,153), X(94,154), X(95,155), X(96,156),
+  X(101,161), X(102,162), X(103,163), X(104,164), X(109,169), X(110,170),
+  X(111,171), X(112,172), X(117,177), X(118,178), X(119,179), X(120,180),
+  X(125,185), X(126,186), X(127,187), X(128,188), X(133,193), X(134,194),
+  X(135,195), X(136,196), X(141,201), X(142,202), X(143,203), X(144,204),
+  X(149,209), X(150,210), X(151,211), X(152,212), X(157,217), X(158,218),
+  X(159,219), X(160,220), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105),
+  X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116),
+  X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(151,179),
+  X(152,180), X(157,185), X(158,186), X(159,187), X(160,188), X(165,193),
+  X(166,194), X(167,195), X(168,196), X(173,201), X(174,202), X(175,203),
+  X(176,204), X(181,209), X(182,210), X(183,211), X(184,212), X(189,217),
+  X(190,218), X(191,219), X(192,220), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(173,185), X(174,186),
+  X(175,187), X(176,188), X(181,193), X(182,194), X(183,195), X(184,196),
+  X(189,201), X(190,202), X(191,203), X(192,204), X(197,209), X(198,210),
+  X(199,211), X(200,212), X(205,217), X(206,218), X(207,219), X(208,220), X(5,9),
+  X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25),
+  X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41),
+  X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57),
+  X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73),
+  X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89),
+  X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100),
+  X(101,105), X(102,106), X(103,107), X(104,108), X(109,113), X(110,114),
+  X(111,115), X(112,116), X(117,121), X(118,122), X(119,123), X(120,124),
+  X(125,129), X(126,130), X(127,131), X(128,132), X(133,137), X(134,138),
+  X(135,139), X(136,140), X(141,145), X(142,146), X(143,147), X(144,148),
+  X(149,153), X(150,154), X(151,155), X(152,156), X(157,161), X(158,162),
+  X(159,163), X(160,164), X(165,169), X(166,170), X(167,171), X(168,172),
+  X(173,177), X(174,178), X(175,179), X(176,180), X(181,185), X(182,186),
+  X(183,187), X(184,188), X(189,193), X(190,194), X(191,195), X(192,196),
+  X(197,201), X(198,202), X(199,203), X(200,204), X(205,209), X(206,210),
+  X(207,211), X(208,212), X(213,217), X(214,218), X(215,219), X(216,220), X(1,3),
+  X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19),
+  X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35),
+  X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51),
+  X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67),
+  X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83),
+  X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(197,199), X(198,200), X(201,203), X(202,204), X(205,207),
+  X(206,208), X(209,211), X(210,212), X(213,215), X(214,216), X(217,219),
+  X(218,220), X(221,223), X(222,224), X(3,129), X(4,130), X(7,133), X(8,134),
+  X(11,137), X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149),
+  X(24,150), X(27,153), X(28,154), X(31,157), X(32,158), X(35,161), X(36,162),
+  X(39,165), X(40,166), X(43,169), X(44,170), X(47,173), X(48,174), X(51,177),
+  X(52,178), X(55,181), X(56,182), X(59,185), X(60,186), X(63,189), X(64,190),
+  X(67,193), X(68,194), X(71,197), X(72,198), X(75,201), X(76,202), X(79,205),
+  X(80,206), X(83,209), X(84,210), X(87,213), X(88,214), X(91,217), X(92,218),
+  X(95,221), X(96,222), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74),
+  X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90),
+  X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105),
+  X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118),
+  X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130), X(71,133),
+  X(72,134), X(75,137), X(76,138), X(79,141), X(80,142), X(83,145), X(84,146),
+  X(87,149), X(88,150), X(91,153), X(92,154), X(95,157), X(96,158), X(99,161),
+  X(100,162), X(103,165), X(104,166), X(107,169), X(108,170), X(111,173),
+  X(112,174), X(115,177), X(116,178), X(119,181), X(120,182), X(123,185),
+  X(124,186), X(127,189), X(128,190), X(131,193), X(132,194), X(135,197),
+  X(136,198), X(139,201), X(140,202), X(143,205), X(144,206), X(147,209),
+  X(148,210), X(151,213), X(152,214), X(155,217), X(156,218), X(159,221),
+  X(160,222), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45),
+  X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61),
+  X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77),
+  X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93),
+  X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106),
+  X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121),
+  X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(127,157), X(128,158),
+  X(131,161), X(132,162), X(135,165), X(136,166), X(139,169), X(140,170),
+  X(143,173), X(144,174), X(147,177), X(148,178), X(151,181), X(152,182),
+  X(155,185), X(156,186), X(159,189), X(160,190), X(163,193), X(164,194),
+  X(167,197), X(168,198), X(171,201), X(172,202), X(175,205), X(176,206),
+  X(179,209), X(180,210), X(183,213), X(184,214), X(187,217), X(188,218),
+  X(191,221), X(192,222), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26),
+  X(15,29), X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42),
+  X(31,45), X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58),
+  X(47,61), X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74),
+  X(63,77), X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90),
+  X(79,93), X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105),
+  X(92,106), X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166),
+  X(155,169), X(156,170), X(159,173), X(160,174), X(163,177), X(164,178),
+  X(167,181), X(168,182), X(171,185), X(172,186), X(175,189), X(176,190),
+  X(179,193), X(180,194), X(183,197), X(184,198), X(187,201), X(188,202),
+  X(191,205), X(192,206), X(195,209), X(196,210), X(199,213), X(200,214),
+  X(203,217), X(204,218), X(207,221), X(208,222), X(3,9), X(4,10), X(7,13),
+  X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29),
+  X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45),
+  X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61),
+  X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77),
+  X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93),
+  X(88,94), X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106),
+  X(103,109), X(104,110), X(107,113), X(108,114), X(111,117), X(112,118),
+  X(115,121), X(116,122), X(119,125), X(120,126), X(123,129), X(124,130),
+  X(127,133), X(128,134), X(131,137), X(132,138), X(135,141), X(136,142),
+  X(139,145), X(140,146), X(143,149), X(144,150), X(147,153), X(148,154),
+  X(151,157), X(152,158), X(155,161), X(156,162), X(159,165), X(160,166),
+  X(163,169), X(164,170), X(167,173), X(168,174), X(171,177), X(172,178),
+  X(175,181), X(176,182), X(179,185), X(180,186), X(183,189), X(184,190),
+  X(187,193), X(188,194), X(191,197), X(192,198), X(195,201), X(196,202),
+  X(199,205), X(200,206), X(203,209), X(204,210), X(207,213), X(208,214),
+  X(211,217), X(212,218), X(215,221), X(216,222), X(3,5), X(4,6), X(7,9),
+  X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25),
+  X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41),
+  X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57),
+  X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73),
+  X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89),
+  X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101), X(100,102),
+  X(103,105), X(104,106), X(107,109), X(108,110), X(111,113), X(112,114),
+  X(115,117), X(116,118), X(119,121), X(120,122), X(123,125), X(124,126),
+  X(127,129), X(128,130), X(131,133), X(132,134), X(135,137), X(136,138),
+  X(139,141), X(140,142), X(143,145), X(144,146), X(147,149), X(148,150),
+  X(151,153), X(152,154), X(155,157), X(156,158), X(159,161), X(160,162),
+  X(163,165), X(164,166), X(167,169), X(168,170), X(171,173), X(172,174),
+  X(175,177), X(176,178), X(179,181), X(180,182), X(183,185), X(184,186),
+  X(187,189), X(188,190), X(191,193), X(192,194), X(195,197), X(196,198),
+  X(199,201), X(200,202), X(203,205), X(204,206), X(207,209), X(208,210),
+  X(211,213), X(212,214), X(215,217), X(216,218), X(219,221), X(220,222), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(221,222), X(223,224), X(2,129), X(4,131), X(6,133), X(8,135),
+  X(10,137), X(12,139), X(14,141), X(16,143), X(18,145), X(20,147), X(22,149),
+  X(24,151), X(26,153), X(28,155), X(30,157), X(32,159), X(34,161), X(36,163),
+  X(38,165), X(40,167), X(42,169), X(44,171), X(46,173), X(48,175), X(50,177),
+  X(52,179), X(54,181), X(56,183), X(58,185), X(60,187), X(62,189), X(64,191),
+  X(66,193), X(68,195), X(70,197), X(72,199), X(74,201), X(76,203), X(78,205),
+  X(80,207), X(82,209), X(84,211), X(86,213), X(88,215), X(90,217), X(92,219),
+  X(94,221), X(96,223), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75),
+  X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91),
+  X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105),
+  X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119),
+  X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133),
+  X(72,135), X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147),
+  X(86,149), X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161),
+  X(100,163), X(102,165), X(104,167), X(106,169), X(108,171), X(110,173),
+  X(112,175), X(114,177), X(116,179), X(118,181), X(120,183), X(122,185),
+  X(124,187), X(126,189), X(128,191), X(130,193), X(132,195), X(134,197),
+  X(136,199), X(138,201), X(140,203), X(142,205), X(144,207), X(146,209),
+  X(148,211), X(150,213), X(152,215), X(154,217), X(156,219), X(158,221),
+  X(160,223), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45),
+  X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61),
+  X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77),
+  X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93),
+  X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107),
+  X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121),
+  X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(146,177), X(148,179), X(150,181), X(152,183),
+  X(154,185), X(156,187), X(158,189), X(160,191), X(162,193), X(164,195),
+  X(166,197), X(168,199), X(170,201), X(172,203), X(174,205), X(176,207),
+  X(178,209), X(180,211), X(182,213), X(184,215), X(186,217), X(188,219),
+  X(190,221), X(192,223), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27),
+  X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43),
+  X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59),
+  X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75),
+  X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91),
+  X(78,93), X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105),
+  X(92,107), X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(160,175), X(162,177), X(164,179),
+  X(166,181), X(168,183), X(170,185), X(172,187), X(174,189), X(176,191),
+  X(178,193), X(180,195), X(182,197), X(184,199), X(186,201), X(188,203),
+  X(190,205), X(192,207), X(194,209), X(196,211), X(198,213), X(200,215),
+  X(202,217), X(204,219), X(206,221), X(208,223), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45),
+  X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61),
+  X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77),
+  X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93),
+  X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107),
+  X(102,109), X(104,111), X(106,113), X(108,115), X(110,117), X(112,119),
+  X(114,121), X(116,123), X(118,125), X(120,127), X(122,129), X(124,131),
+  X(126,133), X(128,135), X(130,137), X(132,139), X(134,141), X(136,143),
+  X(138,145), X(140,147), X(142,149), X(144,151), X(146,153), X(148,155),
+  X(150,157), X(152,159), X(154,161), X(156,163), X(158,165), X(160,167),
+  X(162,169), X(164,171), X(166,173), X(168,175), X(170,177), X(172,179),
+  X(174,181), X(176,183), X(178,185), X(180,187), X(182,189), X(184,191),
+  X(186,193), X(188,195), X(190,197), X(192,199), X(194,201), X(196,203),
+  X(198,205), X(200,207), X(202,209), X(204,211), X(206,213), X(208,215),
+  X(210,217), X(212,219), X(214,221), X(216,223), X(2,5), X(4,7), X(6,9),
+  X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25),
+  X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41),
+  X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57),
+  X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73),
+  X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89),
+  X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101), X(100,103),
+  X(102,105), X(104,107), X(106,109), X(108,111), X(110,113), X(112,115),
+  X(114,117), X(116,119), X(118,121), X(120,123), X(122,125), X(124,127),
+  X(126,129), X(128,131), X(130,133), X(132,135), X(134,137), X(136,139),
+  X(138,141), X(140,143), X(142,145), X(144,147), X(146,149), X(148,151),
+  X(150,153), X(152,155), X(154,157), X(156,159), X(158,161), X(160,163),
+  X(162,165), X(164,167), X(166,169), X(168,171), X(170,173), X(172,175),
+  X(174,177), X(176,179), X(178,181), X(180,183), X(182,185), X(184,187),
+  X(186,189), X(188,191), X(190,193), X(192,195), X(194,197), X(196,199),
+  X(198,201), X(200,203), X(202,205), X(204,207), X(206,209), X(208,211),
+  X(210,213), X(212,215), X(214,217), X(216,219), X(218,221), X(220,223), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223)
+};
+S(226) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(97,225), X(98,226),
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124),
+  X(61,125), X(62,126), X(63,127), X(64,128), X(129,193), X(130,194), X(131,195),
+  X(132,196), X(133,197), X(134,198), X(135,199), X(136,200), X(137,201),
+  X(138,202), X(139,203), X(140,204), X(141,205), X(142,206), X(143,207),
+  X(144,208), X(145,209), X(146,210), X(147,211), X(148,212), X(149,213),
+  X(150,214), X(151,215), X(152,216), X(153,217), X(154,218), X(155,219),
+  X(156,220), X(157,221), X(158,222), X(159,223), X(160,224), X(161,225),
+  X(162,226), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134),
+  X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141),
+  X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148),
+  X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154), X(91,155),
+  X(92,156), X(93,157), X(94,158), X(95,159), X(96,160), X(97,161), X(98,162),
+  X(99,163), X(100,164), X(101,165), X(102,166), X(103,167), X(104,168),
+  X(105,169), X(106,170), X(107,171), X(108,172), X(109,173), X(110,174),
+  X(111,175), X(112,176), X(113,177), X(114,178), X(115,179), X(116,180),
+  X(117,181), X(118,182), X(119,183), X(120,184), X(121,185), X(122,186),
+  X(123,187), X(124,188), X(125,189), X(126,190), X(127,191), X(128,192),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103),
+  X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110),
+  X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117),
+  X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124),
+  X(93,125), X(94,126), X(95,127), X(96,128), X(129,161), X(130,162), X(131,163),
+  X(132,164), X(133,165), X(134,166), X(135,167), X(136,168), X(137,169),
+  X(138,170), X(139,171), X(140,172), X(141,173), X(142,174), X(143,175),
+  X(144,176), X(145,177), X(146,178), X(147,179), X(148,180), X(149,181),
+  X(150,182), X(151,183), X(152,184), X(153,185), X(154,186), X(155,187),
+  X(156,188), X(157,189), X(158,190), X(159,191), X(160,192), X(193,225),
+  X(194,226), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(119,215), X(120,216), X(121,217), X(122,218),
+  X(123,219), X(124,220), X(125,221), X(126,222), X(127,223), X(128,224),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(165,197), X(166,198), X(167,199), X(168,200), X(169,201), X(170,202),
+  X(171,203), X(172,204), X(173,205), X(174,206), X(175,207), X(176,208),
+  X(177,209), X(178,210), X(179,211), X(180,212), X(181,213), X(182,214),
+  X(183,215), X(184,216), X(185,217), X(186,218), X(187,219), X(188,220),
+  X(189,221), X(190,222), X(191,223), X(192,224), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(201,217), X(202,218), X(203,219), X(204,220), X(205,221), X(206,222),
+  X(207,223), X(208,224), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163),
+  X(52,164), X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170),
+  X(59,171), X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(81,193),
+  X(82,194), X(83,195), X(84,196), X(85,197), X(86,198), X(87,199), X(88,200),
+  X(89,201), X(90,202), X(91,203), X(92,204), X(93,205), X(94,206), X(95,207),
+  X(96,208), X(113,225), X(114,226), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(119,167), X(120,168), X(121,169), X(122,170), X(123,171),
+  X(124,172), X(125,173), X(126,174), X(127,175), X(128,176), X(145,193),
+  X(146,194), X(147,195), X(148,196), X(149,197), X(150,198), X(151,199),
+  X(152,200), X(153,201), X(154,202), X(155,203), X(156,204), X(157,205),
+  X(158,206), X(159,207), X(160,208), X(177,225), X(178,226), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(117,133), X(118,134),
+  X(119,135), X(120,136), X(121,137), X(122,138), X(123,139), X(124,140),
+  X(125,141), X(126,142), X(127,143), X(128,144), X(145,161), X(146,162),
+  X(147,163), X(148,164), X(149,165), X(150,166), X(151,167), X(152,168),
+  X(153,169), X(154,170), X(155,171), X(156,172), X(157,173), X(158,174),
+  X(159,175), X(160,176), X(177,193), X(178,194), X(179,195), X(180,196),
+  X(181,197), X(182,198), X(183,199), X(184,200), X(185,201), X(186,202),
+  X(187,203), X(188,204), X(189,205), X(190,206), X(191,207), X(192,208),
+  X(209,225), X(210,226), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109),
+  X(102,110), X(103,111), X(104,112), X(113,121), X(114,122), X(115,123),
+  X(116,124), X(117,125), X(118,126), X(119,127), X(120,128), X(129,137),
+  X(130,138), X(131,139), X(132,140), X(133,141), X(134,142), X(135,143),
+  X(136,144), X(145,153), X(146,154), X(147,155), X(148,156), X(149,157),
+  X(150,158), X(151,159), X(152,160), X(161,169), X(162,170), X(163,171),
+  X(164,172), X(165,173), X(166,174), X(167,175), X(168,176), X(177,185),
+  X(178,186), X(179,187), X(180,188), X(181,189), X(182,190), X(183,191),
+  X(184,192), X(193,201), X(194,202), X(195,203), X(196,204), X(197,205),
+  X(198,206), X(199,207), X(200,208), X(209,217), X(210,218), X(211,219),
+  X(212,220), X(213,221), X(214,222), X(215,223), X(216,224), X(9,129),
+  X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135), X(16,136),
+  X(25,145), X(26,146), X(27,147), X(28,148), X(29,149), X(30,150), X(31,151),
+  X(32,152), X(41,161), X(42,162), X(43,163), X(44,164), X(45,165), X(46,166),
+  X(47,167), X(48,168), X(57,177), X(58,178), X(59,179), X(60,180), X(61,181),
+  X(62,182), X(63,183), X(64,184), X(73,193), X(74,194), X(75,195), X(76,196),
+  X(77,197), X(78,198), X(79,199), X(80,200), X(89,209), X(90,210), X(91,211),
+  X(92,212), X(93,213), X(94,214), X(95,215), X(96,216), X(105,225), X(106,226),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72),
+  X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88),
+  X(41,97), X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103),
+  X(48,104), X(57,113), X(58,114), X(59,115), X(60,116), X(61,117), X(62,118),
+  X(63,119), X(64,120), X(73,129), X(74,130), X(75,131), X(76,132), X(77,133),
+  X(78,134), X(79,135), X(80,136), X(89,145), X(90,146), X(91,147), X(92,148),
+  X(93,149), X(94,150), X(95,151), X(96,152), X(105,161), X(106,162), X(107,163),
+  X(108,164), X(109,165), X(110,166), X(111,167), X(112,168), X(121,177),
+  X(122,178), X(123,179), X(124,180), X(125,181), X(126,182), X(127,183),
+  X(128,184), X(137,193), X(138,194), X(139,195), X(140,196), X(141,197),
+  X(142,198), X(143,199), X(144,200), X(153,209), X(154,210), X(155,211),
+  X(156,212), X(157,213), X(158,214), X(159,215), X(160,216), X(169,225),
+  X(170,226), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38),
+  X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54),
+  X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70),
+  X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86),
+  X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100), X(77,101),
+  X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115), X(92,116),
+  X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130), X(107,131),
+  X(108,132), X(109,133), X(110,134), X(111,135), X(112,136), X(121,145),
+  X(122,146), X(123,147), X(124,148), X(125,149), X(126,150), X(127,151),
+  X(128,152), X(137,161), X(138,162), X(139,163), X(140,164), X(141,165),
+  X(142,166), X(143,167), X(144,168), X(153,177), X(154,178), X(155,179),
+  X(156,180), X(157,181), X(158,182), X(159,183), X(160,184), X(169,193),
+  X(170,194), X(171,195), X(172,196), X(173,197), X(174,198), X(175,199),
+  X(176,200), X(185,209), X(186,210), X(187,211), X(188,212), X(189,213),
+  X(190,214), X(191,215), X(192,216), X(201,225), X(202,226), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113),
+  X(106,114), X(107,115), X(108,116), X(109,117), X(110,118), X(111,119),
+  X(112,120), X(121,129), X(122,130), X(123,131), X(124,132), X(125,133),
+  X(126,134), X(127,135), X(128,136), X(137,145), X(138,146), X(139,147),
+  X(140,148), X(141,149), X(142,150), X(143,151), X(144,152), X(153,161),
+  X(154,162), X(155,163), X(156,164), X(157,165), X(158,166), X(159,167),
+  X(160,168), X(169,177), X(170,178), X(171,179), X(172,180), X(173,181),
+  X(174,182), X(175,183), X(176,184), X(185,193), X(186,194), X(187,195),
+  X(188,196), X(189,197), X(190,198), X(191,199), X(192,200), X(201,209),
+  X(202,210), X(203,211), X(204,212), X(205,213), X(206,214), X(207,215),
+  X(208,216), X(217,225), X(218,226), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(147,151), X(148,152),
+  X(153,157), X(154,158), X(155,159), X(156,160), X(161,165), X(162,166),
+  X(163,167), X(164,168), X(169,173), X(170,174), X(171,175), X(172,176),
+  X(177,181), X(178,182), X(179,183), X(180,184), X(185,189), X(186,190),
+  X(187,191), X(188,192), X(193,197), X(194,198), X(195,199), X(196,200),
+  X(201,205), X(202,206), X(203,207), X(204,208), X(209,213), X(210,214),
+  X(211,215), X(212,216), X(217,221), X(218,222), X(219,223), X(220,224),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153), X(30,154),
+  X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164), X(45,169),
+  X(46,170), X(47,171), X(48,172), X(53,177), X(54,178), X(55,179), X(56,180),
+  X(61,185), X(62,186), X(63,187), X(64,188), X(69,193), X(70,194), X(71,195),
+  X(72,196), X(77,201), X(78,202), X(79,203), X(80,204), X(85,209), X(86,210),
+  X(87,211), X(88,212), X(93,217), X(94,218), X(95,219), X(96,220), X(101,225),
+  X(102,226), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147),
+  X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162),
+  X(103,163), X(104,164), X(109,169), X(110,170), X(111,171), X(112,172),
+  X(117,177), X(118,178), X(119,179), X(120,180), X(125,185), X(126,186),
+  X(127,187), X(128,188), X(133,193), X(134,194), X(135,195), X(136,196),
+  X(141,201), X(142,202), X(143,203), X(144,204), X(149,209), X(150,210),
+  X(151,211), X(152,212), X(157,217), X(158,218), X(159,219), X(160,220),
+  X(165,225), X(166,226), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105),
+  X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116),
+  X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(151,179),
+  X(152,180), X(157,185), X(158,186), X(159,187), X(160,188), X(165,193),
+  X(166,194), X(167,195), X(168,196), X(173,201), X(174,202), X(175,203),
+  X(176,204), X(181,209), X(182,210), X(183,211), X(184,212), X(189,217),
+  X(190,218), X(191,219), X(192,220), X(197,225), X(198,226), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(143,155), X(144,156), X(149,161),
+  X(150,162), X(151,163), X(152,164), X(157,169), X(158,170), X(159,171),
+  X(160,172), X(165,177), X(166,178), X(167,179), X(168,180), X(173,185),
+  X(174,186), X(175,187), X(176,188), X(181,193), X(182,194), X(183,195),
+  X(184,196), X(189,201), X(190,202), X(191,203), X(192,204), X(197,209),
+  X(198,210), X(199,211), X(200,212), X(205,217), X(206,218), X(207,219),
+  X(208,220), X(213,225), X(214,226), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(149,153), X(150,154), X(151,155),
+  X(152,156), X(157,161), X(158,162), X(159,163), X(160,164), X(165,169),
+  X(166,170), X(167,171), X(168,172), X(173,177), X(174,178), X(175,179),
+  X(176,180), X(181,185), X(182,186), X(183,187), X(184,188), X(189,193),
+  X(190,194), X(191,195), X(192,196), X(197,201), X(198,202), X(199,203),
+  X(200,204), X(205,209), X(206,210), X(207,211), X(208,212), X(213,217),
+  X(214,218), X(215,219), X(216,220), X(221,225), X(222,226), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(197,199), X(198,200), X(201,203), X(202,204), X(205,207),
+  X(206,208), X(209,211), X(210,212), X(213,215), X(214,216), X(217,219),
+  X(218,220), X(221,223), X(222,224), X(3,129), X(4,130), X(7,133), X(8,134),
+  X(11,137), X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149),
+  X(24,150), X(27,153), X(28,154), X(31,157), X(32,158), X(35,161), X(36,162),
+  X(39,165), X(40,166), X(43,169), X(44,170), X(47,173), X(48,174), X(51,177),
+  X(52,178), X(55,181), X(56,182), X(59,185), X(60,186), X(63,189), X(64,190),
+  X(67,193), X(68,194), X(71,197), X(72,198), X(75,201), X(76,202), X(79,205),
+  X(80,206), X(83,209), X(84,210), X(87,213), X(88,214), X(91,217), X(92,218),
+  X(95,221), X(96,222), X(99,225), X(100,226), X(3,65), X(4,66), X(7,69),
+  X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85),
+  X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154),
+  X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(127,189), X(128,190),
+  X(131,193), X(132,194), X(135,197), X(136,198), X(139,201), X(140,202),
+  X(143,205), X(144,206), X(147,209), X(148,210), X(151,213), X(152,214),
+  X(155,217), X(156,218), X(159,221), X(160,222), X(163,225), X(164,226),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78),
+  X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94),
+  X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109),
+  X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121), X(92,122),
+  X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(127,157), X(128,158),
+  X(131,161), X(132,162), X(135,165), X(136,166), X(139,169), X(140,170),
+  X(143,173), X(144,174), X(147,177), X(148,178), X(151,181), X(152,182),
+  X(155,185), X(156,186), X(159,189), X(160,190), X(163,193), X(164,194),
+  X(167,197), X(168,198), X(171,201), X(172,202), X(175,205), X(176,206),
+  X(179,209), X(180,210), X(183,213), X(184,214), X(187,217), X(188,218),
+  X(191,221), X(192,222), X(195,225), X(196,226), X(3,17), X(4,18), X(7,21),
+  X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37),
+  X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53),
+  X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69),
+  X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85),
+  X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(143,157), X(144,158), X(147,161),
+  X(148,162), X(151,165), X(152,166), X(155,169), X(156,170), X(159,173),
+  X(160,174), X(163,177), X(164,178), X(167,181), X(168,182), X(171,185),
+  X(172,186), X(175,189), X(176,190), X(179,193), X(180,194), X(183,197),
+  X(184,198), X(187,201), X(188,202), X(191,205), X(192,206), X(195,209),
+  X(196,210), X(199,213), X(200,214), X(203,217), X(204,218), X(207,221),
+  X(208,222), X(211,225), X(212,226), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(175,181),
+  X(176,182), X(179,185), X(180,186), X(183,189), X(184,190), X(187,193),
+  X(188,194), X(191,197), X(192,198), X(195,201), X(196,202), X(199,205),
+  X(200,206), X(203,209), X(204,210), X(207,213), X(208,214), X(211,217),
+  X(212,218), X(215,221), X(216,222), X(219,225), X(220,226), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70),
+  X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86),
+  X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101),
+  X(100,102), X(103,105), X(104,106), X(107,109), X(108,110), X(111,113),
+  X(112,114), X(115,117), X(116,118), X(119,121), X(120,122), X(123,125),
+  X(124,126), X(127,129), X(128,130), X(131,133), X(132,134), X(135,137),
+  X(136,138), X(139,141), X(140,142), X(143,145), X(144,146), X(147,149),
+  X(148,150), X(151,153), X(152,154), X(155,157), X(156,158), X(159,161),
+  X(160,162), X(163,165), X(164,166), X(167,169), X(168,170), X(171,173),
+  X(172,174), X(175,177), X(176,178), X(179,181), X(180,182), X(183,185),
+  X(184,186), X(187,189), X(188,190), X(191,193), X(192,194), X(195,197),
+  X(196,198), X(199,201), X(200,202), X(203,205), X(204,206), X(207,209),
+  X(208,210), X(211,213), X(212,214), X(215,217), X(216,218), X(219,221),
+  X(220,222), X(223,225), X(224,226), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202), X(203,204), X(205,206), X(207,208), X(209,210), X(211,212),
+  X(213,214), X(215,216), X(217,218), X(219,220), X(221,222), X(223,224),
+  X(225,226), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181),
+  X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195),
+  X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(82,209),
+  X(84,211), X(86,213), X(88,215), X(90,217), X(92,219), X(94,221), X(96,223),
+  X(98,225), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107),
+  X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121),
+  X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135),
+  X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149),
+  X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161), X(100,163),
+  X(102,165), X(104,167), X(106,169), X(108,171), X(110,173), X(112,175),
+  X(114,177), X(116,179), X(118,181), X(120,183), X(122,185), X(124,187),
+  X(126,189), X(128,191), X(130,193), X(132,195), X(134,197), X(136,199),
+  X(138,201), X(140,203), X(142,205), X(144,207), X(146,209), X(148,211),
+  X(150,213), X(152,215), X(154,217), X(156,219), X(158,221), X(160,223),
+  X(162,225), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45),
+  X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61),
+  X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77),
+  X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93),
+  X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107),
+  X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121),
+  X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(146,177), X(148,179), X(150,181), X(152,183),
+  X(154,185), X(156,187), X(158,189), X(160,191), X(162,193), X(164,195),
+  X(166,197), X(168,199), X(170,201), X(172,203), X(174,205), X(176,207),
+  X(178,209), X(180,211), X(182,213), X(184,215), X(186,217), X(188,219),
+  X(190,221), X(192,223), X(194,225), X(2,17), X(4,19), X(6,21), X(8,23),
+  X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39),
+  X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55),
+  X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71),
+  X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87),
+  X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99), X(86,101),
+  X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113), X(100,115),
+  X(102,117), X(104,119), X(106,121), X(108,123), X(110,125), X(112,127),
+  X(114,129), X(116,131), X(118,133), X(120,135), X(122,137), X(124,139),
+  X(126,141), X(128,143), X(130,145), X(132,147), X(134,149), X(136,151),
+  X(138,153), X(140,155), X(142,157), X(144,159), X(146,161), X(148,163),
+  X(150,165), X(152,167), X(154,169), X(156,171), X(158,173), X(160,175),
+  X(162,177), X(164,179), X(166,181), X(168,183), X(170,185), X(172,187),
+  X(174,189), X(176,191), X(178,193), X(180,195), X(182,197), X(184,199),
+  X(186,201), X(188,203), X(190,205), X(192,207), X(194,209), X(196,211),
+  X(198,213), X(200,215), X(202,217), X(204,219), X(206,221), X(208,223),
+  X(210,225), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21),
+  X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37),
+  X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53),
+  X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69),
+  X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85),
+  X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(134,141), X(136,143), X(138,145), X(140,147),
+  X(142,149), X(144,151), X(146,153), X(148,155), X(150,157), X(152,159),
+  X(154,161), X(156,163), X(158,165), X(160,167), X(162,169), X(164,171),
+  X(166,173), X(168,175), X(170,177), X(172,179), X(174,181), X(176,183),
+  X(178,185), X(180,187), X(182,189), X(184,191), X(186,193), X(188,195),
+  X(190,197), X(192,199), X(194,201), X(196,203), X(198,205), X(200,207),
+  X(202,209), X(204,211), X(206,213), X(208,215), X(210,217), X(212,219),
+  X(214,221), X(216,223), X(218,225), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29),
+  X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45),
+  X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61),
+  X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77),
+  X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93),
+  X(92,95), X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107),
+  X(106,109), X(108,111), X(110,113), X(112,115), X(114,117), X(116,119),
+  X(118,121), X(120,123), X(122,125), X(124,127), X(126,129), X(128,131),
+  X(130,133), X(132,135), X(134,137), X(136,139), X(138,141), X(140,143),
+  X(142,145), X(144,147), X(146,149), X(148,151), X(150,153), X(152,155),
+  X(154,157), X(156,159), X(158,161), X(160,163), X(162,165), X(164,167),
+  X(166,169), X(168,171), X(170,173), X(172,175), X(174,177), X(176,179),
+  X(178,181), X(180,183), X(182,185), X(184,187), X(186,189), X(188,191),
+  X(190,193), X(192,195), X(194,197), X(196,199), X(198,201), X(200,203),
+  X(202,205), X(204,207), X(206,209), X(208,211), X(210,213), X(212,215),
+  X(214,217), X(216,219), X(218,221), X(220,223), X(222,225), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223), X(224,225)
+};
+S(228) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(97,225), X(98,226),
+  X(99,227), X(100,228), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70),
+  X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78),
+  X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86),
+  X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94),
+  X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101),
+  X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108),
+  X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115),
+  X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122),
+  X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(129,193),
+  X(130,194), X(131,195), X(132,196), X(133,197), X(134,198), X(135,199),
+  X(136,200), X(137,201), X(138,202), X(139,203), X(140,204), X(141,205),
+  X(142,206), X(143,207), X(144,208), X(145,209), X(146,210), X(147,211),
+  X(148,212), X(149,213), X(150,214), X(151,215), X(152,216), X(153,217),
+  X(154,218), X(155,219), X(156,220), X(157,221), X(158,222), X(159,223),
+  X(160,224), X(161,225), X(162,226), X(163,227), X(164,228), X(65,129),
+  X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136),
+  X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143),
+  X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150),
+  X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157),
+  X(94,158), X(95,159), X(96,160), X(97,161), X(98,162), X(99,163), X(100,164),
+  X(101,165), X(102,166), X(103,167), X(104,168), X(105,169), X(106,170),
+  X(107,171), X(108,172), X(109,173), X(110,174), X(111,175), X(112,176),
+  X(113,177), X(114,178), X(115,179), X(116,180), X(117,181), X(118,182),
+  X(119,183), X(120,184), X(121,185), X(122,186), X(123,187), X(124,188),
+  X(125,189), X(126,190), X(127,191), X(128,192), X(1,33), X(2,34), X(3,35),
+  X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43),
+  X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51),
+  X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59),
+  X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(135,167), X(136,168), X(137,169), X(138,170), X(139,171),
+  X(140,172), X(141,173), X(142,174), X(143,175), X(144,176), X(145,177),
+  X(146,178), X(147,179), X(148,180), X(149,181), X(150,182), X(151,183),
+  X(152,184), X(153,185), X(154,186), X(155,187), X(156,188), X(157,189),
+  X(158,190), X(159,191), X(160,192), X(193,225), X(194,226), X(195,227),
+  X(196,228), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(119,215), X(120,216), X(121,217), X(122,218),
+  X(123,219), X(124,220), X(125,221), X(126,222), X(127,223), X(128,224),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(165,197), X(166,198), X(167,199), X(168,200), X(169,201), X(170,202),
+  X(171,203), X(172,204), X(173,205), X(174,206), X(175,207), X(176,208),
+  X(177,209), X(178,210), X(179,211), X(180,212), X(181,213), X(182,214),
+  X(183,215), X(184,216), X(185,217), X(186,218), X(187,219), X(188,220),
+  X(189,221), X(190,222), X(191,223), X(192,224), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(201,217), X(202,218), X(203,219), X(204,220), X(205,221), X(206,222),
+  X(207,223), X(208,224), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163),
+  X(52,164), X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170),
+  X(59,171), X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(81,193),
+  X(82,194), X(83,195), X(84,196), X(85,197), X(86,198), X(87,199), X(88,200),
+  X(89,201), X(90,202), X(91,203), X(92,204), X(93,205), X(94,206), X(95,207),
+  X(96,208), X(113,225), X(114,226), X(115,227), X(116,228), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135),
+  X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142),
+  X(95,143), X(96,144), X(113,161), X(114,162), X(115,163), X(116,164),
+  X(117,165), X(118,166), X(119,167), X(120,168), X(121,169), X(122,170),
+  X(123,171), X(124,172), X(125,173), X(126,174), X(127,175), X(128,176),
+  X(145,193), X(146,194), X(147,195), X(148,196), X(149,197), X(150,198),
+  X(151,199), X(152,200), X(153,201), X(154,202), X(155,203), X(156,204),
+  X(157,205), X(158,206), X(159,207), X(160,208), X(177,225), X(178,226),
+  X(179,227), X(180,228), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37),
+  X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45),
+  X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69),
+  X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77),
+  X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100),
+  X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107),
+  X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130),
+  X(115,131), X(116,132), X(117,133), X(118,134), X(119,135), X(120,136),
+  X(121,137), X(122,138), X(123,139), X(124,140), X(125,141), X(126,142),
+  X(127,143), X(128,144), X(145,161), X(146,162), X(147,163), X(148,164),
+  X(149,165), X(150,166), X(151,167), X(152,168), X(153,169), X(154,170),
+  X(155,171), X(156,172), X(157,173), X(158,174), X(159,175), X(160,176),
+  X(177,193), X(178,194), X(179,195), X(180,196), X(181,197), X(182,198),
+  X(183,199), X(184,200), X(185,201), X(186,202), X(187,203), X(188,204),
+  X(189,205), X(190,206), X(191,207), X(192,208), X(209,225), X(210,226),
+  X(211,227), X(212,228), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109),
+  X(102,110), X(103,111), X(104,112), X(113,121), X(114,122), X(115,123),
+  X(116,124), X(117,125), X(118,126), X(119,127), X(120,128), X(129,137),
+  X(130,138), X(131,139), X(132,140), X(133,141), X(134,142), X(135,143),
+  X(136,144), X(145,153), X(146,154), X(147,155), X(148,156), X(149,157),
+  X(150,158), X(151,159), X(152,160), X(161,169), X(162,170), X(163,171),
+  X(164,172), X(165,173), X(166,174), X(167,175), X(168,176), X(177,185),
+  X(178,186), X(179,187), X(180,188), X(181,189), X(182,190), X(183,191),
+  X(184,192), X(193,201), X(194,202), X(195,203), X(196,204), X(197,205),
+  X(198,206), X(199,207), X(200,208), X(209,217), X(210,218), X(211,219),
+  X(212,220), X(213,221), X(214,222), X(215,223), X(216,224), X(9,129),
+  X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135), X(16,136),
+  X(25,145), X(26,146), X(27,147), X(28,148), X(29,149), X(30,150), X(31,151),
+  X(32,152), X(41,161), X(42,162), X(43,163), X(44,164), X(45,165), X(46,166),
+  X(47,167), X(48,168), X(57,177), X(58,178), X(59,179), X(60,180), X(61,181),
+  X(62,182), X(63,183), X(64,184), X(73,193), X(74,194), X(75,195), X(76,196),
+  X(77,197), X(78,198), X(79,199), X(80,200), X(89,209), X(90,210), X(91,211),
+  X(92,212), X(93,213), X(94,214), X(95,215), X(96,216), X(105,225), X(106,226),
+  X(107,227), X(108,228), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115),
+  X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130),
+  X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136), X(89,145),
+  X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151), X(96,152),
+  X(105,161), X(106,162), X(107,163), X(108,164), X(109,165), X(110,166),
+  X(111,167), X(112,168), X(121,177), X(122,178), X(123,179), X(124,180),
+  X(125,181), X(126,182), X(127,183), X(128,184), X(137,193), X(138,194),
+  X(139,195), X(140,196), X(141,197), X(142,198), X(143,199), X(144,200),
+  X(153,209), X(154,210), X(155,211), X(156,212), X(157,213), X(158,214),
+  X(159,215), X(160,216), X(169,225), X(170,226), X(171,227), X(172,228),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88),
+  X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103),
+  X(80,104), X(89,113), X(90,114), X(91,115), X(92,116), X(93,117), X(94,118),
+  X(95,119), X(96,120), X(105,129), X(106,130), X(107,131), X(108,132),
+  X(109,133), X(110,134), X(111,135), X(112,136), X(121,145), X(122,146),
+  X(123,147), X(124,148), X(125,149), X(126,150), X(127,151), X(128,152),
+  X(137,161), X(138,162), X(139,163), X(140,164), X(141,165), X(142,166),
+  X(143,167), X(144,168), X(153,177), X(154,178), X(155,179), X(156,180),
+  X(157,181), X(158,182), X(159,183), X(160,184), X(169,193), X(170,194),
+  X(171,195), X(172,196), X(173,197), X(174,198), X(175,199), X(176,200),
+  X(185,209), X(186,210), X(187,211), X(188,212), X(189,213), X(190,214),
+  X(191,215), X(192,216), X(201,225), X(202,226), X(203,227), X(204,228),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(105,113), X(106,114), X(107,115), X(108,116), X(109,117),
+  X(110,118), X(111,119), X(112,120), X(121,129), X(122,130), X(123,131),
+  X(124,132), X(125,133), X(126,134), X(127,135), X(128,136), X(137,145),
+  X(138,146), X(139,147), X(140,148), X(141,149), X(142,150), X(143,151),
+  X(144,152), X(153,161), X(154,162), X(155,163), X(156,164), X(157,165),
+  X(158,166), X(159,167), X(160,168), X(169,177), X(170,178), X(171,179),
+  X(172,180), X(173,181), X(174,182), X(175,183), X(176,184), X(185,193),
+  X(186,194), X(187,195), X(188,196), X(189,197), X(190,198), X(191,199),
+  X(192,200), X(201,209), X(202,210), X(203,211), X(204,212), X(205,213),
+  X(206,214), X(207,215), X(208,216), X(217,225), X(218,226), X(219,227),
+  X(220,228), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(185,189), X(186,190), X(187,191), X(188,192),
+  X(193,197), X(194,198), X(195,199), X(196,200), X(201,205), X(202,206),
+  X(203,207), X(204,208), X(209,213), X(210,214), X(211,215), X(212,216),
+  X(217,221), X(218,222), X(219,223), X(220,224), X(5,129), X(6,130), X(7,131),
+  X(8,132), X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146),
+  X(23,147), X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(37,161),
+  X(38,162), X(39,163), X(40,164), X(45,169), X(46,170), X(47,171), X(48,172),
+  X(53,177), X(54,178), X(55,179), X(56,180), X(61,185), X(62,186), X(63,187),
+  X(64,188), X(69,193), X(70,194), X(71,195), X(72,196), X(77,201), X(78,202),
+  X(79,203), X(80,204), X(85,209), X(86,210), X(87,211), X(88,212), X(93,217),
+  X(94,218), X(95,219), X(96,220), X(101,225), X(102,226), X(103,227),
+  X(104,228), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147),
+  X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162),
+  X(103,163), X(104,164), X(109,169), X(110,170), X(111,171), X(112,172),
+  X(117,177), X(118,178), X(119,179), X(120,180), X(125,185), X(126,186),
+  X(127,187), X(128,188), X(133,193), X(134,194), X(135,195), X(136,196),
+  X(141,201), X(142,202), X(143,203), X(144,204), X(149,209), X(150,210),
+  X(151,211), X(152,212), X(157,217), X(158,218), X(159,219), X(160,220),
+  X(165,225), X(166,226), X(167,227), X(168,228), X(5,33), X(6,34), X(7,35),
+  X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51),
+  X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67),
+  X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83),
+  X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(103,131), X(104,132), X(109,137), X(110,138), X(111,139),
+  X(112,140), X(117,145), X(118,146), X(119,147), X(120,148), X(125,153),
+  X(126,154), X(127,155), X(128,156), X(133,161), X(134,162), X(135,163),
+  X(136,164), X(141,169), X(142,170), X(143,171), X(144,172), X(149,177),
+  X(150,178), X(151,179), X(152,180), X(157,185), X(158,186), X(159,187),
+  X(160,188), X(165,193), X(166,194), X(167,195), X(168,196), X(173,201),
+  X(174,202), X(175,203), X(176,204), X(181,209), X(182,210), X(183,211),
+  X(184,212), X(189,217), X(190,218), X(191,219), X(192,220), X(197,225),
+  X(198,226), X(199,227), X(200,228), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(173,185), X(174,186),
+  X(175,187), X(176,188), X(181,193), X(182,194), X(183,195), X(184,196),
+  X(189,201), X(190,202), X(191,203), X(192,204), X(197,209), X(198,210),
+  X(199,211), X(200,212), X(205,217), X(206,218), X(207,219), X(208,220),
+  X(213,225), X(214,226), X(215,227), X(216,228), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27),
+  X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43),
+  X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59),
+  X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75),
+  X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91),
+  X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106),
+  X(103,107), X(104,108), X(109,113), X(110,114), X(111,115), X(112,116),
+  X(117,121), X(118,122), X(119,123), X(120,124), X(125,129), X(126,130),
+  X(127,131), X(128,132), X(133,137), X(134,138), X(135,139), X(136,140),
+  X(141,145), X(142,146), X(143,147), X(144,148), X(149,153), X(150,154),
+  X(151,155), X(152,156), X(157,161), X(158,162), X(159,163), X(160,164),
+  X(165,169), X(166,170), X(167,171), X(168,172), X(173,177), X(174,178),
+  X(175,179), X(176,180), X(181,185), X(182,186), X(183,187), X(184,188),
+  X(189,193), X(190,194), X(191,195), X(192,196), X(197,201), X(198,202),
+  X(199,203), X(200,204), X(205,209), X(206,210), X(207,211), X(208,212),
+  X(213,217), X(214,218), X(215,219), X(216,220), X(221,225), X(222,226),
+  X(223,227), X(224,228), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(129,131),
+  X(130,132), X(133,135), X(134,136), X(137,139), X(138,140), X(141,143),
+  X(142,144), X(145,147), X(146,148), X(149,151), X(150,152), X(153,155),
+  X(154,156), X(157,159), X(158,160), X(161,163), X(162,164), X(165,167),
+  X(166,168), X(169,171), X(170,172), X(173,175), X(174,176), X(177,179),
+  X(178,180), X(181,183), X(182,184), X(185,187), X(186,188), X(189,191),
+  X(190,192), X(193,195), X(194,196), X(197,199), X(198,200), X(201,203),
+  X(202,204), X(205,207), X(206,208), X(209,211), X(210,212), X(213,215),
+  X(214,216), X(217,219), X(218,220), X(221,223), X(222,224), X(225,227),
+  X(226,228), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194),
+  X(71,197), X(72,198), X(75,201), X(76,202), X(79,205), X(80,206), X(83,209),
+  X(84,210), X(87,213), X(88,214), X(91,217), X(92,218), X(95,221), X(96,222),
+  X(99,225), X(100,226), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74),
+  X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90),
+  X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105),
+  X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118),
+  X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130), X(71,133),
+  X(72,134), X(75,137), X(76,138), X(79,141), X(80,142), X(83,145), X(84,146),
+  X(87,149), X(88,150), X(91,153), X(92,154), X(95,157), X(96,158), X(99,161),
+  X(100,162), X(103,165), X(104,166), X(107,169), X(108,170), X(111,173),
+  X(112,174), X(115,177), X(116,178), X(119,181), X(120,182), X(123,185),
+  X(124,186), X(127,189), X(128,190), X(131,193), X(132,194), X(135,197),
+  X(136,198), X(139,201), X(140,202), X(143,205), X(144,206), X(147,209),
+  X(148,210), X(151,213), X(152,214), X(155,217), X(156,218), X(159,221),
+  X(160,222), X(163,225), X(164,226), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70),
+  X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86),
+  X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98), X(71,101),
+  X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113), X(84,114),
+  X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126), X(99,129),
+  X(100,130), X(103,133), X(104,134), X(107,137), X(108,138), X(111,141),
+  X(112,142), X(115,145), X(116,146), X(119,149), X(120,150), X(123,153),
+  X(124,154), X(127,157), X(128,158), X(131,161), X(132,162), X(135,165),
+  X(136,166), X(139,169), X(140,170), X(143,173), X(144,174), X(147,177),
+  X(148,178), X(151,181), X(152,182), X(155,185), X(156,186), X(159,189),
+  X(160,190), X(163,193), X(164,194), X(167,197), X(168,198), X(171,201),
+  X(172,202), X(175,205), X(176,206), X(179,209), X(180,210), X(183,213),
+  X(184,214), X(187,217), X(188,218), X(191,221), X(192,222), X(195,225),
+  X(196,226), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166),
+  X(155,169), X(156,170), X(159,173), X(160,174), X(163,177), X(164,178),
+  X(167,181), X(168,182), X(171,185), X(172,186), X(175,189), X(176,190),
+  X(179,193), X(180,194), X(183,197), X(184,198), X(187,201), X(188,202),
+  X(191,205), X(192,206), X(195,209), X(196,210), X(199,213), X(200,214),
+  X(203,217), X(204,218), X(207,221), X(208,222), X(211,225), X(212,226), X(3,9),
+  X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25),
+  X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41),
+  X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57),
+  X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73),
+  X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89),
+  X(84,90), X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102),
+  X(99,105), X(100,106), X(103,109), X(104,110), X(107,113), X(108,114),
+  X(111,117), X(112,118), X(115,121), X(116,122), X(119,125), X(120,126),
+  X(123,129), X(124,130), X(127,133), X(128,134), X(131,137), X(132,138),
+  X(135,141), X(136,142), X(139,145), X(140,146), X(143,149), X(144,150),
+  X(147,153), X(148,154), X(151,157), X(152,158), X(155,161), X(156,162),
+  X(159,165), X(160,166), X(163,169), X(164,170), X(167,173), X(168,174),
+  X(171,177), X(172,178), X(175,181), X(176,182), X(179,185), X(180,186),
+  X(183,189), X(184,190), X(187,193), X(188,194), X(191,197), X(192,198),
+  X(195,201), X(196,202), X(199,205), X(200,206), X(203,209), X(204,210),
+  X(207,213), X(208,214), X(211,217), X(212,218), X(215,221), X(216,222),
+  X(219,225), X(220,226), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94),
+  X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(115,117), X(116,118), X(119,121),
+  X(120,122), X(123,125), X(124,126), X(127,129), X(128,130), X(131,133),
+  X(132,134), X(135,137), X(136,138), X(139,141), X(140,142), X(143,145),
+  X(144,146), X(147,149), X(148,150), X(151,153), X(152,154), X(155,157),
+  X(156,158), X(159,161), X(160,162), X(163,165), X(164,166), X(167,169),
+  X(168,170), X(171,173), X(172,174), X(175,177), X(176,178), X(179,181),
+  X(180,182), X(183,185), X(184,186), X(187,189), X(188,190), X(191,193),
+  X(192,194), X(195,197), X(196,198), X(199,201), X(200,202), X(203,205),
+  X(204,206), X(207,209), X(208,210), X(211,213), X(212,214), X(215,217),
+  X(216,218), X(219,221), X(220,222), X(223,225), X(224,226), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(221,222), X(223,224), X(225,226), X(227,228), X(2,129), X(4,131),
+  X(6,133), X(8,135), X(10,137), X(12,139), X(14,141), X(16,143), X(18,145),
+  X(20,147), X(22,149), X(24,151), X(26,153), X(28,155), X(30,157), X(32,159),
+  X(34,161), X(36,163), X(38,165), X(40,167), X(42,169), X(44,171), X(46,173),
+  X(48,175), X(50,177), X(52,179), X(54,181), X(56,183), X(58,185), X(60,187),
+  X(62,189), X(64,191), X(66,193), X(68,195), X(70,197), X(72,199), X(74,201),
+  X(76,203), X(78,205), X(80,207), X(82,209), X(84,211), X(86,213), X(88,215),
+  X(90,217), X(92,219), X(94,221), X(96,223), X(98,225), X(100,227), X(2,65),
+  X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81),
+  X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97),
+  X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111),
+  X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125),
+  X(64,127), X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139),
+  X(78,141), X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153),
+  X(92,155), X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(124,187), X(126,189), X(128,191),
+  X(130,193), X(132,195), X(134,197), X(136,199), X(138,201), X(140,203),
+  X(142,205), X(144,207), X(146,209), X(148,211), X(150,213), X(152,215),
+  X(154,217), X(156,219), X(158,221), X(160,223), X(162,225), X(164,227),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95),
+  X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109),
+  X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(92,123),
+  X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(146,177), X(148,179), X(150,181), X(152,183),
+  X(154,185), X(156,187), X(158,189), X(160,191), X(162,193), X(164,195),
+  X(166,197), X(168,199), X(170,201), X(172,203), X(174,205), X(176,207),
+  X(178,209), X(180,211), X(182,213), X(184,215), X(186,217), X(188,219),
+  X(190,221), X(192,223), X(194,225), X(196,227), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(170,185),
+  X(172,187), X(174,189), X(176,191), X(178,193), X(180,195), X(182,197),
+  X(184,199), X(186,201), X(188,203), X(190,205), X(192,207), X(194,209),
+  X(196,211), X(198,213), X(200,215), X(202,217), X(204,219), X(206,221),
+  X(208,223), X(210,225), X(212,227), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(108,115), X(110,117), X(112,119), X(114,121),
+  X(116,123), X(118,125), X(120,127), X(122,129), X(124,131), X(126,133),
+  X(128,135), X(130,137), X(132,139), X(134,141), X(136,143), X(138,145),
+  X(140,147), X(142,149), X(144,151), X(146,153), X(148,155), X(150,157),
+  X(152,159), X(154,161), X(156,163), X(158,165), X(160,167), X(162,169),
+  X(164,171), X(166,173), X(168,175), X(170,177), X(172,179), X(174,181),
+  X(176,183), X(178,185), X(180,187), X(182,189), X(184,191), X(186,193),
+  X(188,195), X(190,197), X(192,199), X(194,201), X(196,203), X(198,205),
+  X(200,207), X(202,209), X(204,211), X(206,213), X(208,215), X(210,217),
+  X(212,219), X(214,221), X(216,223), X(218,225), X(220,227), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(130,133), X(132,135), X(134,137),
+  X(136,139), X(138,141), X(140,143), X(142,145), X(144,147), X(146,149),
+  X(148,151), X(150,153), X(152,155), X(154,157), X(156,159), X(158,161),
+  X(160,163), X(162,165), X(164,167), X(166,169), X(168,171), X(170,173),
+  X(172,175), X(174,177), X(176,179), X(178,181), X(180,183), X(182,185),
+  X(184,187), X(186,189), X(188,191), X(190,193), X(192,195), X(194,197),
+  X(196,199), X(198,201), X(200,203), X(202,205), X(204,207), X(206,209),
+  X(208,211), X(210,213), X(212,215), X(214,217), X(216,219), X(218,221),
+  X(220,223), X(222,225), X(224,227), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153),
+  X(154,155), X(156,157), X(158,159), X(160,161), X(162,163), X(164,165),
+  X(166,167), X(168,169), X(170,171), X(172,173), X(174,175), X(176,177),
+  X(178,179), X(180,181), X(182,183), X(184,185), X(186,187), X(188,189),
+  X(190,191), X(192,193), X(194,195), X(196,197), X(198,199), X(200,201),
+  X(202,203), X(204,205), X(206,207), X(208,209), X(210,211), X(212,213),
+  X(214,215), X(216,217), X(218,219), X(220,221), X(222,223), X(224,225),
+  X(226,227)
+};
+S(230) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(97,225), X(98,226),
+  X(99,227), X(100,228), X(101,229), X(102,230), X(1,65), X(2,66), X(3,67),
+  X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75),
+  X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83),
+  X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91),
+  X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99),
+  X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106),
+  X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113),
+  X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120),
+  X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127),
+  X(64,128), X(129,193), X(130,194), X(131,195), X(132,196), X(133,197),
+  X(134,198), X(135,199), X(136,200), X(137,201), X(138,202), X(139,203),
+  X(140,204), X(141,205), X(142,206), X(143,207), X(144,208), X(145,209),
+  X(146,210), X(147,211), X(148,212), X(149,213), X(150,214), X(151,215),
+  X(152,216), X(153,217), X(154,218), X(155,219), X(156,220), X(157,221),
+  X(158,222), X(159,223), X(160,224), X(161,225), X(162,226), X(163,227),
+  X(164,228), X(165,229), X(166,230), X(65,129), X(66,130), X(67,131), X(68,132),
+  X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139),
+  X(76,140), X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146),
+  X(83,147), X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153),
+  X(90,154), X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160),
+  X(97,161), X(98,162), X(99,163), X(100,164), X(101,165), X(102,166),
+  X(103,167), X(104,168), X(105,169), X(106,170), X(107,171), X(108,172),
+  X(109,173), X(110,174), X(111,175), X(112,176), X(113,177), X(114,178),
+  X(115,179), X(116,180), X(117,181), X(118,182), X(119,183), X(120,184),
+  X(121,185), X(122,186), X(123,187), X(124,188), X(125,189), X(126,190),
+  X(127,191), X(128,192), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101),
+  X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108),
+  X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115),
+  X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122),
+  X(91,123), X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161),
+  X(130,162), X(131,163), X(132,164), X(133,165), X(134,166), X(135,167),
+  X(136,168), X(137,169), X(138,170), X(139,171), X(140,172), X(141,173),
+  X(142,174), X(143,175), X(144,176), X(145,177), X(146,178), X(147,179),
+  X(148,180), X(149,181), X(150,182), X(151,183), X(152,184), X(153,185),
+  X(154,186), X(155,187), X(156,188), X(157,189), X(158,190), X(159,191),
+  X(160,192), X(193,225), X(194,226), X(195,227), X(196,228), X(197,229),
+  X(198,230), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(119,215), X(120,216), X(121,217), X(122,218),
+  X(123,219), X(124,220), X(125,221), X(126,222), X(127,223), X(128,224),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(165,197), X(166,198), X(167,199), X(168,200), X(169,201), X(170,202),
+  X(171,203), X(172,204), X(173,205), X(174,206), X(175,207), X(176,208),
+  X(177,209), X(178,210), X(179,211), X(180,212), X(181,213), X(182,214),
+  X(183,215), X(184,216), X(185,217), X(186,218), X(187,219), X(188,220),
+  X(189,221), X(190,222), X(191,223), X(192,224), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(201,217), X(202,218), X(203,219), X(204,220), X(205,221), X(206,222),
+  X(207,223), X(208,224), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163),
+  X(52,164), X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170),
+  X(59,171), X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(81,193),
+  X(82,194), X(83,195), X(84,196), X(85,197), X(86,198), X(87,199), X(88,200),
+  X(89,201), X(90,202), X(91,203), X(92,204), X(93,205), X(94,206), X(95,207),
+  X(96,208), X(113,225), X(114,226), X(115,227), X(116,228), X(117,229),
+  X(118,230), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100), X(53,101),
+  X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107), X(60,108),
+  X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130), X(83,131),
+  X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137), X(90,138),
+  X(91,139), X(92,140), X(93,141), X(94,142), X(95,143), X(96,144), X(113,161),
+  X(114,162), X(115,163), X(116,164), X(117,165), X(118,166), X(119,167),
+  X(120,168), X(121,169), X(122,170), X(123,171), X(124,172), X(125,173),
+  X(126,174), X(127,175), X(128,176), X(145,193), X(146,194), X(147,195),
+  X(148,196), X(149,197), X(150,198), X(151,199), X(152,200), X(153,201),
+  X(154,202), X(155,203), X(156,204), X(157,205), X(158,206), X(159,207),
+  X(160,208), X(177,225), X(178,226), X(179,227), X(180,228), X(181,229),
+  X(182,230), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100), X(85,101),
+  X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107), X(92,108),
+  X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130), X(115,131),
+  X(116,132), X(117,133), X(118,134), X(119,135), X(120,136), X(121,137),
+  X(122,138), X(123,139), X(124,140), X(125,141), X(126,142), X(127,143),
+  X(128,144), X(145,161), X(146,162), X(147,163), X(148,164), X(149,165),
+  X(150,166), X(151,167), X(152,168), X(153,169), X(154,170), X(155,171),
+  X(156,172), X(157,173), X(158,174), X(159,175), X(160,176), X(177,193),
+  X(178,194), X(179,195), X(180,196), X(181,197), X(182,198), X(183,199),
+  X(184,200), X(185,201), X(186,202), X(187,203), X(188,204), X(189,205),
+  X(190,206), X(191,207), X(192,208), X(209,225), X(210,226), X(211,227),
+  X(212,228), X(213,229), X(214,230), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13),
+  X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29),
+  X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45),
+  X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61),
+  X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77),
+  X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93),
+  X(86,94), X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108),
+  X(101,109), X(102,110), X(103,111), X(104,112), X(113,121), X(114,122),
+  X(115,123), X(116,124), X(117,125), X(118,126), X(119,127), X(120,128),
+  X(129,137), X(130,138), X(131,139), X(132,140), X(133,141), X(134,142),
+  X(135,143), X(136,144), X(145,153), X(146,154), X(147,155), X(148,156),
+  X(149,157), X(150,158), X(151,159), X(152,160), X(161,169), X(162,170),
+  X(163,171), X(164,172), X(165,173), X(166,174), X(167,175), X(168,176),
+  X(177,185), X(178,186), X(179,187), X(180,188), X(181,189), X(182,190),
+  X(183,191), X(184,192), X(193,201), X(194,202), X(195,203), X(196,204),
+  X(197,205), X(198,206), X(199,207), X(200,208), X(209,217), X(210,218),
+  X(211,219), X(212,220), X(213,221), X(214,222), X(215,223), X(216,224),
+  X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135),
+  X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149), X(30,150),
+  X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164), X(45,165),
+  X(46,166), X(47,167), X(48,168), X(57,177), X(58,178), X(59,179), X(60,180),
+  X(61,181), X(62,182), X(63,183), X(64,184), X(73,193), X(74,194), X(75,195),
+  X(76,196), X(77,197), X(78,198), X(79,199), X(80,200), X(89,209), X(90,210),
+  X(91,211), X(92,212), X(93,213), X(94,214), X(95,215), X(96,216), X(105,225),
+  X(106,226), X(107,227), X(108,228), X(109,229), X(110,230), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98),
+  X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113),
+  X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120),
+  X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135),
+  X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150),
+  X(95,151), X(96,152), X(105,161), X(106,162), X(107,163), X(108,164),
+  X(109,165), X(110,166), X(111,167), X(112,168), X(121,177), X(122,178),
+  X(123,179), X(124,180), X(125,181), X(126,182), X(127,183), X(128,184),
+  X(137,193), X(138,194), X(139,195), X(140,196), X(141,197), X(142,198),
+  X(143,199), X(144,200), X(153,209), X(154,210), X(155,211), X(156,212),
+  X(157,213), X(158,214), X(159,215), X(160,216), X(169,225), X(170,226),
+  X(171,227), X(172,228), X(173,229), X(174,230), X(9,33), X(10,34), X(11,35),
+  X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51),
+  X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67),
+  X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83),
+  X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(121,145), X(122,146), X(123,147), X(124,148), X(125,149),
+  X(126,150), X(127,151), X(128,152), X(137,161), X(138,162), X(139,163),
+  X(140,164), X(141,165), X(142,166), X(143,167), X(144,168), X(153,177),
+  X(154,178), X(155,179), X(156,180), X(157,181), X(158,182), X(159,183),
+  X(160,184), X(169,193), X(170,194), X(171,195), X(172,196), X(173,197),
+  X(174,198), X(175,199), X(176,200), X(185,209), X(186,210), X(187,211),
+  X(188,212), X(189,213), X(190,214), X(191,215), X(192,216), X(201,225),
+  X(202,226), X(203,227), X(204,228), X(205,229), X(206,230), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113),
+  X(106,114), X(107,115), X(108,116), X(109,117), X(110,118), X(111,119),
+  X(112,120), X(121,129), X(122,130), X(123,131), X(124,132), X(125,133),
+  X(126,134), X(127,135), X(128,136), X(137,145), X(138,146), X(139,147),
+  X(140,148), X(141,149), X(142,150), X(143,151), X(144,152), X(153,161),
+  X(154,162), X(155,163), X(156,164), X(157,165), X(158,166), X(159,167),
+  X(160,168), X(169,177), X(170,178), X(171,179), X(172,180), X(173,181),
+  X(174,182), X(175,183), X(176,184), X(185,193), X(186,194), X(187,195),
+  X(188,196), X(189,197), X(190,198), X(191,199), X(192,200), X(201,209),
+  X(202,210), X(203,211), X(204,212), X(205,213), X(206,214), X(207,215),
+  X(208,216), X(217,225), X(218,226), X(219,227), X(220,228), X(221,229),
+  X(222,230), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(185,189), X(186,190), X(187,191), X(188,192),
+  X(193,197), X(194,198), X(195,199), X(196,200), X(201,205), X(202,206),
+  X(203,207), X(204,208), X(209,213), X(210,214), X(211,215), X(212,216),
+  X(217,221), X(218,222), X(219,223), X(220,224), X(225,229), X(226,230),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153), X(30,154),
+  X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164), X(45,169),
+  X(46,170), X(47,171), X(48,172), X(53,177), X(54,178), X(55,179), X(56,180),
+  X(61,185), X(62,186), X(63,187), X(64,188), X(69,193), X(70,194), X(71,195),
+  X(72,196), X(77,201), X(78,202), X(79,203), X(80,204), X(85,209), X(86,210),
+  X(87,211), X(88,212), X(93,217), X(94,218), X(95,219), X(96,220), X(101,225),
+  X(102,226), X(103,227), X(104,228), X(5,65), X(6,66), X(7,67), X(8,68),
+  X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83), X(24,84),
+  X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99),
+  X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114),
+  X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129),
+  X(70,130), X(71,131), X(72,132), X(77,137), X(78,138), X(79,139), X(80,140),
+  X(85,145), X(86,146), X(87,147), X(88,148), X(93,153), X(94,154), X(95,155),
+  X(96,156), X(101,161), X(102,162), X(103,163), X(104,164), X(109,169),
+  X(110,170), X(111,171), X(112,172), X(117,177), X(118,178), X(119,179),
+  X(120,180), X(125,185), X(126,186), X(127,187), X(128,188), X(133,193),
+  X(134,194), X(135,195), X(136,196), X(141,201), X(142,202), X(143,203),
+  X(144,204), X(149,209), X(150,210), X(151,211), X(152,212), X(157,217),
+  X(158,218), X(159,219), X(160,220), X(165,225), X(166,226), X(167,227),
+  X(168,228), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43),
+  X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59),
+  X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75),
+  X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91),
+  X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106),
+  X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121),
+  X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(151,179),
+  X(152,180), X(157,185), X(158,186), X(159,187), X(160,188), X(165,193),
+  X(166,194), X(167,195), X(168,196), X(173,201), X(174,202), X(175,203),
+  X(176,204), X(181,209), X(182,210), X(183,211), X(184,212), X(189,217),
+  X(190,218), X(191,219), X(192,220), X(197,225), X(198,226), X(199,227),
+  X(200,228), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27),
+  X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43),
+  X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59),
+  X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75),
+  X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91),
+  X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106),
+  X(95,107), X(96,108), X(101,113), X(102,114), X(103,115), X(104,116),
+  X(109,121), X(110,122), X(111,123), X(112,124), X(117,129), X(118,130),
+  X(119,131), X(120,132), X(125,137), X(126,138), X(127,139), X(128,140),
+  X(133,145), X(134,146), X(135,147), X(136,148), X(141,153), X(142,154),
+  X(143,155), X(144,156), X(149,161), X(150,162), X(151,163), X(152,164),
+  X(157,169), X(158,170), X(159,171), X(160,172), X(165,177), X(166,178),
+  X(167,179), X(168,180), X(173,185), X(174,186), X(175,187), X(176,188),
+  X(181,193), X(182,194), X(183,195), X(184,196), X(189,201), X(190,202),
+  X(191,203), X(192,204), X(197,209), X(198,210), X(199,211), X(200,212),
+  X(205,217), X(206,218), X(207,219), X(208,220), X(213,225), X(214,226),
+  X(215,227), X(216,228), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18),
+  X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34),
+  X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50),
+  X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66),
+  X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82),
+  X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98),
+  X(95,99), X(96,100), X(101,105), X(102,106), X(103,107), X(104,108),
+  X(109,113), X(110,114), X(111,115), X(112,116), X(117,121), X(118,122),
+  X(119,123), X(120,124), X(125,129), X(126,130), X(127,131), X(128,132),
+  X(133,137), X(134,138), X(135,139), X(136,140), X(141,145), X(142,146),
+  X(143,147), X(144,148), X(149,153), X(150,154), X(151,155), X(152,156),
+  X(157,161), X(158,162), X(159,163), X(160,164), X(165,169), X(166,170),
+  X(167,171), X(168,172), X(173,177), X(174,178), X(175,179), X(176,180),
+  X(181,185), X(182,186), X(183,187), X(184,188), X(189,193), X(190,194),
+  X(191,195), X(192,196), X(197,201), X(198,202), X(199,203), X(200,204),
+  X(205,209), X(206,210), X(207,211), X(208,212), X(213,217), X(214,218),
+  X(215,219), X(216,220), X(221,225), X(222,226), X(223,227), X(224,228), X(1,3),
+  X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19),
+  X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35),
+  X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51),
+  X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67),
+  X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83),
+  X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(197,199), X(198,200), X(201,203), X(202,204), X(205,207),
+  X(206,208), X(209,211), X(210,212), X(213,215), X(214,216), X(217,219),
+  X(218,220), X(221,223), X(222,224), X(225,227), X(226,228), X(3,129), X(4,130),
+  X(7,133), X(8,134), X(11,137), X(12,138), X(15,141), X(16,142), X(19,145),
+  X(20,146), X(23,149), X(24,150), X(27,153), X(28,154), X(31,157), X(32,158),
+  X(35,161), X(36,162), X(39,165), X(40,166), X(43,169), X(44,170), X(47,173),
+  X(48,174), X(51,177), X(52,178), X(55,181), X(56,182), X(59,185), X(60,186),
+  X(63,189), X(64,190), X(67,193), X(68,194), X(71,197), X(72,198), X(75,201),
+  X(76,202), X(79,205), X(80,206), X(83,209), X(84,210), X(87,213), X(88,214),
+  X(91,217), X(92,218), X(95,221), X(96,222), X(99,225), X(100,226), X(103,229),
+  X(104,230), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77),
+  X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93),
+  X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106),
+  X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121),
+  X(60,122), X(63,125), X(64,126), X(67,129), X(68,130), X(71,133), X(72,134),
+  X(75,137), X(76,138), X(79,141), X(80,142), X(83,145), X(84,146), X(87,149),
+  X(88,150), X(91,153), X(92,154), X(95,157), X(96,158), X(99,161), X(100,162),
+  X(103,165), X(104,166), X(107,169), X(108,170), X(111,173), X(112,174),
+  X(115,177), X(116,178), X(119,181), X(120,182), X(123,185), X(124,186),
+  X(127,189), X(128,190), X(131,193), X(132,194), X(135,197), X(136,198),
+  X(139,201), X(140,202), X(143,205), X(144,206), X(147,209), X(148,210),
+  X(151,213), X(152,214), X(155,217), X(156,218), X(159,221), X(160,222),
+  X(163,225), X(164,226), X(167,229), X(168,230), X(3,33), X(4,34), X(7,37),
+  X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53),
+  X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69),
+  X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85),
+  X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(127,157), X(128,158), X(131,161), X(132,162),
+  X(135,165), X(136,166), X(139,169), X(140,170), X(143,173), X(144,174),
+  X(147,177), X(148,178), X(151,181), X(152,182), X(155,185), X(156,186),
+  X(159,189), X(160,190), X(163,193), X(164,194), X(167,197), X(168,198),
+  X(171,201), X(172,202), X(175,205), X(176,206), X(179,209), X(180,210),
+  X(183,213), X(184,214), X(187,217), X(188,218), X(191,221), X(192,222),
+  X(195,225), X(196,226), X(199,229), X(200,230), X(3,17), X(4,18), X(7,21),
+  X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37),
+  X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53),
+  X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69),
+  X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85),
+  X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(143,157), X(144,158), X(147,161),
+  X(148,162), X(151,165), X(152,166), X(155,169), X(156,170), X(159,173),
+  X(160,174), X(163,177), X(164,178), X(167,181), X(168,182), X(171,185),
+  X(172,186), X(175,189), X(176,190), X(179,193), X(180,194), X(183,197),
+  X(184,198), X(187,201), X(188,202), X(191,205), X(192,206), X(195,209),
+  X(196,210), X(199,213), X(200,214), X(203,217), X(204,218), X(207,221),
+  X(208,222), X(211,225), X(212,226), X(215,229), X(216,230), X(3,9), X(4,10),
+  X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26),
+  X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42),
+  X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58),
+  X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74),
+  X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90),
+  X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102), X(99,105),
+  X(100,106), X(103,109), X(104,110), X(107,113), X(108,114), X(111,117),
+  X(112,118), X(115,121), X(116,122), X(119,125), X(120,126), X(123,129),
+  X(124,130), X(127,133), X(128,134), X(131,137), X(132,138), X(135,141),
+  X(136,142), X(139,145), X(140,146), X(143,149), X(144,150), X(147,153),
+  X(148,154), X(151,157), X(152,158), X(155,161), X(156,162), X(159,165),
+  X(160,166), X(163,169), X(164,170), X(167,173), X(168,174), X(171,177),
+  X(172,178), X(175,181), X(176,182), X(179,185), X(180,186), X(183,189),
+  X(184,190), X(187,193), X(188,194), X(191,197), X(192,198), X(195,201),
+  X(196,202), X(199,205), X(200,206), X(203,209), X(204,210), X(207,213),
+  X(208,214), X(211,217), X(212,218), X(215,221), X(216,222), X(219,225),
+  X(220,226), X(223,229), X(224,230), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13),
+  X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29),
+  X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45),
+  X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61),
+  X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77),
+  X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93),
+  X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106),
+  X(107,109), X(108,110), X(111,113), X(112,114), X(115,117), X(116,118),
+  X(119,121), X(120,122), X(123,125), X(124,126), X(127,129), X(128,130),
+  X(131,133), X(132,134), X(135,137), X(136,138), X(139,141), X(140,142),
+  X(143,145), X(144,146), X(147,149), X(148,150), X(151,153), X(152,154),
+  X(155,157), X(156,158), X(159,161), X(160,162), X(163,165), X(164,166),
+  X(167,169), X(168,170), X(171,173), X(172,174), X(175,177), X(176,178),
+  X(179,181), X(180,182), X(183,185), X(184,186), X(187,189), X(188,190),
+  X(191,193), X(192,194), X(195,197), X(196,198), X(199,201), X(200,202),
+  X(203,205), X(204,206), X(207,209), X(208,210), X(211,213), X(212,214),
+  X(215,217), X(216,218), X(219,221), X(220,222), X(223,225), X(224,226),
+  X(227,229), X(228,230), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10), X(11,12),
+  X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26), X(27,28),
+  X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42), X(43,44),
+  X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58), X(59,60),
+  X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74), X(75,76),
+  X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90), X(91,92),
+  X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104), X(105,106),
+  X(107,108), X(109,110), X(111,112), X(113,114), X(115,116), X(117,118),
+  X(119,120), X(121,122), X(123,124), X(125,126), X(127,128), X(129,130),
+  X(131,132), X(133,134), X(135,136), X(137,138), X(139,140), X(141,142),
+  X(143,144), X(145,146), X(147,148), X(149,150), X(151,152), X(153,154),
+  X(155,156), X(157,158), X(159,160), X(161,162), X(163,164), X(165,166),
+  X(167,168), X(169,170), X(171,172), X(173,174), X(175,176), X(177,178),
+  X(179,180), X(181,182), X(183,184), X(185,186), X(187,188), X(189,190),
+  X(191,192), X(193,194), X(195,196), X(197,198), X(199,200), X(201,202),
+  X(203,204), X(205,206), X(207,208), X(209,210), X(211,212), X(213,214),
+  X(215,216), X(217,218), X(219,220), X(221,222), X(223,224), X(225,226),
+  X(227,228), X(229,230), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137),
+  X(12,139), X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151),
+  X(26,153), X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165),
+  X(40,167), X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179),
+  X(54,181), X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193),
+  X(68,195), X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207),
+  X(82,209), X(84,211), X(86,213), X(88,215), X(90,217), X(92,219), X(94,221),
+  X(96,223), X(98,225), X(100,227), X(102,229), X(2,65), X(4,67), X(6,69),
+  X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85),
+  X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99),
+  X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113),
+  X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127),
+  X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141),
+  X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155),
+  X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(124,187), X(126,189), X(128,191),
+  X(130,193), X(132,195), X(134,197), X(136,199), X(138,201), X(140,203),
+  X(142,205), X(144,207), X(146,209), X(148,211), X(150,213), X(152,215),
+  X(154,217), X(156,219), X(158,221), X(160,223), X(162,225), X(164,227),
+  X(166,229), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45),
+  X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61),
+  X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77),
+  X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93),
+  X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107),
+  X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121),
+  X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(146,177), X(148,179), X(150,181), X(152,183),
+  X(154,185), X(156,187), X(158,189), X(160,191), X(162,193), X(164,195),
+  X(166,197), X(168,199), X(170,201), X(172,203), X(174,205), X(176,207),
+  X(178,209), X(180,211), X(182,213), X(184,215), X(186,217), X(188,219),
+  X(190,221), X(192,223), X(194,225), X(196,227), X(198,229), X(2,17), X(4,19),
+  X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35),
+  X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51),
+  X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67),
+  X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83),
+  X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(170,185),
+  X(172,187), X(174,189), X(176,191), X(178,193), X(180,195), X(182,197),
+  X(184,199), X(186,201), X(188,203), X(190,205), X(192,207), X(194,209),
+  X(196,211), X(198,213), X(200,215), X(202,217), X(204,219), X(206,221),
+  X(208,223), X(210,225), X(212,227), X(214,229), X(2,9), X(4,11), X(6,13),
+  X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29),
+  X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45),
+  X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61),
+  X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77),
+  X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93),
+  X(88,95), X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107),
+  X(102,109), X(104,111), X(106,113), X(108,115), X(110,117), X(112,119),
+  X(114,121), X(116,123), X(118,125), X(120,127), X(122,129), X(124,131),
+  X(126,133), X(128,135), X(130,137), X(132,139), X(134,141), X(136,143),
+  X(138,145), X(140,147), X(142,149), X(144,151), X(146,153), X(148,155),
+  X(150,157), X(152,159), X(154,161), X(156,163), X(158,165), X(160,167),
+  X(162,169), X(164,171), X(166,173), X(168,175), X(170,177), X(172,179),
+  X(174,181), X(176,183), X(178,185), X(180,187), X(182,189), X(184,191),
+  X(186,193), X(188,195), X(190,197), X(192,199), X(194,201), X(196,203),
+  X(198,205), X(200,207), X(202,209), X(204,211), X(206,213), X(208,215),
+  X(210,217), X(212,219), X(214,221), X(216,223), X(218,225), X(220,227),
+  X(222,229), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17),
+  X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33),
+  X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49),
+  X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65),
+  X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81),
+  X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97),
+  X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133),
+  X(132,135), X(134,137), X(136,139), X(138,141), X(140,143), X(142,145),
+  X(144,147), X(146,149), X(148,151), X(150,153), X(152,155), X(154,157),
+  X(156,159), X(158,161), X(160,163), X(162,165), X(164,167), X(166,169),
+  X(168,171), X(170,173), X(172,175), X(174,177), X(176,179), X(178,181),
+  X(180,183), X(182,185), X(184,187), X(186,189), X(188,191), X(190,193),
+  X(192,195), X(194,197), X(196,199), X(198,201), X(200,203), X(202,205),
+  X(204,207), X(206,209), X(208,211), X(210,213), X(212,215), X(214,217),
+  X(216,219), X(218,221), X(220,223), X(222,225), X(224,227), X(226,229), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223), X(224,225), X(226,227), X(228,229)
+};
+S(232) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(97,225), X(98,226),
+  X(99,227), X(100,228), X(101,229), X(102,230), X(103,231), X(104,232), X(1,65),
+  X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73),
+  X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81),
+  X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89),
+  X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97),
+  X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103), X(40,104),
+  X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110), X(47,111),
+  X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117), X(54,118),
+  X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124), X(61,125),
+  X(62,126), X(63,127), X(64,128), X(129,193), X(130,194), X(131,195),
+  X(132,196), X(133,197), X(134,198), X(135,199), X(136,200), X(137,201),
+  X(138,202), X(139,203), X(140,204), X(141,205), X(142,206), X(143,207),
+  X(144,208), X(145,209), X(146,210), X(147,211), X(148,212), X(149,213),
+  X(150,214), X(151,215), X(152,216), X(153,217), X(154,218), X(155,219),
+  X(156,220), X(157,221), X(158,222), X(159,223), X(160,224), X(161,225),
+  X(162,226), X(163,227), X(164,228), X(165,229), X(166,230), X(167,231),
+  X(168,232), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134),
+  X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141),
+  X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148),
+  X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154), X(91,155),
+  X(92,156), X(93,157), X(94,158), X(95,159), X(96,160), X(97,161), X(98,162),
+  X(99,163), X(100,164), X(101,165), X(102,166), X(103,167), X(104,168),
+  X(105,169), X(106,170), X(107,171), X(108,172), X(109,173), X(110,174),
+  X(111,175), X(112,176), X(113,177), X(114,178), X(115,179), X(116,180),
+  X(117,181), X(118,182), X(119,183), X(120,184), X(121,185), X(122,186),
+  X(123,187), X(124,188), X(125,189), X(126,190), X(127,191), X(128,192),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103),
+  X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110),
+  X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117),
+  X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124),
+  X(93,125), X(94,126), X(95,127), X(96,128), X(129,161), X(130,162), X(131,163),
+  X(132,164), X(133,165), X(134,166), X(135,167), X(136,168), X(137,169),
+  X(138,170), X(139,171), X(140,172), X(141,173), X(142,174), X(143,175),
+  X(144,176), X(145,177), X(146,178), X(147,179), X(148,180), X(149,181),
+  X(150,182), X(151,183), X(152,184), X(153,185), X(154,186), X(155,187),
+  X(156,188), X(157,189), X(158,190), X(159,191), X(160,192), X(193,225),
+  X(194,226), X(195,227), X(196,228), X(197,229), X(198,230), X(199,231),
+  X(200,232), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(119,215), X(120,216), X(121,217), X(122,218),
+  X(123,219), X(124,220), X(125,221), X(126,222), X(127,223), X(128,224),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(165,197), X(166,198), X(167,199), X(168,200), X(169,201), X(170,202),
+  X(171,203), X(172,204), X(173,205), X(174,206), X(175,207), X(176,208),
+  X(177,209), X(178,210), X(179,211), X(180,212), X(181,213), X(182,214),
+  X(183,215), X(184,216), X(185,217), X(186,218), X(187,219), X(188,220),
+  X(189,221), X(190,222), X(191,223), X(192,224), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(201,217), X(202,218), X(203,219), X(204,220), X(205,221), X(206,222),
+  X(207,223), X(208,224), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163),
+  X(52,164), X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170),
+  X(59,171), X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(81,193),
+  X(82,194), X(83,195), X(84,196), X(85,197), X(86,198), X(87,199), X(88,200),
+  X(89,201), X(90,202), X(91,203), X(92,204), X(93,205), X(94,206), X(95,207),
+  X(96,208), X(113,225), X(114,226), X(115,227), X(116,228), X(117,229),
+  X(118,230), X(119,231), X(120,232), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(119,167), X(120,168), X(121,169), X(122,170), X(123,171),
+  X(124,172), X(125,173), X(126,174), X(127,175), X(128,176), X(145,193),
+  X(146,194), X(147,195), X(148,196), X(149,197), X(150,198), X(151,199),
+  X(152,200), X(153,201), X(154,202), X(155,203), X(156,204), X(157,205),
+  X(158,206), X(159,207), X(160,208), X(177,225), X(178,226), X(179,227),
+  X(180,228), X(181,229), X(182,230), X(183,231), X(184,232), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(117,133), X(118,134),
+  X(119,135), X(120,136), X(121,137), X(122,138), X(123,139), X(124,140),
+  X(125,141), X(126,142), X(127,143), X(128,144), X(145,161), X(146,162),
+  X(147,163), X(148,164), X(149,165), X(150,166), X(151,167), X(152,168),
+  X(153,169), X(154,170), X(155,171), X(156,172), X(157,173), X(158,174),
+  X(159,175), X(160,176), X(177,193), X(178,194), X(179,195), X(180,196),
+  X(181,197), X(182,198), X(183,199), X(184,200), X(185,201), X(186,202),
+  X(187,203), X(188,204), X(189,205), X(190,206), X(191,207), X(192,208),
+  X(209,225), X(210,226), X(211,227), X(212,228), X(213,229), X(214,230),
+  X(215,231), X(216,232), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109),
+  X(102,110), X(103,111), X(104,112), X(113,121), X(114,122), X(115,123),
+  X(116,124), X(117,125), X(118,126), X(119,127), X(120,128), X(129,137),
+  X(130,138), X(131,139), X(132,140), X(133,141), X(134,142), X(135,143),
+  X(136,144), X(145,153), X(146,154), X(147,155), X(148,156), X(149,157),
+  X(150,158), X(151,159), X(152,160), X(161,169), X(162,170), X(163,171),
+  X(164,172), X(165,173), X(166,174), X(167,175), X(168,176), X(177,185),
+  X(178,186), X(179,187), X(180,188), X(181,189), X(182,190), X(183,191),
+  X(184,192), X(193,201), X(194,202), X(195,203), X(196,204), X(197,205),
+  X(198,206), X(199,207), X(200,208), X(209,217), X(210,218), X(211,219),
+  X(212,220), X(213,221), X(214,222), X(215,223), X(216,224), X(9,129),
+  X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135), X(16,136),
+  X(25,145), X(26,146), X(27,147), X(28,148), X(29,149), X(30,150), X(31,151),
+  X(32,152), X(41,161), X(42,162), X(43,163), X(44,164), X(45,165), X(46,166),
+  X(47,167), X(48,168), X(57,177), X(58,178), X(59,179), X(60,180), X(61,181),
+  X(62,182), X(63,183), X(64,184), X(73,193), X(74,194), X(75,195), X(76,196),
+  X(77,197), X(78,198), X(79,199), X(80,200), X(89,209), X(90,210), X(91,211),
+  X(92,212), X(93,213), X(94,214), X(95,215), X(96,216), X(105,225), X(106,226),
+  X(107,227), X(108,228), X(109,229), X(110,230), X(111,231), X(112,232),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72),
+  X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88),
+  X(41,97), X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103),
+  X(48,104), X(57,113), X(58,114), X(59,115), X(60,116), X(61,117), X(62,118),
+  X(63,119), X(64,120), X(73,129), X(74,130), X(75,131), X(76,132), X(77,133),
+  X(78,134), X(79,135), X(80,136), X(89,145), X(90,146), X(91,147), X(92,148),
+  X(93,149), X(94,150), X(95,151), X(96,152), X(105,161), X(106,162), X(107,163),
+  X(108,164), X(109,165), X(110,166), X(111,167), X(112,168), X(121,177),
+  X(122,178), X(123,179), X(124,180), X(125,181), X(126,182), X(127,183),
+  X(128,184), X(137,193), X(138,194), X(139,195), X(140,196), X(141,197),
+  X(142,198), X(143,199), X(144,200), X(153,209), X(154,210), X(155,211),
+  X(156,212), X(157,213), X(158,214), X(159,215), X(160,216), X(169,225),
+  X(170,226), X(171,227), X(172,228), X(173,229), X(174,230), X(175,231),
+  X(176,232), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38),
+  X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54),
+  X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70),
+  X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86),
+  X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100), X(77,101),
+  X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115), X(92,116),
+  X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130), X(107,131),
+  X(108,132), X(109,133), X(110,134), X(111,135), X(112,136), X(121,145),
+  X(122,146), X(123,147), X(124,148), X(125,149), X(126,150), X(127,151),
+  X(128,152), X(137,161), X(138,162), X(139,163), X(140,164), X(141,165),
+  X(142,166), X(143,167), X(144,168), X(153,177), X(154,178), X(155,179),
+  X(156,180), X(157,181), X(158,182), X(159,183), X(160,184), X(169,193),
+  X(170,194), X(171,195), X(172,196), X(173,197), X(174,198), X(175,199),
+  X(176,200), X(185,209), X(186,210), X(187,211), X(188,212), X(189,213),
+  X(190,214), X(191,215), X(192,216), X(201,225), X(202,226), X(203,227),
+  X(204,228), X(205,229), X(206,230), X(207,231), X(208,232), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113),
+  X(106,114), X(107,115), X(108,116), X(109,117), X(110,118), X(111,119),
+  X(112,120), X(121,129), X(122,130), X(123,131), X(124,132), X(125,133),
+  X(126,134), X(127,135), X(128,136), X(137,145), X(138,146), X(139,147),
+  X(140,148), X(141,149), X(142,150), X(143,151), X(144,152), X(153,161),
+  X(154,162), X(155,163), X(156,164), X(157,165), X(158,166), X(159,167),
+  X(160,168), X(169,177), X(170,178), X(171,179), X(172,180), X(173,181),
+  X(174,182), X(175,183), X(176,184), X(185,193), X(186,194), X(187,195),
+  X(188,196), X(189,197), X(190,198), X(191,199), X(192,200), X(201,209),
+  X(202,210), X(203,211), X(204,212), X(205,213), X(206,214), X(207,215),
+  X(208,216), X(217,225), X(218,226), X(219,227), X(220,228), X(221,229),
+  X(222,230), X(223,231), X(224,232), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(147,151), X(148,152),
+  X(153,157), X(154,158), X(155,159), X(156,160), X(161,165), X(162,166),
+  X(163,167), X(164,168), X(169,173), X(170,174), X(171,175), X(172,176),
+  X(177,181), X(178,182), X(179,183), X(180,184), X(185,189), X(186,190),
+  X(187,191), X(188,192), X(193,197), X(194,198), X(195,199), X(196,200),
+  X(201,205), X(202,206), X(203,207), X(204,208), X(209,213), X(210,214),
+  X(211,215), X(212,216), X(217,221), X(218,222), X(219,223), X(220,224),
+  X(225,229), X(226,230), X(227,231), X(228,232), X(5,129), X(6,130), X(7,131),
+  X(8,132), X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146),
+  X(23,147), X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(37,161),
+  X(38,162), X(39,163), X(40,164), X(45,169), X(46,170), X(47,171), X(48,172),
+  X(53,177), X(54,178), X(55,179), X(56,180), X(61,185), X(62,186), X(63,187),
+  X(64,188), X(69,193), X(70,194), X(71,195), X(72,196), X(77,201), X(78,202),
+  X(79,203), X(80,204), X(85,209), X(86,210), X(87,211), X(88,212), X(93,217),
+  X(94,218), X(95,219), X(96,220), X(101,225), X(102,226), X(103,227),
+  X(104,228), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147),
+  X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162),
+  X(103,163), X(104,164), X(109,169), X(110,170), X(111,171), X(112,172),
+  X(117,177), X(118,178), X(119,179), X(120,180), X(125,185), X(126,186),
+  X(127,187), X(128,188), X(133,193), X(134,194), X(135,195), X(136,196),
+  X(141,201), X(142,202), X(143,203), X(144,204), X(149,209), X(150,210),
+  X(151,211), X(152,212), X(157,217), X(158,218), X(159,219), X(160,220),
+  X(165,225), X(166,226), X(167,227), X(168,228), X(5,33), X(6,34), X(7,35),
+  X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51),
+  X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67),
+  X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83),
+  X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(103,131), X(104,132), X(109,137), X(110,138), X(111,139),
+  X(112,140), X(117,145), X(118,146), X(119,147), X(120,148), X(125,153),
+  X(126,154), X(127,155), X(128,156), X(133,161), X(134,162), X(135,163),
+  X(136,164), X(141,169), X(142,170), X(143,171), X(144,172), X(149,177),
+  X(150,178), X(151,179), X(152,180), X(157,185), X(158,186), X(159,187),
+  X(160,188), X(165,193), X(166,194), X(167,195), X(168,196), X(173,201),
+  X(174,202), X(175,203), X(176,204), X(181,209), X(182,210), X(183,211),
+  X(184,212), X(189,217), X(190,218), X(191,219), X(192,220), X(197,225),
+  X(198,226), X(199,227), X(200,228), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(173,185), X(174,186),
+  X(175,187), X(176,188), X(181,193), X(182,194), X(183,195), X(184,196),
+  X(189,201), X(190,202), X(191,203), X(192,204), X(197,209), X(198,210),
+  X(199,211), X(200,212), X(205,217), X(206,218), X(207,219), X(208,220),
+  X(213,225), X(214,226), X(215,227), X(216,228), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27),
+  X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43),
+  X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59),
+  X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75),
+  X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91),
+  X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106),
+  X(103,107), X(104,108), X(109,113), X(110,114), X(111,115), X(112,116),
+  X(117,121), X(118,122), X(119,123), X(120,124), X(125,129), X(126,130),
+  X(127,131), X(128,132), X(133,137), X(134,138), X(135,139), X(136,140),
+  X(141,145), X(142,146), X(143,147), X(144,148), X(149,153), X(150,154),
+  X(151,155), X(152,156), X(157,161), X(158,162), X(159,163), X(160,164),
+  X(165,169), X(166,170), X(167,171), X(168,172), X(173,177), X(174,178),
+  X(175,179), X(176,180), X(181,185), X(182,186), X(183,187), X(184,188),
+  X(189,193), X(190,194), X(191,195), X(192,196), X(197,201), X(198,202),
+  X(199,203), X(200,204), X(205,209), X(206,210), X(207,211), X(208,212),
+  X(213,217), X(214,218), X(215,219), X(216,220), X(221,225), X(222,226),
+  X(223,227), X(224,228), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(129,131),
+  X(130,132), X(133,135), X(134,136), X(137,139), X(138,140), X(141,143),
+  X(142,144), X(145,147), X(146,148), X(149,151), X(150,152), X(153,155),
+  X(154,156), X(157,159), X(158,160), X(161,163), X(162,164), X(165,167),
+  X(166,168), X(169,171), X(170,172), X(173,175), X(174,176), X(177,179),
+  X(178,180), X(181,183), X(182,184), X(185,187), X(186,188), X(189,191),
+  X(190,192), X(193,195), X(194,196), X(197,199), X(198,200), X(201,203),
+  X(202,204), X(205,207), X(206,208), X(209,211), X(210,212), X(213,215),
+  X(214,216), X(217,219), X(218,220), X(221,223), X(222,224), X(225,227),
+  X(226,228), X(229,231), X(230,232), X(3,129), X(4,130), X(7,133), X(8,134),
+  X(11,137), X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149),
+  X(24,150), X(27,153), X(28,154), X(31,157), X(32,158), X(35,161), X(36,162),
+  X(39,165), X(40,166), X(43,169), X(44,170), X(47,173), X(48,174), X(51,177),
+  X(52,178), X(55,181), X(56,182), X(59,185), X(60,186), X(63,189), X(64,190),
+  X(67,193), X(68,194), X(71,197), X(72,198), X(75,201), X(76,202), X(79,205),
+  X(80,206), X(83,209), X(84,210), X(87,213), X(88,214), X(91,217), X(92,218),
+  X(95,221), X(96,222), X(99,225), X(100,226), X(103,229), X(104,230), X(3,65),
+  X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81),
+  X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97),
+  X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110),
+  X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125),
+  X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138),
+  X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153),
+  X(92,154), X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(127,189), X(128,190),
+  X(131,193), X(132,194), X(135,197), X(136,198), X(139,201), X(140,202),
+  X(143,205), X(144,206), X(147,209), X(148,210), X(151,213), X(152,214),
+  X(155,217), X(156,218), X(159,221), X(160,222), X(163,225), X(164,226),
+  X(167,229), X(168,230), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74),
+  X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90),
+  X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105),
+  X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118),
+  X(91,121), X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133),
+  X(104,134), X(107,137), X(108,138), X(111,141), X(112,142), X(115,145),
+  X(116,146), X(119,149), X(120,150), X(123,153), X(124,154), X(127,157),
+  X(128,158), X(131,161), X(132,162), X(135,165), X(136,166), X(139,169),
+  X(140,170), X(143,173), X(144,174), X(147,177), X(148,178), X(151,181),
+  X(152,182), X(155,185), X(156,186), X(159,189), X(160,190), X(163,193),
+  X(164,194), X(167,197), X(168,198), X(171,201), X(172,202), X(175,205),
+  X(176,206), X(179,209), X(180,210), X(183,213), X(184,214), X(187,217),
+  X(188,218), X(191,221), X(192,222), X(195,225), X(196,226), X(199,229),
+  X(200,230), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166),
+  X(155,169), X(156,170), X(159,173), X(160,174), X(163,177), X(164,178),
+  X(167,181), X(168,182), X(171,185), X(172,186), X(175,189), X(176,190),
+  X(179,193), X(180,194), X(183,197), X(184,198), X(187,201), X(188,202),
+  X(191,205), X(192,206), X(195,209), X(196,210), X(199,213), X(200,214),
+  X(203,217), X(204,218), X(207,221), X(208,222), X(211,225), X(212,226),
+  X(215,229), X(216,230), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50),
+  X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66),
+  X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82),
+  X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134),
+  X(131,137), X(132,138), X(135,141), X(136,142), X(139,145), X(140,146),
+  X(143,149), X(144,150), X(147,153), X(148,154), X(151,157), X(152,158),
+  X(155,161), X(156,162), X(159,165), X(160,166), X(163,169), X(164,170),
+  X(167,173), X(168,174), X(171,177), X(172,178), X(175,181), X(176,182),
+  X(179,185), X(180,186), X(183,189), X(184,190), X(187,193), X(188,194),
+  X(191,197), X(192,198), X(195,201), X(196,202), X(199,205), X(200,206),
+  X(203,209), X(204,210), X(207,213), X(208,214), X(211,217), X(212,218),
+  X(215,221), X(216,222), X(219,225), X(220,226), X(223,229), X(224,230), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134),
+  X(135,137), X(136,138), X(139,141), X(140,142), X(143,145), X(144,146),
+  X(147,149), X(148,150), X(151,153), X(152,154), X(155,157), X(156,158),
+  X(159,161), X(160,162), X(163,165), X(164,166), X(167,169), X(168,170),
+  X(171,173), X(172,174), X(175,177), X(176,178), X(179,181), X(180,182),
+  X(183,185), X(184,186), X(187,189), X(188,190), X(191,193), X(192,194),
+  X(195,197), X(196,198), X(199,201), X(200,202), X(203,205), X(204,206),
+  X(207,209), X(208,210), X(211,213), X(212,214), X(215,217), X(216,218),
+  X(219,221), X(220,222), X(223,225), X(224,226), X(227,229), X(228,230), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(221,222), X(223,224), X(225,226), X(227,228), X(229,230),
+  X(231,232), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181),
+  X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195),
+  X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(82,209),
+  X(84,211), X(86,213), X(88,215), X(90,217), X(92,219), X(94,221), X(96,223),
+  X(98,225), X(100,227), X(102,229), X(104,231), X(2,65), X(4,67), X(6,69),
+  X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85),
+  X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99),
+  X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113),
+  X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127),
+  X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141),
+  X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155),
+  X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(124,187), X(126,189), X(128,191),
+  X(130,193), X(132,195), X(134,197), X(136,199), X(138,201), X(140,203),
+  X(142,205), X(144,207), X(146,209), X(148,211), X(150,213), X(152,215),
+  X(154,217), X(156,219), X(158,221), X(160,223), X(162,225), X(164,227),
+  X(166,229), X(168,231), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75),
+  X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91),
+  X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105),
+  X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119),
+  X(90,121), X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133),
+  X(104,135), X(106,137), X(108,139), X(110,141), X(112,143), X(114,145),
+  X(116,147), X(118,149), X(120,151), X(122,153), X(124,155), X(126,157),
+  X(128,159), X(130,161), X(132,163), X(134,165), X(136,167), X(138,169),
+  X(140,171), X(142,173), X(144,175), X(146,177), X(148,179), X(150,181),
+  X(152,183), X(154,185), X(156,187), X(158,189), X(160,191), X(162,193),
+  X(164,195), X(166,197), X(168,199), X(170,201), X(172,203), X(174,205),
+  X(176,207), X(178,209), X(180,211), X(182,213), X(184,215), X(186,217),
+  X(188,219), X(190,221), X(192,223), X(194,225), X(196,227), X(198,229),
+  X(200,231), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(160,175), X(162,177), X(164,179),
+  X(166,181), X(168,183), X(170,185), X(172,187), X(174,189), X(176,191),
+  X(178,193), X(180,195), X(182,197), X(184,199), X(186,201), X(188,203),
+  X(190,205), X(192,207), X(194,209), X(196,211), X(198,213), X(200,215),
+  X(202,217), X(204,219), X(206,221), X(208,223), X(210,225), X(212,227),
+  X(214,229), X(216,231), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83),
+  X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(134,141), X(136,143), X(138,145), X(140,147),
+  X(142,149), X(144,151), X(146,153), X(148,155), X(150,157), X(152,159),
+  X(154,161), X(156,163), X(158,165), X(160,167), X(162,169), X(164,171),
+  X(166,173), X(168,175), X(170,177), X(172,179), X(174,181), X(176,183),
+  X(178,185), X(180,187), X(182,189), X(184,191), X(186,193), X(188,195),
+  X(190,197), X(192,199), X(194,201), X(196,203), X(198,205), X(200,207),
+  X(202,209), X(204,211), X(206,213), X(208,215), X(210,217), X(212,219),
+  X(214,221), X(216,223), X(218,225), X(220,227), X(222,229), X(224,231), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(120,123),
+  X(122,125), X(124,127), X(126,129), X(128,131), X(130,133), X(132,135),
+  X(134,137), X(136,139), X(138,141), X(140,143), X(142,145), X(144,147),
+  X(146,149), X(148,151), X(150,153), X(152,155), X(154,157), X(156,159),
+  X(158,161), X(160,163), X(162,165), X(164,167), X(166,169), X(168,171),
+  X(170,173), X(172,175), X(174,177), X(176,179), X(178,181), X(180,183),
+  X(182,185), X(184,187), X(186,189), X(188,191), X(190,193), X(192,195),
+  X(194,197), X(196,199), X(198,201), X(200,203), X(202,205), X(204,207),
+  X(206,209), X(208,211), X(210,213), X(212,215), X(214,217), X(216,219),
+  X(218,221), X(220,223), X(222,225), X(224,227), X(226,229), X(228,231), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223), X(224,225), X(226,227), X(228,229), X(230,231)
+};
+S(234) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(97,225), X(98,226),
+  X(99,227), X(100,228), X(101,229), X(102,230), X(103,231), X(104,232),
+  X(105,233), X(106,234), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70),
+  X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78),
+  X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86),
+  X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94),
+  X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101),
+  X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108),
+  X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115),
+  X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122),
+  X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(129,193),
+  X(130,194), X(131,195), X(132,196), X(133,197), X(134,198), X(135,199),
+  X(136,200), X(137,201), X(138,202), X(139,203), X(140,204), X(141,205),
+  X(142,206), X(143,207), X(144,208), X(145,209), X(146,210), X(147,211),
+  X(148,212), X(149,213), X(150,214), X(151,215), X(152,216), X(153,217),
+  X(154,218), X(155,219), X(156,220), X(157,221), X(158,222), X(159,223),
+  X(160,224), X(161,225), X(162,226), X(163,227), X(164,228), X(165,229),
+  X(166,230), X(167,231), X(168,232), X(169,233), X(170,234), X(65,129),
+  X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136),
+  X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143),
+  X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150),
+  X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157),
+  X(94,158), X(95,159), X(96,160), X(97,161), X(98,162), X(99,163), X(100,164),
+  X(101,165), X(102,166), X(103,167), X(104,168), X(105,169), X(106,170),
+  X(107,171), X(108,172), X(109,173), X(110,174), X(111,175), X(112,176),
+  X(113,177), X(114,178), X(115,179), X(116,180), X(117,181), X(118,182),
+  X(119,183), X(120,184), X(121,185), X(122,186), X(123,187), X(124,188),
+  X(125,189), X(126,190), X(127,191), X(128,192), X(1,33), X(2,34), X(3,35),
+  X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43),
+  X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51),
+  X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59),
+  X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(135,167), X(136,168), X(137,169), X(138,170), X(139,171),
+  X(140,172), X(141,173), X(142,174), X(143,175), X(144,176), X(145,177),
+  X(146,178), X(147,179), X(148,180), X(149,181), X(150,182), X(151,183),
+  X(152,184), X(153,185), X(154,186), X(155,187), X(156,188), X(157,189),
+  X(158,190), X(159,191), X(160,192), X(193,225), X(194,226), X(195,227),
+  X(196,228), X(197,229), X(198,230), X(199,231), X(200,232), X(201,233),
+  X(202,234), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(119,215), X(120,216), X(121,217), X(122,218),
+  X(123,219), X(124,220), X(125,221), X(126,222), X(127,223), X(128,224),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(165,197), X(166,198), X(167,199), X(168,200), X(169,201), X(170,202),
+  X(171,203), X(172,204), X(173,205), X(174,206), X(175,207), X(176,208),
+  X(177,209), X(178,210), X(179,211), X(180,212), X(181,213), X(182,214),
+  X(183,215), X(184,216), X(185,217), X(186,218), X(187,219), X(188,220),
+  X(189,221), X(190,222), X(191,223), X(192,224), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(201,217), X(202,218), X(203,219), X(204,220), X(205,221), X(206,222),
+  X(207,223), X(208,224), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163),
+  X(52,164), X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170),
+  X(59,171), X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(81,193),
+  X(82,194), X(83,195), X(84,196), X(85,197), X(86,198), X(87,199), X(88,200),
+  X(89,201), X(90,202), X(91,203), X(92,204), X(93,205), X(94,206), X(95,207),
+  X(96,208), X(113,225), X(114,226), X(115,227), X(116,228), X(117,229),
+  X(118,230), X(119,231), X(120,232), X(121,233), X(122,234), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135),
+  X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142),
+  X(95,143), X(96,144), X(113,161), X(114,162), X(115,163), X(116,164),
+  X(117,165), X(118,166), X(119,167), X(120,168), X(121,169), X(122,170),
+  X(123,171), X(124,172), X(125,173), X(126,174), X(127,175), X(128,176),
+  X(145,193), X(146,194), X(147,195), X(148,196), X(149,197), X(150,198),
+  X(151,199), X(152,200), X(153,201), X(154,202), X(155,203), X(156,204),
+  X(157,205), X(158,206), X(159,207), X(160,208), X(177,225), X(178,226),
+  X(179,227), X(180,228), X(181,229), X(182,230), X(183,231), X(184,232),
+  X(185,233), X(186,234), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37),
+  X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45),
+  X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69),
+  X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77),
+  X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100),
+  X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107),
+  X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130),
+  X(115,131), X(116,132), X(117,133), X(118,134), X(119,135), X(120,136),
+  X(121,137), X(122,138), X(123,139), X(124,140), X(125,141), X(126,142),
+  X(127,143), X(128,144), X(145,161), X(146,162), X(147,163), X(148,164),
+  X(149,165), X(150,166), X(151,167), X(152,168), X(153,169), X(154,170),
+  X(155,171), X(156,172), X(157,173), X(158,174), X(159,175), X(160,176),
+  X(177,193), X(178,194), X(179,195), X(180,196), X(181,197), X(182,198),
+  X(183,199), X(184,200), X(185,201), X(186,202), X(187,203), X(188,204),
+  X(189,205), X(190,206), X(191,207), X(192,208), X(209,225), X(210,226),
+  X(211,227), X(212,228), X(213,229), X(214,230), X(215,231), X(216,232),
+  X(217,233), X(218,234), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109),
+  X(102,110), X(103,111), X(104,112), X(113,121), X(114,122), X(115,123),
+  X(116,124), X(117,125), X(118,126), X(119,127), X(120,128), X(129,137),
+  X(130,138), X(131,139), X(132,140), X(133,141), X(134,142), X(135,143),
+  X(136,144), X(145,153), X(146,154), X(147,155), X(148,156), X(149,157),
+  X(150,158), X(151,159), X(152,160), X(161,169), X(162,170), X(163,171),
+  X(164,172), X(165,173), X(166,174), X(167,175), X(168,176), X(177,185),
+  X(178,186), X(179,187), X(180,188), X(181,189), X(182,190), X(183,191),
+  X(184,192), X(193,201), X(194,202), X(195,203), X(196,204), X(197,205),
+  X(198,206), X(199,207), X(200,208), X(209,217), X(210,218), X(211,219),
+  X(212,220), X(213,221), X(214,222), X(215,223), X(216,224), X(225,233),
+  X(226,234), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134),
+  X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149),
+  X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164),
+  X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178), X(59,179),
+  X(60,180), X(61,181), X(62,182), X(63,183), X(64,184), X(73,193), X(74,194),
+  X(75,195), X(76,196), X(77,197), X(78,198), X(79,199), X(80,200), X(89,209),
+  X(90,210), X(91,211), X(92,212), X(93,213), X(94,214), X(95,215), X(96,216),
+  X(105,225), X(106,226), X(107,227), X(108,228), X(109,229), X(110,230),
+  X(111,231), X(112,232), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115),
+  X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130),
+  X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136), X(89,145),
+  X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151), X(96,152),
+  X(105,161), X(106,162), X(107,163), X(108,164), X(109,165), X(110,166),
+  X(111,167), X(112,168), X(121,177), X(122,178), X(123,179), X(124,180),
+  X(125,181), X(126,182), X(127,183), X(128,184), X(137,193), X(138,194),
+  X(139,195), X(140,196), X(141,197), X(142,198), X(143,199), X(144,200),
+  X(153,209), X(154,210), X(155,211), X(156,212), X(157,213), X(158,214),
+  X(159,215), X(160,216), X(169,225), X(170,226), X(171,227), X(172,228),
+  X(173,229), X(174,230), X(175,231), X(176,232), X(9,33), X(10,34), X(11,35),
+  X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51),
+  X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67),
+  X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83),
+  X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(121,145), X(122,146), X(123,147), X(124,148), X(125,149),
+  X(126,150), X(127,151), X(128,152), X(137,161), X(138,162), X(139,163),
+  X(140,164), X(141,165), X(142,166), X(143,167), X(144,168), X(153,177),
+  X(154,178), X(155,179), X(156,180), X(157,181), X(158,182), X(159,183),
+  X(160,184), X(169,193), X(170,194), X(171,195), X(172,196), X(173,197),
+  X(174,198), X(175,199), X(176,200), X(185,209), X(186,210), X(187,211),
+  X(188,212), X(189,213), X(190,214), X(191,215), X(192,216), X(201,225),
+  X(202,226), X(203,227), X(204,228), X(205,229), X(206,230), X(207,231),
+  X(208,232), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22),
+  X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38),
+  X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54),
+  X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70),
+  X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86),
+  X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100), X(93,101),
+  X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(139,147), X(140,148), X(141,149),
+  X(142,150), X(143,151), X(144,152), X(153,161), X(154,162), X(155,163),
+  X(156,164), X(157,165), X(158,166), X(159,167), X(160,168), X(169,177),
+  X(170,178), X(171,179), X(172,180), X(173,181), X(174,182), X(175,183),
+  X(176,184), X(185,193), X(186,194), X(187,195), X(188,196), X(189,197),
+  X(190,198), X(191,199), X(192,200), X(201,209), X(202,210), X(203,211),
+  X(204,212), X(205,213), X(206,214), X(207,215), X(208,216), X(217,225),
+  X(218,226), X(219,227), X(220,228), X(221,229), X(222,230), X(223,231),
+  X(224,232), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(185,189), X(186,190), X(187,191), X(188,192),
+  X(193,197), X(194,198), X(195,199), X(196,200), X(201,205), X(202,206),
+  X(203,207), X(204,208), X(209,213), X(210,214), X(211,215), X(212,216),
+  X(217,221), X(218,222), X(219,223), X(220,224), X(225,229), X(226,230),
+  X(227,231), X(228,232), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137),
+  X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148),
+  X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163),
+  X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(53,177), X(54,178),
+  X(55,179), X(56,180), X(61,185), X(62,186), X(63,187), X(64,188), X(69,193),
+  X(70,194), X(71,195), X(72,196), X(77,201), X(78,202), X(79,203), X(80,204),
+  X(85,209), X(86,210), X(87,211), X(88,212), X(93,217), X(94,218), X(95,219),
+  X(96,220), X(101,225), X(102,226), X(103,227), X(104,228), X(109,233),
+  X(110,234), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147),
+  X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162),
+  X(103,163), X(104,164), X(109,169), X(110,170), X(111,171), X(112,172),
+  X(117,177), X(118,178), X(119,179), X(120,180), X(125,185), X(126,186),
+  X(127,187), X(128,188), X(133,193), X(134,194), X(135,195), X(136,196),
+  X(141,201), X(142,202), X(143,203), X(144,204), X(149,209), X(150,210),
+  X(151,211), X(152,212), X(157,217), X(158,218), X(159,219), X(160,220),
+  X(165,225), X(166,226), X(167,227), X(168,228), X(173,233), X(174,234),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92),
+  X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107),
+  X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121), X(94,122),
+  X(95,123), X(96,124), X(101,129), X(102,130), X(103,131), X(104,132),
+  X(109,137), X(110,138), X(111,139), X(112,140), X(117,145), X(118,146),
+  X(119,147), X(120,148), X(125,153), X(126,154), X(127,155), X(128,156),
+  X(133,161), X(134,162), X(135,163), X(136,164), X(141,169), X(142,170),
+  X(143,171), X(144,172), X(149,177), X(150,178), X(151,179), X(152,180),
+  X(157,185), X(158,186), X(159,187), X(160,188), X(165,193), X(166,194),
+  X(167,195), X(168,196), X(173,201), X(174,202), X(175,203), X(176,204),
+  X(181,209), X(182,210), X(183,211), X(184,212), X(189,217), X(190,218),
+  X(191,219), X(192,220), X(197,225), X(198,226), X(199,227), X(200,228),
+  X(205,233), X(206,234), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105),
+  X(94,106), X(95,107), X(96,108), X(101,113), X(102,114), X(103,115),
+  X(104,116), X(109,121), X(110,122), X(111,123), X(112,124), X(117,129),
+  X(118,130), X(119,131), X(120,132), X(125,137), X(126,138), X(127,139),
+  X(128,140), X(133,145), X(134,146), X(135,147), X(136,148), X(141,153),
+  X(142,154), X(143,155), X(144,156), X(149,161), X(150,162), X(151,163),
+  X(152,164), X(157,169), X(158,170), X(159,171), X(160,172), X(165,177),
+  X(166,178), X(167,179), X(168,180), X(173,185), X(174,186), X(175,187),
+  X(176,188), X(181,193), X(182,194), X(183,195), X(184,196), X(189,201),
+  X(190,202), X(191,203), X(192,204), X(197,209), X(198,210), X(199,211),
+  X(200,212), X(205,217), X(206,218), X(207,219), X(208,220), X(213,225),
+  X(214,226), X(215,227), X(216,228), X(221,233), X(222,234), X(5,9), X(6,10),
+  X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26),
+  X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42),
+  X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58),
+  X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74),
+  X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90),
+  X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105),
+  X(102,106), X(103,107), X(104,108), X(109,113), X(110,114), X(111,115),
+  X(112,116), X(117,121), X(118,122), X(119,123), X(120,124), X(125,129),
+  X(126,130), X(127,131), X(128,132), X(133,137), X(134,138), X(135,139),
+  X(136,140), X(141,145), X(142,146), X(143,147), X(144,148), X(149,153),
+  X(150,154), X(151,155), X(152,156), X(157,161), X(158,162), X(159,163),
+  X(160,164), X(165,169), X(166,170), X(167,171), X(168,172), X(173,177),
+  X(174,178), X(175,179), X(176,180), X(181,185), X(182,186), X(183,187),
+  X(184,188), X(189,193), X(190,194), X(191,195), X(192,196), X(197,201),
+  X(198,202), X(199,203), X(200,204), X(205,209), X(206,210), X(207,211),
+  X(208,212), X(213,217), X(214,218), X(215,219), X(216,220), X(221,225),
+  X(222,226), X(223,227), X(224,228), X(229,233), X(230,234), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(197,199), X(198,200), X(201,203), X(202,204), X(205,207),
+  X(206,208), X(209,211), X(210,212), X(213,215), X(214,216), X(217,219),
+  X(218,220), X(221,223), X(222,224), X(225,227), X(226,228), X(229,231),
+  X(230,232), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194),
+  X(71,197), X(72,198), X(75,201), X(76,202), X(79,205), X(80,206), X(83,209),
+  X(84,210), X(87,213), X(88,214), X(91,217), X(92,218), X(95,221), X(96,222),
+  X(99,225), X(100,226), X(103,229), X(104,230), X(107,233), X(108,234), X(3,65),
+  X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81),
+  X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97),
+  X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110),
+  X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125),
+  X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138),
+  X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153),
+  X(92,154), X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(127,189), X(128,190),
+  X(131,193), X(132,194), X(135,197), X(136,198), X(139,201), X(140,202),
+  X(143,205), X(144,206), X(147,209), X(148,210), X(151,213), X(152,214),
+  X(155,217), X(156,218), X(159,221), X(160,222), X(163,225), X(164,226),
+  X(167,229), X(168,230), X(171,233), X(172,234), X(3,33), X(4,34), X(7,37),
+  X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53),
+  X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69),
+  X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85),
+  X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(127,157), X(128,158), X(131,161), X(132,162),
+  X(135,165), X(136,166), X(139,169), X(140,170), X(143,173), X(144,174),
+  X(147,177), X(148,178), X(151,181), X(152,182), X(155,185), X(156,186),
+  X(159,189), X(160,190), X(163,193), X(164,194), X(167,197), X(168,198),
+  X(171,201), X(172,202), X(175,205), X(176,206), X(179,209), X(180,210),
+  X(183,213), X(184,214), X(187,217), X(188,218), X(191,221), X(192,222),
+  X(195,225), X(196,226), X(199,229), X(200,230), X(203,233), X(204,234),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(107,121),
+  X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(119,133),
+  X(120,134), X(123,137), X(124,138), X(127,141), X(128,142), X(131,145),
+  X(132,146), X(135,149), X(136,150), X(139,153), X(140,154), X(143,157),
+  X(144,158), X(147,161), X(148,162), X(151,165), X(152,166), X(155,169),
+  X(156,170), X(159,173), X(160,174), X(163,177), X(164,178), X(167,181),
+  X(168,182), X(171,185), X(172,186), X(175,189), X(176,190), X(179,193),
+  X(180,194), X(183,197), X(184,198), X(187,201), X(188,202), X(191,205),
+  X(192,206), X(195,209), X(196,210), X(199,213), X(200,214), X(203,217),
+  X(204,218), X(207,221), X(208,222), X(211,225), X(212,226), X(215,229),
+  X(216,230), X(219,233), X(220,234), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(175,181),
+  X(176,182), X(179,185), X(180,186), X(183,189), X(184,190), X(187,193),
+  X(188,194), X(191,197), X(192,198), X(195,201), X(196,202), X(199,205),
+  X(200,206), X(203,209), X(204,210), X(207,213), X(208,214), X(211,217),
+  X(212,218), X(215,221), X(216,222), X(219,225), X(220,226), X(223,229),
+  X(224,230), X(227,233), X(228,234), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13),
+  X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29),
+  X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45),
+  X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61),
+  X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77),
+  X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93),
+  X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106),
+  X(107,109), X(108,110), X(111,113), X(112,114), X(115,117), X(116,118),
+  X(119,121), X(120,122), X(123,125), X(124,126), X(127,129), X(128,130),
+  X(131,133), X(132,134), X(135,137), X(136,138), X(139,141), X(140,142),
+  X(143,145), X(144,146), X(147,149), X(148,150), X(151,153), X(152,154),
+  X(155,157), X(156,158), X(159,161), X(160,162), X(163,165), X(164,166),
+  X(167,169), X(168,170), X(171,173), X(172,174), X(175,177), X(176,178),
+  X(179,181), X(180,182), X(183,185), X(184,186), X(187,189), X(188,190),
+  X(191,193), X(192,194), X(195,197), X(196,198), X(199,201), X(200,202),
+  X(203,205), X(204,206), X(207,209), X(208,210), X(211,213), X(212,214),
+  X(215,217), X(216,218), X(219,221), X(220,222), X(223,225), X(224,226),
+  X(227,229), X(228,230), X(231,233), X(232,234), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202), X(203,204), X(205,206), X(207,208), X(209,210),
+  X(211,212), X(213,214), X(215,216), X(217,218), X(219,220), X(221,222),
+  X(223,224), X(225,226), X(227,228), X(229,230), X(231,232), X(233,234),
+  X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139), X(14,141),
+  X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153), X(28,155),
+  X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167), X(42,169),
+  X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181), X(56,183),
+  X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195), X(70,197),
+  X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(82,209), X(84,211),
+  X(86,213), X(88,215), X(90,217), X(92,219), X(94,221), X(96,223), X(98,225),
+  X(100,227), X(102,229), X(104,231), X(106,233), X(2,65), X(4,67), X(6,69),
+  X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85),
+  X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99),
+  X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113),
+  X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127),
+  X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141),
+  X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155),
+  X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(124,187), X(126,189), X(128,191),
+  X(130,193), X(132,195), X(134,197), X(136,199), X(138,201), X(140,203),
+  X(142,205), X(144,207), X(146,209), X(148,211), X(150,213), X(152,215),
+  X(154,217), X(156,219), X(158,221), X(160,223), X(162,225), X(164,227),
+  X(166,229), X(168,231), X(170,233), X(2,33), X(4,35), X(6,37), X(8,39),
+  X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55),
+  X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71),
+  X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87),
+  X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101),
+  X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113), X(84,115),
+  X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127), X(98,129),
+  X(100,131), X(102,133), X(104,135), X(106,137), X(108,139), X(110,141),
+  X(112,143), X(114,145), X(116,147), X(118,149), X(120,151), X(122,153),
+  X(124,155), X(126,157), X(128,159), X(130,161), X(132,163), X(134,165),
+  X(136,167), X(138,169), X(140,171), X(142,173), X(144,175), X(146,177),
+  X(148,179), X(150,181), X(152,183), X(154,185), X(156,187), X(158,189),
+  X(160,191), X(162,193), X(164,195), X(166,197), X(168,199), X(170,201),
+  X(172,203), X(174,205), X(176,207), X(178,209), X(180,211), X(182,213),
+  X(184,215), X(186,217), X(188,219), X(190,221), X(192,223), X(194,225),
+  X(196,227), X(198,229), X(200,231), X(202,233), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(170,185),
+  X(172,187), X(174,189), X(176,191), X(178,193), X(180,195), X(182,197),
+  X(184,199), X(186,201), X(188,203), X(190,205), X(192,207), X(194,209),
+  X(196,211), X(198,213), X(200,215), X(202,217), X(204,219), X(206,221),
+  X(208,223), X(210,225), X(212,227), X(214,229), X(216,231), X(218,233), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57),
+  X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73),
+  X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89),
+  X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103),
+  X(98,105), X(100,107), X(102,109), X(104,111), X(106,113), X(108,115),
+  X(110,117), X(112,119), X(114,121), X(116,123), X(118,125), X(120,127),
+  X(122,129), X(124,131), X(126,133), X(128,135), X(130,137), X(132,139),
+  X(134,141), X(136,143), X(138,145), X(140,147), X(142,149), X(144,151),
+  X(146,153), X(148,155), X(150,157), X(152,159), X(154,161), X(156,163),
+  X(158,165), X(160,167), X(162,169), X(164,171), X(166,173), X(168,175),
+  X(170,177), X(172,179), X(174,181), X(176,183), X(178,185), X(180,187),
+  X(182,189), X(184,191), X(186,193), X(188,195), X(190,197), X(192,199),
+  X(194,201), X(196,203), X(198,205), X(200,207), X(202,209), X(204,211),
+  X(206,213), X(208,215), X(210,217), X(212,219), X(214,221), X(216,223),
+  X(218,225), X(220,227), X(222,229), X(224,231), X(226,233), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(130,133), X(132,135), X(134,137),
+  X(136,139), X(138,141), X(140,143), X(142,145), X(144,147), X(146,149),
+  X(148,151), X(150,153), X(152,155), X(154,157), X(156,159), X(158,161),
+  X(160,163), X(162,165), X(164,167), X(166,169), X(168,171), X(170,173),
+  X(172,175), X(174,177), X(176,179), X(178,181), X(180,183), X(182,185),
+  X(184,187), X(186,189), X(188,191), X(190,193), X(192,195), X(194,197),
+  X(196,199), X(198,201), X(200,203), X(202,205), X(204,207), X(206,209),
+  X(208,211), X(210,213), X(212,215), X(214,217), X(216,219), X(218,221),
+  X(220,223), X(222,225), X(224,227), X(226,229), X(228,231), X(230,233), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223), X(224,225), X(226,227), X(228,229), X(230,231),
+  X(232,233)
+};
+S(236) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(97,225), X(98,226),
+  X(99,227), X(100,228), X(101,229), X(102,230), X(103,231), X(104,232),
+  X(105,233), X(106,234), X(107,235), X(108,236), X(1,65), X(2,66), X(3,67),
+  X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75),
+  X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83),
+  X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91),
+  X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99),
+  X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106),
+  X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113),
+  X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120),
+  X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127),
+  X(64,128), X(129,193), X(130,194), X(131,195), X(132,196), X(133,197),
+  X(134,198), X(135,199), X(136,200), X(137,201), X(138,202), X(139,203),
+  X(140,204), X(141,205), X(142,206), X(143,207), X(144,208), X(145,209),
+  X(146,210), X(147,211), X(148,212), X(149,213), X(150,214), X(151,215),
+  X(152,216), X(153,217), X(154,218), X(155,219), X(156,220), X(157,221),
+  X(158,222), X(159,223), X(160,224), X(161,225), X(162,226), X(163,227),
+  X(164,228), X(165,229), X(166,230), X(167,231), X(168,232), X(169,233),
+  X(170,234), X(171,235), X(172,236), X(65,129), X(66,130), X(67,131), X(68,132),
+  X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139),
+  X(76,140), X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146),
+  X(83,147), X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153),
+  X(90,154), X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160),
+  X(97,161), X(98,162), X(99,163), X(100,164), X(101,165), X(102,166),
+  X(103,167), X(104,168), X(105,169), X(106,170), X(107,171), X(108,172),
+  X(109,173), X(110,174), X(111,175), X(112,176), X(113,177), X(114,178),
+  X(115,179), X(116,180), X(117,181), X(118,182), X(119,183), X(120,184),
+  X(121,185), X(122,186), X(123,187), X(124,188), X(125,189), X(126,190),
+  X(127,191), X(128,192), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101),
+  X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108),
+  X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115),
+  X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122),
+  X(91,123), X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161),
+  X(130,162), X(131,163), X(132,164), X(133,165), X(134,166), X(135,167),
+  X(136,168), X(137,169), X(138,170), X(139,171), X(140,172), X(141,173),
+  X(142,174), X(143,175), X(144,176), X(145,177), X(146,178), X(147,179),
+  X(148,180), X(149,181), X(150,182), X(151,183), X(152,184), X(153,185),
+  X(154,186), X(155,187), X(156,188), X(157,189), X(158,190), X(159,191),
+  X(160,192), X(193,225), X(194,226), X(195,227), X(196,228), X(197,229),
+  X(198,230), X(199,231), X(200,232), X(201,233), X(202,234), X(203,235),
+  X(204,236), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(119,215), X(120,216), X(121,217), X(122,218),
+  X(123,219), X(124,220), X(125,221), X(126,222), X(127,223), X(128,224),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(165,197), X(166,198), X(167,199), X(168,200), X(169,201), X(170,202),
+  X(171,203), X(172,204), X(173,205), X(174,206), X(175,207), X(176,208),
+  X(177,209), X(178,210), X(179,211), X(180,212), X(181,213), X(182,214),
+  X(183,215), X(184,216), X(185,217), X(186,218), X(187,219), X(188,220),
+  X(189,221), X(190,222), X(191,223), X(192,224), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(201,217), X(202,218), X(203,219), X(204,220), X(205,221), X(206,222),
+  X(207,223), X(208,224), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163),
+  X(52,164), X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170),
+  X(59,171), X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(81,193),
+  X(82,194), X(83,195), X(84,196), X(85,197), X(86,198), X(87,199), X(88,200),
+  X(89,201), X(90,202), X(91,203), X(92,204), X(93,205), X(94,206), X(95,207),
+  X(96,208), X(113,225), X(114,226), X(115,227), X(116,228), X(117,229),
+  X(118,230), X(119,231), X(120,232), X(121,233), X(122,234), X(123,235),
+  X(124,236), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100), X(53,101),
+  X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107), X(60,108),
+  X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130), X(83,131),
+  X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137), X(90,138),
+  X(91,139), X(92,140), X(93,141), X(94,142), X(95,143), X(96,144), X(113,161),
+  X(114,162), X(115,163), X(116,164), X(117,165), X(118,166), X(119,167),
+  X(120,168), X(121,169), X(122,170), X(123,171), X(124,172), X(125,173),
+  X(126,174), X(127,175), X(128,176), X(145,193), X(146,194), X(147,195),
+  X(148,196), X(149,197), X(150,198), X(151,199), X(152,200), X(153,201),
+  X(154,202), X(155,203), X(156,204), X(157,205), X(158,206), X(159,207),
+  X(160,208), X(177,225), X(178,226), X(179,227), X(180,228), X(181,229),
+  X(182,230), X(183,231), X(184,232), X(185,233), X(186,234), X(187,235),
+  X(188,236), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100), X(85,101),
+  X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107), X(92,108),
+  X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130), X(115,131),
+  X(116,132), X(117,133), X(118,134), X(119,135), X(120,136), X(121,137),
+  X(122,138), X(123,139), X(124,140), X(125,141), X(126,142), X(127,143),
+  X(128,144), X(145,161), X(146,162), X(147,163), X(148,164), X(149,165),
+  X(150,166), X(151,167), X(152,168), X(153,169), X(154,170), X(155,171),
+  X(156,172), X(157,173), X(158,174), X(159,175), X(160,176), X(177,193),
+  X(178,194), X(179,195), X(180,196), X(181,197), X(182,198), X(183,199),
+  X(184,200), X(185,201), X(186,202), X(187,203), X(188,204), X(189,205),
+  X(190,206), X(191,207), X(192,208), X(209,225), X(210,226), X(211,227),
+  X(212,228), X(213,229), X(214,230), X(215,231), X(216,232), X(217,233),
+  X(218,234), X(219,235), X(220,236), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13),
+  X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29),
+  X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45),
+  X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61),
+  X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77),
+  X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93),
+  X(86,94), X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108),
+  X(101,109), X(102,110), X(103,111), X(104,112), X(113,121), X(114,122),
+  X(115,123), X(116,124), X(117,125), X(118,126), X(119,127), X(120,128),
+  X(129,137), X(130,138), X(131,139), X(132,140), X(133,141), X(134,142),
+  X(135,143), X(136,144), X(145,153), X(146,154), X(147,155), X(148,156),
+  X(149,157), X(150,158), X(151,159), X(152,160), X(161,169), X(162,170),
+  X(163,171), X(164,172), X(165,173), X(166,174), X(167,175), X(168,176),
+  X(177,185), X(178,186), X(179,187), X(180,188), X(181,189), X(182,190),
+  X(183,191), X(184,192), X(193,201), X(194,202), X(195,203), X(196,204),
+  X(197,205), X(198,206), X(199,207), X(200,208), X(209,217), X(210,218),
+  X(211,219), X(212,220), X(213,221), X(214,222), X(215,223), X(216,224),
+  X(225,233), X(226,234), X(227,235), X(228,236), X(9,129), X(10,130), X(11,131),
+  X(12,132), X(13,133), X(14,134), X(15,135), X(16,136), X(25,145), X(26,146),
+  X(27,147), X(28,148), X(29,149), X(30,150), X(31,151), X(32,152), X(41,161),
+  X(42,162), X(43,163), X(44,164), X(45,165), X(46,166), X(47,167), X(48,168),
+  X(57,177), X(58,178), X(59,179), X(60,180), X(61,181), X(62,182), X(63,183),
+  X(64,184), X(73,193), X(74,194), X(75,195), X(76,196), X(77,197), X(78,198),
+  X(79,199), X(80,200), X(89,209), X(90,210), X(91,211), X(92,212), X(93,213),
+  X(94,214), X(95,215), X(96,216), X(105,225), X(106,226), X(107,227),
+  X(108,228), X(109,229), X(110,230), X(111,231), X(112,232), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98),
+  X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113),
+  X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120),
+  X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135),
+  X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150),
+  X(95,151), X(96,152), X(105,161), X(106,162), X(107,163), X(108,164),
+  X(109,165), X(110,166), X(111,167), X(112,168), X(121,177), X(122,178),
+  X(123,179), X(124,180), X(125,181), X(126,182), X(127,183), X(128,184),
+  X(137,193), X(138,194), X(139,195), X(140,196), X(141,197), X(142,198),
+  X(143,199), X(144,200), X(153,209), X(154,210), X(155,211), X(156,212),
+  X(157,213), X(158,214), X(159,215), X(160,216), X(169,225), X(170,226),
+  X(171,227), X(172,228), X(173,229), X(174,230), X(175,231), X(176,232),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88),
+  X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103),
+  X(80,104), X(89,113), X(90,114), X(91,115), X(92,116), X(93,117), X(94,118),
+  X(95,119), X(96,120), X(105,129), X(106,130), X(107,131), X(108,132),
+  X(109,133), X(110,134), X(111,135), X(112,136), X(121,145), X(122,146),
+  X(123,147), X(124,148), X(125,149), X(126,150), X(127,151), X(128,152),
+  X(137,161), X(138,162), X(139,163), X(140,164), X(141,165), X(142,166),
+  X(143,167), X(144,168), X(153,177), X(154,178), X(155,179), X(156,180),
+  X(157,181), X(158,182), X(159,183), X(160,184), X(169,193), X(170,194),
+  X(171,195), X(172,196), X(173,197), X(174,198), X(175,199), X(176,200),
+  X(185,209), X(186,210), X(187,211), X(188,212), X(189,213), X(190,214),
+  X(191,215), X(192,216), X(201,225), X(202,226), X(203,227), X(204,228),
+  X(205,229), X(206,230), X(207,231), X(208,232), X(9,17), X(10,18), X(11,19),
+  X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35),
+  X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51),
+  X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67),
+  X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83),
+  X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(125,133), X(126,134),
+  X(127,135), X(128,136), X(137,145), X(138,146), X(139,147), X(140,148),
+  X(141,149), X(142,150), X(143,151), X(144,152), X(153,161), X(154,162),
+  X(155,163), X(156,164), X(157,165), X(158,166), X(159,167), X(160,168),
+  X(169,177), X(170,178), X(171,179), X(172,180), X(173,181), X(174,182),
+  X(175,183), X(176,184), X(185,193), X(186,194), X(187,195), X(188,196),
+  X(189,197), X(190,198), X(191,199), X(192,200), X(201,209), X(202,210),
+  X(203,211), X(204,212), X(205,213), X(206,214), X(207,215), X(208,216),
+  X(217,225), X(218,226), X(219,227), X(220,228), X(221,229), X(222,230),
+  X(223,231), X(224,232), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14),
+  X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30),
+  X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46),
+  X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62),
+  X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78),
+  X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94),
+  X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109),
+  X(106,110), X(107,111), X(108,112), X(113,117), X(114,118), X(115,119),
+  X(116,120), X(121,125), X(122,126), X(123,127), X(124,128), X(129,133),
+  X(130,134), X(131,135), X(132,136), X(137,141), X(138,142), X(139,143),
+  X(140,144), X(145,149), X(146,150), X(147,151), X(148,152), X(153,157),
+  X(154,158), X(155,159), X(156,160), X(161,165), X(162,166), X(163,167),
+  X(164,168), X(169,173), X(170,174), X(171,175), X(172,176), X(177,181),
+  X(178,182), X(179,183), X(180,184), X(185,189), X(186,190), X(187,191),
+  X(188,192), X(193,197), X(194,198), X(195,199), X(196,200), X(201,205),
+  X(202,206), X(203,207), X(204,208), X(209,213), X(210,214), X(211,215),
+  X(212,216), X(217,221), X(218,222), X(219,223), X(220,224), X(225,229),
+  X(226,230), X(227,231), X(228,232), X(5,129), X(6,130), X(7,131), X(8,132),
+  X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147),
+  X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162),
+  X(39,163), X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(53,177),
+  X(54,178), X(55,179), X(56,180), X(61,185), X(62,186), X(63,187), X(64,188),
+  X(69,193), X(70,194), X(71,195), X(72,196), X(77,201), X(78,202), X(79,203),
+  X(80,204), X(85,209), X(86,210), X(87,211), X(88,212), X(93,217), X(94,218),
+  X(95,219), X(96,220), X(101,225), X(102,226), X(103,227), X(104,228),
+  X(109,233), X(110,234), X(111,235), X(112,236), X(5,65), X(6,66), X(7,67),
+  X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82), X(23,83),
+  X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98), X(39,99),
+  X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113), X(54,114),
+  X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124), X(69,129),
+  X(70,130), X(71,131), X(72,132), X(77,137), X(78,138), X(79,139), X(80,140),
+  X(85,145), X(86,146), X(87,147), X(88,148), X(93,153), X(94,154), X(95,155),
+  X(96,156), X(101,161), X(102,162), X(103,163), X(104,164), X(109,169),
+  X(110,170), X(111,171), X(112,172), X(117,177), X(118,178), X(119,179),
+  X(120,180), X(125,185), X(126,186), X(127,187), X(128,188), X(133,193),
+  X(134,194), X(135,195), X(136,196), X(141,201), X(142,202), X(143,203),
+  X(144,204), X(149,209), X(150,210), X(151,211), X(152,212), X(157,217),
+  X(158,218), X(159,219), X(160,220), X(165,225), X(166,226), X(167,227),
+  X(168,228), X(173,233), X(174,234), X(175,235), X(176,236), X(5,33), X(6,34),
+  X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50),
+  X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66),
+  X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82),
+  X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98),
+  X(71,99), X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113),
+  X(86,114), X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124),
+  X(101,129), X(102,130), X(103,131), X(104,132), X(109,137), X(110,138),
+  X(111,139), X(112,140), X(117,145), X(118,146), X(119,147), X(120,148),
+  X(125,153), X(126,154), X(127,155), X(128,156), X(133,161), X(134,162),
+  X(135,163), X(136,164), X(141,169), X(142,170), X(143,171), X(144,172),
+  X(149,177), X(150,178), X(151,179), X(152,180), X(157,185), X(158,186),
+  X(159,187), X(160,188), X(165,193), X(166,194), X(167,195), X(168,196),
+  X(173,201), X(174,202), X(175,203), X(176,204), X(181,209), X(182,210),
+  X(183,211), X(184,212), X(189,217), X(190,218), X(191,219), X(192,220),
+  X(197,225), X(198,226), X(199,227), X(200,228), X(205,233), X(206,234),
+  X(207,235), X(208,236), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105),
+  X(94,106), X(95,107), X(96,108), X(101,113), X(102,114), X(103,115),
+  X(104,116), X(109,121), X(110,122), X(111,123), X(112,124), X(117,129),
+  X(118,130), X(119,131), X(120,132), X(125,137), X(126,138), X(127,139),
+  X(128,140), X(133,145), X(134,146), X(135,147), X(136,148), X(141,153),
+  X(142,154), X(143,155), X(144,156), X(149,161), X(150,162), X(151,163),
+  X(152,164), X(157,169), X(158,170), X(159,171), X(160,172), X(165,177),
+  X(166,178), X(167,179), X(168,180), X(173,185), X(174,186), X(175,187),
+  X(176,188), X(181,193), X(182,194), X(183,195), X(184,196), X(189,201),
+  X(190,202), X(191,203), X(192,204), X(197,209), X(198,210), X(199,211),
+  X(200,212), X(205,217), X(206,218), X(207,219), X(208,220), X(213,225),
+  X(214,226), X(215,227), X(216,228), X(221,233), X(222,234), X(223,235),
+  X(224,236), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19),
+  X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35),
+  X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51),
+  X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67),
+  X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83),
+  X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99),
+  X(96,100), X(101,105), X(102,106), X(103,107), X(104,108), X(109,113),
+  X(110,114), X(111,115), X(112,116), X(117,121), X(118,122), X(119,123),
+  X(120,124), X(125,129), X(126,130), X(127,131), X(128,132), X(133,137),
+  X(134,138), X(135,139), X(136,140), X(141,145), X(142,146), X(143,147),
+  X(144,148), X(149,153), X(150,154), X(151,155), X(152,156), X(157,161),
+  X(158,162), X(159,163), X(160,164), X(165,169), X(166,170), X(167,171),
+  X(168,172), X(173,177), X(174,178), X(175,179), X(176,180), X(181,185),
+  X(182,186), X(183,187), X(184,188), X(189,193), X(190,194), X(191,195),
+  X(192,196), X(197,201), X(198,202), X(199,203), X(200,204), X(205,209),
+  X(206,210), X(207,211), X(208,212), X(213,217), X(214,218), X(215,219),
+  X(216,220), X(221,225), X(222,226), X(223,227), X(224,228), X(229,233),
+  X(230,234), X(231,235), X(232,236), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11),
+  X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27),
+  X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43),
+  X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59),
+  X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75),
+  X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91),
+  X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104),
+  X(105,107), X(106,108), X(109,111), X(110,112), X(113,115), X(114,116),
+  X(117,119), X(118,120), X(121,123), X(122,124), X(125,127), X(126,128),
+  X(129,131), X(130,132), X(133,135), X(134,136), X(137,139), X(138,140),
+  X(141,143), X(142,144), X(145,147), X(146,148), X(149,151), X(150,152),
+  X(153,155), X(154,156), X(157,159), X(158,160), X(161,163), X(162,164),
+  X(165,167), X(166,168), X(169,171), X(170,172), X(173,175), X(174,176),
+  X(177,179), X(178,180), X(181,183), X(182,184), X(185,187), X(186,188),
+  X(189,191), X(190,192), X(193,195), X(194,196), X(197,199), X(198,200),
+  X(201,203), X(202,204), X(205,207), X(206,208), X(209,211), X(210,212),
+  X(213,215), X(214,216), X(217,219), X(218,220), X(221,223), X(222,224),
+  X(225,227), X(226,228), X(229,231), X(230,232), X(233,235), X(234,236),
+  X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138), X(15,141),
+  X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153), X(28,154),
+  X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166), X(43,169),
+  X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181), X(56,182),
+  X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194), X(71,197),
+  X(72,198), X(75,201), X(76,202), X(79,205), X(80,206), X(83,209), X(84,210),
+  X(87,213), X(88,214), X(91,217), X(92,218), X(95,221), X(96,222), X(99,225),
+  X(100,226), X(103,229), X(104,230), X(107,233), X(108,234), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154),
+  X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(127,189), X(128,190),
+  X(131,193), X(132,194), X(135,197), X(136,198), X(139,201), X(140,202),
+  X(143,205), X(144,206), X(147,209), X(148,210), X(151,213), X(152,214),
+  X(155,217), X(156,218), X(159,221), X(160,222), X(163,225), X(164,226),
+  X(167,229), X(168,230), X(171,233), X(172,234), X(3,33), X(4,34), X(7,37),
+  X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53),
+  X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69),
+  X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85),
+  X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(127,157), X(128,158), X(131,161), X(132,162),
+  X(135,165), X(136,166), X(139,169), X(140,170), X(143,173), X(144,174),
+  X(147,177), X(148,178), X(151,181), X(152,182), X(155,185), X(156,186),
+  X(159,189), X(160,190), X(163,193), X(164,194), X(167,197), X(168,198),
+  X(171,201), X(172,202), X(175,205), X(176,206), X(179,209), X(180,210),
+  X(183,213), X(184,214), X(187,217), X(188,218), X(191,221), X(192,222),
+  X(195,225), X(196,226), X(199,229), X(200,230), X(203,233), X(204,234),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(107,121),
+  X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(119,133),
+  X(120,134), X(123,137), X(124,138), X(127,141), X(128,142), X(131,145),
+  X(132,146), X(135,149), X(136,150), X(139,153), X(140,154), X(143,157),
+  X(144,158), X(147,161), X(148,162), X(151,165), X(152,166), X(155,169),
+  X(156,170), X(159,173), X(160,174), X(163,177), X(164,178), X(167,181),
+  X(168,182), X(171,185), X(172,186), X(175,189), X(176,190), X(179,193),
+  X(180,194), X(183,197), X(184,198), X(187,201), X(188,202), X(191,205),
+  X(192,206), X(195,209), X(196,210), X(199,213), X(200,214), X(203,217),
+  X(204,218), X(207,221), X(208,222), X(211,225), X(212,226), X(215,229),
+  X(216,230), X(219,233), X(220,234), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(175,181),
+  X(176,182), X(179,185), X(180,186), X(183,189), X(184,190), X(187,193),
+  X(188,194), X(191,197), X(192,198), X(195,201), X(196,202), X(199,205),
+  X(200,206), X(203,209), X(204,210), X(207,213), X(208,214), X(211,217),
+  X(212,218), X(215,221), X(216,222), X(219,225), X(220,226), X(223,229),
+  X(224,230), X(227,233), X(228,234), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13),
+  X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29),
+  X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45),
+  X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61),
+  X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77),
+  X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93),
+  X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106),
+  X(107,109), X(108,110), X(111,113), X(112,114), X(115,117), X(116,118),
+  X(119,121), X(120,122), X(123,125), X(124,126), X(127,129), X(128,130),
+  X(131,133), X(132,134), X(135,137), X(136,138), X(139,141), X(140,142),
+  X(143,145), X(144,146), X(147,149), X(148,150), X(151,153), X(152,154),
+  X(155,157), X(156,158), X(159,161), X(160,162), X(163,165), X(164,166),
+  X(167,169), X(168,170), X(171,173), X(172,174), X(175,177), X(176,178),
+  X(179,181), X(180,182), X(183,185), X(184,186), X(187,189), X(188,190),
+  X(191,193), X(192,194), X(195,197), X(196,198), X(199,201), X(200,202),
+  X(203,205), X(204,206), X(207,209), X(208,210), X(211,213), X(212,214),
+  X(215,217), X(216,218), X(219,221), X(220,222), X(223,225), X(224,226),
+  X(227,229), X(228,230), X(231,233), X(232,234), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202), X(203,204), X(205,206), X(207,208), X(209,210),
+  X(211,212), X(213,214), X(215,216), X(217,218), X(219,220), X(221,222),
+  X(223,224), X(225,226), X(227,228), X(229,230), X(231,232), X(233,234),
+  X(235,236), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181),
+  X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195),
+  X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(82,209),
+  X(84,211), X(86,213), X(88,215), X(90,217), X(92,219), X(94,221), X(96,223),
+  X(98,225), X(100,227), X(102,229), X(104,231), X(106,233), X(108,235), X(2,65),
+  X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81),
+  X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97),
+  X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111),
+  X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125),
+  X(64,127), X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139),
+  X(78,141), X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153),
+  X(92,155), X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(124,187), X(126,189), X(128,191),
+  X(130,193), X(132,195), X(134,197), X(136,199), X(138,201), X(140,203),
+  X(142,205), X(144,207), X(146,209), X(148,211), X(150,213), X(152,215),
+  X(154,217), X(156,219), X(158,221), X(160,223), X(162,225), X(164,227),
+  X(166,229), X(168,231), X(170,233), X(172,235), X(2,33), X(4,35), X(6,37),
+  X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53),
+  X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69),
+  X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85),
+  X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99),
+  X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113),
+  X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127),
+  X(98,129), X(100,131), X(102,133), X(104,135), X(106,137), X(108,139),
+  X(110,141), X(112,143), X(114,145), X(116,147), X(118,149), X(120,151),
+  X(122,153), X(124,155), X(126,157), X(128,159), X(130,161), X(132,163),
+  X(134,165), X(136,167), X(138,169), X(140,171), X(142,173), X(144,175),
+  X(146,177), X(148,179), X(150,181), X(152,183), X(154,185), X(156,187),
+  X(158,189), X(160,191), X(162,193), X(164,195), X(166,197), X(168,199),
+  X(170,201), X(172,203), X(174,205), X(176,207), X(178,209), X(180,211),
+  X(182,213), X(184,215), X(186,217), X(188,219), X(190,221), X(192,223),
+  X(194,225), X(196,227), X(198,229), X(200,231), X(202,233), X(204,235),
+  X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31),
+  X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47),
+  X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63),
+  X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79),
+  X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95),
+  X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107), X(94,109),
+  X(96,111), X(98,113), X(100,115), X(102,117), X(104,119), X(106,121),
+  X(108,123), X(110,125), X(112,127), X(114,129), X(116,131), X(118,133),
+  X(120,135), X(122,137), X(124,139), X(126,141), X(128,143), X(130,145),
+  X(132,147), X(134,149), X(136,151), X(138,153), X(140,155), X(142,157),
+  X(144,159), X(146,161), X(148,163), X(150,165), X(152,167), X(154,169),
+  X(156,171), X(158,173), X(160,175), X(162,177), X(164,179), X(166,181),
+  X(168,183), X(170,185), X(172,187), X(174,189), X(176,191), X(178,193),
+  X(180,195), X(182,197), X(184,199), X(186,201), X(188,203), X(190,205),
+  X(192,207), X(194,209), X(196,211), X(198,213), X(200,215), X(202,217),
+  X(204,219), X(206,221), X(208,223), X(210,225), X(212,227), X(214,229),
+  X(216,231), X(218,233), X(220,235), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(108,115), X(110,117), X(112,119), X(114,121),
+  X(116,123), X(118,125), X(120,127), X(122,129), X(124,131), X(126,133),
+  X(128,135), X(130,137), X(132,139), X(134,141), X(136,143), X(138,145),
+  X(140,147), X(142,149), X(144,151), X(146,153), X(148,155), X(150,157),
+  X(152,159), X(154,161), X(156,163), X(158,165), X(160,167), X(162,169),
+  X(164,171), X(166,173), X(168,175), X(170,177), X(172,179), X(174,181),
+  X(176,183), X(178,185), X(180,187), X(182,189), X(184,191), X(186,193),
+  X(188,195), X(190,197), X(192,199), X(194,201), X(196,203), X(198,205),
+  X(200,207), X(202,209), X(204,211), X(206,213), X(208,215), X(210,217),
+  X(212,219), X(214,221), X(216,223), X(218,225), X(220,227), X(222,229),
+  X(224,231), X(226,233), X(228,235), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29),
+  X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45),
+  X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61),
+  X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77),
+  X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93),
+  X(92,95), X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107),
+  X(106,109), X(108,111), X(110,113), X(112,115), X(114,117), X(116,119),
+  X(118,121), X(120,123), X(122,125), X(124,127), X(126,129), X(128,131),
+  X(130,133), X(132,135), X(134,137), X(136,139), X(138,141), X(140,143),
+  X(142,145), X(144,147), X(146,149), X(148,151), X(150,153), X(152,155),
+  X(154,157), X(156,159), X(158,161), X(160,163), X(162,165), X(164,167),
+  X(166,169), X(168,171), X(170,173), X(172,175), X(174,177), X(176,179),
+  X(178,181), X(180,183), X(182,185), X(184,187), X(186,189), X(188,191),
+  X(190,193), X(192,195), X(194,197), X(196,199), X(198,201), X(200,203),
+  X(202,205), X(204,207), X(206,209), X(208,211), X(210,213), X(212,215),
+  X(214,217), X(216,219), X(218,221), X(220,223), X(222,225), X(224,227),
+  X(226,229), X(228,231), X(230,233), X(232,235), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(112,113), X(114,115),
+  X(116,117), X(118,119), X(120,121), X(122,123), X(124,125), X(126,127),
+  X(128,129), X(130,131), X(132,133), X(134,135), X(136,137), X(138,139),
+  X(140,141), X(142,143), X(144,145), X(146,147), X(148,149), X(150,151),
+  X(152,153), X(154,155), X(156,157), X(158,159), X(160,161), X(162,163),
+  X(164,165), X(166,167), X(168,169), X(170,171), X(172,173), X(174,175),
+  X(176,177), X(178,179), X(180,181), X(182,183), X(184,185), X(186,187),
+  X(188,189), X(190,191), X(192,193), X(194,195), X(196,197), X(198,199),
+  X(200,201), X(202,203), X(204,205), X(206,207), X(208,209), X(210,211),
+  X(212,213), X(214,215), X(216,217), X(218,219), X(220,221), X(222,223),
+  X(224,225), X(226,227), X(228,229), X(230,231), X(232,233), X(234,235)
+};
+S(238) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(97,225), X(98,226),
+  X(99,227), X(100,228), X(101,229), X(102,230), X(103,231), X(104,232),
+  X(105,233), X(106,234), X(107,235), X(108,236), X(109,237), X(110,238),
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124),
+  X(61,125), X(62,126), X(63,127), X(64,128), X(129,193), X(130,194), X(131,195),
+  X(132,196), X(133,197), X(134,198), X(135,199), X(136,200), X(137,201),
+  X(138,202), X(139,203), X(140,204), X(141,205), X(142,206), X(143,207),
+  X(144,208), X(145,209), X(146,210), X(147,211), X(148,212), X(149,213),
+  X(150,214), X(151,215), X(152,216), X(153,217), X(154,218), X(155,219),
+  X(156,220), X(157,221), X(158,222), X(159,223), X(160,224), X(161,225),
+  X(162,226), X(163,227), X(164,228), X(165,229), X(166,230), X(167,231),
+  X(168,232), X(169,233), X(170,234), X(171,235), X(172,236), X(173,237),
+  X(174,238), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134),
+  X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141),
+  X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148),
+  X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154), X(91,155),
+  X(92,156), X(93,157), X(94,158), X(95,159), X(96,160), X(97,161), X(98,162),
+  X(99,163), X(100,164), X(101,165), X(102,166), X(103,167), X(104,168),
+  X(105,169), X(106,170), X(107,171), X(108,172), X(109,173), X(110,174),
+  X(111,175), X(112,176), X(113,177), X(114,178), X(115,179), X(116,180),
+  X(117,181), X(118,182), X(119,183), X(120,184), X(121,185), X(122,186),
+  X(123,187), X(124,188), X(125,189), X(126,190), X(127,191), X(128,192),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103),
+  X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110),
+  X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117),
+  X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124),
+  X(93,125), X(94,126), X(95,127), X(96,128), X(129,161), X(130,162), X(131,163),
+  X(132,164), X(133,165), X(134,166), X(135,167), X(136,168), X(137,169),
+  X(138,170), X(139,171), X(140,172), X(141,173), X(142,174), X(143,175),
+  X(144,176), X(145,177), X(146,178), X(147,179), X(148,180), X(149,181),
+  X(150,182), X(151,183), X(152,184), X(153,185), X(154,186), X(155,187),
+  X(156,188), X(157,189), X(158,190), X(159,191), X(160,192), X(193,225),
+  X(194,226), X(195,227), X(196,228), X(197,229), X(198,230), X(199,231),
+  X(200,232), X(201,233), X(202,234), X(203,235), X(204,236), X(205,237),
+  X(206,238), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(119,215), X(120,216), X(121,217), X(122,218),
+  X(123,219), X(124,220), X(125,221), X(126,222), X(127,223), X(128,224),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(165,197), X(166,198), X(167,199), X(168,200), X(169,201), X(170,202),
+  X(171,203), X(172,204), X(173,205), X(174,206), X(175,207), X(176,208),
+  X(177,209), X(178,210), X(179,211), X(180,212), X(181,213), X(182,214),
+  X(183,215), X(184,216), X(185,217), X(186,218), X(187,219), X(188,220),
+  X(189,221), X(190,222), X(191,223), X(192,224), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(201,217), X(202,218), X(203,219), X(204,220), X(205,221), X(206,222),
+  X(207,223), X(208,224), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163),
+  X(52,164), X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170),
+  X(59,171), X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(81,193),
+  X(82,194), X(83,195), X(84,196), X(85,197), X(86,198), X(87,199), X(88,200),
+  X(89,201), X(90,202), X(91,203), X(92,204), X(93,205), X(94,206), X(95,207),
+  X(96,208), X(113,225), X(114,226), X(115,227), X(116,228), X(117,229),
+  X(118,230), X(119,231), X(120,232), X(121,233), X(122,234), X(123,235),
+  X(124,236), X(125,237), X(126,238), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(119,167), X(120,168), X(121,169), X(122,170), X(123,171),
+  X(124,172), X(125,173), X(126,174), X(127,175), X(128,176), X(145,193),
+  X(146,194), X(147,195), X(148,196), X(149,197), X(150,198), X(151,199),
+  X(152,200), X(153,201), X(154,202), X(155,203), X(156,204), X(157,205),
+  X(158,206), X(159,207), X(160,208), X(177,225), X(178,226), X(179,227),
+  X(180,228), X(181,229), X(182,230), X(183,231), X(184,232), X(185,233),
+  X(186,234), X(187,235), X(188,236), X(189,237), X(190,238), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(117,133), X(118,134),
+  X(119,135), X(120,136), X(121,137), X(122,138), X(123,139), X(124,140),
+  X(125,141), X(126,142), X(127,143), X(128,144), X(145,161), X(146,162),
+  X(147,163), X(148,164), X(149,165), X(150,166), X(151,167), X(152,168),
+  X(153,169), X(154,170), X(155,171), X(156,172), X(157,173), X(158,174),
+  X(159,175), X(160,176), X(177,193), X(178,194), X(179,195), X(180,196),
+  X(181,197), X(182,198), X(183,199), X(184,200), X(185,201), X(186,202),
+  X(187,203), X(188,204), X(189,205), X(190,206), X(191,207), X(192,208),
+  X(209,225), X(210,226), X(211,227), X(212,228), X(213,229), X(214,230),
+  X(215,231), X(216,232), X(217,233), X(218,234), X(219,235), X(220,236),
+  X(221,237), X(222,238), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109),
+  X(102,110), X(103,111), X(104,112), X(113,121), X(114,122), X(115,123),
+  X(116,124), X(117,125), X(118,126), X(119,127), X(120,128), X(129,137),
+  X(130,138), X(131,139), X(132,140), X(133,141), X(134,142), X(135,143),
+  X(136,144), X(145,153), X(146,154), X(147,155), X(148,156), X(149,157),
+  X(150,158), X(151,159), X(152,160), X(161,169), X(162,170), X(163,171),
+  X(164,172), X(165,173), X(166,174), X(167,175), X(168,176), X(177,185),
+  X(178,186), X(179,187), X(180,188), X(181,189), X(182,190), X(183,191),
+  X(184,192), X(193,201), X(194,202), X(195,203), X(196,204), X(197,205),
+  X(198,206), X(199,207), X(200,208), X(209,217), X(210,218), X(211,219),
+  X(212,220), X(213,221), X(214,222), X(215,223), X(216,224), X(225,233),
+  X(226,234), X(227,235), X(228,236), X(229,237), X(230,238), X(9,129),
+  X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135), X(16,136),
+  X(25,145), X(26,146), X(27,147), X(28,148), X(29,149), X(30,150), X(31,151),
+  X(32,152), X(41,161), X(42,162), X(43,163), X(44,164), X(45,165), X(46,166),
+  X(47,167), X(48,168), X(57,177), X(58,178), X(59,179), X(60,180), X(61,181),
+  X(62,182), X(63,183), X(64,184), X(73,193), X(74,194), X(75,195), X(76,196),
+  X(77,197), X(78,198), X(79,199), X(80,200), X(89,209), X(90,210), X(91,211),
+  X(92,212), X(93,213), X(94,214), X(95,215), X(96,216), X(105,225), X(106,226),
+  X(107,227), X(108,228), X(109,229), X(110,230), X(111,231), X(112,232),
+  X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72),
+  X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88),
+  X(41,97), X(42,98), X(43,99), X(44,100), X(45,101), X(46,102), X(47,103),
+  X(48,104), X(57,113), X(58,114), X(59,115), X(60,116), X(61,117), X(62,118),
+  X(63,119), X(64,120), X(73,129), X(74,130), X(75,131), X(76,132), X(77,133),
+  X(78,134), X(79,135), X(80,136), X(89,145), X(90,146), X(91,147), X(92,148),
+  X(93,149), X(94,150), X(95,151), X(96,152), X(105,161), X(106,162), X(107,163),
+  X(108,164), X(109,165), X(110,166), X(111,167), X(112,168), X(121,177),
+  X(122,178), X(123,179), X(124,180), X(125,181), X(126,182), X(127,183),
+  X(128,184), X(137,193), X(138,194), X(139,195), X(140,196), X(141,197),
+  X(142,198), X(143,199), X(144,200), X(153,209), X(154,210), X(155,211),
+  X(156,212), X(157,213), X(158,214), X(159,215), X(160,216), X(169,225),
+  X(170,226), X(171,227), X(172,228), X(173,229), X(174,230), X(175,231),
+  X(176,232), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38),
+  X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54),
+  X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70),
+  X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86),
+  X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100), X(77,101),
+  X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115), X(92,116),
+  X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130), X(107,131),
+  X(108,132), X(109,133), X(110,134), X(111,135), X(112,136), X(121,145),
+  X(122,146), X(123,147), X(124,148), X(125,149), X(126,150), X(127,151),
+  X(128,152), X(137,161), X(138,162), X(139,163), X(140,164), X(141,165),
+  X(142,166), X(143,167), X(144,168), X(153,177), X(154,178), X(155,179),
+  X(156,180), X(157,181), X(158,182), X(159,183), X(160,184), X(169,193),
+  X(170,194), X(171,195), X(172,196), X(173,197), X(174,198), X(175,199),
+  X(176,200), X(185,209), X(186,210), X(187,211), X(188,212), X(189,213),
+  X(190,214), X(191,215), X(192,216), X(201,225), X(202,226), X(203,227),
+  X(204,228), X(205,229), X(206,230), X(207,231), X(208,232), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113),
+  X(106,114), X(107,115), X(108,116), X(109,117), X(110,118), X(111,119),
+  X(112,120), X(121,129), X(122,130), X(123,131), X(124,132), X(125,133),
+  X(126,134), X(127,135), X(128,136), X(137,145), X(138,146), X(139,147),
+  X(140,148), X(141,149), X(142,150), X(143,151), X(144,152), X(153,161),
+  X(154,162), X(155,163), X(156,164), X(157,165), X(158,166), X(159,167),
+  X(160,168), X(169,177), X(170,178), X(171,179), X(172,180), X(173,181),
+  X(174,182), X(175,183), X(176,184), X(185,193), X(186,194), X(187,195),
+  X(188,196), X(189,197), X(190,198), X(191,199), X(192,200), X(201,209),
+  X(202,210), X(203,211), X(204,212), X(205,213), X(206,214), X(207,215),
+  X(208,216), X(217,225), X(218,226), X(219,227), X(220,228), X(221,229),
+  X(222,230), X(223,231), X(224,232), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(147,151), X(148,152),
+  X(153,157), X(154,158), X(155,159), X(156,160), X(161,165), X(162,166),
+  X(163,167), X(164,168), X(169,173), X(170,174), X(171,175), X(172,176),
+  X(177,181), X(178,182), X(179,183), X(180,184), X(185,189), X(186,190),
+  X(187,191), X(188,192), X(193,197), X(194,198), X(195,199), X(196,200),
+  X(201,205), X(202,206), X(203,207), X(204,208), X(209,213), X(210,214),
+  X(211,215), X(212,216), X(217,221), X(218,222), X(219,223), X(220,224),
+  X(225,229), X(226,230), X(227,231), X(228,232), X(233,237), X(234,238),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153), X(30,154),
+  X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164), X(45,169),
+  X(46,170), X(47,171), X(48,172), X(53,177), X(54,178), X(55,179), X(56,180),
+  X(61,185), X(62,186), X(63,187), X(64,188), X(69,193), X(70,194), X(71,195),
+  X(72,196), X(77,201), X(78,202), X(79,203), X(80,204), X(85,209), X(86,210),
+  X(87,211), X(88,212), X(93,217), X(94,218), X(95,219), X(96,220), X(101,225),
+  X(102,226), X(103,227), X(104,228), X(109,233), X(110,234), X(111,235),
+  X(112,236), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147),
+  X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162),
+  X(103,163), X(104,164), X(109,169), X(110,170), X(111,171), X(112,172),
+  X(117,177), X(118,178), X(119,179), X(120,180), X(125,185), X(126,186),
+  X(127,187), X(128,188), X(133,193), X(134,194), X(135,195), X(136,196),
+  X(141,201), X(142,202), X(143,203), X(144,204), X(149,209), X(150,210),
+  X(151,211), X(152,212), X(157,217), X(158,218), X(159,219), X(160,220),
+  X(165,225), X(166,226), X(167,227), X(168,228), X(173,233), X(174,234),
+  X(175,235), X(176,236), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105),
+  X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116),
+  X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(151,179),
+  X(152,180), X(157,185), X(158,186), X(159,187), X(160,188), X(165,193),
+  X(166,194), X(167,195), X(168,196), X(173,201), X(174,202), X(175,203),
+  X(176,204), X(181,209), X(182,210), X(183,211), X(184,212), X(189,217),
+  X(190,218), X(191,219), X(192,220), X(197,225), X(198,226), X(199,227),
+  X(200,228), X(205,233), X(206,234), X(207,235), X(208,236), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(143,155), X(144,156), X(149,161),
+  X(150,162), X(151,163), X(152,164), X(157,169), X(158,170), X(159,171),
+  X(160,172), X(165,177), X(166,178), X(167,179), X(168,180), X(173,185),
+  X(174,186), X(175,187), X(176,188), X(181,193), X(182,194), X(183,195),
+  X(184,196), X(189,201), X(190,202), X(191,203), X(192,204), X(197,209),
+  X(198,210), X(199,211), X(200,212), X(205,217), X(206,218), X(207,219),
+  X(208,220), X(213,225), X(214,226), X(215,227), X(216,228), X(221,233),
+  X(222,234), X(223,235), X(224,236), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(149,153), X(150,154), X(151,155),
+  X(152,156), X(157,161), X(158,162), X(159,163), X(160,164), X(165,169),
+  X(166,170), X(167,171), X(168,172), X(173,177), X(174,178), X(175,179),
+  X(176,180), X(181,185), X(182,186), X(183,187), X(184,188), X(189,193),
+  X(190,194), X(191,195), X(192,196), X(197,201), X(198,202), X(199,203),
+  X(200,204), X(205,209), X(206,210), X(207,211), X(208,212), X(213,217),
+  X(214,218), X(215,219), X(216,220), X(221,225), X(222,226), X(223,227),
+  X(224,228), X(229,233), X(230,234), X(231,235), X(232,236), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(197,199), X(198,200), X(201,203), X(202,204), X(205,207),
+  X(206,208), X(209,211), X(210,212), X(213,215), X(214,216), X(217,219),
+  X(218,220), X(221,223), X(222,224), X(225,227), X(226,228), X(229,231),
+  X(230,232), X(233,235), X(234,236), X(3,129), X(4,130), X(7,133), X(8,134),
+  X(11,137), X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149),
+  X(24,150), X(27,153), X(28,154), X(31,157), X(32,158), X(35,161), X(36,162),
+  X(39,165), X(40,166), X(43,169), X(44,170), X(47,173), X(48,174), X(51,177),
+  X(52,178), X(55,181), X(56,182), X(59,185), X(60,186), X(63,189), X(64,190),
+  X(67,193), X(68,194), X(71,197), X(72,198), X(75,201), X(76,202), X(79,205),
+  X(80,206), X(83,209), X(84,210), X(87,213), X(88,214), X(91,217), X(92,218),
+  X(95,221), X(96,222), X(99,225), X(100,226), X(103,229), X(104,230),
+  X(107,233), X(108,234), X(111,237), X(112,238), X(3,65), X(4,66), X(7,69),
+  X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85),
+  X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154),
+  X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(127,189), X(128,190),
+  X(131,193), X(132,194), X(135,197), X(136,198), X(139,201), X(140,202),
+  X(143,205), X(144,206), X(147,209), X(148,210), X(151,213), X(152,214),
+  X(155,217), X(156,218), X(159,221), X(160,222), X(163,225), X(164,226),
+  X(167,229), X(168,230), X(171,233), X(172,234), X(175,237), X(176,238),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78),
+  X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94),
+  X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109),
+  X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121), X(92,122),
+  X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(127,157), X(128,158),
+  X(131,161), X(132,162), X(135,165), X(136,166), X(139,169), X(140,170),
+  X(143,173), X(144,174), X(147,177), X(148,178), X(151,181), X(152,182),
+  X(155,185), X(156,186), X(159,189), X(160,190), X(163,193), X(164,194),
+  X(167,197), X(168,198), X(171,201), X(172,202), X(175,205), X(176,206),
+  X(179,209), X(180,210), X(183,213), X(184,214), X(187,217), X(188,218),
+  X(191,221), X(192,222), X(195,225), X(196,226), X(199,229), X(200,230),
+  X(203,233), X(204,234), X(207,237), X(208,238), X(3,17), X(4,18), X(7,21),
+  X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37),
+  X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53),
+  X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69),
+  X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85),
+  X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(143,157), X(144,158), X(147,161),
+  X(148,162), X(151,165), X(152,166), X(155,169), X(156,170), X(159,173),
+  X(160,174), X(163,177), X(164,178), X(167,181), X(168,182), X(171,185),
+  X(172,186), X(175,189), X(176,190), X(179,193), X(180,194), X(183,197),
+  X(184,198), X(187,201), X(188,202), X(191,205), X(192,206), X(195,209),
+  X(196,210), X(199,213), X(200,214), X(203,217), X(204,218), X(207,221),
+  X(208,222), X(211,225), X(212,226), X(215,229), X(216,230), X(219,233),
+  X(220,234), X(223,237), X(224,238), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(175,181),
+  X(176,182), X(179,185), X(180,186), X(183,189), X(184,190), X(187,193),
+  X(188,194), X(191,197), X(192,198), X(195,201), X(196,202), X(199,205),
+  X(200,206), X(203,209), X(204,210), X(207,213), X(208,214), X(211,217),
+  X(212,218), X(215,221), X(216,222), X(219,225), X(220,226), X(223,229),
+  X(224,230), X(227,233), X(228,234), X(231,237), X(232,238), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70),
+  X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86),
+  X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101),
+  X(100,102), X(103,105), X(104,106), X(107,109), X(108,110), X(111,113),
+  X(112,114), X(115,117), X(116,118), X(119,121), X(120,122), X(123,125),
+  X(124,126), X(127,129), X(128,130), X(131,133), X(132,134), X(135,137),
+  X(136,138), X(139,141), X(140,142), X(143,145), X(144,146), X(147,149),
+  X(148,150), X(151,153), X(152,154), X(155,157), X(156,158), X(159,161),
+  X(160,162), X(163,165), X(164,166), X(167,169), X(168,170), X(171,173),
+  X(172,174), X(175,177), X(176,178), X(179,181), X(180,182), X(183,185),
+  X(184,186), X(187,189), X(188,190), X(191,193), X(192,194), X(195,197),
+  X(196,198), X(199,201), X(200,202), X(203,205), X(204,206), X(207,209),
+  X(208,210), X(211,213), X(212,214), X(215,217), X(216,218), X(219,221),
+  X(220,222), X(223,225), X(224,226), X(227,229), X(228,230), X(231,233),
+  X(232,234), X(235,237), X(236,238), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202), X(203,204), X(205,206), X(207,208), X(209,210), X(211,212),
+  X(213,214), X(215,216), X(217,218), X(219,220), X(221,222), X(223,224),
+  X(225,226), X(227,228), X(229,230), X(231,232), X(233,234), X(235,236),
+  X(237,238), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181),
+  X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195),
+  X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(82,209),
+  X(84,211), X(86,213), X(88,215), X(90,217), X(92,219), X(94,221), X(96,223),
+  X(98,225), X(100,227), X(102,229), X(104,231), X(106,233), X(108,235),
+  X(110,237), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107),
+  X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121),
+  X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135),
+  X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149),
+  X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161), X(100,163),
+  X(102,165), X(104,167), X(106,169), X(108,171), X(110,173), X(112,175),
+  X(114,177), X(116,179), X(118,181), X(120,183), X(122,185), X(124,187),
+  X(126,189), X(128,191), X(130,193), X(132,195), X(134,197), X(136,199),
+  X(138,201), X(140,203), X(142,205), X(144,207), X(146,209), X(148,211),
+  X(150,213), X(152,215), X(154,217), X(156,219), X(158,221), X(160,223),
+  X(162,225), X(164,227), X(166,229), X(168,231), X(170,233), X(172,235),
+  X(174,237), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45),
+  X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61),
+  X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77),
+  X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93),
+  X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107),
+  X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121),
+  X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(146,177), X(148,179), X(150,181), X(152,183),
+  X(154,185), X(156,187), X(158,189), X(160,191), X(162,193), X(164,195),
+  X(166,197), X(168,199), X(170,201), X(172,203), X(174,205), X(176,207),
+  X(178,209), X(180,211), X(182,213), X(184,215), X(186,217), X(188,219),
+  X(190,221), X(192,223), X(194,225), X(196,227), X(198,229), X(200,231),
+  X(202,233), X(204,235), X(206,237), X(2,17), X(4,19), X(6,21), X(8,23),
+  X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39),
+  X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55),
+  X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71),
+  X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87),
+  X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99), X(86,101),
+  X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113), X(100,115),
+  X(102,117), X(104,119), X(106,121), X(108,123), X(110,125), X(112,127),
+  X(114,129), X(116,131), X(118,133), X(120,135), X(122,137), X(124,139),
+  X(126,141), X(128,143), X(130,145), X(132,147), X(134,149), X(136,151),
+  X(138,153), X(140,155), X(142,157), X(144,159), X(146,161), X(148,163),
+  X(150,165), X(152,167), X(154,169), X(156,171), X(158,173), X(160,175),
+  X(162,177), X(164,179), X(166,181), X(168,183), X(170,185), X(172,187),
+  X(174,189), X(176,191), X(178,193), X(180,195), X(182,197), X(184,199),
+  X(186,201), X(188,203), X(190,205), X(192,207), X(194,209), X(196,211),
+  X(198,213), X(200,215), X(202,217), X(204,219), X(206,221), X(208,223),
+  X(210,225), X(212,227), X(214,229), X(216,231), X(218,233), X(220,235),
+  X(222,237), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21),
+  X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37),
+  X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53),
+  X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69),
+  X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85),
+  X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(134,141), X(136,143), X(138,145), X(140,147),
+  X(142,149), X(144,151), X(146,153), X(148,155), X(150,157), X(152,159),
+  X(154,161), X(156,163), X(158,165), X(160,167), X(162,169), X(164,171),
+  X(166,173), X(168,175), X(170,177), X(172,179), X(174,181), X(176,183),
+  X(178,185), X(180,187), X(182,189), X(184,191), X(186,193), X(188,195),
+  X(190,197), X(192,199), X(194,201), X(196,203), X(198,205), X(200,207),
+  X(202,209), X(204,211), X(206,213), X(208,215), X(210,217), X(212,219),
+  X(214,221), X(216,223), X(218,225), X(220,227), X(222,229), X(224,231),
+  X(226,233), X(228,235), X(230,237), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29),
+  X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45),
+  X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61),
+  X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77),
+  X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93),
+  X(92,95), X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107),
+  X(106,109), X(108,111), X(110,113), X(112,115), X(114,117), X(116,119),
+  X(118,121), X(120,123), X(122,125), X(124,127), X(126,129), X(128,131),
+  X(130,133), X(132,135), X(134,137), X(136,139), X(138,141), X(140,143),
+  X(142,145), X(144,147), X(146,149), X(148,151), X(150,153), X(152,155),
+  X(154,157), X(156,159), X(158,161), X(160,163), X(162,165), X(164,167),
+  X(166,169), X(168,171), X(170,173), X(172,175), X(174,177), X(176,179),
+  X(178,181), X(180,183), X(182,185), X(184,187), X(186,189), X(188,191),
+  X(190,193), X(192,195), X(194,197), X(196,199), X(198,201), X(200,203),
+  X(202,205), X(204,207), X(206,209), X(208,211), X(210,213), X(212,215),
+  X(214,217), X(216,219), X(218,221), X(220,223), X(222,225), X(224,227),
+  X(226,229), X(228,231), X(230,233), X(232,235), X(234,237), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223), X(224,225), X(226,227), X(228,229), X(230,231),
+  X(232,233), X(234,235), X(236,237)
+};
+S(240) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(97,225), X(98,226),
+  X(99,227), X(100,228), X(101,229), X(102,230), X(103,231), X(104,232),
+  X(105,233), X(106,234), X(107,235), X(108,236), X(109,237), X(110,238),
+  X(111,239), X(112,240), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70),
+  X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78),
+  X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86),
+  X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94),
+  X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101),
+  X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108),
+  X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115),
+  X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122),
+  X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(129,193),
+  X(130,194), X(131,195), X(132,196), X(133,197), X(134,198), X(135,199),
+  X(136,200), X(137,201), X(138,202), X(139,203), X(140,204), X(141,205),
+  X(142,206), X(143,207), X(144,208), X(145,209), X(146,210), X(147,211),
+  X(148,212), X(149,213), X(150,214), X(151,215), X(152,216), X(153,217),
+  X(154,218), X(155,219), X(156,220), X(157,221), X(158,222), X(159,223),
+  X(160,224), X(161,225), X(162,226), X(163,227), X(164,228), X(165,229),
+  X(166,230), X(167,231), X(168,232), X(169,233), X(170,234), X(171,235),
+  X(172,236), X(173,237), X(174,238), X(175,239), X(176,240), X(65,129),
+  X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136),
+  X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143),
+  X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150),
+  X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157),
+  X(94,158), X(95,159), X(96,160), X(97,161), X(98,162), X(99,163), X(100,164),
+  X(101,165), X(102,166), X(103,167), X(104,168), X(105,169), X(106,170),
+  X(107,171), X(108,172), X(109,173), X(110,174), X(111,175), X(112,176),
+  X(113,177), X(114,178), X(115,179), X(116,180), X(117,181), X(118,182),
+  X(119,183), X(120,184), X(121,185), X(122,186), X(123,187), X(124,188),
+  X(125,189), X(126,190), X(127,191), X(128,192), X(1,33), X(2,34), X(3,35),
+  X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43),
+  X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51),
+  X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59),
+  X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(135,167), X(136,168), X(137,169), X(138,170), X(139,171),
+  X(140,172), X(141,173), X(142,174), X(143,175), X(144,176), X(145,177),
+  X(146,178), X(147,179), X(148,180), X(149,181), X(150,182), X(151,183),
+  X(152,184), X(153,185), X(154,186), X(155,187), X(156,188), X(157,189),
+  X(158,190), X(159,191), X(160,192), X(193,225), X(194,226), X(195,227),
+  X(196,228), X(197,229), X(198,230), X(199,231), X(200,232), X(201,233),
+  X(202,234), X(203,235), X(204,236), X(205,237), X(206,238), X(207,239),
+  X(208,240), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(119,215), X(120,216), X(121,217), X(122,218),
+  X(123,219), X(124,220), X(125,221), X(126,222), X(127,223), X(128,224),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(165,197), X(166,198), X(167,199), X(168,200), X(169,201), X(170,202),
+  X(171,203), X(172,204), X(173,205), X(174,206), X(175,207), X(176,208),
+  X(177,209), X(178,210), X(179,211), X(180,212), X(181,213), X(182,214),
+  X(183,215), X(184,216), X(185,217), X(186,218), X(187,219), X(188,220),
+  X(189,221), X(190,222), X(191,223), X(192,224), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(201,217), X(202,218), X(203,219), X(204,220), X(205,221), X(206,222),
+  X(207,223), X(208,224), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163),
+  X(52,164), X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170),
+  X(59,171), X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(81,193),
+  X(82,194), X(83,195), X(84,196), X(85,197), X(86,198), X(87,199), X(88,200),
+  X(89,201), X(90,202), X(91,203), X(92,204), X(93,205), X(94,206), X(95,207),
+  X(96,208), X(113,225), X(114,226), X(115,227), X(116,228), X(117,229),
+  X(118,230), X(119,231), X(120,232), X(121,233), X(122,234), X(123,235),
+  X(124,236), X(125,237), X(126,238), X(127,239), X(128,240), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135),
+  X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142),
+  X(95,143), X(96,144), X(113,161), X(114,162), X(115,163), X(116,164),
+  X(117,165), X(118,166), X(119,167), X(120,168), X(121,169), X(122,170),
+  X(123,171), X(124,172), X(125,173), X(126,174), X(127,175), X(128,176),
+  X(145,193), X(146,194), X(147,195), X(148,196), X(149,197), X(150,198),
+  X(151,199), X(152,200), X(153,201), X(154,202), X(155,203), X(156,204),
+  X(157,205), X(158,206), X(159,207), X(160,208), X(177,225), X(178,226),
+  X(179,227), X(180,228), X(181,229), X(182,230), X(183,231), X(184,232),
+  X(185,233), X(186,234), X(187,235), X(188,236), X(189,237), X(190,238),
+  X(191,239), X(192,240), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37),
+  X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45),
+  X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69),
+  X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77),
+  X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100),
+  X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107),
+  X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130),
+  X(115,131), X(116,132), X(117,133), X(118,134), X(119,135), X(120,136),
+  X(121,137), X(122,138), X(123,139), X(124,140), X(125,141), X(126,142),
+  X(127,143), X(128,144), X(145,161), X(146,162), X(147,163), X(148,164),
+  X(149,165), X(150,166), X(151,167), X(152,168), X(153,169), X(154,170),
+  X(155,171), X(156,172), X(157,173), X(158,174), X(159,175), X(160,176),
+  X(177,193), X(178,194), X(179,195), X(180,196), X(181,197), X(182,198),
+  X(183,199), X(184,200), X(185,201), X(186,202), X(187,203), X(188,204),
+  X(189,205), X(190,206), X(191,207), X(192,208), X(209,225), X(210,226),
+  X(211,227), X(212,228), X(213,229), X(214,230), X(215,231), X(216,232),
+  X(217,233), X(218,234), X(219,235), X(220,236), X(221,237), X(222,238),
+  X(223,239), X(224,240), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109),
+  X(102,110), X(103,111), X(104,112), X(113,121), X(114,122), X(115,123),
+  X(116,124), X(117,125), X(118,126), X(119,127), X(120,128), X(129,137),
+  X(130,138), X(131,139), X(132,140), X(133,141), X(134,142), X(135,143),
+  X(136,144), X(145,153), X(146,154), X(147,155), X(148,156), X(149,157),
+  X(150,158), X(151,159), X(152,160), X(161,169), X(162,170), X(163,171),
+  X(164,172), X(165,173), X(166,174), X(167,175), X(168,176), X(177,185),
+  X(178,186), X(179,187), X(180,188), X(181,189), X(182,190), X(183,191),
+  X(184,192), X(193,201), X(194,202), X(195,203), X(196,204), X(197,205),
+  X(198,206), X(199,207), X(200,208), X(209,217), X(210,218), X(211,219),
+  X(212,220), X(213,221), X(214,222), X(215,223), X(216,224), X(225,233),
+  X(226,234), X(227,235), X(228,236), X(229,237), X(230,238), X(231,239),
+  X(232,240), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134),
+  X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149),
+  X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164),
+  X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178), X(59,179),
+  X(60,180), X(61,181), X(62,182), X(63,183), X(64,184), X(73,193), X(74,194),
+  X(75,195), X(76,196), X(77,197), X(78,198), X(79,199), X(80,200), X(89,209),
+  X(90,210), X(91,211), X(92,212), X(93,213), X(94,214), X(95,215), X(96,216),
+  X(105,225), X(106,226), X(107,227), X(108,228), X(109,229), X(110,230),
+  X(111,231), X(112,232), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115),
+  X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130),
+  X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136), X(89,145),
+  X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151), X(96,152),
+  X(105,161), X(106,162), X(107,163), X(108,164), X(109,165), X(110,166),
+  X(111,167), X(112,168), X(121,177), X(122,178), X(123,179), X(124,180),
+  X(125,181), X(126,182), X(127,183), X(128,184), X(137,193), X(138,194),
+  X(139,195), X(140,196), X(141,197), X(142,198), X(143,199), X(144,200),
+  X(153,209), X(154,210), X(155,211), X(156,212), X(157,213), X(158,214),
+  X(159,215), X(160,216), X(169,225), X(170,226), X(171,227), X(172,228),
+  X(173,229), X(174,230), X(175,231), X(176,232), X(9,33), X(10,34), X(11,35),
+  X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51),
+  X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67),
+  X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83),
+  X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(121,145), X(122,146), X(123,147), X(124,148), X(125,149),
+  X(126,150), X(127,151), X(128,152), X(137,161), X(138,162), X(139,163),
+  X(140,164), X(141,165), X(142,166), X(143,167), X(144,168), X(153,177),
+  X(154,178), X(155,179), X(156,180), X(157,181), X(158,182), X(159,183),
+  X(160,184), X(169,193), X(170,194), X(171,195), X(172,196), X(173,197),
+  X(174,198), X(175,199), X(176,200), X(185,209), X(186,210), X(187,211),
+  X(188,212), X(189,213), X(190,214), X(191,215), X(192,216), X(201,225),
+  X(202,226), X(203,227), X(204,228), X(205,229), X(206,230), X(207,231),
+  X(208,232), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22),
+  X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38),
+  X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54),
+  X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70),
+  X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86),
+  X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100), X(93,101),
+  X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(139,147), X(140,148), X(141,149),
+  X(142,150), X(143,151), X(144,152), X(153,161), X(154,162), X(155,163),
+  X(156,164), X(157,165), X(158,166), X(159,167), X(160,168), X(169,177),
+  X(170,178), X(171,179), X(172,180), X(173,181), X(174,182), X(175,183),
+  X(176,184), X(185,193), X(186,194), X(187,195), X(188,196), X(189,197),
+  X(190,198), X(191,199), X(192,200), X(201,209), X(202,210), X(203,211),
+  X(204,212), X(205,213), X(206,214), X(207,215), X(208,216), X(217,225),
+  X(218,226), X(219,227), X(220,228), X(221,229), X(222,230), X(223,231),
+  X(224,232), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(185,189), X(186,190), X(187,191), X(188,192),
+  X(193,197), X(194,198), X(195,199), X(196,200), X(201,205), X(202,206),
+  X(203,207), X(204,208), X(209,213), X(210,214), X(211,215), X(212,216),
+  X(217,221), X(218,222), X(219,223), X(220,224), X(225,229), X(226,230),
+  X(227,231), X(228,232), X(233,237), X(234,238), X(235,239), X(236,240),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153), X(30,154),
+  X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164), X(45,169),
+  X(46,170), X(47,171), X(48,172), X(53,177), X(54,178), X(55,179), X(56,180),
+  X(61,185), X(62,186), X(63,187), X(64,188), X(69,193), X(70,194), X(71,195),
+  X(72,196), X(77,201), X(78,202), X(79,203), X(80,204), X(85,209), X(86,210),
+  X(87,211), X(88,212), X(93,217), X(94,218), X(95,219), X(96,220), X(101,225),
+  X(102,226), X(103,227), X(104,228), X(109,233), X(110,234), X(111,235),
+  X(112,236), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147),
+  X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162),
+  X(103,163), X(104,164), X(109,169), X(110,170), X(111,171), X(112,172),
+  X(117,177), X(118,178), X(119,179), X(120,180), X(125,185), X(126,186),
+  X(127,187), X(128,188), X(133,193), X(134,194), X(135,195), X(136,196),
+  X(141,201), X(142,202), X(143,203), X(144,204), X(149,209), X(150,210),
+  X(151,211), X(152,212), X(157,217), X(158,218), X(159,219), X(160,220),
+  X(165,225), X(166,226), X(167,227), X(168,228), X(173,233), X(174,234),
+  X(175,235), X(176,236), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105),
+  X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116),
+  X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(151,179),
+  X(152,180), X(157,185), X(158,186), X(159,187), X(160,188), X(165,193),
+  X(166,194), X(167,195), X(168,196), X(173,201), X(174,202), X(175,203),
+  X(176,204), X(181,209), X(182,210), X(183,211), X(184,212), X(189,217),
+  X(190,218), X(191,219), X(192,220), X(197,225), X(198,226), X(199,227),
+  X(200,228), X(205,233), X(206,234), X(207,235), X(208,236), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(143,155), X(144,156), X(149,161),
+  X(150,162), X(151,163), X(152,164), X(157,169), X(158,170), X(159,171),
+  X(160,172), X(165,177), X(166,178), X(167,179), X(168,180), X(173,185),
+  X(174,186), X(175,187), X(176,188), X(181,193), X(182,194), X(183,195),
+  X(184,196), X(189,201), X(190,202), X(191,203), X(192,204), X(197,209),
+  X(198,210), X(199,211), X(200,212), X(205,217), X(206,218), X(207,219),
+  X(208,220), X(213,225), X(214,226), X(215,227), X(216,228), X(221,233),
+  X(222,234), X(223,235), X(224,236), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(149,153), X(150,154), X(151,155),
+  X(152,156), X(157,161), X(158,162), X(159,163), X(160,164), X(165,169),
+  X(166,170), X(167,171), X(168,172), X(173,177), X(174,178), X(175,179),
+  X(176,180), X(181,185), X(182,186), X(183,187), X(184,188), X(189,193),
+  X(190,194), X(191,195), X(192,196), X(197,201), X(198,202), X(199,203),
+  X(200,204), X(205,209), X(206,210), X(207,211), X(208,212), X(213,217),
+  X(214,218), X(215,219), X(216,220), X(221,225), X(222,226), X(223,227),
+  X(224,228), X(229,233), X(230,234), X(231,235), X(232,236), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(197,199), X(198,200), X(201,203), X(202,204), X(205,207),
+  X(206,208), X(209,211), X(210,212), X(213,215), X(214,216), X(217,219),
+  X(218,220), X(221,223), X(222,224), X(225,227), X(226,228), X(229,231),
+  X(230,232), X(233,235), X(234,236), X(237,239), X(238,240), X(3,129), X(4,130),
+  X(7,133), X(8,134), X(11,137), X(12,138), X(15,141), X(16,142), X(19,145),
+  X(20,146), X(23,149), X(24,150), X(27,153), X(28,154), X(31,157), X(32,158),
+  X(35,161), X(36,162), X(39,165), X(40,166), X(43,169), X(44,170), X(47,173),
+  X(48,174), X(51,177), X(52,178), X(55,181), X(56,182), X(59,185), X(60,186),
+  X(63,189), X(64,190), X(67,193), X(68,194), X(71,197), X(72,198), X(75,201),
+  X(76,202), X(79,205), X(80,206), X(83,209), X(84,210), X(87,213), X(88,214),
+  X(91,217), X(92,218), X(95,221), X(96,222), X(99,225), X(100,226), X(103,229),
+  X(104,230), X(107,233), X(108,234), X(111,237), X(112,238), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154),
+  X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(127,189), X(128,190),
+  X(131,193), X(132,194), X(135,197), X(136,198), X(139,201), X(140,202),
+  X(143,205), X(144,206), X(147,209), X(148,210), X(151,213), X(152,214),
+  X(155,217), X(156,218), X(159,221), X(160,222), X(163,225), X(164,226),
+  X(167,229), X(168,230), X(171,233), X(172,234), X(175,237), X(176,238),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78),
+  X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94),
+  X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109),
+  X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121), X(92,122),
+  X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(127,157), X(128,158),
+  X(131,161), X(132,162), X(135,165), X(136,166), X(139,169), X(140,170),
+  X(143,173), X(144,174), X(147,177), X(148,178), X(151,181), X(152,182),
+  X(155,185), X(156,186), X(159,189), X(160,190), X(163,193), X(164,194),
+  X(167,197), X(168,198), X(171,201), X(172,202), X(175,205), X(176,206),
+  X(179,209), X(180,210), X(183,213), X(184,214), X(187,217), X(188,218),
+  X(191,221), X(192,222), X(195,225), X(196,226), X(199,229), X(200,230),
+  X(203,233), X(204,234), X(207,237), X(208,238), X(3,17), X(4,18), X(7,21),
+  X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37),
+  X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53),
+  X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69),
+  X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85),
+  X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(143,157), X(144,158), X(147,161),
+  X(148,162), X(151,165), X(152,166), X(155,169), X(156,170), X(159,173),
+  X(160,174), X(163,177), X(164,178), X(167,181), X(168,182), X(171,185),
+  X(172,186), X(175,189), X(176,190), X(179,193), X(180,194), X(183,197),
+  X(184,198), X(187,201), X(188,202), X(191,205), X(192,206), X(195,209),
+  X(196,210), X(199,213), X(200,214), X(203,217), X(204,218), X(207,221),
+  X(208,222), X(211,225), X(212,226), X(215,229), X(216,230), X(219,233),
+  X(220,234), X(223,237), X(224,238), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(175,181),
+  X(176,182), X(179,185), X(180,186), X(183,189), X(184,190), X(187,193),
+  X(188,194), X(191,197), X(192,198), X(195,201), X(196,202), X(199,205),
+  X(200,206), X(203,209), X(204,210), X(207,213), X(208,214), X(211,217),
+  X(212,218), X(215,221), X(216,222), X(219,225), X(220,226), X(223,229),
+  X(224,230), X(227,233), X(228,234), X(231,237), X(232,238), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70),
+  X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86),
+  X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101),
+  X(100,102), X(103,105), X(104,106), X(107,109), X(108,110), X(111,113),
+  X(112,114), X(115,117), X(116,118), X(119,121), X(120,122), X(123,125),
+  X(124,126), X(127,129), X(128,130), X(131,133), X(132,134), X(135,137),
+  X(136,138), X(139,141), X(140,142), X(143,145), X(144,146), X(147,149),
+  X(148,150), X(151,153), X(152,154), X(155,157), X(156,158), X(159,161),
+  X(160,162), X(163,165), X(164,166), X(167,169), X(168,170), X(171,173),
+  X(172,174), X(175,177), X(176,178), X(179,181), X(180,182), X(183,185),
+  X(184,186), X(187,189), X(188,190), X(191,193), X(192,194), X(195,197),
+  X(196,198), X(199,201), X(200,202), X(203,205), X(204,206), X(207,209),
+  X(208,210), X(211,213), X(212,214), X(215,217), X(216,218), X(219,221),
+  X(220,222), X(223,225), X(224,226), X(227,229), X(228,230), X(231,233),
+  X(232,234), X(235,237), X(236,238), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202), X(203,204), X(205,206), X(207,208), X(209,210), X(211,212),
+  X(213,214), X(215,216), X(217,218), X(219,220), X(221,222), X(223,224),
+  X(225,226), X(227,228), X(229,230), X(231,232), X(233,234), X(235,236),
+  X(237,238), X(239,240), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137),
+  X(12,139), X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151),
+  X(26,153), X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165),
+  X(40,167), X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179),
+  X(54,181), X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193),
+  X(68,195), X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207),
+  X(82,209), X(84,211), X(86,213), X(88,215), X(90,217), X(92,219), X(94,221),
+  X(96,223), X(98,225), X(100,227), X(102,229), X(104,231), X(106,233),
+  X(108,235), X(110,237), X(112,239), X(2,65), X(4,67), X(6,69), X(8,71),
+  X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87),
+  X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99), X(38,101),
+  X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113), X(52,115),
+  X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127), X(66,129),
+  X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141), X(80,143),
+  X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155), X(94,157),
+  X(96,159), X(98,161), X(100,163), X(102,165), X(104,167), X(106,169),
+  X(108,171), X(110,173), X(112,175), X(114,177), X(116,179), X(118,181),
+  X(120,183), X(122,185), X(124,187), X(126,189), X(128,191), X(130,193),
+  X(132,195), X(134,197), X(136,199), X(138,201), X(140,203), X(142,205),
+  X(144,207), X(146,209), X(148,211), X(150,213), X(152,215), X(154,217),
+  X(156,219), X(158,221), X(160,223), X(162,225), X(164,227), X(166,229),
+  X(168,231), X(170,233), X(172,235), X(174,237), X(176,239), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83),
+  X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99),
+  X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113),
+  X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127),
+  X(98,129), X(100,131), X(102,133), X(104,135), X(106,137), X(108,139),
+  X(110,141), X(112,143), X(114,145), X(116,147), X(118,149), X(120,151),
+  X(122,153), X(124,155), X(126,157), X(128,159), X(130,161), X(132,163),
+  X(134,165), X(136,167), X(138,169), X(140,171), X(142,173), X(144,175),
+  X(146,177), X(148,179), X(150,181), X(152,183), X(154,185), X(156,187),
+  X(158,189), X(160,191), X(162,193), X(164,195), X(166,197), X(168,199),
+  X(170,201), X(172,203), X(174,205), X(176,207), X(178,209), X(180,211),
+  X(182,213), X(184,215), X(186,217), X(188,219), X(190,221), X(192,223),
+  X(194,225), X(196,227), X(198,229), X(200,231), X(202,233), X(204,235),
+  X(206,237), X(208,239), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27),
+  X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43),
+  X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59),
+  X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75),
+  X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91),
+  X(78,93), X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105),
+  X(92,107), X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(160,175), X(162,177), X(164,179),
+  X(166,181), X(168,183), X(170,185), X(172,187), X(174,189), X(176,191),
+  X(178,193), X(180,195), X(182,197), X(184,199), X(186,201), X(188,203),
+  X(190,205), X(192,207), X(194,209), X(196,211), X(198,213), X(200,215),
+  X(202,217), X(204,219), X(206,221), X(208,223), X(210,225), X(212,227),
+  X(214,229), X(216,231), X(218,233), X(220,235), X(222,237), X(224,239), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57),
+  X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73),
+  X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89),
+  X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103),
+  X(98,105), X(100,107), X(102,109), X(104,111), X(106,113), X(108,115),
+  X(110,117), X(112,119), X(114,121), X(116,123), X(118,125), X(120,127),
+  X(122,129), X(124,131), X(126,133), X(128,135), X(130,137), X(132,139),
+  X(134,141), X(136,143), X(138,145), X(140,147), X(142,149), X(144,151),
+  X(146,153), X(148,155), X(150,157), X(152,159), X(154,161), X(156,163),
+  X(158,165), X(160,167), X(162,169), X(164,171), X(166,173), X(168,175),
+  X(170,177), X(172,179), X(174,181), X(176,183), X(178,185), X(180,187),
+  X(182,189), X(184,191), X(186,193), X(188,195), X(190,197), X(192,199),
+  X(194,201), X(196,203), X(198,205), X(200,207), X(202,209), X(204,211),
+  X(206,213), X(208,215), X(210,217), X(212,219), X(214,221), X(216,223),
+  X(218,225), X(220,227), X(222,229), X(224,231), X(226,233), X(228,235),
+  X(230,237), X(232,239), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13), X(12,15),
+  X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29), X(28,31),
+  X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45), X(44,47),
+  X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61), X(60,63),
+  X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77), X(76,79),
+  X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93), X(92,95),
+  X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107), X(106,109),
+  X(108,111), X(110,113), X(112,115), X(114,117), X(116,119), X(118,121),
+  X(120,123), X(122,125), X(124,127), X(126,129), X(128,131), X(130,133),
+  X(132,135), X(134,137), X(136,139), X(138,141), X(140,143), X(142,145),
+  X(144,147), X(146,149), X(148,151), X(150,153), X(152,155), X(154,157),
+  X(156,159), X(158,161), X(160,163), X(162,165), X(164,167), X(166,169),
+  X(168,171), X(170,173), X(172,175), X(174,177), X(176,179), X(178,181),
+  X(180,183), X(182,185), X(184,187), X(186,189), X(188,191), X(190,193),
+  X(192,195), X(194,197), X(196,199), X(198,201), X(200,203), X(202,205),
+  X(204,207), X(206,209), X(208,211), X(210,213), X(212,215), X(214,217),
+  X(216,219), X(218,221), X(220,223), X(222,225), X(224,227), X(226,229),
+  X(228,231), X(230,233), X(232,235), X(234,237), X(236,239), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223), X(224,225), X(226,227), X(228,229), X(230,231),
+  X(232,233), X(234,235), X(236,237), X(238,239)
+};
+S(242) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(97,225), X(98,226),
+  X(99,227), X(100,228), X(101,229), X(102,230), X(103,231), X(104,232),
+  X(105,233), X(106,234), X(107,235), X(108,236), X(109,237), X(110,238),
+  X(111,239), X(112,240), X(113,241), X(114,242), X(1,65), X(2,66), X(3,67),
+  X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75),
+  X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83),
+  X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91),
+  X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99),
+  X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106),
+  X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113),
+  X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120),
+  X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127),
+  X(64,128), X(129,193), X(130,194), X(131,195), X(132,196), X(133,197),
+  X(134,198), X(135,199), X(136,200), X(137,201), X(138,202), X(139,203),
+  X(140,204), X(141,205), X(142,206), X(143,207), X(144,208), X(145,209),
+  X(146,210), X(147,211), X(148,212), X(149,213), X(150,214), X(151,215),
+  X(152,216), X(153,217), X(154,218), X(155,219), X(156,220), X(157,221),
+  X(158,222), X(159,223), X(160,224), X(161,225), X(162,226), X(163,227),
+  X(164,228), X(165,229), X(166,230), X(167,231), X(168,232), X(169,233),
+  X(170,234), X(171,235), X(172,236), X(173,237), X(174,238), X(175,239),
+  X(176,240), X(177,241), X(178,242), X(65,129), X(66,130), X(67,131), X(68,132),
+  X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139),
+  X(76,140), X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146),
+  X(83,147), X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153),
+  X(90,154), X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160),
+  X(97,161), X(98,162), X(99,163), X(100,164), X(101,165), X(102,166),
+  X(103,167), X(104,168), X(105,169), X(106,170), X(107,171), X(108,172),
+  X(109,173), X(110,174), X(111,175), X(112,176), X(113,177), X(114,178),
+  X(115,179), X(116,180), X(117,181), X(118,182), X(119,183), X(120,184),
+  X(121,185), X(122,186), X(123,187), X(124,188), X(125,189), X(126,190),
+  X(127,191), X(128,192), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101),
+  X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108),
+  X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115),
+  X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122),
+  X(91,123), X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161),
+  X(130,162), X(131,163), X(132,164), X(133,165), X(134,166), X(135,167),
+  X(136,168), X(137,169), X(138,170), X(139,171), X(140,172), X(141,173),
+  X(142,174), X(143,175), X(144,176), X(145,177), X(146,178), X(147,179),
+  X(148,180), X(149,181), X(150,182), X(151,183), X(152,184), X(153,185),
+  X(154,186), X(155,187), X(156,188), X(157,189), X(158,190), X(159,191),
+  X(160,192), X(193,225), X(194,226), X(195,227), X(196,228), X(197,229),
+  X(198,230), X(199,231), X(200,232), X(201,233), X(202,234), X(203,235),
+  X(204,236), X(205,237), X(206,238), X(207,239), X(208,240), X(209,241),
+  X(210,242), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(119,215), X(120,216), X(121,217), X(122,218),
+  X(123,219), X(124,220), X(125,221), X(126,222), X(127,223), X(128,224),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(165,197), X(166,198), X(167,199), X(168,200), X(169,201), X(170,202),
+  X(171,203), X(172,204), X(173,205), X(174,206), X(175,207), X(176,208),
+  X(177,209), X(178,210), X(179,211), X(180,212), X(181,213), X(182,214),
+  X(183,215), X(184,216), X(185,217), X(186,218), X(187,219), X(188,220),
+  X(189,221), X(190,222), X(191,223), X(192,224), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(201,217), X(202,218), X(203,219), X(204,220), X(205,221), X(206,222),
+  X(207,223), X(208,224), X(225,241), X(226,242), X(17,129), X(18,130),
+  X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136), X(25,137),
+  X(26,138), X(27,139), X(28,140), X(29,141), X(30,142), X(31,143), X(32,144),
+  X(49,161), X(50,162), X(51,163), X(52,164), X(53,165), X(54,166), X(55,167),
+  X(56,168), X(57,169), X(58,170), X(59,171), X(60,172), X(61,173), X(62,174),
+  X(63,175), X(64,176), X(81,193), X(82,194), X(83,195), X(84,196), X(85,197),
+  X(86,198), X(87,199), X(88,200), X(89,201), X(90,202), X(91,203), X(92,204),
+  X(93,205), X(94,206), X(95,207), X(96,208), X(113,225), X(114,226), X(115,227),
+  X(116,228), X(117,229), X(118,230), X(119,231), X(120,232), X(121,233),
+  X(122,234), X(123,235), X(124,236), X(125,237), X(126,238), X(127,239),
+  X(128,240), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100), X(53,101),
+  X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107), X(60,108),
+  X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130), X(83,131),
+  X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137), X(90,138),
+  X(91,139), X(92,140), X(93,141), X(94,142), X(95,143), X(96,144), X(113,161),
+  X(114,162), X(115,163), X(116,164), X(117,165), X(118,166), X(119,167),
+  X(120,168), X(121,169), X(122,170), X(123,171), X(124,172), X(125,173),
+  X(126,174), X(127,175), X(128,176), X(145,193), X(146,194), X(147,195),
+  X(148,196), X(149,197), X(150,198), X(151,199), X(152,200), X(153,201),
+  X(154,202), X(155,203), X(156,204), X(157,205), X(158,206), X(159,207),
+  X(160,208), X(177,225), X(178,226), X(179,227), X(180,228), X(181,229),
+  X(182,230), X(183,231), X(184,232), X(185,233), X(186,234), X(187,235),
+  X(188,236), X(189,237), X(190,238), X(191,239), X(192,240), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(117,133), X(118,134),
+  X(119,135), X(120,136), X(121,137), X(122,138), X(123,139), X(124,140),
+  X(125,141), X(126,142), X(127,143), X(128,144), X(145,161), X(146,162),
+  X(147,163), X(148,164), X(149,165), X(150,166), X(151,167), X(152,168),
+  X(153,169), X(154,170), X(155,171), X(156,172), X(157,173), X(158,174),
+  X(159,175), X(160,176), X(177,193), X(178,194), X(179,195), X(180,196),
+  X(181,197), X(182,198), X(183,199), X(184,200), X(185,201), X(186,202),
+  X(187,203), X(188,204), X(189,205), X(190,206), X(191,207), X(192,208),
+  X(209,225), X(210,226), X(211,227), X(212,228), X(213,229), X(214,230),
+  X(215,231), X(216,232), X(217,233), X(218,234), X(219,235), X(220,236),
+  X(221,237), X(222,238), X(223,239), X(224,240), X(1,9), X(2,10), X(3,11),
+  X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27),
+  X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43),
+  X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59),
+  X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75),
+  X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91),
+  X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105), X(98,106),
+  X(99,107), X(100,108), X(101,109), X(102,110), X(103,111), X(104,112),
+  X(113,121), X(114,122), X(115,123), X(116,124), X(117,125), X(118,126),
+  X(119,127), X(120,128), X(129,137), X(130,138), X(131,139), X(132,140),
+  X(133,141), X(134,142), X(135,143), X(136,144), X(145,153), X(146,154),
+  X(147,155), X(148,156), X(149,157), X(150,158), X(151,159), X(152,160),
+  X(161,169), X(162,170), X(163,171), X(164,172), X(165,173), X(166,174),
+  X(167,175), X(168,176), X(177,185), X(178,186), X(179,187), X(180,188),
+  X(181,189), X(182,190), X(183,191), X(184,192), X(193,201), X(194,202),
+  X(195,203), X(196,204), X(197,205), X(198,206), X(199,207), X(200,208),
+  X(209,217), X(210,218), X(211,219), X(212,220), X(213,221), X(214,222),
+  X(215,223), X(216,224), X(225,233), X(226,234), X(227,235), X(228,236),
+  X(229,237), X(230,238), X(231,239), X(232,240), X(9,129), X(10,130), X(11,131),
+  X(12,132), X(13,133), X(14,134), X(15,135), X(16,136), X(25,145), X(26,146),
+  X(27,147), X(28,148), X(29,149), X(30,150), X(31,151), X(32,152), X(41,161),
+  X(42,162), X(43,163), X(44,164), X(45,165), X(46,166), X(47,167), X(48,168),
+  X(57,177), X(58,178), X(59,179), X(60,180), X(61,181), X(62,182), X(63,183),
+  X(64,184), X(73,193), X(74,194), X(75,195), X(76,196), X(77,197), X(78,198),
+  X(79,199), X(80,200), X(89,209), X(90,210), X(91,211), X(92,212), X(93,213),
+  X(94,214), X(95,215), X(96,216), X(105,225), X(106,226), X(107,227),
+  X(108,228), X(109,229), X(110,230), X(111,231), X(112,232), X(121,241),
+  X(122,242), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70),
+  X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86),
+  X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100), X(45,101),
+  X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115), X(60,116),
+  X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130), X(75,131),
+  X(76,132), X(77,133), X(78,134), X(79,135), X(80,136), X(89,145), X(90,146),
+  X(91,147), X(92,148), X(93,149), X(94,150), X(95,151), X(96,152), X(105,161),
+  X(106,162), X(107,163), X(108,164), X(109,165), X(110,166), X(111,167),
+  X(112,168), X(121,177), X(122,178), X(123,179), X(124,180), X(125,181),
+  X(126,182), X(127,183), X(128,184), X(137,193), X(138,194), X(139,195),
+  X(140,196), X(141,197), X(142,198), X(143,199), X(144,200), X(153,209),
+  X(154,210), X(155,211), X(156,212), X(157,213), X(158,214), X(159,215),
+  X(160,216), X(169,225), X(170,226), X(171,227), X(172,228), X(173,229),
+  X(174,230), X(175,231), X(176,232), X(185,241), X(186,242), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(105,129), X(106,130), X(107,131), X(108,132), X(109,133), X(110,134),
+  X(111,135), X(112,136), X(121,145), X(122,146), X(123,147), X(124,148),
+  X(125,149), X(126,150), X(127,151), X(128,152), X(137,161), X(138,162),
+  X(139,163), X(140,164), X(141,165), X(142,166), X(143,167), X(144,168),
+  X(153,177), X(154,178), X(155,179), X(156,180), X(157,181), X(158,182),
+  X(159,183), X(160,184), X(169,193), X(170,194), X(171,195), X(172,196),
+  X(173,197), X(174,198), X(175,199), X(176,200), X(185,209), X(186,210),
+  X(187,211), X(188,212), X(189,213), X(190,214), X(191,215), X(192,216),
+  X(201,225), X(202,226), X(203,227), X(204,228), X(205,229), X(206,230),
+  X(207,231), X(208,232), X(217,241), X(218,242), X(9,17), X(10,18), X(11,19),
+  X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35),
+  X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51),
+  X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67),
+  X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83),
+  X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(125,133), X(126,134),
+  X(127,135), X(128,136), X(137,145), X(138,146), X(139,147), X(140,148),
+  X(141,149), X(142,150), X(143,151), X(144,152), X(153,161), X(154,162),
+  X(155,163), X(156,164), X(157,165), X(158,166), X(159,167), X(160,168),
+  X(169,177), X(170,178), X(171,179), X(172,180), X(173,181), X(174,182),
+  X(175,183), X(176,184), X(185,193), X(186,194), X(187,195), X(188,196),
+  X(189,197), X(190,198), X(191,199), X(192,200), X(201,209), X(202,210),
+  X(203,211), X(204,212), X(205,213), X(206,214), X(207,215), X(208,216),
+  X(217,225), X(218,226), X(219,227), X(220,228), X(221,229), X(222,230),
+  X(223,231), X(224,232), X(233,241), X(234,242), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88),
+  X(89,93), X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103),
+  X(100,104), X(105,109), X(106,110), X(107,111), X(108,112), X(113,117),
+  X(114,118), X(115,119), X(116,120), X(121,125), X(122,126), X(123,127),
+  X(124,128), X(129,133), X(130,134), X(131,135), X(132,136), X(137,141),
+  X(138,142), X(139,143), X(140,144), X(145,149), X(146,150), X(147,151),
+  X(148,152), X(153,157), X(154,158), X(155,159), X(156,160), X(161,165),
+  X(162,166), X(163,167), X(164,168), X(169,173), X(170,174), X(171,175),
+  X(172,176), X(177,181), X(178,182), X(179,183), X(180,184), X(185,189),
+  X(186,190), X(187,191), X(188,192), X(193,197), X(194,198), X(195,199),
+  X(196,200), X(201,205), X(202,206), X(203,207), X(204,208), X(209,213),
+  X(210,214), X(211,215), X(212,216), X(217,221), X(218,222), X(219,223),
+  X(220,224), X(225,229), X(226,230), X(227,231), X(228,232), X(233,237),
+  X(234,238), X(235,239), X(236,240), X(5,129), X(6,130), X(7,131), X(8,132),
+  X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147),
+  X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162),
+  X(39,163), X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(53,177),
+  X(54,178), X(55,179), X(56,180), X(61,185), X(62,186), X(63,187), X(64,188),
+  X(69,193), X(70,194), X(71,195), X(72,196), X(77,201), X(78,202), X(79,203),
+  X(80,204), X(85,209), X(86,210), X(87,211), X(88,212), X(93,217), X(94,218),
+  X(95,219), X(96,220), X(101,225), X(102,226), X(103,227), X(104,228),
+  X(109,233), X(110,234), X(111,235), X(112,236), X(117,241), X(118,242),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92),
+  X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107),
+  X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122),
+  X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132), X(77,137),
+  X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147), X(88,148),
+  X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162), X(103,163),
+  X(104,164), X(109,169), X(110,170), X(111,171), X(112,172), X(117,177),
+  X(118,178), X(119,179), X(120,180), X(125,185), X(126,186), X(127,187),
+  X(128,188), X(133,193), X(134,194), X(135,195), X(136,196), X(141,201),
+  X(142,202), X(143,203), X(144,204), X(149,209), X(150,210), X(151,211),
+  X(152,212), X(157,217), X(158,218), X(159,219), X(160,220), X(165,225),
+  X(166,226), X(167,227), X(168,228), X(173,233), X(174,234), X(175,235),
+  X(176,236), X(181,241), X(182,242), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52),
+  X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68),
+  X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84),
+  X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(103,131), X(104,132), X(109,137), X(110,138), X(111,139),
+  X(112,140), X(117,145), X(118,146), X(119,147), X(120,148), X(125,153),
+  X(126,154), X(127,155), X(128,156), X(133,161), X(134,162), X(135,163),
+  X(136,164), X(141,169), X(142,170), X(143,171), X(144,172), X(149,177),
+  X(150,178), X(151,179), X(152,180), X(157,185), X(158,186), X(159,187),
+  X(160,188), X(165,193), X(166,194), X(167,195), X(168,196), X(173,201),
+  X(174,202), X(175,203), X(176,204), X(181,209), X(182,210), X(183,211),
+  X(184,212), X(189,217), X(190,218), X(191,219), X(192,220), X(197,225),
+  X(198,226), X(199,227), X(200,228), X(205,233), X(206,234), X(207,235),
+  X(208,236), X(213,241), X(214,242), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(173,185), X(174,186),
+  X(175,187), X(176,188), X(181,193), X(182,194), X(183,195), X(184,196),
+  X(189,201), X(190,202), X(191,203), X(192,204), X(197,209), X(198,210),
+  X(199,211), X(200,212), X(205,217), X(206,218), X(207,219), X(208,220),
+  X(213,225), X(214,226), X(215,227), X(216,228), X(221,233), X(222,234),
+  X(223,235), X(224,236), X(229,241), X(230,242), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27),
+  X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43),
+  X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59),
+  X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75),
+  X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91),
+  X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106),
+  X(103,107), X(104,108), X(109,113), X(110,114), X(111,115), X(112,116),
+  X(117,121), X(118,122), X(119,123), X(120,124), X(125,129), X(126,130),
+  X(127,131), X(128,132), X(133,137), X(134,138), X(135,139), X(136,140),
+  X(141,145), X(142,146), X(143,147), X(144,148), X(149,153), X(150,154),
+  X(151,155), X(152,156), X(157,161), X(158,162), X(159,163), X(160,164),
+  X(165,169), X(166,170), X(167,171), X(168,172), X(173,177), X(174,178),
+  X(175,179), X(176,180), X(181,185), X(182,186), X(183,187), X(184,188),
+  X(189,193), X(190,194), X(191,195), X(192,196), X(197,201), X(198,202),
+  X(199,203), X(200,204), X(205,209), X(206,210), X(207,211), X(208,212),
+  X(213,217), X(214,218), X(215,219), X(216,220), X(221,225), X(222,226),
+  X(223,227), X(224,228), X(229,233), X(230,234), X(231,235), X(232,236),
+  X(237,241), X(238,242), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(129,131),
+  X(130,132), X(133,135), X(134,136), X(137,139), X(138,140), X(141,143),
+  X(142,144), X(145,147), X(146,148), X(149,151), X(150,152), X(153,155),
+  X(154,156), X(157,159), X(158,160), X(161,163), X(162,164), X(165,167),
+  X(166,168), X(169,171), X(170,172), X(173,175), X(174,176), X(177,179),
+  X(178,180), X(181,183), X(182,184), X(185,187), X(186,188), X(189,191),
+  X(190,192), X(193,195), X(194,196), X(197,199), X(198,200), X(201,203),
+  X(202,204), X(205,207), X(206,208), X(209,211), X(210,212), X(213,215),
+  X(214,216), X(217,219), X(218,220), X(221,223), X(222,224), X(225,227),
+  X(226,228), X(229,231), X(230,232), X(233,235), X(234,236), X(237,239),
+  X(238,240), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194),
+  X(71,197), X(72,198), X(75,201), X(76,202), X(79,205), X(80,206), X(83,209),
+  X(84,210), X(87,213), X(88,214), X(91,217), X(92,218), X(95,221), X(96,222),
+  X(99,225), X(100,226), X(103,229), X(104,230), X(107,233), X(108,234),
+  X(111,237), X(112,238), X(115,241), X(116,242), X(3,65), X(4,66), X(7,69),
+  X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85),
+  X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154),
+  X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(127,189), X(128,190),
+  X(131,193), X(132,194), X(135,197), X(136,198), X(139,201), X(140,202),
+  X(143,205), X(144,206), X(147,209), X(148,210), X(151,213), X(152,214),
+  X(155,217), X(156,218), X(159,221), X(160,222), X(163,225), X(164,226),
+  X(167,229), X(168,230), X(171,233), X(172,234), X(175,237), X(176,238),
+  X(179,241), X(180,242), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74),
+  X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90),
+  X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105),
+  X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118),
+  X(91,121), X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133),
+  X(104,134), X(107,137), X(108,138), X(111,141), X(112,142), X(115,145),
+  X(116,146), X(119,149), X(120,150), X(123,153), X(124,154), X(127,157),
+  X(128,158), X(131,161), X(132,162), X(135,165), X(136,166), X(139,169),
+  X(140,170), X(143,173), X(144,174), X(147,177), X(148,178), X(151,181),
+  X(152,182), X(155,185), X(156,186), X(159,189), X(160,190), X(163,193),
+  X(164,194), X(167,197), X(168,198), X(171,201), X(172,202), X(175,205),
+  X(176,206), X(179,209), X(180,210), X(183,213), X(184,214), X(187,217),
+  X(188,218), X(191,221), X(192,222), X(195,225), X(196,226), X(199,229),
+  X(200,230), X(203,233), X(204,234), X(207,237), X(208,238), X(211,241),
+  X(212,242), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166),
+  X(155,169), X(156,170), X(159,173), X(160,174), X(163,177), X(164,178),
+  X(167,181), X(168,182), X(171,185), X(172,186), X(175,189), X(176,190),
+  X(179,193), X(180,194), X(183,197), X(184,198), X(187,201), X(188,202),
+  X(191,205), X(192,206), X(195,209), X(196,210), X(199,213), X(200,214),
+  X(203,217), X(204,218), X(207,221), X(208,222), X(211,225), X(212,226),
+  X(215,229), X(216,230), X(219,233), X(220,234), X(223,237), X(224,238),
+  X(227,241), X(228,242), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50),
+  X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66),
+  X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82),
+  X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134),
+  X(131,137), X(132,138), X(135,141), X(136,142), X(139,145), X(140,146),
+  X(143,149), X(144,150), X(147,153), X(148,154), X(151,157), X(152,158),
+  X(155,161), X(156,162), X(159,165), X(160,166), X(163,169), X(164,170),
+  X(167,173), X(168,174), X(171,177), X(172,178), X(175,181), X(176,182),
+  X(179,185), X(180,186), X(183,189), X(184,190), X(187,193), X(188,194),
+  X(191,197), X(192,198), X(195,201), X(196,202), X(199,205), X(200,206),
+  X(203,209), X(204,210), X(207,213), X(208,214), X(211,217), X(212,218),
+  X(215,221), X(216,222), X(219,225), X(220,226), X(223,229), X(224,230),
+  X(227,233), X(228,234), X(231,237), X(232,238), X(235,241), X(236,242), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134),
+  X(135,137), X(136,138), X(139,141), X(140,142), X(143,145), X(144,146),
+  X(147,149), X(148,150), X(151,153), X(152,154), X(155,157), X(156,158),
+  X(159,161), X(160,162), X(163,165), X(164,166), X(167,169), X(168,170),
+  X(171,173), X(172,174), X(175,177), X(176,178), X(179,181), X(180,182),
+  X(183,185), X(184,186), X(187,189), X(188,190), X(191,193), X(192,194),
+  X(195,197), X(196,198), X(199,201), X(200,202), X(203,205), X(204,206),
+  X(207,209), X(208,210), X(211,213), X(212,214), X(215,217), X(216,218),
+  X(219,221), X(220,222), X(223,225), X(224,226), X(227,229), X(228,230),
+  X(231,233), X(232,234), X(235,237), X(236,238), X(239,241), X(240,242), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(221,222), X(223,224), X(225,226), X(227,228), X(229,230),
+  X(231,232), X(233,234), X(235,236), X(237,238), X(239,240), X(241,242),
+  X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139), X(14,141),
+  X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153), X(28,155),
+  X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167), X(42,169),
+  X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181), X(56,183),
+  X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195), X(70,197),
+  X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(82,209), X(84,211),
+  X(86,213), X(88,215), X(90,217), X(92,219), X(94,221), X(96,223), X(98,225),
+  X(100,227), X(102,229), X(104,231), X(106,233), X(108,235), X(110,237),
+  X(112,239), X(114,241), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75),
+  X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91),
+  X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105),
+  X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119),
+  X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133),
+  X(72,135), X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147),
+  X(86,149), X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161),
+  X(100,163), X(102,165), X(104,167), X(106,169), X(108,171), X(110,173),
+  X(112,175), X(114,177), X(116,179), X(118,181), X(120,183), X(122,185),
+  X(124,187), X(126,189), X(128,191), X(130,193), X(132,195), X(134,197),
+  X(136,199), X(138,201), X(140,203), X(142,205), X(144,207), X(146,209),
+  X(148,211), X(150,213), X(152,215), X(154,217), X(156,219), X(158,221),
+  X(160,223), X(162,225), X(164,227), X(166,229), X(168,231), X(170,233),
+  X(172,235), X(174,237), X(176,239), X(178,241), X(2,33), X(4,35), X(6,37),
+  X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53),
+  X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69),
+  X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85),
+  X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99),
+  X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113),
+  X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127),
+  X(98,129), X(100,131), X(102,133), X(104,135), X(106,137), X(108,139),
+  X(110,141), X(112,143), X(114,145), X(116,147), X(118,149), X(120,151),
+  X(122,153), X(124,155), X(126,157), X(128,159), X(130,161), X(132,163),
+  X(134,165), X(136,167), X(138,169), X(140,171), X(142,173), X(144,175),
+  X(146,177), X(148,179), X(150,181), X(152,183), X(154,185), X(156,187),
+  X(158,189), X(160,191), X(162,193), X(164,195), X(166,197), X(168,199),
+  X(170,201), X(172,203), X(174,205), X(176,207), X(178,209), X(180,211),
+  X(182,213), X(184,215), X(186,217), X(188,219), X(190,221), X(192,223),
+  X(194,225), X(196,227), X(198,229), X(200,231), X(202,233), X(204,235),
+  X(206,237), X(208,239), X(210,241), X(2,17), X(4,19), X(6,21), X(8,23),
+  X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39),
+  X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55),
+  X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71),
+  X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87),
+  X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99), X(86,101),
+  X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113), X(100,115),
+  X(102,117), X(104,119), X(106,121), X(108,123), X(110,125), X(112,127),
+  X(114,129), X(116,131), X(118,133), X(120,135), X(122,137), X(124,139),
+  X(126,141), X(128,143), X(130,145), X(132,147), X(134,149), X(136,151),
+  X(138,153), X(140,155), X(142,157), X(144,159), X(146,161), X(148,163),
+  X(150,165), X(152,167), X(154,169), X(156,171), X(158,173), X(160,175),
+  X(162,177), X(164,179), X(166,181), X(168,183), X(170,185), X(172,187),
+  X(174,189), X(176,191), X(178,193), X(180,195), X(182,197), X(184,199),
+  X(186,201), X(188,203), X(190,205), X(192,207), X(194,209), X(196,211),
+  X(198,213), X(200,215), X(202,217), X(204,219), X(206,221), X(208,223),
+  X(210,225), X(212,227), X(214,229), X(216,231), X(218,233), X(220,235),
+  X(222,237), X(224,239), X(226,241), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(108,115), X(110,117), X(112,119), X(114,121),
+  X(116,123), X(118,125), X(120,127), X(122,129), X(124,131), X(126,133),
+  X(128,135), X(130,137), X(132,139), X(134,141), X(136,143), X(138,145),
+  X(140,147), X(142,149), X(144,151), X(146,153), X(148,155), X(150,157),
+  X(152,159), X(154,161), X(156,163), X(158,165), X(160,167), X(162,169),
+  X(164,171), X(166,173), X(168,175), X(170,177), X(172,179), X(174,181),
+  X(176,183), X(178,185), X(180,187), X(182,189), X(184,191), X(186,193),
+  X(188,195), X(190,197), X(192,199), X(194,201), X(196,203), X(198,205),
+  X(200,207), X(202,209), X(204,211), X(206,213), X(208,215), X(210,217),
+  X(212,219), X(214,221), X(216,223), X(218,225), X(220,227), X(222,229),
+  X(224,231), X(226,233), X(228,235), X(230,237), X(232,239), X(234,241), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(120,123),
+  X(122,125), X(124,127), X(126,129), X(128,131), X(130,133), X(132,135),
+  X(134,137), X(136,139), X(138,141), X(140,143), X(142,145), X(144,147),
+  X(146,149), X(148,151), X(150,153), X(152,155), X(154,157), X(156,159),
+  X(158,161), X(160,163), X(162,165), X(164,167), X(166,169), X(168,171),
+  X(170,173), X(172,175), X(174,177), X(176,179), X(178,181), X(180,183),
+  X(182,185), X(184,187), X(186,189), X(188,191), X(190,193), X(192,195),
+  X(194,197), X(196,199), X(198,201), X(200,203), X(202,205), X(204,207),
+  X(206,209), X(208,211), X(210,213), X(212,215), X(214,217), X(216,219),
+  X(218,221), X(220,223), X(222,225), X(224,227), X(226,229), X(228,231),
+  X(230,233), X(232,235), X(234,237), X(236,239), X(238,241), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223), X(224,225), X(226,227), X(228,229), X(230,231),
+  X(232,233), X(234,235), X(236,237), X(238,239), X(240,241)
+};
+S(244) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(97,225), X(98,226),
+  X(99,227), X(100,228), X(101,229), X(102,230), X(103,231), X(104,232),
+  X(105,233), X(106,234), X(107,235), X(108,236), X(109,237), X(110,238),
+  X(111,239), X(112,240), X(113,241), X(114,242), X(115,243), X(116,244),
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124),
+  X(61,125), X(62,126), X(63,127), X(64,128), X(129,193), X(130,194), X(131,195),
+  X(132,196), X(133,197), X(134,198), X(135,199), X(136,200), X(137,201),
+  X(138,202), X(139,203), X(140,204), X(141,205), X(142,206), X(143,207),
+  X(144,208), X(145,209), X(146,210), X(147,211), X(148,212), X(149,213),
+  X(150,214), X(151,215), X(152,216), X(153,217), X(154,218), X(155,219),
+  X(156,220), X(157,221), X(158,222), X(159,223), X(160,224), X(161,225),
+  X(162,226), X(163,227), X(164,228), X(165,229), X(166,230), X(167,231),
+  X(168,232), X(169,233), X(170,234), X(171,235), X(172,236), X(173,237),
+  X(174,238), X(175,239), X(176,240), X(177,241), X(178,242), X(179,243),
+  X(180,244), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134),
+  X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141),
+  X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148),
+  X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154), X(91,155),
+  X(92,156), X(93,157), X(94,158), X(95,159), X(96,160), X(97,161), X(98,162),
+  X(99,163), X(100,164), X(101,165), X(102,166), X(103,167), X(104,168),
+  X(105,169), X(106,170), X(107,171), X(108,172), X(109,173), X(110,174),
+  X(111,175), X(112,176), X(113,177), X(114,178), X(115,179), X(116,180),
+  X(117,181), X(118,182), X(119,183), X(120,184), X(121,185), X(122,186),
+  X(123,187), X(124,188), X(125,189), X(126,190), X(127,191), X(128,192),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103),
+  X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110),
+  X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117),
+  X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124),
+  X(93,125), X(94,126), X(95,127), X(96,128), X(129,161), X(130,162), X(131,163),
+  X(132,164), X(133,165), X(134,166), X(135,167), X(136,168), X(137,169),
+  X(138,170), X(139,171), X(140,172), X(141,173), X(142,174), X(143,175),
+  X(144,176), X(145,177), X(146,178), X(147,179), X(148,180), X(149,181),
+  X(150,182), X(151,183), X(152,184), X(153,185), X(154,186), X(155,187),
+  X(156,188), X(157,189), X(158,190), X(159,191), X(160,192), X(193,225),
+  X(194,226), X(195,227), X(196,228), X(197,229), X(198,230), X(199,231),
+  X(200,232), X(201,233), X(202,234), X(203,235), X(204,236), X(205,237),
+  X(206,238), X(207,239), X(208,240), X(209,241), X(210,242), X(211,243),
+  X(212,244), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(119,215), X(120,216), X(121,217), X(122,218),
+  X(123,219), X(124,220), X(125,221), X(126,222), X(127,223), X(128,224),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(165,197), X(166,198), X(167,199), X(168,200), X(169,201), X(170,202),
+  X(171,203), X(172,204), X(173,205), X(174,206), X(175,207), X(176,208),
+  X(177,209), X(178,210), X(179,211), X(180,212), X(181,213), X(182,214),
+  X(183,215), X(184,216), X(185,217), X(186,218), X(187,219), X(188,220),
+  X(189,221), X(190,222), X(191,223), X(192,224), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(201,217), X(202,218), X(203,219), X(204,220), X(205,221), X(206,222),
+  X(207,223), X(208,224), X(225,241), X(226,242), X(227,243), X(228,244),
+  X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134), X(23,135),
+  X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141), X(30,142),
+  X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164), X(53,165),
+  X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171), X(60,172),
+  X(61,173), X(62,174), X(63,175), X(64,176), X(81,193), X(82,194), X(83,195),
+  X(84,196), X(85,197), X(86,198), X(87,199), X(88,200), X(89,201), X(90,202),
+  X(91,203), X(92,204), X(93,205), X(94,206), X(95,207), X(96,208), X(113,225),
+  X(114,226), X(115,227), X(116,228), X(117,229), X(118,230), X(119,231),
+  X(120,232), X(121,233), X(122,234), X(123,235), X(124,236), X(125,237),
+  X(126,238), X(127,239), X(128,240), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(119,167), X(120,168), X(121,169), X(122,170), X(123,171),
+  X(124,172), X(125,173), X(126,174), X(127,175), X(128,176), X(145,193),
+  X(146,194), X(147,195), X(148,196), X(149,197), X(150,198), X(151,199),
+  X(152,200), X(153,201), X(154,202), X(155,203), X(156,204), X(157,205),
+  X(158,206), X(159,207), X(160,208), X(177,225), X(178,226), X(179,227),
+  X(180,228), X(181,229), X(182,230), X(183,231), X(184,232), X(185,233),
+  X(186,234), X(187,235), X(188,236), X(189,237), X(190,238), X(191,239),
+  X(192,240), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100), X(85,101),
+  X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107), X(92,108),
+  X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130), X(115,131),
+  X(116,132), X(117,133), X(118,134), X(119,135), X(120,136), X(121,137),
+  X(122,138), X(123,139), X(124,140), X(125,141), X(126,142), X(127,143),
+  X(128,144), X(145,161), X(146,162), X(147,163), X(148,164), X(149,165),
+  X(150,166), X(151,167), X(152,168), X(153,169), X(154,170), X(155,171),
+  X(156,172), X(157,173), X(158,174), X(159,175), X(160,176), X(177,193),
+  X(178,194), X(179,195), X(180,196), X(181,197), X(182,198), X(183,199),
+  X(184,200), X(185,201), X(186,202), X(187,203), X(188,204), X(189,205),
+  X(190,206), X(191,207), X(192,208), X(209,225), X(210,226), X(211,227),
+  X(212,228), X(213,229), X(214,230), X(215,231), X(216,232), X(217,233),
+  X(218,234), X(219,235), X(220,236), X(221,237), X(222,238), X(223,239),
+  X(224,240), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15),
+  X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31),
+  X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47),
+  X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63),
+  X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79),
+  X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95),
+  X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(145,153), X(146,154), X(147,155), X(148,156), X(149,157), X(150,158),
+  X(151,159), X(152,160), X(161,169), X(162,170), X(163,171), X(164,172),
+  X(165,173), X(166,174), X(167,175), X(168,176), X(177,185), X(178,186),
+  X(179,187), X(180,188), X(181,189), X(182,190), X(183,191), X(184,192),
+  X(193,201), X(194,202), X(195,203), X(196,204), X(197,205), X(198,206),
+  X(199,207), X(200,208), X(209,217), X(210,218), X(211,219), X(212,220),
+  X(213,221), X(214,222), X(215,223), X(216,224), X(225,233), X(226,234),
+  X(227,235), X(228,236), X(229,237), X(230,238), X(231,239), X(232,240),
+  X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135),
+  X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149), X(30,150),
+  X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164), X(45,165),
+  X(46,166), X(47,167), X(48,168), X(57,177), X(58,178), X(59,179), X(60,180),
+  X(61,181), X(62,182), X(63,183), X(64,184), X(73,193), X(74,194), X(75,195),
+  X(76,196), X(77,197), X(78,198), X(79,199), X(80,200), X(89,209), X(90,210),
+  X(91,211), X(92,212), X(93,213), X(94,214), X(95,215), X(96,216), X(105,225),
+  X(106,226), X(107,227), X(108,228), X(109,229), X(110,230), X(111,231),
+  X(112,232), X(121,241), X(122,242), X(123,243), X(124,244), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98),
+  X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113),
+  X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120),
+  X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135),
+  X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150),
+  X(95,151), X(96,152), X(105,161), X(106,162), X(107,163), X(108,164),
+  X(109,165), X(110,166), X(111,167), X(112,168), X(121,177), X(122,178),
+  X(123,179), X(124,180), X(125,181), X(126,182), X(127,183), X(128,184),
+  X(137,193), X(138,194), X(139,195), X(140,196), X(141,197), X(142,198),
+  X(143,199), X(144,200), X(153,209), X(154,210), X(155,211), X(156,212),
+  X(157,213), X(158,214), X(159,215), X(160,216), X(169,225), X(170,226),
+  X(171,227), X(172,228), X(173,229), X(174,230), X(175,231), X(176,232),
+  X(185,241), X(186,242), X(187,243), X(188,244), X(9,33), X(10,34), X(11,35),
+  X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51),
+  X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67),
+  X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83),
+  X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(121,145), X(122,146), X(123,147), X(124,148), X(125,149),
+  X(126,150), X(127,151), X(128,152), X(137,161), X(138,162), X(139,163),
+  X(140,164), X(141,165), X(142,166), X(143,167), X(144,168), X(153,177),
+  X(154,178), X(155,179), X(156,180), X(157,181), X(158,182), X(159,183),
+  X(160,184), X(169,193), X(170,194), X(171,195), X(172,196), X(173,197),
+  X(174,198), X(175,199), X(176,200), X(185,209), X(186,210), X(187,211),
+  X(188,212), X(189,213), X(190,214), X(191,215), X(192,216), X(201,225),
+  X(202,226), X(203,227), X(204,228), X(205,229), X(206,230), X(207,231),
+  X(208,232), X(217,241), X(218,242), X(219,243), X(220,244), X(9,17), X(10,18),
+  X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34),
+  X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50),
+  X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66),
+  X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82),
+  X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98),
+  X(91,99), X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113),
+  X(106,114), X(107,115), X(108,116), X(109,117), X(110,118), X(111,119),
+  X(112,120), X(121,129), X(122,130), X(123,131), X(124,132), X(125,133),
+  X(126,134), X(127,135), X(128,136), X(137,145), X(138,146), X(139,147),
+  X(140,148), X(141,149), X(142,150), X(143,151), X(144,152), X(153,161),
+  X(154,162), X(155,163), X(156,164), X(157,165), X(158,166), X(159,167),
+  X(160,168), X(169,177), X(170,178), X(171,179), X(172,180), X(173,181),
+  X(174,182), X(175,183), X(176,184), X(185,193), X(186,194), X(187,195),
+  X(188,196), X(189,197), X(190,198), X(191,199), X(192,200), X(201,209),
+  X(202,210), X(203,211), X(204,212), X(205,213), X(206,214), X(207,215),
+  X(208,216), X(217,225), X(218,226), X(219,227), X(220,228), X(221,229),
+  X(222,230), X(223,231), X(224,232), X(233,241), X(234,242), X(235,243),
+  X(236,244), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(185,189), X(186,190), X(187,191), X(188,192),
+  X(193,197), X(194,198), X(195,199), X(196,200), X(201,205), X(202,206),
+  X(203,207), X(204,208), X(209,213), X(210,214), X(211,215), X(212,216),
+  X(217,221), X(218,222), X(219,223), X(220,224), X(225,229), X(226,230),
+  X(227,231), X(228,232), X(233,237), X(234,238), X(235,239), X(236,240),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153), X(30,154),
+  X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164), X(45,169),
+  X(46,170), X(47,171), X(48,172), X(53,177), X(54,178), X(55,179), X(56,180),
+  X(61,185), X(62,186), X(63,187), X(64,188), X(69,193), X(70,194), X(71,195),
+  X(72,196), X(77,201), X(78,202), X(79,203), X(80,204), X(85,209), X(86,210),
+  X(87,211), X(88,212), X(93,217), X(94,218), X(95,219), X(96,220), X(101,225),
+  X(102,226), X(103,227), X(104,228), X(109,233), X(110,234), X(111,235),
+  X(112,236), X(117,241), X(118,242), X(119,243), X(120,244), X(5,65), X(6,66),
+  X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76), X(21,81), X(22,82),
+  X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92), X(37,97), X(38,98),
+  X(39,99), X(40,100), X(45,105), X(46,106), X(47,107), X(48,108), X(53,113),
+  X(54,114), X(55,115), X(56,116), X(61,121), X(62,122), X(63,123), X(64,124),
+  X(69,129), X(70,130), X(71,131), X(72,132), X(77,137), X(78,138), X(79,139),
+  X(80,140), X(85,145), X(86,146), X(87,147), X(88,148), X(93,153), X(94,154),
+  X(95,155), X(96,156), X(101,161), X(102,162), X(103,163), X(104,164),
+  X(109,169), X(110,170), X(111,171), X(112,172), X(117,177), X(118,178),
+  X(119,179), X(120,180), X(125,185), X(126,186), X(127,187), X(128,188),
+  X(133,193), X(134,194), X(135,195), X(136,196), X(141,201), X(142,202),
+  X(143,203), X(144,204), X(149,209), X(150,210), X(151,211), X(152,212),
+  X(157,217), X(158,218), X(159,219), X(160,220), X(165,225), X(166,226),
+  X(167,227), X(168,228), X(173,233), X(174,234), X(175,235), X(176,236),
+  X(181,241), X(182,242), X(183,243), X(184,244), X(5,33), X(6,34), X(7,35),
+  X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51),
+  X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67),
+  X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83),
+  X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(103,131), X(104,132), X(109,137), X(110,138), X(111,139),
+  X(112,140), X(117,145), X(118,146), X(119,147), X(120,148), X(125,153),
+  X(126,154), X(127,155), X(128,156), X(133,161), X(134,162), X(135,163),
+  X(136,164), X(141,169), X(142,170), X(143,171), X(144,172), X(149,177),
+  X(150,178), X(151,179), X(152,180), X(157,185), X(158,186), X(159,187),
+  X(160,188), X(165,193), X(166,194), X(167,195), X(168,196), X(173,201),
+  X(174,202), X(175,203), X(176,204), X(181,209), X(182,210), X(183,211),
+  X(184,212), X(189,217), X(190,218), X(191,219), X(192,220), X(197,225),
+  X(198,226), X(199,227), X(200,228), X(205,233), X(206,234), X(207,235),
+  X(208,236), X(213,241), X(214,242), X(215,243), X(216,244), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(143,155), X(144,156), X(149,161),
+  X(150,162), X(151,163), X(152,164), X(157,169), X(158,170), X(159,171),
+  X(160,172), X(165,177), X(166,178), X(167,179), X(168,180), X(173,185),
+  X(174,186), X(175,187), X(176,188), X(181,193), X(182,194), X(183,195),
+  X(184,196), X(189,201), X(190,202), X(191,203), X(192,204), X(197,209),
+  X(198,210), X(199,211), X(200,212), X(205,217), X(206,218), X(207,219),
+  X(208,220), X(213,225), X(214,226), X(215,227), X(216,228), X(221,233),
+  X(222,234), X(223,235), X(224,236), X(229,241), X(230,242), X(231,243),
+  X(232,244), X(5,9), X(6,10), X(7,11), X(8,12), X(13,17), X(14,18), X(15,19),
+  X(16,20), X(21,25), X(22,26), X(23,27), X(24,28), X(29,33), X(30,34), X(31,35),
+  X(32,36), X(37,41), X(38,42), X(39,43), X(40,44), X(45,49), X(46,50), X(47,51),
+  X(48,52), X(53,57), X(54,58), X(55,59), X(56,60), X(61,65), X(62,66), X(63,67),
+  X(64,68), X(69,73), X(70,74), X(71,75), X(72,76), X(77,81), X(78,82), X(79,83),
+  X(80,84), X(85,89), X(86,90), X(87,91), X(88,92), X(93,97), X(94,98), X(95,99),
+  X(96,100), X(101,105), X(102,106), X(103,107), X(104,108), X(109,113),
+  X(110,114), X(111,115), X(112,116), X(117,121), X(118,122), X(119,123),
+  X(120,124), X(125,129), X(126,130), X(127,131), X(128,132), X(133,137),
+  X(134,138), X(135,139), X(136,140), X(141,145), X(142,146), X(143,147),
+  X(144,148), X(149,153), X(150,154), X(151,155), X(152,156), X(157,161),
+  X(158,162), X(159,163), X(160,164), X(165,169), X(166,170), X(167,171),
+  X(168,172), X(173,177), X(174,178), X(175,179), X(176,180), X(181,185),
+  X(182,186), X(183,187), X(184,188), X(189,193), X(190,194), X(191,195),
+  X(192,196), X(197,201), X(198,202), X(199,203), X(200,204), X(205,209),
+  X(206,210), X(207,211), X(208,212), X(213,217), X(214,218), X(215,219),
+  X(216,220), X(221,225), X(222,226), X(223,227), X(224,228), X(229,233),
+  X(230,234), X(231,235), X(232,236), X(237,241), X(238,242), X(239,243),
+  X(240,244), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12), X(13,15),
+  X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28), X(29,31),
+  X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44), X(45,47),
+  X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60), X(61,63),
+  X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76), X(77,79),
+  X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92), X(93,95),
+  X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107), X(106,108),
+  X(109,111), X(110,112), X(113,115), X(114,116), X(117,119), X(118,120),
+  X(121,123), X(122,124), X(125,127), X(126,128), X(129,131), X(130,132),
+  X(133,135), X(134,136), X(137,139), X(138,140), X(141,143), X(142,144),
+  X(145,147), X(146,148), X(149,151), X(150,152), X(153,155), X(154,156),
+  X(157,159), X(158,160), X(161,163), X(162,164), X(165,167), X(166,168),
+  X(169,171), X(170,172), X(173,175), X(174,176), X(177,179), X(178,180),
+  X(181,183), X(182,184), X(185,187), X(186,188), X(189,191), X(190,192),
+  X(193,195), X(194,196), X(197,199), X(198,200), X(201,203), X(202,204),
+  X(205,207), X(206,208), X(209,211), X(210,212), X(213,215), X(214,216),
+  X(217,219), X(218,220), X(221,223), X(222,224), X(225,227), X(226,228),
+  X(229,231), X(230,232), X(233,235), X(234,236), X(237,239), X(238,240),
+  X(241,243), X(242,244), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137),
+  X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150),
+  X(27,153), X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165),
+  X(40,166), X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178),
+  X(55,181), X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193),
+  X(68,194), X(71,197), X(72,198), X(75,201), X(76,202), X(79,205), X(80,206),
+  X(83,209), X(84,210), X(87,213), X(88,214), X(91,217), X(92,218), X(95,221),
+  X(96,222), X(99,225), X(100,226), X(103,229), X(104,230), X(107,233),
+  X(108,234), X(111,237), X(112,238), X(115,241), X(116,242), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154),
+  X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(127,189), X(128,190),
+  X(131,193), X(132,194), X(135,197), X(136,198), X(139,201), X(140,202),
+  X(143,205), X(144,206), X(147,209), X(148,210), X(151,213), X(152,214),
+  X(155,217), X(156,218), X(159,221), X(160,222), X(163,225), X(164,226),
+  X(167,229), X(168,230), X(171,233), X(172,234), X(175,237), X(176,238),
+  X(179,241), X(180,242), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74),
+  X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90),
+  X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105),
+  X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118),
+  X(91,121), X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133),
+  X(104,134), X(107,137), X(108,138), X(111,141), X(112,142), X(115,145),
+  X(116,146), X(119,149), X(120,150), X(123,153), X(124,154), X(127,157),
+  X(128,158), X(131,161), X(132,162), X(135,165), X(136,166), X(139,169),
+  X(140,170), X(143,173), X(144,174), X(147,177), X(148,178), X(151,181),
+  X(152,182), X(155,185), X(156,186), X(159,189), X(160,190), X(163,193),
+  X(164,194), X(167,197), X(168,198), X(171,201), X(172,202), X(175,205),
+  X(176,206), X(179,209), X(180,210), X(183,213), X(184,214), X(187,217),
+  X(188,218), X(191,221), X(192,222), X(195,225), X(196,226), X(199,229),
+  X(200,230), X(203,233), X(204,234), X(207,237), X(208,238), X(211,241),
+  X(212,242), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166),
+  X(155,169), X(156,170), X(159,173), X(160,174), X(163,177), X(164,178),
+  X(167,181), X(168,182), X(171,185), X(172,186), X(175,189), X(176,190),
+  X(179,193), X(180,194), X(183,197), X(184,198), X(187,201), X(188,202),
+  X(191,205), X(192,206), X(195,209), X(196,210), X(199,213), X(200,214),
+  X(203,217), X(204,218), X(207,221), X(208,222), X(211,225), X(212,226),
+  X(215,229), X(216,230), X(219,233), X(220,234), X(223,237), X(224,238),
+  X(227,241), X(228,242), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50),
+  X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66),
+  X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82),
+  X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134),
+  X(131,137), X(132,138), X(135,141), X(136,142), X(139,145), X(140,146),
+  X(143,149), X(144,150), X(147,153), X(148,154), X(151,157), X(152,158),
+  X(155,161), X(156,162), X(159,165), X(160,166), X(163,169), X(164,170),
+  X(167,173), X(168,174), X(171,177), X(172,178), X(175,181), X(176,182),
+  X(179,185), X(180,186), X(183,189), X(184,190), X(187,193), X(188,194),
+  X(191,197), X(192,198), X(195,201), X(196,202), X(199,205), X(200,206),
+  X(203,209), X(204,210), X(207,213), X(208,214), X(211,217), X(212,218),
+  X(215,221), X(216,222), X(219,225), X(220,226), X(223,229), X(224,230),
+  X(227,233), X(228,234), X(231,237), X(232,238), X(235,241), X(236,242), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134),
+  X(135,137), X(136,138), X(139,141), X(140,142), X(143,145), X(144,146),
+  X(147,149), X(148,150), X(151,153), X(152,154), X(155,157), X(156,158),
+  X(159,161), X(160,162), X(163,165), X(164,166), X(167,169), X(168,170),
+  X(171,173), X(172,174), X(175,177), X(176,178), X(179,181), X(180,182),
+  X(183,185), X(184,186), X(187,189), X(188,190), X(191,193), X(192,194),
+  X(195,197), X(196,198), X(199,201), X(200,202), X(203,205), X(204,206),
+  X(207,209), X(208,210), X(211,213), X(212,214), X(215,217), X(216,218),
+  X(219,221), X(220,222), X(223,225), X(224,226), X(227,229), X(228,230),
+  X(231,233), X(232,234), X(235,237), X(236,238), X(239,241), X(240,242), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(221,222), X(223,224), X(225,226), X(227,228), X(229,230),
+  X(231,232), X(233,234), X(235,236), X(237,238), X(239,240), X(241,242),
+  X(243,244), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181),
+  X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195),
+  X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(82,209),
+  X(84,211), X(86,213), X(88,215), X(90,217), X(92,219), X(94,221), X(96,223),
+  X(98,225), X(100,227), X(102,229), X(104,231), X(106,233), X(108,235),
+  X(110,237), X(112,239), X(114,241), X(116,243), X(2,65), X(4,67), X(6,69),
+  X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85),
+  X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99),
+  X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113),
+  X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127),
+  X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141),
+  X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155),
+  X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(124,187), X(126,189), X(128,191),
+  X(130,193), X(132,195), X(134,197), X(136,199), X(138,201), X(140,203),
+  X(142,205), X(144,207), X(146,209), X(148,211), X(150,213), X(152,215),
+  X(154,217), X(156,219), X(158,221), X(160,223), X(162,225), X(164,227),
+  X(166,229), X(168,231), X(170,233), X(172,235), X(174,237), X(176,239),
+  X(178,241), X(180,243), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43),
+  X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59),
+  X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75),
+  X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91),
+  X(62,93), X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105),
+  X(76,107), X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119),
+  X(90,121), X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133),
+  X(104,135), X(106,137), X(108,139), X(110,141), X(112,143), X(114,145),
+  X(116,147), X(118,149), X(120,151), X(122,153), X(124,155), X(126,157),
+  X(128,159), X(130,161), X(132,163), X(134,165), X(136,167), X(138,169),
+  X(140,171), X(142,173), X(144,175), X(146,177), X(148,179), X(150,181),
+  X(152,183), X(154,185), X(156,187), X(158,189), X(160,191), X(162,193),
+  X(164,195), X(166,197), X(168,199), X(170,201), X(172,203), X(174,205),
+  X(176,207), X(178,209), X(180,211), X(182,213), X(184,215), X(186,217),
+  X(188,219), X(190,221), X(192,223), X(194,225), X(196,227), X(198,229),
+  X(200,231), X(202,233), X(204,235), X(206,237), X(208,239), X(210,241),
+  X(212,243), X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29),
+  X(16,31), X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45),
+  X(32,47), X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61),
+  X(48,63), X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77),
+  X(64,79), X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93),
+  X(80,95), X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107),
+  X(94,109), X(96,111), X(98,113), X(100,115), X(102,117), X(104,119),
+  X(106,121), X(108,123), X(110,125), X(112,127), X(114,129), X(116,131),
+  X(118,133), X(120,135), X(122,137), X(124,139), X(126,141), X(128,143),
+  X(130,145), X(132,147), X(134,149), X(136,151), X(138,153), X(140,155),
+  X(142,157), X(144,159), X(146,161), X(148,163), X(150,165), X(152,167),
+  X(154,169), X(156,171), X(158,173), X(160,175), X(162,177), X(164,179),
+  X(166,181), X(168,183), X(170,185), X(172,187), X(174,189), X(176,191),
+  X(178,193), X(180,195), X(182,197), X(184,199), X(186,201), X(188,203),
+  X(190,205), X(192,207), X(194,209), X(196,211), X(198,213), X(200,215),
+  X(202,217), X(204,219), X(206,221), X(208,223), X(210,225), X(212,227),
+  X(214,229), X(216,231), X(218,233), X(220,235), X(222,237), X(224,239),
+  X(226,241), X(228,243), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19),
+  X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35),
+  X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51),
+  X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67),
+  X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83),
+  X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(134,141), X(136,143), X(138,145), X(140,147),
+  X(142,149), X(144,151), X(146,153), X(148,155), X(150,157), X(152,159),
+  X(154,161), X(156,163), X(158,165), X(160,167), X(162,169), X(164,171),
+  X(166,173), X(168,175), X(170,177), X(172,179), X(174,181), X(176,183),
+  X(178,185), X(180,187), X(182,189), X(184,191), X(186,193), X(188,195),
+  X(190,197), X(192,199), X(194,201), X(196,203), X(198,205), X(200,207),
+  X(202,209), X(204,211), X(206,213), X(208,215), X(210,217), X(212,219),
+  X(214,221), X(216,223), X(218,225), X(220,227), X(222,229), X(224,231),
+  X(226,233), X(228,235), X(230,237), X(232,239), X(234,241), X(236,243), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(120,123),
+  X(122,125), X(124,127), X(126,129), X(128,131), X(130,133), X(132,135),
+  X(134,137), X(136,139), X(138,141), X(140,143), X(142,145), X(144,147),
+  X(146,149), X(148,151), X(150,153), X(152,155), X(154,157), X(156,159),
+  X(158,161), X(160,163), X(162,165), X(164,167), X(166,169), X(168,171),
+  X(170,173), X(172,175), X(174,177), X(176,179), X(178,181), X(180,183),
+  X(182,185), X(184,187), X(186,189), X(188,191), X(190,193), X(192,195),
+  X(194,197), X(196,199), X(198,201), X(200,203), X(202,205), X(204,207),
+  X(206,209), X(208,211), X(210,213), X(212,215), X(214,217), X(216,219),
+  X(218,221), X(220,223), X(222,225), X(224,227), X(226,229), X(228,231),
+  X(230,233), X(232,235), X(234,237), X(236,239), X(238,241), X(240,243), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223), X(224,225), X(226,227), X(228,229), X(230,231),
+  X(232,233), X(234,235), X(236,237), X(238,239), X(240,241), X(242,243)
+};
+S(246) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(97,225), X(98,226),
+  X(99,227), X(100,228), X(101,229), X(102,230), X(103,231), X(104,232),
+  X(105,233), X(106,234), X(107,235), X(108,236), X(109,237), X(110,238),
+  X(111,239), X(112,240), X(113,241), X(114,242), X(115,243), X(116,244),
+  X(117,245), X(118,246), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70),
+  X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78),
+  X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86),
+  X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94),
+  X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101),
+  X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108),
+  X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115),
+  X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122),
+  X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(129,193),
+  X(130,194), X(131,195), X(132,196), X(133,197), X(134,198), X(135,199),
+  X(136,200), X(137,201), X(138,202), X(139,203), X(140,204), X(141,205),
+  X(142,206), X(143,207), X(144,208), X(145,209), X(146,210), X(147,211),
+  X(148,212), X(149,213), X(150,214), X(151,215), X(152,216), X(153,217),
+  X(154,218), X(155,219), X(156,220), X(157,221), X(158,222), X(159,223),
+  X(160,224), X(161,225), X(162,226), X(163,227), X(164,228), X(165,229),
+  X(166,230), X(167,231), X(168,232), X(169,233), X(170,234), X(171,235),
+  X(172,236), X(173,237), X(174,238), X(175,239), X(176,240), X(177,241),
+  X(178,242), X(179,243), X(180,244), X(181,245), X(182,246), X(65,129),
+  X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136),
+  X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143),
+  X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150),
+  X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157),
+  X(94,158), X(95,159), X(96,160), X(97,161), X(98,162), X(99,163), X(100,164),
+  X(101,165), X(102,166), X(103,167), X(104,168), X(105,169), X(106,170),
+  X(107,171), X(108,172), X(109,173), X(110,174), X(111,175), X(112,176),
+  X(113,177), X(114,178), X(115,179), X(116,180), X(117,181), X(118,182),
+  X(119,183), X(120,184), X(121,185), X(122,186), X(123,187), X(124,188),
+  X(125,189), X(126,190), X(127,191), X(128,192), X(1,33), X(2,34), X(3,35),
+  X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43),
+  X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51),
+  X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59),
+  X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(135,167), X(136,168), X(137,169), X(138,170), X(139,171),
+  X(140,172), X(141,173), X(142,174), X(143,175), X(144,176), X(145,177),
+  X(146,178), X(147,179), X(148,180), X(149,181), X(150,182), X(151,183),
+  X(152,184), X(153,185), X(154,186), X(155,187), X(156,188), X(157,189),
+  X(158,190), X(159,191), X(160,192), X(193,225), X(194,226), X(195,227),
+  X(196,228), X(197,229), X(198,230), X(199,231), X(200,232), X(201,233),
+  X(202,234), X(203,235), X(204,236), X(205,237), X(206,238), X(207,239),
+  X(208,240), X(209,241), X(210,242), X(211,243), X(212,244), X(213,245),
+  X(214,246), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(119,215), X(120,216), X(121,217), X(122,218),
+  X(123,219), X(124,220), X(125,221), X(126,222), X(127,223), X(128,224),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(165,197), X(166,198), X(167,199), X(168,200), X(169,201), X(170,202),
+  X(171,203), X(172,204), X(173,205), X(174,206), X(175,207), X(176,208),
+  X(177,209), X(178,210), X(179,211), X(180,212), X(181,213), X(182,214),
+  X(183,215), X(184,216), X(185,217), X(186,218), X(187,219), X(188,220),
+  X(189,221), X(190,222), X(191,223), X(192,224), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(201,217), X(202,218), X(203,219), X(204,220), X(205,221), X(206,222),
+  X(207,223), X(208,224), X(225,241), X(226,242), X(227,243), X(228,244),
+  X(229,245), X(230,246), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163),
+  X(52,164), X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170),
+  X(59,171), X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(81,193),
+  X(82,194), X(83,195), X(84,196), X(85,197), X(86,198), X(87,199), X(88,200),
+  X(89,201), X(90,202), X(91,203), X(92,204), X(93,205), X(94,206), X(95,207),
+  X(96,208), X(113,225), X(114,226), X(115,227), X(116,228), X(117,229),
+  X(118,230), X(119,231), X(120,232), X(121,233), X(122,234), X(123,235),
+  X(124,236), X(125,237), X(126,238), X(127,239), X(128,240), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135),
+  X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142),
+  X(95,143), X(96,144), X(113,161), X(114,162), X(115,163), X(116,164),
+  X(117,165), X(118,166), X(119,167), X(120,168), X(121,169), X(122,170),
+  X(123,171), X(124,172), X(125,173), X(126,174), X(127,175), X(128,176),
+  X(145,193), X(146,194), X(147,195), X(148,196), X(149,197), X(150,198),
+  X(151,199), X(152,200), X(153,201), X(154,202), X(155,203), X(156,204),
+  X(157,205), X(158,206), X(159,207), X(160,208), X(177,225), X(178,226),
+  X(179,227), X(180,228), X(181,229), X(182,230), X(183,231), X(184,232),
+  X(185,233), X(186,234), X(187,235), X(188,236), X(189,237), X(190,238),
+  X(191,239), X(192,240), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37),
+  X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45),
+  X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69),
+  X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77),
+  X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100),
+  X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107),
+  X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130),
+  X(115,131), X(116,132), X(117,133), X(118,134), X(119,135), X(120,136),
+  X(121,137), X(122,138), X(123,139), X(124,140), X(125,141), X(126,142),
+  X(127,143), X(128,144), X(145,161), X(146,162), X(147,163), X(148,164),
+  X(149,165), X(150,166), X(151,167), X(152,168), X(153,169), X(154,170),
+  X(155,171), X(156,172), X(157,173), X(158,174), X(159,175), X(160,176),
+  X(177,193), X(178,194), X(179,195), X(180,196), X(181,197), X(182,198),
+  X(183,199), X(184,200), X(185,201), X(186,202), X(187,203), X(188,204),
+  X(189,205), X(190,206), X(191,207), X(192,208), X(209,225), X(210,226),
+  X(211,227), X(212,228), X(213,229), X(214,230), X(215,231), X(216,232),
+  X(217,233), X(218,234), X(219,235), X(220,236), X(221,237), X(222,238),
+  X(223,239), X(224,240), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109),
+  X(102,110), X(103,111), X(104,112), X(113,121), X(114,122), X(115,123),
+  X(116,124), X(117,125), X(118,126), X(119,127), X(120,128), X(129,137),
+  X(130,138), X(131,139), X(132,140), X(133,141), X(134,142), X(135,143),
+  X(136,144), X(145,153), X(146,154), X(147,155), X(148,156), X(149,157),
+  X(150,158), X(151,159), X(152,160), X(161,169), X(162,170), X(163,171),
+  X(164,172), X(165,173), X(166,174), X(167,175), X(168,176), X(177,185),
+  X(178,186), X(179,187), X(180,188), X(181,189), X(182,190), X(183,191),
+  X(184,192), X(193,201), X(194,202), X(195,203), X(196,204), X(197,205),
+  X(198,206), X(199,207), X(200,208), X(209,217), X(210,218), X(211,219),
+  X(212,220), X(213,221), X(214,222), X(215,223), X(216,224), X(225,233),
+  X(226,234), X(227,235), X(228,236), X(229,237), X(230,238), X(231,239),
+  X(232,240), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133), X(14,134),
+  X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148), X(29,149),
+  X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163), X(44,164),
+  X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178), X(59,179),
+  X(60,180), X(61,181), X(62,182), X(63,183), X(64,184), X(73,193), X(74,194),
+  X(75,195), X(76,196), X(77,197), X(78,198), X(79,199), X(80,200), X(89,209),
+  X(90,210), X(91,211), X(92,212), X(93,213), X(94,214), X(95,215), X(96,216),
+  X(105,225), X(106,226), X(107,227), X(108,228), X(109,229), X(110,230),
+  X(111,231), X(112,232), X(121,241), X(122,242), X(123,243), X(124,244),
+  X(125,245), X(126,246), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115),
+  X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130),
+  X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136), X(89,145),
+  X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151), X(96,152),
+  X(105,161), X(106,162), X(107,163), X(108,164), X(109,165), X(110,166),
+  X(111,167), X(112,168), X(121,177), X(122,178), X(123,179), X(124,180),
+  X(125,181), X(126,182), X(127,183), X(128,184), X(137,193), X(138,194),
+  X(139,195), X(140,196), X(141,197), X(142,198), X(143,199), X(144,200),
+  X(153,209), X(154,210), X(155,211), X(156,212), X(157,213), X(158,214),
+  X(159,215), X(160,216), X(169,225), X(170,226), X(171,227), X(172,228),
+  X(173,229), X(174,230), X(175,231), X(176,232), X(185,241), X(186,242),
+  X(187,243), X(188,244), X(189,245), X(190,246), X(9,33), X(10,34), X(11,35),
+  X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51),
+  X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67),
+  X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83),
+  X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99),
+  X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114),
+  X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129),
+  X(106,130), X(107,131), X(108,132), X(109,133), X(110,134), X(111,135),
+  X(112,136), X(121,145), X(122,146), X(123,147), X(124,148), X(125,149),
+  X(126,150), X(127,151), X(128,152), X(137,161), X(138,162), X(139,163),
+  X(140,164), X(141,165), X(142,166), X(143,167), X(144,168), X(153,177),
+  X(154,178), X(155,179), X(156,180), X(157,181), X(158,182), X(159,183),
+  X(160,184), X(169,193), X(170,194), X(171,195), X(172,196), X(173,197),
+  X(174,198), X(175,199), X(176,200), X(185,209), X(186,210), X(187,211),
+  X(188,212), X(189,213), X(190,214), X(191,215), X(192,216), X(201,225),
+  X(202,226), X(203,227), X(204,228), X(205,229), X(206,230), X(207,231),
+  X(208,232), X(217,241), X(218,242), X(219,243), X(220,244), X(221,245),
+  X(222,246), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22),
+  X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38),
+  X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54),
+  X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70),
+  X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86),
+  X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100), X(93,101),
+  X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(139,147), X(140,148), X(141,149),
+  X(142,150), X(143,151), X(144,152), X(153,161), X(154,162), X(155,163),
+  X(156,164), X(157,165), X(158,166), X(159,167), X(160,168), X(169,177),
+  X(170,178), X(171,179), X(172,180), X(173,181), X(174,182), X(175,183),
+  X(176,184), X(185,193), X(186,194), X(187,195), X(188,196), X(189,197),
+  X(190,198), X(191,199), X(192,200), X(201,209), X(202,210), X(203,211),
+  X(204,212), X(205,213), X(206,214), X(207,215), X(208,216), X(217,225),
+  X(218,226), X(219,227), X(220,228), X(221,229), X(222,230), X(223,231),
+  X(224,232), X(233,241), X(234,242), X(235,243), X(236,244), X(237,245),
+  X(238,246), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(185,189), X(186,190), X(187,191), X(188,192),
+  X(193,197), X(194,198), X(195,199), X(196,200), X(201,205), X(202,206),
+  X(203,207), X(204,208), X(209,213), X(210,214), X(211,215), X(212,216),
+  X(217,221), X(218,222), X(219,223), X(220,224), X(225,229), X(226,230),
+  X(227,231), X(228,232), X(233,237), X(234,238), X(235,239), X(236,240),
+  X(241,245), X(242,246), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137),
+  X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148),
+  X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163),
+  X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(53,177), X(54,178),
+  X(55,179), X(56,180), X(61,185), X(62,186), X(63,187), X(64,188), X(69,193),
+  X(70,194), X(71,195), X(72,196), X(77,201), X(78,202), X(79,203), X(80,204),
+  X(85,209), X(86,210), X(87,211), X(88,212), X(93,217), X(94,218), X(95,219),
+  X(96,220), X(101,225), X(102,226), X(103,227), X(104,228), X(109,233),
+  X(110,234), X(111,235), X(112,236), X(117,241), X(118,242), X(119,243),
+  X(120,244), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147),
+  X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162),
+  X(103,163), X(104,164), X(109,169), X(110,170), X(111,171), X(112,172),
+  X(117,177), X(118,178), X(119,179), X(120,180), X(125,185), X(126,186),
+  X(127,187), X(128,188), X(133,193), X(134,194), X(135,195), X(136,196),
+  X(141,201), X(142,202), X(143,203), X(144,204), X(149,209), X(150,210),
+  X(151,211), X(152,212), X(157,217), X(158,218), X(159,219), X(160,220),
+  X(165,225), X(166,226), X(167,227), X(168,228), X(173,233), X(174,234),
+  X(175,235), X(176,236), X(181,241), X(182,242), X(183,243), X(184,244),
+  X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44),
+  X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60),
+  X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76),
+  X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92),
+  X(69,97), X(70,98), X(71,99), X(72,100), X(77,105), X(78,106), X(79,107),
+  X(80,108), X(85,113), X(86,114), X(87,115), X(88,116), X(93,121), X(94,122),
+  X(95,123), X(96,124), X(101,129), X(102,130), X(103,131), X(104,132),
+  X(109,137), X(110,138), X(111,139), X(112,140), X(117,145), X(118,146),
+  X(119,147), X(120,148), X(125,153), X(126,154), X(127,155), X(128,156),
+  X(133,161), X(134,162), X(135,163), X(136,164), X(141,169), X(142,170),
+  X(143,171), X(144,172), X(149,177), X(150,178), X(151,179), X(152,180),
+  X(157,185), X(158,186), X(159,187), X(160,188), X(165,193), X(166,194),
+  X(167,195), X(168,196), X(173,201), X(174,202), X(175,203), X(176,204),
+  X(181,209), X(182,210), X(183,211), X(184,212), X(189,217), X(190,218),
+  X(191,219), X(192,220), X(197,225), X(198,226), X(199,227), X(200,228),
+  X(205,233), X(206,234), X(207,235), X(208,236), X(213,241), X(214,242),
+  X(215,243), X(216,244), X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26),
+  X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42),
+  X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58),
+  X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74),
+  X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90),
+  X(79,91), X(80,92), X(85,97), X(86,98), X(87,99), X(88,100), X(93,105),
+  X(94,106), X(95,107), X(96,108), X(101,113), X(102,114), X(103,115),
+  X(104,116), X(109,121), X(110,122), X(111,123), X(112,124), X(117,129),
+  X(118,130), X(119,131), X(120,132), X(125,137), X(126,138), X(127,139),
+  X(128,140), X(133,145), X(134,146), X(135,147), X(136,148), X(141,153),
+  X(142,154), X(143,155), X(144,156), X(149,161), X(150,162), X(151,163),
+  X(152,164), X(157,169), X(158,170), X(159,171), X(160,172), X(165,177),
+  X(166,178), X(167,179), X(168,180), X(173,185), X(174,186), X(175,187),
+  X(176,188), X(181,193), X(182,194), X(183,195), X(184,196), X(189,201),
+  X(190,202), X(191,203), X(192,204), X(197,209), X(198,210), X(199,211),
+  X(200,212), X(205,217), X(206,218), X(207,219), X(208,220), X(213,225),
+  X(214,226), X(215,227), X(216,228), X(221,233), X(222,234), X(223,235),
+  X(224,236), X(229,241), X(230,242), X(231,243), X(232,244), X(5,9), X(6,10),
+  X(7,11), X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26),
+  X(23,27), X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42),
+  X(39,43), X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58),
+  X(55,59), X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74),
+  X(71,75), X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90),
+  X(87,91), X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105),
+  X(102,106), X(103,107), X(104,108), X(109,113), X(110,114), X(111,115),
+  X(112,116), X(117,121), X(118,122), X(119,123), X(120,124), X(125,129),
+  X(126,130), X(127,131), X(128,132), X(133,137), X(134,138), X(135,139),
+  X(136,140), X(141,145), X(142,146), X(143,147), X(144,148), X(149,153),
+  X(150,154), X(151,155), X(152,156), X(157,161), X(158,162), X(159,163),
+  X(160,164), X(165,169), X(166,170), X(167,171), X(168,172), X(173,177),
+  X(174,178), X(175,179), X(176,180), X(181,185), X(182,186), X(183,187),
+  X(184,188), X(189,193), X(190,194), X(191,195), X(192,196), X(197,201),
+  X(198,202), X(199,203), X(200,204), X(205,209), X(206,210), X(207,211),
+  X(208,212), X(213,217), X(214,218), X(215,219), X(216,220), X(221,225),
+  X(222,226), X(223,227), X(224,228), X(229,233), X(230,234), X(231,235),
+  X(232,236), X(237,241), X(238,242), X(239,243), X(240,244), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(197,199), X(198,200), X(201,203), X(202,204), X(205,207),
+  X(206,208), X(209,211), X(210,212), X(213,215), X(214,216), X(217,219),
+  X(218,220), X(221,223), X(222,224), X(225,227), X(226,228), X(229,231),
+  X(230,232), X(233,235), X(234,236), X(237,239), X(238,240), X(241,243),
+  X(242,244), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194),
+  X(71,197), X(72,198), X(75,201), X(76,202), X(79,205), X(80,206), X(83,209),
+  X(84,210), X(87,213), X(88,214), X(91,217), X(92,218), X(95,221), X(96,222),
+  X(99,225), X(100,226), X(103,229), X(104,230), X(107,233), X(108,234),
+  X(111,237), X(112,238), X(115,241), X(116,242), X(119,245), X(120,246),
+  X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78),
+  X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94),
+  X(35,97), X(36,98), X(39,101), X(40,102), X(43,105), X(44,106), X(47,109),
+  X(48,110), X(51,113), X(52,114), X(55,117), X(56,118), X(59,121), X(60,122),
+  X(63,125), X(64,126), X(67,129), X(68,130), X(71,133), X(72,134), X(75,137),
+  X(76,138), X(79,141), X(80,142), X(83,145), X(84,146), X(87,149), X(88,150),
+  X(91,153), X(92,154), X(95,157), X(96,158), X(99,161), X(100,162), X(103,165),
+  X(104,166), X(107,169), X(108,170), X(111,173), X(112,174), X(115,177),
+  X(116,178), X(119,181), X(120,182), X(123,185), X(124,186), X(127,189),
+  X(128,190), X(131,193), X(132,194), X(135,197), X(136,198), X(139,201),
+  X(140,202), X(143,205), X(144,206), X(147,209), X(148,210), X(151,213),
+  X(152,214), X(155,217), X(156,218), X(159,221), X(160,222), X(163,225),
+  X(164,226), X(167,229), X(168,230), X(171,233), X(172,234), X(175,237),
+  X(176,238), X(179,241), X(180,242), X(183,245), X(184,246), X(3,33), X(4,34),
+  X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50),
+  X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66),
+  X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82),
+  X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(127,157), X(128,158), X(131,161), X(132,162),
+  X(135,165), X(136,166), X(139,169), X(140,170), X(143,173), X(144,174),
+  X(147,177), X(148,178), X(151,181), X(152,182), X(155,185), X(156,186),
+  X(159,189), X(160,190), X(163,193), X(164,194), X(167,197), X(168,198),
+  X(171,201), X(172,202), X(175,205), X(176,206), X(179,209), X(180,210),
+  X(183,213), X(184,214), X(187,217), X(188,218), X(191,221), X(192,222),
+  X(195,225), X(196,226), X(199,229), X(200,230), X(203,233), X(204,234),
+  X(207,237), X(208,238), X(211,241), X(212,242), X(215,245), X(216,246),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(107,121),
+  X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(119,133),
+  X(120,134), X(123,137), X(124,138), X(127,141), X(128,142), X(131,145),
+  X(132,146), X(135,149), X(136,150), X(139,153), X(140,154), X(143,157),
+  X(144,158), X(147,161), X(148,162), X(151,165), X(152,166), X(155,169),
+  X(156,170), X(159,173), X(160,174), X(163,177), X(164,178), X(167,181),
+  X(168,182), X(171,185), X(172,186), X(175,189), X(176,190), X(179,193),
+  X(180,194), X(183,197), X(184,198), X(187,201), X(188,202), X(191,205),
+  X(192,206), X(195,209), X(196,210), X(199,213), X(200,214), X(203,217),
+  X(204,218), X(207,221), X(208,222), X(211,225), X(212,226), X(215,229),
+  X(216,230), X(219,233), X(220,234), X(223,237), X(224,238), X(227,241),
+  X(228,242), X(231,245), X(232,246), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(175,181),
+  X(176,182), X(179,185), X(180,186), X(183,189), X(184,190), X(187,193),
+  X(188,194), X(191,197), X(192,198), X(195,201), X(196,202), X(199,205),
+  X(200,206), X(203,209), X(204,210), X(207,213), X(208,214), X(211,217),
+  X(212,218), X(215,221), X(216,222), X(219,225), X(220,226), X(223,229),
+  X(224,230), X(227,233), X(228,234), X(231,237), X(232,238), X(235,241),
+  X(236,242), X(239,245), X(240,246), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13),
+  X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29),
+  X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45),
+  X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61),
+  X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77),
+  X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93),
+  X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106),
+  X(107,109), X(108,110), X(111,113), X(112,114), X(115,117), X(116,118),
+  X(119,121), X(120,122), X(123,125), X(124,126), X(127,129), X(128,130),
+  X(131,133), X(132,134), X(135,137), X(136,138), X(139,141), X(140,142),
+  X(143,145), X(144,146), X(147,149), X(148,150), X(151,153), X(152,154),
+  X(155,157), X(156,158), X(159,161), X(160,162), X(163,165), X(164,166),
+  X(167,169), X(168,170), X(171,173), X(172,174), X(175,177), X(176,178),
+  X(179,181), X(180,182), X(183,185), X(184,186), X(187,189), X(188,190),
+  X(191,193), X(192,194), X(195,197), X(196,198), X(199,201), X(200,202),
+  X(203,205), X(204,206), X(207,209), X(208,210), X(211,213), X(212,214),
+  X(215,217), X(216,218), X(219,221), X(220,222), X(223,225), X(224,226),
+  X(227,229), X(228,230), X(231,233), X(232,234), X(235,237), X(236,238),
+  X(239,241), X(240,242), X(243,245), X(244,246), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202), X(203,204), X(205,206), X(207,208), X(209,210),
+  X(211,212), X(213,214), X(215,216), X(217,218), X(219,220), X(221,222),
+  X(223,224), X(225,226), X(227,228), X(229,230), X(231,232), X(233,234),
+  X(235,236), X(237,238), X(239,240), X(241,242), X(243,244), X(245,246),
+  X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139), X(14,141),
+  X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153), X(28,155),
+  X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167), X(42,169),
+  X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181), X(56,183),
+  X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195), X(70,197),
+  X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(82,209), X(84,211),
+  X(86,213), X(88,215), X(90,217), X(92,219), X(94,221), X(96,223), X(98,225),
+  X(100,227), X(102,229), X(104,231), X(106,233), X(108,235), X(110,237),
+  X(112,239), X(114,241), X(116,243), X(118,245), X(2,65), X(4,67), X(6,69),
+  X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83), X(22,85),
+  X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99),
+  X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113),
+  X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127),
+  X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141),
+  X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155),
+  X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(124,187), X(126,189), X(128,191),
+  X(130,193), X(132,195), X(134,197), X(136,199), X(138,201), X(140,203),
+  X(142,205), X(144,207), X(146,209), X(148,211), X(150,213), X(152,215),
+  X(154,217), X(156,219), X(158,221), X(160,223), X(162,225), X(164,227),
+  X(166,229), X(168,231), X(170,233), X(172,235), X(174,237), X(176,239),
+  X(178,241), X(180,243), X(182,245), X(2,33), X(4,35), X(6,37), X(8,39),
+  X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53), X(24,55),
+  X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69), X(40,71),
+  X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85), X(56,87),
+  X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99), X(70,101),
+  X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113), X(84,115),
+  X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127), X(98,129),
+  X(100,131), X(102,133), X(104,135), X(106,137), X(108,139), X(110,141),
+  X(112,143), X(114,145), X(116,147), X(118,149), X(120,151), X(122,153),
+  X(124,155), X(126,157), X(128,159), X(130,161), X(132,163), X(134,165),
+  X(136,167), X(138,169), X(140,171), X(142,173), X(144,175), X(146,177),
+  X(148,179), X(150,181), X(152,183), X(154,185), X(156,187), X(158,189),
+  X(160,191), X(162,193), X(164,195), X(166,197), X(168,199), X(170,201),
+  X(172,203), X(174,205), X(176,207), X(178,209), X(180,211), X(182,213),
+  X(184,215), X(186,217), X(188,219), X(190,221), X(192,223), X(194,225),
+  X(196,227), X(198,229), X(200,231), X(202,233), X(204,235), X(206,237),
+  X(208,239), X(210,241), X(212,243), X(214,245), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(170,185),
+  X(172,187), X(174,189), X(176,191), X(178,193), X(180,195), X(182,197),
+  X(184,199), X(186,201), X(188,203), X(190,205), X(192,207), X(194,209),
+  X(196,211), X(198,213), X(200,215), X(202,217), X(204,219), X(206,221),
+  X(208,223), X(210,225), X(212,227), X(214,229), X(216,231), X(218,233),
+  X(220,235), X(222,237), X(224,239), X(226,241), X(228,243), X(230,245), X(2,9),
+  X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21), X(16,23), X(18,25),
+  X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37), X(32,39), X(34,41),
+  X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53), X(48,55), X(50,57),
+  X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69), X(64,71), X(66,73),
+  X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85), X(80,87), X(82,89),
+  X(84,91), X(86,93), X(88,95), X(90,97), X(92,99), X(94,101), X(96,103),
+  X(98,105), X(100,107), X(102,109), X(104,111), X(106,113), X(108,115),
+  X(110,117), X(112,119), X(114,121), X(116,123), X(118,125), X(120,127),
+  X(122,129), X(124,131), X(126,133), X(128,135), X(130,137), X(132,139),
+  X(134,141), X(136,143), X(138,145), X(140,147), X(142,149), X(144,151),
+  X(146,153), X(148,155), X(150,157), X(152,159), X(154,161), X(156,163),
+  X(158,165), X(160,167), X(162,169), X(164,171), X(166,173), X(168,175),
+  X(170,177), X(172,179), X(174,181), X(176,183), X(178,185), X(180,187),
+  X(182,189), X(184,191), X(186,193), X(188,195), X(190,197), X(192,199),
+  X(194,201), X(196,203), X(198,205), X(200,207), X(202,209), X(204,211),
+  X(206,213), X(208,215), X(210,217), X(212,219), X(214,221), X(216,223),
+  X(218,225), X(220,227), X(222,229), X(224,231), X(226,233), X(228,235),
+  X(230,237), X(232,239), X(234,241), X(236,243), X(238,245), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(130,133), X(132,135), X(134,137),
+  X(136,139), X(138,141), X(140,143), X(142,145), X(144,147), X(146,149),
+  X(148,151), X(150,153), X(152,155), X(154,157), X(156,159), X(158,161),
+  X(160,163), X(162,165), X(164,167), X(166,169), X(168,171), X(170,173),
+  X(172,175), X(174,177), X(176,179), X(178,181), X(180,183), X(182,185),
+  X(184,187), X(186,189), X(188,191), X(190,193), X(192,195), X(194,197),
+  X(196,199), X(198,201), X(200,203), X(202,205), X(204,207), X(206,209),
+  X(208,211), X(210,213), X(212,215), X(214,217), X(216,219), X(218,221),
+  X(220,223), X(222,225), X(224,227), X(226,229), X(228,231), X(230,233),
+  X(232,235), X(234,237), X(236,239), X(238,241), X(240,243), X(242,245), X(2,3),
+  X(4,5), X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19),
+  X(20,21), X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35),
+  X(36,37), X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51),
+  X(52,53), X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67),
+  X(68,69), X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83),
+  X(84,85), X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223), X(224,225), X(226,227), X(228,229), X(230,231),
+  X(232,233), X(234,235), X(236,237), X(238,239), X(240,241), X(242,243),
+  X(244,245)
+};
+S(248) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(97,225), X(98,226),
+  X(99,227), X(100,228), X(101,229), X(102,230), X(103,231), X(104,232),
+  X(105,233), X(106,234), X(107,235), X(108,236), X(109,237), X(110,238),
+  X(111,239), X(112,240), X(113,241), X(114,242), X(115,243), X(116,244),
+  X(117,245), X(118,246), X(119,247), X(120,248), X(1,65), X(2,66), X(3,67),
+  X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75),
+  X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83),
+  X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91),
+  X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99),
+  X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106),
+  X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113),
+  X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120),
+  X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127),
+  X(64,128), X(129,193), X(130,194), X(131,195), X(132,196), X(133,197),
+  X(134,198), X(135,199), X(136,200), X(137,201), X(138,202), X(139,203),
+  X(140,204), X(141,205), X(142,206), X(143,207), X(144,208), X(145,209),
+  X(146,210), X(147,211), X(148,212), X(149,213), X(150,214), X(151,215),
+  X(152,216), X(153,217), X(154,218), X(155,219), X(156,220), X(157,221),
+  X(158,222), X(159,223), X(160,224), X(161,225), X(162,226), X(163,227),
+  X(164,228), X(165,229), X(166,230), X(167,231), X(168,232), X(169,233),
+  X(170,234), X(171,235), X(172,236), X(173,237), X(174,238), X(175,239),
+  X(176,240), X(177,241), X(178,242), X(179,243), X(180,244), X(181,245),
+  X(182,246), X(183,247), X(184,248), X(65,129), X(66,130), X(67,131), X(68,132),
+  X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139),
+  X(76,140), X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146),
+  X(83,147), X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153),
+  X(90,154), X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160),
+  X(97,161), X(98,162), X(99,163), X(100,164), X(101,165), X(102,166),
+  X(103,167), X(104,168), X(105,169), X(106,170), X(107,171), X(108,172),
+  X(109,173), X(110,174), X(111,175), X(112,176), X(113,177), X(114,178),
+  X(115,179), X(116,180), X(117,181), X(118,182), X(119,183), X(120,184),
+  X(121,185), X(122,186), X(123,187), X(124,188), X(125,189), X(126,190),
+  X(127,191), X(128,192), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101),
+  X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108),
+  X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115),
+  X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122),
+  X(91,123), X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161),
+  X(130,162), X(131,163), X(132,164), X(133,165), X(134,166), X(135,167),
+  X(136,168), X(137,169), X(138,170), X(139,171), X(140,172), X(141,173),
+  X(142,174), X(143,175), X(144,176), X(145,177), X(146,178), X(147,179),
+  X(148,180), X(149,181), X(150,182), X(151,183), X(152,184), X(153,185),
+  X(154,186), X(155,187), X(156,188), X(157,189), X(158,190), X(159,191),
+  X(160,192), X(193,225), X(194,226), X(195,227), X(196,228), X(197,229),
+  X(198,230), X(199,231), X(200,232), X(201,233), X(202,234), X(203,235),
+  X(204,236), X(205,237), X(206,238), X(207,239), X(208,240), X(209,241),
+  X(210,242), X(211,243), X(212,244), X(213,245), X(214,246), X(215,247),
+  X(216,248), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(119,215), X(120,216), X(121,217), X(122,218),
+  X(123,219), X(124,220), X(125,221), X(126,222), X(127,223), X(128,224),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(165,197), X(166,198), X(167,199), X(168,200), X(169,201), X(170,202),
+  X(171,203), X(172,204), X(173,205), X(174,206), X(175,207), X(176,208),
+  X(177,209), X(178,210), X(179,211), X(180,212), X(181,213), X(182,214),
+  X(183,215), X(184,216), X(185,217), X(186,218), X(187,219), X(188,220),
+  X(189,221), X(190,222), X(191,223), X(192,224), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(201,217), X(202,218), X(203,219), X(204,220), X(205,221), X(206,222),
+  X(207,223), X(208,224), X(225,241), X(226,242), X(227,243), X(228,244),
+  X(229,245), X(230,246), X(231,247), X(232,248), X(17,129), X(18,130),
+  X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136), X(25,137),
+  X(26,138), X(27,139), X(28,140), X(29,141), X(30,142), X(31,143), X(32,144),
+  X(49,161), X(50,162), X(51,163), X(52,164), X(53,165), X(54,166), X(55,167),
+  X(56,168), X(57,169), X(58,170), X(59,171), X(60,172), X(61,173), X(62,174),
+  X(63,175), X(64,176), X(81,193), X(82,194), X(83,195), X(84,196), X(85,197),
+  X(86,198), X(87,199), X(88,200), X(89,201), X(90,202), X(91,203), X(92,204),
+  X(93,205), X(94,206), X(95,207), X(96,208), X(113,225), X(114,226), X(115,227),
+  X(116,228), X(117,229), X(118,230), X(119,231), X(120,232), X(121,233),
+  X(122,234), X(123,235), X(124,236), X(125,237), X(126,238), X(127,239),
+  X(128,240), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100), X(53,101),
+  X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107), X(60,108),
+  X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130), X(83,131),
+  X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137), X(90,138),
+  X(91,139), X(92,140), X(93,141), X(94,142), X(95,143), X(96,144), X(113,161),
+  X(114,162), X(115,163), X(116,164), X(117,165), X(118,166), X(119,167),
+  X(120,168), X(121,169), X(122,170), X(123,171), X(124,172), X(125,173),
+  X(126,174), X(127,175), X(128,176), X(145,193), X(146,194), X(147,195),
+  X(148,196), X(149,197), X(150,198), X(151,199), X(152,200), X(153,201),
+  X(154,202), X(155,203), X(156,204), X(157,205), X(158,206), X(159,207),
+  X(160,208), X(177,225), X(178,226), X(179,227), X(180,228), X(181,229),
+  X(182,230), X(183,231), X(184,232), X(185,233), X(186,234), X(187,235),
+  X(188,236), X(189,237), X(190,238), X(191,239), X(192,240), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(117,133), X(118,134),
+  X(119,135), X(120,136), X(121,137), X(122,138), X(123,139), X(124,140),
+  X(125,141), X(126,142), X(127,143), X(128,144), X(145,161), X(146,162),
+  X(147,163), X(148,164), X(149,165), X(150,166), X(151,167), X(152,168),
+  X(153,169), X(154,170), X(155,171), X(156,172), X(157,173), X(158,174),
+  X(159,175), X(160,176), X(177,193), X(178,194), X(179,195), X(180,196),
+  X(181,197), X(182,198), X(183,199), X(184,200), X(185,201), X(186,202),
+  X(187,203), X(188,204), X(189,205), X(190,206), X(191,207), X(192,208),
+  X(209,225), X(210,226), X(211,227), X(212,228), X(213,229), X(214,230),
+  X(215,231), X(216,232), X(217,233), X(218,234), X(219,235), X(220,236),
+  X(221,237), X(222,238), X(223,239), X(224,240), X(1,9), X(2,10), X(3,11),
+  X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27),
+  X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43),
+  X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59),
+  X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75),
+  X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91),
+  X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105), X(98,106),
+  X(99,107), X(100,108), X(101,109), X(102,110), X(103,111), X(104,112),
+  X(113,121), X(114,122), X(115,123), X(116,124), X(117,125), X(118,126),
+  X(119,127), X(120,128), X(129,137), X(130,138), X(131,139), X(132,140),
+  X(133,141), X(134,142), X(135,143), X(136,144), X(145,153), X(146,154),
+  X(147,155), X(148,156), X(149,157), X(150,158), X(151,159), X(152,160),
+  X(161,169), X(162,170), X(163,171), X(164,172), X(165,173), X(166,174),
+  X(167,175), X(168,176), X(177,185), X(178,186), X(179,187), X(180,188),
+  X(181,189), X(182,190), X(183,191), X(184,192), X(193,201), X(194,202),
+  X(195,203), X(196,204), X(197,205), X(198,206), X(199,207), X(200,208),
+  X(209,217), X(210,218), X(211,219), X(212,220), X(213,221), X(214,222),
+  X(215,223), X(216,224), X(225,233), X(226,234), X(227,235), X(228,236),
+  X(229,237), X(230,238), X(231,239), X(232,240), X(9,129), X(10,130), X(11,131),
+  X(12,132), X(13,133), X(14,134), X(15,135), X(16,136), X(25,145), X(26,146),
+  X(27,147), X(28,148), X(29,149), X(30,150), X(31,151), X(32,152), X(41,161),
+  X(42,162), X(43,163), X(44,164), X(45,165), X(46,166), X(47,167), X(48,168),
+  X(57,177), X(58,178), X(59,179), X(60,180), X(61,181), X(62,182), X(63,183),
+  X(64,184), X(73,193), X(74,194), X(75,195), X(76,196), X(77,197), X(78,198),
+  X(79,199), X(80,200), X(89,209), X(90,210), X(91,211), X(92,212), X(93,213),
+  X(94,214), X(95,215), X(96,216), X(105,225), X(106,226), X(107,227),
+  X(108,228), X(109,229), X(110,230), X(111,231), X(112,232), X(121,241),
+  X(122,242), X(123,243), X(124,244), X(125,245), X(126,246), X(127,247),
+  X(128,248), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70),
+  X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86),
+  X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100), X(45,101),
+  X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115), X(60,116),
+  X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130), X(75,131),
+  X(76,132), X(77,133), X(78,134), X(79,135), X(80,136), X(89,145), X(90,146),
+  X(91,147), X(92,148), X(93,149), X(94,150), X(95,151), X(96,152), X(105,161),
+  X(106,162), X(107,163), X(108,164), X(109,165), X(110,166), X(111,167),
+  X(112,168), X(121,177), X(122,178), X(123,179), X(124,180), X(125,181),
+  X(126,182), X(127,183), X(128,184), X(137,193), X(138,194), X(139,195),
+  X(140,196), X(141,197), X(142,198), X(143,199), X(144,200), X(153,209),
+  X(154,210), X(155,211), X(156,212), X(157,213), X(158,214), X(159,215),
+  X(160,216), X(169,225), X(170,226), X(171,227), X(172,228), X(173,229),
+  X(174,230), X(175,231), X(176,232), X(185,241), X(186,242), X(187,243),
+  X(188,244), X(189,245), X(190,246), X(191,247), X(192,248), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(105,129), X(106,130), X(107,131), X(108,132), X(109,133), X(110,134),
+  X(111,135), X(112,136), X(121,145), X(122,146), X(123,147), X(124,148),
+  X(125,149), X(126,150), X(127,151), X(128,152), X(137,161), X(138,162),
+  X(139,163), X(140,164), X(141,165), X(142,166), X(143,167), X(144,168),
+  X(153,177), X(154,178), X(155,179), X(156,180), X(157,181), X(158,182),
+  X(159,183), X(160,184), X(169,193), X(170,194), X(171,195), X(172,196),
+  X(173,197), X(174,198), X(175,199), X(176,200), X(185,209), X(186,210),
+  X(187,211), X(188,212), X(189,213), X(190,214), X(191,215), X(192,216),
+  X(201,225), X(202,226), X(203,227), X(204,228), X(205,229), X(206,230),
+  X(207,231), X(208,232), X(217,241), X(218,242), X(219,243), X(220,244),
+  X(221,245), X(222,246), X(223,247), X(224,248), X(9,17), X(10,18), X(11,19),
+  X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35),
+  X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51),
+  X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67),
+  X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83),
+  X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(125,133), X(126,134),
+  X(127,135), X(128,136), X(137,145), X(138,146), X(139,147), X(140,148),
+  X(141,149), X(142,150), X(143,151), X(144,152), X(153,161), X(154,162),
+  X(155,163), X(156,164), X(157,165), X(158,166), X(159,167), X(160,168),
+  X(169,177), X(170,178), X(171,179), X(172,180), X(173,181), X(174,182),
+  X(175,183), X(176,184), X(185,193), X(186,194), X(187,195), X(188,196),
+  X(189,197), X(190,198), X(191,199), X(192,200), X(201,209), X(202,210),
+  X(203,211), X(204,212), X(205,213), X(206,214), X(207,215), X(208,216),
+  X(217,225), X(218,226), X(219,227), X(220,228), X(221,229), X(222,230),
+  X(223,231), X(224,232), X(233,241), X(234,242), X(235,243), X(236,244),
+  X(237,245), X(238,246), X(239,247), X(240,248), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88),
+  X(89,93), X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103),
+  X(100,104), X(105,109), X(106,110), X(107,111), X(108,112), X(113,117),
+  X(114,118), X(115,119), X(116,120), X(121,125), X(122,126), X(123,127),
+  X(124,128), X(129,133), X(130,134), X(131,135), X(132,136), X(137,141),
+  X(138,142), X(139,143), X(140,144), X(145,149), X(146,150), X(147,151),
+  X(148,152), X(153,157), X(154,158), X(155,159), X(156,160), X(161,165),
+  X(162,166), X(163,167), X(164,168), X(169,173), X(170,174), X(171,175),
+  X(172,176), X(177,181), X(178,182), X(179,183), X(180,184), X(185,189),
+  X(186,190), X(187,191), X(188,192), X(193,197), X(194,198), X(195,199),
+  X(196,200), X(201,205), X(202,206), X(203,207), X(204,208), X(209,213),
+  X(210,214), X(211,215), X(212,216), X(217,221), X(218,222), X(219,223),
+  X(220,224), X(225,229), X(226,230), X(227,231), X(228,232), X(233,237),
+  X(234,238), X(235,239), X(236,240), X(241,245), X(242,246), X(243,247),
+  X(244,248), X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138),
+  X(15,139), X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153),
+  X(30,154), X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164),
+  X(45,169), X(46,170), X(47,171), X(48,172), X(53,177), X(54,178), X(55,179),
+  X(56,180), X(61,185), X(62,186), X(63,187), X(64,188), X(69,193), X(70,194),
+  X(71,195), X(72,196), X(77,201), X(78,202), X(79,203), X(80,204), X(85,209),
+  X(86,210), X(87,211), X(88,212), X(93,217), X(94,218), X(95,219), X(96,220),
+  X(101,225), X(102,226), X(103,227), X(104,228), X(109,233), X(110,234),
+  X(111,235), X(112,236), X(117,241), X(118,242), X(119,243), X(120,244),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92),
+  X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107),
+  X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122),
+  X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132), X(77,137),
+  X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147), X(88,148),
+  X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162), X(103,163),
+  X(104,164), X(109,169), X(110,170), X(111,171), X(112,172), X(117,177),
+  X(118,178), X(119,179), X(120,180), X(125,185), X(126,186), X(127,187),
+  X(128,188), X(133,193), X(134,194), X(135,195), X(136,196), X(141,201),
+  X(142,202), X(143,203), X(144,204), X(149,209), X(150,210), X(151,211),
+  X(152,212), X(157,217), X(158,218), X(159,219), X(160,220), X(165,225),
+  X(166,226), X(167,227), X(168,228), X(173,233), X(174,234), X(175,235),
+  X(176,236), X(181,241), X(182,242), X(183,243), X(184,244), X(5,33), X(6,34),
+  X(7,35), X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50),
+  X(23,51), X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66),
+  X(39,67), X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82),
+  X(55,83), X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98),
+  X(71,99), X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113),
+  X(86,114), X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124),
+  X(101,129), X(102,130), X(103,131), X(104,132), X(109,137), X(110,138),
+  X(111,139), X(112,140), X(117,145), X(118,146), X(119,147), X(120,148),
+  X(125,153), X(126,154), X(127,155), X(128,156), X(133,161), X(134,162),
+  X(135,163), X(136,164), X(141,169), X(142,170), X(143,171), X(144,172),
+  X(149,177), X(150,178), X(151,179), X(152,180), X(157,185), X(158,186),
+  X(159,187), X(160,188), X(165,193), X(166,194), X(167,195), X(168,196),
+  X(173,201), X(174,202), X(175,203), X(176,204), X(181,209), X(182,210),
+  X(183,211), X(184,212), X(189,217), X(190,218), X(191,219), X(192,220),
+  X(197,225), X(198,226), X(199,227), X(200,228), X(205,233), X(206,234),
+  X(207,235), X(208,236), X(213,241), X(214,242), X(215,243), X(216,244),
+  X(5,17), X(6,18), X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28),
+  X(21,33), X(22,34), X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44),
+  X(37,49), X(38,50), X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60),
+  X(53,65), X(54,66), X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76),
+  X(69,81), X(70,82), X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92),
+  X(85,97), X(86,98), X(87,99), X(88,100), X(93,105), X(94,106), X(95,107),
+  X(96,108), X(101,113), X(102,114), X(103,115), X(104,116), X(109,121),
+  X(110,122), X(111,123), X(112,124), X(117,129), X(118,130), X(119,131),
+  X(120,132), X(125,137), X(126,138), X(127,139), X(128,140), X(133,145),
+  X(134,146), X(135,147), X(136,148), X(141,153), X(142,154), X(143,155),
+  X(144,156), X(149,161), X(150,162), X(151,163), X(152,164), X(157,169),
+  X(158,170), X(159,171), X(160,172), X(165,177), X(166,178), X(167,179),
+  X(168,180), X(173,185), X(174,186), X(175,187), X(176,188), X(181,193),
+  X(182,194), X(183,195), X(184,196), X(189,201), X(190,202), X(191,203),
+  X(192,204), X(197,209), X(198,210), X(199,211), X(200,212), X(205,217),
+  X(206,218), X(207,219), X(208,220), X(213,225), X(214,226), X(215,227),
+  X(216,228), X(221,233), X(222,234), X(223,235), X(224,236), X(229,241),
+  X(230,242), X(231,243), X(232,244), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(149,153), X(150,154), X(151,155),
+  X(152,156), X(157,161), X(158,162), X(159,163), X(160,164), X(165,169),
+  X(166,170), X(167,171), X(168,172), X(173,177), X(174,178), X(175,179),
+  X(176,180), X(181,185), X(182,186), X(183,187), X(184,188), X(189,193),
+  X(190,194), X(191,195), X(192,196), X(197,201), X(198,202), X(199,203),
+  X(200,204), X(205,209), X(206,210), X(207,211), X(208,212), X(213,217),
+  X(214,218), X(215,219), X(216,220), X(221,225), X(222,226), X(223,227),
+  X(224,228), X(229,233), X(230,234), X(231,235), X(232,236), X(237,241),
+  X(238,242), X(239,243), X(240,244), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11),
+  X(10,12), X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27),
+  X(26,28), X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43),
+  X(42,44), X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59),
+  X(58,60), X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75),
+  X(74,76), X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91),
+  X(90,92), X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104),
+  X(105,107), X(106,108), X(109,111), X(110,112), X(113,115), X(114,116),
+  X(117,119), X(118,120), X(121,123), X(122,124), X(125,127), X(126,128),
+  X(129,131), X(130,132), X(133,135), X(134,136), X(137,139), X(138,140),
+  X(141,143), X(142,144), X(145,147), X(146,148), X(149,151), X(150,152),
+  X(153,155), X(154,156), X(157,159), X(158,160), X(161,163), X(162,164),
+  X(165,167), X(166,168), X(169,171), X(170,172), X(173,175), X(174,176),
+  X(177,179), X(178,180), X(181,183), X(182,184), X(185,187), X(186,188),
+  X(189,191), X(190,192), X(193,195), X(194,196), X(197,199), X(198,200),
+  X(201,203), X(202,204), X(205,207), X(206,208), X(209,211), X(210,212),
+  X(213,215), X(214,216), X(217,219), X(218,220), X(221,223), X(222,224),
+  X(225,227), X(226,228), X(229,231), X(230,232), X(233,235), X(234,236),
+  X(237,239), X(238,240), X(241,243), X(242,244), X(245,247), X(246,248),
+  X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138), X(15,141),
+  X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153), X(28,154),
+  X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166), X(43,169),
+  X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181), X(56,182),
+  X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194), X(71,197),
+  X(72,198), X(75,201), X(76,202), X(79,205), X(80,206), X(83,209), X(84,210),
+  X(87,213), X(88,214), X(91,217), X(92,218), X(95,221), X(96,222), X(99,225),
+  X(100,226), X(103,229), X(104,230), X(107,233), X(108,234), X(111,237),
+  X(112,238), X(115,241), X(116,242), X(119,245), X(120,246), X(3,65), X(4,66),
+  X(7,69), X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82),
+  X(23,85), X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154),
+  X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(127,189), X(128,190),
+  X(131,193), X(132,194), X(135,197), X(136,198), X(139,201), X(140,202),
+  X(143,205), X(144,206), X(147,209), X(148,210), X(151,213), X(152,214),
+  X(155,217), X(156,218), X(159,221), X(160,222), X(163,225), X(164,226),
+  X(167,229), X(168,230), X(171,233), X(172,234), X(175,237), X(176,238),
+  X(179,241), X(180,242), X(183,245), X(184,246), X(3,33), X(4,34), X(7,37),
+  X(8,38), X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53),
+  X(24,54), X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69),
+  X(40,70), X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85),
+  X(56,86), X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98),
+  X(71,101), X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113),
+  X(84,114), X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126),
+  X(99,129), X(100,130), X(103,133), X(104,134), X(107,137), X(108,138),
+  X(111,141), X(112,142), X(115,145), X(116,146), X(119,149), X(120,150),
+  X(123,153), X(124,154), X(127,157), X(128,158), X(131,161), X(132,162),
+  X(135,165), X(136,166), X(139,169), X(140,170), X(143,173), X(144,174),
+  X(147,177), X(148,178), X(151,181), X(152,182), X(155,185), X(156,186),
+  X(159,189), X(160,190), X(163,193), X(164,194), X(167,197), X(168,198),
+  X(171,201), X(172,202), X(175,205), X(176,206), X(179,209), X(180,210),
+  X(183,213), X(184,214), X(187,217), X(188,218), X(191,221), X(192,222),
+  X(195,225), X(196,226), X(199,229), X(200,230), X(203,233), X(204,234),
+  X(207,237), X(208,238), X(211,241), X(212,242), X(215,245), X(216,246),
+  X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29), X(16,30),
+  X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45), X(32,46),
+  X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61), X(48,62),
+  X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77), X(64,78),
+  X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93), X(80,94),
+  X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106), X(95,109),
+  X(96,110), X(99,113), X(100,114), X(103,117), X(104,118), X(107,121),
+  X(108,122), X(111,125), X(112,126), X(115,129), X(116,130), X(119,133),
+  X(120,134), X(123,137), X(124,138), X(127,141), X(128,142), X(131,145),
+  X(132,146), X(135,149), X(136,150), X(139,153), X(140,154), X(143,157),
+  X(144,158), X(147,161), X(148,162), X(151,165), X(152,166), X(155,169),
+  X(156,170), X(159,173), X(160,174), X(163,177), X(164,178), X(167,181),
+  X(168,182), X(171,185), X(172,186), X(175,189), X(176,190), X(179,193),
+  X(180,194), X(183,197), X(184,198), X(187,201), X(188,202), X(191,205),
+  X(192,206), X(195,209), X(196,210), X(199,213), X(200,214), X(203,217),
+  X(204,218), X(207,221), X(208,222), X(211,225), X(212,226), X(215,229),
+  X(216,230), X(219,233), X(220,234), X(223,237), X(224,238), X(227,241),
+  X(228,242), X(231,245), X(232,246), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(175,181),
+  X(176,182), X(179,185), X(180,186), X(183,189), X(184,190), X(187,193),
+  X(188,194), X(191,197), X(192,198), X(195,201), X(196,202), X(199,205),
+  X(200,206), X(203,209), X(204,210), X(207,213), X(208,214), X(211,217),
+  X(212,218), X(215,221), X(216,222), X(219,225), X(220,226), X(223,229),
+  X(224,230), X(227,233), X(228,234), X(231,237), X(232,238), X(235,241),
+  X(236,242), X(239,245), X(240,246), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13),
+  X(12,14), X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29),
+  X(28,30), X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45),
+  X(44,46), X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61),
+  X(60,62), X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77),
+  X(76,78), X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93),
+  X(92,94), X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106),
+  X(107,109), X(108,110), X(111,113), X(112,114), X(115,117), X(116,118),
+  X(119,121), X(120,122), X(123,125), X(124,126), X(127,129), X(128,130),
+  X(131,133), X(132,134), X(135,137), X(136,138), X(139,141), X(140,142),
+  X(143,145), X(144,146), X(147,149), X(148,150), X(151,153), X(152,154),
+  X(155,157), X(156,158), X(159,161), X(160,162), X(163,165), X(164,166),
+  X(167,169), X(168,170), X(171,173), X(172,174), X(175,177), X(176,178),
+  X(179,181), X(180,182), X(183,185), X(184,186), X(187,189), X(188,190),
+  X(191,193), X(192,194), X(195,197), X(196,198), X(199,201), X(200,202),
+  X(203,205), X(204,206), X(207,209), X(208,210), X(211,213), X(212,214),
+  X(215,217), X(216,218), X(219,221), X(220,222), X(223,225), X(224,226),
+  X(227,229), X(228,230), X(231,233), X(232,234), X(235,237), X(236,238),
+  X(239,241), X(240,242), X(243,245), X(244,246), X(1,2), X(3,4), X(5,6), X(7,8),
+  X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24),
+  X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40),
+  X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56),
+  X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72),
+  X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88),
+  X(89,90), X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102),
+  X(103,104), X(105,106), X(107,108), X(109,110), X(111,112), X(113,114),
+  X(115,116), X(117,118), X(119,120), X(121,122), X(123,124), X(125,126),
+  X(127,128), X(129,130), X(131,132), X(133,134), X(135,136), X(137,138),
+  X(139,140), X(141,142), X(143,144), X(145,146), X(147,148), X(149,150),
+  X(151,152), X(153,154), X(155,156), X(157,158), X(159,160), X(161,162),
+  X(163,164), X(165,166), X(167,168), X(169,170), X(171,172), X(173,174),
+  X(175,176), X(177,178), X(179,180), X(181,182), X(183,184), X(185,186),
+  X(187,188), X(189,190), X(191,192), X(193,194), X(195,196), X(197,198),
+  X(199,200), X(201,202), X(203,204), X(205,206), X(207,208), X(209,210),
+  X(211,212), X(213,214), X(215,216), X(217,218), X(219,220), X(221,222),
+  X(223,224), X(225,226), X(227,228), X(229,230), X(231,232), X(233,234),
+  X(235,236), X(237,238), X(239,240), X(241,242), X(243,244), X(245,246),
+  X(247,248), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181),
+  X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195),
+  X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(82,209),
+  X(84,211), X(86,213), X(88,215), X(90,217), X(92,219), X(94,221), X(96,223),
+  X(98,225), X(100,227), X(102,229), X(104,231), X(106,233), X(108,235),
+  X(110,237), X(112,239), X(114,241), X(116,243), X(118,245), X(120,247),
+  X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79),
+  X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95),
+  X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107), X(46,109),
+  X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121), X(60,123),
+  X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135), X(74,137),
+  X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149), X(88,151),
+  X(90,153), X(92,155), X(94,157), X(96,159), X(98,161), X(100,163), X(102,165),
+  X(104,167), X(106,169), X(108,171), X(110,173), X(112,175), X(114,177),
+  X(116,179), X(118,181), X(120,183), X(122,185), X(124,187), X(126,189),
+  X(128,191), X(130,193), X(132,195), X(134,197), X(136,199), X(138,201),
+  X(140,203), X(142,205), X(144,207), X(146,209), X(148,211), X(150,213),
+  X(152,215), X(154,217), X(156,219), X(158,221), X(160,223), X(162,225),
+  X(164,227), X(166,229), X(168,231), X(170,233), X(172,235), X(174,237),
+  X(176,239), X(178,241), X(180,243), X(182,245), X(184,247), X(2,33), X(4,35),
+  X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51),
+  X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67),
+  X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83),
+  X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99),
+  X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113),
+  X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127),
+  X(98,129), X(100,131), X(102,133), X(104,135), X(106,137), X(108,139),
+  X(110,141), X(112,143), X(114,145), X(116,147), X(118,149), X(120,151),
+  X(122,153), X(124,155), X(126,157), X(128,159), X(130,161), X(132,163),
+  X(134,165), X(136,167), X(138,169), X(140,171), X(142,173), X(144,175),
+  X(146,177), X(148,179), X(150,181), X(152,183), X(154,185), X(156,187),
+  X(158,189), X(160,191), X(162,193), X(164,195), X(166,197), X(168,199),
+  X(170,201), X(172,203), X(174,205), X(176,207), X(178,209), X(180,211),
+  X(182,213), X(184,215), X(186,217), X(188,219), X(190,221), X(192,223),
+  X(194,225), X(196,227), X(198,229), X(200,231), X(202,233), X(204,235),
+  X(206,237), X(208,239), X(210,241), X(212,243), X(214,245), X(216,247),
+  X(2,17), X(4,19), X(6,21), X(8,23), X(10,25), X(12,27), X(14,29), X(16,31),
+  X(18,33), X(20,35), X(22,37), X(24,39), X(26,41), X(28,43), X(30,45), X(32,47),
+  X(34,49), X(36,51), X(38,53), X(40,55), X(42,57), X(44,59), X(46,61), X(48,63),
+  X(50,65), X(52,67), X(54,69), X(56,71), X(58,73), X(60,75), X(62,77), X(64,79),
+  X(66,81), X(68,83), X(70,85), X(72,87), X(74,89), X(76,91), X(78,93), X(80,95),
+  X(82,97), X(84,99), X(86,101), X(88,103), X(90,105), X(92,107), X(94,109),
+  X(96,111), X(98,113), X(100,115), X(102,117), X(104,119), X(106,121),
+  X(108,123), X(110,125), X(112,127), X(114,129), X(116,131), X(118,133),
+  X(120,135), X(122,137), X(124,139), X(126,141), X(128,143), X(130,145),
+  X(132,147), X(134,149), X(136,151), X(138,153), X(140,155), X(142,157),
+  X(144,159), X(146,161), X(148,163), X(150,165), X(152,167), X(154,169),
+  X(156,171), X(158,173), X(160,175), X(162,177), X(164,179), X(166,181),
+  X(168,183), X(170,185), X(172,187), X(174,189), X(176,191), X(178,193),
+  X(180,195), X(182,197), X(184,199), X(186,201), X(188,203), X(190,205),
+  X(192,207), X(194,209), X(196,211), X(198,213), X(200,215), X(202,217),
+  X(204,219), X(206,221), X(208,223), X(210,225), X(212,227), X(214,229),
+  X(216,231), X(218,233), X(220,235), X(222,237), X(224,239), X(226,241),
+  X(228,243), X(230,245), X(232,247), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(108,115), X(110,117), X(112,119), X(114,121),
+  X(116,123), X(118,125), X(120,127), X(122,129), X(124,131), X(126,133),
+  X(128,135), X(130,137), X(132,139), X(134,141), X(136,143), X(138,145),
+  X(140,147), X(142,149), X(144,151), X(146,153), X(148,155), X(150,157),
+  X(152,159), X(154,161), X(156,163), X(158,165), X(160,167), X(162,169),
+  X(164,171), X(166,173), X(168,175), X(170,177), X(172,179), X(174,181),
+  X(176,183), X(178,185), X(180,187), X(182,189), X(184,191), X(186,193),
+  X(188,195), X(190,197), X(192,199), X(194,201), X(196,203), X(198,205),
+  X(200,207), X(202,209), X(204,211), X(206,213), X(208,215), X(210,217),
+  X(212,219), X(214,221), X(216,223), X(218,225), X(220,227), X(222,229),
+  X(224,231), X(226,233), X(228,235), X(230,237), X(232,239), X(234,241),
+  X(236,243), X(238,245), X(240,247), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29),
+  X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45),
+  X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61),
+  X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77),
+  X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93),
+  X(92,95), X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107),
+  X(106,109), X(108,111), X(110,113), X(112,115), X(114,117), X(116,119),
+  X(118,121), X(120,123), X(122,125), X(124,127), X(126,129), X(128,131),
+  X(130,133), X(132,135), X(134,137), X(136,139), X(138,141), X(140,143),
+  X(142,145), X(144,147), X(146,149), X(148,151), X(150,153), X(152,155),
+  X(154,157), X(156,159), X(158,161), X(160,163), X(162,165), X(164,167),
+  X(166,169), X(168,171), X(170,173), X(172,175), X(174,177), X(176,179),
+  X(178,181), X(180,183), X(182,185), X(184,187), X(186,189), X(188,191),
+  X(190,193), X(192,195), X(194,197), X(196,199), X(198,201), X(200,203),
+  X(202,205), X(204,207), X(206,209), X(208,211), X(210,213), X(212,215),
+  X(214,217), X(216,219), X(218,221), X(220,223), X(222,225), X(224,227),
+  X(226,229), X(228,231), X(230,233), X(232,235), X(234,237), X(236,239),
+  X(238,241), X(240,243), X(242,245), X(244,247), X(2,3), X(4,5), X(6,7), X(8,9),
+  X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25),
+  X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41),
+  X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57),
+  X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73),
+  X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89),
+  X(90,91), X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103),
+  X(104,105), X(106,107), X(108,109), X(110,111), X(112,113), X(114,115),
+  X(116,117), X(118,119), X(120,121), X(122,123), X(124,125), X(126,127),
+  X(128,129), X(130,131), X(132,133), X(134,135), X(136,137), X(138,139),
+  X(140,141), X(142,143), X(144,145), X(146,147), X(148,149), X(150,151),
+  X(152,153), X(154,155), X(156,157), X(158,159), X(160,161), X(162,163),
+  X(164,165), X(166,167), X(168,169), X(170,171), X(172,173), X(174,175),
+  X(176,177), X(178,179), X(180,181), X(182,183), X(184,185), X(186,187),
+  X(188,189), X(190,191), X(192,193), X(194,195), X(196,197), X(198,199),
+  X(200,201), X(202,203), X(204,205), X(206,207), X(208,209), X(210,211),
+  X(212,213), X(214,215), X(216,217), X(218,219), X(220,221), X(222,223),
+  X(224,225), X(226,227), X(228,229), X(230,231), X(232,233), X(234,235),
+  X(236,237), X(238,239), X(240,241), X(242,243), X(244,245), X(246,247)
+};
+S(250) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(97,225), X(98,226),
+  X(99,227), X(100,228), X(101,229), X(102,230), X(103,231), X(104,232),
+  X(105,233), X(106,234), X(107,235), X(108,236), X(109,237), X(110,238),
+  X(111,239), X(112,240), X(113,241), X(114,242), X(115,243), X(116,244),
+  X(117,245), X(118,246), X(119,247), X(120,248), X(121,249), X(122,250),
+  X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70), X(7,71), X(8,72),
+  X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78), X(15,79), X(16,80),
+  X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86), X(23,87), X(24,88),
+  X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94), X(31,95), X(32,96),
+  X(33,97), X(34,98), X(35,99), X(36,100), X(37,101), X(38,102), X(39,103),
+  X(40,104), X(41,105), X(42,106), X(43,107), X(44,108), X(45,109), X(46,110),
+  X(47,111), X(48,112), X(49,113), X(50,114), X(51,115), X(52,116), X(53,117),
+  X(54,118), X(55,119), X(56,120), X(57,121), X(58,122), X(59,123), X(60,124),
+  X(61,125), X(62,126), X(63,127), X(64,128), X(129,193), X(130,194), X(131,195),
+  X(132,196), X(133,197), X(134,198), X(135,199), X(136,200), X(137,201),
+  X(138,202), X(139,203), X(140,204), X(141,205), X(142,206), X(143,207),
+  X(144,208), X(145,209), X(146,210), X(147,211), X(148,212), X(149,213),
+  X(150,214), X(151,215), X(152,216), X(153,217), X(154,218), X(155,219),
+  X(156,220), X(157,221), X(158,222), X(159,223), X(160,224), X(161,225),
+  X(162,226), X(163,227), X(164,228), X(165,229), X(166,230), X(167,231),
+  X(168,232), X(169,233), X(170,234), X(171,235), X(172,236), X(173,237),
+  X(174,238), X(175,239), X(176,240), X(177,241), X(178,242), X(179,243),
+  X(180,244), X(181,245), X(182,246), X(183,247), X(184,248), X(185,249),
+  X(186,250), X(65,129), X(66,130), X(67,131), X(68,132), X(69,133), X(70,134),
+  X(71,135), X(72,136), X(73,137), X(74,138), X(75,139), X(76,140), X(77,141),
+  X(78,142), X(79,143), X(80,144), X(81,145), X(82,146), X(83,147), X(84,148),
+  X(85,149), X(86,150), X(87,151), X(88,152), X(89,153), X(90,154), X(91,155),
+  X(92,156), X(93,157), X(94,158), X(95,159), X(96,160), X(97,161), X(98,162),
+  X(99,163), X(100,164), X(101,165), X(102,166), X(103,167), X(104,168),
+  X(105,169), X(106,170), X(107,171), X(108,172), X(109,173), X(110,174),
+  X(111,175), X(112,176), X(113,177), X(114,178), X(115,179), X(116,180),
+  X(117,181), X(118,182), X(119,183), X(120,184), X(121,185), X(122,186),
+  X(123,187), X(124,188), X(125,189), X(126,190), X(127,191), X(128,192),
+  X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38), X(7,39), X(8,40),
+  X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46), X(15,47), X(16,48),
+  X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54), X(23,55), X(24,56),
+  X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62), X(31,63), X(32,64),
+  X(65,97), X(66,98), X(67,99), X(68,100), X(69,101), X(70,102), X(71,103),
+  X(72,104), X(73,105), X(74,106), X(75,107), X(76,108), X(77,109), X(78,110),
+  X(79,111), X(80,112), X(81,113), X(82,114), X(83,115), X(84,116), X(85,117),
+  X(86,118), X(87,119), X(88,120), X(89,121), X(90,122), X(91,123), X(92,124),
+  X(93,125), X(94,126), X(95,127), X(96,128), X(129,161), X(130,162), X(131,163),
+  X(132,164), X(133,165), X(134,166), X(135,167), X(136,168), X(137,169),
+  X(138,170), X(139,171), X(140,172), X(141,173), X(142,174), X(143,175),
+  X(144,176), X(145,177), X(146,178), X(147,179), X(148,180), X(149,181),
+  X(150,182), X(151,183), X(152,184), X(153,185), X(154,186), X(155,187),
+  X(156,188), X(157,189), X(158,190), X(159,191), X(160,192), X(193,225),
+  X(194,226), X(195,227), X(196,228), X(197,229), X(198,230), X(199,231),
+  X(200,232), X(201,233), X(202,234), X(203,235), X(204,236), X(205,237),
+  X(206,238), X(207,239), X(208,240), X(209,241), X(210,242), X(211,243),
+  X(212,244), X(213,245), X(214,246), X(215,247), X(216,248), X(217,249),
+  X(218,250), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(119,215), X(120,216), X(121,217), X(122,218),
+  X(123,219), X(124,220), X(125,221), X(126,222), X(127,223), X(128,224),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(165,197), X(166,198), X(167,199), X(168,200), X(169,201), X(170,202),
+  X(171,203), X(172,204), X(173,205), X(174,206), X(175,207), X(176,208),
+  X(177,209), X(178,210), X(179,211), X(180,212), X(181,213), X(182,214),
+  X(183,215), X(184,216), X(185,217), X(186,218), X(187,219), X(188,220),
+  X(189,221), X(190,222), X(191,223), X(192,224), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(201,217), X(202,218), X(203,219), X(204,220), X(205,221), X(206,222),
+  X(207,223), X(208,224), X(225,241), X(226,242), X(227,243), X(228,244),
+  X(229,245), X(230,246), X(231,247), X(232,248), X(233,249), X(234,250),
+  X(17,129), X(18,130), X(19,131), X(20,132), X(21,133), X(22,134), X(23,135),
+  X(24,136), X(25,137), X(26,138), X(27,139), X(28,140), X(29,141), X(30,142),
+  X(31,143), X(32,144), X(49,161), X(50,162), X(51,163), X(52,164), X(53,165),
+  X(54,166), X(55,167), X(56,168), X(57,169), X(58,170), X(59,171), X(60,172),
+  X(61,173), X(62,174), X(63,175), X(64,176), X(81,193), X(82,194), X(83,195),
+  X(84,196), X(85,197), X(86,198), X(87,199), X(88,200), X(89,201), X(90,202),
+  X(91,203), X(92,204), X(93,205), X(94,206), X(95,207), X(96,208), X(113,225),
+  X(114,226), X(115,227), X(116,228), X(117,229), X(118,230), X(119,231),
+  X(120,232), X(121,233), X(122,234), X(123,235), X(124,236), X(125,237),
+  X(126,238), X(127,239), X(128,240), X(17,65), X(18,66), X(19,67), X(20,68),
+  X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76),
+  X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98), X(51,99),
+  X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105), X(58,106),
+  X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112), X(81,129),
+  X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135), X(88,136),
+  X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142), X(95,143),
+  X(96,144), X(113,161), X(114,162), X(115,163), X(116,164), X(117,165),
+  X(118,166), X(119,167), X(120,168), X(121,169), X(122,170), X(123,171),
+  X(124,172), X(125,173), X(126,174), X(127,175), X(128,176), X(145,193),
+  X(146,194), X(147,195), X(148,196), X(149,197), X(150,198), X(151,199),
+  X(152,200), X(153,201), X(154,202), X(155,203), X(156,204), X(157,205),
+  X(158,206), X(159,207), X(160,208), X(177,225), X(178,226), X(179,227),
+  X(180,228), X(181,229), X(182,230), X(183,231), X(184,232), X(185,233),
+  X(186,234), X(187,235), X(188,236), X(189,237), X(190,238), X(191,239),
+  X(192,240), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37), X(22,38),
+  X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45), X(30,46),
+  X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69), X(54,70),
+  X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77), X(62,78),
+  X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100), X(85,101),
+  X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107), X(92,108),
+  X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130), X(115,131),
+  X(116,132), X(117,133), X(118,134), X(119,135), X(120,136), X(121,137),
+  X(122,138), X(123,139), X(124,140), X(125,141), X(126,142), X(127,143),
+  X(128,144), X(145,161), X(146,162), X(147,163), X(148,164), X(149,165),
+  X(150,166), X(151,167), X(152,168), X(153,169), X(154,170), X(155,171),
+  X(156,172), X(157,173), X(158,174), X(159,175), X(160,176), X(177,193),
+  X(178,194), X(179,195), X(180,196), X(181,197), X(182,198), X(183,199),
+  X(184,200), X(185,201), X(186,202), X(187,203), X(188,204), X(189,205),
+  X(190,206), X(191,207), X(192,208), X(209,225), X(210,226), X(211,227),
+  X(212,228), X(213,229), X(214,230), X(215,231), X(216,232), X(217,233),
+  X(218,234), X(219,235), X(220,236), X(221,237), X(222,238), X(223,239),
+  X(224,240), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14), X(7,15),
+  X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30), X(23,31),
+  X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46), X(39,47),
+  X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62), X(55,63),
+  X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78), X(71,79),
+  X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94), X(87,95),
+  X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109), X(102,110),
+  X(103,111), X(104,112), X(113,121), X(114,122), X(115,123), X(116,124),
+  X(117,125), X(118,126), X(119,127), X(120,128), X(129,137), X(130,138),
+  X(131,139), X(132,140), X(133,141), X(134,142), X(135,143), X(136,144),
+  X(145,153), X(146,154), X(147,155), X(148,156), X(149,157), X(150,158),
+  X(151,159), X(152,160), X(161,169), X(162,170), X(163,171), X(164,172),
+  X(165,173), X(166,174), X(167,175), X(168,176), X(177,185), X(178,186),
+  X(179,187), X(180,188), X(181,189), X(182,190), X(183,191), X(184,192),
+  X(193,201), X(194,202), X(195,203), X(196,204), X(197,205), X(198,206),
+  X(199,207), X(200,208), X(209,217), X(210,218), X(211,219), X(212,220),
+  X(213,221), X(214,222), X(215,223), X(216,224), X(225,233), X(226,234),
+  X(227,235), X(228,236), X(229,237), X(230,238), X(231,239), X(232,240),
+  X(241,249), X(242,250), X(9,129), X(10,130), X(11,131), X(12,132), X(13,133),
+  X(14,134), X(15,135), X(16,136), X(25,145), X(26,146), X(27,147), X(28,148),
+  X(29,149), X(30,150), X(31,151), X(32,152), X(41,161), X(42,162), X(43,163),
+  X(44,164), X(45,165), X(46,166), X(47,167), X(48,168), X(57,177), X(58,178),
+  X(59,179), X(60,180), X(61,181), X(62,182), X(63,183), X(64,184), X(73,193),
+  X(74,194), X(75,195), X(76,196), X(77,197), X(78,198), X(79,199), X(80,200),
+  X(89,209), X(90,210), X(91,211), X(92,212), X(93,213), X(94,214), X(95,215),
+  X(96,216), X(105,225), X(106,226), X(107,227), X(108,228), X(109,229),
+  X(110,230), X(111,231), X(112,232), X(121,241), X(122,242), X(123,243),
+  X(124,244), X(125,245), X(126,246), X(127,247), X(128,248), X(9,65), X(10,66),
+  X(11,67), X(12,68), X(13,69), X(14,70), X(15,71), X(16,72), X(25,81), X(26,82),
+  X(27,83), X(28,84), X(29,85), X(30,86), X(31,87), X(32,88), X(41,97), X(42,98),
+  X(43,99), X(44,100), X(45,101), X(46,102), X(47,103), X(48,104), X(57,113),
+  X(58,114), X(59,115), X(60,116), X(61,117), X(62,118), X(63,119), X(64,120),
+  X(73,129), X(74,130), X(75,131), X(76,132), X(77,133), X(78,134), X(79,135),
+  X(80,136), X(89,145), X(90,146), X(91,147), X(92,148), X(93,149), X(94,150),
+  X(95,151), X(96,152), X(105,161), X(106,162), X(107,163), X(108,164),
+  X(109,165), X(110,166), X(111,167), X(112,168), X(121,177), X(122,178),
+  X(123,179), X(124,180), X(125,181), X(126,182), X(127,183), X(128,184),
+  X(137,193), X(138,194), X(139,195), X(140,196), X(141,197), X(142,198),
+  X(143,199), X(144,200), X(153,209), X(154,210), X(155,211), X(156,212),
+  X(157,213), X(158,214), X(159,215), X(160,216), X(169,225), X(170,226),
+  X(171,227), X(172,228), X(173,229), X(174,230), X(175,231), X(176,232),
+  X(185,241), X(186,242), X(187,243), X(188,244), X(189,245), X(190,246),
+  X(191,247), X(192,248), X(9,33), X(10,34), X(11,35), X(12,36), X(13,37),
+  X(14,38), X(15,39), X(16,40), X(25,49), X(26,50), X(27,51), X(28,52), X(29,53),
+  X(30,54), X(31,55), X(32,56), X(41,65), X(42,66), X(43,67), X(44,68), X(45,69),
+  X(46,70), X(47,71), X(48,72), X(57,81), X(58,82), X(59,83), X(60,84), X(61,85),
+  X(62,86), X(63,87), X(64,88), X(73,97), X(74,98), X(75,99), X(76,100),
+  X(77,101), X(78,102), X(79,103), X(80,104), X(89,113), X(90,114), X(91,115),
+  X(92,116), X(93,117), X(94,118), X(95,119), X(96,120), X(105,129), X(106,130),
+  X(107,131), X(108,132), X(109,133), X(110,134), X(111,135), X(112,136),
+  X(121,145), X(122,146), X(123,147), X(124,148), X(125,149), X(126,150),
+  X(127,151), X(128,152), X(137,161), X(138,162), X(139,163), X(140,164),
+  X(141,165), X(142,166), X(143,167), X(144,168), X(153,177), X(154,178),
+  X(155,179), X(156,180), X(157,181), X(158,182), X(159,183), X(160,184),
+  X(169,193), X(170,194), X(171,195), X(172,196), X(173,197), X(174,198),
+  X(175,199), X(176,200), X(185,209), X(186,210), X(187,211), X(188,212),
+  X(189,213), X(190,214), X(191,215), X(192,216), X(201,225), X(202,226),
+  X(203,227), X(204,228), X(205,229), X(206,230), X(207,231), X(208,232),
+  X(217,241), X(218,242), X(219,243), X(220,244), X(221,245), X(222,246),
+  X(223,247), X(224,248), X(9,17), X(10,18), X(11,19), X(12,20), X(13,21),
+  X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35), X(28,36), X(29,37),
+  X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51), X(44,52), X(45,53),
+  X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67), X(60,68), X(61,69),
+  X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83), X(76,84), X(77,85),
+  X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99), X(92,100),
+  X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114), X(107,115),
+  X(108,116), X(109,117), X(110,118), X(111,119), X(112,120), X(121,129),
+  X(122,130), X(123,131), X(124,132), X(125,133), X(126,134), X(127,135),
+  X(128,136), X(137,145), X(138,146), X(139,147), X(140,148), X(141,149),
+  X(142,150), X(143,151), X(144,152), X(153,161), X(154,162), X(155,163),
+  X(156,164), X(157,165), X(158,166), X(159,167), X(160,168), X(169,177),
+  X(170,178), X(171,179), X(172,180), X(173,181), X(174,182), X(175,183),
+  X(176,184), X(185,193), X(186,194), X(187,195), X(188,196), X(189,197),
+  X(190,198), X(191,199), X(192,200), X(201,209), X(202,210), X(203,211),
+  X(204,212), X(205,213), X(206,214), X(207,215), X(208,216), X(217,225),
+  X(218,226), X(219,227), X(220,228), X(221,229), X(222,230), X(223,231),
+  X(224,232), X(233,241), X(234,242), X(235,243), X(236,244), X(237,245),
+  X(238,246), X(239,247), X(240,248), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13),
+  X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29),
+  X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45),
+  X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61),
+  X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77),
+  X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93),
+  X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103), X(100,104),
+  X(105,109), X(106,110), X(107,111), X(108,112), X(113,117), X(114,118),
+  X(115,119), X(116,120), X(121,125), X(122,126), X(123,127), X(124,128),
+  X(129,133), X(130,134), X(131,135), X(132,136), X(137,141), X(138,142),
+  X(139,143), X(140,144), X(145,149), X(146,150), X(147,151), X(148,152),
+  X(153,157), X(154,158), X(155,159), X(156,160), X(161,165), X(162,166),
+  X(163,167), X(164,168), X(169,173), X(170,174), X(171,175), X(172,176),
+  X(177,181), X(178,182), X(179,183), X(180,184), X(185,189), X(186,190),
+  X(187,191), X(188,192), X(193,197), X(194,198), X(195,199), X(196,200),
+  X(201,205), X(202,206), X(203,207), X(204,208), X(209,213), X(210,214),
+  X(211,215), X(212,216), X(217,221), X(218,222), X(219,223), X(220,224),
+  X(225,229), X(226,230), X(227,231), X(228,232), X(233,237), X(234,238),
+  X(235,239), X(236,240), X(241,245), X(242,246), X(243,247), X(244,248),
+  X(5,129), X(6,130), X(7,131), X(8,132), X(13,137), X(14,138), X(15,139),
+  X(16,140), X(21,145), X(22,146), X(23,147), X(24,148), X(29,153), X(30,154),
+  X(31,155), X(32,156), X(37,161), X(38,162), X(39,163), X(40,164), X(45,169),
+  X(46,170), X(47,171), X(48,172), X(53,177), X(54,178), X(55,179), X(56,180),
+  X(61,185), X(62,186), X(63,187), X(64,188), X(69,193), X(70,194), X(71,195),
+  X(72,196), X(77,201), X(78,202), X(79,203), X(80,204), X(85,209), X(86,210),
+  X(87,211), X(88,212), X(93,217), X(94,218), X(95,219), X(96,220), X(101,225),
+  X(102,226), X(103,227), X(104,228), X(109,233), X(110,234), X(111,235),
+  X(112,236), X(117,241), X(118,242), X(119,243), X(120,244), X(125,249),
+  X(126,250), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147),
+  X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162),
+  X(103,163), X(104,164), X(109,169), X(110,170), X(111,171), X(112,172),
+  X(117,177), X(118,178), X(119,179), X(120,180), X(125,185), X(126,186),
+  X(127,187), X(128,188), X(133,193), X(134,194), X(135,195), X(136,196),
+  X(141,201), X(142,202), X(143,203), X(144,204), X(149,209), X(150,210),
+  X(151,211), X(152,212), X(157,217), X(158,218), X(159,219), X(160,220),
+  X(165,225), X(166,226), X(167,227), X(168,228), X(173,233), X(174,234),
+  X(175,235), X(176,236), X(181,241), X(182,242), X(183,243), X(184,244),
+  X(189,249), X(190,250), X(5,33), X(6,34), X(7,35), X(8,36), X(13,41), X(14,42),
+  X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52), X(29,57), X(30,58),
+  X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68), X(45,73), X(46,74),
+  X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84), X(61,89), X(62,90),
+  X(63,91), X(64,92), X(69,97), X(70,98), X(71,99), X(72,100), X(77,105),
+  X(78,106), X(79,107), X(80,108), X(85,113), X(86,114), X(87,115), X(88,116),
+  X(93,121), X(94,122), X(95,123), X(96,124), X(101,129), X(102,130), X(103,131),
+  X(104,132), X(109,137), X(110,138), X(111,139), X(112,140), X(117,145),
+  X(118,146), X(119,147), X(120,148), X(125,153), X(126,154), X(127,155),
+  X(128,156), X(133,161), X(134,162), X(135,163), X(136,164), X(141,169),
+  X(142,170), X(143,171), X(144,172), X(149,177), X(150,178), X(151,179),
+  X(152,180), X(157,185), X(158,186), X(159,187), X(160,188), X(165,193),
+  X(166,194), X(167,195), X(168,196), X(173,201), X(174,202), X(175,203),
+  X(176,204), X(181,209), X(182,210), X(183,211), X(184,212), X(189,217),
+  X(190,218), X(191,219), X(192,220), X(197,225), X(198,226), X(199,227),
+  X(200,228), X(205,233), X(206,234), X(207,235), X(208,236), X(213,241),
+  X(214,242), X(215,243), X(216,244), X(221,249), X(222,250), X(5,17), X(6,18),
+  X(7,19), X(8,20), X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34),
+  X(23,35), X(24,36), X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50),
+  X(39,51), X(40,52), X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66),
+  X(55,67), X(56,68), X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82),
+  X(71,83), X(72,84), X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98),
+  X(87,99), X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113),
+  X(102,114), X(103,115), X(104,116), X(109,121), X(110,122), X(111,123),
+  X(112,124), X(117,129), X(118,130), X(119,131), X(120,132), X(125,137),
+  X(126,138), X(127,139), X(128,140), X(133,145), X(134,146), X(135,147),
+  X(136,148), X(141,153), X(142,154), X(143,155), X(144,156), X(149,161),
+  X(150,162), X(151,163), X(152,164), X(157,169), X(158,170), X(159,171),
+  X(160,172), X(165,177), X(166,178), X(167,179), X(168,180), X(173,185),
+  X(174,186), X(175,187), X(176,188), X(181,193), X(182,194), X(183,195),
+  X(184,196), X(189,201), X(190,202), X(191,203), X(192,204), X(197,209),
+  X(198,210), X(199,211), X(200,212), X(205,217), X(206,218), X(207,219),
+  X(208,220), X(213,225), X(214,226), X(215,227), X(216,228), X(221,233),
+  X(222,234), X(223,235), X(224,236), X(229,241), X(230,242), X(231,243),
+  X(232,244), X(237,249), X(238,250), X(5,9), X(6,10), X(7,11), X(8,12),
+  X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27), X(24,28),
+  X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43), X(40,44),
+  X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59), X(56,60),
+  X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75), X(72,76),
+  X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91), X(88,92),
+  X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106), X(103,107),
+  X(104,108), X(109,113), X(110,114), X(111,115), X(112,116), X(117,121),
+  X(118,122), X(119,123), X(120,124), X(125,129), X(126,130), X(127,131),
+  X(128,132), X(133,137), X(134,138), X(135,139), X(136,140), X(141,145),
+  X(142,146), X(143,147), X(144,148), X(149,153), X(150,154), X(151,155),
+  X(152,156), X(157,161), X(158,162), X(159,163), X(160,164), X(165,169),
+  X(166,170), X(167,171), X(168,172), X(173,177), X(174,178), X(175,179),
+  X(176,180), X(181,185), X(182,186), X(183,187), X(184,188), X(189,193),
+  X(190,194), X(191,195), X(192,196), X(197,201), X(198,202), X(199,203),
+  X(200,204), X(205,209), X(206,210), X(207,211), X(208,212), X(213,217),
+  X(214,218), X(215,219), X(216,220), X(221,225), X(222,226), X(223,227),
+  X(224,228), X(229,233), X(230,234), X(231,235), X(232,236), X(237,241),
+  X(238,242), X(239,243), X(240,244), X(245,249), X(246,250), X(1,3), X(2,4),
+  X(5,7), X(6,8), X(9,11), X(10,12), X(13,15), X(14,16), X(17,19), X(18,20),
+  X(21,23), X(22,24), X(25,27), X(26,28), X(29,31), X(30,32), X(33,35), X(34,36),
+  X(37,39), X(38,40), X(41,43), X(42,44), X(45,47), X(46,48), X(49,51), X(50,52),
+  X(53,55), X(54,56), X(57,59), X(58,60), X(61,63), X(62,64), X(65,67), X(66,68),
+  X(69,71), X(70,72), X(73,75), X(74,76), X(77,79), X(78,80), X(81,83), X(82,84),
+  X(85,87), X(86,88), X(89,91), X(90,92), X(93,95), X(94,96), X(97,99),
+  X(98,100), X(101,103), X(102,104), X(105,107), X(106,108), X(109,111),
+  X(110,112), X(113,115), X(114,116), X(117,119), X(118,120), X(121,123),
+  X(122,124), X(125,127), X(126,128), X(129,131), X(130,132), X(133,135),
+  X(134,136), X(137,139), X(138,140), X(141,143), X(142,144), X(145,147),
+  X(146,148), X(149,151), X(150,152), X(153,155), X(154,156), X(157,159),
+  X(158,160), X(161,163), X(162,164), X(165,167), X(166,168), X(169,171),
+  X(170,172), X(173,175), X(174,176), X(177,179), X(178,180), X(181,183),
+  X(182,184), X(185,187), X(186,188), X(189,191), X(190,192), X(193,195),
+  X(194,196), X(197,199), X(198,200), X(201,203), X(202,204), X(205,207),
+  X(206,208), X(209,211), X(210,212), X(213,215), X(214,216), X(217,219),
+  X(218,220), X(221,223), X(222,224), X(225,227), X(226,228), X(229,231),
+  X(230,232), X(233,235), X(234,236), X(237,239), X(238,240), X(241,243),
+  X(242,244), X(245,247), X(246,248), X(3,129), X(4,130), X(7,133), X(8,134),
+  X(11,137), X(12,138), X(15,141), X(16,142), X(19,145), X(20,146), X(23,149),
+  X(24,150), X(27,153), X(28,154), X(31,157), X(32,158), X(35,161), X(36,162),
+  X(39,165), X(40,166), X(43,169), X(44,170), X(47,173), X(48,174), X(51,177),
+  X(52,178), X(55,181), X(56,182), X(59,185), X(60,186), X(63,189), X(64,190),
+  X(67,193), X(68,194), X(71,197), X(72,198), X(75,201), X(76,202), X(79,205),
+  X(80,206), X(83,209), X(84,210), X(87,213), X(88,214), X(91,217), X(92,218),
+  X(95,221), X(96,222), X(99,225), X(100,226), X(103,229), X(104,230),
+  X(107,233), X(108,234), X(111,237), X(112,238), X(115,241), X(116,242),
+  X(119,245), X(120,246), X(123,249), X(124,250), X(3,65), X(4,66), X(7,69),
+  X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85),
+  X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154),
+  X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(127,189), X(128,190),
+  X(131,193), X(132,194), X(135,197), X(136,198), X(139,201), X(140,202),
+  X(143,205), X(144,206), X(147,209), X(148,210), X(151,213), X(152,214),
+  X(155,217), X(156,218), X(159,221), X(160,222), X(163,225), X(164,226),
+  X(167,229), X(168,230), X(171,233), X(172,234), X(175,237), X(176,238),
+  X(179,241), X(180,242), X(183,245), X(184,246), X(187,249), X(188,250),
+  X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42), X(15,45), X(16,46),
+  X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58), X(31,61), X(32,62),
+  X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74), X(47,77), X(48,78),
+  X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90), X(63,93), X(64,94),
+  X(67,97), X(68,98), X(71,101), X(72,102), X(75,105), X(76,106), X(79,109),
+  X(80,110), X(83,113), X(84,114), X(87,117), X(88,118), X(91,121), X(92,122),
+  X(95,125), X(96,126), X(99,129), X(100,130), X(103,133), X(104,134),
+  X(107,137), X(108,138), X(111,141), X(112,142), X(115,145), X(116,146),
+  X(119,149), X(120,150), X(123,153), X(124,154), X(127,157), X(128,158),
+  X(131,161), X(132,162), X(135,165), X(136,166), X(139,169), X(140,170),
+  X(143,173), X(144,174), X(147,177), X(148,178), X(151,181), X(152,182),
+  X(155,185), X(156,186), X(159,189), X(160,190), X(163,193), X(164,194),
+  X(167,197), X(168,198), X(171,201), X(172,202), X(175,205), X(176,206),
+  X(179,209), X(180,210), X(183,213), X(184,214), X(187,217), X(188,218),
+  X(191,221), X(192,222), X(195,225), X(196,226), X(199,229), X(200,230),
+  X(203,233), X(204,234), X(207,237), X(208,238), X(211,241), X(212,242),
+  X(215,245), X(216,246), X(219,249), X(220,250), X(3,17), X(4,18), X(7,21),
+  X(8,22), X(11,25), X(12,26), X(15,29), X(16,30), X(19,33), X(20,34), X(23,37),
+  X(24,38), X(27,41), X(28,42), X(31,45), X(32,46), X(35,49), X(36,50), X(39,53),
+  X(40,54), X(43,57), X(44,58), X(47,61), X(48,62), X(51,65), X(52,66), X(55,69),
+  X(56,70), X(59,73), X(60,74), X(63,77), X(64,78), X(67,81), X(68,82), X(71,85),
+  X(72,86), X(75,89), X(76,90), X(79,93), X(80,94), X(83,97), X(84,98),
+  X(87,101), X(88,102), X(91,105), X(92,106), X(95,109), X(96,110), X(99,113),
+  X(100,114), X(103,117), X(104,118), X(107,121), X(108,122), X(111,125),
+  X(112,126), X(115,129), X(116,130), X(119,133), X(120,134), X(123,137),
+  X(124,138), X(127,141), X(128,142), X(131,145), X(132,146), X(135,149),
+  X(136,150), X(139,153), X(140,154), X(143,157), X(144,158), X(147,161),
+  X(148,162), X(151,165), X(152,166), X(155,169), X(156,170), X(159,173),
+  X(160,174), X(163,177), X(164,178), X(167,181), X(168,182), X(171,185),
+  X(172,186), X(175,189), X(176,190), X(179,193), X(180,194), X(183,197),
+  X(184,198), X(187,201), X(188,202), X(191,205), X(192,206), X(195,209),
+  X(196,210), X(199,213), X(200,214), X(203,217), X(204,218), X(207,221),
+  X(208,222), X(211,225), X(212,226), X(215,229), X(216,230), X(219,233),
+  X(220,234), X(223,237), X(224,238), X(227,241), X(228,242), X(231,245),
+  X(232,246), X(235,249), X(236,250), X(3,9), X(4,10), X(7,13), X(8,14),
+  X(11,17), X(12,18), X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30),
+  X(27,33), X(28,34), X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46),
+  X(43,49), X(44,50), X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62),
+  X(59,65), X(60,66), X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78),
+  X(75,81), X(76,82), X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94),
+  X(91,97), X(92,98), X(95,101), X(96,102), X(99,105), X(100,106), X(103,109),
+  X(104,110), X(107,113), X(108,114), X(111,117), X(112,118), X(115,121),
+  X(116,122), X(119,125), X(120,126), X(123,129), X(124,130), X(127,133),
+  X(128,134), X(131,137), X(132,138), X(135,141), X(136,142), X(139,145),
+  X(140,146), X(143,149), X(144,150), X(147,153), X(148,154), X(151,157),
+  X(152,158), X(155,161), X(156,162), X(159,165), X(160,166), X(163,169),
+  X(164,170), X(167,173), X(168,174), X(171,177), X(172,178), X(175,181),
+  X(176,182), X(179,185), X(180,186), X(183,189), X(184,190), X(187,193),
+  X(188,194), X(191,197), X(192,198), X(195,201), X(196,202), X(199,205),
+  X(200,206), X(203,209), X(204,210), X(207,213), X(208,214), X(211,217),
+  X(212,218), X(215,221), X(216,222), X(219,225), X(220,226), X(223,229),
+  X(224,230), X(227,233), X(228,234), X(231,237), X(232,238), X(235,241),
+  X(236,242), X(239,245), X(240,246), X(243,249), X(244,250), X(3,5), X(4,6),
+  X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21), X(20,22),
+  X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37), X(36,38),
+  X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53), X(52,54),
+  X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69), X(68,70),
+  X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85), X(84,86),
+  X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98), X(99,101),
+  X(100,102), X(103,105), X(104,106), X(107,109), X(108,110), X(111,113),
+  X(112,114), X(115,117), X(116,118), X(119,121), X(120,122), X(123,125),
+  X(124,126), X(127,129), X(128,130), X(131,133), X(132,134), X(135,137),
+  X(136,138), X(139,141), X(140,142), X(143,145), X(144,146), X(147,149),
+  X(148,150), X(151,153), X(152,154), X(155,157), X(156,158), X(159,161),
+  X(160,162), X(163,165), X(164,166), X(167,169), X(168,170), X(171,173),
+  X(172,174), X(175,177), X(176,178), X(179,181), X(180,182), X(183,185),
+  X(184,186), X(187,189), X(188,190), X(191,193), X(192,194), X(195,197),
+  X(196,198), X(199,201), X(200,202), X(203,205), X(204,206), X(207,209),
+  X(208,210), X(211,213), X(212,214), X(215,217), X(216,218), X(219,221),
+  X(220,222), X(223,225), X(224,226), X(227,229), X(228,230), X(231,233),
+  X(232,234), X(235,237), X(236,238), X(239,241), X(240,242), X(243,245),
+  X(244,246), X(247,249), X(248,250), X(1,2), X(3,4), X(5,6), X(7,8), X(9,10),
+  X(11,12), X(13,14), X(15,16), X(17,18), X(19,20), X(21,22), X(23,24), X(25,26),
+  X(27,28), X(29,30), X(31,32), X(33,34), X(35,36), X(37,38), X(39,40), X(41,42),
+  X(43,44), X(45,46), X(47,48), X(49,50), X(51,52), X(53,54), X(55,56), X(57,58),
+  X(59,60), X(61,62), X(63,64), X(65,66), X(67,68), X(69,70), X(71,72), X(73,74),
+  X(75,76), X(77,78), X(79,80), X(81,82), X(83,84), X(85,86), X(87,88), X(89,90),
+  X(91,92), X(93,94), X(95,96), X(97,98), X(99,100), X(101,102), X(103,104),
+  X(105,106), X(107,108), X(109,110), X(111,112), X(113,114), X(115,116),
+  X(117,118), X(119,120), X(121,122), X(123,124), X(125,126), X(127,128),
+  X(129,130), X(131,132), X(133,134), X(135,136), X(137,138), X(139,140),
+  X(141,142), X(143,144), X(145,146), X(147,148), X(149,150), X(151,152),
+  X(153,154), X(155,156), X(157,158), X(159,160), X(161,162), X(163,164),
+  X(165,166), X(167,168), X(169,170), X(171,172), X(173,174), X(175,176),
+  X(177,178), X(179,180), X(181,182), X(183,184), X(185,186), X(187,188),
+  X(189,190), X(191,192), X(193,194), X(195,196), X(197,198), X(199,200),
+  X(201,202), X(203,204), X(205,206), X(207,208), X(209,210), X(211,212),
+  X(213,214), X(215,216), X(217,218), X(219,220), X(221,222), X(223,224),
+  X(225,226), X(227,228), X(229,230), X(231,232), X(233,234), X(235,236),
+  X(237,238), X(239,240), X(241,242), X(243,244), X(245,246), X(247,248),
+  X(249,250), X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139),
+  X(14,141), X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153),
+  X(28,155), X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167),
+  X(42,169), X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181),
+  X(56,183), X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195),
+  X(70,197), X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(82,209),
+  X(84,211), X(86,213), X(88,215), X(90,217), X(92,219), X(94,221), X(96,223),
+  X(98,225), X(100,227), X(102,229), X(104,231), X(106,233), X(108,235),
+  X(110,237), X(112,239), X(114,241), X(116,243), X(118,245), X(120,247),
+  X(122,249), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75), X(14,77),
+  X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91), X(30,93),
+  X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105), X(44,107),
+  X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119), X(58,121),
+  X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133), X(72,135),
+  X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147), X(86,149),
+  X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161), X(100,163),
+  X(102,165), X(104,167), X(106,169), X(108,171), X(110,173), X(112,175),
+  X(114,177), X(116,179), X(118,181), X(120,183), X(122,185), X(124,187),
+  X(126,189), X(128,191), X(130,193), X(132,195), X(134,197), X(136,199),
+  X(138,201), X(140,203), X(142,205), X(144,207), X(146,209), X(148,211),
+  X(150,213), X(152,215), X(154,217), X(156,219), X(158,221), X(160,223),
+  X(162,225), X(164,227), X(166,229), X(168,231), X(170,233), X(172,235),
+  X(174,237), X(176,239), X(178,241), X(180,243), X(182,245), X(184,247),
+  X(186,249), X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45),
+  X(16,47), X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61),
+  X(32,63), X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77),
+  X(48,79), X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93),
+  X(64,95), X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107),
+  X(78,109), X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121),
+  X(92,123), X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(146,177), X(148,179), X(150,181), X(152,183),
+  X(154,185), X(156,187), X(158,189), X(160,191), X(162,193), X(164,195),
+  X(166,197), X(168,199), X(170,201), X(172,203), X(174,205), X(176,207),
+  X(178,209), X(180,211), X(182,213), X(184,215), X(186,217), X(188,219),
+  X(190,221), X(192,223), X(194,225), X(196,227), X(198,229), X(200,231),
+  X(202,233), X(204,235), X(206,237), X(208,239), X(210,241), X(212,243),
+  X(214,245), X(216,247), X(218,249), X(2,17), X(4,19), X(6,21), X(8,23),
+  X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39),
+  X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55),
+  X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71),
+  X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87),
+  X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99), X(86,101),
+  X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113), X(100,115),
+  X(102,117), X(104,119), X(106,121), X(108,123), X(110,125), X(112,127),
+  X(114,129), X(116,131), X(118,133), X(120,135), X(122,137), X(124,139),
+  X(126,141), X(128,143), X(130,145), X(132,147), X(134,149), X(136,151),
+  X(138,153), X(140,155), X(142,157), X(144,159), X(146,161), X(148,163),
+  X(150,165), X(152,167), X(154,169), X(156,171), X(158,173), X(160,175),
+  X(162,177), X(164,179), X(166,181), X(168,183), X(170,185), X(172,187),
+  X(174,189), X(176,191), X(178,193), X(180,195), X(182,197), X(184,199),
+  X(186,201), X(188,203), X(190,205), X(192,207), X(194,209), X(196,211),
+  X(198,213), X(200,215), X(202,217), X(204,219), X(206,221), X(208,223),
+  X(210,225), X(212,227), X(214,229), X(216,231), X(218,233), X(220,235),
+  X(222,237), X(224,239), X(226,241), X(228,243), X(230,245), X(232,247),
+  X(234,249), X(2,9), X(4,11), X(6,13), X(8,15), X(10,17), X(12,19), X(14,21),
+  X(16,23), X(18,25), X(20,27), X(22,29), X(24,31), X(26,33), X(28,35), X(30,37),
+  X(32,39), X(34,41), X(36,43), X(38,45), X(40,47), X(42,49), X(44,51), X(46,53),
+  X(48,55), X(50,57), X(52,59), X(54,61), X(56,63), X(58,65), X(60,67), X(62,69),
+  X(64,71), X(66,73), X(68,75), X(70,77), X(72,79), X(74,81), X(76,83), X(78,85),
+  X(80,87), X(82,89), X(84,91), X(86,93), X(88,95), X(90,97), X(92,99),
+  X(94,101), X(96,103), X(98,105), X(100,107), X(102,109), X(104,111),
+  X(106,113), X(108,115), X(110,117), X(112,119), X(114,121), X(116,123),
+  X(118,125), X(120,127), X(122,129), X(124,131), X(126,133), X(128,135),
+  X(130,137), X(132,139), X(134,141), X(136,143), X(138,145), X(140,147),
+  X(142,149), X(144,151), X(146,153), X(148,155), X(150,157), X(152,159),
+  X(154,161), X(156,163), X(158,165), X(160,167), X(162,169), X(164,171),
+  X(166,173), X(168,175), X(170,177), X(172,179), X(174,181), X(176,183),
+  X(178,185), X(180,187), X(182,189), X(184,191), X(186,193), X(188,195),
+  X(190,197), X(192,199), X(194,201), X(196,203), X(198,205), X(200,207),
+  X(202,209), X(204,211), X(206,213), X(208,215), X(210,217), X(212,219),
+  X(214,221), X(216,223), X(218,225), X(220,227), X(222,229), X(224,231),
+  X(226,233), X(228,235), X(230,237), X(232,239), X(234,241), X(236,243),
+  X(238,245), X(240,247), X(242,249), X(2,5), X(4,7), X(6,9), X(8,11), X(10,13),
+  X(12,15), X(14,17), X(16,19), X(18,21), X(20,23), X(22,25), X(24,27), X(26,29),
+  X(28,31), X(30,33), X(32,35), X(34,37), X(36,39), X(38,41), X(40,43), X(42,45),
+  X(44,47), X(46,49), X(48,51), X(50,53), X(52,55), X(54,57), X(56,59), X(58,61),
+  X(60,63), X(62,65), X(64,67), X(66,69), X(68,71), X(70,73), X(72,75), X(74,77),
+  X(76,79), X(78,81), X(80,83), X(82,85), X(84,87), X(86,89), X(88,91), X(90,93),
+  X(92,95), X(94,97), X(96,99), X(98,101), X(100,103), X(102,105), X(104,107),
+  X(106,109), X(108,111), X(110,113), X(112,115), X(114,117), X(116,119),
+  X(118,121), X(120,123), X(122,125), X(124,127), X(126,129), X(128,131),
+  X(130,133), X(132,135), X(134,137), X(136,139), X(138,141), X(140,143),
+  X(142,145), X(144,147), X(146,149), X(148,151), X(150,153), X(152,155),
+  X(154,157), X(156,159), X(158,161), X(160,163), X(162,165), X(164,167),
+  X(166,169), X(168,171), X(170,173), X(172,175), X(174,177), X(176,179),
+  X(178,181), X(180,183), X(182,185), X(184,187), X(186,189), X(188,191),
+  X(190,193), X(192,195), X(194,197), X(196,199), X(198,201), X(200,203),
+  X(202,205), X(204,207), X(206,209), X(208,211), X(210,213), X(212,215),
+  X(214,217), X(216,219), X(218,221), X(220,223), X(222,225), X(224,227),
+  X(226,229), X(228,231), X(230,233), X(232,235), X(234,237), X(236,239),
+  X(238,241), X(240,243), X(242,245), X(244,247), X(246,249), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223), X(224,225), X(226,227), X(228,229), X(230,231),
+  X(232,233), X(234,235), X(236,237), X(238,239), X(240,241), X(242,243),
+  X(244,245), X(246,247), X(248,249)
+};
+S(252) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(97,225), X(98,226),
+  X(99,227), X(100,228), X(101,229), X(102,230), X(103,231), X(104,232),
+  X(105,233), X(106,234), X(107,235), X(108,236), X(109,237), X(110,238),
+  X(111,239), X(112,240), X(113,241), X(114,242), X(115,243), X(116,244),
+  X(117,245), X(118,246), X(119,247), X(120,248), X(121,249), X(122,250),
+  X(123,251), X(124,252), X(1,65), X(2,66), X(3,67), X(4,68), X(5,69), X(6,70),
+  X(7,71), X(8,72), X(9,73), X(10,74), X(11,75), X(12,76), X(13,77), X(14,78),
+  X(15,79), X(16,80), X(17,81), X(18,82), X(19,83), X(20,84), X(21,85), X(22,86),
+  X(23,87), X(24,88), X(25,89), X(26,90), X(27,91), X(28,92), X(29,93), X(30,94),
+  X(31,95), X(32,96), X(33,97), X(34,98), X(35,99), X(36,100), X(37,101),
+  X(38,102), X(39,103), X(40,104), X(41,105), X(42,106), X(43,107), X(44,108),
+  X(45,109), X(46,110), X(47,111), X(48,112), X(49,113), X(50,114), X(51,115),
+  X(52,116), X(53,117), X(54,118), X(55,119), X(56,120), X(57,121), X(58,122),
+  X(59,123), X(60,124), X(61,125), X(62,126), X(63,127), X(64,128), X(129,193),
+  X(130,194), X(131,195), X(132,196), X(133,197), X(134,198), X(135,199),
+  X(136,200), X(137,201), X(138,202), X(139,203), X(140,204), X(141,205),
+  X(142,206), X(143,207), X(144,208), X(145,209), X(146,210), X(147,211),
+  X(148,212), X(149,213), X(150,214), X(151,215), X(152,216), X(153,217),
+  X(154,218), X(155,219), X(156,220), X(157,221), X(158,222), X(159,223),
+  X(160,224), X(161,225), X(162,226), X(163,227), X(164,228), X(165,229),
+  X(166,230), X(167,231), X(168,232), X(169,233), X(170,234), X(171,235),
+  X(172,236), X(173,237), X(174,238), X(175,239), X(176,240), X(177,241),
+  X(178,242), X(179,243), X(180,244), X(181,245), X(182,246), X(183,247),
+  X(184,248), X(185,249), X(186,250), X(187,251), X(188,252), X(65,129),
+  X(66,130), X(67,131), X(68,132), X(69,133), X(70,134), X(71,135), X(72,136),
+  X(73,137), X(74,138), X(75,139), X(76,140), X(77,141), X(78,142), X(79,143),
+  X(80,144), X(81,145), X(82,146), X(83,147), X(84,148), X(85,149), X(86,150),
+  X(87,151), X(88,152), X(89,153), X(90,154), X(91,155), X(92,156), X(93,157),
+  X(94,158), X(95,159), X(96,160), X(97,161), X(98,162), X(99,163), X(100,164),
+  X(101,165), X(102,166), X(103,167), X(104,168), X(105,169), X(106,170),
+  X(107,171), X(108,172), X(109,173), X(110,174), X(111,175), X(112,176),
+  X(113,177), X(114,178), X(115,179), X(116,180), X(117,181), X(118,182),
+  X(119,183), X(120,184), X(121,185), X(122,186), X(123,187), X(124,188),
+  X(125,189), X(126,190), X(127,191), X(128,192), X(1,33), X(2,34), X(3,35),
+  X(4,36), X(5,37), X(6,38), X(7,39), X(8,40), X(9,41), X(10,42), X(11,43),
+  X(12,44), X(13,45), X(14,46), X(15,47), X(16,48), X(17,49), X(18,50), X(19,51),
+  X(20,52), X(21,53), X(22,54), X(23,55), X(24,56), X(25,57), X(26,58), X(27,59),
+  X(28,60), X(29,61), X(30,62), X(31,63), X(32,64), X(65,97), X(66,98), X(67,99),
+  X(68,100), X(69,101), X(70,102), X(71,103), X(72,104), X(73,105), X(74,106),
+  X(75,107), X(76,108), X(77,109), X(78,110), X(79,111), X(80,112), X(81,113),
+  X(82,114), X(83,115), X(84,116), X(85,117), X(86,118), X(87,119), X(88,120),
+  X(89,121), X(90,122), X(91,123), X(92,124), X(93,125), X(94,126), X(95,127),
+  X(96,128), X(129,161), X(130,162), X(131,163), X(132,164), X(133,165),
+  X(134,166), X(135,167), X(136,168), X(137,169), X(138,170), X(139,171),
+  X(140,172), X(141,173), X(142,174), X(143,175), X(144,176), X(145,177),
+  X(146,178), X(147,179), X(148,180), X(149,181), X(150,182), X(151,183),
+  X(152,184), X(153,185), X(154,186), X(155,187), X(156,188), X(157,189),
+  X(158,190), X(159,191), X(160,192), X(193,225), X(194,226), X(195,227),
+  X(196,228), X(197,229), X(198,230), X(199,231), X(200,232), X(201,233),
+  X(202,234), X(203,235), X(204,236), X(205,237), X(206,238), X(207,239),
+  X(208,240), X(209,241), X(210,242), X(211,243), X(212,244), X(213,245),
+  X(214,246), X(215,247), X(216,248), X(217,249), X(218,250), X(219,251),
+  X(220,252), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(119,215), X(120,216), X(121,217), X(122,218),
+  X(123,219), X(124,220), X(125,221), X(126,222), X(127,223), X(128,224),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(165,197), X(166,198), X(167,199), X(168,200), X(169,201), X(170,202),
+  X(171,203), X(172,204), X(173,205), X(174,206), X(175,207), X(176,208),
+  X(177,209), X(178,210), X(179,211), X(180,212), X(181,213), X(182,214),
+  X(183,215), X(184,216), X(185,217), X(186,218), X(187,219), X(188,220),
+  X(189,221), X(190,222), X(191,223), X(192,224), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(201,217), X(202,218), X(203,219), X(204,220), X(205,221), X(206,222),
+  X(207,223), X(208,224), X(225,241), X(226,242), X(227,243), X(228,244),
+  X(229,245), X(230,246), X(231,247), X(232,248), X(233,249), X(234,250),
+  X(235,251), X(236,252), X(17,129), X(18,130), X(19,131), X(20,132), X(21,133),
+  X(22,134), X(23,135), X(24,136), X(25,137), X(26,138), X(27,139), X(28,140),
+  X(29,141), X(30,142), X(31,143), X(32,144), X(49,161), X(50,162), X(51,163),
+  X(52,164), X(53,165), X(54,166), X(55,167), X(56,168), X(57,169), X(58,170),
+  X(59,171), X(60,172), X(61,173), X(62,174), X(63,175), X(64,176), X(81,193),
+  X(82,194), X(83,195), X(84,196), X(85,197), X(86,198), X(87,199), X(88,200),
+  X(89,201), X(90,202), X(91,203), X(92,204), X(93,205), X(94,206), X(95,207),
+  X(96,208), X(113,225), X(114,226), X(115,227), X(116,228), X(117,229),
+  X(118,230), X(119,231), X(120,232), X(121,233), X(122,234), X(123,235),
+  X(124,236), X(125,237), X(126,238), X(127,239), X(128,240), X(17,65), X(18,66),
+  X(19,67), X(20,68), X(21,69), X(22,70), X(23,71), X(24,72), X(25,73), X(26,74),
+  X(27,75), X(28,76), X(29,77), X(30,78), X(31,79), X(32,80), X(49,97), X(50,98),
+  X(51,99), X(52,100), X(53,101), X(54,102), X(55,103), X(56,104), X(57,105),
+  X(58,106), X(59,107), X(60,108), X(61,109), X(62,110), X(63,111), X(64,112),
+  X(81,129), X(82,130), X(83,131), X(84,132), X(85,133), X(86,134), X(87,135),
+  X(88,136), X(89,137), X(90,138), X(91,139), X(92,140), X(93,141), X(94,142),
+  X(95,143), X(96,144), X(113,161), X(114,162), X(115,163), X(116,164),
+  X(117,165), X(118,166), X(119,167), X(120,168), X(121,169), X(122,170),
+  X(123,171), X(124,172), X(125,173), X(126,174), X(127,175), X(128,176),
+  X(145,193), X(146,194), X(147,195), X(148,196), X(149,197), X(150,198),
+  X(151,199), X(152,200), X(153,201), X(154,202), X(155,203), X(156,204),
+  X(157,205), X(158,206), X(159,207), X(160,208), X(177,225), X(178,226),
+  X(179,227), X(180,228), X(181,229), X(182,230), X(183,231), X(184,232),
+  X(185,233), X(186,234), X(187,235), X(188,236), X(189,237), X(190,238),
+  X(191,239), X(192,240), X(17,33), X(18,34), X(19,35), X(20,36), X(21,37),
+  X(22,38), X(23,39), X(24,40), X(25,41), X(26,42), X(27,43), X(28,44), X(29,45),
+  X(30,46), X(31,47), X(32,48), X(49,65), X(50,66), X(51,67), X(52,68), X(53,69),
+  X(54,70), X(55,71), X(56,72), X(57,73), X(58,74), X(59,75), X(60,76), X(61,77),
+  X(62,78), X(63,79), X(64,80), X(81,97), X(82,98), X(83,99), X(84,100),
+  X(85,101), X(86,102), X(87,103), X(88,104), X(89,105), X(90,106), X(91,107),
+  X(92,108), X(93,109), X(94,110), X(95,111), X(96,112), X(113,129), X(114,130),
+  X(115,131), X(116,132), X(117,133), X(118,134), X(119,135), X(120,136),
+  X(121,137), X(122,138), X(123,139), X(124,140), X(125,141), X(126,142),
+  X(127,143), X(128,144), X(145,161), X(146,162), X(147,163), X(148,164),
+  X(149,165), X(150,166), X(151,167), X(152,168), X(153,169), X(154,170),
+  X(155,171), X(156,172), X(157,173), X(158,174), X(159,175), X(160,176),
+  X(177,193), X(178,194), X(179,195), X(180,196), X(181,197), X(182,198),
+  X(183,199), X(184,200), X(185,201), X(186,202), X(187,203), X(188,204),
+  X(189,205), X(190,206), X(191,207), X(192,208), X(209,225), X(210,226),
+  X(211,227), X(212,228), X(213,229), X(214,230), X(215,231), X(216,232),
+  X(217,233), X(218,234), X(219,235), X(220,236), X(221,237), X(222,238),
+  X(223,239), X(224,240), X(1,9), X(2,10), X(3,11), X(4,12), X(5,13), X(6,14),
+  X(7,15), X(8,16), X(17,25), X(18,26), X(19,27), X(20,28), X(21,29), X(22,30),
+  X(23,31), X(24,32), X(33,41), X(34,42), X(35,43), X(36,44), X(37,45), X(38,46),
+  X(39,47), X(40,48), X(49,57), X(50,58), X(51,59), X(52,60), X(53,61), X(54,62),
+  X(55,63), X(56,64), X(65,73), X(66,74), X(67,75), X(68,76), X(69,77), X(70,78),
+  X(71,79), X(72,80), X(81,89), X(82,90), X(83,91), X(84,92), X(85,93), X(86,94),
+  X(87,95), X(88,96), X(97,105), X(98,106), X(99,107), X(100,108), X(101,109),
+  X(102,110), X(103,111), X(104,112), X(113,121), X(114,122), X(115,123),
+  X(116,124), X(117,125), X(118,126), X(119,127), X(120,128), X(129,137),
+  X(130,138), X(131,139), X(132,140), X(133,141), X(134,142), X(135,143),
+  X(136,144), X(145,153), X(146,154), X(147,155), X(148,156), X(149,157),
+  X(150,158), X(151,159), X(152,160), X(161,169), X(162,170), X(163,171),
+  X(164,172), X(165,173), X(166,174), X(167,175), X(168,176), X(177,185),
+  X(178,186), X(179,187), X(180,188), X(181,189), X(182,190), X(183,191),
+  X(184,192), X(193,201), X(194,202), X(195,203), X(196,204), X(197,205),
+  X(198,206), X(199,207), X(200,208), X(209,217), X(210,218), X(211,219),
+  X(212,220), X(213,221), X(214,222), X(215,223), X(216,224), X(225,233),
+  X(226,234), X(227,235), X(228,236), X(229,237), X(230,238), X(231,239),
+  X(232,240), X(241,249), X(242,250), X(243,251), X(244,252), X(9,129),
+  X(10,130), X(11,131), X(12,132), X(13,133), X(14,134), X(15,135), X(16,136),
+  X(25,145), X(26,146), X(27,147), X(28,148), X(29,149), X(30,150), X(31,151),
+  X(32,152), X(41,161), X(42,162), X(43,163), X(44,164), X(45,165), X(46,166),
+  X(47,167), X(48,168), X(57,177), X(58,178), X(59,179), X(60,180), X(61,181),
+  X(62,182), X(63,183), X(64,184), X(73,193), X(74,194), X(75,195), X(76,196),
+  X(77,197), X(78,198), X(79,199), X(80,200), X(89,209), X(90,210), X(91,211),
+  X(92,212), X(93,213), X(94,214), X(95,215), X(96,216), X(105,225), X(106,226),
+  X(107,227), X(108,228), X(109,229), X(110,230), X(111,231), X(112,232),
+  X(121,241), X(122,242), X(123,243), X(124,244), X(125,245), X(126,246),
+  X(127,247), X(128,248), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69),
+  X(14,70), X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85),
+  X(30,86), X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100),
+  X(45,101), X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115),
+  X(60,116), X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130),
+  X(75,131), X(76,132), X(77,133), X(78,134), X(79,135), X(80,136), X(89,145),
+  X(90,146), X(91,147), X(92,148), X(93,149), X(94,150), X(95,151), X(96,152),
+  X(105,161), X(106,162), X(107,163), X(108,164), X(109,165), X(110,166),
+  X(111,167), X(112,168), X(121,177), X(122,178), X(123,179), X(124,180),
+  X(125,181), X(126,182), X(127,183), X(128,184), X(137,193), X(138,194),
+  X(139,195), X(140,196), X(141,197), X(142,198), X(143,199), X(144,200),
+  X(153,209), X(154,210), X(155,211), X(156,212), X(157,213), X(158,214),
+  X(159,215), X(160,216), X(169,225), X(170,226), X(171,227), X(172,228),
+  X(173,229), X(174,230), X(175,231), X(176,232), X(185,241), X(186,242),
+  X(187,243), X(188,244), X(189,245), X(190,246), X(191,247), X(192,248),
+  X(9,33), X(10,34), X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40),
+  X(25,49), X(26,50), X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56),
+  X(41,65), X(42,66), X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72),
+  X(57,81), X(58,82), X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88),
+  X(73,97), X(74,98), X(75,99), X(76,100), X(77,101), X(78,102), X(79,103),
+  X(80,104), X(89,113), X(90,114), X(91,115), X(92,116), X(93,117), X(94,118),
+  X(95,119), X(96,120), X(105,129), X(106,130), X(107,131), X(108,132),
+  X(109,133), X(110,134), X(111,135), X(112,136), X(121,145), X(122,146),
+  X(123,147), X(124,148), X(125,149), X(126,150), X(127,151), X(128,152),
+  X(137,161), X(138,162), X(139,163), X(140,164), X(141,165), X(142,166),
+  X(143,167), X(144,168), X(153,177), X(154,178), X(155,179), X(156,180),
+  X(157,181), X(158,182), X(159,183), X(160,184), X(169,193), X(170,194),
+  X(171,195), X(172,196), X(173,197), X(174,198), X(175,199), X(176,200),
+  X(185,209), X(186,210), X(187,211), X(188,212), X(189,213), X(190,214),
+  X(191,215), X(192,216), X(201,225), X(202,226), X(203,227), X(204,228),
+  X(205,229), X(206,230), X(207,231), X(208,232), X(217,241), X(218,242),
+  X(219,243), X(220,244), X(221,245), X(222,246), X(223,247), X(224,248),
+  X(9,17), X(10,18), X(11,19), X(12,20), X(13,21), X(14,22), X(15,23), X(16,24),
+  X(25,33), X(26,34), X(27,35), X(28,36), X(29,37), X(30,38), X(31,39), X(32,40),
+  X(41,49), X(42,50), X(43,51), X(44,52), X(45,53), X(46,54), X(47,55), X(48,56),
+  X(57,65), X(58,66), X(59,67), X(60,68), X(61,69), X(62,70), X(63,71), X(64,72),
+  X(73,81), X(74,82), X(75,83), X(76,84), X(77,85), X(78,86), X(79,87), X(80,88),
+  X(89,97), X(90,98), X(91,99), X(92,100), X(93,101), X(94,102), X(95,103),
+  X(96,104), X(105,113), X(106,114), X(107,115), X(108,116), X(109,117),
+  X(110,118), X(111,119), X(112,120), X(121,129), X(122,130), X(123,131),
+  X(124,132), X(125,133), X(126,134), X(127,135), X(128,136), X(137,145),
+  X(138,146), X(139,147), X(140,148), X(141,149), X(142,150), X(143,151),
+  X(144,152), X(153,161), X(154,162), X(155,163), X(156,164), X(157,165),
+  X(158,166), X(159,167), X(160,168), X(169,177), X(170,178), X(171,179),
+  X(172,180), X(173,181), X(174,182), X(175,183), X(176,184), X(185,193),
+  X(186,194), X(187,195), X(188,196), X(189,197), X(190,198), X(191,199),
+  X(192,200), X(201,209), X(202,210), X(203,211), X(204,212), X(205,213),
+  X(206,214), X(207,215), X(208,216), X(217,225), X(218,226), X(219,227),
+  X(220,228), X(221,229), X(222,230), X(223,231), X(224,232), X(233,241),
+  X(234,242), X(235,243), X(236,244), X(237,245), X(238,246), X(239,247),
+  X(240,248), X(1,5), X(2,6), X(3,7), X(4,8), X(9,13), X(10,14), X(11,15),
+  X(12,16), X(17,21), X(18,22), X(19,23), X(20,24), X(25,29), X(26,30), X(27,31),
+  X(28,32), X(33,37), X(34,38), X(35,39), X(36,40), X(41,45), X(42,46), X(43,47),
+  X(44,48), X(49,53), X(50,54), X(51,55), X(52,56), X(57,61), X(58,62), X(59,63),
+  X(60,64), X(65,69), X(66,70), X(67,71), X(68,72), X(73,77), X(74,78), X(75,79),
+  X(76,80), X(81,85), X(82,86), X(83,87), X(84,88), X(89,93), X(90,94), X(91,95),
+  X(92,96), X(97,101), X(98,102), X(99,103), X(100,104), X(105,109), X(106,110),
+  X(107,111), X(108,112), X(113,117), X(114,118), X(115,119), X(116,120),
+  X(121,125), X(122,126), X(123,127), X(124,128), X(129,133), X(130,134),
+  X(131,135), X(132,136), X(137,141), X(138,142), X(139,143), X(140,144),
+  X(145,149), X(146,150), X(147,151), X(148,152), X(153,157), X(154,158),
+  X(155,159), X(156,160), X(161,165), X(162,166), X(163,167), X(164,168),
+  X(169,173), X(170,174), X(171,175), X(172,176), X(177,181), X(178,182),
+  X(179,183), X(180,184), X(185,189), X(186,190), X(187,191), X(188,192),
+  X(193,197), X(194,198), X(195,199), X(196,200), X(201,205), X(202,206),
+  X(203,207), X(204,208), X(209,213), X(210,214), X(211,215), X(212,216),
+  X(217,221), X(218,222), X(219,223), X(220,224), X(225,229), X(226,230),
+  X(227,231), X(228,232), X(233,237), X(234,238), X(235,239), X(236,240),
+  X(241,245), X(242,246), X(243,247), X(244,248), X(5,129), X(6,130), X(7,131),
+  X(8,132), X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146),
+  X(23,147), X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(37,161),
+  X(38,162), X(39,163), X(40,164), X(45,169), X(46,170), X(47,171), X(48,172),
+  X(53,177), X(54,178), X(55,179), X(56,180), X(61,185), X(62,186), X(63,187),
+  X(64,188), X(69,193), X(70,194), X(71,195), X(72,196), X(77,201), X(78,202),
+  X(79,203), X(80,204), X(85,209), X(86,210), X(87,211), X(88,212), X(93,217),
+  X(94,218), X(95,219), X(96,220), X(101,225), X(102,226), X(103,227),
+  X(104,228), X(109,233), X(110,234), X(111,235), X(112,236), X(117,241),
+  X(118,242), X(119,243), X(120,244), X(125,249), X(126,250), X(127,251),
+  X(128,252), X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75),
+  X(16,76), X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91),
+  X(32,92), X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106),
+  X(47,107), X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121),
+  X(62,122), X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132),
+  X(77,137), X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147),
+  X(88,148), X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162),
+  X(103,163), X(104,164), X(109,169), X(110,170), X(111,171), X(112,172),
+  X(117,177), X(118,178), X(119,179), X(120,180), X(125,185), X(126,186),
+  X(127,187), X(128,188), X(133,193), X(134,194), X(135,195), X(136,196),
+  X(141,201), X(142,202), X(143,203), X(144,204), X(149,209), X(150,210),
+  X(151,211), X(152,212), X(157,217), X(158,218), X(159,219), X(160,220),
+  X(165,225), X(166,226), X(167,227), X(168,228), X(173,233), X(174,234),
+  X(175,235), X(176,236), X(181,241), X(182,242), X(183,243), X(184,244),
+  X(189,249), X(190,250), X(191,251), X(192,252), X(5,33), X(6,34), X(7,35),
+  X(8,36), X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51),
+  X(24,52), X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67),
+  X(40,68), X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83),
+  X(56,84), X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(103,131), X(104,132), X(109,137), X(110,138), X(111,139),
+  X(112,140), X(117,145), X(118,146), X(119,147), X(120,148), X(125,153),
+  X(126,154), X(127,155), X(128,156), X(133,161), X(134,162), X(135,163),
+  X(136,164), X(141,169), X(142,170), X(143,171), X(144,172), X(149,177),
+  X(150,178), X(151,179), X(152,180), X(157,185), X(158,186), X(159,187),
+  X(160,188), X(165,193), X(166,194), X(167,195), X(168,196), X(173,201),
+  X(174,202), X(175,203), X(176,204), X(181,209), X(182,210), X(183,211),
+  X(184,212), X(189,217), X(190,218), X(191,219), X(192,220), X(197,225),
+  X(198,226), X(199,227), X(200,228), X(205,233), X(206,234), X(207,235),
+  X(208,236), X(213,241), X(214,242), X(215,243), X(216,244), X(221,249),
+  X(222,250), X(223,251), X(224,252), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(173,185), X(174,186),
+  X(175,187), X(176,188), X(181,193), X(182,194), X(183,195), X(184,196),
+  X(189,201), X(190,202), X(191,203), X(192,204), X(197,209), X(198,210),
+  X(199,211), X(200,212), X(205,217), X(206,218), X(207,219), X(208,220),
+  X(213,225), X(214,226), X(215,227), X(216,228), X(221,233), X(222,234),
+  X(223,235), X(224,236), X(229,241), X(230,242), X(231,243), X(232,244),
+  X(237,249), X(238,250), X(239,251), X(240,252), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27),
+  X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43),
+  X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59),
+  X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75),
+  X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91),
+  X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106),
+  X(103,107), X(104,108), X(109,113), X(110,114), X(111,115), X(112,116),
+  X(117,121), X(118,122), X(119,123), X(120,124), X(125,129), X(126,130),
+  X(127,131), X(128,132), X(133,137), X(134,138), X(135,139), X(136,140),
+  X(141,145), X(142,146), X(143,147), X(144,148), X(149,153), X(150,154),
+  X(151,155), X(152,156), X(157,161), X(158,162), X(159,163), X(160,164),
+  X(165,169), X(166,170), X(167,171), X(168,172), X(173,177), X(174,178),
+  X(175,179), X(176,180), X(181,185), X(182,186), X(183,187), X(184,188),
+  X(189,193), X(190,194), X(191,195), X(192,196), X(197,201), X(198,202),
+  X(199,203), X(200,204), X(205,209), X(206,210), X(207,211), X(208,212),
+  X(213,217), X(214,218), X(215,219), X(216,220), X(221,225), X(222,226),
+  X(223,227), X(224,228), X(229,233), X(230,234), X(231,235), X(232,236),
+  X(237,241), X(238,242), X(239,243), X(240,244), X(245,249), X(246,250),
+  X(247,251), X(248,252), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(129,131),
+  X(130,132), X(133,135), X(134,136), X(137,139), X(138,140), X(141,143),
+  X(142,144), X(145,147), X(146,148), X(149,151), X(150,152), X(153,155),
+  X(154,156), X(157,159), X(158,160), X(161,163), X(162,164), X(165,167),
+  X(166,168), X(169,171), X(170,172), X(173,175), X(174,176), X(177,179),
+  X(178,180), X(181,183), X(182,184), X(185,187), X(186,188), X(189,191),
+  X(190,192), X(193,195), X(194,196), X(197,199), X(198,200), X(201,203),
+  X(202,204), X(205,207), X(206,208), X(209,211), X(210,212), X(213,215),
+  X(214,216), X(217,219), X(218,220), X(221,223), X(222,224), X(225,227),
+  X(226,228), X(229,231), X(230,232), X(233,235), X(234,236), X(237,239),
+  X(238,240), X(241,243), X(242,244), X(245,247), X(246,248), X(249,251),
+  X(250,252), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194),
+  X(71,197), X(72,198), X(75,201), X(76,202), X(79,205), X(80,206), X(83,209),
+  X(84,210), X(87,213), X(88,214), X(91,217), X(92,218), X(95,221), X(96,222),
+  X(99,225), X(100,226), X(103,229), X(104,230), X(107,233), X(108,234),
+  X(111,237), X(112,238), X(115,241), X(116,242), X(119,245), X(120,246),
+  X(123,249), X(124,250), X(3,65), X(4,66), X(7,69), X(8,70), X(11,73), X(12,74),
+  X(15,77), X(16,78), X(19,81), X(20,82), X(23,85), X(24,86), X(27,89), X(28,90),
+  X(31,93), X(32,94), X(35,97), X(36,98), X(39,101), X(40,102), X(43,105),
+  X(44,106), X(47,109), X(48,110), X(51,113), X(52,114), X(55,117), X(56,118),
+  X(59,121), X(60,122), X(63,125), X(64,126), X(67,129), X(68,130), X(71,133),
+  X(72,134), X(75,137), X(76,138), X(79,141), X(80,142), X(83,145), X(84,146),
+  X(87,149), X(88,150), X(91,153), X(92,154), X(95,157), X(96,158), X(99,161),
+  X(100,162), X(103,165), X(104,166), X(107,169), X(108,170), X(111,173),
+  X(112,174), X(115,177), X(116,178), X(119,181), X(120,182), X(123,185),
+  X(124,186), X(127,189), X(128,190), X(131,193), X(132,194), X(135,197),
+  X(136,198), X(139,201), X(140,202), X(143,205), X(144,206), X(147,209),
+  X(148,210), X(151,213), X(152,214), X(155,217), X(156,218), X(159,221),
+  X(160,222), X(163,225), X(164,226), X(167,229), X(168,230), X(171,233),
+  X(172,234), X(175,237), X(176,238), X(179,241), X(180,242), X(183,245),
+  X(184,246), X(187,249), X(188,250), X(3,33), X(4,34), X(7,37), X(8,38),
+  X(11,41), X(12,42), X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54),
+  X(27,57), X(28,58), X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70),
+  X(43,73), X(44,74), X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86),
+  X(59,89), X(60,90), X(63,93), X(64,94), X(67,97), X(68,98), X(71,101),
+  X(72,102), X(75,105), X(76,106), X(79,109), X(80,110), X(83,113), X(84,114),
+  X(87,117), X(88,118), X(91,121), X(92,122), X(95,125), X(96,126), X(99,129),
+  X(100,130), X(103,133), X(104,134), X(107,137), X(108,138), X(111,141),
+  X(112,142), X(115,145), X(116,146), X(119,149), X(120,150), X(123,153),
+  X(124,154), X(127,157), X(128,158), X(131,161), X(132,162), X(135,165),
+  X(136,166), X(139,169), X(140,170), X(143,173), X(144,174), X(147,177),
+  X(148,178), X(151,181), X(152,182), X(155,185), X(156,186), X(159,189),
+  X(160,190), X(163,193), X(164,194), X(167,197), X(168,198), X(171,201),
+  X(172,202), X(175,205), X(176,206), X(179,209), X(180,210), X(183,213),
+  X(184,214), X(187,217), X(188,218), X(191,221), X(192,222), X(195,225),
+  X(196,226), X(199,229), X(200,230), X(203,233), X(204,234), X(207,237),
+  X(208,238), X(211,241), X(212,242), X(215,245), X(216,246), X(219,249),
+  X(220,250), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166),
+  X(155,169), X(156,170), X(159,173), X(160,174), X(163,177), X(164,178),
+  X(167,181), X(168,182), X(171,185), X(172,186), X(175,189), X(176,190),
+  X(179,193), X(180,194), X(183,197), X(184,198), X(187,201), X(188,202),
+  X(191,205), X(192,206), X(195,209), X(196,210), X(199,213), X(200,214),
+  X(203,217), X(204,218), X(207,221), X(208,222), X(211,225), X(212,226),
+  X(215,229), X(216,230), X(219,233), X(220,234), X(223,237), X(224,238),
+  X(227,241), X(228,242), X(231,245), X(232,246), X(235,249), X(236,250), X(3,9),
+  X(4,10), X(7,13), X(8,14), X(11,17), X(12,18), X(15,21), X(16,22), X(19,25),
+  X(20,26), X(23,29), X(24,30), X(27,33), X(28,34), X(31,37), X(32,38), X(35,41),
+  X(36,42), X(39,45), X(40,46), X(43,49), X(44,50), X(47,53), X(48,54), X(51,57),
+  X(52,58), X(55,61), X(56,62), X(59,65), X(60,66), X(63,69), X(64,70), X(67,73),
+  X(68,74), X(71,77), X(72,78), X(75,81), X(76,82), X(79,85), X(80,86), X(83,89),
+  X(84,90), X(87,93), X(88,94), X(91,97), X(92,98), X(95,101), X(96,102),
+  X(99,105), X(100,106), X(103,109), X(104,110), X(107,113), X(108,114),
+  X(111,117), X(112,118), X(115,121), X(116,122), X(119,125), X(120,126),
+  X(123,129), X(124,130), X(127,133), X(128,134), X(131,137), X(132,138),
+  X(135,141), X(136,142), X(139,145), X(140,146), X(143,149), X(144,150),
+  X(147,153), X(148,154), X(151,157), X(152,158), X(155,161), X(156,162),
+  X(159,165), X(160,166), X(163,169), X(164,170), X(167,173), X(168,174),
+  X(171,177), X(172,178), X(175,181), X(176,182), X(179,185), X(180,186),
+  X(183,189), X(184,190), X(187,193), X(188,194), X(191,197), X(192,198),
+  X(195,201), X(196,202), X(199,205), X(200,206), X(203,209), X(204,210),
+  X(207,213), X(208,214), X(211,217), X(212,218), X(215,221), X(216,222),
+  X(219,225), X(220,226), X(223,229), X(224,230), X(227,233), X(228,234),
+  X(231,237), X(232,238), X(235,241), X(236,242), X(239,245), X(240,246),
+  X(243,249), X(244,250), X(3,5), X(4,6), X(7,9), X(8,10), X(11,13), X(12,14),
+  X(15,17), X(16,18), X(19,21), X(20,22), X(23,25), X(24,26), X(27,29), X(28,30),
+  X(31,33), X(32,34), X(35,37), X(36,38), X(39,41), X(40,42), X(43,45), X(44,46),
+  X(47,49), X(48,50), X(51,53), X(52,54), X(55,57), X(56,58), X(59,61), X(60,62),
+  X(63,65), X(64,66), X(67,69), X(68,70), X(71,73), X(72,74), X(75,77), X(76,78),
+  X(79,81), X(80,82), X(83,85), X(84,86), X(87,89), X(88,90), X(91,93), X(92,94),
+  X(95,97), X(96,98), X(99,101), X(100,102), X(103,105), X(104,106), X(107,109),
+  X(108,110), X(111,113), X(112,114), X(115,117), X(116,118), X(119,121),
+  X(120,122), X(123,125), X(124,126), X(127,129), X(128,130), X(131,133),
+  X(132,134), X(135,137), X(136,138), X(139,141), X(140,142), X(143,145),
+  X(144,146), X(147,149), X(148,150), X(151,153), X(152,154), X(155,157),
+  X(156,158), X(159,161), X(160,162), X(163,165), X(164,166), X(167,169),
+  X(168,170), X(171,173), X(172,174), X(175,177), X(176,178), X(179,181),
+  X(180,182), X(183,185), X(184,186), X(187,189), X(188,190), X(191,193),
+  X(192,194), X(195,197), X(196,198), X(199,201), X(200,202), X(203,205),
+  X(204,206), X(207,209), X(208,210), X(211,213), X(212,214), X(215,217),
+  X(216,218), X(219,221), X(220,222), X(223,225), X(224,226), X(227,229),
+  X(228,230), X(231,233), X(232,234), X(235,237), X(236,238), X(239,241),
+  X(240,242), X(243,245), X(244,246), X(247,249), X(248,250), X(1,2), X(3,4),
+  X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18), X(19,20),
+  X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34), X(35,36),
+  X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50), X(51,52),
+  X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66), X(67,68),
+  X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82), X(83,84),
+  X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(221,222), X(223,224), X(225,226), X(227,228), X(229,230),
+  X(231,232), X(233,234), X(235,236), X(237,238), X(239,240), X(241,242),
+  X(243,244), X(245,246), X(247,248), X(249,250), X(251,252), X(2,129), X(4,131),
+  X(6,133), X(8,135), X(10,137), X(12,139), X(14,141), X(16,143), X(18,145),
+  X(20,147), X(22,149), X(24,151), X(26,153), X(28,155), X(30,157), X(32,159),
+  X(34,161), X(36,163), X(38,165), X(40,167), X(42,169), X(44,171), X(46,173),
+  X(48,175), X(50,177), X(52,179), X(54,181), X(56,183), X(58,185), X(60,187),
+  X(62,189), X(64,191), X(66,193), X(68,195), X(70,197), X(72,199), X(74,201),
+  X(76,203), X(78,205), X(80,207), X(82,209), X(84,211), X(86,213), X(88,215),
+  X(90,217), X(92,219), X(94,221), X(96,223), X(98,225), X(100,227), X(102,229),
+  X(104,231), X(106,233), X(108,235), X(110,237), X(112,239), X(114,241),
+  X(116,243), X(118,245), X(120,247), X(122,249), X(124,251), X(2,65), X(4,67),
+  X(6,69), X(8,71), X(10,73), X(12,75), X(14,77), X(16,79), X(18,81), X(20,83),
+  X(22,85), X(24,87), X(26,89), X(28,91), X(30,93), X(32,95), X(34,97), X(36,99),
+  X(38,101), X(40,103), X(42,105), X(44,107), X(46,109), X(48,111), X(50,113),
+  X(52,115), X(54,117), X(56,119), X(58,121), X(60,123), X(62,125), X(64,127),
+  X(66,129), X(68,131), X(70,133), X(72,135), X(74,137), X(76,139), X(78,141),
+  X(80,143), X(82,145), X(84,147), X(86,149), X(88,151), X(90,153), X(92,155),
+  X(94,157), X(96,159), X(98,161), X(100,163), X(102,165), X(104,167),
+  X(106,169), X(108,171), X(110,173), X(112,175), X(114,177), X(116,179),
+  X(118,181), X(120,183), X(122,185), X(124,187), X(126,189), X(128,191),
+  X(130,193), X(132,195), X(134,197), X(136,199), X(138,201), X(140,203),
+  X(142,205), X(144,207), X(146,209), X(148,211), X(150,213), X(152,215),
+  X(154,217), X(156,219), X(158,221), X(160,223), X(162,225), X(164,227),
+  X(166,229), X(168,231), X(170,233), X(172,235), X(174,237), X(176,239),
+  X(178,241), X(180,243), X(182,245), X(184,247), X(186,249), X(188,251),
+  X(2,33), X(4,35), X(6,37), X(8,39), X(10,41), X(12,43), X(14,45), X(16,47),
+  X(18,49), X(20,51), X(22,53), X(24,55), X(26,57), X(28,59), X(30,61), X(32,63),
+  X(34,65), X(36,67), X(38,69), X(40,71), X(42,73), X(44,75), X(46,77), X(48,79),
+  X(50,81), X(52,83), X(54,85), X(56,87), X(58,89), X(60,91), X(62,93), X(64,95),
+  X(66,97), X(68,99), X(70,101), X(72,103), X(74,105), X(76,107), X(78,109),
+  X(80,111), X(82,113), X(84,115), X(86,117), X(88,119), X(90,121), X(92,123),
+  X(94,125), X(96,127), X(98,129), X(100,131), X(102,133), X(104,135),
+  X(106,137), X(108,139), X(110,141), X(112,143), X(114,145), X(116,147),
+  X(118,149), X(120,151), X(122,153), X(124,155), X(126,157), X(128,159),
+  X(130,161), X(132,163), X(134,165), X(136,167), X(138,169), X(140,171),
+  X(142,173), X(144,175), X(146,177), X(148,179), X(150,181), X(152,183),
+  X(154,185), X(156,187), X(158,189), X(160,191), X(162,193), X(164,195),
+  X(166,197), X(168,199), X(170,201), X(172,203), X(174,205), X(176,207),
+  X(178,209), X(180,211), X(182,213), X(184,215), X(186,217), X(188,219),
+  X(190,221), X(192,223), X(194,225), X(196,227), X(198,229), X(200,231),
+  X(202,233), X(204,235), X(206,237), X(208,239), X(210,241), X(212,243),
+  X(214,245), X(216,247), X(218,249), X(220,251), X(2,17), X(4,19), X(6,21),
+  X(8,23), X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37),
+  X(24,39), X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53),
+  X(40,55), X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69),
+  X(56,71), X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85),
+  X(72,87), X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99),
+  X(86,101), X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113),
+  X(100,115), X(102,117), X(104,119), X(106,121), X(108,123), X(110,125),
+  X(112,127), X(114,129), X(116,131), X(118,133), X(120,135), X(122,137),
+  X(124,139), X(126,141), X(128,143), X(130,145), X(132,147), X(134,149),
+  X(136,151), X(138,153), X(140,155), X(142,157), X(144,159), X(146,161),
+  X(148,163), X(150,165), X(152,167), X(154,169), X(156,171), X(158,173),
+  X(160,175), X(162,177), X(164,179), X(166,181), X(168,183), X(170,185),
+  X(172,187), X(174,189), X(176,191), X(178,193), X(180,195), X(182,197),
+  X(184,199), X(186,201), X(188,203), X(190,205), X(192,207), X(194,209),
+  X(196,211), X(198,213), X(200,215), X(202,217), X(204,219), X(206,221),
+  X(208,223), X(210,225), X(212,227), X(214,229), X(216,231), X(218,233),
+  X(220,235), X(222,237), X(224,239), X(226,241), X(228,243), X(230,245),
+  X(232,247), X(234,249), X(236,251), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(108,115), X(110,117), X(112,119), X(114,121),
+  X(116,123), X(118,125), X(120,127), X(122,129), X(124,131), X(126,133),
+  X(128,135), X(130,137), X(132,139), X(134,141), X(136,143), X(138,145),
+  X(140,147), X(142,149), X(144,151), X(146,153), X(148,155), X(150,157),
+  X(152,159), X(154,161), X(156,163), X(158,165), X(160,167), X(162,169),
+  X(164,171), X(166,173), X(168,175), X(170,177), X(172,179), X(174,181),
+  X(176,183), X(178,185), X(180,187), X(182,189), X(184,191), X(186,193),
+  X(188,195), X(190,197), X(192,199), X(194,201), X(196,203), X(198,205),
+  X(200,207), X(202,209), X(204,211), X(206,213), X(208,215), X(210,217),
+  X(212,219), X(214,221), X(216,223), X(218,225), X(220,227), X(222,229),
+  X(224,231), X(226,233), X(228,235), X(230,237), X(232,239), X(234,241),
+  X(236,243), X(238,245), X(240,247), X(242,249), X(244,251), X(2,5), X(4,7),
+  X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21), X(20,23),
+  X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37), X(36,39),
+  X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53), X(52,55),
+  X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69), X(68,71),
+  X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85), X(84,87),
+  X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99), X(98,101),
+  X(100,103), X(102,105), X(104,107), X(106,109), X(108,111), X(110,113),
+  X(112,115), X(114,117), X(116,119), X(118,121), X(120,123), X(122,125),
+  X(124,127), X(126,129), X(128,131), X(130,133), X(132,135), X(134,137),
+  X(136,139), X(138,141), X(140,143), X(142,145), X(144,147), X(146,149),
+  X(148,151), X(150,153), X(152,155), X(154,157), X(156,159), X(158,161),
+  X(160,163), X(162,165), X(164,167), X(166,169), X(168,171), X(170,173),
+  X(172,175), X(174,177), X(176,179), X(178,181), X(180,183), X(182,185),
+  X(184,187), X(186,189), X(188,191), X(190,193), X(192,195), X(194,197),
+  X(196,199), X(198,201), X(200,203), X(202,205), X(204,207), X(206,209),
+  X(208,211), X(210,213), X(212,215), X(214,217), X(216,219), X(218,221),
+  X(220,223), X(222,225), X(224,227), X(226,229), X(228,231), X(230,233),
+  X(232,235), X(234,237), X(236,239), X(238,241), X(240,243), X(242,245),
+  X(244,247), X(246,249), X(248,251), X(2,3), X(4,5), X(6,7), X(8,9), X(10,11),
+  X(12,13), X(14,15), X(16,17), X(18,19), X(20,21), X(22,23), X(24,25), X(26,27),
+  X(28,29), X(30,31), X(32,33), X(34,35), X(36,37), X(38,39), X(40,41), X(42,43),
+  X(44,45), X(46,47), X(48,49), X(50,51), X(52,53), X(54,55), X(56,57), X(58,59),
+  X(60,61), X(62,63), X(64,65), X(66,67), X(68,69), X(70,71), X(72,73), X(74,75),
+  X(76,77), X(78,79), X(80,81), X(82,83), X(84,85), X(86,87), X(88,89), X(90,91),
+  X(92,93), X(94,95), X(96,97), X(98,99), X(100,101), X(102,103), X(104,105),
+  X(106,107), X(108,109), X(110,111), X(112,113), X(114,115), X(116,117),
+  X(118,119), X(120,121), X(122,123), X(124,125), X(126,127), X(128,129),
+  X(130,131), X(132,133), X(134,135), X(136,137), X(138,139), X(140,141),
+  X(142,143), X(144,145), X(146,147), X(148,149), X(150,151), X(152,153),
+  X(154,155), X(156,157), X(158,159), X(160,161), X(162,163), X(164,165),
+  X(166,167), X(168,169), X(170,171), X(172,173), X(174,175), X(176,177),
+  X(178,179), X(180,181), X(182,183), X(184,185), X(186,187), X(188,189),
+  X(190,191), X(192,193), X(194,195), X(196,197), X(198,199), X(200,201),
+  X(202,203), X(204,205), X(206,207), X(208,209), X(210,211), X(212,213),
+  X(214,215), X(216,217), X(218,219), X(220,221), X(222,223), X(224,225),
+  X(226,227), X(228,229), X(230,231), X(232,233), X(234,235), X(236,237),
+  X(238,239), X(240,241), X(242,243), X(244,245), X(246,247), X(248,249),
+  X(250,251)
+};
+S(254) = {
+  X(1,129), X(2,130), X(3,131), X(4,132), X(5,133), X(6,134), X(7,135),
+  X(8,136), X(9,137), X(10,138), X(11,139), X(12,140), X(13,141), X(14,142),
+  X(15,143), X(16,144), X(17,145), X(18,146), X(19,147), X(20,148), X(21,149),
+  X(22,150), X(23,151), X(24,152), X(25,153), X(26,154), X(27,155), X(28,156),
+  X(29,157), X(30,158), X(31,159), X(32,160), X(33,161), X(34,162), X(35,163),
+  X(36,164), X(37,165), X(38,166), X(39,167), X(40,168), X(41,169), X(42,170),
+  X(43,171), X(44,172), X(45,173), X(46,174), X(47,175), X(48,176), X(49,177),
+  X(50,178), X(51,179), X(52,180), X(53,181), X(54,182), X(55,183), X(56,184),
+  X(57,185), X(58,186), X(59,187), X(60,188), X(61,189), X(62,190), X(63,191),
+  X(64,192), X(65,193), X(66,194), X(67,195), X(68,196), X(69,197), X(70,198),
+  X(71,199), X(72,200), X(73,201), X(74,202), X(75,203), X(76,204), X(77,205),
+  X(78,206), X(79,207), X(80,208), X(81,209), X(82,210), X(83,211), X(84,212),
+  X(85,213), X(86,214), X(87,215), X(88,216), X(89,217), X(90,218), X(91,219),
+  X(92,220), X(93,221), X(94,222), X(95,223), X(96,224), X(97,225), X(98,226),
+  X(99,227), X(100,228), X(101,229), X(102,230), X(103,231), X(104,232),
+  X(105,233), X(106,234), X(107,235), X(108,236), X(109,237), X(110,238),
+  X(111,239), X(112,240), X(113,241), X(114,242), X(115,243), X(116,244),
+  X(117,245), X(118,246), X(119,247), X(120,248), X(121,249), X(122,250),
+  X(123,251), X(124,252), X(125,253), X(126,254), X(1,65), X(2,66), X(3,67),
+  X(4,68), X(5,69), X(6,70), X(7,71), X(8,72), X(9,73), X(10,74), X(11,75),
+  X(12,76), X(13,77), X(14,78), X(15,79), X(16,80), X(17,81), X(18,82), X(19,83),
+  X(20,84), X(21,85), X(22,86), X(23,87), X(24,88), X(25,89), X(26,90), X(27,91),
+  X(28,92), X(29,93), X(30,94), X(31,95), X(32,96), X(33,97), X(34,98), X(35,99),
+  X(36,100), X(37,101), X(38,102), X(39,103), X(40,104), X(41,105), X(42,106),
+  X(43,107), X(44,108), X(45,109), X(46,110), X(47,111), X(48,112), X(49,113),
+  X(50,114), X(51,115), X(52,116), X(53,117), X(54,118), X(55,119), X(56,120),
+  X(57,121), X(58,122), X(59,123), X(60,124), X(61,125), X(62,126), X(63,127),
+  X(64,128), X(129,193), X(130,194), X(131,195), X(132,196), X(133,197),
+  X(134,198), X(135,199), X(136,200), X(137,201), X(138,202), X(139,203),
+  X(140,204), X(141,205), X(142,206), X(143,207), X(144,208), X(145,209),
+  X(146,210), X(147,211), X(148,212), X(149,213), X(150,214), X(151,215),
+  X(152,216), X(153,217), X(154,218), X(155,219), X(156,220), X(157,221),
+  X(158,222), X(159,223), X(160,224), X(161,225), X(162,226), X(163,227),
+  X(164,228), X(165,229), X(166,230), X(167,231), X(168,232), X(169,233),
+  X(170,234), X(171,235), X(172,236), X(173,237), X(174,238), X(175,239),
+  X(176,240), X(177,241), X(178,242), X(179,243), X(180,244), X(181,245),
+  X(182,246), X(183,247), X(184,248), X(185,249), X(186,250), X(187,251),
+  X(188,252), X(189,253), X(190,254), X(65,129), X(66,130), X(67,131), X(68,132),
+  X(69,133), X(70,134), X(71,135), X(72,136), X(73,137), X(74,138), X(75,139),
+  X(76,140), X(77,141), X(78,142), X(79,143), X(80,144), X(81,145), X(82,146),
+  X(83,147), X(84,148), X(85,149), X(86,150), X(87,151), X(88,152), X(89,153),
+  X(90,154), X(91,155), X(92,156), X(93,157), X(94,158), X(95,159), X(96,160),
+  X(97,161), X(98,162), X(99,163), X(100,164), X(101,165), X(102,166),
+  X(103,167), X(104,168), X(105,169), X(106,170), X(107,171), X(108,172),
+  X(109,173), X(110,174), X(111,175), X(112,176), X(113,177), X(114,178),
+  X(115,179), X(116,180), X(117,181), X(118,182), X(119,183), X(120,184),
+  X(121,185), X(122,186), X(123,187), X(124,188), X(125,189), X(126,190),
+  X(127,191), X(128,192), X(1,33), X(2,34), X(3,35), X(4,36), X(5,37), X(6,38),
+  X(7,39), X(8,40), X(9,41), X(10,42), X(11,43), X(12,44), X(13,45), X(14,46),
+  X(15,47), X(16,48), X(17,49), X(18,50), X(19,51), X(20,52), X(21,53), X(22,54),
+  X(23,55), X(24,56), X(25,57), X(26,58), X(27,59), X(28,60), X(29,61), X(30,62),
+  X(31,63), X(32,64), X(65,97), X(66,98), X(67,99), X(68,100), X(69,101),
+  X(70,102), X(71,103), X(72,104), X(73,105), X(74,106), X(75,107), X(76,108),
+  X(77,109), X(78,110), X(79,111), X(80,112), X(81,113), X(82,114), X(83,115),
+  X(84,116), X(85,117), X(86,118), X(87,119), X(88,120), X(89,121), X(90,122),
+  X(91,123), X(92,124), X(93,125), X(94,126), X(95,127), X(96,128), X(129,161),
+  X(130,162), X(131,163), X(132,164), X(133,165), X(134,166), X(135,167),
+  X(136,168), X(137,169), X(138,170), X(139,171), X(140,172), X(141,173),
+  X(142,174), X(143,175), X(144,176), X(145,177), X(146,178), X(147,179),
+  X(148,180), X(149,181), X(150,182), X(151,183), X(152,184), X(153,185),
+  X(154,186), X(155,187), X(156,188), X(157,189), X(158,190), X(159,191),
+  X(160,192), X(193,225), X(194,226), X(195,227), X(196,228), X(197,229),
+  X(198,230), X(199,231), X(200,232), X(201,233), X(202,234), X(203,235),
+  X(204,236), X(205,237), X(206,238), X(207,239), X(208,240), X(209,241),
+  X(210,242), X(211,243), X(212,244), X(213,245), X(214,246), X(215,247),
+  X(216,248), X(217,249), X(218,250), X(219,251), X(220,252), X(221,253),
+  X(222,254), X(33,129), X(34,130), X(35,131), X(36,132), X(37,133), X(38,134),
+  X(39,135), X(40,136), X(41,137), X(42,138), X(43,139), X(44,140), X(45,141),
+  X(46,142), X(47,143), X(48,144), X(49,145), X(50,146), X(51,147), X(52,148),
+  X(53,149), X(54,150), X(55,151), X(56,152), X(57,153), X(58,154), X(59,155),
+  X(60,156), X(61,157), X(62,158), X(63,159), X(64,160), X(97,193), X(98,194),
+  X(99,195), X(100,196), X(101,197), X(102,198), X(103,199), X(104,200),
+  X(105,201), X(106,202), X(107,203), X(108,204), X(109,205), X(110,206),
+  X(111,207), X(112,208), X(113,209), X(114,210), X(115,211), X(116,212),
+  X(117,213), X(118,214), X(119,215), X(120,216), X(121,217), X(122,218),
+  X(123,219), X(124,220), X(125,221), X(126,222), X(127,223), X(128,224),
+  X(33,65), X(34,66), X(35,67), X(36,68), X(37,69), X(38,70), X(39,71), X(40,72),
+  X(41,73), X(42,74), X(43,75), X(44,76), X(45,77), X(46,78), X(47,79), X(48,80),
+  X(49,81), X(50,82), X(51,83), X(52,84), X(53,85), X(54,86), X(55,87), X(56,88),
+  X(57,89), X(58,90), X(59,91), X(60,92), X(61,93), X(62,94), X(63,95), X(64,96),
+  X(97,129), X(98,130), X(99,131), X(100,132), X(101,133), X(102,134),
+  X(103,135), X(104,136), X(105,137), X(106,138), X(107,139), X(108,140),
+  X(109,141), X(110,142), X(111,143), X(112,144), X(113,145), X(114,146),
+  X(115,147), X(116,148), X(117,149), X(118,150), X(119,151), X(120,152),
+  X(121,153), X(122,154), X(123,155), X(124,156), X(125,157), X(126,158),
+  X(127,159), X(128,160), X(161,193), X(162,194), X(163,195), X(164,196),
+  X(165,197), X(166,198), X(167,199), X(168,200), X(169,201), X(170,202),
+  X(171,203), X(172,204), X(173,205), X(174,206), X(175,207), X(176,208),
+  X(177,209), X(178,210), X(179,211), X(180,212), X(181,213), X(182,214),
+  X(183,215), X(184,216), X(185,217), X(186,218), X(187,219), X(188,220),
+  X(189,221), X(190,222), X(191,223), X(192,224), X(1,17), X(2,18), X(3,19),
+  X(4,20), X(5,21), X(6,22), X(7,23), X(8,24), X(9,25), X(10,26), X(11,27),
+  X(12,28), X(13,29), X(14,30), X(15,31), X(16,32), X(33,49), X(34,50), X(35,51),
+  X(36,52), X(37,53), X(38,54), X(39,55), X(40,56), X(41,57), X(42,58), X(43,59),
+  X(44,60), X(45,61), X(46,62), X(47,63), X(48,64), X(65,81), X(66,82), X(67,83),
+  X(68,84), X(69,85), X(70,86), X(71,87), X(72,88), X(73,89), X(74,90), X(75,91),
+  X(76,92), X(77,93), X(78,94), X(79,95), X(80,96), X(97,113), X(98,114),
+  X(99,115), X(100,116), X(101,117), X(102,118), X(103,119), X(104,120),
+  X(105,121), X(106,122), X(107,123), X(108,124), X(109,125), X(110,126),
+  X(111,127), X(112,128), X(129,145), X(130,146), X(131,147), X(132,148),
+  X(133,149), X(134,150), X(135,151), X(136,152), X(137,153), X(138,154),
+  X(139,155), X(140,156), X(141,157), X(142,158), X(143,159), X(144,160),
+  X(161,177), X(162,178), X(163,179), X(164,180), X(165,181), X(166,182),
+  X(167,183), X(168,184), X(169,185), X(170,186), X(171,187), X(172,188),
+  X(173,189), X(174,190), X(175,191), X(176,192), X(193,209), X(194,210),
+  X(195,211), X(196,212), X(197,213), X(198,214), X(199,215), X(200,216),
+  X(201,217), X(202,218), X(203,219), X(204,220), X(205,221), X(206,222),
+  X(207,223), X(208,224), X(225,241), X(226,242), X(227,243), X(228,244),
+  X(229,245), X(230,246), X(231,247), X(232,248), X(233,249), X(234,250),
+  X(235,251), X(236,252), X(237,253), X(238,254), X(17,129), X(18,130),
+  X(19,131), X(20,132), X(21,133), X(22,134), X(23,135), X(24,136), X(25,137),
+  X(26,138), X(27,139), X(28,140), X(29,141), X(30,142), X(31,143), X(32,144),
+  X(49,161), X(50,162), X(51,163), X(52,164), X(53,165), X(54,166), X(55,167),
+  X(56,168), X(57,169), X(58,170), X(59,171), X(60,172), X(61,173), X(62,174),
+  X(63,175), X(64,176), X(81,193), X(82,194), X(83,195), X(84,196), X(85,197),
+  X(86,198), X(87,199), X(88,200), X(89,201), X(90,202), X(91,203), X(92,204),
+  X(93,205), X(94,206), X(95,207), X(96,208), X(113,225), X(114,226), X(115,227),
+  X(116,228), X(117,229), X(118,230), X(119,231), X(120,232), X(121,233),
+  X(122,234), X(123,235), X(124,236), X(125,237), X(126,238), X(127,239),
+  X(128,240), X(17,65), X(18,66), X(19,67), X(20,68), X(21,69), X(22,70),
+  X(23,71), X(24,72), X(25,73), X(26,74), X(27,75), X(28,76), X(29,77), X(30,78),
+  X(31,79), X(32,80), X(49,97), X(50,98), X(51,99), X(52,100), X(53,101),
+  X(54,102), X(55,103), X(56,104), X(57,105), X(58,106), X(59,107), X(60,108),
+  X(61,109), X(62,110), X(63,111), X(64,112), X(81,129), X(82,130), X(83,131),
+  X(84,132), X(85,133), X(86,134), X(87,135), X(88,136), X(89,137), X(90,138),
+  X(91,139), X(92,140), X(93,141), X(94,142), X(95,143), X(96,144), X(113,161),
+  X(114,162), X(115,163), X(116,164), X(117,165), X(118,166), X(119,167),
+  X(120,168), X(121,169), X(122,170), X(123,171), X(124,172), X(125,173),
+  X(126,174), X(127,175), X(128,176), X(145,193), X(146,194), X(147,195),
+  X(148,196), X(149,197), X(150,198), X(151,199), X(152,200), X(153,201),
+  X(154,202), X(155,203), X(156,204), X(157,205), X(158,206), X(159,207),
+  X(160,208), X(177,225), X(178,226), X(179,227), X(180,228), X(181,229),
+  X(182,230), X(183,231), X(184,232), X(185,233), X(186,234), X(187,235),
+  X(188,236), X(189,237), X(190,238), X(191,239), X(192,240), X(17,33), X(18,34),
+  X(19,35), X(20,36), X(21,37), X(22,38), X(23,39), X(24,40), X(25,41), X(26,42),
+  X(27,43), X(28,44), X(29,45), X(30,46), X(31,47), X(32,48), X(49,65), X(50,66),
+  X(51,67), X(52,68), X(53,69), X(54,70), X(55,71), X(56,72), X(57,73), X(58,74),
+  X(59,75), X(60,76), X(61,77), X(62,78), X(63,79), X(64,80), X(81,97), X(82,98),
+  X(83,99), X(84,100), X(85,101), X(86,102), X(87,103), X(88,104), X(89,105),
+  X(90,106), X(91,107), X(92,108), X(93,109), X(94,110), X(95,111), X(96,112),
+  X(113,129), X(114,130), X(115,131), X(116,132), X(117,133), X(118,134),
+  X(119,135), X(120,136), X(121,137), X(122,138), X(123,139), X(124,140),
+  X(125,141), X(126,142), X(127,143), X(128,144), X(145,161), X(146,162),
+  X(147,163), X(148,164), X(149,165), X(150,166), X(151,167), X(152,168),
+  X(153,169), X(154,170), X(155,171), X(156,172), X(157,173), X(158,174),
+  X(159,175), X(160,176), X(177,193), X(178,194), X(179,195), X(180,196),
+  X(181,197), X(182,198), X(183,199), X(184,200), X(185,201), X(186,202),
+  X(187,203), X(188,204), X(189,205), X(190,206), X(191,207), X(192,208),
+  X(209,225), X(210,226), X(211,227), X(212,228), X(213,229), X(214,230),
+  X(215,231), X(216,232), X(217,233), X(218,234), X(219,235), X(220,236),
+  X(221,237), X(222,238), X(223,239), X(224,240), X(1,9), X(2,10), X(3,11),
+  X(4,12), X(5,13), X(6,14), X(7,15), X(8,16), X(17,25), X(18,26), X(19,27),
+  X(20,28), X(21,29), X(22,30), X(23,31), X(24,32), X(33,41), X(34,42), X(35,43),
+  X(36,44), X(37,45), X(38,46), X(39,47), X(40,48), X(49,57), X(50,58), X(51,59),
+  X(52,60), X(53,61), X(54,62), X(55,63), X(56,64), X(65,73), X(66,74), X(67,75),
+  X(68,76), X(69,77), X(70,78), X(71,79), X(72,80), X(81,89), X(82,90), X(83,91),
+  X(84,92), X(85,93), X(86,94), X(87,95), X(88,96), X(97,105), X(98,106),
+  X(99,107), X(100,108), X(101,109), X(102,110), X(103,111), X(104,112),
+  X(113,121), X(114,122), X(115,123), X(116,124), X(117,125), X(118,126),
+  X(119,127), X(120,128), X(129,137), X(130,138), X(131,139), X(132,140),
+  X(133,141), X(134,142), X(135,143), X(136,144), X(145,153), X(146,154),
+  X(147,155), X(148,156), X(149,157), X(150,158), X(151,159), X(152,160),
+  X(161,169), X(162,170), X(163,171), X(164,172), X(165,173), X(166,174),
+  X(167,175), X(168,176), X(177,185), X(178,186), X(179,187), X(180,188),
+  X(181,189), X(182,190), X(183,191), X(184,192), X(193,201), X(194,202),
+  X(195,203), X(196,204), X(197,205), X(198,206), X(199,207), X(200,208),
+  X(209,217), X(210,218), X(211,219), X(212,220), X(213,221), X(214,222),
+  X(215,223), X(216,224), X(225,233), X(226,234), X(227,235), X(228,236),
+  X(229,237), X(230,238), X(231,239), X(232,240), X(241,249), X(242,250),
+  X(243,251), X(244,252), X(245,253), X(246,254), X(9,129), X(10,130), X(11,131),
+  X(12,132), X(13,133), X(14,134), X(15,135), X(16,136), X(25,145), X(26,146),
+  X(27,147), X(28,148), X(29,149), X(30,150), X(31,151), X(32,152), X(41,161),
+  X(42,162), X(43,163), X(44,164), X(45,165), X(46,166), X(47,167), X(48,168),
+  X(57,177), X(58,178), X(59,179), X(60,180), X(61,181), X(62,182), X(63,183),
+  X(64,184), X(73,193), X(74,194), X(75,195), X(76,196), X(77,197), X(78,198),
+  X(79,199), X(80,200), X(89,209), X(90,210), X(91,211), X(92,212), X(93,213),
+  X(94,214), X(95,215), X(96,216), X(105,225), X(106,226), X(107,227),
+  X(108,228), X(109,229), X(110,230), X(111,231), X(112,232), X(121,241),
+  X(122,242), X(123,243), X(124,244), X(125,245), X(126,246), X(127,247),
+  X(128,248), X(9,65), X(10,66), X(11,67), X(12,68), X(13,69), X(14,70),
+  X(15,71), X(16,72), X(25,81), X(26,82), X(27,83), X(28,84), X(29,85), X(30,86),
+  X(31,87), X(32,88), X(41,97), X(42,98), X(43,99), X(44,100), X(45,101),
+  X(46,102), X(47,103), X(48,104), X(57,113), X(58,114), X(59,115), X(60,116),
+  X(61,117), X(62,118), X(63,119), X(64,120), X(73,129), X(74,130), X(75,131),
+  X(76,132), X(77,133), X(78,134), X(79,135), X(80,136), X(89,145), X(90,146),
+  X(91,147), X(92,148), X(93,149), X(94,150), X(95,151), X(96,152), X(105,161),
+  X(106,162), X(107,163), X(108,164), X(109,165), X(110,166), X(111,167),
+  X(112,168), X(121,177), X(122,178), X(123,179), X(124,180), X(125,181),
+  X(126,182), X(127,183), X(128,184), X(137,193), X(138,194), X(139,195),
+  X(140,196), X(141,197), X(142,198), X(143,199), X(144,200), X(153,209),
+  X(154,210), X(155,211), X(156,212), X(157,213), X(158,214), X(159,215),
+  X(160,216), X(169,225), X(170,226), X(171,227), X(172,228), X(173,229),
+  X(174,230), X(175,231), X(176,232), X(185,241), X(186,242), X(187,243),
+  X(188,244), X(189,245), X(190,246), X(191,247), X(192,248), X(9,33), X(10,34),
+  X(11,35), X(12,36), X(13,37), X(14,38), X(15,39), X(16,40), X(25,49), X(26,50),
+  X(27,51), X(28,52), X(29,53), X(30,54), X(31,55), X(32,56), X(41,65), X(42,66),
+  X(43,67), X(44,68), X(45,69), X(46,70), X(47,71), X(48,72), X(57,81), X(58,82),
+  X(59,83), X(60,84), X(61,85), X(62,86), X(63,87), X(64,88), X(73,97), X(74,98),
+  X(75,99), X(76,100), X(77,101), X(78,102), X(79,103), X(80,104), X(89,113),
+  X(90,114), X(91,115), X(92,116), X(93,117), X(94,118), X(95,119), X(96,120),
+  X(105,129), X(106,130), X(107,131), X(108,132), X(109,133), X(110,134),
+  X(111,135), X(112,136), X(121,145), X(122,146), X(123,147), X(124,148),
+  X(125,149), X(126,150), X(127,151), X(128,152), X(137,161), X(138,162),
+  X(139,163), X(140,164), X(141,165), X(142,166), X(143,167), X(144,168),
+  X(153,177), X(154,178), X(155,179), X(156,180), X(157,181), X(158,182),
+  X(159,183), X(160,184), X(169,193), X(170,194), X(171,195), X(172,196),
+  X(173,197), X(174,198), X(175,199), X(176,200), X(185,209), X(186,210),
+  X(187,211), X(188,212), X(189,213), X(190,214), X(191,215), X(192,216),
+  X(201,225), X(202,226), X(203,227), X(204,228), X(205,229), X(206,230),
+  X(207,231), X(208,232), X(217,241), X(218,242), X(219,243), X(220,244),
+  X(221,245), X(222,246), X(223,247), X(224,248), X(9,17), X(10,18), X(11,19),
+  X(12,20), X(13,21), X(14,22), X(15,23), X(16,24), X(25,33), X(26,34), X(27,35),
+  X(28,36), X(29,37), X(30,38), X(31,39), X(32,40), X(41,49), X(42,50), X(43,51),
+  X(44,52), X(45,53), X(46,54), X(47,55), X(48,56), X(57,65), X(58,66), X(59,67),
+  X(60,68), X(61,69), X(62,70), X(63,71), X(64,72), X(73,81), X(74,82), X(75,83),
+  X(76,84), X(77,85), X(78,86), X(79,87), X(80,88), X(89,97), X(90,98), X(91,99),
+  X(92,100), X(93,101), X(94,102), X(95,103), X(96,104), X(105,113), X(106,114),
+  X(107,115), X(108,116), X(109,117), X(110,118), X(111,119), X(112,120),
+  X(121,129), X(122,130), X(123,131), X(124,132), X(125,133), X(126,134),
+  X(127,135), X(128,136), X(137,145), X(138,146), X(139,147), X(140,148),
+  X(141,149), X(142,150), X(143,151), X(144,152), X(153,161), X(154,162),
+  X(155,163), X(156,164), X(157,165), X(158,166), X(159,167), X(160,168),
+  X(169,177), X(170,178), X(171,179), X(172,180), X(173,181), X(174,182),
+  X(175,183), X(176,184), X(185,193), X(186,194), X(187,195), X(188,196),
+  X(189,197), X(190,198), X(191,199), X(192,200), X(201,209), X(202,210),
+  X(203,211), X(204,212), X(205,213), X(206,214), X(207,215), X(208,216),
+  X(217,225), X(218,226), X(219,227), X(220,228), X(221,229), X(222,230),
+  X(223,231), X(224,232), X(233,241), X(234,242), X(235,243), X(236,244),
+  X(237,245), X(238,246), X(239,247), X(240,248), X(1,5), X(2,6), X(3,7), X(4,8),
+  X(9,13), X(10,14), X(11,15), X(12,16), X(17,21), X(18,22), X(19,23), X(20,24),
+  X(25,29), X(26,30), X(27,31), X(28,32), X(33,37), X(34,38), X(35,39), X(36,40),
+  X(41,45), X(42,46), X(43,47), X(44,48), X(49,53), X(50,54), X(51,55), X(52,56),
+  X(57,61), X(58,62), X(59,63), X(60,64), X(65,69), X(66,70), X(67,71), X(68,72),
+  X(73,77), X(74,78), X(75,79), X(76,80), X(81,85), X(82,86), X(83,87), X(84,88),
+  X(89,93), X(90,94), X(91,95), X(92,96), X(97,101), X(98,102), X(99,103),
+  X(100,104), X(105,109), X(106,110), X(107,111), X(108,112), X(113,117),
+  X(114,118), X(115,119), X(116,120), X(121,125), X(122,126), X(123,127),
+  X(124,128), X(129,133), X(130,134), X(131,135), X(132,136), X(137,141),
+  X(138,142), X(139,143), X(140,144), X(145,149), X(146,150), X(147,151),
+  X(148,152), X(153,157), X(154,158), X(155,159), X(156,160), X(161,165),
+  X(162,166), X(163,167), X(164,168), X(169,173), X(170,174), X(171,175),
+  X(172,176), X(177,181), X(178,182), X(179,183), X(180,184), X(185,189),
+  X(186,190), X(187,191), X(188,192), X(193,197), X(194,198), X(195,199),
+  X(196,200), X(201,205), X(202,206), X(203,207), X(204,208), X(209,213),
+  X(210,214), X(211,215), X(212,216), X(217,221), X(218,222), X(219,223),
+  X(220,224), X(225,229), X(226,230), X(227,231), X(228,232), X(233,237),
+  X(234,238), X(235,239), X(236,240), X(241,245), X(242,246), X(243,247),
+  X(244,248), X(249,253), X(250,254), X(5,129), X(6,130), X(7,131), X(8,132),
+  X(13,137), X(14,138), X(15,139), X(16,140), X(21,145), X(22,146), X(23,147),
+  X(24,148), X(29,153), X(30,154), X(31,155), X(32,156), X(37,161), X(38,162),
+  X(39,163), X(40,164), X(45,169), X(46,170), X(47,171), X(48,172), X(53,177),
+  X(54,178), X(55,179), X(56,180), X(61,185), X(62,186), X(63,187), X(64,188),
+  X(69,193), X(70,194), X(71,195), X(72,196), X(77,201), X(78,202), X(79,203),
+  X(80,204), X(85,209), X(86,210), X(87,211), X(88,212), X(93,217), X(94,218),
+  X(95,219), X(96,220), X(101,225), X(102,226), X(103,227), X(104,228),
+  X(109,233), X(110,234), X(111,235), X(112,236), X(117,241), X(118,242),
+  X(119,243), X(120,244), X(125,249), X(126,250), X(127,251), X(128,252),
+  X(5,65), X(6,66), X(7,67), X(8,68), X(13,73), X(14,74), X(15,75), X(16,76),
+  X(21,81), X(22,82), X(23,83), X(24,84), X(29,89), X(30,90), X(31,91), X(32,92),
+  X(37,97), X(38,98), X(39,99), X(40,100), X(45,105), X(46,106), X(47,107),
+  X(48,108), X(53,113), X(54,114), X(55,115), X(56,116), X(61,121), X(62,122),
+  X(63,123), X(64,124), X(69,129), X(70,130), X(71,131), X(72,132), X(77,137),
+  X(78,138), X(79,139), X(80,140), X(85,145), X(86,146), X(87,147), X(88,148),
+  X(93,153), X(94,154), X(95,155), X(96,156), X(101,161), X(102,162), X(103,163),
+  X(104,164), X(109,169), X(110,170), X(111,171), X(112,172), X(117,177),
+  X(118,178), X(119,179), X(120,180), X(125,185), X(126,186), X(127,187),
+  X(128,188), X(133,193), X(134,194), X(135,195), X(136,196), X(141,201),
+  X(142,202), X(143,203), X(144,204), X(149,209), X(150,210), X(151,211),
+  X(152,212), X(157,217), X(158,218), X(159,219), X(160,220), X(165,225),
+  X(166,226), X(167,227), X(168,228), X(173,233), X(174,234), X(175,235),
+  X(176,236), X(181,241), X(182,242), X(183,243), X(184,244), X(189,249),
+  X(190,250), X(191,251), X(192,252), X(5,33), X(6,34), X(7,35), X(8,36),
+  X(13,41), X(14,42), X(15,43), X(16,44), X(21,49), X(22,50), X(23,51), X(24,52),
+  X(29,57), X(30,58), X(31,59), X(32,60), X(37,65), X(38,66), X(39,67), X(40,68),
+  X(45,73), X(46,74), X(47,75), X(48,76), X(53,81), X(54,82), X(55,83), X(56,84),
+  X(61,89), X(62,90), X(63,91), X(64,92), X(69,97), X(70,98), X(71,99),
+  X(72,100), X(77,105), X(78,106), X(79,107), X(80,108), X(85,113), X(86,114),
+  X(87,115), X(88,116), X(93,121), X(94,122), X(95,123), X(96,124), X(101,129),
+  X(102,130), X(103,131), X(104,132), X(109,137), X(110,138), X(111,139),
+  X(112,140), X(117,145), X(118,146), X(119,147), X(120,148), X(125,153),
+  X(126,154), X(127,155), X(128,156), X(133,161), X(134,162), X(135,163),
+  X(136,164), X(141,169), X(142,170), X(143,171), X(144,172), X(149,177),
+  X(150,178), X(151,179), X(152,180), X(157,185), X(158,186), X(159,187),
+  X(160,188), X(165,193), X(166,194), X(167,195), X(168,196), X(173,201),
+  X(174,202), X(175,203), X(176,204), X(181,209), X(182,210), X(183,211),
+  X(184,212), X(189,217), X(190,218), X(191,219), X(192,220), X(197,225),
+  X(198,226), X(199,227), X(200,228), X(205,233), X(206,234), X(207,235),
+  X(208,236), X(213,241), X(214,242), X(215,243), X(216,244), X(221,249),
+  X(222,250), X(223,251), X(224,252), X(5,17), X(6,18), X(7,19), X(8,20),
+  X(13,25), X(14,26), X(15,27), X(16,28), X(21,33), X(22,34), X(23,35), X(24,36),
+  X(29,41), X(30,42), X(31,43), X(32,44), X(37,49), X(38,50), X(39,51), X(40,52),
+  X(45,57), X(46,58), X(47,59), X(48,60), X(53,65), X(54,66), X(55,67), X(56,68),
+  X(61,73), X(62,74), X(63,75), X(64,76), X(69,81), X(70,82), X(71,83), X(72,84),
+  X(77,89), X(78,90), X(79,91), X(80,92), X(85,97), X(86,98), X(87,99),
+  X(88,100), X(93,105), X(94,106), X(95,107), X(96,108), X(101,113), X(102,114),
+  X(103,115), X(104,116), X(109,121), X(110,122), X(111,123), X(112,124),
+  X(117,129), X(118,130), X(119,131), X(120,132), X(125,137), X(126,138),
+  X(127,139), X(128,140), X(133,145), X(134,146), X(135,147), X(136,148),
+  X(141,153), X(142,154), X(143,155), X(144,156), X(149,161), X(150,162),
+  X(151,163), X(152,164), X(157,169), X(158,170), X(159,171), X(160,172),
+  X(165,177), X(166,178), X(167,179), X(168,180), X(173,185), X(174,186),
+  X(175,187), X(176,188), X(181,193), X(182,194), X(183,195), X(184,196),
+  X(189,201), X(190,202), X(191,203), X(192,204), X(197,209), X(198,210),
+  X(199,211), X(200,212), X(205,217), X(206,218), X(207,219), X(208,220),
+  X(213,225), X(214,226), X(215,227), X(216,228), X(221,233), X(222,234),
+  X(223,235), X(224,236), X(229,241), X(230,242), X(231,243), X(232,244),
+  X(237,249), X(238,250), X(239,251), X(240,252), X(5,9), X(6,10), X(7,11),
+  X(8,12), X(13,17), X(14,18), X(15,19), X(16,20), X(21,25), X(22,26), X(23,27),
+  X(24,28), X(29,33), X(30,34), X(31,35), X(32,36), X(37,41), X(38,42), X(39,43),
+  X(40,44), X(45,49), X(46,50), X(47,51), X(48,52), X(53,57), X(54,58), X(55,59),
+  X(56,60), X(61,65), X(62,66), X(63,67), X(64,68), X(69,73), X(70,74), X(71,75),
+  X(72,76), X(77,81), X(78,82), X(79,83), X(80,84), X(85,89), X(86,90), X(87,91),
+  X(88,92), X(93,97), X(94,98), X(95,99), X(96,100), X(101,105), X(102,106),
+  X(103,107), X(104,108), X(109,113), X(110,114), X(111,115), X(112,116),
+  X(117,121), X(118,122), X(119,123), X(120,124), X(125,129), X(126,130),
+  X(127,131), X(128,132), X(133,137), X(134,138), X(135,139), X(136,140),
+  X(141,145), X(142,146), X(143,147), X(144,148), X(149,153), X(150,154),
+  X(151,155), X(152,156), X(157,161), X(158,162), X(159,163), X(160,164),
+  X(165,169), X(166,170), X(167,171), X(168,172), X(173,177), X(174,178),
+  X(175,179), X(176,180), X(181,185), X(182,186), X(183,187), X(184,188),
+  X(189,193), X(190,194), X(191,195), X(192,196), X(197,201), X(198,202),
+  X(199,203), X(200,204), X(205,209), X(206,210), X(207,211), X(208,212),
+  X(213,217), X(214,218), X(215,219), X(216,220), X(221,225), X(222,226),
+  X(223,227), X(224,228), X(229,233), X(230,234), X(231,235), X(232,236),
+  X(237,241), X(238,242), X(239,243), X(240,244), X(245,249), X(246,250),
+  X(247,251), X(248,252), X(1,3), X(2,4), X(5,7), X(6,8), X(9,11), X(10,12),
+  X(13,15), X(14,16), X(17,19), X(18,20), X(21,23), X(22,24), X(25,27), X(26,28),
+  X(29,31), X(30,32), X(33,35), X(34,36), X(37,39), X(38,40), X(41,43), X(42,44),
+  X(45,47), X(46,48), X(49,51), X(50,52), X(53,55), X(54,56), X(57,59), X(58,60),
+  X(61,63), X(62,64), X(65,67), X(66,68), X(69,71), X(70,72), X(73,75), X(74,76),
+  X(77,79), X(78,80), X(81,83), X(82,84), X(85,87), X(86,88), X(89,91), X(90,92),
+  X(93,95), X(94,96), X(97,99), X(98,100), X(101,103), X(102,104), X(105,107),
+  X(106,108), X(109,111), X(110,112), X(113,115), X(114,116), X(117,119),
+  X(118,120), X(121,123), X(122,124), X(125,127), X(126,128), X(129,131),
+  X(130,132), X(133,135), X(134,136), X(137,139), X(138,140), X(141,143),
+  X(142,144), X(145,147), X(146,148), X(149,151), X(150,152), X(153,155),
+  X(154,156), X(157,159), X(158,160), X(161,163), X(162,164), X(165,167),
+  X(166,168), X(169,171), X(170,172), X(173,175), X(174,176), X(177,179),
+  X(178,180), X(181,183), X(182,184), X(185,187), X(186,188), X(189,191),
+  X(190,192), X(193,195), X(194,196), X(197,199), X(198,200), X(201,203),
+  X(202,204), X(205,207), X(206,208), X(209,211), X(210,212), X(213,215),
+  X(214,216), X(217,219), X(218,220), X(221,223), X(222,224), X(225,227),
+  X(226,228), X(229,231), X(230,232), X(233,235), X(234,236), X(237,239),
+  X(238,240), X(241,243), X(242,244), X(245,247), X(246,248), X(249,251),
+  X(250,252), X(3,129), X(4,130), X(7,133), X(8,134), X(11,137), X(12,138),
+  X(15,141), X(16,142), X(19,145), X(20,146), X(23,149), X(24,150), X(27,153),
+  X(28,154), X(31,157), X(32,158), X(35,161), X(36,162), X(39,165), X(40,166),
+  X(43,169), X(44,170), X(47,173), X(48,174), X(51,177), X(52,178), X(55,181),
+  X(56,182), X(59,185), X(60,186), X(63,189), X(64,190), X(67,193), X(68,194),
+  X(71,197), X(72,198), X(75,201), X(76,202), X(79,205), X(80,206), X(83,209),
+  X(84,210), X(87,213), X(88,214), X(91,217), X(92,218), X(95,221), X(96,222),
+  X(99,225), X(100,226), X(103,229), X(104,230), X(107,233), X(108,234),
+  X(111,237), X(112,238), X(115,241), X(116,242), X(119,245), X(120,246),
+  X(123,249), X(124,250), X(127,253), X(128,254), X(3,65), X(4,66), X(7,69),
+  X(8,70), X(11,73), X(12,74), X(15,77), X(16,78), X(19,81), X(20,82), X(23,85),
+  X(24,86), X(27,89), X(28,90), X(31,93), X(32,94), X(35,97), X(36,98),
+  X(39,101), X(40,102), X(43,105), X(44,106), X(47,109), X(48,110), X(51,113),
+  X(52,114), X(55,117), X(56,118), X(59,121), X(60,122), X(63,125), X(64,126),
+  X(67,129), X(68,130), X(71,133), X(72,134), X(75,137), X(76,138), X(79,141),
+  X(80,142), X(83,145), X(84,146), X(87,149), X(88,150), X(91,153), X(92,154),
+  X(95,157), X(96,158), X(99,161), X(100,162), X(103,165), X(104,166),
+  X(107,169), X(108,170), X(111,173), X(112,174), X(115,177), X(116,178),
+  X(119,181), X(120,182), X(123,185), X(124,186), X(127,189), X(128,190),
+  X(131,193), X(132,194), X(135,197), X(136,198), X(139,201), X(140,202),
+  X(143,205), X(144,206), X(147,209), X(148,210), X(151,213), X(152,214),
+  X(155,217), X(156,218), X(159,221), X(160,222), X(163,225), X(164,226),
+  X(167,229), X(168,230), X(171,233), X(172,234), X(175,237), X(176,238),
+  X(179,241), X(180,242), X(183,245), X(184,246), X(187,249), X(188,250),
+  X(191,253), X(192,254), X(3,33), X(4,34), X(7,37), X(8,38), X(11,41), X(12,42),
+  X(15,45), X(16,46), X(19,49), X(20,50), X(23,53), X(24,54), X(27,57), X(28,58),
+  X(31,61), X(32,62), X(35,65), X(36,66), X(39,69), X(40,70), X(43,73), X(44,74),
+  X(47,77), X(48,78), X(51,81), X(52,82), X(55,85), X(56,86), X(59,89), X(60,90),
+  X(63,93), X(64,94), X(67,97), X(68,98), X(71,101), X(72,102), X(75,105),
+  X(76,106), X(79,109), X(80,110), X(83,113), X(84,114), X(87,117), X(88,118),
+  X(91,121), X(92,122), X(95,125), X(96,126), X(99,129), X(100,130), X(103,133),
+  X(104,134), X(107,137), X(108,138), X(111,141), X(112,142), X(115,145),
+  X(116,146), X(119,149), X(120,150), X(123,153), X(124,154), X(127,157),
+  X(128,158), X(131,161), X(132,162), X(135,165), X(136,166), X(139,169),
+  X(140,170), X(143,173), X(144,174), X(147,177), X(148,178), X(151,181),
+  X(152,182), X(155,185), X(156,186), X(159,189), X(160,190), X(163,193),
+  X(164,194), X(167,197), X(168,198), X(171,201), X(172,202), X(175,205),
+  X(176,206), X(179,209), X(180,210), X(183,213), X(184,214), X(187,217),
+  X(188,218), X(191,221), X(192,222), X(195,225), X(196,226), X(199,229),
+  X(200,230), X(203,233), X(204,234), X(207,237), X(208,238), X(211,241),
+  X(212,242), X(215,245), X(216,246), X(219,249), X(220,250), X(223,253),
+  X(224,254), X(3,17), X(4,18), X(7,21), X(8,22), X(11,25), X(12,26), X(15,29),
+  X(16,30), X(19,33), X(20,34), X(23,37), X(24,38), X(27,41), X(28,42), X(31,45),
+  X(32,46), X(35,49), X(36,50), X(39,53), X(40,54), X(43,57), X(44,58), X(47,61),
+  X(48,62), X(51,65), X(52,66), X(55,69), X(56,70), X(59,73), X(60,74), X(63,77),
+  X(64,78), X(67,81), X(68,82), X(71,85), X(72,86), X(75,89), X(76,90), X(79,93),
+  X(80,94), X(83,97), X(84,98), X(87,101), X(88,102), X(91,105), X(92,106),
+  X(95,109), X(96,110), X(99,113), X(100,114), X(103,117), X(104,118),
+  X(107,121), X(108,122), X(111,125), X(112,126), X(115,129), X(116,130),
+  X(119,133), X(120,134), X(123,137), X(124,138), X(127,141), X(128,142),
+  X(131,145), X(132,146), X(135,149), X(136,150), X(139,153), X(140,154),
+  X(143,157), X(144,158), X(147,161), X(148,162), X(151,165), X(152,166),
+  X(155,169), X(156,170), X(159,173), X(160,174), X(163,177), X(164,178),
+  X(167,181), X(168,182), X(171,185), X(172,186), X(175,189), X(176,190),
+  X(179,193), X(180,194), X(183,197), X(184,198), X(187,201), X(188,202),
+  X(191,205), X(192,206), X(195,209), X(196,210), X(199,213), X(200,214),
+  X(203,217), X(204,218), X(207,221), X(208,222), X(211,225), X(212,226),
+  X(215,229), X(216,230), X(219,233), X(220,234), X(223,237), X(224,238),
+  X(227,241), X(228,242), X(231,245), X(232,246), X(235,249), X(236,250),
+  X(239,253), X(240,254), X(3,9), X(4,10), X(7,13), X(8,14), X(11,17), X(12,18),
+  X(15,21), X(16,22), X(19,25), X(20,26), X(23,29), X(24,30), X(27,33), X(28,34),
+  X(31,37), X(32,38), X(35,41), X(36,42), X(39,45), X(40,46), X(43,49), X(44,50),
+  X(47,53), X(48,54), X(51,57), X(52,58), X(55,61), X(56,62), X(59,65), X(60,66),
+  X(63,69), X(64,70), X(67,73), X(68,74), X(71,77), X(72,78), X(75,81), X(76,82),
+  X(79,85), X(80,86), X(83,89), X(84,90), X(87,93), X(88,94), X(91,97), X(92,98),
+  X(95,101), X(96,102), X(99,105), X(100,106), X(103,109), X(104,110),
+  X(107,113), X(108,114), X(111,117), X(112,118), X(115,121), X(116,122),
+  X(119,125), X(120,126), X(123,129), X(124,130), X(127,133), X(128,134),
+  X(131,137), X(132,138), X(135,141), X(136,142), X(139,145), X(140,146),
+  X(143,149), X(144,150), X(147,153), X(148,154), X(151,157), X(152,158),
+  X(155,161), X(156,162), X(159,165), X(160,166), X(163,169), X(164,170),
+  X(167,173), X(168,174), X(171,177), X(172,178), X(175,181), X(176,182),
+  X(179,185), X(180,186), X(183,189), X(184,190), X(187,193), X(188,194),
+  X(191,197), X(192,198), X(195,201), X(196,202), X(199,205), X(200,206),
+  X(203,209), X(204,210), X(207,213), X(208,214), X(211,217), X(212,218),
+  X(215,221), X(216,222), X(219,225), X(220,226), X(223,229), X(224,230),
+  X(227,233), X(228,234), X(231,237), X(232,238), X(235,241), X(236,242),
+  X(239,245), X(240,246), X(243,249), X(244,250), X(247,253), X(248,254), X(3,5),
+  X(4,6), X(7,9), X(8,10), X(11,13), X(12,14), X(15,17), X(16,18), X(19,21),
+  X(20,22), X(23,25), X(24,26), X(27,29), X(28,30), X(31,33), X(32,34), X(35,37),
+  X(36,38), X(39,41), X(40,42), X(43,45), X(44,46), X(47,49), X(48,50), X(51,53),
+  X(52,54), X(55,57), X(56,58), X(59,61), X(60,62), X(63,65), X(64,66), X(67,69),
+  X(68,70), X(71,73), X(72,74), X(75,77), X(76,78), X(79,81), X(80,82), X(83,85),
+  X(84,86), X(87,89), X(88,90), X(91,93), X(92,94), X(95,97), X(96,98),
+  X(99,101), X(100,102), X(103,105), X(104,106), X(107,109), X(108,110),
+  X(111,113), X(112,114), X(115,117), X(116,118), X(119,121), X(120,122),
+  X(123,125), X(124,126), X(127,129), X(128,130), X(131,133), X(132,134),
+  X(135,137), X(136,138), X(139,141), X(140,142), X(143,145), X(144,146),
+  X(147,149), X(148,150), X(151,153), X(152,154), X(155,157), X(156,158),
+  X(159,161), X(160,162), X(163,165), X(164,166), X(167,169), X(168,170),
+  X(171,173), X(172,174), X(175,177), X(176,178), X(179,181), X(180,182),
+  X(183,185), X(184,186), X(187,189), X(188,190), X(191,193), X(192,194),
+  X(195,197), X(196,198), X(199,201), X(200,202), X(203,205), X(204,206),
+  X(207,209), X(208,210), X(211,213), X(212,214), X(215,217), X(216,218),
+  X(219,221), X(220,222), X(223,225), X(224,226), X(227,229), X(228,230),
+  X(231,233), X(232,234), X(235,237), X(236,238), X(239,241), X(240,242),
+  X(243,245), X(244,246), X(247,249), X(248,250), X(251,253), X(252,254), X(1,2),
+  X(3,4), X(5,6), X(7,8), X(9,10), X(11,12), X(13,14), X(15,16), X(17,18),
+  X(19,20), X(21,22), X(23,24), X(25,26), X(27,28), X(29,30), X(31,32), X(33,34),
+  X(35,36), X(37,38), X(39,40), X(41,42), X(43,44), X(45,46), X(47,48), X(49,50),
+  X(51,52), X(53,54), X(55,56), X(57,58), X(59,60), X(61,62), X(63,64), X(65,66),
+  X(67,68), X(69,70), X(71,72), X(73,74), X(75,76), X(77,78), X(79,80), X(81,82),
+  X(83,84), X(85,86), X(87,88), X(89,90), X(91,92), X(93,94), X(95,96), X(97,98),
+  X(99,100), X(101,102), X(103,104), X(105,106), X(107,108), X(109,110),
+  X(111,112), X(113,114), X(115,116), X(117,118), X(119,120), X(121,122),
+  X(123,124), X(125,126), X(127,128), X(129,130), X(131,132), X(133,134),
+  X(135,136), X(137,138), X(139,140), X(141,142), X(143,144), X(145,146),
+  X(147,148), X(149,150), X(151,152), X(153,154), X(155,156), X(157,158),
+  X(159,160), X(161,162), X(163,164), X(165,166), X(167,168), X(169,170),
+  X(171,172), X(173,174), X(175,176), X(177,178), X(179,180), X(181,182),
+  X(183,184), X(185,186), X(187,188), X(189,190), X(191,192), X(193,194),
+  X(195,196), X(197,198), X(199,200), X(201,202), X(203,204), X(205,206),
+  X(207,208), X(209,210), X(211,212), X(213,214), X(215,216), X(217,218),
+  X(219,220), X(221,222), X(223,224), X(225,226), X(227,228), X(229,230),
+  X(231,232), X(233,234), X(235,236), X(237,238), X(239,240), X(241,242),
+  X(243,244), X(245,246), X(247,248), X(249,250), X(251,252), X(253,254),
+  X(2,129), X(4,131), X(6,133), X(8,135), X(10,137), X(12,139), X(14,141),
+  X(16,143), X(18,145), X(20,147), X(22,149), X(24,151), X(26,153), X(28,155),
+  X(30,157), X(32,159), X(34,161), X(36,163), X(38,165), X(40,167), X(42,169),
+  X(44,171), X(46,173), X(48,175), X(50,177), X(52,179), X(54,181), X(56,183),
+  X(58,185), X(60,187), X(62,189), X(64,191), X(66,193), X(68,195), X(70,197),
+  X(72,199), X(74,201), X(76,203), X(78,205), X(80,207), X(82,209), X(84,211),
+  X(86,213), X(88,215), X(90,217), X(92,219), X(94,221), X(96,223), X(98,225),
+  X(100,227), X(102,229), X(104,231), X(106,233), X(108,235), X(110,237),
+  X(112,239), X(114,241), X(116,243), X(118,245), X(120,247), X(122,249),
+  X(124,251), X(126,253), X(2,65), X(4,67), X(6,69), X(8,71), X(10,73), X(12,75),
+  X(14,77), X(16,79), X(18,81), X(20,83), X(22,85), X(24,87), X(26,89), X(28,91),
+  X(30,93), X(32,95), X(34,97), X(36,99), X(38,101), X(40,103), X(42,105),
+  X(44,107), X(46,109), X(48,111), X(50,113), X(52,115), X(54,117), X(56,119),
+  X(58,121), X(60,123), X(62,125), X(64,127), X(66,129), X(68,131), X(70,133),
+  X(72,135), X(74,137), X(76,139), X(78,141), X(80,143), X(82,145), X(84,147),
+  X(86,149), X(88,151), X(90,153), X(92,155), X(94,157), X(96,159), X(98,161),
+  X(100,163), X(102,165), X(104,167), X(106,169), X(108,171), X(110,173),
+  X(112,175), X(114,177), X(116,179), X(118,181), X(120,183), X(122,185),
+  X(124,187), X(126,189), X(128,191), X(130,193), X(132,195), X(134,197),
+  X(136,199), X(138,201), X(140,203), X(142,205), X(144,207), X(146,209),
+  X(148,211), X(150,213), X(152,215), X(154,217), X(156,219), X(158,221),
+  X(160,223), X(162,225), X(164,227), X(166,229), X(168,231), X(170,233),
+  X(172,235), X(174,237), X(176,239), X(178,241), X(180,243), X(182,245),
+  X(184,247), X(186,249), X(188,251), X(190,253), X(2,33), X(4,35), X(6,37),
+  X(8,39), X(10,41), X(12,43), X(14,45), X(16,47), X(18,49), X(20,51), X(22,53),
+  X(24,55), X(26,57), X(28,59), X(30,61), X(32,63), X(34,65), X(36,67), X(38,69),
+  X(40,71), X(42,73), X(44,75), X(46,77), X(48,79), X(50,81), X(52,83), X(54,85),
+  X(56,87), X(58,89), X(60,91), X(62,93), X(64,95), X(66,97), X(68,99),
+  X(70,101), X(72,103), X(74,105), X(76,107), X(78,109), X(80,111), X(82,113),
+  X(84,115), X(86,117), X(88,119), X(90,121), X(92,123), X(94,125), X(96,127),
+  X(98,129), X(100,131), X(102,133), X(104,135), X(106,137), X(108,139),
+  X(110,141), X(112,143), X(114,145), X(116,147), X(118,149), X(120,151),
+  X(122,153), X(124,155), X(126,157), X(128,159), X(130,161), X(132,163),
+  X(134,165), X(136,167), X(138,169), X(140,171), X(142,173), X(144,175),
+  X(146,177), X(148,179), X(150,181), X(152,183), X(154,185), X(156,187),
+  X(158,189), X(160,191), X(162,193), X(164,195), X(166,197), X(168,199),
+  X(170,201), X(172,203), X(174,205), X(176,207), X(178,209), X(180,211),
+  X(182,213), X(184,215), X(186,217), X(188,219), X(190,221), X(192,223),
+  X(194,225), X(196,227), X(198,229), X(200,231), X(202,233), X(204,235),
+  X(206,237), X(208,239), X(210,241), X(212,243), X(214,245), X(216,247),
+  X(218,249), X(220,251), X(222,253), X(2,17), X(4,19), X(6,21), X(8,23),
+  X(10,25), X(12,27), X(14,29), X(16,31), X(18,33), X(20,35), X(22,37), X(24,39),
+  X(26,41), X(28,43), X(30,45), X(32,47), X(34,49), X(36,51), X(38,53), X(40,55),
+  X(42,57), X(44,59), X(46,61), X(48,63), X(50,65), X(52,67), X(54,69), X(56,71),
+  X(58,73), X(60,75), X(62,77), X(64,79), X(66,81), X(68,83), X(70,85), X(72,87),
+  X(74,89), X(76,91), X(78,93), X(80,95), X(82,97), X(84,99), X(86,101),
+  X(88,103), X(90,105), X(92,107), X(94,109), X(96,111), X(98,113), X(100,115),
+  X(102,117), X(104,119), X(106,121), X(108,123), X(110,125), X(112,127),
+  X(114,129), X(116,131), X(118,133), X(120,135), X(122,137), X(124,139),
+  X(126,141), X(128,143), X(130,145), X(132,147), X(134,149), X(136,151),
+  X(138,153), X(140,155), X(142,157), X(144,159), X(146,161), X(148,163),
+  X(150,165), X(152,167), X(154,169), X(156,171), X(158,173), X(160,175),
+  X(162,177), X(164,179), X(166,181), X(168,183), X(170,185), X(172,187),
+  X(174,189), X(176,191), X(178,193), X(180,195), X(182,197), X(184,199),
+  X(186,201), X(188,203), X(190,205), X(192,207), X(194,209), X(196,211),
+  X(198,213), X(200,215), X(202,217), X(204,219), X(206,221), X(208,223),
+  X(210,225), X(212,227), X(214,229), X(216,231), X(218,233), X(220,235),
+  X(222,237), X(224,239), X(226,241), X(228,243), X(230,245), X(232,247),
+  X(234,249), X(236,251), X(238,253), X(2,9), X(4,11), X(6,13), X(8,15),
+  X(10,17), X(12,19), X(14,21), X(16,23), X(18,25), X(20,27), X(22,29), X(24,31),
+  X(26,33), X(28,35), X(30,37), X(32,39), X(34,41), X(36,43), X(38,45), X(40,47),
+  X(42,49), X(44,51), X(46,53), X(48,55), X(50,57), X(52,59), X(54,61), X(56,63),
+  X(58,65), X(60,67), X(62,69), X(64,71), X(66,73), X(68,75), X(70,77), X(72,79),
+  X(74,81), X(76,83), X(78,85), X(80,87), X(82,89), X(84,91), X(86,93), X(88,95),
+  X(90,97), X(92,99), X(94,101), X(96,103), X(98,105), X(100,107), X(102,109),
+  X(104,111), X(106,113), X(108,115), X(110,117), X(112,119), X(114,121),
+  X(116,123), X(118,125), X(120,127), X(122,129), X(124,131), X(126,133),
+  X(128,135), X(130,137), X(132,139), X(134,141), X(136,143), X(138,145),
+  X(140,147), X(142,149), X(144,151), X(146,153), X(148,155), X(150,157),
+  X(152,159), X(154,161), X(156,163), X(158,165), X(160,167), X(162,169),
+  X(164,171), X(166,173), X(168,175), X(170,177), X(172,179), X(174,181),
+  X(176,183), X(178,185), X(180,187), X(182,189), X(184,191), X(186,193),
+  X(188,195), X(190,197), X(192,199), X(194,201), X(196,203), X(198,205),
+  X(200,207), X(202,209), X(204,211), X(206,213), X(208,215), X(210,217),
+  X(212,219), X(214,221), X(216,223), X(218,225), X(220,227), X(222,229),
+  X(224,231), X(226,233), X(228,235), X(230,237), X(232,239), X(234,241),
+  X(236,243), X(238,245), X(240,247), X(242,249), X(244,251), X(246,253), X(2,5),
+  X(4,7), X(6,9), X(8,11), X(10,13), X(12,15), X(14,17), X(16,19), X(18,21),
+  X(20,23), X(22,25), X(24,27), X(26,29), X(28,31), X(30,33), X(32,35), X(34,37),
+  X(36,39), X(38,41), X(40,43), X(42,45), X(44,47), X(46,49), X(48,51), X(50,53),
+  X(52,55), X(54,57), X(56,59), X(58,61), X(60,63), X(62,65), X(64,67), X(66,69),
+  X(68,71), X(70,73), X(72,75), X(74,77), X(76,79), X(78,81), X(80,83), X(82,85),
+  X(84,87), X(86,89), X(88,91), X(90,93), X(92,95), X(94,97), X(96,99),
+  X(98,101), X(100,103), X(102,105), X(104,107), X(106,109), X(108,111),
+  X(110,113), X(112,115), X(114,117), X(116,119), X(118,121), X(120,123),
+  X(122,125), X(124,127), X(126,129), X(128,131), X(130,133), X(132,135),
+  X(134,137), X(136,139), X(138,141), X(140,143), X(142,145), X(144,147),
+  X(146,149), X(148,151), X(150,153), X(152,155), X(154,157), X(156,159),
+  X(158,161), X(160,163), X(162,165), X(164,167), X(166,169), X(168,171),
+  X(170,173), X(172,175), X(174,177), X(176,179), X(178,181), X(180,183),
+  X(182,185), X(184,187), X(186,189), X(188,191), X(190,193), X(192,195),
+  X(194,197), X(196,199), X(198,201), X(200,203), X(202,205), X(204,207),
+  X(206,209), X(208,211), X(210,213), X(212,215), X(214,217), X(216,219),
+  X(218,221), X(220,223), X(222,225), X(224,227), X(226,229), X(228,231),
+  X(230,233), X(232,235), X(234,237), X(236,239), X(238,241), X(240,243),
+  X(242,245), X(244,247), X(246,249), X(248,251), X(250,253), X(2,3), X(4,5),
+  X(6,7), X(8,9), X(10,11), X(12,13), X(14,15), X(16,17), X(18,19), X(20,21),
+  X(22,23), X(24,25), X(26,27), X(28,29), X(30,31), X(32,33), X(34,35), X(36,37),
+  X(38,39), X(40,41), X(42,43), X(44,45), X(46,47), X(48,49), X(50,51), X(52,53),
+  X(54,55), X(56,57), X(58,59), X(60,61), X(62,63), X(64,65), X(66,67), X(68,69),
+  X(70,71), X(72,73), X(74,75), X(76,77), X(78,79), X(80,81), X(82,83), X(84,85),
+  X(86,87), X(88,89), X(90,91), X(92,93), X(94,95), X(96,97), X(98,99),
+  X(100,101), X(102,103), X(104,105), X(106,107), X(108,109), X(110,111),
+  X(112,113), X(114,115), X(116,117), X(118,119), X(120,121), X(122,123),
+  X(124,125), X(126,127), X(128,129), X(130,131), X(132,133), X(134,135),
+  X(136,137), X(138,139), X(140,141), X(142,143), X(144,145), X(146,147),
+  X(148,149), X(150,151), X(152,153), X(154,155), X(156,157), X(158,159),
+  X(160,161), X(162,163), X(164,165), X(166,167), X(168,169), X(170,171),
+  X(172,173), X(174,175), X(176,177), X(178,179), X(180,181), X(182,183),
+  X(184,185), X(186,187), X(188,189), X(190,191), X(192,193), X(194,195),
+  X(196,197), X(198,199), X(200,201), X(202,203), X(204,205), X(206,207),
+  X(208,209), X(210,211), X(212,213), X(214,215), X(216,217), X(218,219),
+  X(220,221), X(222,223), X(224,225), X(226,227), X(228,229), X(230,231),
+  X(232,233), X(234,235), X(236,237), X(238,239), X(240,241), X(242,243),
+  X(244,245), X(246,247), X(248,249), X(250,251), X(252,253)
+};
+
+//
+//
+//
+
+struct hsg_network const hsg_networks_sorting[] =
+  {
+    LS(2),
+    LS(4),
+    LS(6),
+    LS(8),
+    LS(10),
+    LS(12),
+    LS(14),
+    LS(16),
+    LS(18),
+    LS(20),
+    LS(22),
+    LS(24),
+    LS(26),
+    LS(28),
+    LS(30),
+    LS(32),
+    LS(34),
+    LS(36),
+    LS(38),
+    LS(40),
+    LS(42),
+    LS(44),
+    LS(46),
+    LS(48),
+    LS(50),
+    LS(52),
+    LS(54),
+    LS(56),
+    LS(58),
+    LS(60),
+    LS(62),
+    LS(64),
+    LS(66),
+    LS(68),
+    LS(70),
+    LS(72),
+    LS(74),
+    LS(76),
+    LS(78),
+    LS(80),
+    LS(82),
+    LS(84),
+    LS(86),
+    LS(88),
+    LS(90),
+    LS(92),
+    LS(94),
+    LS(96),
+    LS(98),
+    LS(100),
+    LS(102),
+    LS(104),
+    LS(106),
+    LS(108),
+    LS(110),
+    LS(112),
+    LS(114),
+    LS(116),
+    LS(118),
+    LS(120),
+    LS(122),
+    LS(124),
+    LS(126),
+    LS(128),
+    LS(130),
+    LS(132),
+    LS(134),
+    LS(136),
+    LS(138),
+    LS(140),
+    LS(142),
+    LS(144),
+    LS(146),
+    LS(148),
+    LS(150),
+    LS(152),
+    LS(154),
+    LS(156),
+    LS(158),
+    LS(160),
+    LS(162),
+    LS(164),
+    LS(166),
+    LS(168),
+    LS(170),
+    LS(172),
+    LS(174),
+    LS(176),
+    LS(178),
+    LS(180),
+    LS(182),
+    LS(184),
+    LS(186),
+    LS(188),
+    LS(190),
+    LS(192),
+    LS(194),
+    LS(196),
+    LS(198),
+    LS(200),
+    LS(202),
+    LS(204),
+    LS(206),
+    LS(208),
+    LS(210),
+    LS(212),
+    LS(214),
+    LS(216),
+    LS(218),
+    LS(220),
+    LS(222),
+    LS(224),
+    LS(226),
+    LS(228),
+    LS(230),
+    LS(232),
+    LS(234),
+    LS(236),
+    LS(238),
+    LS(240),
+    LS(242),
+    LS(244),
+    LS(246),
+    LS(248),
+    LS(250),
+    LS(252),
+    LS(254)
+  };
+
+//
+//
+//
diff --git a/src/compute/hs/gen/target_cuda_sm3x.c b/src/compute/hs/gen/target_cuda_sm3x.c
new file mode 100644
index 0000000..436fc5f
--- /dev/null
+++ b/src/compute/hs/gen/target_cuda_sm3x.c
@@ -0,0 +1,776 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#include <stdio.h>
+
+//
+//
+//
+
+#include "gen.h"
+#include "util.h"
+
+//
+//
+//
+
+void
+hsg_target_cuda_sm3x(struct hsg_file        * const files,
+                     struct hsg_merge const * const merge,
+                     struct hsg_op    const * const ops,
+                     uint32_t                 const depth)
+{
+  const char* const type     = (hsg_config.type.words == 2) ? "uint64_t"   : "uint32_t";
+  const char* const type_max = (hsg_config.type.words == 2) ? "UINT64_MAX" : "UINT32_MAX";
+
+  switch (ops->type)
+    {
+    case HSG_OP_TYPE_END:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "}\n");
+      break;
+
+    case HSG_OP_TYPE_BEGIN:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "{\n");
+      break;
+
+    case HSG_OP_TYPE_ELSE:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "else\n");
+      break;
+
+    case HSG_OP_TYPE_FILE_HEADER:
+      {
+        uint32_t const bc_min = msb_idx_u32(hsg_config.block.warps_min);
+        uint32_t const bc_max = msb_idx_u32(pow2_rd_u32(merge[0].warps));
+
+        fprintf(files[HSG_FILE_TYPE_HEADER].file,
+                "//                                                      \n"                
+                "// Copyright 2016 Google Inc.                           \n"
+                "//                                                      \n"
+                "// Use of this source code is governed by a BSD-style   \n"
+                "// license that can be found in the LICENSE file.       \n"
+                "//                                                      \n"
+                "                                                        \n"
+                "#pragma once                                            \n"
+                "                                                        \n"
+                "#include <stdint.h>                                     \n"
+                "                                                        \n"
+                "#define HS_LANES_PER_WARP     %u                        \n"
+                "#define HS_BS_WARPS_PER_BLOCK %u                        \n"
+                "#define HS_BC_WARPS_LOG2_MIN  %u                        \n"
+                "#define HS_BC_WARPS_LOG2_MAX  %u                        \n"
+                "#define HS_KEYS_PER_THREAD    %u                        \n"
+                "#define HS_KEY_WORDS          %u                        \n"
+                "#define HS_KEY_TYPE           %s                        \n"
+                "                                                        \n"
+                "#include <%s_args.h>                                    \n"
+                "                                                        \n",
+                hsg_config.warp.lanes,
+                merge->warps,
+                bc_min,
+                bc_max,
+                hsg_config.thread.regs,
+                hsg_config.type.words,
+                type,
+                files[HSG_FILE_TYPE_SOURCE].prefix);
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "// -*- compile-command: \"nvcc -arch sm_52 -Xptxas=-v,-abi=no -cubin -I. %s\"; -*-\n",
+                files[HSG_FILE_TYPE_SOURCE].name);
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "//                                                      \n"                
+                "// Copyright 2016 Google Inc.                           \n"
+                "//                                                      \n"
+                "// Use of this source code is governed by a BSD-style   \n"
+                "// license that can be found in the LICENSE file.       \n"
+                "//                                                      \n"
+                "                                                        \n"
+                "#ifdef __cplusplus                                      \n"
+                "extern \"C\" {                                          \n"
+                "#endif                                                  \n"
+                "                                                        \n"
+                "#include \"%s_launcher.h\"                              \n"
+                "                                                        \n"
+                "#ifdef __cplusplus                                      \n"
+                "}                                                       \n"
+                "#endif                                                  \n"
+                "                                                        \n"
+                "#include \"%s_launch_bounds.h\"                         \n"
+                "#include <%s_finalize.inl>                              \n"
+                "                                                        \n"
+                "//                                                      \n"
+                "//                                                      \n"
+                "//                                                      \n",
+                files[HSG_FILE_TYPE_HEADER].prefix,
+                files[HSG_FILE_TYPE_SOURCE].prefix,
+                files[HSG_FILE_TYPE_SOURCE].prefix);
+      }
+      break;
+
+    case HSG_OP_TYPE_FILE_FOOTER:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "                              \n"
+              "//                            \n"
+              "//                            \n"
+              "//                            \n"
+              "                              \n"
+              "#include \"%s_launcher.inl\"  \n"
+              "                              \n"
+              "//                            \n"
+              "//                            \n"
+              "//                            \n",
+              files[HSG_FILE_TYPE_SOURCE].prefix);
+      break;
+
+    case HSG_OP_TYPE_BS_KERNEL_PROTO:
+      {
+        const uint32_t tpb = merge->warps * hsg_config.warp.lanes;
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "                                                \n"
+                "extern \"C\"                                    \n"
+                "__global__                                      \n"
+                "__launch_bounds__(%u,%u)                        \n"
+                "void                                            \n"
+                "hs_bs_kernel(const struct hs_args args) \n",
+                tpb,1);
+      }
+      break;
+
+    case HSG_OP_TYPE_BS_KERNEL_PREAMBLE:
+      {
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "__shared__ union { \n");
+
+        for (uint32_t ii=0; ii<MERGE_LEVELS_MAX_LOG2; ii++)
+          {
+            const struct hsg_merge* const m = merge + ii;
+
+            if (m->warps < 2)
+              break;
+
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "  %s m%u[%u][%u];\n",
+                    type,
+                    ii,
+                    m->rows_bs,
+                    m->warps * hsg_config.warp.lanes);
+          }
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                " struct {             \n"
+                "    %s f[%u][%u];     \n"
+                "    %s l[%u];         \n"
+                " };                   \n",
+                type,
+                merge[0].warps,
+                hsg_config.warp.skpw_bs - 1,
+                type,
+                merge[0].warps);
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "} shared;          \n"
+                "                   \n");
+
+        const uint32_t kpw = hsg_config.warp.lanes * hsg_config.thread.regs;
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "const int32_t block_warp_idx = threadIdx.x / %u;                 \n"
+                "const int32_t warp_lane_idx  = threadIdx.x & %u;                 \n"
+                "const int32_t warp_idx       = blockIdx.x * %u + block_warp_idx; \n"
+                "const int32_t warp_gmem_idx  = warp_idx * %u + warp_lane_idx;    \n"
+                "                                                                 \n"
+                "%s const * const vin_ptr  = args.vin  + warp_gmem_idx;           \n"
+                "%s       * const vout_ptr = args.vout + warp_gmem_idx;           \n"
+                "                                                                 \n",
+
+                hsg_config.warp.lanes,
+                hsg_config.warp.lanes - 1,
+                merge[0].warps,
+                kpw,
+                type,
+                type);
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "if (warp_idx >= args.bs.full + args.bs.frac) \n"
+                "  return;                                    \n"
+                "                                             \n");
+      }
+      break;
+
+    case HSG_OP_TYPE_BC_KERNEL_PROTO:
+      {
+        uint32_t const bc_warps = merge[ops->a].warps;
+        uint32_t const tpb      = bc_warps * hsg_config.warp.lanes;
+        uint32_t const bpm      = hsg_config.block.warps_max / bc_warps;
+        uint32_t const msb      = msb_idx_u32(bc_warps);
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "                                                   \n"
+                "extern \"C\"                                       \n"
+                "__global__                                         \n"
+                "__launch_bounds__(%u,%u)                           \n"
+                "void                                               \n"
+                "hs_bc_%u_kernel(const struct hs_args args) \n",
+                tpb,bpm,
+                msb);
+      }
+      break;
+
+    case HSG_OP_TYPE_BC_KERNEL_PREAMBLE:
+      {
+        const struct hsg_merge* const m = merge + ops->a;
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "__shared__ union {    \n");
+
+        if (m->warps >= 2)
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "  %s m%u[%u][%u];  \n",
+                    type,
+                    ops->a,
+                    m->rows_bc,
+                    m->warps * hsg_config.warp.lanes);
+          }
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                " struct {             \n"
+                "    %s f[%u][%u];     \n"
+                "    %s l[%u];         \n"
+                " };                   \n"
+                "} shared;             \n"
+                "                      \n",
+                type,m->warps,m->skpw_bc - 1,
+                type,m->warps);
+
+        const uint32_t kpw = hsg_config.warp.lanes * hsg_config.thread.regs;
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "const int32_t block_warp_idx = threadIdx.x / %u;                     \n"
+                "const int32_t warp_lane_idx  = threadIdx.x & %u;                     \n"
+                "const int32_t warp_gmem_base = blockIdx.x * %u * %u + warp_lane_idx; \n"
+                "const int32_t warp_gmem_idx  = warp_gmem_base + block_warp_idx * %u; \n"
+                "                                                                     \n"
+                "%s * const vout_ptr = args.vout + warp_gmem_idx;                     \n"
+                "                                                                     \n",
+                hsg_config.warp.lanes,
+                hsg_config.warp.lanes - 1,
+                m->warps,kpw,
+                kpw,
+                type);
+
+#if 0
+        //
+        // NO LONGER NEED THIS TEST
+        //
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "if (warp_idx >= args.bc.full) \n"
+                "  return;                     \n"
+                "                              \n");
+#endif
+      }
+      break;
+
+    case HSG_OP_TYPE_FM_KERNEL_PROTO:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "                                                   \n"
+              "#define HS_FM_WARPS_LOG2_%u  %u                \n"
+              "extern \"C\"                                       \n"
+              "__global__                                         \n"
+              "HS_FM_LAUNCH_BOUNDS_%u                         \n"
+              "void                                               \n"
+              "hs_fm_%u_kernel(const struct hs_args args) \n",
+              ops->a,
+              ops->b,
+              ops->a - ops->b,
+              ops->a);
+      break;
+
+    case HSG_OP_TYPE_FM_KERNEL_PREAMBLE:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "const int32_t warp_idx      = (blockDim.x * blockIdx.x + threadIdx.x) / %u;              \n"
+              "const int32_t warp_lane_idx = threadIdx.x & %u;                                          \n"
+              "                                                                                         \n"
+              "const int32_t merge_idx     = warp_idx / %u >> %u;                                       \n"
+              "                                                                                         \n"
+              "const int32_t merge_stride  = %u * %u << %u;                                             \n"
+              "const int32_t merge_keys    = merge_stride * %u;                                         \n"
+              "                                                                                         \n"
+              "const int32_t merge_base    = merge_idx * merge_keys;                                    \n"
+              "                                                                                         \n"
+              "const int32_t merge_l_off   = (warp_idx - merge_idx * (%u << %u)) * %u + warp_lane_idx;  \n"
+              "const int32_t merge_l_end   = merge_l_off + merge_stride * (%u / 2 - 1);                 \n"
+              "%s * const merge_l   = args.vout + merge_base + merge_l_off;                             \n"
+              "                                                                                         \n"
+              "const int32_t merge_r_off   = merge_keys - merge_l_end - 1;                              \n"
+              "%s * const merge_r   = args.vout + merge_base + merge_r_off;                             \n"
+              "                                                                                         \n",
+              hsg_config.warp.lanes,
+              hsg_config.warp.lanes-1,
+              hsg_config.thread.regs,ops->b,
+              hsg_config.thread.regs,hsg_config.warp.lanes,ops->b,
+              ops->a,
+              hsg_config.thread.regs,ops->b,hsg_config.warp.lanes,
+              ops->a,
+              type,
+              type);
+      break;
+
+    case HSG_OP_TYPE_HM_KERNEL_PROTO:
+      {
+        const uint32_t bc_max = msb_idx_u32(pow2_rd_u32(merge[0].warps));
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "                                                   \n"
+                "#define HS_HM_WARPS_LOG2_%u  %u                \n"
+                "extern \"C\"                                       \n"
+                "__global__                                         \n"
+                "HS_HM_LAUNCH_BOUNDS_%u                         \n"
+                "void                                               \n"
+                "hs_hm_%u_kernel(const struct hs_args args) \n",
+                ops->a,
+                ops->b,
+                ops->a - ops->b - bc_max,
+                ops->a);
+      }
+      break;
+
+    case HSG_OP_TYPE_HM_KERNEL_PREAMBLE:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "const int32_t warp_idx      = (blockDim.x * blockIdx.x + threadIdx.x) / %u;       \n"
+              "const int32_t warp_lane_idx = threadIdx.x & %u;                                   \n"
+              "                                                                                  \n"
+              "const int32_t merge_idx     = (warp_idx / %u) >> %u;                              \n"
+              "                                                                                  \n"
+              "const int32_t merge_stride  = %u * %u << %u;                                      \n"
+              "const int32_t merge_keys    = merge_stride * %u;                                  \n"
+              "                                                                                  \n"
+              "const int32_t merge_base    = merge_idx * merge_keys;                             \n"
+              "                                                                                  \n"
+              "const int32_t merge_off     = (warp_idx - merge_idx * (%u << %u)) * %u;           \n"
+              "%s * const merge_ptr     = args.vout + merge_base + merge_off + warp_lane_idx;    \n"
+              "                                                                                  \n",
+              hsg_config.warp.lanes,
+              hsg_config.warp.lanes-1,
+              hsg_config.thread.regs,ops->b,
+              hsg_config.thread.regs,hsg_config.warp.lanes,ops->b,
+              ops->a,
+              hsg_config.thread.regs,ops->b,hsg_config.warp.lanes,
+              type);
+      break;
+
+    case HSG_OP_TYPE_BX_REG_GLOBAL_LOAD:
+      {
+        static const char* const vstr[] = { "vin_ptr", "vout_ptr" };
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "%s r%-3u = %s[%-3u * %u]; \n",
+                type,ops->n,vstr[ops->v],ops->n-1,hsg_config.warp.lanes);
+      }
+      break;
+
+    case HSG_OP_TYPE_BX_REG_GLOBAL_STORE:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "vout_ptr[%-3u * %u] = r%u; \n",
+              ops->n-1,hsg_config.warp.lanes,ops->n);
+      break;
+
+#if 0
+    case HSG_OP_TYPE_BX_WARP_STORE_PRED:
+      if (ops->a == 1)
+        {
+          fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                  "if (!args.is_final) \n");
+        }
+      else
+        {
+          fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                  "if (blockIdx.x * %u + block_warp_idx >= args.bx.ru) \n"
+                  "{                                                   \n"
+                  "  return;                                           \n"
+                  "}                                                   \n"
+                  "else if (!args.is_final)                            \n",
+                  ops->a);
+        }
+      break;
+#endif
+
+    case HSG_OP_TYPE_HM_REG_GLOBAL_LOAD:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "%s r%-3u = merge_ptr[%-3u * merge_stride];\n",
+              type,ops->a,ops->b);
+      break;
+
+    case HSG_OP_TYPE_HM_REG_GLOBAL_STORE:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "merge_ptr[%-3u * merge_stride] = r%u;\n",
+              ops->b,ops->a);
+      break;
+
+    case HSG_OP_TYPE_FM_REG_GLOBAL_LOAD_LEFT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "%s r%-3u = merge_l[%-3u * merge_stride];\n",
+              type,ops->a,ops->b);
+      break;
+
+    case HSG_OP_TYPE_FM_REG_GLOBAL_STORE_LEFT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "merge_l[%-3u * merge_stride] = r%u;\n",
+              ops->b,ops->a);
+      break;
+
+    case HSG_OP_TYPE_FM_REG_GLOBAL_LOAD_RIGHT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "%s r%-3u = merge_r[%-3u * merge_stride];\n",
+              type,ops->a,ops->b);
+      break;
+
+    case HSG_OP_TYPE_FM_REG_GLOBAL_STORE_RIGHT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "merge_r[%-3u * merge_stride] = r%u;\n",
+              ops->b,ops->a);
+      break;
+
+    case HSG_OP_TYPE_WARP_FLIP:
+      {
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "const int32_t flip_lane_mask = %u;                             \n"
+                "const int32_t flip_lane_idx  = warp_lane_idx ^ flip_lane_mask; \n"
+                "const bool    t_lt           = warp_lane_idx < flip_lane_idx;  \n",
+                ops->n-1);
+      }
+      break;
+
+    case HSG_OP_TYPE_WARP_HALF:
+      {
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "const int32_t half_lane_mask = %u;                             \n"
+                "const int32_t half_lane_idx  = warp_lane_idx ^ half_lane_mask; \n"
+                "const bool    t_lt           = warp_lane_idx < half_lane_idx;  \n",
+                ops->n / 2);
+      }
+      break;
+
+    case HSG_OP_TYPE_CMP_FLIP:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,      
+              "HS_CMP_FLIP(r%-3u,r%-3u,r%-3u)\n",ops->a,ops->b,ops->c);
+      break;
+
+    case HSG_OP_TYPE_CMP_HALF:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,      
+              "HS_CMP_HALF(r%-3u,r%-3u)\n",ops->a,ops->b);
+      break;
+
+    case HSG_OP_TYPE_CMP_XCHG:
+      if (ops->c == UINT32_MAX)
+        {
+          fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                  "HS_CMP_XCHG(r%-3u,r%-3u)\n",
+                  ops->a,ops->b);
+        }
+      else
+        {
+          fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                  "HS_CMP_XCHG(r%u_%u,r%u_%u)\n",
+                  ops->c,ops->a,ops->c,ops->b);
+        }
+      break;
+
+    case HSG_OP_TYPE_BS_REG_SHARED_STORE_V:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "smem_v[%-3u * %-2u * %-3u] = r%u;\n",
+              ops->a,hsg_config.warp.lanes,ops->c,ops->b);
+      break;
+
+    case HSG_OP_TYPE_BS_REG_SHARED_LOAD_V:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "r%-3u = smem_v[%-3u * %-2u * %-3u];\n",
+              ops->b,ops->a,hsg_config.warp.lanes,ops->c);
+      break;
+
+    case HSG_OP_TYPE_BC_REG_SHARED_LOAD_V:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "%s r%-3u = smem_v[%-3u * %-2u * %-3u];\n",
+              type,ops->b,ops->a,hsg_config.warp.lanes,ops->c);
+      break;
+
+    case HSG_OP_TYPE_BX_REG_SHARED_STORE_LEFT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "smem_l[%5u] = r%u_%u;\n",
+              ops->b * hsg_config.warp.lanes,
+              ops->c,
+              ops->a);
+      break;
+
+    case HSG_OP_TYPE_BS_REG_SHARED_STORE_RIGHT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "smem_r[%5u] = r%u_%u;\n",
+              ops->b * hsg_config.warp.lanes,
+              ops->c,
+              ops->a);
+      break;
+
+    case HSG_OP_TYPE_BS_REG_SHARED_LOAD_LEFT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "%s r%u_%-3u = smem_l[%u];\n",
+              type,
+              ops->c,
+              ops->a,
+              ops->b * hsg_config.warp.lanes);
+      break;
+
+    case HSG_OP_TYPE_BS_REG_SHARED_LOAD_RIGHT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "%s r%u_%-3u = smem_r[%u];\n",
+              type,
+              ops->c,
+              ops->a,
+              ops->b * hsg_config.warp.lanes);
+      break;
+
+    case HSG_OP_TYPE_BC_REG_GLOBAL_LOAD_LEFT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "%s r%u_%-3u = gmem_l[%u];\n",
+              type,
+              ops->c,
+              ops->a,
+              ops->b * hsg_config.warp.lanes);
+      break;
+
+#if 0
+    case HSG_OP_TYPE_REG_F_PREAMBLE:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "%s*       const f_%u_smem_st_ptr = &shared.f[block_warp_idx]",
+              type,
+              ops->a);
+
+      if (ops->a >= (int32_t)hsg_config.warp.lanes)
+        {
+          fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                  "[warp_lane_idx * %u];\n",
+                  (ops->a / hsg_config.warp.lanes) * hsg_config.warp.lanes + 1);
+        }
+      else
+        {
+          fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                  "[(warp_lane_idx & 0x%X) * %u + (warp_lane_idx & ~0x%X)];\n",
+                  ops->a-1,
+                  hsg_config.warp.lanes + 1,
+                  ops->a-1);
+        }
+
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "const %s* const f_%u_smem_ld_ptr = &shared.f[block_warp_idx][warp_lane_idx];\n",
+              type,
+              ops->a);
+
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "%s*       const f_%u_gmem_st_ptr = args.vout + warp_gmem_idx",
+              type,
+              ops->a);
+
+      if (ops->a >= (int32_t)hsg_config.warp.lanes)
+        {
+          fprintf(files[HSG_FILE_TYPE_SOURCE].file,";\n");
+        }
+      else
+        {
+          fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                  " - warp_lane_idx + (warp_lane_idx & ~0x%X) * %u + (warp_lane_idx & 0x%X);\n",
+                  ops->a-1,
+                  hsg_config.thread.regs,
+                  ops->a-1);
+        }
+      break;
+
+    case HSG_OP_TYPE_REG_SHARED_STORE_F:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "f_%u_smem_st_ptr[%-3u] = r%u;\n",
+              ops->c,
+              ops->b,
+              ops->a);
+      break;
+
+    case HSG_OP_TYPE_REG_SHARED_LOAD_F:
+      if (ops->c >= (int32_t)hsg_config.warp.lanes)
+        {
+          uint32_t const adjacent = ops->c / hsg_config.warp.lanes;
+          uint32_t const stride   = adjacent * hsg_config.warp.lanes + 1;
+
+          fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                  "r%-3u = f_%u_smem_ld_ptr[%-3u];\n",
+                  ops->a,
+                  ops->c,
+                  (ops->b / adjacent) * stride + (ops->b % adjacent) * hsg_config.warp.lanes);
+        }
+      else
+        {
+          fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                  "r%-3u = f_%u_smem_ld_ptr[%-3u];\n",
+                  ops->a,
+                  ops->c,
+                  ops->b * (hsg_config.warp.lanes + 1));
+        }
+      break;
+
+    case HSG_OP_TYPE_REG_GLOBAL_STORE_F:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "f_%u_gmem_st_ptr[%-3u * %u + %-3u] = r%u;\n",
+              ops->c,
+              ops->b,
+              hsg_config.thread.regs, // hsg_config.warp.lanes,
+              (ops->a - 1) & ~(ops->c - 1),
+              ops->a);
+      break;
+#endif
+
+#if 0
+    case HSG_OP_TYPE_FINALIZE:
+      {
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "HS_FINALIZE(%s,args,shared.f[block_warp_idx],shared.l,\n"
+                "                block_warp_idx,warp_lane_idx,warp_gmem_idx,\n"
+                "                r%-3u",
+                ops->a == 1 ? "true" : "false",
+                1);
+
+#define HS_WARP_FINALIZE_PRETTY_PRINT  8
+
+        for (uint32_t r=2; r<=hsg_config.thread.regs; r++)
+          {
+            if (r % HS_WARP_FINALIZE_PRETTY_PRINT == 1)
+              fprintf(files[HSG_FILE_TYPE_SOURCE].file,",\n");
+            else
+              fprintf(files[HSG_FILE_TYPE_SOURCE].file,",");
+
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,"r%-3u",r);
+          }
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,");\n");
+      }
+      break;
+#endif
+
+    case HSG_OP_TYPE_BLOCK_SYNC:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "__syncthreads();\n");
+      break;
+
+    case HSG_OP_TYPE_BS_FRAC_PRED:
+      {
+        if (ops->m == 0)
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "if (warp_idx < args.bs.full)\n");
+          }
+        else
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "else if (args.bs.frac == %u)\n",
+                    ops->w);
+          }
+      }
+      break;
+
+#if 0 // DELETED
+    case HSG_OP_TYPE_BX_MERGE_V_PREAMBLE:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "%s * const smem_v = shared.m%u[0] + threadIdx.x; \n",
+              type,ops->a);
+      break;
+#endif
+
+    case HSG_OP_TYPE_BS_MERGE_H_PREAMBLE:
+      if (ops->c == 0)
+        {
+          fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                  "%s * smem_l = shared.m%u[block_warp_idx    ] + warp_lane_idx;        \n"
+                  "%s * smem_r = shared.m%u[block_warp_idx ^ 1] + (warp_lane_idx ^ %u); \n",
+                  type,ops->a,
+                  type,ops->a,hsg_config.warp.lanes-1);
+        }
+      else
+        {
+          fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                  "smem_l = shared.m%u[block_warp_idx    ] + warp_lane_idx;        \n"
+                  "smem_r = shared.m%u[block_warp_idx ^ 1] + (warp_lane_idx ^ %u); \n",
+                  ops->a,
+                  ops->a,hsg_config.warp.lanes-1);
+        }
+      break;
+
+    case HSG_OP_TYPE_BC_MERGE_H_PREAMBLE:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "%s const * const gmem_l = args.vout + (warp_gmem_base + block_warp_idx * %u); \n"
+              "%s       * const smem_l = shared.m%u[block_warp_idx] + warp_lane_idx;         \n"
+              "%s       * const smem_v = shared.m%u[0] + threadIdx.x;                        \n",
+              type,hsg_config.warp.lanes,
+              type,ops->a,
+              type,ops->a);
+      break;
+
+    case HSG_OP_TYPE_BX_MERGE_H_PRED:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "if (threadIdx.x < %u)\n",
+              ops->a * hsg_config.warp.lanes);
+      break;
+
+    case HSG_OP_TYPE_BS_ACTIVE_PRED:
+      {
+        const struct hsg_merge* const m = merge + ops->a;
+
+        if (m->warps <= 32)
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "if (((1u << block_warp_idx) & 0x%08X) != 0)\n",
+                    m->levels[ops->b].active.b32a2[0]);
+          }
+        else
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "if (((1UL << block_warp_idx) & 0x%08X%08XL) != 0L)\n",
+                    m->levels[ops->b].active.b32a2[1],
+                    m->levels[ops->b].active.b32a2[0]);
+          }
+      }
+      break;
+
+    case HSG_OP_TYPE_FM_MERGE_RIGHT_PRED:
+      {
+        if (ops->a == ops->b)
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "if (merge_idx < args.fm.full) \n");
+          }
+        else if (ops->b > 1)
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "else if (args.fm.frac == %u) \n",
+                    ops->b);
+          }
+        else
+          {
+	    fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+		    "else\n");
+          }
+      }
+      break;
+
+    default:
+      hsg_target_debug(files,merge,ops,depth);
+      break;
+    }
+}
+
+//
+//
+//
diff --git a/src/compute/hs/gen/target_igp_genx.c b/src/compute/hs/gen/target_igp_genx.c
new file mode 100644
index 0000000..f321975
--- /dev/null
+++ b/src/compute/hs/gen/target_igp_genx.c
@@ -0,0 +1,672 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#include <stdio.h>
+
+//
+//
+//
+
+#include "gen.h"
+#include "util.h"
+#include "macros.h"
+#include "transpose.h"
+
+//
+//
+//
+
+static 
+char
+hsg_transpose_reg_prefix(uint32_t const cols_log2)
+{
+  return 'a' + (('r' + cols_log2 - 'a') % 26);
+}
+
+static 
+void 
+hsg_transpose_blend(uint32_t const cols_log2,
+                    uint32_t const row_ll, // lower-left
+                    uint32_t const row_ur, // upper-right
+                    FILE *         file)
+{
+  // we're starting register names at '1' for now
+  fprintf(file,
+          "  HS_TRANSPOSE_BLEND( %c, %c, %2u, %3u, %3u ) \\\n",
+          hsg_transpose_reg_prefix(cols_log2-1),
+          hsg_transpose_reg_prefix(cols_log2),
+          cols_log2,row_ll+1,row_ur+1);
+}  
+
+static 
+void 
+hsg_transpose_remap(uint32_t const row_from,
+                    uint32_t const row_to,
+                    FILE *         file)
+{
+  // we're starting register names at '1' for now
+  fprintf(file,
+          "  HS_TRANSPOSE_REMAP( %c, %3u, %3u )        \\\n",
+          hsg_transpose_reg_prefix(msb_idx_u32(hsg_config.warp.lanes)),
+          row_from+1,row_to+1);
+}  
+
+//
+//
+//
+
+void
+hsg_target_igp_genx(struct hsg_file        * const files,
+                    struct hsg_merge const * const merge,
+                    struct hsg_op    const * const ops,
+                    uint32_t                 const depth)
+{
+  switch (ops->type)
+    {
+    case HSG_OP_TYPE_END:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "}\n");
+      break;
+
+    case HSG_OP_TYPE_BEGIN:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "{\n");
+      break;
+
+    case HSG_OP_TYPE_ELSE:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "else\n");
+      break;
+
+    case HSG_OP_TYPE_FILE_HEADER:
+      {
+        uint32_t const bc_max          = msb_idx_u32(pow2_rd_u32(merge->warps));
+        uint32_t const warp_lanes_log2 = msb_idx_u32(hsg_config.warp.lanes);
+
+        fprintf(files[HSG_FILE_TYPE_HEADER].file,
+                "//                                                            \n"                
+                "// Copyright 2016 Google Inc.                                 \n"
+                "//                                                            \n"
+                "// Use of this source code is governed by a BSD-style         \n"
+                "// license that can be found in the LICENSE file.             \n"
+                "//                                                            \n"
+                "                                                              \n"
+                "#ifndef HS_CL_ONCE                                            \n"
+                "#define HS_CL_ONCE                                            \n"
+                "                                                              \n"
+                "#define HS_LANES_PER_WARP_LOG2  %u                            \n"
+                "#define HS_LANES_PER_WARP       (1 << HS_LANES_PER_WARP_LOG2) \n"
+                "#define HS_BS_WARPS             %u                            \n"
+                "#define HS_BS_WARPS_LOG2_RU     %u                            \n"
+                "#define HS_BC_WARPS_LOG2_MAX    %u                            \n"
+                "#define HS_FM_BLOCKS_LOG2_MIN   %u                            \n"
+                "#define HS_HM_BLOCKS_LOG2_MIN   %u                            \n"
+                "#define HS_KEYS_PER_LANE        %u                            \n"
+                "#define HS_REG_LAST(c)          c##%u                         \n"
+                "#define HS_KEY_WORDS            %u                            \n"
+                "#define HS_KEY_TYPE             %s                            \n"
+                "#define HS_EMPTY                                              \n"
+                "                                                              \n",
+                warp_lanes_log2,
+                merge->warps,
+                msb_idx_u32(pow2_ru_u32(merge->warps)),
+                bc_max,
+                hsg_config.merge.flip.lo,
+                hsg_config.merge.half.lo,
+                hsg_config.thread.regs,
+                hsg_config.thread.regs,
+                hsg_config.type.words,
+                (hsg_config.type.words == 2) ? "ulong" : "uint");
+
+        fprintf(files[HSG_FILE_TYPE_HEADER].file,
+                "#define HS_SLAB_ROWS()    \\\n");
+        
+        for (uint32_t ii=1; ii<=hsg_config.thread.regs; ii++)
+          fprintf(files[HSG_FILE_TYPE_HEADER].file,
+                  "  HS_SLAB_ROW( %3u, %3u ) \\\n",ii,ii-1);
+
+        fprintf(files[HSG_FILE_TYPE_HEADER].file,
+                "  HS_EMPTY\n"
+                "          \n");
+
+        fprintf(files[HSG_FILE_TYPE_HEADER].file,
+                "#define HS_TRANSPOSE_SLAB()                \\\n");
+
+        for (uint32_t ii=1; ii<=warp_lanes_log2; ii++)
+          fprintf(files[HSG_FILE_TYPE_HEADER].file,
+                  "  HS_TRANSPOSE_STAGE( %u )                  \\\n",ii);
+
+        hsg_transpose(msb_idx_u32(hsg_config.warp.lanes),
+                      hsg_config.thread.regs,
+                      files[HSG_FILE_TYPE_HEADER].file,
+                      files[HSG_FILE_TYPE_HEADER].file,
+                      hsg_transpose_blend,
+                      hsg_transpose_remap);
+        
+        fprintf(files[HSG_FILE_TYPE_HEADER].file,
+                "  HS_EMPTY\n"
+                "          \n");
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "//                                                      \n"                
+                "// Copyright 2016 Google Inc.                           \n"
+                "//                                                      \n"
+                "// Use of this source code is governed by a BSD-style   \n"
+                "// license that can be found in the LICENSE file.       \n"
+                "//                                                      \n"
+                "                                                        \n"
+                "#include <%s_macros.h>                                  \n"
+                "                                                        \n"
+                "//                                                      \n"
+                "//                                                      \n"
+                "//                                                      \n",
+                files[HSG_FILE_TYPE_SOURCE].prefix);
+      }
+      break;
+
+    case HSG_OP_TYPE_FILE_FOOTER:
+      fprintf(files[HSG_FILE_TYPE_HEADER].file,
+              "                                \n"
+              "#endif                          \n"
+              "                                \n"
+              "//                              \n"
+              "//                              \n"
+              "//                              \n"
+              "                                \n");
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "                                \n"
+              "//                              \n"
+              "//                              \n"
+              "//                              \n"
+              "                                \n");
+      break;
+
+    case HSG_OP_TYPE_TRANSPOSE_KERNEL_PROTO:
+      {
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                " \n"
+                "__kernel                                                             \n"
+                "__attribute__((intel_reqd_sub_group_size(%u)))                       \n"
+                "void hs_kernel_transpose(__global HS_KEY_TYPE * const restrict vout) \n",
+                hsg_config.warp.lanes);
+      }
+      break;
+
+    case HSG_OP_TYPE_TRANSPOSE_KERNEL_PREAMBLE:
+      {
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "uint const global_id = get_global_id(0);                         \n"
+                "uint const gmem_idx  = (global_id / %u) * %u + (global_id & %u); \n"
+                "                                                                 \n",
+                hsg_config.warp.lanes,
+                hsg_config.warp.lanes * hsg_config.thread.regs,
+                hsg_config.warp.lanes-1);
+      }
+      break;
+
+    case HSG_OP_TYPE_TRANSPOSE_KERNEL_BODY:
+      {
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "HS_TRANSPOSE_SLAB()\n");
+      }
+      break;
+      
+    case HSG_OP_TYPE_BS_KERNEL_PROTO:
+      {
+        struct hsg_merge const * const m = merge + ops->a;
+        
+        uint32_t const tpb = m->warps * hsg_config.warp.lanes;
+        uint32_t const bs  = pow2_ru_u32(m->warps);
+        uint32_t const msb = msb_idx_u32(bs);
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                " \n"
+                "__kernel                                                               \n"
+                "__attribute__((reqd_work_group_size(%u,1,1)))                          \n"
+                "__attribute__((intel_reqd_sub_group_size(%u)))                         \n"
+                "void hs_kernel_bs_%u(__global HS_KEY_TYPE const * const restrict vin,  \n"
+                "                     __global HS_KEY_TYPE       * const restrict vout) \n",
+                tpb,
+                hsg_config.warp.lanes,
+                msb);
+      }
+      break;
+      
+    case HSG_OP_TYPE_BS_KERNEL_PREAMBLE:
+      {
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "__local union { \n");
+
+        struct hsg_merge const * const m = merge + ops->a;
+
+        if (m->warps > 1)
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "  HS_KEY_TYPE m[%u * %u];\n",
+                    m->rows_bs,
+                    m->warps * hsg_config.warp.lanes);
+          }
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "} shared;          \n"
+                "                   \n");
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "uint const global_id = get_global_id(0);                         \n"
+                "uint const gmem_idx  = (global_id / %u) * %u + (global_id & %u); \n"
+                "                                                                 \n",
+                hsg_config.warp.lanes,
+                hsg_config.warp.lanes * hsg_config.thread.regs,
+                hsg_config.warp.lanes-1);
+      }
+      break;
+
+    case HSG_OP_TYPE_BC_KERNEL_PROTO:
+      {
+        uint32_t const bc_max = pow2_rd_u32(merge[0].warps);
+        uint32_t const tpb    = bc_max * hsg_config.warp.lanes;
+        uint32_t const msb    = msb_idx_u32(merge[ops->a].warps);
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "                                                                 \n"
+                "__kernel                                                         \n"
+                "__attribute__((intel_reqd_sub_group_size(%u)))                   \n"
+                "void hs_kernel_bc_%u(__global HS_KEY_TYPE * const restrict vout) \n",
+                hsg_config.warp.lanes,msb);
+      }
+      break;
+
+    case HSG_OP_TYPE_BC_KERNEL_PREAMBLE:
+      {
+        struct hsg_merge const * const m      = merge + ops->a;
+        uint32_t                 const bc_max = pow2_rd_u32(merge[0].warps);
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "__local union {    \n");
+
+        if (m->warps > 1)
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "  HS_KEY_TYPE m[%-3u * %u];\n",
+                    m->rows_bc,
+                    m->warps * hsg_config.warp.lanes);
+          }
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "} shared;          \n"
+                "                   \n");
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "uint const global_id = get_global_id(0);                         \n"
+                "uint const gmem_idx  = (global_id / %u) * %u + (global_id & %u); \n"
+                "                                                                 \n",
+                hsg_config.warp.lanes,
+                hsg_config.warp.lanes * hsg_config.thread.regs,
+                hsg_config.warp.lanes-1);
+      }
+      break;
+
+    case HSG_OP_TYPE_FM_KERNEL_PROTO:
+      fprintf(files[HSG_FILE_TYPE_HEADER].file,
+              "#define HS_FM_BLOCKS_LOG2_%-2u   %u \n",
+              ops->a,ops->b);
+
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              " \n"
+              "__kernel                                                         \n"
+              "__attribute__((intel_reqd_sub_group_size(%u)))                   \n"
+              "void hs_kernel_fm_%u(__global HS_KEY_TYPE * const restrict vout, \n"
+              "                     uint const fm_full,                         \n"
+              "                     uint const fm_frac)                         \n",
+              hsg_config.warp.lanes,ops->a);
+      break;
+
+    case HSG_OP_TYPE_FM_KERNEL_PREAMBLE:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "uint const    global_id     = (uint)get_global_id(0);                                   \n"
+              "uint const    warp_idx      = global_id / %u;                                           \n"
+              "uint const    warp_lane_idx = global_id & %u;                                           \n"
+              "                                                                                        \n"
+              "uint const    merge_idx     = warp_idx / %u >> %u;                                      \n"
+              "                                                                                        \n"
+              "uint const    merge_stride  = %u * %u << %u;                                            \n"
+              "uint const    merge_keys    = merge_stride * %u;                                        \n"
+              "                                                                                        \n"
+              "uint const    merge_base    = merge_idx * merge_keys;                                   \n"
+              "                                                                                        \n"
+              "uint const    merge_l_off   = (warp_idx - merge_idx * (%u << %u)) * %u + warp_lane_idx; \n"
+              "uint const    merge_l_end   = merge_stride * (%u / 2 - 1) + merge_l_off;                \n"
+              "                                                                                        \n"
+              "int  const    merge_r_off   = merge_keys - merge_l_end - 1;                             \n"
+              "                                                                                        \n"
+              "__global HS_KEY_TYPE * const restrict merge_l = vout + (merge_base + merge_l_off);      \n"
+              "__global HS_KEY_TYPE * const restrict merge_r = vout + (merge_base + merge_r_off);      \n"
+              "                                                                                        \n",
+              hsg_config.warp.lanes,
+              hsg_config.warp.lanes-1,
+              hsg_config.thread.regs,ops->b,
+              hsg_config.thread.regs,hsg_config.warp.lanes,ops->b,
+              ops->a,
+              hsg_config.thread.regs,ops->b,hsg_config.warp.lanes,
+              ops->a);
+      break;
+
+    case HSG_OP_TYPE_HM_KERNEL_PROTO:
+      {
+        uint32_t const bc_max = msb_idx_u32(pow2_rd_u32(merge[0].warps));
+
+        fprintf(files[HSG_FILE_TYPE_HEADER].file,
+                "#define HS_HM_BLOCKS_LOG2_%-2u   %u \n",
+                ops->a,ops->b);
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                " \n"
+                "__kernel                                                         \n"
+                "__attribute__((intel_reqd_sub_group_size(%u)))                   \n"
+                "void hs_kernel_hm_%u(__global HS_KEY_TYPE * const restrict vout) \n",
+                hsg_config.warp.lanes,ops->a);
+      }
+      break;
+
+    case HSG_OP_TYPE_HM_KERNEL_PREAMBLE:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "uint const    global_id     = (uint)get_global_id(0);                          \n"
+              "uint const    warp_idx      = global_id / %u;                                  \n"
+              "uint const    warp_lane_idx = global_id & %u;                                  \n"
+              "                                                                               \n"
+              "uint const    merge_idx     = (warp_idx / %u) >> %u;                           \n"
+              "                                                                               \n"
+              "uint const    merge_stride  = %u * %u << %u;                                   \n"
+              "uint const    merge_keys    = merge_stride * %u;                               \n"
+              "                                                                               \n"
+              "uint const    merge_base    = merge_idx * merge_keys;                          \n"
+              "uint const    merge_off     = (warp_idx - merge_idx * (%u << %u)) * %u;        \n"
+              "                                                                               \n"
+              "__global HS_KEY_TYPE * const restrict merge_ptr = vout + (merge_base + merge_off + warp_lane_idx); \n"
+              "                                                                               \n",
+              hsg_config.warp.lanes,
+              hsg_config.warp.lanes-1,
+              hsg_config.thread.regs,ops->b,
+              hsg_config.thread.regs,hsg_config.warp.lanes,ops->b,
+              ops->a,
+              hsg_config.thread.regs,ops->b,hsg_config.warp.lanes);
+      break;
+
+    case HSG_OP_TYPE_BX_REG_GLOBAL_LOAD:
+      {
+        static char const * const vstr[] = { "vin", "vout" };
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "HS_KEY_TYPE r%-3u = (%s + gmem_idx)[%-3u * %u]; \n",
+                ops->n,vstr[ops->v],ops->n-1,hsg_config.warp.lanes);
+      }
+      break;
+
+    case HSG_OP_TYPE_BX_REG_GLOBAL_STORE:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "(vout + gmem_idx)[%-3u * %u] = r%u; \n",
+              ops->n-1,hsg_config.warp.lanes,ops->n);
+      break;
+
+    case HSG_OP_TYPE_HM_REG_GLOBAL_LOAD:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "HS_KEY_TYPE r%-3u = merge_ptr[%-3u * merge_stride];\n",
+              ops->a,ops->b);
+      break;
+
+    case HSG_OP_TYPE_HM_REG_GLOBAL_STORE:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "merge_ptr[%-3u * merge_stride] = r%u;\n",
+              ops->b,ops->a);
+      break;
+
+    case HSG_OP_TYPE_FM_REG_GLOBAL_LOAD_LEFT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "HS_KEY_TYPE r%-3u = merge_l[%-3u * merge_stride];\n",
+              ops->a,ops->b);
+      break;
+
+    case HSG_OP_TYPE_FM_REG_GLOBAL_STORE_LEFT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "merge_l[%-3u * merge_stride] = r%u;\n",
+              ops->b,ops->a);
+      break;
+
+    case HSG_OP_TYPE_FM_REG_GLOBAL_LOAD_RIGHT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "HS_KEY_TYPE r%-3u = merge_r[%-3u * merge_stride];\n",
+              ops->a,ops->b);
+      break;
+
+    case HSG_OP_TYPE_FM_REG_GLOBAL_STORE_RIGHT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "merge_r[%-3u * merge_stride] = r%u;\n",
+              ops->b,ops->a);
+      break;
+
+    case HSG_OP_TYPE_WARP_FLIP:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "uint const flip_lane_mask = %u;                                        \n"
+              "uint const flip_lane_idx  = get_sub_group_local_id() ^ flip_lane_mask; \n"
+              "int  const t_lt           = get_sub_group_local_id() < flip_lane_idx;  \n",
+              ops->n-1);
+      break;
+
+    case HSG_OP_TYPE_WARP_HALF:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "uint const half_lane_mask = %u;                                        \n"
+              "uint const half_lane_idx  = get_sub_group_local_id() ^ half_lane_mask; \n"
+              "int  const t_lt           = get_sub_group_local_id() < half_lane_idx;  \n",
+              ops->n / 2);
+      break;
+
+    case HSG_OP_TYPE_CMP_FLIP:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,      
+              "HS_CMP_FLIP(%-3u,r%-3u,r%-3u)\n",ops->a,ops->b,ops->c);
+      break;
+
+    case HSG_OP_TYPE_CMP_HALF:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,      
+              "HS_CMP_HALF(%-3u,r%-3u)\n",ops->a,ops->b);
+      break;
+
+    case HSG_OP_TYPE_CMP_XCHG:
+      if (ops->c == UINT32_MAX)
+        {
+          fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                  "HS_CMP_XCHG(r%-3u,r%-3u)\n",
+                  ops->a,ops->b);
+        }
+      else
+        {
+          fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                  "HS_CMP_XCHG(r%u_%u,r%u_%u)\n",
+                  ops->c,ops->a,ops->c,ops->b);
+        }
+      break;
+
+    case HSG_OP_TYPE_BS_REG_SHARED_STORE_V:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "(shared.m + get_local_id(0))[%-3u * %-2u * %-3u] = r%u;\n",
+              merge[ops->a].warps,hsg_config.warp.lanes,ops->c,ops->b);
+      break;
+
+    case HSG_OP_TYPE_BS_REG_SHARED_LOAD_V:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "r%-3u = (shared.m + get_local_id(0))[%-3u * %-2u * %-3u];\n",
+              ops->b,merge[ops->a].warps,hsg_config.warp.lanes,ops->c);
+      break;
+
+    case HSG_OP_TYPE_BC_REG_SHARED_LOAD_V:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "HS_KEY_TYPE r%-3u = (shared.m + get_local_id(0))[%-3u * %-2u * %-3u];\n",
+              ops->b,ops->a,hsg_config.warp.lanes,ops->c);
+      break;
+
+    case HSG_OP_TYPE_BX_REG_SHARED_STORE_LEFT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "(shared.m + smem_l_idx)[%5u] = r%u_%u;\n",
+              ops->b * hsg_config.warp.lanes,
+              ops->c,
+              ops->a);
+      break;
+
+    case HSG_OP_TYPE_BS_REG_SHARED_STORE_RIGHT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "(shared.m + smem_r_idx)[%5u] = r%u_%u;\n",
+              ops->b * hsg_config.warp.lanes,
+              ops->c,
+              ops->a);
+      break;
+      
+    case HSG_OP_TYPE_BS_REG_SHARED_LOAD_LEFT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "HS_KEY_TYPE r%u_%-3u = (shared.m + smem_l_idx)[%u];\n",
+              ops->c,
+              ops->a,
+              ops->b * hsg_config.warp.lanes);
+      break;
+
+    case HSG_OP_TYPE_BS_REG_SHARED_LOAD_RIGHT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "HS_KEY_TYPE r%u_%-3u = (shared.m + smem_r_idx)[%u];\n",
+              ops->c,
+              ops->a,
+              ops->b * hsg_config.warp.lanes);
+      break;
+
+    case HSG_OP_TYPE_BC_REG_GLOBAL_LOAD_LEFT:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "HS_KEY_TYPE r%u_%-3u = (vout + gmem_l_idx)[%u];\n",
+              ops->c,
+              ops->a,
+              ops->b * hsg_config.warp.lanes);
+      break;
+
+    case HSG_OP_TYPE_BLOCK_SYNC:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "barrier(CLK_LOCAL_MEM_FENCE);\n"); // OpenCL 2.0+: work_group_barrier
+      break;
+
+    case HSG_OP_TYPE_BS_FRAC_PRED:
+      {
+        if (ops->m == 0)
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "if (warp_idx < bs_full)\n");
+          }
+        else
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "else if (bs_frac == %u)\n",
+                    ops->w);
+          }
+      }
+      break;
+
+    case HSG_OP_TYPE_BS_MERGE_H_PREAMBLE:
+      {
+        struct hsg_merge const * const m = merge + ops->a;
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "uint const smem_l_idx = get_sub_group_id() * %u + get_sub_group_local_id(); \n"
+                "uint const smem_r_idx = (get_sub_group_id() ^ 1) * %u + (get_sub_group_local_id() ^ %u); \n",
+                m->warps * hsg_config.warp.lanes,
+                m->warps * hsg_config.warp.lanes, hsg_config.warp.lanes-1);
+#if 0
+        if (ops->b == true)
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "uint smem_l_idx =  get_sub_group_id()      * %u +  get_sub_group_local_id();       \n"
+                    "uint smem_r_idx = (get_sub_group_id() ^ 1) * %u + (get_sub_group_local_id() ^ %u); \n",
+                    m->warps * hsg_config.warp.lanes,
+                    m->warps * hsg_config.warp.lanes, hsg_config.warp.lanes-1);
+          }
+        else // update
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "smem_l_idx =  get_sub_group_id()      * %u +  get_sub_group_local_id();       \n"
+                    "smem_r_idx = (get_sub_group_id() ^ 1) * %u + (get_sub_group_local_id() ^ %u); \n",
+                    m->warps * hsg_config.warp.lanes,
+                    m->warps * hsg_config.warp.lanes, hsg_config.warp.lanes-1);
+          }
+#endif
+      }
+      break;
+      
+    case HSG_OP_TYPE_BC_MERGE_H_PREAMBLE:
+      {
+        struct hsg_merge const * const m = merge + ops->a;
+        uint32_t                 const b = m->warps * hsg_config.warp.lanes;
+        uint32_t                 const k = b * hsg_config.thread.regs;
+
+        fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                "uint const gmem_l_idx = (global_id / %u) * %u + (global_id & %u);            \n"
+                "uint const smem_l_idx = get_sub_group_id() * %u  + get_sub_group_local_id(); \n",
+                b,k,b-1,
+                b);
+
+      }
+      break;
+      
+    case HSG_OP_TYPE_BX_MERGE_H_PRED:
+      fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+              "if (get_sub_group_id() < %u)\n",
+              ops->a);
+      break;
+
+    case HSG_OP_TYPE_BS_ACTIVE_PRED:
+      {
+        struct hsg_merge const * const m = merge + ops->a;
+
+        if (m->warps <= 32)
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "if (((1u << get_sub_group_id()) & 0x%08X) != 0)\n",
+                    m->levels[ops->b].active.b32a2[0]);
+          }
+        else
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "if (((1UL << get_sub_group_id()) & 0x%08X%08XL) != 0L)\n",
+                    m->levels[ops->b].active.b32a2[1],
+                    m->levels[ops->b].active.b32a2[0]);
+          }
+      }
+      break;
+
+    case HSG_OP_TYPE_FM_MERGE_RIGHT_PRED:
+      {
+        if (ops->a == ops->b)
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "if (merge_idx < fm_full) \n");
+          }
+        else if (ops->b > 1)
+          {
+            fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+                    "else if (fm_frac == %u) \n",
+                    ops->b);
+          }
+        else
+          {
+	    fprintf(files[HSG_FILE_TYPE_SOURCE].file,
+		    "else\n");
+          }
+      }
+      break;
+
+    default:
+      hsg_target_debug(files,merge,ops,depth);
+      break;
+    }
+}
+
+//
+//
+//
diff --git a/src/compute/hs/gen/transpose.c b/src/compute/hs/gen/transpose.c
new file mode 100644
index 0000000..f99e966
--- /dev/null
+++ b/src/compute/hs/gen/transpose.c
@@ -0,0 +1,172 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include "transpose.h"
+#include "macros.h"
+
+//
+// Rows must be an even number.  This is enforced elsewhere.
+//
+// The transpose requires (cols_log2 * rows/2) row-pair blends.
+//
+void
+hsg_transpose(uint32_t                   const cols_log2,
+              uint32_t                   const rows,
+              void *                           blend,
+              void *                           remap,
+              void (*pfn_blend)(uint32_t const cols_log2,
+                                uint32_t const row_ll, // lower-left
+                                uint32_t const row_ur, // upper-right
+                                void *         blend),
+              void (*pfn_remap)(uint32_t const row_from,
+                                uint32_t const row_to,
+                                void *         remap))
+{
+  // get mapping array
+  uint32_t * map_curr = ALLOCA(rows * sizeof(*map_curr));
+  uint32_t * map_next = ALLOCA(rows * sizeof(*map_next));  
+
+  // init the mapping array
+  for (uint32_t ii=0; ii<rows; ii++)
+    map_curr[ii] = ii;
+
+  // successively transpose rows using blends
+  for (uint32_t cc=1; cc<=cols_log2; cc++)
+    {
+      uint32_t const mask = BITS_TO_MASK(cc);
+
+      for (uint32_t ii=0; ii<rows; ii++)
+        {
+          uint32_t const left = map_curr[ii];
+          uint32_t const stay = left & ~mask;
+
+          if (left != stay) // will be swapped away
+            {
+              for (uint32_t jj=0; jj<rows; jj++)
+                {
+                  if (map_curr[jj] == stay) 
+                    {
+                      map_next[jj] = stay;
+                      map_next[ii] = stay + (rows << (cc-1));
+
+                      pfn_blend(cc,ii,jj,blend); // log2,left,right,payload
+
+                      break;
+                    }
+                }
+            }
+        }
+
+      uint32_t * tmp = map_curr;
+
+      map_curr = map_next;
+      map_next = tmp;
+    }
+
+  // write out the remapping
+  for (uint32_t ii=0; ii<rows; ii++)
+    pfn_remap(ii,map_curr[ii] >> cols_log2,remap);
+}
+
+//
+// test it!
+//
+
+#ifdef HS_TRANSPOSE_DEBUG
+
+#include <stdio.h>
+
+static uint32_t cols; // implicit on SIMD/GPU
+
+static
+void 
+hsg_debug_remap(uint32_t   const row_from,
+                uint32_t   const row_to,
+                uint32_t * const r)
+{
+  fprintf(stdout,"REMAP( %3u, %3u )\n",row_from,row_to);
+
+  r[row_to] = row_from;
+}
+
+static
+void 
+hsg_debug_blend(uint32_t const cols_log2,
+                uint32_t const row_ll, // lower-left 
+                uint32_t const row_ur, // upper-right
+                uint32_t *     m)
+{
+  fprintf(stdout,"BLEND( %u, %3u, %3u )\n",cols_log2,row_ll,row_ur);
+
+  uint32_t * const ll = ALLOCA(cols * sizeof(*m));
+  uint32_t * const ur = ALLOCA(cols * sizeof(*m));
+
+  memcpy(ll,m+row_ll*cols,cols * sizeof(*m));
+  memcpy(ur,m+row_ur*cols,cols * sizeof(*m));
+
+  for (uint32_t ii=0; ii<cols; ii++)
+    m[row_ll*cols+ii] = ((ii >> cols_log2-1) & 1) ? ll[ii] : ur[ii^(1<<cols_log2-1)];
+
+  for (uint32_t ii=0; ii<cols; ii++)
+    m[row_ur*cols+ii] = ((ii >> cols_log2-1) & 1) ? ll[ii^(1<<cols_log2-1)] : ur[ii];
+}
+
+static
+void
+hsg_debug_print(uint32_t         const rows,
+                uint32_t const * const m,
+                uint32_t const * const r)
+{
+  for (uint32_t rr=0; rr<rows; rr++) {
+    for (uint32_t cc=0; cc<cols; cc++)
+      fprintf(stdout,"%4u ",m[r[rr]*cols + cc]);
+    fprintf(stdout,"\n");
+  }
+}
+
+int
+main(int argc, char * argv[])
+{
+  uint32_t const cols_log2 = (argc <= 1) ? 3 : strtoul(argv[1],NULL,0);
+  uint32_t const rows      = (argc <= 2) ? 6 : strtoul(argv[2],NULL,0);
+
+  if (rows & 1)
+    return;
+
+  cols = 1 << cols_log2;
+
+  uint32_t * const m = ALLOCA(cols * rows * sizeof(*m));
+  uint32_t * const r = ALLOCA(       rows * sizeof(*r));
+
+  for (uint32_t rr=0; rr<rows; rr++) {
+    r[rr] = rr;
+    for (uint32_t cc=0; cc<cols; cc++)
+      m[rr*cols+cc] = cc*rows+rr;
+  }
+
+  hsg_debug_print(rows,m,r);
+
+  hsg_transpose(cols_log2,rows,
+                m,r,
+                hsg_debug_blend,
+                hsg_debug_remap);
+
+  hsg_debug_print(rows,m,r);
+
+  return 0;
+}
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/hs/gen/transpose.h b/src/compute/hs/gen/transpose.h
new file mode 100644
index 0000000..83f6fc4
--- /dev/null
+++ b/src/compute/hs/gen/transpose.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include <stdint.h>
+
+//
+// There must be an even number of rows.  This is enforced elsewhere.
+//
+// The transpose requires (cols_log2 * rows/2) row-pair blends.
+//
+
+void
+hsg_transpose(uint32_t                   const cols_log2,
+              uint32_t                   const rows,
+              void *                           blend,
+              void *                           remap,
+              void (*pfn_blend)(uint32_t const cols_log2,
+                                uint32_t const row_ll, // lower-left
+                                uint32_t const row_ur, // upper-right
+                                void *         blend),
+              void (*pfn_remap)(uint32_t const row_from,
+                                uint32_t const row_to,
+                                void *         remap));
+
+//
+//
+//
diff --git a/src/compute/sk/SkContext_Compute.cpp b/src/compute/sk/SkContext_Compute.cpp
new file mode 100644
index 0000000..331fad6
--- /dev/null
+++ b/src/compute/sk/SkContext_Compute.cpp
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ */
+
+#include "SkContext_Compute.h"
+
+//
+//
+//
+
+//
+//
+//
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#define TARGET_PLATFORM_SUBSTRING   "TO BE SET"
+#define TARGET_DEVICE_SUBSTRING     "TO BE SET"
+
+//
+//
+//
+
+//
+//
+//
+
+SkContext_Compute::SkContext_Compute(GrGLInterface const * fInterface)
+  : fInterface(fInterface)
+{
+  //
+  // Make sure fInterface destruction occurs after compute
+  //
+  SkSafeRef(fInterface);
+
+  skc_err err;
+
+  //
+  // CREATE A NEW SPINEL CONTEXT AND ATTACH TO WINDOW
+  //
+  err = skc_context_create(&context, TARGET_PLATFORM_SUBSTRING, TARGET_DEVICE_SUBSTRING);
+  SKC_ERR_CHECK(err);
+
+  //
+  // CREATE A NEW REUSABLE INTEROP OBJECT
+  //
+  // interop = skc_interop_create(fInterface,1); TODO have this in skc.h
+
+  //
+  // CREATE A NEW REUSABLE SURFACE OBJECT
+  //
+  err = skc_surface_create(context,
+			   interop,
+			   &surface);
+  SKC_ERR_CHECK(err);
+}
+
+//
+//
+//
+
+SkContext_Compute::~SkContext_Compute()
+{
+  skc_err err;
+
+  // dispose of surface
+  err = skc_surface_dispose(surface);
+  SKC_ERR_CHECK(err);
+
+  // dispose of interop
+  // skc_interop_dispose(interop); TODO have this in skc.h
+
+  // dispose of context
+  err = skc_context_release(context);
+  SKC_ERR_CHECK(err);
+
+  // unref GL interface
+  SkSafeUnref(fInterface);
+}
+
+//
+//
+//
+
diff --git a/src/compute/sk/SkContext_Compute.h b/src/compute/sk/SkContext_Compute.h
new file mode 100644
index 0000000..066e11d
--- /dev/null
+++ b/src/compute/sk/SkContext_Compute.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "gl/GrGLInterface.h"
+
+//
+//
+//
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "skc.h"
+
+#ifdef __cplusplus
+}
+#endif
+
+//
+//
+//
+
+class SkContext_Compute : public SkRefCntBase
+{
+ public:
+
+  //
+  //
+  //
+
+  SkContext_Compute(GrGLInterface const * fInterface);
+
+  ~SkContext_Compute();
+
+  //
+  //
+  //
+
+  skc_context_t context;
+  skc_interop_t interop;
+  skc_surface_t surface;
+
+  //
+  //
+  //
+
+ private:
+
+  GrGLInterface const * fInterface;
+
+  //
+  //
+  //
+};
+
+//
+//
+//
diff --git a/src/compute/sk/SkDevice_Compute.cpp b/src/compute/sk/SkDevice_Compute.cpp
new file mode 100644
index 0000000..f19f7db
--- /dev/null
+++ b/src/compute/sk/SkDevice_Compute.cpp
@@ -0,0 +1,887 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ */
+
+//
+// C++
+//
+
+#include "SkDevice_Compute.h"
+#include "SkPM4f.h"
+
+//
+//
+//
+
+#if SK_SUPPORT_GPU_COMPUTE
+
+//
+// C++
+//
+
+#include "SkImageInfo.h"
+#include "SkDraw.h"
+#include "SkMatrix.h"
+#include "SkPath.h"
+
+//
+// C
+//
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "../spinel/spinel/color.h"
+#include "../compute/skc/skc.h"
+
+#ifdef __cplusplus
+}
+#endif
+
+//
+//
+//
+
+SkDevice_Compute::SkDevice_Compute(sk_sp<SkContext_Compute> compute, int w, int h)
+    : SkClipStackDevice(SkImageInfo::MakeN32Premul(w,h), SkSurfaceProps(0,kUnknown_SkPixelGeometry))
+    , fCompute(std::move(compute))
+{
+  fTopCTM = this->ctm();
+  fTransformWeakref = SKC_WEAKREF_INVALID;
+
+  fClipWeakref = SKC_WEAKREF_INVALID;
+
+  skc_err err;
+
+  //
+  // create a composition
+  //
+#define LAYER_COUNT (1<<14)
+
+  err = skc_composition_create(fCompute->context, &fComposition);
+  SKC_ERR_CHECK(err);
+
+    // Is this correct?
+    int clipRect[] = { 0, 0, w - 1, h - 1 };
+  err = skc_composition_clip_set(fComposition, clipRect);
+  SKC_ERR_CHECK(err);
+
+  //
+  // create styling
+  //
+  err = skc_styling_create(fCompute->context,
+                           LAYER_COUNT,
+                           10,
+                           2 * 1024 * 1024,
+                           &fStyling);
+
+  //
+  // create a path builder
+  //
+  err = skc_path_builder_create(fCompute->context, &fPB);
+  SKC_ERR_CHECK(err);
+
+  //
+  // create a raster builder
+  //
+  err = skc_raster_builder_create(fCompute->context, &fRB);
+  SKC_ERR_CHECK(err);
+
+  //
+  // create the simplest styling group that encloses all layers
+  //
+  styling_group_init();
+}
+
+
+//
+//
+//
+
+SkDevice_Compute::~SkDevice_Compute() {
+    skc_err err;
+
+    err = skc_raster_builder_release(fRB);
+    SKC_ERR_CHECK(err);
+
+    err = skc_path_builder_release(fPB);
+    SKC_ERR_CHECK(err);
+
+    err = skc_styling_dispose(fStyling);
+    SKC_ERR_CHECK(err);
+
+    err = skc_composition_dispose(fComposition);
+    SKC_ERR_CHECK(err);
+}
+
+//
+//
+//
+
+void SkDevice_Compute::flush() {
+    //
+    // seal the styling and composition objects
+    //
+    skc_err err;
+
+    err = skc_composition_seal(fComposition);
+    SKC_ERR_CHECK(err);
+
+    err = skc_styling_seal(fStyling);
+    SKC_ERR_CHECK(err);
+
+    //
+    // we're going to block here -- API mismatch
+    //
+
+    //
+    // render to surface
+    //
+    // note this implicitly seals composition and styling
+    //
+    err = skc_surface_render(fCompute->surface, fComposition, fStyling);
+    SKC_ERR_CHECK(err);
+
+    //
+    // kick off pipeline and wait here -- not needed since skc_surface_reset() blocks
+    //
+    err = skc_surface_wait(fCompute->surface);
+    SKC_ERR_CHECK(err);
+
+    //
+    // reset the surface -- implicitly waits for render to finish -- FIXME -- composition might be released too early
+    //
+    err = skc_surface_reset(fCompute->surface);
+    SKC_ERR_CHECK(err);
+
+    //
+    // reset composition and styling
+    //
+    err = skc_composition_reset(fComposition);
+    SKC_ERR_CHECK(err);
+
+    err = skc_styling_reset(fStyling);
+    SKC_ERR_CHECK(err);
+
+    //
+    //
+    //
+    styling_group_init();
+}
+
+//
+//
+//
+
+#define SKC_STYLING_CMDS(...) SK_ARRAY_COUNT(__VA_ARGS__),__VA_ARGS__
+#define SKC_GROUP_IDS(...)    SK_ARRAY_COUNT(__VA_ARGS__),__VA_ARGS__
+
+void SkDevice_Compute::styling_group_init() {
+    skc_styling_group_alloc(fStyling, &fGroupID);
+    fParents.push_back(fGroupID);
+
+    // ENTER
+    skc_styling_cmd_t const styling_cmds_enter[] = {
+        SKC_STYLING_CMD_OP_COVER_ZERO_ACC,
+        SKC_STYLING_CMD_OP_COLOR_ZERO_ACC | SKC_STYLING_CMD_OP_IS_FINAL
+    };
+    skc_styling_group_enter(fStyling, fGroupID, SKC_STYLING_CMDS(styling_cmds_enter));
+
+    skc_group_id const group_id_parents[] = { fGroupID };
+    skc_styling_group_parents(fStyling, fGroupID, SKC_GROUP_IDS(group_id_parents));
+
+    // RANGE
+    skc_styling_group_range_lo(fStyling, fGroupID, 0);
+    skc_styling_group_range_hi(fStyling, fGroupID, LAYER_COUNT-1);
+
+    // LEAVE
+    skc_styling_cmd_t const styling_cmds_leave[] = {
+        SKC_STYLING_CMD_OP_SURFACE_COMPOSITE | SKC_STYLING_CMD_OP_IS_FINAL
+    };
+    skc_styling_group_leave(fStyling, fGroupID, SKC_STYLING_CMDS(styling_cmds_leave));
+
+    // START
+    fGroupLayerID = LAYER_COUNT-1;
+}
+
+//
+//
+//
+
+#define SK_SCALE_F32      (1.0f/255.0f)
+#define SK_TO_RGBA_F32(c) { SK_SCALE_F32 * SkColorGetR(c),      \
+                            SK_SCALE_F32 * SkColorGetG(c),      \
+                            SK_SCALE_F32 * SkColorGetB(c),      \
+                            SK_SCALE_F32 * SkColorGetA(c) }
+//
+//
+//
+
+void SkDevice_Compute::path_rasterize_and_place(const SkPaint&   paint,
+                                                const skc_path_t path,
+                                                const SkMatrix*  prePathMatrix) {
+    float transform[9];
+    const SkMatrix& ctm = fTopCTM;
+    SkMatrix tmp;
+
+    if (prePathMatrix) {
+        tmp.setConcat(ctm, *prePathMatrix);
+    }
+    transform[0] = tmp.get(SkMatrix::kMScaleX);
+    transform[1] = tmp.get(SkMatrix::kMSkewX );
+    transform[2] = tmp.get(SkMatrix::kMTransX);
+    transform[3] = tmp.get(SkMatrix::kMSkewY );
+    transform[4] = tmp.get(SkMatrix::kMScaleY);
+    transform[5] = tmp.get(SkMatrix::kMTransY);
+    transform[6] = tmp.get(SkMatrix::kMPersp0);
+    transform[7] = tmp.get(SkMatrix::kMPersp1);
+    transform[8] = tmp.get(SkMatrix::kMPersp2);
+
+    skc_transform_weakref_t& transform_weakref = fTransformWeakref;
+    //
+
+    // always invalid for now
+    //
+    skc_raster_clip_weakref_t clip_weakref = fClipWeakref;
+
+    // TODO Support arbitrary path clip?
+    SkRect devClip = SkRect::MakeFromIRect(this->devClipBounds());
+    const float clip[] = { devClip.fLeft, devClip.fTop, devClip.fRight, devClip.fBottom };
+
+    //
+    //
+    //
+    skc_err      err;
+    skc_raster_t raster;
+
+    err = skc_raster_begin(fRB);
+    err = skc_raster_add_filled(fRB, path, &transform_weakref, transform, &clip_weakref, clip);
+    err = skc_raster_end(fRB, &raster);
+
+    //
+    // can release path handle now because it is being referenced by raster
+    //
+    err = skc_path_release(fCompute->context, path);
+
+    //
+    // style the path
+    //
+    skc_styling_cmd_t cmds[1 + 3 + 1];
+
+    cmds[0]                      = SKC_STYLING_CMD_OP_COVER_NONZERO;
+    cmds[SK_ARRAY_COUNT(cmds)-1] = SKC_STYLING_CMD_OP_BLEND_OVER | SKC_STYLING_CMD_OP_IS_FINAL;
+
+    {
+        SkPM4f rgba = SkColor4f::FromColor(paint.getColor()).premul();
+
+        skc_styling_layer_fill_solid_encoder(cmds+1, rgba.fVec);
+
+        skc_styling_group_layer(fStyling, fGroupID, fGroupLayerID, SKC_STYLING_CMDS(cmds));
+    }
+
+    err = skc_composition_place(fComposition, fGroupLayerID, raster, 0, 0);
+
+    //
+    // can release raster handle now because it is being referenced by composition
+    //
+    err = skc_raster_release(fCompute->context, raster);
+
+    SkASSERT(err == SKC_ERR_SUCCESS);
+
+    fGroupLayerID -= 1;
+}
+
+//
+//
+//
+
+void SkDevice_Compute::path_add(const SkPaint&  paint,
+                                const SkPath&   path,
+                                const SkMatrix* prePathMatrix) {
+  skc_err err;
+
+  err = skc_path_begin(fPB);
+
+#if 0
+  SkPath::Iter    pi(path,false);
+#else
+  SkPath::RawIter pi(path); // this seems to work fine for now
+#endif
+
+  SkPoint xy0;
+
+  //
+  // build path
+  //
+  while (true)
+    {
+      SkPoint            pts[4];
+      SkPath::Verb const verb = pi.next(pts);
+
+      switch (verb)
+        {
+        case SkPath::kMove_Verb:
+	  xy0 = pts[0];
+          err = skc_path_move_to(fPB,
+                                 pts[0].x(),pts[0].y());
+          continue;
+
+        case SkPath::kLine_Verb:
+          err = skc_path_line_to(fPB,
+                                 pts[1].x(),pts[1].y());
+          continue;
+
+        case SkPath::kQuad_Verb:
+          err = skc_path_quad_to(fPB,
+                                 pts[1].x(),pts[1].y(),
+                                 pts[2].x(),pts[2].y());
+          continue;
+
+        case SkPath::kConic_Verb: // <--------------------- FIXME
+          err = skc_path_line_to(fPB,
+                                 pts[2].x(),pts[2].y());
+          continue;
+
+        case SkPath::kCubic_Verb:
+          err = skc_path_cubic_to(fPB,
+                                  pts[1].x(),pts[1].y(),
+                                  pts[2].x(),pts[2].y(),
+                                  pts[3].x(),pts[3].y());
+          continue;
+
+        case SkPath::kClose_Verb:
+          err = skc_path_line_to(fPB,xy0.x(),xy0.y());
+          continue;
+
+        case SkPath::kDone_Verb:
+          break;
+        }
+
+      //
+      // otherwise, kDone_Verb breaks out of while loop
+      //
+      break;
+    }
+
+  //
+  // seal the path
+  //
+  skc_path_t skc_path;
+
+  err = skc_path_end(fPB,&skc_path);
+
+  //
+  // rasterize the path and place it in a composition
+  //
+  path_rasterize_and_place(paint,skc_path,prePathMatrix);
+
+  SkASSERT(err == SKC_ERR_SUCCESS);
+}
+
+//
+//
+//
+
+void
+SkDevice_Compute::circles_add(
+			      const SkPaint  & paint,
+			      const SkPoint    points[],
+			      int32_t  const   count,
+			      SkScalar const   radius)
+{
+#define CIRCLE_KAPPA    0.55228474983079339840f // moar digits!
+
+#define CIRCLE_RADIUS_X radius
+#define CIRCLE_RADIUS_Y radius
+
+#define CIRCLE_KAPPA_X  (CIRCLE_RADIUS_X * CIRCLE_KAPPA)
+#define CIRCLE_KAPPA_Y  (CIRCLE_RADIUS_Y * CIRCLE_KAPPA)
+
+  //
+  // use a 4 Bezier approximation
+  //
+  float const circle[] =
+    {
+      0.0f,             +CIRCLE_RADIUS_Y,   // move_to
+
+      +CIRCLE_KAPPA_X,  +CIRCLE_RADIUS_Y,   // cubic_to
+      +CIRCLE_RADIUS_X, +CIRCLE_KAPPA_Y,
+      +CIRCLE_RADIUS_X,  0.0f,
+
+      +CIRCLE_RADIUS_X, -CIRCLE_KAPPA_Y,    // cubic_to
+      +CIRCLE_KAPPA_X,  -CIRCLE_RADIUS_Y,
+      0.0f,             -CIRCLE_RADIUS_Y,
+
+      -CIRCLE_KAPPA_X,  -CIRCLE_RADIUS_Y,   // cubic_to
+      -CIRCLE_RADIUS_X, -CIRCLE_KAPPA_Y,
+      -CIRCLE_RADIUS_X, 0.0f,
+
+      -CIRCLE_RADIUS_X, +CIRCLE_KAPPA_Y,    // cubic_to
+      -CIRCLE_KAPPA_X,  +CIRCLE_RADIUS_Y,
+      0.0f,             +CIRCLE_RADIUS_Y
+    };
+
+#define CXLAT(x,y,t) circle[x]+t.fX,circle[y]+t.fY
+
+  //
+  //
+  //
+
+  skc_err err;
+
+  err = skc_path_begin(fPB);
+
+  //
+  //
+  //
+  for (int32_t ii=0; ii<count; ii++)
+    {
+      SkPoint const p = points[ii];
+
+      err = skc_path_move_to(fPB,
+			     CXLAT(0,1,p));
+
+      err = skc_path_cubic_to(fPB,
+			      CXLAT(2,3,p),
+			      CXLAT(4,5,p),
+			      CXLAT(6,7,p));
+
+      err = skc_path_cubic_to(fPB,
+			      CXLAT(8, 9,p),
+			      CXLAT(10,11,p),
+			      CXLAT(12,13,p));
+
+      err = skc_path_cubic_to(fPB,
+			      CXLAT(14,15,p),
+			      CXLAT(16,17,p),
+			      CXLAT(18,19,p));
+
+      err = skc_path_cubic_to(fPB,
+			      CXLAT(20,21,p),
+			      CXLAT(22,23,p),
+			      CXLAT(24,25,p));
+    }
+
+  //
+  // seal the path
+  //
+  skc_path_t skc_path;
+
+  err = skc_path_end(fPB,&skc_path);
+
+  //
+  // rasterize the path and place it in a composition
+  //
+  path_rasterize_and_place(paint,skc_path,NULL);
+
+  SkASSERT(err == SKC_ERR_SUCCESS);
+}
+
+//
+//
+//
+
+void
+SkDevice_Compute::squares_add(
+			      const SkPaint  & paint,
+			      const SkPoint    points[],
+			      int32_t  const   count,
+			      SkScalar const   radius)
+{
+  float const square[] =
+    {
+      -radius,+radius, // move_to
+      +radius,+radius, // line_to
+      +radius,-radius, // line_to
+      -radius,-radius, // line_to
+      -radius,+radius  // line_to
+    };
+
+#define SXLAT(x,y,t) square[x]+t.fX,square[y]+t.fY
+
+  //
+  //
+  //
+
+  skc_err err;
+
+  err = skc_path_begin(fPB);
+
+  //
+  //
+  //
+  for (int32_t ii=0; ii<count; ii++)
+    {
+      SkPoint const p = points[ii];
+
+      err = skc_path_move_to(fPB,SXLAT(0,1,p));
+      err = skc_path_line_to(fPB,SXLAT(2,3,p));
+      err = skc_path_line_to(fPB,SXLAT(4,5,p));
+      err = skc_path_line_to(fPB,SXLAT(6,7,p));
+      err = skc_path_line_to(fPB,SXLAT(8,9,p));
+    }
+
+  //
+  // seal the path
+  //
+  skc_path_t skc_path;
+
+  err = skc_path_end(fPB,&skc_path);
+
+  //
+  // rasterize the path and place it in a composition
+  //
+  path_rasterize_and_place(paint,skc_path,NULL);
+
+  SkASSERT(err == SKC_ERR_SUCCESS);
+}
+
+//
+// FIXME -- THIS IS NOT CORRECT
+//
+// Need to implement butt, round, square caps
+//
+
+void
+SkDevice_Compute::line_stroked_butt(SkPoint  const xy0,
+				    SkPoint  const xy1,
+				    SkScalar const radius)
+{
+  float const dx    = xy1.fX - xy0.fX;
+  float const dy    = xy1.fY - xy0.fY;
+
+  float const hypot = hypotf(dx,dy);
+
+  // FIXME -- what's practical here?
+  if (hypot == 0.0f)
+    return;
+
+  float const scale = radius / hypot;
+
+  float const rx    = dy * scale;
+  float const ry    = dx * scale;
+
+  skc_err err;
+
+  err = skc_path_move_to(fPB,xy0.fX-rx,xy0.fY+ry);
+  err = skc_path_line_to(fPB,xy1.fX-rx,xy1.fY+ry);
+  err = skc_path_line_to(fPB,xy1.fX+rx,xy1.fY-ry);
+  err = skc_path_line_to(fPB,xy0.fX+rx,xy0.fY-ry);
+  err = skc_path_line_to(fPB,xy0.fX-rx,xy0.fY+ry);
+
+  SkASSERT(err == SKC_ERR_SUCCESS);
+}
+
+void
+SkDevice_Compute::lines_stroked_add(
+				    const SkPaint  & paint,
+				    const SkPoint    points[],
+				    int32_t  const   count,
+				    SkScalar const   radius)
+{
+  skc_err err;
+
+  err = skc_path_begin(fPB);
+
+  //
+  //
+  //
+  for (int32_t ii=0; ii<count; ii+=2)
+    line_stroked_butt(points[ii],points[ii+1],radius);
+
+  //
+  // seal the path
+  //
+  skc_path_t skc_path;
+
+  err = skc_path_end(fPB,&skc_path);
+
+  //
+  // rasterize the path and place it in a composition
+  //
+  path_rasterize_and_place(paint,skc_path,NULL);
+
+  SkASSERT(err == SKC_ERR_SUCCESS);
+}
+
+
+//
+//
+//
+
+//  drawPaint is really just a short-cut for drawRect(wide_open, paint)
+//  so we have to respect everything (but stroking and maskfilter) in the paint
+//  - color | shader
+//  - colorFilter
+//  - blendmode
+//  - etc.
+void SkDevice_Compute::drawPaint(const SkPaint& paint) {
+  //
+  // clear the surface -- will be postponed until render is complete
+  //
+  SkColor const c       = paint.getColor();
+  float         rgba[4] = SK_TO_RGBA_F32(c);
+
+  skc_surface_clear(fCompute->surface,rgba);
+}
+
+void SkDevice_Compute::drawPoints(SkCanvas::PointMode mode, size_t count, const SkPoint points[],
+                                  const SkPaint& paint) {
+    if (count == 0) {
+        return;
+    }
+
+    const SkScalar radius = paint.getStrokeWidth() * 0.5f;
+
+    /*
+     *  drawPoints draws each element (point, line) separately. This means our bulk-adding into the
+     *  same raster is not valid for most blendmodes.
+     */
+    switch (mode) {
+        case SkCanvas::kPoints_PointMode: {
+            if (paint.getStrokeCap() == SkPaint::kRound_Cap) {
+                circles_add(paint, points, (int32_t)count, radius);
+            } else {
+                squares_add(paint, points,(int32_t)count, radius);
+            }
+        } break;
+
+        case SkCanvas::kLines_PointMode: {
+            if (count <= 1) {
+                return;
+            }
+            lines_stroked_add(paint, points, (int32_t)count & ~1, radius);
+        } break;
+
+        case SkCanvas::kPolygon_PointMode: {
+            SkPoint xy0 = points[0];
+            skc_err err = skc_path_begin(fPB);
+
+            for (size_t i = 0; i < count; ++i) {
+                const SkPoint xy1 = points[i];
+                line_stroked_butt(xy0, xy1, radius);
+                xy0 = xy1;
+            }
+
+            //
+            // seal the path
+            //
+            skc_path_t skc_path;
+            err = skc_path_end(fPB, &skc_path);
+
+            //
+            // rasterize the path and place it in a composition
+            //
+            path_rasterize_and_place(paint, skc_path, nullptr);
+
+            SkASSERT(err == SKC_ERR_SUCCESS);
+        } break;
+
+        default:
+            break;
+    }
+}
+
+void SkDevice_Compute::drawRect(const SkRect& rect, const SkPaint& paint) {
+    SkPath path;
+
+    path.addRect(rect);
+    this->drawPath(path, paint, nullptr, true);
+}
+
+void SkDevice_Compute::drawOval(const SkRect& oval, const SkPaint& paint) {
+    SkPath path;
+
+    path.addOval(oval);
+    this->drawPath(path, paint, nullptr, true);
+}
+
+void SkDevice_Compute::drawRRect(const SkRRect& rrect, const SkPaint& paint) {
+    SkPath path;
+
+    path.addRRect(rrect);
+    this->drawPath(path, paint, nullptr, true);
+}
+
+void SkDevice_Compute::drawPath(const SkPath& path, const SkPaint& paint,
+                                const SkMatrix* prePathMatrix, bool pathIsMutable) {
+  if (paint.getStyle() == SkPaint::kFill_Style) {
+      path_add(paint,path,prePathMatrix);
+  } else {
+      SkPath stroked;
+
+#define SK_MAGIC_RES_SCALE 1024
+
+        paint.getFillPath(path, &stroked, nullptr, SK_MAGIC_RES_SCALE);
+        this->path_add(paint, stroked, prePathMatrix);
+    }
+}
+
+void SkDevice_Compute::drawText(const void*    text,
+                                size_t         length,
+                                SkScalar       x,
+                                SkScalar       y,
+                                const SkPaint& paint) {
+    SkPath outline;
+
+    paint.getTextPath(text,length,x,y,&outline);
+    this->drawPath(outline, paint, nullptr, true);
+}
+
+void
+SkDevice_Compute::drawPosText(const void     * text,
+                              size_t           length,
+                              const SkScalar   pos[],
+                              int              scalarsPerPos,
+                              const SkPoint  & offset,
+                              const SkPaint  & paint)
+{
+#if 0
+  draw.drawPosText_asPaths((const char *)text,length,
+			   pos,scalarsPerPos,offset,paint);
+#endif
+}
+
+SkBaseDevice* SkDevice_Compute::onCreateDevice(const CreateInfo& cinfo, const SkPaint* paint) {
+#ifdef SK_USE_COMPUTE_LAYER_GROUP
+    return this->createLayerGroup(cinfo, paint);
+#else
+    // TODO return a new SkDevice_Compute when SkDevice_ComputeLayerGroup doesn't work
+    return nullptr;
+#endif
+}
+
+void SkDevice_Compute::drawDevice(SkBaseDevice* device, int left, int top, const SkPaint& paint) {
+    // It seems that we won't support image filter until snapSpecial and drawSpecial are implemented
+    // (SkCanvas.cpp will call drawSpecial when the paint has an image filter).
+    SkASSERT(!paint.getImageFilter());
+
+#ifdef SK_USE_COMPUTE_LAYER_GROUP
+    // In case of SkDevice_ComputeLayerGroup, we close the group
+    SkDevice_ComputeLayerGroup* layerDevice = static_cast<SkDevice_ComputeLayerGroup*>(device);
+    SkASSERT(layerDevice->fRoot == this); // the layerDevice should belong to this root device
+    SkASSERT(layerDevice->fGroupID == fGroupID); // the layerDevice should be the top device
+
+    // left, top should be the same as the origin,
+    // and we can ignore them because we have no offscreen buffer.
+    SkASSERT(SkIPoint::Make(left, top) == device->getOrigin());
+
+    // close the group and pop the top device
+    skc_styling_group_range_lo(fStyling, fGroupID, fGroupLayerID + 1);
+    fGroupID = fParents.back();
+    fParents.pop_back();
+#else
+    // TODO handle the case where the device is a SkDevice_Compute rather than
+    // SkDevice_ComputeLayerGroup (in which case an offscreen buffer is created).
+#endif
+}
+
+#ifdef SK_USE_COMPUTE_LAYER_GROUP
+
+SkDevice_ComputeLayerGroup* SkDevice_Compute::createLayerGroup(const CreateInfo& cinfo,
+        const SkPaint* paint) {
+    return new SkDevice_ComputeLayerGroup(this, cinfo, paint);
+}
+
+void SkDevice_Compute::onCtmChanged() {
+    fTopCTM = this->ctm();
+    fTransformWeakref = SKC_WEAKREF_INVALID;
+}
+
+SkDevice_ComputeLayerGroup::SkDevice_ComputeLayerGroup(SkDevice_Compute* root,
+        const CreateInfo& cinfo, const SkPaint* paint)
+        : SkBaseDevice(SkImageInfo::MakeN32Premul(cinfo.fInfo.width(), cinfo.fInfo.height()),
+                       SkSurfaceProps(0,kUnknown_SkPixelGeometry)) {
+    // TODO clip the group using cinfo; handle the paint's alpha and maybe color filter?
+
+    // Create a new group. We'll restore the previous group during onRestore.
+    skc_styling_group_alloc(fRoot->fStyling, &fRoot->fGroupID);
+    fRoot->fParents.push_back(fRoot->fGroupID);
+    fGroupID = fRoot->fGroupID;
+
+    // ENTER
+    skc_styling_cmd_t const styling_cmds_enter[] = {
+        SKC_STYLING_CMD_OP_COVER_ZERO_ACC,
+        SKC_STYLING_CMD_OP_COLOR_ZERO_ACC
+    };
+    skc_styling_group_enter(fRoot->fStyling, fRoot->fGroupID, SKC_STYLING_CMDS(styling_cmds_enter));
+
+    skc_styling_group_parents(fRoot->fStyling, fRoot->fGroupID, fRoot->fParents.count(),
+            fRoot->fParents.begin());
+
+    // RANGE
+    // We'll set range_lo at restore
+    skc_styling_group_range_hi(fRoot->fStyling, fRoot->fGroupID, fRoot->fGroupLayerID);
+
+    // LEAVE
+    skc_styling_cmd_t const styling_cmds_leave[] = {
+        SKC_STYLING_CMD_OP_SURFACE_COMPOSITE
+    };
+    skc_styling_group_leave(fRoot->fStyling, fRoot->fGroupID, SKC_STYLING_CMDS(styling_cmds_leave));
+}
+
+void SkDevice_ComputeLayerGroup::drawDevice(SkBaseDevice* device, int left, int top,
+        const SkPaint& paint) {
+    fRoot->drawDevice(device, left, top, paint); // the root will properly close the group
+}
+
+SkBaseDevice* SkDevice_ComputeLayerGroup::onCreateDevice(const CreateInfo& cinfo,
+        const SkPaint* paint) {
+    return fRoot->createLayerGroup(cinfo, paint);
+}
+
+void SkDevice_ComputeLayerGroup::onCtmChanged() {
+    this->sanityCheck();
+
+    // Cancels the translation as we're not using an offscreen buffer
+    const SkIPoint& origin = this->getOrigin();
+    fRoot->fTopCTM = this->ctm();
+    fRoot->fTopCTM.postTranslate(SkIntToScalar(origin.fX), SkIntToScalar(origin.fY));
+    fRoot->fTransformWeakref = SKC_WEAKREF_INVALID;
+}
+
+void SkDevice_ComputeLayerGroup::onSave() {
+    this->sanityCheck();
+    fRoot->onSave();
+}
+
+void SkDevice_ComputeLayerGroup::onRestore() {
+    this->sanityCheck();
+    fRoot->onRestore();
+}
+
+void SkDevice_ComputeLayerGroup::onClipRect(const SkRect& rect, SkClipOp op, bool aa) {
+    this->sanityCheck();
+    fRoot->fClipStack.clipRect(rect, fRoot->fTopCTM, op, aa);
+    fRoot->fClipWeakref = SKC_WEAKREF_INVALID;
+}
+
+void SkDevice_ComputeLayerGroup::onClipRRect(const SkRRect& rrect, SkClipOp op, bool aa) {
+    this->sanityCheck();
+    fRoot->fClipStack.clipRRect(rrect, fRoot->fTopCTM, op, aa);
+    fRoot->fClipWeakref = SKC_WEAKREF_INVALID;
+}
+
+void SkDevice_ComputeLayerGroup::onClipPath(const SkPath& path, SkClipOp op, bool aa) {
+    this->sanityCheck();
+    fRoot->fClipStack.clipPath(path, fRoot->fTopCTM, op, aa);
+    fRoot->fClipWeakref = SKC_WEAKREF_INVALID;
+}
+
+void SkDevice_ComputeLayerGroup::onClipRegion(const SkRegion& deviceRgn, SkClipOp op) {
+    this->sanityCheck();
+    fRoot->onClipRegion(deviceRgn, op);
+}
+
+void SkDevice_ComputeLayerGroup::onSetDeviceClipRestriction(SkIRect* mutableClipRestriction) {
+    this->sanityCheck();
+    fRoot->onSetDeviceClipRestriction(mutableClipRestriction);
+}
+
+#endif // SK_USE_COMPUTE_LAYER_GROUP
+
+#endif
diff --git a/src/compute/sk/SkDevice_Compute.h b/src/compute/sk/SkDevice_Compute.h
new file mode 100644
index 0000000..d2d16e5
--- /dev/null
+++ b/src/compute/sk/SkDevice_Compute.h
@@ -0,0 +1,265 @@
+/*
+ * Copyright 2016 The Android Open Source Project
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ */
+
+#ifndef SkDevice_Compute_DEFINED
+#define SkDevice_Compute_DEFINED
+
+//
+// for now make sure it's defined
+//
+
+#if !defined(SK_SUPPORT_GPU_COMPUTE)
+#define SK_SUPPORT_GPU_COMPUTE 1
+#endif
+
+//
+//
+//
+
+#if SK_SUPPORT_GPU_COMPUTE
+
+// TODO Check whether we can use SkDevice_ComputeLayerGroup at compile time
+// by checking whether there is only one top device.
+#define SK_USE_COMPUTE_LAYER_GROUP
+
+//
+// C
+//
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <context.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#include "../compute/skc/skc.h"
+
+//
+// C++
+//
+
+#include "SkDevice.h"
+#include "SkClipStackDevice.h"
+#include "SkContext_Compute.h"
+#include "SkTArray.h"
+
+//
+//
+//
+
+#ifdef SK_USE_COMPUTE_LAYER_GROUP
+class SkDevice_ComputeLayerGroup;
+#endif
+
+class SkDevice_Compute : public SkClipStackDevice {
+public:
+    SkDevice_Compute(sk_sp<SkContext_Compute>, int w, int h);
+    ~SkDevice_Compute() override;
+
+    void drawPaint(const SkPaint& paint) override;
+    void drawPoints(SkCanvas::PointMode, size_t, const SkPoint[], const SkPaint&) override;
+    void drawRect(const SkRect&, const SkPaint&) override;
+    void drawOval(const SkRect&, const SkPaint&) override;
+    void drawRRect(const SkRRect&, const SkPaint&) override;
+    void drawPath(const SkPath&, const SkPaint&, const SkMatrix*, bool) override;
+    void drawText(const void*, size_t, SkScalar, SkScalar, const SkPaint&) override;
+    void drawPosText(const void*, size_t, const SkScalar[], int, const SkPoint&,
+                     const SkPaint&) override;
+
+    void onRestore() override {
+        this->SkClipStackDevice::onRestore();
+        fClipWeakref = SKC_WEAKREF_INVALID;
+    }
+    void onClipRect(const SkRect& rect, SkClipOp op, bool aa) override {
+        this->SkClipStackDevice::onClipRect(rect, op, aa);
+        fClipWeakref = SKC_WEAKREF_INVALID;
+    }
+    void onClipRRect(const SkRRect& rrect, SkClipOp op, bool aa) override {
+        this->SkClipStackDevice::onClipRRect(rrect, op, aa);
+        fClipWeakref = SKC_WEAKREF_INVALID;
+    }
+    void onClipPath(const SkPath& path, SkClipOp op, bool aa) override {
+        this->SkClipStackDevice::onClipPath(path, op, aa);
+        fClipWeakref = SKC_WEAKREF_INVALID;
+    }
+    void onClipRegion(const SkRegion& deviceRgn, SkClipOp op) override {
+        this->SkClipStackDevice::onClipRegion(deviceRgn, op);
+        fClipWeakref = SKC_WEAKREF_INVALID;
+    }
+    void onSetDeviceClipRestriction(SkIRect* clipRestriction) override {
+        this->SkClipStackDevice::onSetDeviceClipRestriction(clipRestriction);
+        fClipWeakref = SKC_WEAKREF_INVALID;
+    }
+
+    ClipType onGetClipType() const override {
+        // TODO Support non-rect clip
+        return kRect_ClipType;
+    }
+
+    void drawBitmap(const SkBitmap&, const SkMatrix&, const SkPaint&) override {}
+    void drawSprite(const SkBitmap&, int, int, const SkPaint&) override {}
+    void drawBitmapRect(const SkBitmap&, const SkRect*, const SkRect&, const SkPaint&,
+                        SkCanvas::SrcRectConstraint) override {}
+    void drawDevice(SkBaseDevice*, int, int, const SkPaint&) override;
+    void drawVertices(const SkVertices*, SkBlendMode, const SkPaint&) override {}
+    void flush() override;
+
+    SkBaseDevice* onCreateDevice(const CreateInfo&, const SkPaint*) override;
+
+    void onCtmChanged() override;
+
+    friend class SkDevice_ComputeLayerGroup;
+
+private:
+    void styling_group_init();
+
+    void path_add(const SkPaint&, const SkPath&, const SkMatrix* prePathMatrix = nullptr);
+    void circles_add(const SkPaint&, const SkPoint points[], int32_t count, SkScalar radius);
+    void squares_add(const SkPaint&, const SkPoint points[], int32_t count, SkScalar radius);
+    void line_stroked_butt(SkPoint xy0, SkPoint xy1, SkScalar radius);
+    void lines_stroked_add(const SkPaint&, const SkPoint points[], int32_t count, SkScalar radius);
+    void path_rasterize_and_place(const SkPaint&, const skc_path_t path,
+                                  const SkMatrix* prePathMatrix = nullptr);
+
+    sk_sp<SkContext_Compute> fCompute;
+
+    skc_composition_t    fComposition;
+    skc_styling_t        fStyling;
+
+    skc_path_builder_t   fPB;
+    skc_raster_builder_t fRB;
+
+    skc_group_id         fGroupID;
+    skc_group_id         fGroupLayerID;
+
+    // When SK_USE_COMPUTE_LAYER_GROUP is set, fTopCTM is the global CTM for the top device.
+    // When SK_USE_COMPUTE_LAYER_GROUP is not set, fTopCTM is equal to this->ctm().
+    SkMatrix                fTopCTM;
+    skc_transform_weakref_t fTransformWeakref;
+
+    skc_raster_clip_weakref_t fClipWeakref;
+
+#ifdef SK_USE_COMPUTE_LAYER_GROUP
+    SkTArray<skc_group_id> fParents;
+
+    SkDevice_ComputeLayerGroup* createLayerGroup(const CreateInfo&, const SkPaint*);
+#endif
+};
+
+#ifdef SK_USE_COMPUTE_LAYER_GROUP
+
+// A group of skc layers that correspond to a saveLayer in the top level (root) SkDevice_Compute.
+class SkDevice_ComputeLayerGroup : public SkBaseDevice {
+public:
+    SkDevice_ComputeLayerGroup(SkDevice_Compute* root, const CreateInfo&, const SkPaint*);
+    ~SkDevice_ComputeLayerGroup() override;
+
+    void drawPaint(const SkPaint& paint) override {
+        this->sanityCheck();
+        fRoot->drawPaint(paint);
+    }
+
+    void
+    drawPoints(SkCanvas::PointMode pm, size_t s, const SkPoint pts[], const SkPaint& p) override {
+        this->sanityCheck();
+        fRoot->drawPoints(pm, s, pts, p);
+    }
+
+    void drawRect(const SkRect& r, const SkPaint& p) override {
+        this->sanityCheck();
+        fRoot->drawRect(r, p);
+    }
+
+    void drawOval(const SkRect& r, const SkPaint& p) override {
+        this->sanityCheck();
+        fRoot->drawOval(r, p);
+    }
+
+    void drawRRect(const SkRRect& rr, const SkPaint& p) override {
+        this->sanityCheck();
+        fRoot->drawRRect(rr, p);
+    }
+
+    void drawPath(const SkPath& path, const SkPaint& p, const SkMatrix* m, bool b) override {
+        this->sanityCheck();
+        fRoot->drawPath(path, p, m, b);
+    }
+
+    void drawText(const void* t, size_t l, SkScalar x, SkScalar y, const SkPaint& p) override {
+        this->sanityCheck();
+        fRoot->drawText(t, l, x, y, p);
+    }
+
+    void drawPosText(const void* t, size_t l, const SkScalar p[], int s, const SkPoint& o,
+                     const SkPaint& paint) override {
+        this->sanityCheck();
+        fRoot->drawPosText(t, l, p, s, o, paint);
+    }
+
+    void onSave() override;
+    void onRestore() override;
+    void onClipRect(const SkRect& rect, SkClipOp, bool aa) override;
+    void onClipRRect(const SkRRect& rrect, SkClipOp, bool aa) override;
+    void onClipPath(const SkPath& path, SkClipOp, bool aa) override;
+    void onClipRegion(const SkRegion& deviceRgn, SkClipOp) override;
+    void onSetDeviceClipRestriction(SkIRect* mutableClipRestriction) override;
+    bool onClipIsAA() const override {
+        return fRoot->onClipIsAA();
+    }
+    void onAsRgnClip(SkRegion* rgn) const override {
+        return fRoot->onAsRgnClip(rgn);
+    }
+    ClipType onGetClipType() const override {
+        return fRoot->onGetClipType();
+    }
+
+    void onCtmChanged() override;
+
+    void drawBitmap(const SkBitmap&, const SkMatrix&, const SkPaint&) override {}
+    void drawSprite(const SkBitmap&, int, int, const SkPaint&) override {}
+    void drawBitmapRect(const SkBitmap&, const SkRect*, const SkRect&, const SkPaint&,
+                        SkCanvas::SrcRectConstraint) override {}
+    void drawDevice(SkBaseDevice*, int, int, const SkPaint&) override;
+    void drawVertices(const SkVertices*, SkBlendMode, const SkPaint&) override {}
+    void flush() override;
+
+    SkBaseDevice* onCreateDevice(const CreateInfo&, const SkPaint*) override;
+
+    friend class SkDevice_Compute;
+
+private:
+    SkDevice_Compute* fRoot;
+
+    // Save a copy of the current group id for sanity check.
+    // If the sanity check fails, we're probably in the Android world where
+    // multiple top-level devices can co-exist. In that case, we can no longer use the group syntax
+    // and we have to create a new root-level SkDevice_Compute with an offscreen surface.
+    // According to reed@, we should be able to tell whether this sanity check will fail
+    // at the compile time (e.g., Chrome and Flutter never do this; Android sometimes does this).
+    skc_group_id      fGroupID;
+
+    void sanityCheck() {
+#ifdef SK_DEBUG
+        // We should only change the top level device's CTM.
+        // Otherwise we can't use SkDevice_ComputeLayerGroup.
+        SkASSERT(fGroupID == fRoot->fGroupID);
+
+        // The root SkDevice_Compute must have an origin (0, 0) as saveLayer won't
+        // ever create another SkDevice_Compute
+        SkASSERT(fRoot->getOrigin() == SkIPoint::Make(0, 0));
+#endif
+    }
+};
+
+#endif // SK_USE_COMPUTE_LAYER_GROUP
+
+#endif  // SK_SUPPORT_GPU_COMPUTE
+#endif  // SkDevice_Compute_DEFINED
diff --git a/src/compute/sk/SkImage_Compute.cpp b/src/compute/sk/SkImage_Compute.cpp
new file mode 100644
index 0000000..039766f
--- /dev/null
+++ b/src/compute/sk/SkImage_Compute.cpp
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+//
+//
+//
+
+#include "SkImage_Compute.h"
+
+//
+//
+//
+
+#if SK_SUPPORT_GPU_COMPUTE
+
+//
+// C++
+//
+
+//
+//
+//
+
+SkImage_Compute::SkImage_Compute(sk_sp<SkContext_Compute> compute,
+                                 GrGLuint           const snap,
+                                 int                const width,
+                                 int                const height)
+
+  : SkImage(width,height,0), // FIXME -- who provides unique id?
+    compute(compute),
+    snap(snap)
+{
+  ;
+}
+
+SkImage_Compute::~SkImage_Compute()
+{
+  // skc_interop_snap_dispose(compute->interop,snap); TODO skc.h
+}
+
+//
+//
+//
+
+#endif
diff --git a/src/compute/sk/SkImage_Compute.h b/src/compute/sk/SkImage_Compute.h
new file mode 100644
index 0000000..a3d9f02
--- /dev/null
+++ b/src/compute/sk/SkImage_Compute.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkSurface_Image_DEFINED
+#define SkSurface_Image_DEFINED
+
+//
+// for now make sure it's defined
+//
+
+#if !defined(SK_SUPPORT_GPU_COMPUTE)
+#define SK_SUPPORT_GPU_COMPUTE 1
+#endif
+
+//
+//
+//
+
+#if SK_SUPPORT_GPU_COMPUTE
+
+//
+//
+//
+
+// #include "GrContext.h"
+// #include "SkRefCnt.h"
+#include "SkImage.h"
+#include "gl/GrGLGpu.h"
+
+//
+//
+//
+
+#include "SkContext_Compute.h"
+
+//
+//
+//
+
+class SkImage_Compute : public SkImage
+{
+ public:
+
+  SkImage_Compute(sk_sp<SkContext_Compute> compute,
+                  GrGLuint           const snap,
+                  int                const width,
+                  int                const height);
+
+  ~SkImage_Compute();
+
+  //
+  //
+  //
+
+ private:
+
+  //
+  //
+  //
+
+  sk_sp<SkContext_Compute> compute; // reference to compute context
+  GrGLuint                 snap;    // fbo
+
+  //
+  //
+  //
+};
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
+
+#endif
diff --git a/src/compute/sk/SkSurface_Compute.cpp b/src/compute/sk/SkSurface_Compute.cpp
new file mode 100644
index 0000000..5dac0f0
--- /dev/null
+++ b/src/compute/sk/SkSurface_Compute.cpp
@@ -0,0 +1,191 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+//
+//
+//
+
+#include "SkSurface_Compute.h"
+#include "SkDevice_Compute.h"
+#include "SkImage_Compute.h"
+
+//
+//
+//
+
+#if SK_SUPPORT_GPU_COMPUTE
+
+//
+// C++
+//
+
+#include "gl/GrGLGpu.h"
+#include "SkSurface_Gpu.h"
+
+//
+//
+//
+
+SkSurface_Compute::SkSurface_Compute(sk_sp<SkContext_Compute> compute,
+                                     int const width, int const height)
+  : INHERITED(width,height,nullptr),
+    compute(compute)
+{
+  //
+  // resize interop
+  //
+  // skc_interop_size_set(compute->interop,width,height,NULL); TODO skc.h
+}
+
+SkSurface_Compute::~SkSurface_Compute()
+{
+  ;
+}
+
+//
+//
+//
+
+SkCanvas*
+SkSurface_Compute::onNewCanvas()
+{
+  uint32_t w = 0,h = 0;
+
+  // skc_interop_size_get(compute->interop,&w,&h); TODO skc.h
+
+  SkDevice_Compute * const device_compute = new SkDevice_Compute(compute,w,h);;
+  SkCanvas         * const canvas         = new SkCanvas(device_compute,SkCanvas::kConservativeRasterClip_InitFlag);
+
+  //
+  // destroy device upon surface destruction
+  //
+  device = sk_sp<SkBaseDevice>(device_compute);
+
+  //
+  // move origin from upper left to lower left
+  //
+  SkMatrix matrix;
+
+  matrix.setScaleTranslate(1.0f,-1.0f,0.0f,(SkScalar)h);
+
+  canvas->setMatrix(matrix);
+
+  return canvas;
+}
+
+//
+//
+//
+
+sk_sp<SkSurface>
+SkSurface_Compute::onNewSurface(const SkImageInfo& info)
+{
+  return sk_make_sp<SkSurface_Compute>(compute,info.width(),info.height());
+}
+
+//
+//
+//
+
+sk_sp<SkImage>
+SkSurface_Compute::onNewImageSnapshot()
+{
+  uint32_t w,h;
+
+  // skc_interop_size_get(compute->interop,&w,&h); TODO skc.h
+
+  GrGLuint snap;
+
+  // skc_interop_snap_create(compute->interop, TODO skc.h
+		// 	  skc_surface_interop_surface_get(compute->surface),
+		// 	  &snap);
+
+  return sk_make_sp<SkImage_Compute>(compute,snap,w,h);
+}
+
+//
+//
+//
+
+void
+SkSurface_Compute::onCopyOnWrite(ContentChangeMode mode)
+{
+  ;
+}
+
+//
+//
+//
+
+#if 0
+
+sk_sp<SkSurface>
+SkSurface_Compute::MakeComputeBackedSurface(SkWindow                       * const window,
+                                            const SkWindow::AttachmentInfo &       attachmentInfo,
+                                            GrGLInterface const            * const grInterface,
+                                            GrContext                      * const grContext,
+                                            sk_sp<SkContext_Compute>               compute)
+{
+  GrBackendRenderTargetDesc desc;
+
+  desc.fWidth  = SkScalarRoundToInt(window->width());
+  desc.fHeight = SkScalarRoundToInt(window->height());
+
+  if (0 == desc.fWidth || 0 == desc.fHeight) {
+    return nullptr;
+  }
+
+  // TODO: Query the actual framebuffer for sRGB capable. However, to
+  // preserve old (fake-linear) behavior, we don't do this. Instead, rely
+  // on the flag (currently driven via 'C' mode in SampleApp).
+  //
+  // Also, we may not have real sRGB support (ANGLE, in particular), so check for
+  // that, and fall back to L32:
+  //
+  // ... and, if we're using a 10-bit/channel FB0, it doesn't do sRGB conversion on write,
+  // so pretend that it's non-sRGB 8888:
+  desc.fConfig =
+    grContext->caps()->srgbSupport() &&
+    SkImageInfoIsGammaCorrect(window->info()) &&
+    (attachmentInfo.fColorBits != 30)
+    ? kSkiaGamma8888_GrPixelConfig : kSkia8888_GrPixelConfig;
+
+  desc.fOrigin      = kBottomLeft_GrSurfaceOrigin;
+  desc.fSampleCnt   = 0; //  attachmentInfo.fSampleCount;
+  desc.fStencilBits = 0; //  attachmentInfo.fStencilBits;
+
+  GrGLint buffer;
+
+  GR_GL_GetIntegerv(grInterface,GR_GL_FRAMEBUFFER_BINDING,&buffer);
+  desc.fRenderTargetHandle = buffer;
+
+  sk_sp<SkColorSpace> colorSpace =
+    grContext->caps()->srgbSupport() && SkImageInfoIsGammaCorrect(window->info())
+    ? SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named) : nullptr;
+
+  //
+  //
+  //
+
+  if (!grContext) {
+    return nullptr;
+  }
+
+  if (!SkSurface_Gpu::Valid(grContext,desc.fConfig,colorSpace.get())) {
+    return nullptr;
+  }
+
+  return sk_make_sp<SkSurface_Compute>(compute,desc.fWidth,desc.fHeight);
+}
+
+#endif
+
+//
+//
+//
+
+#endif
diff --git a/src/compute/sk/SkSurface_Compute.h b/src/compute/sk/SkSurface_Compute.h
new file mode 100644
index 0000000..84836c0
--- /dev/null
+++ b/src/compute/sk/SkSurface_Compute.h
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkSurface_Compute_DEFINED
+#define SkSurface_Compute_DEFINED
+
+//
+// for now make sure it's defined
+//
+
+#if !defined(SK_SUPPORT_GPU_COMPUTE)
+#define SK_SUPPORT_GPU_COMPUTE 1
+#endif
+
+//
+//
+//
+
+#if SK_SUPPORT_GPU_COMPUTE
+
+//
+//
+//
+
+#include "SkSurface_Base.h"
+#include "GrContext.h"
+#include "SkRefCnt.h"
+
+// Yuqian: It doesn't seem right to me for SkSurface_Compute to depend on SkWindow.
+//         Maybe we should move MakeComputeBackedSurface(from SkWindow) to SkWindow.cpp.
+// #include "SkWindow.h"
+
+//
+//
+//
+
+#include "SkContext_Compute.h"
+
+//
+//
+//
+
+//
+//
+//
+
+class SkSurface_Compute : public SkSurface_Base
+{
+ public:
+
+  SkSurface_Compute(sk_sp<SkContext_Compute> compute,
+                    int const width, int const height);
+
+  ~SkSurface_Compute();
+
+  //
+  //
+  //
+
+  SkCanvas*         onNewCanvas()                                    override;
+  sk_sp<SkSurface>  onNewSurface(const SkImageInfo&)                 override;
+  sk_sp<SkImage>    onNewImageSnapshot() override;
+  void              onCopyOnWrite(ContentChangeMode)                 override;
+
+  //
+  //
+  //
+
+  // static sk_sp<SkSurface> MakeComputeBackedSurface(SkWindow                       * const window,
+  //                                                  const SkWindow::AttachmentInfo &       attachmentInfo,
+  //                                                  GrGLInterface const            * const grInterface,
+  //                                                  GrContext                      * const grContext,
+  //                                                  sk_sp<SkContext_Compute>               compute);
+  // //
+  //
+  //
+
+ private:
+
+  typedef SkSurface_Base INHERITED;
+
+  //
+  //
+  //
+
+  sk_sp<SkBaseDevice>      device;
+
+  //
+  //
+  //
+
+  sk_sp<SkContext_Compute> compute;
+
+  //
+  //
+  //
+};
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
+
+#endif
diff --git a/src/compute/skc/Makefile b/src/compute/skc/Makefile
new file mode 100644
index 0000000..e6516e3
--- /dev/null
+++ b/src/compute/skc/Makefile
@@ -0,0 +1,79 @@
+#

+# Copyright 2016 Google Inc.

+#

+# Use of this source code is governed by a BSD-style license that can

+# be found in the LICENSE file.

+#

+

+SRC		= block_pool_init.cl paths_copy.cl fills_expand.cl rasterize.cl raster_alloc.cl prefix.cl place.cl render.cl

+

+PRE		= $(SRC:%.cl=%.pre.cl)

+

+IR_GEN9		= $(PRE:%.cl=%.ir)

+

+$(info PRE     : $(PRE))

+$(info IR_GEN9 : $(IR_GEN9))

+

+#

+#

+#

+

+OPENCL_STD	= -cl-std=CL1.2

+OPENCL_PRE	= __OPENCL_C_VERSION__=120

+

+# OPENCL_STD	= -cl-std=CL2.0

+# OPENCL_PRE	= __OPENCL_C_VERSION__=200

+

+#

+#

+#

+

+TARGETS		= $(PRE) $(IR_GEN9)

+

+#

+#

+#

+

+IOC		= ioc64

+

+IOC_IR_OPTS_OPT = $(OPENCL_STD) -cl-single-precision-constant -cl-denorms-are-zero -cl-mad-enable \

+		  -cl-no-signed-zeros -cl-fast-relaxed-math -cl-kernel-arg-info

+

+IOC_IR_OPTS_DBG = $(OPENCL_STD) -cl-kernel-arg-info -g

+

+IOC_IR_OPTS     = $(IOC_IR_OPTS_OPT)

+

+#

+#

+#

+

+PRE_DEPS	= $(wildcard *.h)

+

+#

+#

+#

+

+all:		$(TARGETS)

+

+

+clean:

+		-rm -f $(TARGETS) $(wildcard *.pre.bin.inl) $(wildcard *.pre.src.inl) $(wildcard *.gen) $(wildcard *.TMP)

+

+#

+# PREPROCESS

+#

+

+$(PRE):		%.pre.cl: %.cl $(PRE_DEPS)

+		cl -I . -I "%INTELOCLSDKROOT%\include" -D $(OPENCL_PRE) -EP $< -P -Fi"$@"

+		clang-format -i $@

+		dos2unix $@

+		xxd -i $@ $(basename $@).src.inl

+

+#

+# GEN9 -- supports OpenCL 2.0 and can emit SPIR-V / SPIR-V TEXT but cannot load it via clCreateProgramWithIL()

+#

+

+$(IR_GEN9):	%.ir: %.cl

+		touch $@

+		$(IOC) -cmd=build -bo="$(IOC_IR_OPTS)" -device=gpu -input=$< -ir=$@ -asm

+		xxd -i $@ $(basename $@).bin.inl

diff --git a/src/compute/skc/allocator_device_cl.c b/src/compute/skc/allocator_device_cl.c
new file mode 100644
index 0000000..aa44f36
--- /dev/null
+++ b/src/compute/skc/allocator_device_cl.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include "runtime_cl_12.h"
+#include "config_cl.h"
+#include "common/cl/assert_cl.h"
+
+//
+// PERM
+//
+
+cl_mem
+skc_runtime_device_perm_alloc(struct skc_runtime * const runtime,
+                              cl_mem_flags         const flags,
+                              size_t               const size)
+{
+  cl_int cl_err;
+
+  cl_mem mem = clCreateBuffer(runtime->cl.context,
+                              flags,
+                              size,
+                              NULL,
+                              &cl_err); cl_ok(cl_err);
+  return mem;
+}
+
+void
+skc_runtime_device_perm_free(struct skc_runtime * const runtime,
+                             cl_mem               const mem)
+{
+  cl(ReleaseMemObject(mem));
+}
+
+//
+// TEMP
+//
+
+cl_mem
+skc_runtime_device_temp_alloc(struct skc_runtime * const runtime,
+                              cl_mem_flags         const flags,
+                              size_t               const size,
+                              skc_subbuf_id_t    * const subbuf_id,
+                              size_t             * const subbuf_size)
+{
+  if (size == 0)
+    {
+      *subbuf_id = (skc_subbuf_id_t)-1;
+
+      if (subbuf_size != NULL)
+        *subbuf_size = 0;
+      
+      return NULL;
+    }
+
+  cl_buffer_region br;
+
+  br.origin = skc_suballocator_subbuf_alloc(&runtime->allocator.device.temp.suballocator,
+                                            runtime->scheduler,
+                                            size,subbuf_id,&br.size);
+
+  if (subbuf_size != NULL)
+    *subbuf_size = br.size;
+
+  cl_int cl_err;
+
+  cl_mem mem = clCreateSubBuffer(runtime->allocator.device.temp.extent,
+                                 flags,
+                                 CL_BUFFER_CREATE_TYPE_REGION,
+                                 &br,
+                                 &cl_err); cl_ok(cl_err);
+
+  return mem;
+}
+
+
+void
+skc_runtime_device_temp_free(struct skc_runtime * const runtime, 
+                             cl_mem               const mem,
+                             skc_subbuf_id_t      const subbuf_id)
+{
+  if (mem == NULL)
+    return;
+
+  skc_suballocator_subbuf_free(&runtime->allocator.device.temp.suballocator,subbuf_id);
+
+  cl(ReleaseMemObject(mem));  
+}
+
+//
+//
+//
+
+void
+skc_allocator_device_create(struct skc_runtime * const runtime)
+{
+  skc_suballocator_create(runtime,
+                          &runtime->allocator.device.temp.suballocator,
+                          "DEVICE",
+                          runtime->config->suballocator.device.subbufs,
+                          runtime->cl.base_align,
+                          runtime->config->suballocator.device.size);
+
+#ifndef NDEBUG
+#pragma message("Get rid of CL_MEM_ALLOC_HOST_PTR as soon as the sorter is installed")
+  cl_mem_flags const flags = CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR;
+#else
+  cl_mem_flags const flags = CL_MEM_READ_WRITE;
+#endif
+
+  runtime->allocator.device.temp.extent = 
+    skc_runtime_device_perm_alloc(runtime,
+                                  flags,
+                                  runtime->config->suballocator.device.size);
+}
+
+void
+skc_allocator_device_dispose(struct skc_runtime * const runtime)
+{
+  skc_suballocator_dispose(runtime,&runtime->allocator.device.temp.suballocator);
+
+  skc_runtime_device_perm_free(runtime,runtime->allocator.device.temp.extent);
+}
+
+//
+//
+//
+
diff --git a/src/compute/skc/allocator_device_cl.h b/src/compute/skc/allocator_device_cl.h
new file mode 100644
index 0000000..67d4e41
--- /dev/null
+++ b/src/compute/skc/allocator_device_cl.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include <CL/opencl.h>
+
+//
+//
+//
+
+#include "suballocator.h"
+
+//
+//
+//
+
+struct skc_allocator_device
+{
+#if 0
+  struct {
+    
+  } perm;
+#endif
+
+  struct {
+    struct skc_suballocator suballocator;
+    cl_mem                  extent;
+  } temp;
+};
+
+//
+//
+//
+
+void
+skc_allocator_device_create(struct skc_runtime * const runtime);
+
+void
+skc_allocator_device_dispose(struct skc_runtime * const runtime);
+
+//
+//
+//
+
diff --git a/src/compute/skc/allocator_host.c b/src/compute/skc/allocator_host.c
new file mode 100644
index 0000000..dbdcba0
--- /dev/null
+++ b/src/compute/skc/allocator_host.c
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <stdlib.h>
+
+//
+//
+//
+
+#include "runtime_cl_12.h"
+#include "config_cl.h"
+
+//
+//
+//
+
+#define SKC_RUNTIME_HOST_CACHELINE_SIZE  64
+
+#define SKC_ALIGNED_MALLOC(size,alignment) _aligned_malloc(size,alignment)
+#define SKC_ALIGNED_FREE(p)                _aligned_free(p)
+
+//
+// PERM
+//
+
+void *
+skc_runtime_host_perm_alloc(struct skc_runtime * const runtime, 
+                            skc_mem_flags_e      const flags,
+                            size_t               const size)
+{
+  return SKC_ALIGNED_MALLOC(SKC_ROUND_UP(size,SKC_RUNTIME_HOST_CACHELINE_SIZE),
+                            SKC_RUNTIME_HOST_CACHELINE_SIZE);
+}
+
+void
+skc_runtime_host_perm_free(struct skc_runtime * const runtime, 
+                           void               * const mem)
+{
+  SKC_ALIGNED_FREE(mem);
+}
+
+//
+// TEMP
+//
+
+void *
+skc_runtime_host_temp_alloc(struct skc_runtime * const runtime,
+                            skc_mem_flags_e      const flags,
+                            size_t               const size,
+                            skc_subbuf_id_t    * const subbuf_id,
+                            size_t             * const subbuf_size)
+{
+  if (size == 0)
+    {
+      *subbuf_id = (skc_subbuf_id_t)-1;
+
+      if (subbuf_size != NULL)
+        *subbuf_size = 0;
+      
+      return NULL;
+    }
+
+  return runtime->allocator.host.temp.extent + 
+    skc_suballocator_subbuf_alloc(&runtime->allocator.host.temp.suballocator,
+                                  runtime->scheduler,
+                                  size,subbuf_id,subbuf_size);
+}
+
+
+void
+skc_runtime_host_temp_free(struct skc_runtime * const runtime,
+                           void               * const mem,
+                           skc_subbuf_id_t      const subbuf_id)
+{
+  if (mem == NULL)
+    return;
+
+  skc_suballocator_subbuf_free(&runtime->allocator.host.temp.suballocator,subbuf_id);
+}
+
+//
+//
+//
+
+void
+skc_allocator_host_create(struct skc_runtime * const runtime)
+{
+  skc_suballocator_create(runtime,
+                          &runtime->allocator.host.temp.suballocator,
+                          "HOST  ",
+                          runtime->config->suballocator.host.subbufs,
+                          SKC_RUNTIME_HOST_CACHELINE_SIZE,
+                          runtime->config->suballocator.host.size);
+
+  runtime->allocator.host.temp.extent = 
+    skc_runtime_host_perm_alloc(runtime,
+                                SKC_MEM_FLAGS_READ_WRITE,
+                                runtime->config->suballocator.host.size);
+}
+
+void
+skc_allocator_host_dispose(struct skc_runtime * const runtime)
+{
+  skc_suballocator_dispose(runtime,&runtime->allocator.host.temp.suballocator);
+
+  skc_runtime_host_perm_free(runtime,runtime->allocator.host.temp.extent);
+}
+
+//
+//
+//
diff --git a/src/compute/skc/allocator_host.h b/src/compute/skc/allocator_host.h
new file mode 100644
index 0000000..d6519c8
--- /dev/null
+++ b/src/compute/skc/allocator_host.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "suballocator.h"
+
+//
+//
+//
+
+typedef enum skc_mem_flags_e {
+
+  SKC_MEM_FLAGS_READ_WRITE,
+  SKC_MEM_FLAGS_WRITE_ONLY,
+  SKC_MEM_FLAGS_READ_ONLY
+
+} skc_mem_flags_e;
+
+//
+//
+//
+
+struct skc_allocator_host
+{
+#if 0
+  struct {
+    // in case we want to instrument perm allocs
+  } perm;
+#endif
+
+  struct {
+    struct skc_suballocator suballocator;
+    skc_uchar             * extent;
+  } temp;
+};
+
+//
+//
+//
+
+void
+skc_allocator_host_create(struct skc_runtime * const runtime);
+
+void
+skc_allocator_host_dispose(struct skc_runtime * const runtime);
+
+//
+//
+//
diff --git a/src/compute/skc/assert_skc.c b/src/compute/skc/assert_skc.c
new file mode 100644
index 0000000..4902f98
--- /dev/null
+++ b/src/compute/skc/assert_skc.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <stdlib.h>
+#include <stdio.h>
+
+//
+//
+//
+
+#include "assert_skc.h"
+
+//
+//
+//
+
+#define SKC_ERR_TO_STR(err) case err: return #err
+
+//
+//
+//
+
+char const *
+skc_get_error_string(skc_err const err)
+{
+  switch(err)
+    {
+      SKC_ERR_TO_STR(SKC_ERR_SUCCESS);
+      SKC_ERR_TO_STR(SKC_ERR_NOT_IMPLEMENTED);
+      SKC_ERR_TO_STR(SKC_ERR_POOL_EMPTY);
+      SKC_ERR_TO_STR(SKC_ERR_CONDVAR_WAIT);
+      SKC_ERR_TO_STR(SKC_ERR_LAYER_ID_INVALID);
+      SKC_ERR_TO_STR(SKC_ERR_LAYER_NOT_EMPTY);
+      SKC_ERR_TO_STR(SKC_ERR_TRANSFORM_WEAKREF_INVALID);
+      SKC_ERR_TO_STR(SKC_ERR_STROKE_STYLE_WEAKREF_INVALID);
+      SKC_ERR_TO_STR(SKC_ERR_COMMAND_NOT_READY);
+      SKC_ERR_TO_STR(SKC_ERR_COMMAND_NOT_COMPLETED);
+      SKC_ERR_TO_STR(SKC_ERR_COMMAND_NOT_STARTED);
+      SKC_ERR_TO_STR(SKC_ERR_COMMAND_NOT_READY_OR_COMPLETED);
+      SKC_ERR_TO_STR(SKC_ERR_COMPOSITION_SEALED);
+      SKC_ERR_TO_STR(SKC_ERR_STYLING_SEALED);
+      SKC_ERR_TO_STR(SKC_ERR_HANDLE_INVALID);
+      SKC_ERR_TO_STR(SKC_ERR_HANDLE_OVERFLOW);
+
+    default:
+      return "UNKNOWN SKC ERROR CODE";
+    }
+}
+
+//
+//
+//
+
+skc_err
+assert_skc(skc_err const err, char const * const file, int const line, bool const abort)
+{
+  if (err != SKC_ERR_SUCCESS)
+    {
+      char const * const skc_err_str = skc_get_error_string(err);
+
+      fprintf(stderr,
+              "\"%s\", line %d: skc_assert (%d) = \"%s\"",
+              file,line,err,skc_err_str);
+
+      if (abort)
+        {
+          // stop profiling and reset device here if necessary
+          exit(err);
+        }
+    }
+
+  return err;
+}
+
+//
+//
+//
diff --git a/src/compute/skc/assert_skc.h b/src/compute/skc/assert_skc.h
new file mode 100644
index 0000000..15f5b3a
--- /dev/null
+++ b/src/compute/skc/assert_skc.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "skc.h"
+
+//
+//
+//
+
+skc_err
+skc_assert_skc(void const * const ptr, char const * const file, int const line, bool const abort);
+
+//
+//
+//
+
+#define skc(...)    skc_assert_skc((skc_##__VA_ARGS__), __FILE__, __LINE__, true);
+#define skc_ok(err) skc_assert_skc((err              ), __FILE__, __LINE__, true);
+
+//
+//
+//
diff --git a/src/compute/skc/assert_state.h b/src/compute/skc/assert_state.h
new file mode 100644
index 0000000..b4724f9
--- /dev/null
+++ b/src/compute/skc/assert_state.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#pragma once
+
+//
+//
+//
+
+#include "macros.h"
+
+//
+//
+//
+
+#if 1
+
+#include <assert.h>
+
+#define SKC_ASSERT_STATE_DECLARE(st)            st state
+#define SKC_ASSERT_STATE_MEMBER(sp)             SKC_CONCAT(sp,->state)
+#define SKC_ASSERT_STATE_INIT(sp,to)            SKC_ASSERT_STATE_MEMBER(sp) = (to)
+#define SKC_ASSERT_STATE_TRANSITION(from,to,sp) assert(SKC_ASSERT_STATE_MEMBER(sp) == (from)); SKC_ASSERT_STATE_INIT(sp,to)
+#define SKC_ASSERT_STATE_ASSERT(at,sp)          assert(SKC_ASSERT_STATE_MEMBER(sp) == (at))
+
+#else
+
+#define SKC_ASSERT_STATE_DECLARE(st)
+#define SKC_ASSERT_STATE_INIT(sp,to)
+#define SKC_ASSERT_STATE_TRANSITION(from,to,sp)
+#define SKC_ASSERT_STATE_ASSERT(at,sp)
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/atomic_cl.h b/src/compute/skc/atomic_cl.h
new file mode 100644
index 0000000..c196c36
--- /dev/null
+++ b/src/compute/skc/atomic_cl.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_ONCE_ATOMIC_CL
+#define SKC_ONCE_ATOMIC_CL
+
+//
+// git cl upload is bleating about needing an #include before and #if
+// so we're unneccesarily reloading the types and OpenCL header
+//
+
+#include "types.h"
+
+#if (__OPENCL_C_VERSION__ <= 120 /*CL_VERSION_1_2*/)
+
+#define SKC_ATOMIC_UINT                             uint
+#define SKC_ATOMIC_INT                              int
+
+#define SKC_ATOMIC_ADD_LOCAL_RELAXED_DEVICE(p,v)    atomic_add(p,v)
+#define SKC_ATOMIC_ADD_LOCAL_RELAXED_SUBGROUP(p,v)  atomic_add(p,v)
+
+#define SKC_ATOMIC_ADD_GLOBAL_RELAXED_DEVICE(p,v)   atomic_add(p,v)
+#define SKC_ATOMIC_ADD_GLOBAL_RELAXED_SUBGROUP(p,v) atomic_add(p,v)
+
+#else // __OPENCL_C_VERSION__ > __CL_VERSION_1_2
+
+//
+// REMOVE THESE DEFINES ASAP -- ONLY HERE BECAUSE THE INTEL CODE
+// BUILDER UTILITY DOESN'T SUPPORT CREATING AN ATOMIC TYPE BUFFER
+//
+
+#ifdef SKC_SUPPORT_BROKEN_INTEL_CODE_BUILDER
+
+#define SKC_ATOMIC_UINT                             uint
+#define SKC_ATOMIC_CAST_LOCAL(p)                    (__local  atomic_uint volatile * restrict const)(p)
+#define SKC_ATOMIC_CAST_GLOBAL(p)                   (__global atomic_uint volatile * restrict const)(p)
+
+#else
+
+#define SKC_ATOMIC_UINT                             atomic_uint
+#define SKC_ATOMIC_CAST_LOCAL(p)                    (p)
+#define SKC_ATOMIC_CAST_GLOBAL(p)                   (p)
+
+#endif
+
+
+#define SKC_ATOMIC_ADD_LOCAL_RELAXED_DEVICE(p,v)    atomic_fetch_add_explicit(SKC_ATOMIC_CAST_LOCAL(p), \
+                                                                              v,memory_order_relaxed,memory_scope_device)
+#define SKC_ATOMIC_ADD_LOCAL_RELAXED_SUBGROUP(p,v)  atomic_fetch_add_explicit(SKC_ATOMIC_CAST_LOCAL(p), \
+                                                                              v,memory_order_relaxed,memory_scope_sub_group)
+
+#define SKC_ATOMIC_ADD_GLOBAL_RELAXED_DEVICE(p,v)   atomic_fetch_add_explicit(SKC_ATOMIC_CAST_GLOBAL(p), \
+                                                                              v,memory_order_relaxed,memory_scope_device)
+#define SKC_ATOMIC_ADD_GLOBAL_RELAXED_SUBGROUP(p,v) atomic_fetch_add_explicit(SKC_ATOMIC_CAST_GLOBAL(p), \
+                                                                              v,memory_order_relaxed,memory_scope_sub_group)
+
+#endif
+
+//
+//
+//
+
+#endif // SKC_ONCE_ATOMIC_CL
+
+//
+//
+//
diff --git a/src/compute/skc/block.h b/src/compute/skc/block.h
new file mode 100644
index 0000000..753f2ac
--- /dev/null
+++ b/src/compute/skc/block.h
@@ -0,0 +1,228 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_ONCE_BLOCK
+#define SKC_ONCE_BLOCK
+
+//
+//
+//
+
+#include "types.h"
+#include "macros.h"
+
+//
+// Hard requirements:
+//
+//   - A TTXB "block pool" extent that is at least 1GB.
+//
+//   - A virtual surface of at least 8K x 8K
+//
+//   - A physical surface of __don't really care__ because it's
+//     advantageous to tile the physical surface into sub-surface
+//     rectangles so that multiple linear (smaller) TTCK sorts are
+//     simultaneously performed.
+//
+//
+//      EXTENT                 TTXB BITS
+//     SIZE (MB) +-------------------------------------+
+//               |  22    23    24    25    26  * 27 * |
+//          +----+-------------------------------------+
+//          |  8 |  128   256   512  1024  2048  4096  |
+//     TTXB | 16 |  256   512  1024  2048  4096  8192  |
+//    WORDS | 32 |  512  1024  2048  4096  8192 16384  |
+//          | 64 | 1024  2048  4096  8192 16384 32768  |
+//          +----+-------------------------------------+
+//
+//
+//    SUB-SURFACE                        X/Y BITS
+//     TILE SIZE +------------------------------------------------------+
+//               |   5     6     7     8     9    10    11    12    13  |
+//          +----+------------------------------------------------------+
+//          |  3 |  256   512  1024  2048  4096  8192 16384 32768 65536 |
+//     TILE |  4 |  512  1024  2048  4096  8192 16384 32768 65536  128K |
+//     SIDE |  5 | 1024  2048  4096  8192 16384 32768 65536  128K  256K |
+//     BITS |  6 | 2048  4096  8192 16384 32768 65536  128K  256K  512K |
+//          |  7 | 4096  8192 16384 32768 65536  128K  256K  512K 1024K |
+//          +----+------------------------------------------------------+
+//      TILES^2  | 1024  4096 16384 65536  256K    1M    4M   16M   64M |
+//               +------------------------------------------------------+
+//
+// The following values should be pretty future-proof across all GPUs:
+//
+//   - 27 bits of block id space implies a max of 4GB-32GB of
+//     rasterized paths depending on the size of the TTXB block.
+//     This could enable interesting use cases.
+//
+//   - A minimum block size is 16 words (64 bytes) and a maximum of 32
+//     words (128 bytes) greatly simplifies portability. It's unlikely
+//     that a large GPU can service a tile larger than 32x32 pixels.
+//     Additionally, on smaller devices, rectangular tiles will have a
+//     minimum height of 16 pixels.  Note that a minimum subblock size
+//     is probably 8 words (32 bytes).
+//
+//   - A virtual rasterization surface that's from +/-32768K to
+//     +/-128K depending on the target's rasterization tile size.
+//
+//   - A physical sub-surface tile (or entire surface) from 4Kx4K to
+//     16Kx16K depending on the target's rasterization tile size.
+//
+//   - Support for a minimum of 256K layers. If necessary, this can
+//     convseratively raised to 1m or 2m layers by either implementing
+//     surface tiling or when the target supports large raster tiles.
+//
+//   - Keys that (optionally) only require a 32-bit high word
+//     comparison.
+//
+//
+// TAGGED BLOCK ID
+//
+//  0     5                  31
+//  |     |         ID        |
+//  | TAG | SUBBLOCK | BLOCK  |
+//  +-----+----------+--------+
+//  |  5  |     N    | 27 - N |
+//
+// There are 27 bits of subblocks and 5 bits of tag.
+//
+//
+// TTRK (64-bit COMPARE)
+//
+//  0                                         63
+//  | TTSB ID |   X  |   Y  | RASTER COHORT ID |
+//  +---------+------+------+------------------+
+//  |    27   |  12  |  12  |        13        |
+//
+//
+// TTRK (32-BIT COMPARE)
+//
+//  0                                               63
+//  | TTSB ID | N/A |   X  |   Y  | RASTER COHORT ID |
+//  +---------+-----+------+------+------------------+
+//  |    27   |  5  |  12  |  12  |        8         |
+//
+//
+// TTSK v2:
+//
+//  0                                     63
+//  | TTSB ID | IS_PREFIX |  N/A |  X |  Y |
+//  +---------+-----------+------+----+----+
+//  |    27   |   1 (=0)  |  12  | 12 | 12 |
+//
+//
+// TTPK v2:
+//
+//  0                                       63
+//  | TTPB ID | IS_PREFIX | SPAN |  X  |  Y  |
+//  +---------+-----------+------+-----+-----+
+//  |    27   |   1 (=1)  |  12  | 12  | 12  |
+//
+//
+// TTCK (32-BIT COMPARE) v1:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          30          |    1   |    1   |   18  |  7  |  7  |
+//
+//
+// TTCK (32-BIT COMPARE) v2:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          30          |    1   |    1   |   15  |  9  |  8  |
+//
+//
+// TTCK (64-BIT COMPARE) -- achieves 4K x 4K with an 8x16 tile:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          27          |    1   |    1   |   18  |  9  |  8  |
+//
+//
+
+
+#define SKC_TAGGED_BLOCK_ID_BITS_ID   27 // this size is cast in stone
+#define SKC_TAGGED_BLOCK_ID_BITS_TAG   5 // which leaves 5 bits of tag
+
+//
+//
+//
+
+typedef enum skc_block_id_tag {
+
+  SKC_BLOCK_ID_TAG_PATH_LINE,      // 0 -- 4  segments
+  SKC_BLOCK_ID_TAG_PATH_QUAD,      // 1 -- 6  segments
+  SKC_BLOCK_ID_TAG_PATH_CUBIC,     // 2 -- 8  segments
+  SKC_BLOCK_ID_TAG_PATH_RAT_QUAD,  // 3 -- 8  segments : 6 + w0 + na
+  SKC_BLOCK_ID_TAG_PATH_RAT_CUBIC, // 4 -- 10 segments : 8 + w0 + w1
+  SKC_BLOCK_ID_TAG_PATH_NEXT,      // 5 -- this represents the end of path tags
+
+  //
+  // TAGS [6-30] ARE AVAILABLE
+  //
+
+  SKC_BLOCK_ID_TAG_INVALID = (1u << SKC_TAGGED_BLOCK_ID_BITS_TAG) - 1, // all 1's
+  SKC_BLOCK_ID_TAG_COUNT,
+
+} skc_block_id_tag;
+
+//
+//
+//
+
+#define SKC_TAGGED_BLOCK_ID_INVALID  SKC_UINT_MAX // all 1's
+
+//
+//
+//
+
+typedef skc_uint skc_block_id_t;
+
+//
+//
+//
+
+typedef skc_uint skc_tagged_block_id_t;
+
+union skc_tagged_block_id
+{
+  skc_uint   u32;
+
+#if !defined(__OPENCL_C_VERSION__)
+  struct {
+    skc_uint tag : SKC_TAGGED_BLOCK_ID_BITS_TAG;
+    skc_uint id  : SKC_TAGGED_BLOCK_ID_BITS_ID;
+  };
+#else
+  //
+  // OPENCL BIT-FIELD EXTRACT/INSERT
+  //
+#endif
+};
+
+//
+//
+//
+
+#define SKC_TAGGED_BLOCK_ID_MASK_TAG     SKC_BITS_TO_MASK(SKC_TAGGED_BLOCK_ID_BITS_TAG)
+
+#define SKC_TAGGED_BLOCK_ID_GET_TAG(bst) ((bst) &  SKC_TAGGED_BLOCK_ID_MASK_TAG)
+#define SKC_TAGGED_BLOCK_ID_GET_ID(bst)  ((bst) >> SKC_TAGGED_BLOCK_ID_BITS_TAG)
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/block_pool_cl.h b/src/compute/skc/block_pool_cl.h
new file mode 100644
index 0000000..c883709
--- /dev/null
+++ b/src/compute/skc/block_pool_cl.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_ONCE_BLOCK_POOL
+#define SKC_ONCE_BLOCK_POOL
+
+//
+//
+//
+
+#include "types.h"
+
+//
+//
+//
+
+union skc_block_pool_size
+{
+  skc_uint3   u32v3;
+
+  struct {
+    skc_uint  pool_size; // number of blocks
+    skc_uint  ring_pow2; // rounded-up pow2 of pool_size
+    skc_uint  ring_mask; // ring_pow2 - 1
+  };
+};
+
+//
+//
+//
+
+union skc_block_pool_atomic
+{
+  skc_uint2  u32v2;
+
+  skc_uint   u32a2[2];
+
+  struct {
+    skc_uint reads;
+    skc_uint writes;
+  };
+};
+
+#define SKC_BP_ATOMIC_OFFSET_READS   0
+#define SKC_BP_ATOMIC_OFFSET_WRITES  1
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/block_pool_cl_12.h b/src/compute/skc/block_pool_cl_12.h
new file mode 100644
index 0000000..6fa8a39
--- /dev/null
+++ b/src/compute/skc/block_pool_cl_12.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "block_pool_cl.h"
+#include "extent_cl_12.h"
+
+//
+// device side block pool
+//
+
+struct skc_block_pool
+{
+  union  skc_block_pool_size const * size;
+
+  struct skc_extent_pdrw             blocks;
+  struct skc_extent_pdrw             ids;
+  struct skc_extent_phr_pdrw         atomics;
+};
+
+//
+//
+//
diff --git a/src/compute/skc/block_pool_init.cl b/src/compute/skc/block_pool_init.cl
new file mode 100644
index 0000000..023dff4
--- /dev/null
+++ b/src/compute/skc/block_pool_init.cl
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include "device_cl_12_gen9.h"
+
+//
+// BEST TO RUN THESE ON AN OUT-OF-ORDER CQ
+//
+
+__kernel
+SKC_BP_INIT_IDS_KERNEL_ATTRIBS
+void
+skc_kernel_block_pool_init_ids(__global uint * const ids, uint const bp_size)
+{
+  uint const gid = get_global_id(0);
+
+  //
+  // FIXME -- TUNE FOR ARCH -- evaluate if it's much faster to
+  // accomplish this with fewer threads and using either IPC and/or
+  // vector stores -- it should be on certain architectures!
+  //
+
+  //
+  // initialize pool with sequence
+  //
+  if (gid < bp_size)
+    ids[gid] = gid * SKC_DEVICE_SUBBLOCKS_PER_BLOCK;
+}
+
+//
+//
+//
+
+__kernel
+SKC_BP_INIT_ATOMICS_KERNEL_ATTRIBS
+void
+skc_kernel_block_pool_init_atomics(__global uint * const bp_atomics, uint const bp_size)
+{
+  // the version test is to squelch a bug with the Intel OpenCL CPU
+  // compiler declaring it supports the cl_intel_subgroups extension
+#if defined(cl_intel_subgroups) || defined (cl_khr_subgroups)
+  uint const tid = get_sub_group_local_id();
+#else
+  uint const tid = get_local_id(0);
+#endif
+
+  //
+  // launch two threads and store [ 0, bp_size ]
+  //
+  bp_atomics[tid] = tid * bp_size;
+}
+
+//
+//
+//
diff --git a/src/compute/skc/cl_20/extent.c b/src/compute/skc/cl_20/extent.c
new file mode 100644
index 0000000..4c073e8
--- /dev/null
+++ b/src/compute/skc/cl_20/extent.c
@@ -0,0 +1,787 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#include <string.h>
+
+// #include "extent.h"
+
+//
+// EXTENT TYPES
+//
+// Classification of operations on allocated GPU memory
+//
+// h  = host
+// d  = device
+//
+// c  = append using non-atomic incremented count
+// x  = append using atomically incremented index
+// p  = allocated from pool of indices
+// g  = gathered by pull kernel
+// s  = size is available
+//
+// w1 = write once
+// wN = write many
+//
+// r1 = read once
+// rN = read many
+//
+// rw = read/write many
+//
+//                                host<>device memory model
+//                       +--------------------+--------------------+
+//     extent type       |      split         |      shared        |  examples
+//  ---------------------+--------------------+--------------------+--------------------
+//                       |                    |                    |
+//   extent_atomic       |   device+mapped    |   device+mapped    |  atomically op'd device extent + read-only host snapshot
+//                       |                    |                    |
+//   extent_dxrw         |      device        |      device        |  ttsk_array, ttpk_array, ttck_array, *_offsets
+//   extent_hcw1_dr1     |      mapped        |      mapped        |  command_queue, buffer
+//   extent_hcrw         |       host         |       host         |  queue
+//                       |                    |                    |
+//  ---------------------+--------------------+--------------------+--------------------
+//                       |                    |                    |
+//   extent_hcw1_drN     |     memcpy'd       |      mapped        |  stack_transforms, stack_stroke_props
+//   extent_hgw1_drN     |   scatter/gather   |      mapped        |  layer_props
+//                       |                    |                    |
+//   block_pool_dprw     |      device        |      device        |  ttsb_pool, ttpb_pool
+//   block_pool_hp_drw   |      device        |      device        |  raster_pool
+//                       |                    |                    |
+//  ---------------------+--------------------+--------------------+--------------------
+//                       |                    |                    |
+//   block_pool_hp_drw   | block_pool_hp_drw  | block_pool_hp_drw  |  path_block_pool
+//   staging buffer      | extent_hw_dr       |        --          |
+//                       |                    |                    |
+//
+
+//
+// HIGH-LEVEL EXTENTS ARE BUILT FROM SIMPLER STRUCTURES
+//
+
+//
+// COUNTERS FOR POOLS -- TYPICALLY ATOMIC WHEN ON DEVICE
+//
+
+union skc_ring
+{
+  skc_uint2  u32v2;
+
+  skc_uint   u32a2[2];
+  
+  struct {
+    skc_uint reads;  // number of reads
+    skc_uint writes; // number of writes
+  };
+};
+
+//
+// POOL OF INDICES TO BLOCKS
+//
+
+struct skc_pool_h
+{
+  skc_uint * indices;
+};
+
+struct skc_pool_d
+{
+  cl_mem   * indices; // FIXME -- READ POOL INDICES THROUGH CONSTANT CACHE?
+};
+
+//
+// LOW-LEVEL EXTENTS -- SIZES ARE STORED ELSEWHERE
+//
+
+struct skc_extent_hrw
+{
+  void * hrw; // host pointer to host extent -- read/write
+};
+
+struct skc_extent_drw
+{
+  cl_mem drw; // device pointer to device extent -- read/write
+};
+
+struct skc_extent_hw_dr
+{
+  void * hw;  // host   pointer to shared extent -- write-only + write-combined
+  cl_mem dr;  // device pointer to shared extent -- read-only
+};
+
+//
+//
+//
+
+#if 0
+static
+void * 
+skc_runtime_svm_alloc(struct skc_runtime_cl * const runtime_cl, size_t const size)
+{
+  return clSVMAlloc(runtime_cl->context,
+                    CL_MEM_READ_WRITE | CL_MEM_SVM_FINE_GRAIN_BUFFER,
+                    size,
+                    0);
+}
+
+static
+void * 
+skc_runtime_svm_atomic_alloc(struct skc_runtime_cl * const runtime_cl, size_t const size) // WE DON'T NEED THIS HERE
+{
+  return clSVMAlloc(runtime_cl->context,
+                    CL_MEM_READ_WRITE | CL_MEM_SVM_FINE_GRAIN_BUFFER | CL_MEM_SVM_ATOMICS,
+                    size,
+                    0);
+}
+
+static 
+void
+skc_runtime_svm_free(struct skc_runtime_cl * const runtime_cl, void * const buffer)
+{
+  clSVMFree(runtime_cl->context,buffer);
+}
+#endif
+
+//
+//
+//
+
+void 
+skc_command_queue_fill_device(struct skc_command_queue * const cq,
+                              cl_mem                           buffer, 
+                              void               const * const pattern, 
+                              size_t                     const pattern_size,
+                              size_t                     const size);
+
+void *
+skc_command_queue_map_wi(struct skc_command_queue * const cq,
+                         cl_mem                           buffer);
+
+void
+skc_command_queue_unmap(struct skc_command_queue * const cq, 
+                        cl_mem                           buffer, 
+                        void                     * const mapped);
+
+void
+skc_command_queue_read(struct skc_command_queue * const cq, 
+                       cl_mem                           buffer, 
+                       void                     * const ptr);
+
+//
+//
+//
+
+struct skc_extent_hrw *
+skc_extent_hrw_alloc(struct skc_allocator * const allocator,
+                     size_t                 const size)
+{
+  struct skc_extent_hrw * extent;
+  
+  extent      = skc_allocator_alloc_host(allocator,sizeof(*extent));
+  extent->hrw = skc_allocator_alloc_host(allocator,size);
+
+  return extent;
+}
+
+
+
+void
+skc_extent_hrw_free(struct skc_allocator  * const allocator,
+                    struct skc_extent_hrw * const extent)
+{
+  skc_allocator_free_host(allocator,extent->hrw);
+  skc_allocator_free_host(allocator,extent);
+}
+
+//
+//
+//
+
+struct skc_extent_drw *
+skc_extent_drw_alloc(struct skc_allocator * const allocator,
+                     size_t                 const size)
+{
+  struct skc_extent_drw * extent;
+
+  extent      = skc_allocator_alloc_host  (allocator,sizeof(*extent));
+  extent->drw = skc_allocator_alloc_device(allocator,size);
+
+  return extent;
+}
+
+void
+skc_extent_drw_free(struct skc_allocator  * const allocator,
+                    struct skc_extent_drw * const extent)
+{
+  skc_allocator_free_device(allocator,extent->drw);
+  skc_allocator_free_host  (allocator,extent);
+}
+
+void
+skc_extent_drw_fill(struct skc_command_queue * const cq,
+                    struct skc_extent_drw    * const extent,
+                    void               const * const pattern,
+                    size_t                     const pattern_size,
+                    size_t                     const size)
+{
+  skc_command_queue_fill_device(cq,extent->drw,pattern,pattern_size,size);
+}
+
+//
+// WRITE-COMBINED / WRITE-INVALIDATE
+//
+
+struct skc_extent_hw_dr *
+skc_extent_hw_dr_alloc(struct skc_allocator * const allocator,
+                       size_t                 const size)
+{
+  struct skc_extent_hw_dr * extent;
+
+  extent     = skc_allocator_alloc_host(allocator,sizeof(*extent));
+  extent->hw = NULL;
+  extent->dr = skc_allocator_alloc_device_wc(allocator,size); // write-combined mem
+
+  return extent;
+}
+
+void
+skc_extent_hw_dr_free(struct skc_allocator    * const allocator,
+                      struct skc_extent_hw_dr * const extent)
+{
+  skc_allocator_free_device(allocator,extent->dr);
+  skc_allocator_free_host  (allocator,extent);
+}
+
+void
+skc_extent_hw_dr_map(struct skc_command_queue * const cq,
+                     struct skc_extent_hw_dr  * const extent)
+{
+  extent->hw = skc_command_queue_map_wi(cq,extent->dr);
+}
+
+void
+skc_extent_hw_dr_unmap(struct skc_command_queue * const cq,
+                       struct skc_extent_hw_dr  * const extent)
+{
+  skc_command_queue_unmap(cq,extent->dr,extent->hw);
+}
+
+void
+skc_extent_hw_dr_memcpy(struct skc_extent_hw_dr * const extent,
+                        void const * SKC_RESTRICT const src, 
+                        size_t                    const offset, 
+                        size_t                    const size)
+{
+  void * SKC_RESTRICT const dst = (char *)extent->hw + offset;
+
+  memcpy(dst,src,size);
+}
+//
+// SNAPSHOT
+//
+
+struct skc_extent_hr_drw
+{
+  void * hr;  // host   pointer to shared extent -- readable snapshot
+  cl_mem drw; // device pointer to shared extent -- read/write
+};
+
+struct skc_extent_hr_drw *
+skc_extent_hr_drw_alloc(struct skc_allocator * const allocator,
+                        size_t                 const size)
+{
+  struct skc_extent_hr_drw * extent;
+
+  extent      = skc_allocator_alloc_host  (allocator,sizeof(*extent));
+  extent->hr  = skc_allocator_alloc_host  (allocator,size);
+  extent->drw = skc_allocator_alloc_device(allocator,size);
+
+  return extent;
+}
+
+void
+skc_extent_hr_drw_free(struct skc_allocator     * const allocator,
+                       struct skc_extent_hr_drw * const extent)
+{
+  skc_allocator_free_host  (allocator,extent->hr);
+  skc_allocator_free_device(allocator,extent->drw);
+  skc_allocator_free_host  (allocator,extent);
+}
+
+void
+skc_extent_hr_drw_snap(struct skc_command_queue * const cq,
+                       struct skc_extent_hr_drw * const extent,
+                       size_t                     const size)
+{
+  skc_command_queue_read(cq,extent->drw,extent->hr);
+}
+
+void
+skc_extent_hr_drw_fill(struct skc_command_queue * const cq,
+                       struct skc_extent_hr_drw * const extent,
+                       void               const * const pattern,
+                       size_t                     const pattern_size,
+                       size_t                     const size)
+{
+  skc_command_queue_fill_device(cq,extent->drw,pattern,pattern_size,size);
+}
+
+//
+//
+//
+
+struct skc_extent_atomic
+{
+  struct skc_extent_hr_drw * hr_drw;
+  size_t                     size; // typically a very small extent
+};
+
+//
+//
+//
+
+struct skc_extent_atomic *
+skc_extent_atomic_alloc(struct skc_allocator * const allocator,
+                        size_t                 const size)
+{
+  struct skc_extent_atomic * extent;
+
+  extent         = skc_allocator_alloc_host(allocator,sizeof(*extent));
+  extent->hr_drw = skc_extent_hr_drw_alloc(allocator,size);
+  extent->size   = size;
+
+  return extent;
+}
+
+void
+skc_extent_atomic_free(struct skc_allocator     * const allocator,
+                       struct skc_extent_atomic * const extent)
+{
+  skc_extent_hr_drw_free (allocator,extent->hr_drw);
+  skc_allocator_free_host(allocator,extent);
+}
+
+void
+skc_extent_atomic_snap(struct skc_command_queue       * const cq,
+                       struct skc_extent_atomic const * const extent)
+{
+  skc_extent_hr_drw_snap(cq,extent->hr_drw,extent->size);
+}
+
+void
+skc_extent_atomic_zero(struct skc_command_queue       * const cq,
+                       struct skc_extent_atomic const * const extent)
+{
+  skc_uint const zero = 0;
+
+  skc_extent_hr_drw_fill(cq,extent->hr_drw,&zero,sizeof(zero),extent->size);
+}
+
+//
+//
+//
+
+struct skc_extent_dxrw
+{
+  struct skc_extent_drw    * drw;
+
+  size_t                     elem_size;
+  skc_uint                   elem_count;
+
+#if 0 // SKC_EXTENT_ATOMIC_IS_IGNORED
+  struct skc_extent_atomic * atomic;
+  size_t                     atomic_offset;
+#endif
+};
+
+//
+//
+//
+
+struct skc_extent_dxrw *
+skc_extent_dxrw_alloc(struct skc_allocator     * const allocator,
+                      size_t                     const elem_size,
+                      skc_uint                   const elem_count,
+                      struct skc_extent_atomic * const atomic,
+                      size_t                     const atomic_offset)
+{
+  struct skc_extent_dxrw * extent;
+
+  extent                = skc_allocator_alloc_host(allocator,sizeof(*extent));
+  extent->drw           = skc_extent_drw_alloc(allocator,elem_size * elem_count);
+
+  extent->elem_size     = elem_size;
+  extent->elem_count    = elem_count;
+
+  //
+  // note that passing in the atomic and its member has no real use at
+  // this point since the current programming style requires passing
+  // in the atomic extent -- which may have multiple members -- to the
+  // compute kernel
+  //
+#if 0 // SKC_EXTENT_ATOMIC_IS_IGNORED  
+  extent->atomic        = atomic;
+  extent->atomic_offset = atomic_offset;
+#endif
+  
+  return extent;
+}
+
+void
+skc_extent_dxrw_free(struct skc_allocator   * const allocator,
+                     struct skc_extent_dxrw * const extent)
+{
+  skc_extent_drw_free    (allocator,extent->drw);
+  skc_allocator_free_host(allocator,extent);
+}
+
+//
+//
+//
+
+struct skc_extent_hcrw
+{
+  struct skc_extent_hrw * hrw;
+  size_t                  elem_size;
+  skc_uint                elem_count;
+  skc_uint                counter;
+};
+
+//
+//
+//
+
+struct skc_extent_hcrw *
+skc_extent_hcrw_alloc(struct skc_allocator * const allocator,
+                      size_t                 const elem_size,
+                      skc_uint               const elem_count)
+{
+  struct skc_extent_hcrw * extent;
+
+  extent             = skc_allocator_alloc_host(allocator,sizeof(*extent));
+  extent->hrw        = skc_extent_hrw_alloc(allocator,elem_size * elem_count);
+  extent->elem_size  = elem_size;
+  extent->elem_count = elem_count;
+  extent->counter    = 0;
+
+  return extent;
+}
+
+void
+skc_extent_hcrw_free(struct skc_allocator   * const allocator,
+                     struct skc_extent_hcrw * const extent)
+{
+  skc_extent_hrw_free    (allocator,extent->hrw);
+  skc_allocator_free_host(allocator,extent);
+}
+
+void
+skc_extent_hcrw_reset(struct skc_extent_hcrw * const extent)
+{
+  extent->counter = 0;
+}
+
+skc_bool
+skc_extent_hcrw_is_full(struct skc_extent_hcrw const * const extent)
+{
+  return (extent->counter == extent->elem_count);
+}
+
+//
+//
+//
+
+struct skc_extent_hcw1_dr1
+{
+  struct skc_extent_hw_dr * hw_dr; // mapped memory
+  size_t                    elem_size;
+  skc_uint                  elem_count;
+  skc_uint                  counter;
+};
+
+//
+//
+//
+
+struct skc_extent_hcw1_dr1 *
+skc_extent_hcw1_dr1_alloc(struct skc_allocator * const allocator,
+                          skc_uint               const elem_size,
+                          skc_uint               const elem_count)
+{
+  struct skc_extent_hcw1_dr1 * extent;
+
+  extent             = skc_allocator_alloc_host(allocator,sizeof(*extent));
+  extent->hw_dr      = skc_extent_hw_dr_alloc(allocator,elem_size * elem_count);
+  extent->elem_size  = elem_size;
+  extent->elem_count = elem_count;
+  extent->counter    = 0;
+
+  return extent;
+}
+
+void
+skc_extent_hcw1_dr1_free(struct skc_allocator       * const allocator,
+                         struct skc_extent_hcw1_dr1 * const extent)
+{
+  skc_extent_hw_dr_free  (allocator,extent->hw_dr);
+  skc_allocator_free_host(allocator,extent);
+}
+
+void
+skc_extent_hcw1_dr1_map(struct skc_command_queue   * const cq,
+                        struct skc_extent_hcw1_dr1 * const extent)
+{
+  skc_extent_hw_dr_map(cq,extent->hw_dr);
+}
+
+void
+skc_extent_hcw1_dr1_unmap(struct skc_command_queue   * const cq,
+                          struct skc_extent_hcw1_dr1 * const extent)
+{
+  skc_extent_hw_dr_unmap(cq,extent->hw_dr);
+}
+
+void
+skc_extent_hcw1_dr1_reset(struct skc_extent_hcw1_dr1 * const extent)
+{
+  extent->counter = 0;
+}
+
+skc_bool
+skc_extent_hcw1_dr1_is_full(struct skc_extent_hcw1_dr1 const * const extent)
+{
+  return (extent->counter == extent->elem_count);
+}
+
+skc_uint
+skc_extent_hcw1_dr1_rem(struct skc_extent_hcw1_dr1 * const extent)
+{
+  return extent->elem_count - extent->counter;
+}
+
+void
+skc_extent_hcw1_dr1_append(struct skc_extent_hcw1_dr1 * const extent,
+                           void  const * SKC_RESTRICT   const elem_ptr,
+                           skc_uint                     const elem_count_clamped)
+{
+  skc_extent_hw_dr_memcpy(extent->hw_dr,
+                          elem_ptr,
+                          extent->elem_size * extent->counter,
+                          extent->elem_size * elem_count_clamped);
+}
+
+//
+//
+//
+
+struct skc_extent_hcw1_drN_unified
+{
+  struct skc_extent_hw_dr * hw_dr; // mapped memory
+  size_t                    elem_size;
+  skc_uint                  elem_count;
+  skc_uint                  counter;
+};
+
+//
+//
+//
+
+struct skc_extent_hcw1_drN_unified *
+skc_extent_hcw1_drN_unified_alloc(struct skc_allocator * const allocator,
+                                  skc_uint               const elem_size,
+                                  skc_uint               const elem_count)
+{
+  struct skc_extent_hcw1_drN_unified * extent;
+
+  extent             = skc_allocator_alloc_host(allocator,sizeof(*extent));
+  extent->hw_dr      = skc_extent_hw_dr_alloc(allocator,elem_size * elem_count);
+  extent->elem_size  = elem_size;
+  extent->elem_count = elem_count;
+  extent->counter    = 0;
+
+  return extent;
+}
+
+void
+skc_extent_hcw1_drN_unified_free(struct skc_allocator               * const allocator,
+                                 struct skc_extent_hcw1_drN_unified * const extent)
+{
+  skc_extent_hw_dr_free  (allocator,extent->hw_dr);
+  skc_allocator_free_host(allocator,extent);
+}
+
+void
+skc_extent_hcw1_drN_unified_map(struct skc_command_queue           * const cq,
+                                struct skc_extent_hcw1_drN_unified * const extent)
+{
+  skc_extent_hw_dr_map(cq,extent->hw_dr);
+}
+
+
+void
+skc_extent_hcw1_drN_unified_unmap(struct skc_command_queue           * const cq,
+                                  struct skc_extent_hcw1_drN_unified * const extent)
+{
+  skc_extent_hw_dr_unmap(cq,extent->hw_dr);
+}
+
+void
+skc_extent_hcw1_drN_unified_reset(struct skc_extent_hcw1_drN_unified * const extent)
+{
+  extent->counter = 0;
+}
+
+skc_bool
+skc_extent_hcw1_drN_unified_is_full(struct skc_extent_hcw1_drN_unified const * const extent)
+{
+  return (extent->counter == extent->elem_count);
+}
+
+
+skc_uint
+skc_extent_hcw1_drN_unified_rem(struct skc_extent_hcw1_drN_unified * const extent)
+{
+  return extent->elem_count - extent->counter;
+}
+
+
+void
+skc_extent_hcw1_drN_unified_append(struct skc_extent_hcw1_drN_unified * const extent,
+                                   void            const * SKC_RESTRICT const elem_ptr,
+                                   skc_uint                             const elem_count_clamped)
+{
+  skc_extent_hw_dr_memcpy(extent->hw_dr,
+                          elem_ptr,
+                          extent->elem_size * extent->counter,
+                          extent->elem_size * elem_count_clamped);
+}
+
+//
+//
+//
+
+struct skc_id_pool_hp *
+skc_id_pool_hp_alloc(struct skc_allocator * const allocator,
+                     skc_uint               const count)
+{
+  return NULL;
+}
+
+void
+skc_id_pool_hp_free(struct skc_allocator  * const allocator,
+                    struct skc_id_pool_hp * const extent)
+{
+  ;
+}
+
+void
+skc_id_pool_hp_acquire(struct skc_id_pool_hp * const extent, 
+                       skc_uint              * const id)
+{
+  ;
+}
+
+void
+skc_id_pool_hp_release_1(struct skc_id_pool_hp * const extent, 
+                         skc_uint                const id)
+{
+  ;
+}
+
+void
+skc_id_pool_hp_release_n(struct skc_id_pool_hp * const extent, 
+                         skc_uint        const * const id, 
+                         skc_uint                const count)
+{
+  ;
+}
+
+//
+//
+//
+
+struct skc_block_pool_dprw *
+skc_block_pool_dprw_alloc(struct skc_allocator * const allocator,
+                          union skc_ring       * const ring_d,
+                          skc_uint               const block_size,
+                          skc_uint               const block_count)
+{
+  return NULL;
+}
+
+void
+skc_block_pool_dprw_free(struct skc_allocator       * const allocator,
+                         struct skc_block_pool_dprw * const extent)
+{
+  ;
+}
+
+//
+//
+//
+
+struct skc_extent_hgw1_drN *
+skc_extent_hgw1_drN_alloc(struct skc_allocator * const allocator,
+                          skc_uint               const elem_size,
+                          skc_uint               const elem_count)
+{
+  return NULL;
+}
+
+void
+skc_extent_hgw1_drN_free(struct skc_allocator       * const allocator,
+                         struct skc_extent_hgw1_drN * const extent)
+{
+  ;
+}
+
+void
+skc_extent_hgw1_drN_reset(struct skc_extent_hgw1_drN * const extent)
+{
+  ;
+}
+
+void
+skc_extent_hgw1_drN_snap(struct skc_command_queue         * const cq,
+                         struct skc_extent_hgw1_drN const * const extent)
+{
+  ;
+}
+
+//
+//
+//
+
+#if 0
+
+//
+//
+//
+
+struct skc_block_pool_hp_drw *
+skc_block_pool_hp_drw_alloc(struct skc_allocator * const allocator,
+                            skc_uint               const elem_size,
+                            skc_uint               const elem_count)
+{
+  return NULL;
+}
+
+void
+skc_block_pool_hp_drw_free(struct skc_allocator         * const allocator,
+                           struct skc_block_pool_hp_drw * const extent)
+{
+  ;
+}
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/cl_20/extent.h b/src/compute/skc/cl_20/extent.h
new file mode 100644
index 0000000..2993968
--- /dev/null
+++ b/src/compute/skc/cl_20/extent.h
@@ -0,0 +1,390 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "skc.h"
+#include "allocator.h"
+
+//
+// EXTENT TYPES
+//
+// Classification of operations on allocated GPU memory
+//
+// h  = host
+// d  = device
+//
+// c  = append using non-atomic incremented count
+// x  = append using atomically incremented index
+// p  = allocated from pool of indices
+// g  = gathered by pull kernel
+//
+// w1 = write once
+// wN = write many
+//
+// r1 = read once
+// rN = read many
+//
+// rw = read/write many
+//
+//                                host<>device memory model
+//                       +--------------------+--------------------+
+//     extent type       |      split         |      shared        |  examples
+//  ---------------------+--------------------+--------------------+--------------------
+//                       |                    |                    |
+//   extent_atomic       |   device+mapped    |   device+mapped    |  atomically op'd device extent + read-only host snapshot
+//                       |                    |                    |
+//   extent_dxrw         |      device        |      device        |  ttsk_array, ttpk_array, ttck_array, *_offsets
+//   extent_hcw1_dr1     |      mapped        |      mapped        |  command_queue, buffer
+//   extent_hcrw         |       host         |       host         |  queue
+//                       |                    |                    |
+//  ---------------------+--------------------+--------------------+--------------------
+//                       |                    |                    |
+//   extent_hcw1_drN     |     memcpy'd       |      mapped        |  stack_transforms, stack_stroke_props
+//   extent_hgw1_drN     |   scatter/gather   |      mapped        |  layer_props
+//                       |                    |                    |
+//   block_pool_dprw     |      device        |      device        |  ttsb_pool, ttpb_pool
+//   block_pool_hp_drw   |      device        |      device        |  raster_pool
+//                       |                    |                    |
+//  ---------------------+--------------------+--------------------+--------------------
+//                       |                    |                    |
+//   block_pool_hp_drw   | block_pool_hp_drw  | block_pool_hp_drw  |  path_block_pool
+//   staging buffer      | extent_hw_dr       |        --          |
+//                       |                    |                    |
+//
+
+struct skc_extent_hrw;
+struct skc_extent_drw;
+
+struct skc_extent_hrw_drN;
+struct skc_extent_hw1_drN;
+struct skc_extent_hrN_drw;
+
+struct skc_extent_atomic;
+
+struct skc_extent_hcrw;
+struct skc_extent_dxrw;
+
+struct skc_block_pool_dprw;
+
+struct skc_id_pool_hp;
+
+struct skc_extent_hcw1_dr1;
+struct skc_extent_hcw1_drN;
+struct skc_extent_hgw1_drN;
+
+//
+//
+//
+
+void *
+skc_extent_hrw_drN_get_hrw(struct skc_extent_hrw_drN * extent);
+
+void *
+skc_extent_hw1_drN_get_hw1(struct skc_extent_hw1_drN * extent);
+
+//
+//
+//
+
+struct skc_extent_hrw *
+skc_extent_hrw_alloc(struct skc_allocator * const allocator,
+                     size_t                 const size);
+
+void
+skc_extent_hrw_free(struct skc_allocator  * const allocator,
+                    struct skc_extent_hrw * const extent);
+
+void *
+skc_extent_hrw_get_hrw(struct skc_extent_hrw * extent);
+
+//
+//
+//
+
+struct skc_extent_drw *
+skc_extent_drw_alloc(struct skc_allocator * const allocator,
+                     size_t                 const size);
+
+void
+skc_extent_drw_free(struct skc_allocator  * const allocator,
+                    struct skc_extent_drw * const extent);
+
+void
+skc_extent_drw_fill(struct skc_command_queue * const cq,
+                    struct skc_extent_drw    * const extent,
+                    void               const * const pattern,
+                    size_t                     const pattern_size,
+                    size_t                     const size);
+
+//
+//
+//
+
+struct skc_extent_hw_dr *
+skc_extent_hw_dr_alloc(struct skc_allocator * const allocator,
+                       size_t                 const size);
+
+void
+skc_extent_hw_dr_free(struct skc_allocator    * const allocator,
+                      struct skc_extent_hw_dr * const extent);
+
+void
+skc_extent_hw_dr_map(struct skc_command_queue * const cq,
+                     struct skc_extent_hw_dr  * const extent);
+
+void
+skc_extent_hw_dr_unmap(struct skc_command_queue * const cq,
+                       struct skc_extent_hw_dr  * const extent);
+
+void
+skc_extent_hw_dr_memcpy(struct skc_extent_hw_dr * const extent,
+                        void const * SKC_RESTRICT const src, 
+                        size_t                    const offset, 
+                        size_t                    const size);
+//
+//
+//
+
+struct skc_extent_hr_drw *
+skc_extent_hr_drw_alloc(struct skc_allocator * const allocator,
+                        size_t                 const size);
+
+void
+skc_extent_hr_drw_free(struct skc_allocator     * const allocator,
+                       struct skc_extent_hr_drw * const extent);
+
+void
+skc_extent_hr_drw_snap(struct skc_command_queue * const cq,
+                       struct skc_extent_hr_drw * const extent,
+                       size_t                     const size);
+
+void
+skc_extent_hr_drw_fill(struct skc_command_queue * const cq,
+                       struct skc_extent_hr_drw * const extent,
+                       void               const * const pattern,
+                       size_t                     const pattern_size,
+                       size_t                     const size);
+
+//
+//
+//
+
+struct skc_extent_atomic *
+skc_extent_atomic_alloc(struct skc_allocator * const allocator,
+                        size_t                 const size);
+
+void
+skc_extent_atomic_free(struct skc_allocator     * const allocator,
+                       struct skc_extent_atomic * const extent);
+
+void
+skc_extent_atomic_snap(struct skc_command_queue       * const cq,
+                       struct skc_extent_atomic const * const extent);
+
+void
+skc_extent_atomic_zero(struct skc_command_queue       * const cq,
+                       struct skc_extent_atomic const * const extent);
+
+//
+//
+//
+
+
+struct skc_extent_dxrw *
+skc_extent_dxrw_alloc(struct skc_allocator     * const allocator,
+                      size_t                     const elem_size,
+                      skc_uint                   const elem_count,
+                      struct skc_extent_atomic * const atomic,
+                      size_t                     const atomic_offset);
+
+void
+skc_extent_dxrw_free(struct skc_allocator   * const allocator,
+                     struct skc_extent_dxrw * const extent);
+
+//
+//
+//
+
+struct skc_extent_hcrw *
+skc_extent_hcrw_alloc(struct skc_allocator * const allocator,
+                      size_t                 const elem_size,
+                      skc_uint               const elem_count);
+
+void
+skc_extent_hcrw_free(struct skc_allocator   * const allocator,
+                     struct skc_extent_hcrw * const extent);
+
+void
+skc_extent_hcrw_reset(struct skc_extent_hcrw * const extent);
+
+skc_bool
+skc_extent_hcrw_is_full(struct skc_extent_hcrw const * const extent);
+
+//
+//
+//
+
+struct skc_extent_hcw1_dr1 *
+skc_extent_hcw1_dr1_alloc(struct skc_allocator * const allocator,
+                          skc_uint               const elem_size,
+                          skc_uint               const elem_count);
+
+void
+skc_extent_hcw1_dr1_free(struct skc_allocator       * const allocator,
+                         struct skc_extent_hcw1_dr1 * const extent);
+
+void
+skc_extent_hcw1_dr1_map(struct skc_command_queue   * const cq,
+                        struct skc_extent_hcw1_dr1 * const extent);
+
+void
+skc_extent_hcw1_dr1_unmap(struct skc_command_queue   * const cq,
+                          struct skc_extent_hcw1_dr1 * const extent);
+
+void
+skc_extent_hcw1_dr1_reset(struct skc_extent_hcw1_dr1 * const extent);
+
+skc_bool
+skc_extent_hcw1_dr1_is_full(struct skc_extent_hcw1_dr1 const * const extent);
+
+skc_uint
+skc_extent_hcw1_dr1_rem(struct skc_extent_hcw1_dr1 * const extent);
+
+void
+skc_extent_hcw1_dr1_append(struct skc_extent_hcw1_dr1 * const extent,
+                           void  const * SKC_RESTRICT   const elem_ptr,
+                           skc_uint                     const elem_count_clamped);
+
+//
+// Note: on a shared memory device this reuses the hcw1_dr1
+// implementation and unmaps the extent instead of copying
+//
+
+struct skc_extent_hcw1_drN_unified *
+skc_extent_hcw1_drN_unified_alloc(struct skc_allocator * const allocator,
+                                  skc_uint               const elem_size,
+                                  skc_uint               const elem_count);
+
+void
+skc_extent_hcw1_drN_unified_free(struct skc_allocator               * const allocator,
+                                 struct skc_extent_hcw1_drN_unified * const extent);
+
+void
+skc_extent_hcw1_drN_unified_map(struct skc_command_queue           * const cq,
+                                struct skc_extent_hcw1_drN_unified * const extent);
+
+void
+skc_extent_hcw1_drN_unified_unmap(struct skc_command_queue           * const cq,
+                                  struct skc_extent_hcw1_drN_unified * const extent);
+
+void
+skc_extent_hcw1_drN_unified_reset(struct skc_extent_hcw1_drN_unified * const extent);
+
+skc_bool
+skc_extent_hcw1_drN_unified_is_full(struct skc_extent_hcw1_drN_unified const * const extent);
+
+skc_uint
+skc_extent_hcw1_drN_unified_rem(struct skc_extent_hcw1_drN_unified * const extent);
+
+void
+skc_extent_hcw1_drN_unified_append(struct skc_extent_hcw1_drN_unified * const extent,
+                                   void            const * SKC_RESTRICT const elem_ptr,
+                                   skc_uint                             const elem_count_clamped);
+//
+//
+//
+
+struct skc_id_pool_hp *
+skc_id_pool_hp_alloc(struct skc_allocator * const allocator,
+                     skc_uint               const count);
+
+void
+skc_id_pool_hp_free(struct skc_allocator  * const allocator,
+                    struct skc_id_pool_hp * const extent);
+
+void
+skc_id_pool_hp_acquire(struct skc_id_pool_hp * const extent, 
+                       skc_uint              * const id);
+
+void
+skc_id_pool_hp_release_1(struct skc_id_pool_hp * const extent, 
+                         skc_uint                const id);
+
+void
+skc_id_pool_hp_release_n(struct skc_id_pool_hp * const extent, 
+                         skc_uint        const * const id, 
+                         skc_uint                const count);
+
+//
+//
+//
+
+struct skc_block_pool_dprw *
+skc_block_pool_dprw_alloc(struct skc_allocator * const allocator,
+                          union skc_ring       * const ring_d,
+                          skc_uint               const block_size,
+                          skc_uint               const block_count);
+
+void
+skc_block_pool_dprw_free(struct skc_allocator       * const allocator,
+                         struct skc_block_pool_dprw * const extent);
+
+//
+//
+//
+
+struct skc_extent_hgw1_drN_unified *
+skc_extent_hgw1_drN_unified_alloc(struct skc_allocator * const allocator,
+                          skc_uint               const elem_size,
+                          skc_uint               const elem_count);
+
+void
+skc_extent_hgw1_drN_unified_free(struct skc_allocator       * const allocator,
+                         struct skc_extent_hgw1_drN_unified * const extent);
+
+void
+skc_extent_hgw1_drN_unified_reset(struct skc_extent_hgw1_drN_unified * const extent);
+
+void
+skc_extent_hgw1_drN_unified_snap(struct skc_command_queue         * const cq,
+                         struct skc_extent_hgw1_drN_unified const * const extent);
+
+//
+//
+//
+
+#if 0
+
+//
+//
+//
+
+struct skc_block_pool_hp_drw *
+skc_block_pool_hp_drw_alloc(struct skc_allocator * const allocator,
+                            skc_uint               const elem_size,
+                            skc_uint               const elem_count);
+
+void
+skc_block_pool_hp_drw_free(struct skc_allocator         * const allocator,
+                           struct skc_block_pool_hp_drw * const extent);
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
+
diff --git a/src/compute/skc/cl_20/ring_cl_svm_fine.cpp b/src/compute/skc/cl_20/ring_cl_svm_fine.cpp
new file mode 100644
index 0000000..9552c81
--- /dev/null
+++ b/src/compute/skc/cl_20/ring_cl_svm_fine.cpp
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+// Fine-grained shared virtual memory ring
+//
+// There is limited support for C11 atomics in C compilers so
+// implement this module in C++11
+//
+
+extern "C" {
+
+#include "runtime.h"
+#include "ring_cl_svm_fine.h"
+
+}
+
+//
+//
+//
+
+#include <atomic>
+
+//
+//
+//
+
+union skc_ring
+{
+  std::atomic<skc_uint>   rw[2];
+  
+  struct {
+    std::atomic<skc_uint> reads;  // number of reads
+    std::atomic<skc_uint> writes; // number of writes
+  };
+};
+
+//
+//
+//
+
+union skc_ring *
+skc_ring_cl_svm_fine_alloc(struct skc_runtime_impl * const runtime_impl)
+{
+  return (union skc_ring *)
+    clSVMAlloc(runtime_impl->context,
+               CL_MEM_READ_WRITE | CL_MEM_SVM_FINE_GRAIN_BUFFER | CL_MEM_SVM_ATOMICS,
+               sizeof(union skc_ring),
+               0);
+}
+
+void
+skc_ring_cl_svm_fine_init(union skc_ring * const ring, skc_uint writes)
+{
+  ring->reads  = ATOMIC_VAR_INIT(0);
+  ring->writes = ATOMIC_VAR_INIT(writes);
+}
+                    
+void
+skc_ring_cl_svm_fine_free(struct skc_runtime_impl * const runtime_impl, union skc_ring * const ring)
+{
+  clSVMFree(runtime_impl->context,ring);
+}
+
+//
+//
+//
+
+skc_uint
+skc_ring_cl_svm_fine_read(union skc_ring * const ring, skc_uint const n)
+{
+  return atomic_fetch_add_explicit(&ring->reads,n,std::memory_order_relaxed);
+}
+
+skc_uint
+skc_ring_cl_svm_fine_write(union skc_ring * const ring, skc_uint const n)
+{
+  return atomic_fetch_add_explicit(&ring->writes,n,std::memory_order_relaxed);
+}
+
+//
+//
+//
+
diff --git a/src/compute/skc/cl_20/ring_cl_svm_fine.h b/src/compute/skc/cl_20/ring_cl_svm_fine.h
new file mode 100644
index 0000000..65ff9f7
--- /dev/null
+++ b/src/compute/skc/cl_20/ring_cl_svm_fine.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+// Fine-grained shared virtual memory ring
+//
+
+#include "runtime.h"
+#include "types.h"
+
+//
+//
+//
+
+union skc_ring *
+skc_ring_cl_svm_fine_alloc(struct skc_runtime_impl * const runtime_impl);
+
+void
+skc_ring_cl_svm_fine_free(struct skc_runtime_impl * const runtime_impl, union skc_ring * const ring);
+
+//
+//
+//
+
+void
+skc_ring_cl_svm_fine_init(union skc_ring * const ring, skc_uint writes);
+
+//
+//
+//
+
+skc_uint
+skc_ring_cl_svm_fine_read(union skc_ring * const ring, skc_uint const n);
+
+skc_uint
+skc_ring_cl_svm_fine_write(union skc_ring * const ring, skc_uint const n);
+
+//
+//
+//
+
diff --git a/src/compute/skc/common.h b/src/compute/skc/common.h
new file mode 100644
index 0000000..618ba22
--- /dev/null
+++ b/src/compute/skc/common.h
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_COMMON_ONCE
+#define SKC_COMMON_ONCE
+
+//
+// structures common to both host and device -- placeholder until
+// everything shakes out
+//
+
+union skc_transform
+{
+  //
+  // Transform is always scaled s.t. w2 is 1.0f
+  //
+  skc_float   f32a8[8];
+
+  skc_float8  f32v8;
+
+  struct {
+    skc_float sx;
+    skc_float shx;
+    skc_float tx;
+
+    skc_float shy;
+    skc_float sy;
+    skc_float ty;
+
+    skc_float w0;
+    skc_float w1;
+  };
+};
+
+//
+//
+//
+
+union skc_path_clip
+{
+  skc_float   f32a4[4]; // FIXME -- use the SIMD4 representation trick
+
+  skc_float4  f32v4;
+
+  struct {
+    skc_float x0;
+    skc_float y0;
+    skc_float x1;
+    skc_float y1;
+  };
+};
+
+//
+// host-side path fill cmd that is expanded into rasterization cmds
+//
+// FIXME -- these magic numbers will be replaced with tile.h constants
+//
+// FIXME -- make this command opaque by moving it into the platform impl
+//
+// FIXME -- NEED TO EVALUATE IF THIS DISTRIBUTION OF BITS IS GOING TO
+// BE TOO SMALL -- plenty of room to jiggle these bits
+//
+
+#define SKC_CMD_FILL_BITS_TRANSFORM  12  // distinct transforms -- perhaps too generous
+#define SKC_CMD_FILL_BITS_CLIP       12  // distinct clips      -- perhaps too generous
+#define SKC_CMD_FILL_BITS_COHORT      8  // perhaps too small
+
+//
+//
+//
+
+typedef skc_uint skc_path_h; // host path handle
+
+union skc_cmd_fill
+{
+  skc_ulong    u64;
+
+  skc_uint2    u32v2;
+
+  struct {
+    skc_path_h path;           // host path id
+#if defined(__OPENCL_C_VERSION__)
+    skc_uint   tcc;
+#else
+    skc_uint   transform : SKC_CMD_FILL_BITS_TRANSFORM;
+    skc_uint   clip      : SKC_CMD_FILL_BITS_CLIP;
+    skc_uint   cohort    : SKC_CMD_FILL_BITS_COHORT;
+#endif
+  };
+};
+
+//
+//
+//
+
+typedef skc_uint skc_raster_h;
+
+union skc_cmd_place
+{
+  skc_uint4       u32v4;
+
+  struct {
+    skc_raster_h  raster_h;
+    skc_uint      layer_id;
+    skc_uint      tx;
+    skc_uint      ty;
+  };
+};
+
+SKC_STATIC_ASSERT(sizeof(union skc_cmd_place) == sizeof(skc_uint4));
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/composition.c b/src/compute/skc/composition.c
new file mode 100644
index 0000000..d9d51ba
--- /dev/null
+++ b/src/compute/skc/composition.c
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include "composition.h"
+// #include "common.h"
+// #include "context.h"
+
+//
+// high level composition object
+//
+
+skc_err
+skc_composition_retain(skc_composition_t composition)
+{
+  composition->ref_count += 1;
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_composition_release(skc_composition_t composition)
+{
+  composition->release(composition->impl);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
+
+skc_err
+skc_composition_seal(skc_composition_t composition)
+{
+  //
+  // seal the composition
+  //
+  composition->seal(composition->impl);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
+
+skc_err
+skc_composition_unseal(skc_composition_t composition, bool reset)
+{
+  //
+  // unseal the composition
+  //
+  composition->unseal(composition->impl,reset);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
+
+skc_err
+skc_composition_place(skc_composition_t    composition,
+                      skc_raster_t const * rasters,
+                      skc_layer_id const * layer_ids,
+                      float        const * txs,
+                      float        const * tys,
+                      uint32_t             count) // NOTE: A PER-PLACE CLIP IS POSSIBLE
+{
+  return composition->place(composition->impl,rasters,layer_ids,txs,tys,count);
+}
+
+//
+//
+//
+
+skc_err
+skc_composition_get_bounds(skc_composition_t composition, int32_t bounds[4])
+{
+  //
+  // not working yet -- need to think about the semantics
+  //
+  // Option 1: return tight bounds of entire composition
+  // Option 2: ?
+  //
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
diff --git a/src/compute/skc/composition.h b/src/compute/skc/composition.h
new file mode 100644
index 0000000..cb83cfd
--- /dev/null
+++ b/src/compute/skc/composition.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "skc.h"
+#include "types.h"
+
+//
+//
+//
+
+struct skc_composition
+{
+  struct skc_context           * context;
+  struct skc_composition_impl  * impl;
+
+  //
+  // FIXME -- this collection of pfn's isn't complete
+  //
+  skc_err                     (* place  )(struct skc_composition_impl * const impl,
+                                          skc_raster_t          const *       rasters,
+                                          skc_layer_id          const *       layer_ids,
+                                          skc_float             const *       txs,
+                                          skc_float             const *       tys,
+                                          skc_uint                            count);
+
+  void                        (* unseal )(struct skc_composition_impl * const impl, skc_bool const reset);
+  void                        (* seal   )(struct skc_composition_impl * const impl);
+  void                        (* bounds )(struct skc_composition_impl * const impl, skc_int bounds[4]);
+  void                        (* release)(struct skc_composition_impl * const impl);
+
+  skc_int                        ref_count;
+};
+
+//
+//
+//
diff --git a/src/compute/skc/composition_cl_12.c b/src/compute/skc/composition_cl_12.c
new file mode 100644
index 0000000..7853564
--- /dev/null
+++ b/src/compute/skc/composition_cl_12.c
@@ -0,0 +1,823 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "hs/cl/hs_cl_launcher.h"
+
+#include "common/cl/assert_cl.h"
+
+#include "composition_cl_12.h"
+#include "config_cl.h"
+
+#include "context.h"
+#include "raster.h"
+#include "handle.h"
+
+#include "runtime_cl_12.h"
+
+#include "common.h"
+#include "tile.h"
+
+//
+// TTCK (32-BIT COMPARE) v1:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          30          |    1   |    1   |   18  |  7  |  7  |
+//
+//
+// TTCK (32-BIT COMPARE) v2:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          30          |    1   |    1   |   15  |  9  |  8  |
+//
+//
+// TTCK (64-BIT COMPARE) -- achieves 4K x 4K with an 8x16 tile:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          27          |    1   |    1   |   18  |  9  |  8  |
+//
+
+union skc_ttck
+{
+  skc_ulong   u64;
+  skc_uint2   u32v2;
+
+  struct {
+    skc_uint  id         : SKC_TTCK_LO_BITS_ID;
+    skc_uint  prefix     : SKC_TTCK_LO_BITS_PREFIX;
+    skc_uint  escape     : SKC_TTCK_LO_BITS_ESCAPE;
+    skc_uint  layer_lo   : SKC_TTCK_LO_BITS_LAYER;
+    skc_uint  layer_hi   : SKC_TTCK_HI_BITS_LAYER;
+    skc_uint  x          : SKC_TTCK_HI_BITS_X;
+    skc_uint  y          : SKC_TTCK_HI_BITS_Y;
+  };
+
+  struct {
+    skc_ulong na0        : SKC_TTCK_LO_BITS_ID_PREFIX_ESCAPE;
+    skc_ulong layer      : SKC_TTCK_BITS_LAYER;
+    skc_ulong na1        : SKC_TTCK_HI_BITS_YX;
+  };
+
+  struct {
+    skc_uint  na2;
+    skc_uint  na3        : SKC_TTCK_HI_BITS_LAYER;
+    skc_uint  yx         : SKC_TTCK_HI_BITS_YX;
+  };
+};
+
+//
+// FIXME -- accept floats on host but convert to subpixel offsets
+// before appending to command ring
+//
+
+#define SKC_PLACE_CMD_TX_CONVERT(f)  0
+#define SKC_PLACE_CMD_TY_CONVERT(f)  0
+
+//
+// COMPOSITION PLACE
+//
+// This is a snapshot of the host-side command queue.
+//
+// Note that the composition command extent could be implemented as
+// either a mapped buffer or simply copied to an ephemeral extent.
+//
+// This implementation may vary between compute platforms.
+//
+
+struct skc_composition_place
+{
+  struct skc_composition_impl      * impl;
+
+  cl_command_queue                   cq;
+
+  struct skc_extent_phw1g_tdrNs_snap cmds;
+
+  skc_subbuf_id_t                    id;
+};
+
+//
+// Forward declarations
+//
+
+static
+void
+skc_composition_unseal_block(struct skc_composition_impl * const impl, 
+                             skc_bool                      const block);
+
+//
+//
+//
+
+static
+void
+skc_composition_pfn_release(struct skc_composition_impl * const impl)
+{
+  if (--impl->composition->ref_count != 0)
+    return;
+
+  //
+  // otherwise, dispose of all resources
+  //
+
+  // the unsealed state is a safe state to dispose of resources
+  skc_composition_unseal_block(impl,true); // block
+
+  struct skc_runtime * const runtime = impl->runtime;
+  
+  // free host composition
+  skc_runtime_host_perm_free(runtime,impl->composition);
+
+  // release the cq
+  skc_runtime_release_cq_in_order(runtime,impl->cq);
+
+  // release kernels
+  cl(ReleaseKernel(impl->kernels.place));
+  cl(ReleaseKernel(impl->kernels.segment));  
+
+  // release extents
+  skc_extent_phw1g_tdrNs_free(runtime,&impl->cmds.extent);
+  skc_extent_phrw_free       (runtime,&impl->saved.extent);
+  skc_extent_phr_pdrw_free   (runtime,&impl->atomics);
+
+  skc_extent_pdrw_free       (runtime,&impl->keys);
+  skc_extent_pdrw_free       (runtime,&impl->offsets);
+      
+  // free composition impl
+  skc_runtime_host_perm_free(runtime,impl);
+}
+
+//
+//
+//
+
+static
+void
+skc_composition_place_grid_pfn_dispose(skc_grid_t const grid)
+{
+  struct skc_composition_place * const place   = skc_grid_get_data(grid);
+  struct skc_composition_impl  * const impl    = place->impl;
+  struct skc_runtime           * const runtime = impl->runtime;
+
+  // release cq
+  skc_runtime_release_cq_in_order(runtime,place->cq);
+
+  // unmap the snapshot (could be a copy)
+  skc_extent_phw1g_tdrNs_snap_free(runtime,&place->cmds);
+
+  // release place struct
+  skc_runtime_host_temp_free(runtime,place,place->id);
+
+  // release impl
+  skc_composition_pfn_release(impl);
+}
+
+//
+//
+//
+
+static
+void
+skc_composition_place_read_complete(skc_grid_t const grid)
+{
+  skc_grid_complete(grid);
+}
+
+static
+void
+skc_composition_place_read_cb(cl_event event, cl_int status, skc_grid_t const grid)
+{
+  SKC_CL_CB(status);
+  
+  struct skc_composition_place * const place     = skc_grid_get_data(grid);
+  struct skc_composition_impl  * const impl      = place->impl;
+  struct skc_runtime           * const runtime   = impl->runtime;
+  struct skc_scheduler         * const scheduler = runtime->scheduler;
+
+  // as quickly as possible, enqueue next stage in pipeline to context command scheduler
+  SKC_SCHEDULER_SCHEDULE(scheduler,skc_composition_place_read_complete,grid);
+}
+
+static
+void
+skc_composition_place_grid_pfn_execute(skc_grid_t const grid)
+{
+  //
+  // FILLS EXPAND
+  //
+  // need result of cmd counts before launching RASTERIZE grids
+  //
+  // - OpenCL 1.2: copy atomic counters back to host and launch RASTERIZE grids from host
+  // - OpenCL 2.x: have a kernel size and launch RASTERIZE grids from device
+  // - or launch a device-wide grid that feeds itself but that's unsatisfying
+  //
+  struct skc_composition_place * const place   = skc_grid_get_data(grid);
+  struct skc_composition_impl  * const impl    = place->impl;
+  struct skc_runtime           * const runtime = impl->runtime;
+
+  skc_uint  const work_size = skc_extent_ring_snap_count(place->cmds.snap);
+  skc_uint4 const clip      = { 0, 0, SKC_UINT_MAX, SKC_UINT_MAX };
+
+  // initialize kernel args
+  cl(SetKernelArg(impl->kernels.place,0,SKC_CL_ARG(impl->runtime->block_pool.blocks.drw)));
+  cl(SetKernelArg(impl->kernels.place,1,SKC_CL_ARG(impl->atomics.drw)));
+  cl(SetKernelArg(impl->kernels.place,2,SKC_CL_ARG(impl->keys.drw)));
+  cl(SetKernelArg(impl->kernels.place,3,SKC_CL_ARG(place->cmds.drN)));
+  cl(SetKernelArg(impl->kernels.place,4,SKC_CL_ARG(runtime->handle_pool.map.drw)));
+  cl(SetKernelArg(impl->kernels.place,5,SKC_CL_ARG(clip))); // FIXME -- convert the clip to yx0/yx1 format
+  cl(SetKernelArg(impl->kernels.place,6,SKC_CL_ARG(work_size)));
+
+  // launch kernel
+  skc_device_enqueue_kernel(runtime->device,
+                            SKC_DEVICE_KERNEL_ID_PLACE,
+                            place->cq,
+                            impl->kernels.place,
+                            work_size,
+                            0,NULL,NULL);
+  //
+  // copy atomics back after every place launch
+  //
+  cl_event complete;
+
+  skc_extent_phr_pdrw_read(&impl->atomics,place->cq,&complete);
+
+  cl(SetEventCallback(complete,CL_COMPLETE,skc_composition_place_read_cb,grid));
+  cl(ReleaseEvent(complete));
+
+  // flush command queue
+  cl(Flush(place->cq));
+}
+
+//
+//
+//
+
+static
+void
+skc_composition_snap(struct skc_composition_impl * const impl)
+{
+  skc_composition_retain(impl->composition);
+
+  skc_subbuf_id_t id;
+
+  struct skc_composition_place * const place = skc_runtime_host_temp_alloc(impl->runtime,
+                                                                           SKC_MEM_FLAGS_READ_WRITE,
+                                                                           sizeof(*place),&id,NULL);
+
+  // save the subbuf id
+  place->id = id;
+
+  // save backpointer
+  place->impl = impl;
+
+  // set grid data
+  skc_grid_set_data(impl->grids.place,place);
+  
+  // acquire command queue
+  place->cq = skc_runtime_acquire_cq_in_order(impl->runtime);
+
+  // checkpoint the ring
+  skc_extent_ring_checkpoint(&impl->cmds.ring);
+
+  // make a snapshot
+  skc_extent_phw1g_tdrNs_snap_init(impl->runtime,&impl->cmds.ring,&place->cmds);
+  
+  // unmap the snapshot (could be a copy)
+  skc_extent_phw1g_tdrNs_snap_alloc(impl->runtime,
+                                    &impl->cmds.extent,
+                                    &place->cmds,
+                                    place->cq,
+                                    NULL);
+
+  skc_grid_force(impl->grids.place);
+}
+
+//
+//
+//
+
+static
+void
+skc_composition_pfn_seal(struct skc_composition_impl * const impl)
+{
+  // return if sealing or sealed
+  if (impl->state >= SKC_COMPOSITION_STATE_SEALING)
+    return;
+
+  struct skc_runtime   * const runtime   = impl->runtime;
+  struct skc_scheduler * const scheduler = runtime->scheduler;
+
+  //
+  // otherwise, wait for UNSEALING > UNSEALED transition
+  //
+  if (impl->state == SKC_COMPOSITION_STATE_UNSEALING)
+    {
+      SKC_SCHEDULER_WAIT_WHILE(scheduler,impl->state != SKC_COMPOSITION_STATE_UNSEALED);
+    }
+  else // or we were already unsealed
+    {
+      // flush is there is work in progress
+      skc_uint const count = skc_extent_ring_wip_count(&impl->cmds.ring);
+
+      if (count > 0) {
+        skc_composition_snap(impl);
+      }
+    }
+
+  //
+  // now unsealed so we need to start sealing...
+  //
+  impl->state = SKC_COMPOSITION_STATE_SEALING;
+
+  //
+  // the seal operation implies we should force start all dependencies
+  // that are still in a ready state
+  //
+  skc_grid_force(impl->grids.sort);
+}
+
+//
+//
+//
+
+void
+skc_composition_sort_execute_complete(struct skc_composition_impl * const impl)
+{
+  // we're sealed
+  impl->state = SKC_COMPOSITION_STATE_SEALED;
+
+  // this grid is done
+  skc_grid_complete(impl->grids.sort);
+}
+
+static
+void
+skc_composition_sort_execute_cb(cl_event event, cl_int status, struct skc_composition_impl * const impl)
+{
+  SKC_CL_CB(status);
+
+  // as quickly as possible, enqueue next stage in pipeline to context command scheduler
+  SKC_SCHEDULER_SCHEDULE(impl->runtime->scheduler,skc_composition_sort_execute_complete,impl);
+}
+
+static
+void
+skc_composition_sort_grid_pfn_execute(skc_grid_t const grid)
+{
+  struct skc_composition_impl * const impl = skc_grid_get_data(grid);
+
+  // we should be sealing 
+  assert(impl->state == SKC_COMPOSITION_STATE_SEALING);
+
+  struct skc_place_atomics * const atomics = impl->atomics.hr;
+
+#ifndef NDEBUG
+  fprintf(stderr,"composition sort: %u\n",atomics->keys);
+#endif
+
+  if (atomics->keys > 0)
+    {
+      uint32_t keys_padded_in, keys_padded_out;
+
+      hs_pad(atomics->keys,&keys_padded_in,&keys_padded_out);
+
+      hs_sort(impl->cq,
+              impl->keys.drw,
+              impl->keys.drw,
+              atomics->keys,
+              keys_padded_in,
+              keys_padded_out,
+              false);
+
+      cl(SetKernelArg(impl->kernels.segment,0,SKC_CL_ARG(impl->keys.drw)));
+      cl(SetKernelArg(impl->kernels.segment,1,SKC_CL_ARG(impl->offsets.drw)));
+      cl(SetKernelArg(impl->kernels.segment,2,SKC_CL_ARG(impl->atomics.drw)));
+
+      // find start of each tile
+      skc_device_enqueue_kernel(impl->runtime->device,
+                                SKC_DEVICE_KERNEL_ID_SEGMENT_TTCK,
+                                impl->cq,
+                                impl->kernels.segment,
+                                atomics->keys,
+                                0,NULL,NULL);
+    }
+
+  cl_event complete;
+
+  // next stage needs to know number of key segments
+  skc_extent_phr_pdrw_read(&impl->atomics,impl->cq,&complete);
+  
+  // register a callback
+  cl(SetEventCallback(complete,CL_COMPLETE,skc_composition_sort_execute_cb,impl));
+  cl(ReleaseEvent(complete));
+
+  // flush cq
+  cl(Flush(impl->cq));
+}
+
+//
+//
+//
+
+static
+void
+skc_composition_raster_release(struct skc_composition_impl * const impl)
+{
+  //
+  // reference counts to rasters can only be released when the
+  // composition is unsealed and the atomics are reset.
+  //
+  skc_runtime_raster_device_release(impl->runtime,
+                                    impl->saved.extent.hrw,
+                                    impl->saved.count);
+  // reset count
+  impl->saved.count = 0;
+}
+
+//
+//
+//
+
+static
+void
+skc_composition_unseal_block(struct skc_composition_impl * const impl, 
+                             skc_bool                      const block)
+{
+  // return if already unsealed
+  if (impl->state == SKC_COMPOSITION_STATE_UNSEALED)
+    return;
+
+  //
+  // otherwise, we're going to need to pump the scheduler
+  //
+  struct skc_scheduler * const scheduler = impl->runtime->scheduler;
+
+  //
+  // wait for UNSEALING > UNSEALED transition
+  //
+  if (impl->state == SKC_COMPOSITION_STATE_UNSEALING)
+    {
+      if (block) {
+        SKC_SCHEDULER_WAIT_WHILE(scheduler,impl->state != SKC_COMPOSITION_STATE_UNSEALED);
+      }
+      return;
+    }
+
+  //
+  // wait for SEALING > SEALED transition ...
+  //
+  if (impl->state == SKC_COMPOSITION_STATE_SEALING)
+    {
+      // wait if sealing
+      SKC_SCHEDULER_WAIT_WHILE(scheduler,impl->state != SKC_COMPOSITION_STATE_SEALED);
+    }
+
+  // wait for rendering locks to be released
+  SKC_SCHEDULER_WAIT_WHILE(scheduler,impl->lock_count > 0);
+
+  //
+  // no need to visit UNSEALING state with this implementation
+  //
+
+  // acquire a new grid
+  impl->grids.sort = SKC_GRID_DEPS_ATTACH(impl->runtime->deps,
+                                          NULL,  // the composition state guards this
+                                          impl,
+                                          NULL,  // no waiting
+                                          skc_composition_sort_grid_pfn_execute,
+                                          NULL); // no dispose
+
+  // mark composition as unsealed
+  impl->state = SKC_COMPOSITION_STATE_UNSEALED;
+}
+
+//
+// can only be called on a composition that was just unsealed
+//
+static
+void
+skc_composition_reset(struct skc_composition_impl * const impl)
+{
+  // zero the atomics
+  skc_extent_phr_pdrw_zero(&impl->atomics,impl->cq,NULL);
+
+  // flush it
+  cl(Flush(impl->cq));
+
+  // release all the rasters
+  skc_composition_raster_release(impl);
+}
+
+static
+void
+skc_composition_unseal_block_reset(struct skc_composition_impl * const impl, 
+                                   skc_bool                      const block,
+                                   skc_bool                      const reset)
+{
+  skc_composition_unseal_block(impl,block);
+
+  if (reset) {
+    skc_composition_reset(impl);
+  }
+}
+
+//
+//
+//
+
+static
+void
+skc_composition_pfn_unseal(struct skc_composition_impl * const impl, skc_bool const reset)
+{
+  skc_composition_unseal_block_reset(impl,false,reset);
+}
+
+//
+// only needs to create a grid
+//
+
+static
+void
+skc_composition_place_create(struct skc_composition_impl * const impl)
+{
+  // acquire a grid
+  impl->grids.place = SKC_GRID_DEPS_ATTACH(impl->runtime->deps,
+                                           &impl->grids.place,
+                                           NULL,
+                                           NULL, // no waiting
+                                           skc_composition_place_grid_pfn_execute,
+                                           skc_composition_place_grid_pfn_dispose);
+
+  // assign happens-after relationship
+  skc_grid_happens_after_grid(impl->grids.sort,impl->grids.place);
+}
+
+
+static
+skc_err
+skc_composition_pfn_place(struct skc_composition_impl * const impl,
+                          skc_raster_t          const *       rasters,
+                          skc_layer_id          const *       layer_ids,
+                          skc_float             const *       txs,
+                          skc_float             const *       tys,
+                          skc_uint                            count)
+{
+  // block and yield if not unsealed
+  skc_composition_unseal_block(impl,true);
+
+  //
+  // validate and retain all rasters
+  //
+  skc_err err;
+
+  err = skc_runtime_handle_device_validate_retain(impl->runtime,
+                                                  SKC_TYPED_HANDLE_TYPE_IS_RASTER,
+                                                  rasters,
+                                                  count);
+  if (err) 
+    return err;
+
+  skc_runtime_handle_device_retain(impl->runtime,rasters,count);
+
+  //
+  // save the stripped handles
+  //
+  skc_raster_t * saved = impl->saved.extent.hrw;
+
+  saved             += impl->saved.count;
+  impl->saved.count += count;
+
+  for (skc_uint ii=0; ii<count; ii++) {
+    saved[ii] = SKC_TYPED_HANDLE_TO_HANDLE(*rasters++);
+  }
+
+  //
+  // - declare the place grid happens after the raster
+  // - copy place commands into ring
+  //
+  do {
+    skc_uint rem;
+
+    // find out how much room is left in then ring's snap    
+    // if the place ring is full -- let it drain
+    SKC_SCHEDULER_WAIT_WHILE(impl->runtime->scheduler,(rem = skc_extent_ring_wip_rem(&impl->cmds.ring)) == 0);
+
+    // append commands
+    skc_uint avail = min(rem,count);
+
+    // decrement count
+    count -= avail;
+
+    // launch a place kernel after copying commands?
+    skc_bool const is_wip_full = (avail == rem);
+
+    // if there is no place grid then create one
+    if (impl->grids.place == NULL)
+      {
+        skc_composition_place_create(impl);
+      }
+
+    //
+    // FIXME -- OPTIMIZATION? -- the ring_wip_index_inc() test can
+    // be avoided by splitting into at most two intervals. It should
+    // be plenty fast as is though so leave for now.
+    //
+    union skc_cmd_place * const cmds = impl->cmds.extent.hw1;
+
+    if ((txs == NULL) && (tys == NULL))
+      {
+        while (avail-- > 0)
+          {
+            skc_raster_t const raster = *saved++;
+
+            skc_grid_happens_after_handle(impl->grids.place,raster);
+
+            cmds[skc_extent_ring_wip_index_inc(&impl->cmds.ring)] =
+              (union skc_cmd_place){ raster, *layer_ids++, 0, 0 };
+          }
+      }
+    else if (txs == NULL)
+      {
+        while (avail-- > 0)
+          {
+            skc_raster_t const raster = *saved++;
+
+            skc_grid_happens_after_handle(impl->grids.place,raster);
+
+            cmds[skc_extent_ring_wip_index_inc(&impl->cmds.ring)] =
+              (union skc_cmd_place){ raster,
+                                     *layer_ids++,
+                                     0,
+                                     SKC_PLACE_CMD_TY_CONVERT(*tys++) };
+          }
+      }
+    else if (tys == NULL)
+      {
+        while (avail-- > 0)
+          {
+            skc_raster_t const raster = *saved++;
+
+            skc_grid_happens_after_handle(impl->grids.place,raster);
+
+            cmds[skc_extent_ring_wip_index_inc(&impl->cmds.ring)] =
+              (union skc_cmd_place){ raster,
+                                     *layer_ids++,
+                                     SKC_PLACE_CMD_TX_CONVERT(*txs++),
+                                     0 };
+          }
+      }
+    else
+      {
+        while (avail-- > 0)
+          {
+            skc_raster_t const raster = *saved++;
+
+            skc_grid_happens_after_handle(impl->grids.place,raster);
+
+            cmds[skc_extent_ring_wip_index_inc(&impl->cmds.ring)] =
+              (union skc_cmd_place){ raster,
+                                     *layer_ids++,
+                                     SKC_PLACE_CMD_TX_CONVERT(*txs++),
+                                     SKC_PLACE_CMD_TY_CONVERT(*tys++) };
+          }
+      }
+
+    // launch place kernel?
+    if (is_wip_full) {
+      skc_composition_snap(impl);
+    }
+  } while (count > 0);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
+
+static
+void
+skc_composition_pfn_bounds(struct skc_composition_impl * const impl, skc_int bounds[4])
+{
+  //
+  // FIXME -- not implemented yet
+  //
+  // impl bounds will be copied back after sealing
+  //
+  bounds[0] = SKC_INT_MIN;
+  bounds[1] = SKC_INT_MIN;
+  bounds[2] = SKC_INT_MAX;
+  bounds[3] = SKC_INT_MAX;
+}
+
+//
+//
+//
+
+void
+skc_composition_retain_and_lock(struct skc_composition * const composition)
+{
+  skc_composition_retain(composition);
+
+  composition->impl->lock_count += 1;
+}
+
+void
+skc_composition_unlock_and_release(struct skc_composition * const composition)
+{
+  composition->impl->lock_count -= 1;
+
+  skc_composition_pfn_release(composition->impl);
+}
+
+//
+//
+//
+
+skc_err
+skc_composition_cl_12_create(struct skc_context       * const context,
+                             struct skc_composition * * const composition)
+{
+  struct skc_runtime * const runtime = context->runtime;
+
+  // retain the context
+  // skc_context_retain(context);
+
+  // allocate impl
+  struct skc_composition_impl * const impl = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,sizeof(*impl));
+
+  // allocate composition
+  (*composition)            = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,sizeof(**composition));
+
+  (*composition)->context   = context;
+  (*composition)->impl      = impl;
+  (*composition)->ref_count = 1;
+
+  (*composition)->place     = skc_composition_pfn_place;
+  (*composition)->unseal    = skc_composition_pfn_unseal;
+  (*composition)->seal      = skc_composition_pfn_seal;
+  (*composition)->bounds    = skc_composition_pfn_bounds;
+  (*composition)->release   = skc_composition_pfn_release;
+
+  // intialize impl
+  impl->composition   = (*composition);
+  impl->runtime       = runtime;
+
+  SKC_ASSERT_STATE_INIT(impl,SKC_COMPOSITION_STATE_SEALED);
+
+  impl->lock_count    = 0;
+
+  impl->grids.sort    = NULL;
+  impl->grids.place   = NULL;
+
+  // acquire command queue for sealing/unsealing
+  impl->cq            = skc_runtime_acquire_cq_in_order(runtime);
+
+  // acquire kernels
+  impl->kernels.place   = skc_device_acquire_kernel(runtime->device, SKC_DEVICE_KERNEL_ID_PLACE);
+  impl->kernels.segment = skc_device_acquire_kernel(runtime->device, SKC_DEVICE_KERNEL_ID_SEGMENT_TTCK);
+
+  // get config
+  struct skc_config const * const config = runtime->config;
+
+  // initialize ring size with config values
+  skc_extent_ring_init(&impl->cmds.ring,
+                       config->composition.cmds.elem_count,
+                       config->composition.cmds.snap_count,
+                       sizeof(union skc_cmd_place));
+
+  skc_extent_phw1g_tdrNs_alloc(runtime,&impl->cmds.extent ,sizeof(union skc_cmd_place) * config->composition.cmds.elem_count);
+  skc_extent_phrw_alloc       (runtime,&impl->saved.extent,sizeof(skc_raster_t)        * config->composition.raster_ids.elem_count);
+  skc_extent_phr_pdrw_alloc   (runtime,&impl->atomics     ,sizeof(struct skc_place_atomics));
+
+  skc_extent_pdrw_alloc       (runtime,&impl->keys        ,sizeof(skc_ttxk_t)          * config->composition.keys.elem_count);
+  skc_extent_pdrw_alloc       (runtime,&impl->offsets     ,sizeof(skc_uint)            * (1u << SKC_TTCK_HI_BITS_YX)); // 1MB
+
+  // nothing saved
+  impl->saved.count = 0;
+
+  // unseal the composition, zero the atomics, etc.
+  skc_composition_unseal_block_reset(impl,false,true);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
diff --git a/src/compute/skc/composition_cl_12.h b/src/compute/skc/composition_cl_12.h
new file mode 100644
index 0000000..4f52090
--- /dev/null
+++ b/src/compute/skc/composition_cl_12.h
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include <CL/opencl.h>
+
+#include "composition.h"
+#include "assert_state.h"
+#include "grid.h"
+#include "extent_cl_12.h"
+#include "extent_ring.h"
+
+//
+// composition states
+//
+
+typedef enum skc_composition_state_e {
+
+  SKC_COMPOSITION_STATE_UNSEALING,
+  SKC_COMPOSITION_STATE_UNSEALED,
+  SKC_COMPOSITION_STATE_SEALING,
+  SKC_COMPOSITION_STATE_SEALED
+
+} skc_composition_state_e;
+
+//
+// IMPL
+//
+
+struct skc_composition_impl
+{  
+  struct skc_composition        * composition;
+  struct skc_runtime            * runtime;
+  
+  SKC_ASSERT_STATE_DECLARE(skc_composition_state_e);
+
+  skc_int                         lock_count; // wip renders
+
+  struct { 
+    skc_grid_t                    sort;
+    skc_grid_t                    place;
+  } grids;
+
+  cl_command_queue                cq;
+
+  struct {
+    cl_kernel                     place;
+    cl_kernel                     segment;
+  } kernels;
+
+  // raster ids must be held until the composition is reset or
+  // released and then their refcounts can be decremented
+  struct {
+    struct skc_extent_phrw        extent;
+    skc_uint                      count;
+  } saved;
+
+  struct {
+    struct skc_extent_ring        ring;   // how many slots left?
+    struct skc_extent_phw1g_tdrNs extent; // wip command extent
+  } cmds;
+
+  // composition extent length
+  struct skc_extent_phr_pdrw      atomics;
+
+  // composition ttck extent
+  struct skc_extent_pdrw          keys;
+
+  // key offsets in sealed and sorted ttck extent
+  struct skc_extent_pdrw          offsets;
+};
+
+//
+// ATOMICS
+//
+
+struct skc_place_atomics
+{
+  skc_uint keys;
+  skc_uint offsets;
+};
+
+//
+// ONLY VISIBLE WITHIN THIS RUNTIME
+//
+
+void
+skc_composition_retain_and_lock(struct skc_composition * const composition);
+
+void
+skc_composition_unlock_and_release(struct skc_composition * const composition);
+
+//
+//
+//
diff --git a/src/compute/skc/config_cl.h b/src/compute/skc/config_cl.h
new file mode 100644
index 0000000..0172857
--- /dev/null
+++ b/src/compute/skc/config_cl.h
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "runtime_cl.h"
+#include "block_pool_cl.h"
+
+//
+// FIXME -- define individual structs before defining skc_config
+//
+
+struct skc_config
+{
+  struct {
+    struct {
+      skc_uint               size;
+      skc_uint               subbufs;
+    } host;   // alignment determined by compiler
+    struct {
+      skc_uint               size;
+      skc_uint               subbufs; 
+    } device; // alignment determined by device
+  } suballocator;
+  
+  struct {
+    skc_uint                 size;
+  } scheduler;
+
+  struct {
+    skc_uint                 bytes;    // bytes per subblock -- pow2
+    skc_uint                 words;    // words per subblock -- pow2
+    // skc_uint              words_log2;
+  } subblock;
+
+  struct {
+    skc_uint                 bytes;     // bytes per block     -- pow2
+    skc_uint                 words;     // words per block     -- pow2
+    skc_uint                 subblocks; // subblocks per block -- block.bytes >= subblock.bytes
+    // skc_uint              subblocks_log2;
+  } block;
+
+  union skc_block_pool_size  block_pool;
+
+  struct {
+    skc_cq_type_e            type;
+    skc_uint                 size;
+  } cq_pool;
+
+  struct {
+    skc_uint                 size;      // a large fraction of block pool size
+    skc_uint                 width;     // determines number of launched reclamation subgroups
+    skc_uint                 recs;      // how many in-flight width-subgroup reclamation grids 
+  } handle_pool;
+
+  struct {
+    skc_uint                 width;     // tile width  in pixels
+    skc_uint                 height;    // tile height in pixels
+    skc_uint                 ratio;     // subblocks per TTPB
+  } tile;
+
+  struct {
+    struct {
+      skc_uint               count;     // # of subbufs in buffer
+    } buffer;
+
+    struct {
+      skc_uint               count;     // # of blocks/commands in subbuf
+    } subbuf;
+
+    struct {
+      size_t                 buffer;    // block.bytes * subbuf.blocks * subbuf.count
+      size_t                 subbuf;    // block.bytes * subbuf.blocks -- multiple of CL_DEVICE_MEM_BASE_ADDR_ALIGN
+    } block;
+
+    struct {
+      size_t                 buffer;    // sizeof(skc_uint) * subbuf.blocks * subbuf.count
+      size_t                 subbuf;    // sizeof(skc_uint) * subbuf.blocks -- multiple of CL_DEVICE_MEM_BASE_ADDR_ALIGN
+    } command;
+    //
+    // skc_uint              paths_lowat;
+    //
+  } paths_copy;
+
+  struct {
+    struct {
+      skc_uint               elem_count;
+      skc_uint               snap_count;
+    } path_ids;
+
+    struct {
+      skc_uint               elem_count;
+      skc_uint               snap_count;
+    } transforms;
+
+    struct {
+      skc_uint               elem_count;
+      skc_uint               snap_count;
+    } clips;
+
+    struct {
+      skc_uint               elem_count;
+      skc_uint               snap_count;
+    } fill;
+
+    struct {
+      skc_uint               elem_count;
+      skc_uint               snap_count;
+    } raster_ids;
+
+    struct {
+      skc_uint               cmds;
+    } expand;
+
+    struct {
+      skc_uint               keys;
+    } rasterize;
+  } raster_cohort;
+
+  struct {
+    struct {
+      skc_uint               elem_count;
+      skc_uint               snap_count;
+    } cmds;
+
+    struct {
+      skc_uint               elem_count;
+    } raster_ids;
+
+    struct {
+      skc_uint               elem_count;
+    } keys;
+  } composition;
+};
+
+//
+//
+//
diff --git a/src/compute/skc/context.c b/src/compute/skc/context.c
new file mode 100644
index 0000000..8aac2ef
--- /dev/null
+++ b/src/compute/skc/context.c
@@ -0,0 +1,180 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <stdlib.h>
+#include <assert.h> // FIXME -- replace with an SKC assert for non-debug builds
+
+#include "skc.h"
+#include "context.h"
+
+//
+// FIXME -- THE RUNTIME AND DEVICE WILL DYNAMICALLY LOADED
+//
+
+// temporarily
+#include "runtime_cl_12.h"
+
+//
+// CONTEXT
+//
+
+skc_err
+skc_context_create(skc_context_t       * context,
+                   char          const * target_platform_substring,
+                   char          const * target_device_substring,
+                   intptr_t              context_properties[])
+{
+  (*context) = malloc(sizeof(**context));
+
+  //
+  // FIXME -- don't directly grab a CL runtime but for now juts create
+  // the CL_12 runtime here
+  //
+  skc_err err;
+
+  err = skc_runtime_cl_12_create(*context,
+                                 target_platform_substring,
+                                 target_device_substring,
+                                 context_properties);
+  return err;
+}
+
+skc_err
+skc_context_retain(skc_context_t context)
+{
+  return SKC_ERR_SUCCESS;
+}
+
+
+skc_err
+skc_context_release(skc_context_t context)
+{
+  skc_err err = skc_runtime_cl_12_dispose(context);
+
+  free(context);
+
+  return err;
+}
+
+
+skc_err
+skc_context_reset(skc_context_t context)
+{
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
+
+bool
+skc_context_yield(skc_context_t context)
+{
+  return context->yield(context->runtime);
+}
+
+void
+skc_context_wait(skc_context_t context)
+{
+  context->wait(context->runtime);
+}
+
+//
+//
+//
+
+skc_err
+skc_path_builder_create(skc_context_t context, skc_path_builder_t * path_builder)
+{
+  return context->path_builder(context,path_builder);
+}
+
+skc_err
+skc_path_retain(skc_context_t context, skc_path_t const * paths, uint32_t count)
+{
+  return context->path_retain(context->runtime,paths,count);
+}
+
+skc_err
+skc_path_release(skc_context_t context, skc_path_t const * paths, uint32_t count)
+{
+  return context->path_release(context->runtime,paths,count);
+}
+
+skc_err
+skc_path_flush(skc_context_t context, skc_path_t const * paths, uint32_t count)
+{
+  return context->path_flush(context->runtime,paths,count);
+}
+
+//
+//
+//
+
+skc_err
+skc_raster_builder_create(skc_context_t context, skc_raster_builder_t * raster_builder)
+{
+  return context->raster_builder(context,raster_builder);
+}
+
+skc_err
+skc_raster_retain(skc_context_t context, skc_raster_t const * rasters, uint32_t count)
+{
+  return context->raster_retain(context->runtime,rasters,count);
+}
+
+skc_err
+skc_raster_release(skc_context_t context, skc_raster_t const * rasters, uint32_t count)
+{
+  return context->raster_release(context->runtime,rasters,count);
+}
+
+skc_err
+skc_raster_flush(skc_context_t context, skc_raster_t const * rasters, uint32_t count)
+{
+  return context->raster_flush(context->runtime,rasters,count);
+}
+
+//
+//
+//
+
+skc_err
+skc_styling_create(skc_context_t   context,
+                   skc_styling_t * styling,
+                   uint32_t        layers_count,
+                   uint32_t        groups_count,
+                   uint32_t        extras_count)
+{
+  return context->styling(context,
+                          styling,
+                          layers_count,
+                          groups_count,
+                          extras_count);
+}
+
+skc_err
+skc_composition_create(skc_context_t context, skc_composition_t * composition)
+{
+  return context->composition(context,composition);
+}
+
+
+skc_err
+skc_surface_create(skc_context_t context, skc_surface_t * surface)
+{
+  return context->surface(context,surface);
+}
+
+//
+//
+//
diff --git a/src/compute/skc/context.h b/src/compute/skc/context.h
new file mode 100644
index 0000000..65da835
--- /dev/null
+++ b/src/compute/skc/context.h
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "skc.h"
+#include "types.h"
+
+//
+// FIXME -- relax the const correctness
+//
+
+struct skc_context
+{
+  struct skc_runtime   * runtime;
+
+  //
+  //
+  //
+
+  bool                (* yield          )(struct skc_runtime * const runtime);
+
+  void                (* wait           )(struct skc_runtime * const runtime);
+
+  //
+  //
+  //
+
+  skc_err             (* path_builder   )(struct skc_context * const context,
+                                          skc_path_builder_t * const path_builder);
+
+  skc_err             (* path_retain    )(struct skc_runtime * const runtime,
+                                          skc_path_t   const *       paths,
+                                          uint32_t                   count);
+
+  skc_err             (* path_release   )(struct skc_runtime * const runtime,
+                                          skc_path_t   const *       paths,
+                                          uint32_t                   count);
+
+  skc_err             (* path_flush     )(struct skc_runtime * const runtime,
+                                          skc_path_t   const *       paths,
+                                          uint32_t                   count);
+  
+  //
+  //
+  //
+
+  skc_err             (* raster_builder )(struct skc_context   * const context,
+                                          skc_raster_builder_t * const raster_builder);
+
+  skc_err             (* raster_retain  )(struct skc_runtime * const runtime,
+                                          skc_raster_t const *       rasters,
+                                          uint32_t                   count);
+
+  skc_err             (* raster_release )(struct skc_runtime * const runtime,
+                                          skc_raster_t const *       rasters,
+                                          uint32_t                   count);
+
+  skc_err             (* raster_flush   )(struct skc_runtime * const runtime,
+                                          skc_raster_t const *       rasters,
+                                          uint32_t                   count);
+  //
+  //
+  //
+
+  skc_err             (* composition    )(struct skc_context * const context,
+                                          skc_composition_t  * const composition);
+
+  //
+  //
+  //
+
+  skc_err             (* styling        )(struct skc_context * const context,
+                                          skc_styling_t      * const styling,
+                                          uint32_t             const layers_count,
+                                          uint32_t             const groups_count,
+                                          uint32_t             const extras_count);
+
+  //
+  //
+  //
+
+  skc_err             (* surface        )(struct skc_context * const context,
+                                          skc_surface_t      * const surface);
+  //
+  //
+  //
+
+  skc_int                refcount;
+};
+
+//
+//
+//
diff --git a/src/compute/skc/cq_pool_cl.c b/src/compute/skc/cq_pool_cl.c
new file mode 100644
index 0000000..80cfe34
--- /dev/null
+++ b/src/compute/skc/cq_pool_cl.c
@@ -0,0 +1,152 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#ifndef NDEBUG
+#include <stdio.h>
+#endif
+
+//
+//
+//
+
+#include <string.h>
+
+//
+//
+//
+
+#include "runtime_cl_12.h"
+
+//
+// This implementation is probably excessive.
+//
+// The command queue pool could easily be replaced with simply an LRU
+// or even round-robin reuse pool.  Even a small number of aliased
+// command queues can probably enough concurrency.
+//
+
+#define SKC_CQ_POOL_EXPAND 1
+
+//
+//
+//
+
+void
+skc_cq_pool_create(struct skc_runtime * const runtime,
+                   struct skc_cq_pool * const pool,
+                   skc_uint             const type,
+                   skc_uint             const size)
+{
+  pool->type   = type;
+  pool->size   = size + 1; // an empty spot
+  pool->reads  = 0;
+  pool->writes = size;
+  pool->cq     = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,pool->size * sizeof(*pool->cq));
+
+  for (skc_uint ii=0; ii<size; ii++) {
+    pool->cq[ii] = skc_runtime_cl_create_cq(&runtime->cl,pool->type);
+  }
+  pool->cq[size] = NULL;
+}
+
+//
+//
+//
+
+void
+skc_cq_pool_dispose(struct skc_runtime * const runtime,
+                    struct skc_cq_pool *       pool)
+{
+  //
+  // FIXME -- release the command queues after waiting for the ring to
+  // be full with pool.size queues?
+  //
+  skc_runtime_host_perm_free(runtime,pool->cq);
+}
+
+//
+//
+//
+
+static 
+void
+skc_cq_pool_write(struct skc_cq_pool * const pool,
+                  cl_command_queue           cq)
+{
+  pool->cq[pool->writes++ % pool->size] = cq;
+}
+
+//
+// only expand when completely empty
+//
+
+static
+void
+skc_cq_pool_expand(struct skc_runtime * const runtime,
+                   struct skc_cq_pool * const pool,
+                   skc_uint                   expand)
+{
+#ifndef NDEBUG
+  fprintf(stderr,"Expanding the cq_pool by: %u (%u)\n",expand,pool->size);
+#endif
+
+  // free old
+  skc_runtime_host_perm_free(runtime,pool->cq);
+
+  // the ring is empty
+  pool->size  += expand;
+  pool->cq     = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,pool->size * sizeof(*pool->cq));
+  pool->reads  = 0;
+  pool->writes = expand;
+
+  for (skc_uint ii=0; ii<expand; ii++)
+    pool->cq[ii] = skc_runtime_cl_create_cq(&runtime->cl,pool->type);
+}
+
+//
+//
+//
+
+static 
+cl_command_queue
+skc_cq_pool_read(struct skc_runtime * const runtime,
+                 struct skc_cq_pool * const pool)
+{
+  // any command queues left?
+  if (pool->reads == pool->writes)
+    skc_cq_pool_expand(runtime,pool,SKC_CQ_POOL_EXPAND);
+
+  cl_command_queue cq = pool->cq[pool->reads++ % pool->size];
+
+  return cq;
+}
+
+//
+//
+//
+
+cl_command_queue
+skc_runtime_acquire_cq_in_order(struct skc_runtime * const runtime)
+{
+  return skc_cq_pool_read(runtime,&runtime->cq_pool);
+}
+
+void
+skc_runtime_release_cq_in_order(struct skc_runtime * const runtime, 
+                                cl_command_queue           cq)
+{
+  skc_cq_pool_write(&runtime->cq_pool,cq);
+}
+
+//
+//
+//
diff --git a/src/compute/skc/cq_pool_cl.h b/src/compute/skc/cq_pool_cl.h
new file mode 100644
index 0000000..0cc73a2
--- /dev/null
+++ b/src/compute/skc/cq_pool_cl.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+#include "types.h"
+
+//
+// Why we need to wrap command queue creation:
+//
+// - command queue creation is expensive
+// 
+// - the CL 1.2 function is deprecated in 2.0
+//
+
+struct skc_cq_pool
+{
+  skc_cq_type_e      type;
+  skc_uint           size;
+  skc_uint           reads;
+  skc_uint           writes;
+  cl_command_queue * cq;
+};
+
+//l
+//
+//
+
+void
+skc_cq_pool_create(struct skc_runtime * const runtime,
+                   struct skc_cq_pool * const pool,
+                   skc_uint             const type,
+                   skc_uint             const size);
+
+void
+skc_cq_pool_dispose(struct skc_runtime * const runtime,
+                    struct skc_cq_pool *       pool);
+
+//
+//
+//
diff --git a/src/compute/skc/device_cl_12.h b/src/compute/skc/device_cl_12.h
new file mode 100644
index 0000000..637b61a
--- /dev/null
+++ b/src/compute/skc/device_cl_12.h
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include <CL/opencl.h>
+
+//
+//
+//
+
+#define SKC_CL_ARG(arg) sizeof(arg),&arg
+
+//
+//
+//
+
+typedef enum skc_device_kernel_id {
+  SKC_DEVICE_KERNEL_ID_BLOCK_POOL_INIT_IDS,
+  SKC_DEVICE_KERNEL_ID_BLOCK_POOL_INIT_ATOMICS,
+
+  SKC_DEVICE_KERNEL_ID_PATHS_ALLOC,
+  SKC_DEVICE_KERNEL_ID_PATHS_COPY,
+
+  SKC_DEVICE_KERNEL_ID_FILLS_EXPAND,
+
+  SKC_DEVICE_KERNEL_ID_RASTERIZE_ALL,  
+  SKC_DEVICE_KERNEL_ID_RASTERIZE_LINES,
+  SKC_DEVICE_KERNEL_ID_RASTERIZE_QUADS,
+  SKC_DEVICE_KERNEL_ID_RASTERIZE_CUBICS,
+  SKC_DEVICE_KERNEL_ID_RASTERIZE_RAT_QUADS,
+  SKC_DEVICE_KERNEL_ID_RASTERIZE_RAT_CUBICS,
+
+  SKC_DEVICE_KERNEL_ID_SEGMENT_TTRK,
+  SKC_DEVICE_KERNEL_ID_RASTERS_ALLOC,
+
+  SKC_DEVICE_KERNEL_ID_PREFIX,
+  SKC_DEVICE_KERNEL_ID_PLACE,
+  SKC_DEVICE_KERNEL_ID_SEGMENT_TTCK,
+
+  SKC_DEVICE_KERNEL_ID_RENDER,
+
+  SKC_DEVICE_KERNEL_ID_PATHS_RECLAIM,
+  SKC_DEVICE_KERNEL_ID_RASTERS_RECLAIM,
+
+  //
+  SKC_DEVICE_KERNEL_ID_COUNT
+
+} skc_device_kernel_id;
+
+//
+//
+//
+
+void
+skc_device_create(struct skc_runtime * const runtime);
+
+
+void
+skc_device_dispose(struct skc_runtime * const runtime);
+
+
+// 
+// multi-threading/context/device requires multiple kernel instances
+//
+
+cl_kernel
+skc_device_acquire_kernel(struct skc_device  * const device, 
+                          skc_device_kernel_id const type);
+
+//
+// grid shape can vary greatly by target platform
+//
+void
+skc_device_enqueue_kernel(struct skc_device  * const device, 
+                          skc_device_kernel_id const type,
+                          cl_command_queue           cq,
+                          cl_kernel                  kernel,
+                          size_t               const work_size,                          
+                          cl_uint                    num_events_in_wait_list,
+                          cl_event const     * const event_wait_list, 
+                          cl_event           * const event);
+
+//
+//
+//
diff --git a/src/compute/skc/device_cl_12_avx2.h b/src/compute/skc/device_cl_12_avx2.h
new file mode 100644
index 0000000..e68579c
--- /dev/null
+++ b/src/compute/skc/device_cl_12_avx2.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_ONCE_DEVICE_CL_12_AVX2_H
+#define SKC_ONCE_DEVICE_CL_12_AVX2_H
+
+//
+//
+//
+
+#define SKC_DEVICE_BLOCK_WORDS_LOG2         6
+#define SKC_DEVICE_SUBBLOCK_WORDS_LOG2      4
+
+//
+//
+//
+
+#define SKC_DEVICE_BLOCK_WORDS              (1u << SKC_DEVICE_BLOCK_WORDS_LOG2)
+#define SKC_DEVICE_SUBBLOCK_WORDS           (1u << SKC_DEVICE_SUBBLOCK_WORDS_LOG2)
+
+//
+//
+//
+
+#define SKC_DEVICE_SUBBLOCKS_PER_BLOCK      (SKC_DEVICE_BLOCK_WORDS / SKC_DEVICE_SUBBLOCK_WORDS)
+
+//
+//
+//
+
+#define SKC_COPY_PATHS_THREADS_PER_BLOCK    SKC_DEVICE_SUBBLOCK_WORDS
+#define SKC_COPY_PATHS_ELEM_WORDS           1
+
+//
+//
+//
+
+#define SKC_EXPAND_FILLS_THREADS_PER_BLOCK  SKC_DEVICE_SUBBLOCK_WORDS
+#define SKC_EXPAND_FILLS_ELEM_WORDS         1
+
+//
+//
+//
+
+#define SKC_RASTERIZE_THREADS_PER_BLOCK     SKC_DEVICE_SUBBLOCK_WORDS
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/device_cl_12_gen9.c b/src/compute/skc/device_cl_12_gen9.c
new file mode 100644
index 0000000..5b4d9d2
--- /dev/null
+++ b/src/compute/skc/device_cl_12_gen9.c
@@ -0,0 +1,942 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "common/cl/assert_cl.h"
+#include "macros.h"
+
+#include "config_cl.h"
+#include "runtime_cl_12.h"
+
+#include "raster.h"
+#include "tile.h"
+
+#include "hs/cl/hs_cl_launcher.h"
+#include "hs/cl/gen9/hs_cl.h"
+
+//
+//
+//
+
+#define SKC_KERNEL_SPIRV  0
+#define SKC_KERNEL_BINARY 1
+#define SKC_KERNEL_SRC    0
+
+//
+//
+//
+
+#if   SKC_KERNEL_SPIRV
+
+#include "block_pool_init.pre.spv.inl"
+#include "paths_copy.pre.spv.inl"
+#include "fills_expand.pre.spv.inl"
+#include "rasterize.pre.spv.inl"
+#include "segment_ttrk.pre.spv.inl"
+#include "rasters_alloc.pre.spv.inl"
+#include "prefix.pre.spv.inl"
+#include "place.pre.spv.inl"
+#include "segment_ttck.pre.spv.inl"
+#include "render.pre.spv.inl"
+#include "paths_reclaim.pre.spv.inl"
+#include "rasters_reclaim.pre.spv.inl"
+
+#elif SKC_KERNEL_BINARY
+
+#include "block_pool_init.pre.bin.inl"
+#include "paths_copy.pre.bin.inl"
+#include "fills_expand.pre.bin.inl"
+#include "rasterize.pre.bin.inl"
+#include "segment_ttrk.pre.bin.inl"
+#include "rasters_alloc.pre.bin.inl"
+#include "prefix.pre.bin.inl"
+#include "place.pre.bin.inl"
+#include "segment_ttck.pre.bin.inl"
+#include "render.pre.bin.inl"
+#include "paths_reclaim.pre.bin.inl"
+#include "rasters_reclaim.pre.bin.inl"
+
+#elif SKC_KERNEL_SRC
+
+#include "block_pool_init.pre.src.inl"
+#include "paths_copy.pre.src.inl"
+#include "fills_expand.pre.src.inl"
+#include "rasterize.pre.src.inl"
+#include "segment_ttrk.pre.src.inl"
+#include "rasters_alloc.pre.src.inl"
+#include "prefix.pre.src.inl"
+#include "place.pre.src.inl"
+#include "segment_ttck.pre.src.inl"
+#include "render.pre.src.inl"
+#include "paths_reclaim.pre.src.inl"
+#include "rasters_reclaim.pre.src.inl"
+
+#endif
+
+//
+//
+//
+
+#include "device_cl_12_gen9.h"
+
+//
+// FIXME -- THE CONFIG INITIALIZATION IS ONLY HERE TEMPORARILY
+//
+
+static 
+struct skc_config const config =
+  {
+    .suballocator = {
+      .host = {
+        .size       = 1024 * 1024, // words
+        .subbufs    = 1024 // must be <= (1 << (8 * sizeof(skc_subbuf_id_t)))
+      },
+      .device = {
+        .size       = 128 * 1024 * 1024,
+        .subbufs    = 1024 // must be <= (1 << (8 * sizeof(skc_subbuf_id_t)))
+      }
+    }, 
+
+    .scheduler = {
+      .size         = 4096 // 128 // fixme -- this is just for testing -- too big
+    },
+
+    .subblock = {
+      .words        = SKC_DEVICE_SUBBLOCK_WORDS,                         // words per subblock -- pow2
+      .bytes        = SKC_DEVICE_SUBBLOCK_WORDS * sizeof(skc_uint)       // bytes per subblock -- pow2
+    },
+
+    .block = {
+      .words        = SKC_DEVICE_BLOCK_WORDS,                            // words per block     -- pow2
+      .bytes        = SKC_DEVICE_BLOCK_WORDS * sizeof(skc_uint),         // bytes per block     -- pow2
+      .subblocks    = SKC_DEVICE_BLOCK_WORDS / SKC_DEVICE_SUBBLOCK_WORDS // subblocks per block -- block.bytes >= subblock.bytes
+    },
+
+    .block_pool = {
+      .pool_size    = 524288, // blocks in pool -- 128 MB
+      .ring_pow2    = 524288, // blocks in pool rounded up pow2
+      .ring_mask    = 524288 - 1
+    },
+
+    .cq_pool     = {
+#ifndef NDEBUG
+      .type         = SKC_CQ_TYPE_IN_ORDER_PROFILING,
+#else
+      .type         = 0,
+#endif
+      .size         = 8
+    },
+
+    .handle_pool = {
+      .size         = 262144,  // large fraction of block pool size (for now, 1:2)
+      .width        = SKC_RECLAIM_ARRAY_SIZE,
+      .recs         = 256      // too many?  too few?
+    },
+
+    .tile = {
+      .width        = SKC_TILE_WIDTH,                  // tile width  in pixels
+      .height       = SKC_TILE_HEIGHT,                 // tile height in pixels
+      .ratio        = SKC_TILE_HEIGHT / SKC_TILE_WIDTH // subblocks per TTPB
+    },
+
+    .paths_copy = {
+
+      .buffer = {
+        .count      = 16   // # of subbufs in buffer
+      },
+
+      .subbuf = {
+        .count      = 1024 // # of blocks/commands in subbuf
+      },
+
+      .block = {
+        .subbuf     = SKC_DEVICE_BLOCK_WORDS * sizeof(skc_uint) * 1024,     // block.bytes * subbuf.blocks -- multiple of CL_DEVICE_MEM_BASE_ADDR_ALIGN
+        .buffer     = SKC_DEVICE_BLOCK_WORDS * sizeof(skc_uint) * 1024 * 16 // block.bytes * subbuf.blocks * subbuf.count
+      },
+
+      .command = {
+        .subbuf     = sizeof(skc_uint) * 1024,     // sizeof(skc_uint) * subbuf.blocks -- multiple of CL_DEVICE_MEM_BASE_ADDR_ALIGN
+        .buffer     = sizeof(skc_uint) * 1024 * 16 // sizeof(skc_uint) * subbuf.blocks * subbuf.count
+      },
+
+      // skc_uint paths_lowat;
+    },
+
+    .raster_cohort = {
+      .path_ids = {
+        .elem_count = 8192,
+        .snap_count = 1024 // FIXME -- THIS SHOULD BE WAYYYY BIGGER
+      },
+
+      .transforms = {
+        .elem_count = 8192,
+        .snap_count = 1024 // FIXME -- THIS SHOULD BE WAYYYY BIGGER
+      },
+
+      .clips = {
+        .elem_count = 8192,
+        .snap_count = 1024 // FIXME -- THIS SHOULD BE WAYYYY BIGGER
+      },
+
+      .fill = {
+        .elem_count = 8192,
+        .snap_count = 1024 // FIXME -- THIS SHOULD BE WAYYYY BIGGER
+      },
+
+      .raster_ids = {
+        .elem_count = 8192,
+        .snap_count = (1<<SKC_TTRK_HI_BITS_COHORT) // 256
+      },
+
+      .expand = {
+        .cmds       = 1024*128,
+      },
+
+      .rasterize = {
+        .keys       = 1024*1024
+      }
+    },
+
+    .composition = {
+      .cmds = {
+        .elem_count = 1024*16,
+        .snap_count = 1024
+      },
+      .raster_ids = {
+        .elem_count = 1024*1024
+      },
+      .keys = {
+        .elem_count = 1024*1024,
+      }
+    },
+  };
+
+//
+//
+//
+
+static char const cl_build_options_optimized[] =
+  "-cl-std=CL1.2 "
+  "-cl-single-precision-constant "
+  "-cl-denorms-are-zero "
+  "-cl-mad-enable "
+  "-cl-no-signed-zeros "
+  "-cl-fast-relaxed-math "
+  "-cl-kernel-arg-info ";
+
+static char const cl_build_options_debug[] =
+  "-cl-std=CL1.2 -cl-kernel-arg-info -g"; // -s c:/users/allanmac/home/google/skia_internal/src/compute/skc";
+
+// #define SKC_BUILD_OPTIONS cl_build_options_debug
+#define SKC_BUILD_OPTIONS    cl_build_options_optimized
+
+//
+//
+//
+
+struct skc_program_source
+{
+  char   const * name;
+  char   const * options;
+  char   const * src;
+  size_t const   srclen;
+};
+
+//
+// THIS IS A RELATIVELY COMPACT WAY OF DECLARING EACH PROGRAM SOURCE
+// AND ITS BUILD OPTIONS
+//
+
+union skc_program_sources
+{
+  struct {
+    struct skc_program_source block_pool_init;
+    struct skc_program_source paths_copy;
+    struct skc_program_source fills_expand;
+    struct skc_program_source rasterize;
+    struct skc_program_source segment_ttrk;
+    struct skc_program_source rasters_alloc;
+    struct skc_program_source prefix;
+    struct skc_program_source place;
+    struct skc_program_source segment_ttck;
+    struct skc_program_source render;
+    struct skc_program_source paths_reclaim;
+    struct skc_program_source rasters_reclaim;
+  };
+  struct skc_program_source   sources[];
+};
+
+typedef size_t * (*skc_grid_shaper)(size_t    const work_size,
+                                    cl_uint * const work_dim,
+                                    size_t  * const global_work_size,
+                                    size_t  * const local_work_size);
+struct skc_program_kernel
+{
+  char const *         name;
+  skc_grid_shaper      shaper;
+  skc_device_kernel_id id;
+};
+
+union skc_program_kernels
+{
+  struct {
+    struct skc_program_kernel block_pool_init[2];
+    struct skc_program_kernel paths_copy     [2];
+    struct skc_program_kernel fills_expand   [1];
+    struct skc_program_kernel rasterize      [6];
+    struct skc_program_kernel segment_ttrk   [1];
+    struct skc_program_kernel rasters_alloc  [1];
+    struct skc_program_kernel prefix         [1];
+    struct skc_program_kernel place          [1];
+    struct skc_program_kernel segment_ttck   [1];
+    struct skc_program_kernel render         [1];
+    struct skc_program_kernel paths_reclaim  [1];
+    struct skc_program_kernel rasters_reclaim[1];
+  };
+  struct skc_program_kernel   kernels[];
+};
+
+//
+//
+//
+
+#if     SKC_KERNEL_SPIRV  // PROGRAM IS SPIR-V
+#define SKC_KERNEL_SUFFIX(n) n ## _pre_spv
+#elif   SKC_KERNEL_BINARY // PROGRAM IS BINARY
+#define SKC_KERNEL_SUFFIX(n) n ## _pre_ir
+#elif   SKC_KERNEL_SRC    // PROGRAM IS SOURCE CODE
+#define SKC_KERNEL_SUFFIX(n) n ## _pre_cl
+#else
+#error  "SKC_KERNEL_???"
+#endif
+
+//
+//
+//
+
+#define SKC_PROGRAM_SOURCE_EXPAND(k,s,o) .k = { SKC_STRINGIFY(k), o, s, sizeof(s) }
+#define SKC_PROGRAM_SOURCE(k,o)          SKC_PROGRAM_SOURCE_EXPAND(k,SKC_KERNEL_SUFFIX(k),o)
+#define SKC_PROGRAM_KERNEL(k)            "skc_kernel_" SKC_STRINGIFY(k), SKC_CONCAT(skc_device_shaper_,k)
+
+//
+//
+//
+
+static
+size_t *
+skc_device_shaper_block_pool_init_ids(size_t    const work_size,
+                                      cl_uint * const work_dim,
+                                      size_t  * const work_global,
+                                      size_t  * const work_local)
+{
+  work_dim   [0] = 1;
+  work_global[0] = work_size;
+
+  return NULL; // let runtime figure out local work size
+}
+
+static
+size_t *
+skc_device_shaper_block_pool_init_atomics(size_t    const work_size,
+                                          cl_uint * const work_dim,
+                                          size_t  * const work_global,
+                                          size_t  * const work_local)
+{
+  work_dim   [0] = 1;
+  work_global[0] = 2;
+
+  return NULL; // let runtime figure out local work size
+}
+
+static
+size_t *
+skc_device_shaper_paths_alloc(size_t    const work_size,
+                              cl_uint * const work_dim,
+                              size_t  * const work_global,
+                              size_t  * const work_local)
+{
+  work_dim   [0] = 1;
+  work_global[0] = 1;
+
+  return NULL; // let runtime figure out local work size
+}
+
+
+static
+size_t *
+skc_device_shaper_paths_copy(size_t    const work_size,
+                             cl_uint * const work_dim,
+                             size_t  * const work_global,
+                             size_t  * const work_local)
+{
+  work_dim   [0] = 1;
+  work_global[0] = SKC_PATHS_COPY_SUBGROUP_SIZE * work_size;
+#if 0
+  work_local [0] = SKC_PATHS_COPY_SUBGROUP_SIZE;
+
+  return work_local;
+#else  
+  return NULL; // let runtime figure out local work size
+#endif
+}
+
+static
+size_t *
+skc_device_shaper_fills_expand(size_t    const work_size,
+                               cl_uint * const work_dim,
+                               size_t  * const work_global,
+                               size_t  * const work_local)
+{
+  work_dim   [0] = 1;
+  work_global[0] = SKC_FILLS_EXPAND_SUBGROUP_SIZE * work_size;
+  work_local [0] = SKC_FILLS_EXPAND_SUBGROUP_SIZE;
+
+  return work_local;
+}
+
+static
+size_t *
+skc_device_shaper_rasterize(size_t    const work_size,
+                            cl_uint * const work_dim,
+                            size_t  * const work_global,
+                            size_t  * const work_local)
+{
+  work_dim   [0] = 1;
+  work_global[0] = SKC_RASTERIZE_SUBGROUP_SIZE * work_size;
+  work_local [0] = SKC_RASTERIZE_SUBGROUP_SIZE;
+
+  return work_local;
+}
+
+static
+size_t *
+skc_device_shaper_rasterize_all(size_t    const work_size,
+                                cl_uint * const work_dim,
+                                size_t  * const work_global,
+                                size_t  * const work_local)
+{
+  return skc_device_shaper_rasterize(work_size,work_dim,work_global,work_local);
+}
+
+static
+size_t *
+skc_device_shaper_rasterize_lines(size_t    const work_size,
+                                  cl_uint * const work_dim,
+                                  size_t  * const work_global,
+                                  size_t  * const work_local)
+{
+  return skc_device_shaper_rasterize(work_size,work_dim,work_global,work_local);
+}
+
+static
+size_t *
+skc_device_shaper_rasterize_quads(size_t    const work_size,
+                                  cl_uint * const work_dim,
+                                  size_t  * const work_global,
+                                  size_t  * const work_local)
+{
+  return skc_device_shaper_rasterize(work_size,work_dim,work_global,work_local);
+}
+
+static
+size_t *
+skc_device_shaper_rasterize_cubics(size_t    const work_size,
+                                   cl_uint * const work_dim,
+                                   size_t  * const work_global,
+                                   size_t  * const work_local)
+{
+  return skc_device_shaper_rasterize(work_size,work_dim,work_global,work_local);
+}
+
+static
+size_t *
+skc_device_shaper_rasterize_rat_quads(size_t    const work_size,
+                                      cl_uint * const work_dim,
+                                      size_t  * const work_global,
+                                      size_t  * const work_local)
+{
+  return skc_device_shaper_rasterize(work_size,work_dim,work_global,work_local);
+}
+
+static
+size_t *
+skc_device_shaper_rasterize_rat_cubics(size_t    const work_size,
+                                       cl_uint * const work_dim,
+                                       size_t  * const work_global,
+                                       size_t  * const work_local)
+{
+  return skc_device_shaper_rasterize(work_size,work_dim,work_global,work_local);
+}
+
+static
+size_t *
+skc_device_shaper_rasters_alloc(size_t    const work_size,
+                                cl_uint * const work_dim,
+                                size_t  * const work_global,
+                                size_t  * const work_local)
+{
+  // round up to whole groups
+  size_t gs = SKC_ROUND_UP(work_size,SKC_RASTERS_ALLOC_GROUP_SIZE);
+
+  work_dim   [0] = 1;
+  work_global[0] = gs;
+  work_local [0] = SKC_RASTERS_ALLOC_GROUP_SIZE;
+
+  return work_local;
+}
+
+static
+size_t *
+skc_device_shaper_segment_ttrk(size_t    const work_size,
+                               cl_uint * const work_dim,
+                               size_t  * const work_global,
+                               size_t  * const work_local)
+{
+  // work_size is number of keys -- round up to a whole slab
+  size_t keys_ru = SKC_ROUND_UP(work_size,HS_LANES_PER_WARP*HS_KEYS_PER_LANE);
+
+  work_dim   [0] = 1;
+  work_global[0] = keys_ru / HS_KEYS_PER_LANE;
+  work_local [0] = HS_LANES_PER_WARP; // or just return NULL
+
+  return work_local;
+}
+
+static
+size_t *
+skc_device_shaper_segment_ttck(size_t    const work_size,
+                               cl_uint * const work_dim,
+                               size_t  * const work_global,
+                               size_t  * const work_local)
+{
+  // work_size is number of keys -- round up to a whole slab
+  size_t keys_ru = SKC_ROUND_UP(work_size,HS_LANES_PER_WARP*HS_KEYS_PER_LANE);
+
+  work_dim   [0] = 1;
+  work_global[0] = keys_ru / HS_KEYS_PER_LANE;
+  work_local [0] = HS_LANES_PER_WARP; // or just return NULL
+
+  return work_local;
+}
+
+static
+size_t *
+skc_device_shaper_prefix(size_t    const work_size,
+                         cl_uint * const work_dim,
+                         size_t  * const work_global,
+                         size_t  * const work_local)
+{
+  work_dim   [0] = 1;
+  work_global[0] = SKC_PREFIX_SUBGROUP_SIZE * work_size;
+  work_local [0] = SKC_PREFIX_SUBGROUP_SIZE;
+
+  return work_local;
+}
+
+static
+size_t *
+skc_device_shaper_place(size_t    const work_size,
+                        cl_uint * const work_dim,
+                        size_t  * const work_global,
+                        size_t  * const work_local)
+{
+  work_dim   [0] = 1;
+  work_global[0] = SKC_PLACE_SUBGROUP_SIZE * work_size;
+  work_local [0] = SKC_PLACE_SUBGROUP_SIZE;
+
+  return work_local;
+}
+
+static
+size_t *
+skc_device_shaper_render(size_t    const work_size,
+                         cl_uint * const work_dim,
+                         size_t  * const work_global,
+                         size_t  * const work_local)
+{
+  work_dim   [0] = 1;
+  work_global[0] = SKC_RENDER_SUBGROUP_SIZE * work_size;
+  work_local [0] = SKC_RENDER_SUBGROUP_SIZE;
+
+  return work_local;
+}
+
+static
+size_t *
+skc_device_shaper_paths_reclaim(size_t    const work_size,
+                                cl_uint * const work_dim,
+                                size_t  * const work_global,
+                                size_t  * const work_local)
+{
+  assert(work_size == SKC_RECLAIM_ARRAY_SIZE);
+
+  work_dim   [0] = 1;
+  work_global[0] = SKC_RECLAIM_ARRAY_SIZE * SKC_PATHS_RECLAIM_SUBGROUP_SIZE;
+
+  return NULL; // let runtime figure out local work size
+}
+
+static
+size_t *
+skc_device_shaper_rasters_reclaim(size_t    const work_size,
+                                  cl_uint * const work_dim,
+                                  size_t  * const work_global,
+                                  size_t  * const work_local)
+{
+  assert(work_size == SKC_RECLAIM_ARRAY_SIZE);
+
+  work_dim   [0] = 1;
+  work_global[0] = SKC_RECLAIM_ARRAY_SIZE * SKC_PATHS_RECLAIM_SUBGROUP_SIZE;
+
+  return NULL; // let runtime figure out local work size
+}
+
+//
+//
+//
+
+static union skc_program_sources const program_sources = {
+  SKC_PROGRAM_SOURCE(block_pool_init,SKC_BUILD_OPTIONS),
+  SKC_PROGRAM_SOURCE(paths_copy,     SKC_BUILD_OPTIONS),
+  SKC_PROGRAM_SOURCE(fills_expand,   SKC_BUILD_OPTIONS),
+  SKC_PROGRAM_SOURCE(rasterize,      SKC_BUILD_OPTIONS),
+  SKC_PROGRAM_SOURCE(segment_ttrk,   SKC_BUILD_OPTIONS),
+  SKC_PROGRAM_SOURCE(rasters_alloc,  SKC_BUILD_OPTIONS),
+  SKC_PROGRAM_SOURCE(prefix,         SKC_BUILD_OPTIONS),
+  SKC_PROGRAM_SOURCE(place,          SKC_BUILD_OPTIONS),
+  SKC_PROGRAM_SOURCE(segment_ttck,   SKC_BUILD_OPTIONS),
+  SKC_PROGRAM_SOURCE(render,         SKC_BUILD_OPTIONS),
+  SKC_PROGRAM_SOURCE(paths_reclaim,  SKC_BUILD_OPTIONS),
+  SKC_PROGRAM_SOURCE(rasters_reclaim,SKC_BUILD_OPTIONS)
+};
+
+static union skc_program_kernels const program_kernels = {
+
+  .block_pool_init = { { SKC_PROGRAM_KERNEL(block_pool_init_ids),     SKC_DEVICE_KERNEL_ID_BLOCK_POOL_INIT_IDS     },
+                       { SKC_PROGRAM_KERNEL(block_pool_init_atomics), SKC_DEVICE_KERNEL_ID_BLOCK_POOL_INIT_ATOMICS } },
+
+  .paths_copy      = { { SKC_PROGRAM_KERNEL(paths_alloc),             SKC_DEVICE_KERNEL_ID_PATHS_ALLOC             },
+                       { SKC_PROGRAM_KERNEL(paths_copy) ,             SKC_DEVICE_KERNEL_ID_PATHS_COPY              } },
+
+  .fills_expand    = { { SKC_PROGRAM_KERNEL(fills_expand),            SKC_DEVICE_KERNEL_ID_FILLS_EXPAND            } },
+
+  .rasterize       = { { SKC_PROGRAM_KERNEL(rasterize_all),           SKC_DEVICE_KERNEL_ID_RASTERIZE_ALL           },
+                       { SKC_PROGRAM_KERNEL(rasterize_lines),         SKC_DEVICE_KERNEL_ID_RASTERIZE_LINES         },
+                       { SKC_PROGRAM_KERNEL(rasterize_quads),         SKC_DEVICE_KERNEL_ID_RASTERIZE_QUADS         },
+                       { SKC_PROGRAM_KERNEL(rasterize_cubics),        SKC_DEVICE_KERNEL_ID_RASTERIZE_CUBICS        },
+                       { SKC_PROGRAM_KERNEL(rasterize_rat_quads),     SKC_DEVICE_KERNEL_ID_RASTERIZE_RAT_QUADS     },
+                       { SKC_PROGRAM_KERNEL(rasterize_rat_cubics),    SKC_DEVICE_KERNEL_ID_RASTERIZE_RAT_CUBICS    } },
+
+  .segment_ttrk    = { { SKC_PROGRAM_KERNEL(segment_ttrk),            SKC_DEVICE_KERNEL_ID_SEGMENT_TTRK            } },
+
+  .rasters_alloc   = { { SKC_PROGRAM_KERNEL(rasters_alloc),           SKC_DEVICE_KERNEL_ID_RASTERS_ALLOC           } },
+
+  .prefix          = { { SKC_PROGRAM_KERNEL(prefix),                  SKC_DEVICE_KERNEL_ID_PREFIX                  } },
+
+  .place           = { { SKC_PROGRAM_KERNEL(place),                   SKC_DEVICE_KERNEL_ID_PLACE                   } },
+
+  .segment_ttck    = { { SKC_PROGRAM_KERNEL(segment_ttck) ,           SKC_DEVICE_KERNEL_ID_SEGMENT_TTCK            } },
+
+  .render          = { { SKC_PROGRAM_KERNEL(render),                  SKC_DEVICE_KERNEL_ID_RENDER                  } },
+
+  .paths_reclaim   = { { SKC_PROGRAM_KERNEL(paths_reclaim),           SKC_DEVICE_KERNEL_ID_PATHS_RECLAIM           } },
+
+  .rasters_reclaim = { { SKC_PROGRAM_KERNEL(rasters_reclaim),         SKC_DEVICE_KERNEL_ID_RASTERS_RECLAIM         } }
+};
+
+//
+//
+//
+
+struct skc_device
+{
+  //
+  // FIXME -- an OpenCL 2.1+ device would clone these kernels in a
+  // multithreaded system.  
+  //
+  // Not having the ability to clone kernels (yet set their sticky
+  // args) was an oversight in previous versions of OpenCL.
+  //
+  // For now, we can probably get away with just a single kernel
+  // instance as long as args are set and the kernel is launched
+  // before having its arguments stomped on.
+  //
+  cl_kernel kernels [SKC_DEVICE_KERNEL_ID_COUNT];
+  size_t    reqd_szs[SKC_DEVICE_KERNEL_ID_COUNT][3];
+};
+
+//
+// CREATE KERNELS
+//
+
+static
+void
+skc_device_create_kernels(struct skc_runtime              * const runtime,
+                          struct skc_program_kernel const * const kernels,
+                          skc_uint                          const kernel_count,
+                          cl_program                              program)
+{
+  for (skc_uint ii=0; ii<kernel_count; ii++)
+    {
+      cl_int cl_err;
+
+      char     const * name = kernels[ii].name;
+      skc_uint const   id   = kernels[ii].id;
+
+      fprintf(stderr,"\t\"%s\"\n",name);
+
+      // create the kernel
+      runtime->device->kernels[id] = clCreateKernel(program,name,&cl_err); cl_ok(cl_err);
+
+      //
+      // release program now
+      //
+      // FIXME -- if/when we multithread then we need to clone kernels
+      // (>=2.1) or keep programs around (<=2.0)
+      //
+
+      // get workgroup size
+      cl(GetKernelWorkGroupInfo(runtime->device->kernels[id],
+                                runtime->cl.device_id,
+                                CL_KERNEL_COMPILE_WORK_GROUP_SIZE,
+                                sizeof(runtime->device->reqd_szs[0]),
+                                runtime->device->reqd_szs[id],
+                                NULL));
+
+      //
+      // GEN9+ PROBING
+      //
+#define SKC_TARGET_GEN9
+#ifdef  SKC_TARGET_GEN9
+
+#define CL_DEVICE_SUB_GROUP_SIZES_INTEL         0x4108
+#define CL_KERNEL_SPILL_MEM_SIZE_INTEL          0x4109
+#define CL_KERNEL_COMPILE_SUB_GROUP_SIZE_INTEL  0x410A
+
+      cl_ulong spill_mem_size;
+
+      cl(GetKernelWorkGroupInfo(runtime->device->kernels[id],
+                                runtime->cl.device_id,
+                                CL_KERNEL_SPILL_MEM_SIZE_INTEL,
+                                sizeof(spill_mem_size),
+                                &spill_mem_size,
+                                NULL));
+
+      fprintf(stderr,"\t\tspill mem size: %lu bytes\n",
+              (unsigned long)spill_mem_size);
+
+      cl_ulong local_mem_size;
+
+      cl(GetKernelWorkGroupInfo(runtime->device->kernels[id],
+                                runtime->cl.device_id,
+                                CL_KERNEL_LOCAL_MEM_SIZE,
+                                sizeof(local_mem_size),
+                                &local_mem_size,
+                                NULL));
+
+      fprintf(stderr,"\t\tlocal mem size: %lu bytes\n",
+              (unsigned long)local_mem_size);
+#endif
+    }
+}
+
+static
+void
+skc_device_build_program(struct skc_runtime              * const runtime,
+                         struct skc_program_source const * const source,
+                         struct skc_program_kernel const * const kernels,
+                         skc_uint                          const kernel_count)
+{
+  cl_program program;
+
+  fprintf(stderr,"%-20s: ",source->name);
+
+  cl_int cl_err;
+
+#if   SKC_KERNEL_SPIRV // PROGRAM IS SPIR-V
+
+  fprintf(stderr,"Creating (SPIR-V) ... ");
+
+  program = clCreateProgramWithIL(runtime->cl.context,
+                                  source->src,
+                                  source->srclen,
+                                  &cl_err);
+
+#elif SKC_KERNEL_BINARY // PROGRAM IS BINARY
+
+  fprintf(stderr,"Creating (Binary) ... ");
+
+  cl_int status;
+  program = clCreateProgramWithBinary(runtime->cl.context,
+                                      1,
+                                      &runtime->cl.device_id,
+                                      &source->srclen,
+                                      (unsigned char const *[]){ source->src },
+                                      &status,
+                                      &cl_err);
+
+#elif SKC_KERNEL_SRC // PROGRAM IS SOURCE CODE
+
+  fprintf(stderr,"Creating (Source) ... ");
+
+  program = clCreateProgramWithSource(runtime->cl.context,
+                                      1,
+                                      (char const *[]){ source->src },
+                                      &source->srclen,
+                                      &cl_err);
+#else
+
+#error "SKC_KERNEL_???"
+
+#endif
+
+  cl_ok(cl_err);
+
+  fprintf(stderr,"Building ... ");
+
+  // build the program
+  cl(BuildProgram(program,
+                  1,
+                  &runtime->cl.device_id,
+                  source->options, // build options are ignored by binary
+                  NULL,
+                  NULL));
+
+  fprintf(stderr,"Done\n");
+
+  // build the kernels
+  skc_device_create_kernels(runtime,kernels,kernel_count,program);
+
+  // we're done with program for now
+  // can always recover it from a kernel instance
+  cl(ReleaseProgram(program));
+}
+
+//
+// RELEASE KERNELS
+//
+
+static
+void
+skc_device_release_kernels(struct skc_device * const device)
+{
+  for (skc_int ii=0; ii<SKC_COUNT_OF(device->kernels); ii++)
+    cl(ReleaseKernel(device->kernels[ii]));
+}
+
+
+
+cl_kernel
+skc_device_acquire_kernel(struct skc_device  * const device,
+                          skc_device_kernel_id const type)
+{
+  cl_kernel kernel = device->kernels[type];
+
+  cl(RetainKernel(kernel));
+
+  return kernel;
+}
+
+//
+// INITIALIZE KERNEL ARGS
+//
+// FIXME
+//
+// pre-assign any kernel arguments that are never going to change --
+// for example, the block pool
+//
+
+//
+//
+//
+
+#define SKC_DEVICE_BUILD_PROGRAM(p) \
+  skc_device_build_program(runtime,&program_sources.p,program_kernels.p,SKC_COUNT_OF(program_kernels.p))
+
+
+void
+skc_device_create(struct skc_runtime * const runtime)
+{
+  struct skc_device * const device = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,sizeof(*device));
+
+  // hang device off of runtime
+  runtime->device = device;
+
+  // hang config off of runtime
+  runtime->config = &config;
+
+  // create kernels
+  SKC_DEVICE_BUILD_PROGRAM(block_pool_init);
+  SKC_DEVICE_BUILD_PROGRAM(paths_copy);
+  SKC_DEVICE_BUILD_PROGRAM(fills_expand);
+  SKC_DEVICE_BUILD_PROGRAM(rasterize);
+  SKC_DEVICE_BUILD_PROGRAM(segment_ttrk);
+  SKC_DEVICE_BUILD_PROGRAM(rasters_alloc);
+  SKC_DEVICE_BUILD_PROGRAM(prefix);
+  SKC_DEVICE_BUILD_PROGRAM(place);
+  SKC_DEVICE_BUILD_PROGRAM(segment_ttck);
+  SKC_DEVICE_BUILD_PROGRAM(render);
+  SKC_DEVICE_BUILD_PROGRAM(paths_reclaim);
+  SKC_DEVICE_BUILD_PROGRAM(rasters_reclaim);
+
+  // create HotSort instance -- FIXME -- how this occurs needs to be cleaned up
+  hs_create(runtime->cl.context,runtime->cl.device_id,NULL);
+}
+
+void
+skc_device_dispose(struct skc_runtime * const runtime)
+{
+  //
+  // FIXME -- dispose of programs, kernels, etc.
+  //
+
+  skc_runtime_host_perm_free(runtime,runtime->device);
+}
+
+//
+// FIXME -- just pass the device type
+//
+
+void
+skc_device_enqueue_kernel(struct skc_device  * const device,
+                          skc_device_kernel_id const type,
+                          cl_command_queue           cq,
+                          cl_kernel                  kernel,
+                          size_t               const work_size,
+                          cl_uint                    num_events_in_wait_list,
+                          cl_event const     * const event_wait_list,
+                          cl_event           * const event)
+{
+  if (work_size == 0)
+    return;
+
+  cl_uint  work_dim   [1];
+  size_t   work_global[3];
+  size_t   work_local [3];
+
+  size_t * work_local_ptr = program_kernels.kernels[type].shaper(work_size,
+                                                                 work_dim,
+                                                                 work_global,
+                                                                 work_local);
+  cl(EnqueueNDRangeKernel(cq,
+                          kernel,// device->kernels[type],
+                          work_dim[0],
+                          NULL,
+                          work_global,
+                          work_local_ptr,
+                          num_events_in_wait_list,
+                          event_wait_list,
+                          event));
+}
+
+//
+//
+//
diff --git a/src/compute/skc/device_cl_12_gen9.h b/src/compute/skc/device_cl_12_gen9.h
new file mode 100644
index 0000000..dd69a84
--- /dev/null
+++ b/src/compute/skc/device_cl_12_gen9.h
@@ -0,0 +1,335 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_ONCE_DEVICE_CL_12_GEN9_H
+#define SKC_ONCE_DEVICE_CL_12_GEN9_H
+
+//
+// FIXME -- THERE ARE SOME DUPLICATED TYPEDEFS IN THIS FILE
+//
+// THESE WILL GO AWAY AS THE TYPING GET POLISHED AND SIMPLIFIED
+//
+
+#include "block.h"
+
+//
+// HOW TO SELECT A SUBBLOCK AND BLOCK SIZES:
+//
+// 1) The subblock size should match the natural SIMT/SIMD width of
+//    the target device.
+//
+// 2) Either a square or rectangular (1:2) tile size is chosen.  The
+//    tile size is usually determined by the amount of SMEM available
+//    to a render kernel subgroup and desired multiprocessor
+//    occupancy.
+//
+// 3) If the tile is rectangular then the block size must be at least
+//    twice the size of the subblock size.
+//
+// 4) A large block size can decrease allocation overhead but there
+//    will be diminishing returns as the block size increases.
+//
+
+#define SKC_DEVICE_BLOCK_WORDS_LOG2             6  // CHANGE "WORDS" TO "SIZE" ?
+#define SKC_DEVICE_SUBBLOCK_WORDS_LOG2          3
+
+#define SKC_TILE_WIDTH_LOG2                     SKC_DEVICE_SUBBLOCK_WORDS_LOG2
+#define SKC_TILE_HEIGHT_LOG2                    (SKC_DEVICE_SUBBLOCK_WORDS_LOG2 + 1)
+
+/////////////////////////////////////////////////////////////////
+//
+// BLOCK POOL INIT
+//
+
+#define SKC_BP_INIT_IDS_KERNEL_ATTRIBS
+#define SKC_BP_INIT_ATOMICS_KERNEL_ATTRIBS      __attribute__((reqd_work_group_size(2,1,1)))
+
+/////////////////////////////////////////////////////////////////
+//
+// PATHS ALLOC
+//
+
+#define SKC_PATHS_ALLOC_KERNEL_ATTRIBS          __attribute__((reqd_work_group_size(1,1,1)))
+
+/////////////////////////////////////////////////////////////////
+//
+// PATHS COPY
+//
+
+#define SKC_PATHS_COPY_SUBGROUP_SIZE_LOG2       SKC_DEVICE_SUBBLOCK_WORDS_LOG2 // FIXME -- SUBGROUP OR THREADS PER BLOCK?
+#define SKC_PATHS_COPY_ELEM_WORDS               1
+#define SKC_PATHS_COPY_ELEM_EXPAND()            SKC_EXPAND_1()
+
+#define SKC_PATHS_COPY_KERNEL_ATTRIBS           __attribute__((intel_reqd_sub_group_size(SKC_PATHS_COPY_SUBGROUP_SIZE)))
+
+#define SKC_IS_NOT_PATH_HEAD(sg,I)              ((sg) + get_sub_group_local_id() >= SKC_PATH_HEAD_WORDS)
+
+typedef skc_uint  skc_paths_copy_elem;
+typedef skc_uint  skc_pb_idx_v;
+
+/////////////////////////////////////////////////////////////////
+//
+// FILLS EXPAND
+//
+
+#define SKC_FILLS_EXPAND_SUBGROUP_SIZE_LOG2     SKC_DEVICE_SUBBLOCK_WORDS_LOG2
+#define SKC_FILLS_EXPAND_ELEM_WORDS             1
+
+#define SKC_FILLS_EXPAND_KERNEL_ATTRIBS         __attribute__((intel_reqd_sub_group_size(SKC_FILLS_EXPAND_SUBGROUP_SIZE)))
+
+/////////////////////////////////////////////////////////////////
+//
+// RASTER ALLOC
+//
+// NOTE -- Intel subgroup shuffles aren't supported in SIMD32 which is
+// why use of the subgroup broadcast produces a compiler error. So a
+// subgroup of size 16 is this widest we can require.
+//
+
+#define SKC_RASTERS_ALLOC_GROUP_SIZE            16
+
+#if (SKC_RASTERS_ALLOC_GROUP_SIZE <= 16)
+
+#define SKC_RASTERS_ALLOC_KERNEL_ATTRIBS        __attribute__((intel_reqd_sub_group_size(SKC_RASTERS_ALLOC_GROUP_SIZE)))
+#define SKC_RASTERS_ALLOC_LOCAL_ID()            get_sub_group_local_id()
+#define SKC_RASTERS_ALLOC_INCLUSIVE_ADD(v)      sub_group_scan_inclusive_add(v)
+#define SKC_RASTERS_ALLOC_BROADCAST(v,i)        sub_group_broadcast(v,i)
+
+#else
+
+#define SKC_RASTERS_ALLOC_KERNEL_ATTRIBS        __attribute__((reqd_work_group_size(SKC_RASTERS_ALLOC_GROUP_SIZE,1,1)))
+#define SKC_RASTERS_ALLOC_LOCAL_ID()            get_local_id(0)
+#define SKC_RASTERS_ALLOC_INCLUSIVE_ADD(v)      work_group_scan_inclusive_add(v)
+#define SKC_RASTERS_ALLOC_BROADCAST(v,i)        work_group_broadcast(v,i)
+
+#endif
+
+/////////////////////////////////////////////////////////////////
+//
+// RASTERIZE
+//
+
+#define SKC_RASTERIZE_SUBGROUP_SIZE             SKC_DEVICE_SUBBLOCK_WORDS
+#define SKC_RASTERIZE_VECTOR_SIZE_LOG2          0
+#define SKC_RASTERIZE_WORKGROUP_SUBGROUPS       1
+
+#define SKC_RASTERIZE_KERNEL_ATTRIBS                                    \
+  __attribute__((intel_reqd_sub_group_size(SKC_RASTERIZE_SUBGROUP_SIZE))) \
+  __attribute__((reqd_work_group_size(SKC_RASTERIZE_SUBGROUP_SIZE * SKC_RASTERIZE_WORKGROUP_SUBGROUPS, 1, 1)))
+
+#define SKC_RASTERIZE_FLOAT                     float
+#define SKC_RASTERIZE_UINT                      uint
+#define SKC_RASTERIZE_INT                       int
+#define SKC_RASTERIZE_PREDICATE                 bool
+#define SKC_RASTERIZE_POOL                      uint
+
+#define SKC_RASTERIZE_TILE_HASH_X_BITS          1
+#define SKC_RASTERIZE_TILE_HASH_Y_BITS          2
+
+typedef skc_block_id_t skc_block_id_v_t;
+typedef skc_uint2      skc_ttsk_v_t;
+typedef skc_uint2      skc_ttsk_s_t;
+
+// SKC_STATIC_ASSERT(SKC_RASTERIZE_POOL_SIZE > SKC_RASTERIZE_SUBGROUP_SIZE);
+
+/////////////////////////////////////////////////////////////////
+//
+// PREFIX
+//
+
+#define SKC_PREFIX_SUBGROUP_SIZE               8 // for now this had better be SKC_DEVICE_SUBBLOCK_WORDS
+#define SKC_PREFIX_WORKGROUP_SUBGROUPS         1
+
+#define SKC_PREFIX_KERNEL_ATTRIBS                                       \
+  __attribute__((intel_reqd_sub_group_size(SKC_PREFIX_SUBGROUP_SIZE)))  \
+  __attribute__((reqd_work_group_size(SKC_PREFIX_SUBGROUP_SIZE * SKC_PREFIX_WORKGROUP_SUBGROUPS, 1, 1)))
+
+#define SKC_PREFIX_TTP_V                       skc_uint2
+#define SKC_PREFIX_TTS_V_BITFIELD              skc_int
+
+#define SKC_PREFIX_TTS_VECTOR_INT_EXPAND       SKC_EXPAND_1
+
+#define SKC_PREFIX_SMEM_ZERO                   ulong
+#define SKC_PREFIX_SMEM_ZERO_WIDTH             (sizeof(SKC_PREFIX_SMEM_ZERO) / sizeof(skc_ttp_t))
+#define SKC_PREFIX_SMEM_COUNT_BLOCK_ID         8
+
+#define SKC_PREFIX_BLOCK_ID_V_SIZE             SKC_PREFIX_SUBGROUP_SIZE
+
+#define SKC_PREFIX_TTXK_V_SIZE                 SKC_PREFIX_SUBGROUP_SIZE
+#define SKC_PREFIX_TTXK_V_MASK                 (SKC_PREFIX_TTXK_V_SIZE - 1)
+
+typedef skc_uint       skc_bp_elem_t;
+
+typedef skc_uint2      skc_ttrk_e_t;
+typedef skc_uint2      skc_ttsk_v_t;
+typedef skc_uint2      skc_ttsk_s_t;
+typedef skc_uint2      skc_ttpk_s_t;
+typedef skc_uint2      skc_ttxk_v_t;
+
+typedef skc_int        skc_tts_v_t;
+
+typedef skc_int        skc_ttp_t;
+
+typedef skc_uint       skc_raster_yx_s;
+
+typedef skc_block_id_t skc_block_id_v_t;
+typedef skc_block_id_t skc_block_id_s_t;
+
+/////////////////////////////////////////////////////////////////
+//
+// PLACE
+//
+
+#define SKC_PLACE_SUBGROUP_SIZE                16
+#define SKC_PLACE_WORKGROUP_SUBGROUPS          1
+
+#define SKC_PLACE_KERNEL_ATTRIBS                                       \
+  __attribute__((intel_reqd_sub_group_size(SKC_PLACE_SUBGROUP_SIZE)))  \
+  __attribute__((reqd_work_group_size(SKC_PLACE_SUBGROUP_SIZE * SKC_PLACE_WORKGROUP_SUBGROUPS, 1, 1)))
+
+typedef skc_uint  skc_bp_elem_t;
+
+typedef skc_uint  skc_ttsk_lo_t;
+typedef skc_uint  skc_ttsk_hi_t;
+
+typedef skc_uint  skc_ttpk_lo_t;
+typedef skc_uint  skc_ttpk_hi_t;
+
+typedef skc_uint  skc_ttxk_lo_t;
+typedef skc_uint  skc_ttxk_hi_t;
+
+typedef skc_uint2 skc_ttck_t;
+
+typedef skc_bool  skc_pred_v_t;
+typedef skc_int   skc_int_v_t;
+
+/////////////////////////////////////////////////////////////////
+//
+// RENDER
+//
+
+#define SKC_ARCH_GEN9
+
+#if defined(__OPENCL_C_VERSION__)
+#pragma OPENCL EXTENSION cl_khr_fp16 : enable
+#endif
+
+#define SKC_RENDER_SUBGROUP_SIZE               8
+#define SKC_RENDER_WORKGROUP_SUBGROUPS         1
+
+#define SKC_RENDER_KERNEL_ATTRIBS                                       \
+  __attribute__((intel_reqd_sub_group_size(SKC_RENDER_SUBGROUP_SIZE)))  \
+  __attribute__((reqd_work_group_size(SKC_RENDER_SUBGROUP_SIZE * SKC_RENDER_WORKGROUP_SUBGROUPS, 1, 1)))
+
+#define SKC_RENDER_SCANLINE_VECTOR_SIZE        2
+
+#define SKC_RENDER_REGS_COLOR_R                2
+#define SKC_RENDER_REGS_COVER_R                3
+
+#define SKC_RENDER_TTSB_EXPAND()               SKC_EXPAND_1()
+
+#define SKC_RENDER_TTS_V                       skc_int
+#define SKC_RENDER_TTS_V_BITFIELD              skc_int
+
+#define SKC_RENDER_TTP_V                       skc_int2
+#define SKC_RENDER_AREA_V                      skc_int2
+
+#define SKC_RENDER_TILE_COLOR_PAIR             half2
+#define SKC_RENDER_TILE_COLOR_PAIR_LOAD(x,v)   vload2(x,v)
+
+#define SKC_RENDER_SURFACE_COLOR               half4
+#define SKC_RENDER_SURFACE_WRITE               write_imageh
+
+// #define SKC_RENDER_TTXB_VECTOR_INT             int2
+// #define SKC_RENDER_TTXB_VECTOR_UINT            uint2
+
+#define SKC_RENDER_WIDE_AA                     ulong // SLM = 64 bytes/clock
+
+#define SKC_RENDER_TILE_COLOR                  half2
+#define SKC_RENDER_TILE_COVER                  half2
+
+#define SKC_RENDER_ACC_COVER_INT               int2
+#define SKC_RENDER_ACC_COVER_UINT              uint2
+
+#define SKC_RENDER_GRADIENT_FLOAT              float2
+#define SKC_RENDER_GRADIENT_INT                int2
+#define SKC_RENDER_GRADIENT_STOP               int2
+#define SKC_RENDER_GRADIENT_FRAC               half2
+#define SKC_RENDER_GRADIENT_COLOR_STOP         half
+
+#define SKC_RENDER_SURFACE_U8_RGBA             uint2
+
+#define SKC_RENDER_TILE_COLOR_VECTOR           uint16
+#define SKC_RENDER_TILE_COLOR_VECTOR_COMPONENT uint
+#define SKC_RENDER_TILE_COLOR_VECTOR_COUNT     ((sizeof(SKC_RENDER_TILE_COLOR) * 4 * SKC_TILE_WIDTH) / sizeof(SKC_RENDER_TILE_COLOR_VECTOR))
+
+/////////////////////////////////////////////////////////////////
+//
+// PATHS & RASTERS RECLAIM
+//
+// FIXME -- investigate enabling the stride option for a smaller grid
+// that iterates over a fixed number of threads.  Since reclamation is
+// a low-priority task, it's probably reasonable to trade longer
+// reclamation times for lower occupancy of the device because it
+// might delay the fastpath of the pipeline.
+//
+
+#define SKC_RECLAIM_ARRAY_SIZE                  (7 * 8 / 2) // 8 EUs with 7 hardware threads divided by 2 is half a sub-slice
+
+/////////////////////////////////////////////////////////////////
+//
+// PATHS RECLAIM
+//
+
+#define SKC_PATHS_RECLAIM_SUBGROUP_SIZE_LOG2    SKC_DEVICE_SUBBLOCK_WORDS_LOG2 // FIXME -- SUBGROUP OR THREADS PER BLOCK?
+#define SKC_PATHS_RECLAIM_LOCAL_ELEMS           1
+#define SKC_PATHS_RECLAIM_KERNEL_ATTRIBS        __attribute__((intel_reqd_sub_group_size(SKC_PATHS_RECLAIM_SUBGROUP_SIZE)))
+
+/////////////////////////////////////////////////////////////////
+//
+// RASTERS RECLAIM
+//
+
+#define SKC_RASTERS_RECLAIM_SUBGROUP_SIZE_LOG2  SKC_DEVICE_SUBBLOCK_WORDS_LOG2 // FIXME -- SUBGROUP OR THREADS PER BLOCK?
+#define SKC_RASTERS_RECLAIM_LOCAL_ELEMS         1
+#define SKC_RASTERS_RECLAIM_KERNEL_ATTRIBS      __attribute__((intel_reqd_sub_group_size(SKC_RASTERS_RECLAIM_SUBGROUP_SIZE)))
+
+//
+// COMMON -- FIXME -- HOIST THESE ELSEWHERE
+//
+
+#define SKC_DEVICE_BLOCK_WORDS                 (1u << SKC_DEVICE_BLOCK_WORDS_LOG2)
+#define SKC_DEVICE_SUBBLOCK_WORDS              (1u << SKC_DEVICE_SUBBLOCK_WORDS_LOG2)
+
+#define SKC_DEVICE_BLOCK_DWORDS                (SKC_DEVICE_BLOCK_WORDS / 2)
+
+#define SKC_DEVICE_BLOCK_WORDS_MASK            SKC_BITS_TO_MASK(SKC_DEVICE_BLOCK_WORDS_LOG2)
+#define SKC_DEVICE_SUBBLOCKS_PER_BLOCK_MASK    SKC_BITS_TO_MASK(SKC_DEVICE_BLOCK_WORDS_LOG2 - SKC_DEVICE_SUBBLOCK_WORDS_LOG2)
+
+#define SKC_DEVICE_SUBBLOCKS_PER_BLOCK         (SKC_DEVICE_BLOCK_WORDS / SKC_DEVICE_SUBBLOCK_WORDS)
+
+#define SKC_TILE_RATIO                         (SKC_TILE_HEIGHT / SKC_TILE_WIDTH)
+
+//
+//
+//
+
+#define SKC_PATHS_COPY_SUBGROUP_SIZE           (1 << SKC_PATHS_COPY_SUBGROUP_SIZE_LOG2)
+#define SKC_PATHS_RECLAIM_SUBGROUP_SIZE        (1 << SKC_PATHS_RECLAIM_SUBGROUP_SIZE_LOG2)
+#define SKC_RASTERS_RECLAIM_SUBGROUP_SIZE      (1 << SKC_RASTERS_RECLAIM_SUBGROUP_SIZE_LOG2)
+#define SKC_FILLS_EXPAND_SUBGROUP_SIZE         (1 << SKC_FILLS_EXPAND_SUBGROUP_SIZE_LOG2)
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/export_cl_12.h b/src/compute/skc/export_cl_12.h
new file mode 100644
index 0000000..e577282
--- /dev/null
+++ b/src/compute/skc/export_cl_12.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "skc.h"
+
+//
+// 
+//
+
+skc_err
+skc_path_builder_cl_12_create(struct skc_context        * const context,
+                              struct skc_path_builder * * const path_builder);
+
+//
+// 
+//
+
+skc_err
+skc_raster_builder_cl_12_create(struct skc_context          * const context,
+                                struct skc_raster_builder * * const raster_builder);
+
+//
+//
+//
+
+skc_err
+skc_composition_cl_12_create(struct skc_context       * const context,
+                             struct skc_composition * * const composition);
+
+//
+//
+//
+
+skc_err
+skc_styling_cl_12_create(struct skc_context   * const context,
+                         struct skc_styling * * const styling,
+                         uint32_t               const layers_count,
+                         uint32_t               const groups_count,
+                         uint32_t               const extras_count);
+
+//
+//
+//
+
+skc_err
+skc_surface_cl_12_create(struct skc_context   * const context,
+                         struct skc_surface * * const surface);
+
+//
+//
+//
+
diff --git a/src/compute/skc/extent_cl_12.c b/src/compute/skc/extent_cl_12.c
new file mode 100644
index 0000000..73676d8
--- /dev/null
+++ b/src/compute/skc/extent_cl_12.c
@@ -0,0 +1,459 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <stdlib.h>
+
+#include "common/cl/assert_cl.h"
+#include "extent_cl_12.h"
+#include "runtime_cl_12.h"
+
+//
+// DURABLE R/W HOST EXTENT -- STANDARD CACHED MEMORY
+//
+
+void
+skc_extent_phrw_alloc(struct skc_runtime     * const runtime,
+                      struct skc_extent_phrw * const extent,
+                      size_t                   const size)
+{
+  extent->hrw = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,size);
+}
+
+void
+skc_extent_phrw_free(struct skc_runtime     * const runtime,
+                     struct skc_extent_phrw * const extent)
+{
+  skc_runtime_host_perm_free(runtime,extent->hrw);
+}
+
+//
+// DURABLE R/W DEVICE EXTENT -- ALLOCATED FROM DEVICE HEAP
+//
+
+void
+skc_extent_pdrw_alloc(struct skc_runtime     * const runtime,
+                      struct skc_extent_pdrw * const extent,
+                      size_t                   const size)
+{
+  extent->drw = skc_runtime_device_perm_alloc(runtime,
+                                              CL_MEM_READ_WRITE | CL_MEM_HOST_NO_ACCESS,
+                                              size);
+}
+
+void
+skc_extent_pdrw_free(struct skc_runtime     * const runtime,
+                     struct skc_extent_pdrw * const extent)
+{
+  skc_runtime_device_perm_free(runtime,extent->drw);
+}
+
+//
+// EPHEMERAL DEVICE R/W EXTENT -- ALLOCATED QUICKLY FROM A MANAGED RING
+//
+
+void
+skc_extent_tdrw_alloc(struct skc_runtime     * const runtime,
+                      struct skc_extent_tdrw * const extent,
+                      size_t                   const size)
+{
+  extent->size = size;
+  extent->drw  = skc_runtime_device_temp_alloc(runtime,
+                                               CL_MEM_READ_WRITE | CL_MEM_HOST_NO_ACCESS,
+                                               size,&extent->id,NULL);
+}
+
+void
+skc_extent_tdrw_free(struct skc_runtime     * const runtime,
+                     struct skc_extent_tdrw * const extent)
+{
+  skc_runtime_device_temp_free(runtime,extent->drw,extent->id);
+}
+
+void
+skc_extent_tdrw_zero(struct skc_extent_tdrw * const extent,
+                     cl_command_queue         const cq,
+                     cl_event               * const event)
+{
+  if (extent->size == 0)
+    return;
+
+  skc_uint const zero = 0;
+
+  cl(EnqueueFillBuffer(cq,
+                       extent->drw,
+                       &zero,
+                       sizeof(zero),
+                       0,
+                       extent->size,
+                       0,NULL,event));
+}
+
+//
+// DURABLE SMALL EXTENTS BACKING ATOMICS
+//
+
+void
+skc_extent_phr_pdrw_alloc(struct skc_runtime         * const runtime,
+                          struct skc_extent_phr_pdrw * const extent,
+                          size_t                       const size)
+{
+  extent->size = size;
+  extent->hr   = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_ONLY,size);
+  extent->drw  = skc_runtime_device_perm_alloc(runtime,CL_MEM_READ_WRITE,size);
+}
+
+void
+skc_extent_phr_pdrw_free(struct skc_runtime         * const runtime,
+                         struct skc_extent_phr_pdrw * const extent)
+{
+  skc_runtime_host_perm_free(runtime,extent->hr);
+  skc_runtime_device_perm_free(runtime,extent->drw);
+}
+
+void
+skc_extent_phr_pdrw_read(struct skc_extent_phr_pdrw * const extent,
+                         cl_command_queue             const cq,
+                         cl_event                   * const event)
+{
+  if (extent->size == 0)
+    return;
+
+  cl(EnqueueReadBuffer(cq, 
+                       extent->drw,
+                       CL_FALSE,
+                       0,
+                       extent->size,
+                       extent->hr,
+                       0,NULL,event));
+}
+
+void
+skc_extent_phr_pdrw_zero(struct skc_extent_phr_pdrw * const extent,
+                         cl_command_queue             const cq,
+                         cl_event                   * const event)
+{
+  if (extent->size == 0)
+    return;
+
+  skc_uint const zero = 0;
+
+  cl(EnqueueFillBuffer(cq,
+                       extent->drw,
+                       &zero,
+                       sizeof(zero),
+                       0,
+                       extent->size,
+                       0,NULL,event));
+}
+
+//
+// EPHEMERAL SMALL EXTENTS BACKING ATOMICS
+//
+
+void
+skc_extent_thr_tdrw_alloc(struct skc_runtime         * const runtime,
+                          struct skc_extent_thr_tdrw * const extent,
+                          size_t                       const size)
+{
+  extent->size = size;
+  extent->hr   = skc_runtime_host_temp_alloc(runtime,
+                                             SKC_MEM_FLAGS_READ_WRITE,
+                                             size,&extent->id.hr,NULL);
+  extent->drw  = skc_runtime_device_temp_alloc(runtime,
+                                               CL_MEM_READ_WRITE,
+                                               size,
+                                               &extent->id.drw,
+                                               NULL);
+}
+
+void
+skc_extent_thr_tdrw_free(struct skc_runtime         * const runtime,
+                         struct skc_extent_thr_tdrw * const extent)
+{
+  skc_runtime_host_temp_free(runtime,extent->hr,extent->id.hr);
+  skc_runtime_device_temp_free(runtime,extent->drw,extent->id.drw);
+}
+
+void
+skc_extent_thr_tdrw_read(struct skc_extent_thr_tdrw * const extent,
+                         cl_command_queue             const cq,
+                         cl_event                   * const event)
+{
+  if (extent->size == 0)
+    return;
+
+  cl(EnqueueReadBuffer(cq, 
+                       extent->drw,
+                       CL_FALSE,
+                       0,
+                       extent->size,
+                       extent->hr,
+                       0,NULL,event));
+}
+
+void
+skc_extent_thr_tdrw_zero(struct skc_extent_thr_tdrw * const extent,
+                         cl_command_queue             const cq,
+                         cl_event                   * const event)
+{
+  if (extent->size == 0)
+    return;
+
+  skc_uint const zero = 0;
+
+  cl(EnqueueFillBuffer(cq,
+                       extent->drw,
+                       &zero,
+                       sizeof(zero),
+                       0,
+                       extent->size,
+                       0,NULL,event));
+}
+
+//
+// DURABLE W/1 HOST RING WITH AN EPHEMERAL R/N DEVICE SNAPSHOT
+//
+
+void
+skc_extent_phw1g_tdrNs_alloc(struct skc_runtime            * const runtime,
+                             struct skc_extent_phw1g_tdrNs * const extent,
+                             size_t                          const size)
+{
+  extent->hw1 = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_WRITE_ONLY,size);
+}
+
+void
+skc_extent_phw1g_tdrNs_free(struct skc_runtime            * const runtime,
+                            struct skc_extent_phw1g_tdrNs * const extent)
+{
+  skc_runtime_host_perm_free(runtime,extent->hw1);
+}
+
+void
+skc_extent_phw1g_tdrNs_snap_init(struct skc_runtime                 * const runtime,
+                                 struct skc_extent_ring             * const ring,
+                                 struct skc_extent_phw1g_tdrNs_snap * const snap)
+{
+  snap->snap = skc_extent_ring_snap_alloc(runtime,ring);
+}
+
+void
+skc_extent_phw1g_tdrNs_snap_alloc(struct skc_runtime                 * const runtime,
+                                  struct skc_extent_phw1g_tdrNs      * const extent,
+                                  struct skc_extent_phw1g_tdrNs_snap * const snap,
+                                  cl_command_queue                     const cq,
+                                  cl_event                           * const event)
+{
+  struct skc_extent_ring const * const ring = snap->snap->ring;
+
+  skc_uint const count = skc_extent_ring_snap_count(snap->snap);
+  size_t   const size  = count * ring->size.elem;
+
+  snap->drN = skc_runtime_device_temp_alloc(runtime,
+                                            CL_MEM_READ_ONLY | CL_MEM_HOST_WRITE_ONLY,
+                                            size,&snap->id,NULL);
+
+  if (count == 0)
+    return;
+
+  // possibly two copies
+  skc_uint const index_lo  = snap->snap->reads & ring->size.mask;
+  skc_uint const count_max = ring->size.pow2 - index_lo;
+  skc_uint const count_lo  = min(count_max,count);
+  size_t   const bytes_lo  = count_lo * ring->size.elem;
+
+  if (count > count_max)
+    {
+      skc_uint const bytes_hi = (count - count_max) * ring->size.elem;
+
+      cl(EnqueueWriteBuffer(cq,
+                            snap->drN,
+                            CL_FALSE,
+                            bytes_lo,
+                            bytes_hi,
+                            extent->hw1, // offset_hi = 0
+                            0,NULL,NULL));
+    }
+
+  size_t const offset_lo = index_lo * ring->size.elem;
+
+  cl(EnqueueWriteBuffer(cq,
+                        snap->drN,
+                        CL_FALSE,
+                        0,
+                        bytes_lo,
+                        (skc_uchar*)extent->hw1 + offset_lo,
+                        0,NULL,event));
+
+}
+
+void
+skc_extent_phw1g_tdrNs_snap_free(struct skc_runtime                 * const runtime,
+                                 struct skc_extent_phw1g_tdrNs_snap * const snap)
+{
+  skc_runtime_device_temp_free(runtime,snap->drN,snap->id);
+  skc_extent_ring_snap_free(runtime,snap->snap);
+}
+
+//
+// DURABLE R/W HOST RING WITH AN EPHEMERAL R/N DEVICE SNAPSHOT
+//
+
+void
+skc_extent_phrwg_tdrNs_alloc(struct skc_runtime            * const runtime,
+                             struct skc_extent_phrwg_tdrNs * const extent,
+                             size_t                          const size)
+{
+  extent->hrw = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,size); // WRITE-ONCE
+}
+
+void
+skc_extent_phrwg_tdrNs_free(struct skc_runtime            * const runtime,
+                            struct skc_extent_phrwg_tdrNs * const extent)
+{
+  skc_runtime_host_perm_free(runtime,extent->hrw);
+}
+
+void
+skc_extent_phrwg_tdrNs_snap_init(struct skc_runtime                 * const runtime,
+                                 struct skc_extent_ring             * const ring,
+                                 struct skc_extent_phrwg_tdrNs_snap * const snap)
+{
+  snap->snap = skc_extent_ring_snap_alloc(runtime,ring);
+}
+
+void
+skc_extent_phrwg_tdrNs_snap_alloc(struct skc_runtime                 * const runtime,
+                                  struct skc_extent_phrwg_tdrNs      * const extent,
+                                  struct skc_extent_phrwg_tdrNs_snap * const snap,
+                                  cl_command_queue                     const cq,
+                                  cl_event                           * const event)
+{
+  struct skc_extent_ring const * const ring = snap->snap->ring;
+
+  skc_uint const count = skc_extent_ring_snap_count(snap->snap);
+  size_t   const size  = count * ring->size.elem;
+
+  snap->drN = skc_runtime_device_temp_alloc(runtime,
+                                            CL_MEM_READ_ONLY | CL_MEM_HOST_WRITE_ONLY,
+                                            size,&snap->id,NULL);
+
+  if (count == 0)
+    return;
+
+  // possibly two copies
+  skc_uint const index_lo  = snap->snap->reads & ring->size.mask;
+  skc_uint const count_max = ring->size.pow2 - index_lo;
+  skc_uint const count_lo  = min(count_max,count);
+  size_t   const bytes_lo  = count_lo * ring->size.elem;
+
+  if (count > count_max)
+    {
+      skc_uint const count_hi = count - count_max;
+      skc_uint const bytes_hi = count_hi * ring->size.elem;
+
+      cl(EnqueueWriteBuffer(cq,
+                            snap->drN,
+                            CL_FALSE,
+                            bytes_lo,
+                            bytes_hi,
+                            extent->hrw, // offset_hi = 0
+                            0,NULL,NULL));
+    }
+
+  size_t offset_lo = index_lo * ring->size.elem;
+
+  cl(EnqueueWriteBuffer(cq,
+                        snap->drN,
+                        CL_FALSE,
+                        0,
+                        bytes_lo,
+                        (skc_uchar*)extent->hrw + offset_lo,
+                        0,NULL,event));
+
+}
+
+void
+skc_extent_phrwg_tdrNs_snap_free(struct skc_runtime                 * const runtime,
+                                 struct skc_extent_phrwg_tdrNs_snap * const snap)
+{
+  skc_runtime_device_temp_free(runtime,snap->drN,snap->id);
+  skc_extent_ring_snap_free(runtime,snap->snap);
+}
+
+//
+// DURABLE HOST R/W RING WITH AN EPHEMERAL HOST R/1 SNAPSHOT
+//
+// Note that because the ring and snapshot are both in host memory and
+// the snapshot blocks progress until freed we can simply point the
+// fake ephemeral snapshot at the ring's durable extent.
+//
+
+void
+skc_extent_phrwg_thr1s_alloc(struct skc_runtime            * const runtime,
+                             struct skc_extent_phrwg_thr1s * const extent,
+                             size_t                          const size)
+{
+  extent->hrw = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,size); // WRITE-ONCE
+}
+
+void
+skc_extent_phrwg_thr1s_free(struct skc_runtime            * const runtime,
+                            struct skc_extent_phrwg_thr1s * const extent)
+{
+  skc_runtime_host_perm_free(runtime,extent->hrw);
+}
+
+void
+skc_extent_phrwg_thr1s_snap_init(struct skc_runtime                 * const runtime,
+                                 struct skc_extent_ring             * const ring,
+                                 struct skc_extent_phrwg_thr1s_snap * const snap)
+{
+  snap->snap = skc_extent_ring_snap_alloc(runtime,ring);
+}
+
+void
+skc_extent_phrwg_thr1s_snap_alloc(struct skc_runtime                 * const runtime,
+                                  struct skc_extent_phrwg_thr1s      * const extent,
+                                  struct skc_extent_phrwg_thr1s_snap * const snap)
+{
+  struct skc_extent_ring const * const ring = snap->snap->ring;
+
+  skc_uint const count     = skc_extent_ring_snap_count(snap->snap);
+  skc_uint const index_lo  = snap->snap->reads & ring->size.mask;
+  skc_uint const count_max = ring->size.pow2 - index_lo;
+
+  snap->count.lo = min(count_max,count);
+  snap->hr1.lo   = (skc_uchar*)extent->hrw + (index_lo * ring->size.elem);
+
+  if (count > count_max)
+    {
+      snap->count.hi = count - count_max;
+      snap->hr1.hi   = extent->hrw;
+    }
+  else
+    {
+      snap->count.hi = 0;
+      snap->hr1.hi   = NULL;
+    }
+}
+
+void
+skc_extent_phrwg_thr1s_snap_free(struct skc_runtime                 * const runtime,
+                                 struct skc_extent_phrwg_thr1s_snap * const snap)
+{
+  skc_extent_ring_snap_free(runtime,snap->snap);
+}
+
+//
+//
+//
diff --git a/src/compute/skc/extent_cl_12.h b/src/compute/skc/extent_cl_12.h
new file mode 100644
index 0000000..47ba951
--- /dev/null
+++ b/src/compute/skc/extent_cl_12.h
@@ -0,0 +1,476 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include <CL/opencl.h>
+
+#include "suballocator.h"
+#include "extent_ring.h"
+
+//
+// Legend:
+//
+//   p  :  durable
+//   t  :  ephemeral
+//   h  :  host
+//   d  :  device
+//   r  :  read
+//   w  :  write
+//   1  :  once -- e.g. w1 is 'write-once'
+//   N  :  many -- e.g. rN is 'read-many'
+//   g  :  ring
+//   s  :  ring snapshot
+//
+// Notes:
+//
+//   rw :  for now, read-write implies read-write many
+//
+
+//
+// DURABLE R/W HOST EXTENT -- STANDARD CACHED MEMORY
+//
+
+struct skc_extent_phrw 
+{
+  void * hrw;
+};
+
+void
+skc_extent_phrw_alloc(struct skc_runtime     * const runtime,
+                      struct skc_extent_phrw * const extent,
+                      size_t                   const size);
+
+void
+skc_extent_phrw_free(struct skc_runtime     * const runtime,
+                     struct skc_extent_phrw * const extent);
+
+//
+// DURABLE R/W DEVICE EXTENT -- ALLOCATED FROM DEVICE HEAP
+//
+
+struct skc_extent_pdrw 
+{
+  cl_mem drw;
+};
+
+void
+skc_extent_pdrw_alloc(struct skc_runtime     * const runtime,
+                      struct skc_extent_pdrw * const extent,
+                      size_t                   const size);
+
+void
+skc_extent_pdrw_free(struct skc_runtime     * const runtime,
+                     struct skc_extent_pdrw * const extent);
+
+//
+// EPHEMERAL DEVICE R/W EXTENT -- ALLOCATED QUICKLY FROM A MANAGED RING
+//
+
+struct skc_extent_tdrw 
+{
+  size_t          size;
+  cl_mem          drw;
+  skc_subbuf_id_t id;
+};
+
+void
+skc_extent_tdrw_alloc(struct skc_runtime     * const runtime,
+                      struct skc_extent_tdrw * const extent,
+                      size_t                   const size);
+
+void
+skc_extent_tdrw_free(struct skc_runtime     * const runtime,
+                     struct skc_extent_tdrw * const extent);
+
+void
+skc_extent_tdrw_zero(struct skc_extent_tdrw * const extent,
+                     cl_command_queue         const cq,
+                     cl_event               * const event);
+
+//
+// DURABLE SMALL EXTENTS BACKING ATOMICS
+//
+
+struct skc_extent_phr_pdrw
+{
+  size_t size; // must be multiple of words
+  void * hr;
+  cl_mem drw;
+};
+
+void
+skc_extent_phr_pdrw_alloc(struct skc_runtime         * const runtime,
+                          struct skc_extent_phr_pdrw * const extent,
+                          size_t                       const size);
+
+void
+skc_extent_phr_pdrw_free(struct skc_runtime         * const runtime,
+                         struct skc_extent_phr_pdrw * const extent);
+
+void
+skc_extent_phr_pdrw_read(struct skc_extent_phr_pdrw * const extent,
+                         cl_command_queue             const cq,
+                         cl_event                   * const event);
+
+void
+skc_extent_phr_pdrw_zero(struct skc_extent_phr_pdrw * const extent,
+                         cl_command_queue             const cq,
+                         cl_event                   * const event);
+
+//
+// EPHEMERAL SMALL EXTENTS BACKING ATOMICS
+//
+
+struct skc_extent_thr_tdrw
+{
+  size_t            size; // must be multiple of words
+
+  void            * hr;
+  cl_mem            drw;
+
+  struct {
+    skc_subbuf_id_t hr;
+    skc_subbuf_id_t drw;
+  } id;
+};
+
+void
+skc_extent_thr_tdrw_alloc(struct skc_runtime         * const runtime,
+                          struct skc_extent_thr_tdrw * const extent,
+                          size_t                       const size);
+
+void
+skc_extent_thr_tdrw_free(struct skc_runtime         * const runtime,
+                         struct skc_extent_thr_tdrw * const extent);
+
+void
+skc_extent_thr_tdrw_read(struct skc_extent_thr_tdrw * const extent,
+                         cl_command_queue             const cq,
+                         cl_event                   * const event);
+
+void
+skc_extent_thr_tdrw_zero(struct skc_extent_thr_tdrw * const extent,
+                         cl_command_queue             const cq,
+                         cl_event                   * const event);
+
+//
+// DURABLE W/1 HOST RING WITH AN EPHEMERAL R/N DEVICE SNAPSHOT
+//
+
+struct skc_extent_phw1g_tdrNs
+{
+  void * hw1;
+};
+
+struct skc_extent_phw1g_tdrNs_snap
+{
+  struct skc_extent_ring_snap * snap;
+  cl_mem                        drN;
+  skc_subbuf_id_t               id;
+};
+
+void
+skc_extent_phw1g_tdrNs_alloc(struct skc_runtime            * const runtime,
+                             struct skc_extent_phw1g_tdrNs * const extent,
+                             size_t                          const size);
+
+void
+skc_extent_phw1g_tdrNs_free(struct skc_runtime            * const runtime,
+                            struct skc_extent_phw1g_tdrNs * const extent);
+
+void
+skc_extent_phw1g_tdrNs_snap_init(struct skc_runtime                 * const runtime,
+                                 struct skc_extent_ring             * const ring,
+                                 struct skc_extent_phw1g_tdrNs_snap * const snap);
+
+void
+skc_extent_phw1g_tdrNs_snap_alloc(struct skc_runtime                 * const runtime,
+                                  struct skc_extent_phw1g_tdrNs      * const extent,
+                                  struct skc_extent_phw1g_tdrNs_snap * const snap,
+                                  cl_command_queue                     const cq,
+                                  cl_event                           * const event);
+
+void
+skc_extent_phw1g_tdrNs_snap_free(struct skc_runtime                 * const runtime,
+                                 struct skc_extent_phw1g_tdrNs_snap * const snap);
+
+//
+// DURABLE R/W HOST RING WITH AN EPHEMERAL R/N DEVICE SNAPSHOT
+//
+
+struct skc_extent_phrwg_tdrNs
+{
+  void * hrw;
+};
+
+struct skc_extent_phrwg_tdrNs_snap
+{
+  struct skc_extent_ring_snap * snap;
+  cl_mem                        drN;
+  skc_subbuf_id_t               id;
+};
+
+void
+skc_extent_phrwg_tdrNs_alloc(struct skc_runtime            * const runtime,
+                             struct skc_extent_phrwg_tdrNs * const extent,
+                             size_t                          const size);
+
+void
+skc_extent_phrwg_tdrNs_free(struct skc_runtime            * const runtime,
+                            struct skc_extent_phrwg_tdrNs * const extent);
+
+void
+skc_extent_phrwg_tdrNs_snap_init(struct skc_runtime                 * const runtime,
+                                 struct skc_extent_ring             * const ring,
+                                 struct skc_extent_phrwg_tdrNs_snap * const snap);
+
+void
+skc_extent_phrwg_tdrNs_snap_alloc(struct skc_runtime                 * const runtime,
+                                  struct skc_extent_phrwg_tdrNs      * const extent,
+                                  struct skc_extent_phrwg_tdrNs_snap * const snap,
+                                  cl_command_queue                     const cq,
+                                  cl_event                           * const event);
+
+void
+skc_extent_phrwg_tdrNs_snap_free(struct skc_runtime                 * const runtime,
+                                 struct skc_extent_phrwg_tdrNs_snap * const snap);
+
+//
+// DURABLE HOST R/W RING WITH AN EPHEMERAL HOST R/1 SNAPSHOT
+//
+// Note that because the ring and snapshot are both in host memory and
+// the snapshot blocks progress until freed we can simply point the
+// fake ephemeral snapshot at the ring's durable extent.
+//
+
+struct skc_extent_phrwg_thr1s
+{
+  void * hrw;
+};
+
+struct skc_extent_phrwg_thr1s_snap
+{
+  struct skc_extent_ring_snap * snap;
+
+  struct {
+    skc_uint                    lo;
+    skc_uint                    hi;
+  } count;
+
+  struct {
+    void                      * lo;
+    void                      * hi;
+  } hr1;
+};
+
+void
+skc_extent_phrwg_thr1s_alloc(struct skc_runtime            * const runtime,
+                             struct skc_extent_phrwg_thr1s * const extent,
+                             size_t                          const size);
+
+void
+skc_extent_phrwg_thr1s_free(struct skc_runtime            * const runtime,
+                            struct skc_extent_phrwg_thr1s * const extent);
+
+void
+skc_extent_phrwg_thr1s_snap_init(struct skc_runtime                 * const runtime,
+                                 struct skc_extent_ring             * const ring,
+                                 struct skc_extent_phrwg_thr1s_snap * const snap);
+
+void
+skc_extent_phrwg_thr1s_snap_alloc(struct skc_runtime                 * const runtime,
+                                  struct skc_extent_phrwg_thr1s      * const extent,
+                                  struct skc_extent_phrwg_thr1s_snap * const snap);
+
+void
+skc_extent_phrwg_thr1s_snap_free(struct skc_runtime                 * const runtime,
+                                 struct skc_extent_phrwg_thr1s_snap * const snap);
+
+//
+// EPHEMERAL MAPPING
+//
+// ENTIRE EXTENT   MAPPED TO R/W   HOST MEMORY
+// ENTIRE EXTENT UNMAPPED TO R/W DEVICE MEMORY
+//
+// Note: integrated vs. discrete GPUs will have different
+// implementations because we don't want a GPU kernel repeatedly
+// accessing pinned memory.
+//
+
+#if 0
+struct skc_extent_thrw_tdrw
+{
+  size_t          size;
+  cl_mem          drw;
+  skc_subbuf_id_t id;
+};
+
+void
+skc_extent_thrw_tdrw_alloc(struct skc_runtime          * const runtime,
+                           struct skc_extent_thrw_tdrw * const extent,
+                           size_t                        const size);
+
+void
+skc_extent_thrw_tdrw_free(struct skc_runtime          * const runtime,
+                          struct skc_extent_thrw_tdrw * const extent);
+
+void *
+skc_extent_thrw_tdrw_map_size(struct skc_extent_thrw_tdrw * const extent,
+                              size_t                        const size,
+                              cl_command_queue              const cq,
+                              cl_event                    * const event);
+
+void *
+skc_extent_thrw_tdrw_map(struct skc_extent_thrw_tdrw * const extent,
+                         cl_command_queue              const cq,
+                         cl_event                    * const event);
+
+void
+skc_extent_thrw_tdrw_unmap(struct skc_extent_thrw_tdrw * const extent,
+                           void                        * const hrN,
+                           cl_command_queue              const cq,
+                           cl_event                    * const event);
+#endif
+
+//
+// DURABLE MAPPING
+//
+// ENTIRE EXTENT   MAPPED TO R/W   HOST MEMORY
+// ENTIRE EXTENT UNMAPPED TO R/W DEVICE MEMORY
+//
+// Note: integrated vs. discrete GPUs will have different
+// implementations because we don't want a GPU kernel repeatedly
+// accessing pinned memory.
+//
+
+struct skc_extent_phrw_pdrw
+{
+  size_t size;
+  cl_mem drw;
+};
+
+void
+skc_extent_phrw_pdrw_alloc(struct skc_runtime          * const runtime,
+                           struct skc_extent_phrw_pdrw * const extent,
+                           size_t                        const size);
+
+void
+skc_extent_phrw_pdrw_free(struct skc_runtime          * const runtime,
+                          struct skc_extent_phrw_pdrw * const extent);
+
+void *
+skc_extent_phrw_pdrw_map_size(struct skc_extent_phrw_pdrw * const extent,
+                              size_t                        const size,
+                              cl_command_queue              const cq,
+                              cl_event                    * const event);
+
+void *
+skc_extent_phrw_pdrw_map(struct skc_extent_phrw_pdrw * const extent,
+                         cl_command_queue              const cq,
+                         cl_event                    * const event);
+
+void
+skc_extent_phrw_pdrw_unmap(struct skc_extent_phrw_pdrw * const extent,
+                           void                        * const hrN,
+                           cl_command_queue              const cq,
+                           cl_event                    * const event);
+
+//
+// DURABLE MAPPING
+//
+// ENTIRE EXTENT   MAPPED TO R/O   HOST MEMORY
+// ENTIRE EXTENT UNMAPPED TO W/O DEVICE MEMORY
+//
+// Note: integrated vs. discrete GPUs will have different
+// implementations because we don't want a GPU kernel repeatedly
+// accessing pinned memory.
+//
+
+struct skc_extent_phrN_pdwN
+{
+  size_t size;
+  cl_mem dwN;
+};
+
+void
+skc_extent_phrN_pdwN_alloc(struct skc_runtime          * const runtime,
+                           struct skc_extent_phrN_pdwN * const extent,
+                           size_t                        const size);
+
+void
+skc_extent_phrN_pdwN_free(struct skc_runtime          * const runtime,
+                          struct skc_extent_phrN_pdwN * const extent);
+
+void *
+skc_extent_phrN_pdwN_map_size(struct skc_extent_phrN_pdwN * const extent,
+                              size_t                        const size,
+                              cl_command_queue              const cq,
+                              cl_event                    * const event);
+
+void *
+skc_extent_phrN_pdwN_map(struct skc_extent_phrN_pdwN * const extent,
+                         cl_command_queue              const cq,
+                         cl_event                    * const event);
+
+void
+skc_extent_phrN_pdwN_unmap(struct skc_extent_phrN_pdwN * const extent,
+                           void                        * const hrN,
+                           cl_command_queue              const cq,
+                           cl_event                    * const event);
+
+//
+// DURABLE MAPPING
+//
+// ENTIRE EXTENT   MAPPED TO W/O   HOST MEMORY
+// ENTIRE EXTENT UNMAPPED TO R/O DEVICE MEMORY
+//
+// Note: integrated vs. discrete GPUs will have different
+// implementations because we don't want a GPU kernel repeatedly
+// accessing pinned memory.
+//
+
+struct skc_extent_phwN_pdrN
+{
+  size_t size;
+  cl_mem drN;
+};
+
+void
+skc_extent_phwN_pdrN_alloc(struct skc_runtime          * const runtime,
+                           struct skc_extent_phwN_pdrN * const extent,
+                           size_t                        const size);
+
+void
+skc_extent_phwN_pdrN_free(struct skc_runtime          * const runtime,
+                          struct skc_extent_phwN_pdrN * const extent);
+
+void *
+skc_extent_phwN_pdrN_map_size(struct skc_extent_phwN_pdrN * const extent,
+                              size_t                        const size,
+                              cl_command_queue              const cq,
+                              cl_event                    * const event);
+
+void *
+skc_extent_phwN_pdrN_map(struct skc_extent_phwN_pdrN * const extent,
+                         cl_command_queue              const cq,
+                         cl_event                    * const event);
+
+void
+skc_extent_phwN_pdrN_unmap(struct skc_extent_phwN_pdrN * const extent,
+                           void                        * const hwm,
+                           cl_command_queue              const cq,
+                           cl_event                    * const event);
+
+//
+//
+//
diff --git a/src/compute/skc/extent_cl_12_unified.c b/src/compute/skc/extent_cl_12_unified.c
new file mode 100644
index 0000000..69c669a
--- /dev/null
+++ b/src/compute/skc/extent_cl_12_unified.c
@@ -0,0 +1,281 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+// NOTE THAT NONE OF THESE EXTENTS CHECK FOR ZERO-SIZED ALLOCATIONS.
+// THAT'S OK FOR NOW.
+//
+
+#include <stdlib.h>
+
+#include "runtime_cl_12.h"
+#include "extent_cl_12.h"
+#include "common/cl/assert_cl.h"
+
+//
+// EPHEMERAL MAPPING
+//
+// ENTIRE EXTENT   MAPPED TO R/W   HOST MEMORY
+// ENTIRE EXTENT UNMAPPED TO R/W DEVICE MEMORY
+//
+// Note: integrated vs. discrete GPUs will have different
+// implementations because we don't want a GPU kernel repeatedly
+// accessing pinned memory.
+//
+
+#if 0
+
+#pragma message("struct skc_extent_thrw_tdrw will be removed once the sorter is installed.")
+
+void
+skc_extent_thrw_tdrw_alloc(struct skc_runtime          * const runtime,
+                           struct skc_extent_thrw_tdrw * const extent,
+                           size_t                        const size)
+{
+  extent->drw = skc_runtime_device_temp_alloc(runtime,
+                                              CL_MEM_READ_WRITE /* | CL_MEM_ALLOC_HOST_PTR */,
+                                              size,&extent->id,&extent->size);
+}
+
+void
+skc_extent_thrw_tdrw_free(struct skc_runtime          * const runtime,
+                          struct skc_extent_thrw_tdrw * const extent)
+{
+  skc_runtime_device_temp_free(runtime,extent->drw,extent->id);
+}
+
+void *
+skc_extent_thrw_tdrw_map_size(struct skc_extent_thrw_tdrw * const extent,
+                              size_t                        const size,
+                              cl_command_queue              const cq,
+                              cl_event                    * const event)
+{
+  cl_int cl_err;
+
+  void * hrw = clEnqueueMapBuffer(cq,extent->drw,
+                                  CL_FALSE,
+                                  CL_MAP_READ | CL_MAP_WRITE,0,size,
+                                  0,NULL,event,&cl_err); cl_ok(cl_err);
+
+  return hrw;
+}
+
+void *
+skc_extent_thrw_tdrw_map(struct skc_extent_thrw_tdrw * const extent,
+                         cl_command_queue              const cq,
+                         cl_event                    * const event)
+{
+  return skc_extent_thrw_tdrw_map_size(extent,extent->size,cq,event);
+}
+
+void
+skc_extent_thrw_tdrw_unmap(struct skc_extent_thrw_tdrw * const extent,
+                           void                        * const hrw,
+                           cl_command_queue              const cq,
+                           cl_event                    * const event)
+{
+  cl(EnqueueUnmapMemObject(cq,extent->drw,hrw,0,NULL,event));
+}
+
+#endif
+
+//
+// DURABLE MAPPING
+//
+// ENTIRE EXTENT   MAPPED TO R/W   HOST MEMORY
+// ENTIRE EXTENT UNMAPPED TO R/W DEVICE MEMORY
+//
+// Note: integrated vs. discrete GPUs will have different
+// implementations because we don't want a GPU kernel repeatedly
+// accessing pinned memory.
+//
+
+void
+skc_extent_phrw_pdrw_alloc(struct skc_runtime          * const runtime,
+                           struct skc_extent_phrw_pdrw * const extent,
+                           size_t                        const size)
+{
+  cl_int cl_err;
+
+  extent->size = size;
+  extent->drw  = clCreateBuffer(runtime->cl.context,
+                                CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR,
+                                size,NULL,&cl_err); cl_ok(cl_err);
+}
+
+void
+skc_extent_phrw_pdrw_free(struct skc_runtime          * const runtime,
+                          struct skc_extent_phrw_pdrw * const extent)
+{
+  cl(ReleaseMemObject(extent->drw));
+}
+
+void *
+skc_extent_phrw_pdrw_map_size(struct skc_extent_phrw_pdrw * const extent,
+                              size_t                        const size,
+                              cl_command_queue              const cq,
+                              cl_event                    * const event)
+{
+  cl_int cl_err;
+
+  void * hrw = clEnqueueMapBuffer(cq,extent->drw,
+                                  CL_FALSE,
+                                  CL_MAP_READ | CL_MAP_WRITE,0,size,
+                                  0,NULL,event,&cl_err); cl_ok(cl_err);
+
+  return hrw;
+}
+
+void *
+skc_extent_phrw_pdrw_map(struct skc_extent_phrw_pdrw * const extent,
+                         cl_command_queue              const cq,
+                         cl_event                    * const event)
+{
+  return skc_extent_phrw_pdrw_map_size(extent,extent->size,cq,event);
+}
+
+void
+skc_extent_phrw_pdrw_unmap(struct skc_extent_phrw_pdrw * const extent,
+                           void                        * const hrw,
+                           cl_command_queue              const cq,
+                           cl_event                    * const event)
+{
+  cl(EnqueueUnmapMemObject(cq,extent->drw,hrw,0,NULL,event));
+}
+
+//
+// DURABLE MAPPING
+//
+// ENTIRE EXTENT   MAPPED TO R/O   HOST MEMORY
+// ENTIRE EXTENT UNMAPPED TO W/O DEVICE MEMORY
+//
+// Note: integrated vs. discrete GPUs will have different
+// implementations because we don't want a GPU kernel repeatedly
+// accessing pinned memory.
+//
+
+void
+skc_extent_phrN_pdwN_alloc(struct skc_runtime          * const runtime,
+                           struct skc_extent_phrN_pdwN * const extent,
+                           size_t                        const size)
+{
+  cl_int cl_err;
+
+  extent->size = size;
+  extent->dwN  = clCreateBuffer(runtime->cl.context,
+                                CL_MEM_WRITE_ONLY | CL_MEM_ALLOC_HOST_PTR,
+                                size,NULL,&cl_err); cl_ok(cl_err);
+}
+
+void
+skc_extent_phrN_pdwN_free(struct skc_runtime          * const runtime,
+                          struct skc_extent_phrN_pdwN * const extent)
+{
+  cl(ReleaseMemObject(extent->dwN));
+}
+
+void *
+skc_extent_phrN_pdwN_map_size(struct skc_extent_phrN_pdwN * const extent,
+                              size_t                        const size,
+                              cl_command_queue              const cq,
+                              cl_event                    * const event)
+{
+  cl_int cl_err;
+
+  void * hrN = clEnqueueMapBuffer(cq,extent->dwN,
+                                  CL_FALSE,
+                                  CL_MAP_READ,0,size,
+                                  0,NULL,event,&cl_err); cl_ok(cl_err);
+
+  return hrN;
+}
+
+void *
+skc_extent_phrN_pdwN_map(struct skc_extent_phrN_pdwN * const extent,
+                         cl_command_queue              const cq,
+                         cl_event                    * const event)
+{
+  return skc_extent_phrN_pdwN_map_size(extent,extent->size,cq,event);
+}
+
+void
+skc_extent_phrN_pdwN_unmap(struct skc_extent_phrN_pdwN * const extent,
+                           void                        * const hrN,
+                           cl_command_queue              const cq,
+                           cl_event                    * const event)
+{
+  cl(EnqueueUnmapMemObject(cq,extent->dwN,hrN,0,NULL,event));
+}
+
+//
+// DURABLE MAPPING
+//
+// ENTIRE EXTENT   MAPPED TO W/O   HOST MEMORY
+// ENTIRE EXTENT UNMAPPED TO R/O DEVICE MEMORY
+//
+// Note: integrated vs. discrete GPUs will have different
+// implementations because we don't want a GPU kernel repeatedly
+// accessing pinned memory.
+//
+
+void
+skc_extent_phwN_pdrN_alloc(struct skc_runtime          * const runtime,
+                           struct skc_extent_phwN_pdrN * const extent,
+                           size_t                        const size)
+{
+  cl_int cl_err;
+
+  extent->size = size;
+  extent->drN  = clCreateBuffer(runtime->cl.context,
+                                CL_MEM_READ_ONLY | CL_MEM_ALLOC_HOST_PTR,
+                                size,NULL,&cl_err); cl_ok(cl_err);
+}
+
+void
+skc_extent_phwN_pdrN_free(struct skc_runtime          * const runtime,
+                          struct skc_extent_phwN_pdrN * const extent)
+{
+  cl(ReleaseMemObject(extent->drN));
+}
+
+void *
+skc_extent_phwN_pdrN_map_size(struct skc_extent_phwN_pdrN * const extent,
+                              size_t                        const size,
+                              cl_command_queue              const cq,
+                              cl_event                    * const event)
+{
+  cl_int cl_err;
+
+  void * hwN = clEnqueueMapBuffer(cq,extent->drN,
+                                  CL_FALSE,
+                                  CL_MAP_WRITE,0,size,
+                                  0,NULL,event,&cl_err); cl_ok(cl_err);
+
+  return hwN;
+}
+
+void *
+skc_extent_phwN_pdrN_map(struct skc_extent_phwN_pdrN * const extent,
+                         cl_command_queue              const cq,
+                         cl_event                    * const event)
+{
+  return skc_extent_phwN_pdrN_map_size(extent,extent->size,cq,event);
+}
+
+void
+skc_extent_phwN_pdrN_unmap(struct skc_extent_phwN_pdrN * const extent,
+                           void                        * const hwN,
+                           cl_command_queue              const cq,
+                           cl_event                    * const event)
+{
+  cl(EnqueueUnmapMemObject(cq,extent->drN,hwN,0,NULL,event));
+}
+
+//
+//
+//
diff --git a/src/compute/skc/extent_ring.c b/src/compute/skc/extent_ring.c
new file mode 100644
index 0000000..ca48944
--- /dev/null
+++ b/src/compute/skc/extent_ring.c
@@ -0,0 +1,205 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <stdbool.h>
+
+#include "extent_ring.h"
+#include "macros.h"
+
+//
+//
+//
+
+void
+skc_extent_ring_init(struct skc_extent_ring * const ring,
+                     skc_uint                 const size_pow2,
+                     skc_uint                 const size_snap,
+                     skc_uint                 const size_elem)
+{
+  ring->head      = NULL;
+  ring->last      = NULL;
+
+  ring->outer.rw  = (skc_uint2){ 0 };
+  ring->inner.rw  = (skc_uint2){ 0 };
+
+  // FIXME -- assert size is pow2 -- either here or statically in the config
+
+  ring->size.pow2 = size_pow2;
+  ring->size.mask = size_pow2 - 1;
+  ring->size.snap = size_snap;
+  ring->size.elem = size_elem;
+}
+
+//
+//
+//
+
+skc_uint
+skc_extent_ring_rem(struct skc_extent_ring const * const ring)
+{
+  return ring->size.pow2 - (ring->outer.writes - ring->outer.reads);
+}
+
+skc_bool
+skc_extent_ring_is_full(struct skc_extent_ring const * const ring)
+{
+  return (ring->outer.writes - ring->outer.reads) == ring->size.pow2;
+}
+
+skc_uint
+skc_extent_ring_wip_count(struct skc_extent_ring const * const ring)
+{
+  return ring->outer.writes - ring->inner.reads;
+}
+
+skc_uint
+skc_extent_ring_wip_rem(struct skc_extent_ring const * const ring)
+{
+  return SKC_MIN_MACRO(skc_extent_ring_rem(ring),ring->size.snap) - skc_extent_ring_wip_count(ring);
+}
+
+skc_bool
+skc_extent_ring_wip_is_full(struct skc_extent_ring const * const ring)
+{
+  return skc_extent_ring_wip_count(ring) == SKC_MIN_MACRO(skc_extent_ring_rem(ring),ring->size.snap);
+}
+
+skc_uint
+skc_extent_ring_wip_index_inc(struct skc_extent_ring * const ring)
+{
+  return ring->outer.writes++ & ring->size.mask;
+}
+
+//
+//
+//
+
+void
+skc_extent_ring_checkpoint(struct skc_extent_ring * const ring)
+{
+  ring->inner.writes = ring->outer.writes;
+}
+
+//
+//
+//
+
+struct skc_extent_ring_snap *
+skc_extent_ring_snap_alloc(struct skc_runtime     * const runtime,
+                           struct skc_extent_ring * const ring)
+{
+  skc_subbuf_id_t id;
+
+  struct skc_extent_ring_snap * snap = 
+    skc_runtime_host_temp_alloc(runtime,
+                                SKC_MEM_FLAGS_READ_WRITE,
+                                sizeof(*snap),&id,NULL);
+  // save the id
+  snap->id      = id;
+  
+  // back point to parent
+  snap->ring    = ring;
+  snap->next    = NULL;
+  
+  // save the inner boundaries of the ring to the snapshot
+  snap->reads   = ring->inner.reads;
+  snap->writes  = ring->inner.reads = ring->inner.writes;
+
+  // mark not free
+  snap->is_free = false;
+
+  // attach snap to ring
+  if (ring->head == NULL)
+    {
+      ring->head = snap;
+      ring->last = snap;
+    }
+  else 
+    {
+      ring->last->next = snap;
+      ring->last       = snap;
+    }
+
+  return snap;
+}
+
+//
+//
+//
+
+void
+skc_extent_ring_snap_free(struct skc_runtime          * const runtime,
+                          struct skc_extent_ring_snap * const snap)
+{
+  // snap will be lazily freed
+  snap->is_free = true;
+
+  //
+  // if this snapshot is no longer referenced then try to dispose of
+  // the ring buffer's leading unreferenced snapshots
+  //
+  struct skc_extent_ring      * const ring = snap->ring;
+  struct skc_extent_ring_snap *       curr = ring->head;
+
+  if (!curr->is_free)
+    return;
+
+  do {
+    // increment read counter
+    ring->outer.reads = curr->writes;
+    
+    struct skc_extent_ring_snap * const next = curr->next;
+
+    skc_runtime_host_temp_free(runtime,curr,curr->id);
+
+    curr = next;
+
+    // this was the last snap...
+    if (curr == NULL) 
+      {
+        ring->last = NULL;
+        break;
+      }
+
+    // is the next free?
+  } while (curr->is_free);
+
+  // update head
+  ring->head = curr;
+}
+
+//
+//
+//
+
+skc_uint
+skc_extent_ring_snap_count(struct skc_extent_ring_snap const * const snap)
+{
+  return snap->writes - snap->reads;
+}
+
+skc_uint
+skc_extent_ring_snap_from(struct skc_extent_ring_snap const * const snap)
+{
+  return snap->reads & snap->ring->size.mask;
+}
+
+skc_uint
+skc_extent_ring_snap_to(struct skc_extent_ring_snap const * const snap)
+{
+  return snap->writes & snap->ring->size.mask;
+}
+
+//
+//
+//
+
diff --git a/src/compute/skc/extent_ring.h b/src/compute/skc/extent_ring.h
new file mode 100644
index 0000000..8bb4683
--- /dev/null
+++ b/src/compute/skc/extent_ring.h
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "types.h"
+#include "runtime.h"
+
+//
+// The "ring" is a specialized extent designed to accumulate complete
+// sequences of commands that are constructed by the host and executed
+// on the device.
+//
+// Note that a sequence of commands is considered to be "complete"
+// once a checkpoint has been invoked.
+//
+// Construction of paths and rasters depends on the checkpointing
+// feature.
+//
+// Note that the ring no longer attempts to account for outstanding
+// refcounts on the ring and its snaps.  Waiting for snaps to complete
+// is a responsibility best handled elsewhere and up the stack.
+//
+
+struct skc_extent_ring
+{
+  struct skc_extent_ring_snap * head;
+  struct skc_extent_ring_snap * last;
+
+  union {
+    skc_uint2                   rw;
+    struct {
+      skc_uint                  reads;  // number of reads
+      skc_uint                  writes; // number of writes
+    };
+  } outer;
+
+  union {
+    skc_uint2                   rw;
+    struct {
+      skc_uint                  reads;  // number of reads
+      skc_uint                  writes; // number of writes
+    };
+  } inner;
+
+  struct {
+    skc_uint                    pow2;   // ring size must be pow2
+    skc_uint                    mask;   // modulo is a mask because size is pow2
+    skc_uint                    snap;   // max elements in a snapshot (not req'd to be pow2)
+    skc_uint                    elem;   // size of element in bytes
+  } size;
+};
+
+//
+//
+//
+
+void
+skc_extent_ring_init(struct skc_extent_ring * const ring,
+                     skc_uint                 const size_pow2,
+                     skc_uint                 const size_snap,
+                     skc_uint                 const size_elem);
+
+//
+//
+//
+
+skc_bool
+skc_extent_ring_rem(struct skc_extent_ring const * const ring);
+
+skc_bool
+skc_extent_ring_is_full(struct skc_extent_ring const * const ring);
+
+skc_uint
+skc_extent_ring_wip_count(struct skc_extent_ring const * const ring);
+
+skc_uint
+skc_extent_ring_wip_rem(struct skc_extent_ring const * const ring);
+
+skc_bool
+skc_extent_ring_wip_is_full(struct skc_extent_ring const * const ring);
+
+skc_uint
+skc_extent_ring_wip_index_inc(struct skc_extent_ring * const ring);
+
+//
+//
+//
+
+void
+skc_extent_ring_checkpoint(struct skc_extent_ring * const ring);
+
+//
+//
+//
+
+struct skc_extent_ring_snap
+{
+  struct skc_extent_ring      * ring;   // parent ring
+  struct skc_extent_ring_snap * next;   // next snap
+
+  skc_uint                      reads;  // number of reads
+  skc_uint                      writes; // number of writes
+
+  skc_bool                      is_free;
+
+  skc_subbuf_id_t               id;     // id of host temp suballocation
+};
+
+//
+// For now, all ring snaps allocations occur in "host temporary"
+// memory.
+//
+
+struct skc_extent_ring_snap *
+skc_extent_ring_snap_alloc(struct skc_runtime     * const runtime,
+                           struct skc_extent_ring * const ring);
+
+void
+skc_extent_ring_snap_free(struct skc_runtime          * const runtime,
+                          struct skc_extent_ring_snap * const snap);
+
+//
+//
+//
+
+skc_uint
+skc_extent_ring_snap_count(struct skc_extent_ring_snap const * const snap);
+
+skc_uint
+skc_extent_ring_snap_from(struct skc_extent_ring_snap const * const snap);
+
+skc_uint
+skc_extent_ring_snap_to(struct skc_extent_ring_snap const * const snap);
+
+//
+//
+//
+
diff --git a/src/compute/skc/fills_expand.cl b/src/compute/skc/fills_expand.cl
new file mode 100644
index 0000000..b6f5679
--- /dev/null
+++ b/src/compute/skc/fills_expand.cl
@@ -0,0 +1,309 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include "device_cl_12_gen9.h"
+#include "raster_builder_cl_12.h"
+#include "atomic_cl.h"
+#include "block.h"
+#include "path.h"
+#include "common.h"
+
+//
+//
+//
+
+#define SKC_FILLS_EXPAND_SUBGROUP_SIZE_MASK (SKC_FILLS_EXPAND_SUBGROUP_SIZE - 1)
+
+#define SKC_FILLS_EXPAND_ELEMS_PER_BLOCK    (SKC_DEVICE_BLOCK_WORDS    / SKC_FILLS_EXPAND_ELEM_WORDS)
+#define SKC_FILLS_EXPAND_ELEMS_PER_SUBBLOCK (SKC_DEVICE_SUBBLOCK_WORDS / SKC_FILLS_EXPAND_ELEM_WORDS)
+
+#define SKC_FILLS_EXPAND_ELEMS_PER_THREAD   (SKC_FILLS_EXPAND_ELEMS_PER_BLOCK / SKC_FILLS_EXPAND_SUBGROUP_SIZE)
+
+//
+//
+//
+
+#define SKC_FILLS_EXPAND_X  (SKC_DEVICE_BLOCK_WORDS / SKC_FILLS_EXPAND_SUBGROUP_SIZE)
+
+//
+//
+//
+
+#if   ( SKC_FILLS_EXPAND_X == 1 )
+#define SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND()       SKC_EXPAND_1()
+#define SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND_I_LAST  0
+
+#elif ( SKC_FILLS_EXPAND_X == 2 )
+#define SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND()       SKC_EXPAND_2()
+#define SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND_I_LAST  1
+
+#elif ( SKC_FILLS_EXPAND_X == 4 )
+#define SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND()       SKC_EXPAND_4()
+#define SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND_I_LAST  3
+
+#elif ( SKC_FILLS_EXPAND_X == 8 )
+#define SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND()       SKC_EXPAND_8()
+#define SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND_I_LAST  7
+
+#elif ( SKC_FILLS_EXPAND_X == 16)
+#define SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND()       SKC_EXPAND_16()
+#define SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND_I_LAST  15
+
+#else
+#error "MISSING SKC_FILLS_EXPAND_X"
+#endif
+
+//
+// Fill and rasterize cmds only differ in their first word semantics
+//
+
+union skc_cmd_expand
+{
+  union skc_cmd_fill      fill;
+  union skc_cmd_rasterize rasterize;
+};
+
+//
+//
+//
+
+union skc_path_elem
+{
+  skc_uint  u32;
+  skc_float f32;
+};
+
+//
+// COMPILE-TIME AND RUN-TIME MACROS
+//
+
+#define SKC_ELEM_IN_RANGE(X,I)                                          \
+  (skc_bool)SKC_GTE_MACRO(X,(I ) * SKC_FILLS_EXPAND_SUBGROUP_SIZE) &&   \
+  (skc_bool)SKC_LT_MACRO(X,(I+1) * SKC_FILLS_EXPAND_SUBGROUP_SIZE)
+
+#define SKC_ELEM_GTE(X,I)                                       \
+  SKC_GTE_MACRO(X,(I+1) * SKC_FILLS_EXPAND_SUBGROUP_SIZE)
+
+//
+// FIXME -- slate these for replacement
+//
+
+#define SKC_BROADCAST(E,S,I)                                            \
+  sub_group_broadcast(E##I.u32,S - I * SKC_FILLS_EXPAND_SUBGROUP_SIZE)
+
+#define SKC_BROADCAST_LAST_HELPER(E,I)                                  \
+  sub_group_broadcast(E##I.u32,SKC_FILLS_EXPAND_SUBGROUP_SIZE - 1)
+
+#define SKC_BROADCAST_LAST(E,I)                 \
+  SKC_BROADCAST_LAST_HELPER(E,I)
+
+//
+//
+//
+
+void
+skc_cmds_out_append(__global union skc_cmd_rasterize * const cmds_out,
+                    skc_uint                         * const out_idx,
+                    union skc_cmd_expand             * const cmd,
+                    union skc_path_elem                const e,
+                    skc_uint                           const e_idx)
+{
+  //
+  // FIXME -- we can append a large number of nodeword indices to a
+  // local SMEM queue and flush when full.  It may or may not be a
+  // performance win on some architectures.
+  //
+  skc_bool const is_elem = SKC_TAGGED_BLOCK_ID_GET_TAG(e.u32) < SKC_BLOCK_ID_TAG_PATH_NEXT;
+  skc_uint const offset  = sub_group_scan_inclusive_add(is_elem ? 1 : 0);
+
+  cmd->rasterize.nodeword = e_idx;
+
+  if (is_elem) {
+    cmds_out[*out_idx + offset] = cmd->rasterize;
+  }
+
+  *out_idx += sub_group_broadcast(offset,SKC_FILLS_EXPAND_SUBGROUP_SIZE-1);
+}
+
+//
+//
+//
+
+__kernel
+SKC_FILLS_EXPAND_KERNEL_ATTRIBS
+void
+skc_kernel_fills_expand(__global union skc_path_elem     const    * const blocks,
+                        __global skc_uint                volatile * const atomics,
+                        __global skc_block_id_t          const    * const map,
+                        __global union skc_cmd_fill      const    * const cmds_in,
+                        __global union skc_cmd_rasterize          * const cmds_out)
+{
+  //
+  // Need to harmonize the way we determine a subgroup's id.  In this
+  // kernel it's not as important because no local memory is being
+  // used.  Although the device/mask calc to determine subgroup and
+  // lanes is still proper, we might want to make it clearer that
+  // we're working with subgroups by using the subgroup API.
+  //
+  // every subgroup/simd that will work on the block loads the same command
+  //
+#if (__OPENCL_VERSION__ < 200)
+  skc_uint const       cmd_stride = get_num_sub_groups();
+#else
+  skc_uint const       cmd_stride = get_enqueued_num_sub_groups(); // 2.0 supports non-uniform workgroups
+#endif
+  skc_uint             cmd_idx    = get_group_id(0) * cmd_stride + get_sub_group_id();
+
+  // load fill command -- we reuse y component
+  union skc_cmd_expand cmd        = { .fill = cmds_in[cmd_idx] };
+
+  // get the path header block from the map
+  skc_block_id_t       id         = map[cmd.fill.path];
+
+#if 0
+  if (get_sub_group_local_id() == 0)
+    printf("expand[%u] = %u\n",cmd_idx,id);
+#endif
+
+  //
+  // blindly load all of the head elements into registers
+  //
+  skc_uint head_idx = id * SKC_FILLS_EXPAND_ELEMS_PER_SUBBLOCK + get_sub_group_local_id();
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+  union skc_path_elem h##I = blocks[head_idx + I * SKC_FILLS_EXPAND_SUBGROUP_SIZE];
+
+  SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND();
+
+  //
+  // pick out count.nodes and count.prims from the header
+  //
+  skc_uint count_nodes, count_prims;
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+  if (SKC_ELEM_IN_RANGE(SKC_PATH_HEAD_OFFSET_NODES,I)) {                \
+    count_nodes  = SKC_BROADCAST(h,SKC_PATH_HEAD_OFFSET_NODES,I);       \
+  }                                                                     \
+  if (SKC_ELEM_IN_RANGE(SKC_PATH_HEAD_OFFSET_PRIMS,I)) {                \
+    count_prims  = SKC_BROADCAST(h,SKC_PATH_HEAD_OFFSET_PRIMS,I);       \
+  }
+
+  SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND();
+
+  //
+  // debug of path head
+  //
+#if 0
+  skc_uint count_blocks;
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+  if (SKC_ELEM_IN_RANGE(SKC_PATH_HEAD_OFFSET_BLOCKS,I)) {               \
+    count_blocks = SKC_BROADCAST(h,SKC_PATH_HEAD_OFFSET_BLOCKS,I);      \
+  }
+
+  SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND();
+
+  if (get_sub_group_local_id() == 0)
+    printf("path header = { %5u, %5u, %5u }\n",
+           count_blocks,count_nodes,count_prims);
+#endif
+
+  //
+  // acquire slots in the expanded cmd extent
+  //
+  // decrement prim_idx by 1 so we can use inclusive warp scan later
+  //
+  skc_uint out_idx = 0;
+
+  if (get_sub_group_local_id() == 0) {
+    out_idx = SKC_ATOMIC_ADD_GLOBAL_RELAXED_SUBGROUP
+      (atomics+SKC_RASTER_COHORT_ATOMIC_OFFSET_CMDS,count_prims) - 1;
+  }
+
+  out_idx = sub_group_broadcast(out_idx,0);
+
+  //
+  // process ids trailing the path header
+  //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+  if (!SKC_ELEM_GTE(SKC_PATH_HEAD_OFFSET_IDS,I)) {                      \
+    if (SKC_ELEM_IN_RANGE(SKC_PATH_HEAD_OFFSET_IDS,I)) {                \
+      if (get_sub_group_local_id() + I * SKC_FILLS_EXPAND_SUBGROUP_SIZE < SKC_PATH_HEAD_OFFSET_IDS) { \
+        h##I.u32 = SKC_TAGGED_BLOCK_ID_INVALID;                         \
+      }                                                                 \
+    }                                                                   \
+    skc_cmds_out_append(cmds_out,&out_idx,&cmd,h##I,                    \
+                        head_idx + I * SKC_FILLS_EXPAND_SUBGROUP_SIZE); \
+  }
+
+  SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND();
+
+  //
+  // we're done if it was just the header
+  //
+  if (count_nodes == 0)
+    return;
+
+  //
+  // otherwise, process the nodes
+  //
+
+  //
+  // get id of next node
+  //
+  id = SKC_TAGGED_BLOCK_ID_GET_ID(SKC_BROADCAST_LAST(h,SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND_I_LAST));
+
+  //
+  // the following blocks are nodes
+  //
+  while (true)
+    {
+      // get index of each element
+      skc_uint node_idx = id * SKC_FILLS_EXPAND_ELEMS_PER_SUBBLOCK + get_sub_group_local_id();
+
+      //
+      // blindly load all of the node elements into registers
+      //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+      union skc_path_elem const n##I = blocks[node_idx + I * SKC_FILLS_EXPAND_SUBGROUP_SIZE];
+
+      SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND();
+
+      //
+      // append all valid ids
+      //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+      skc_cmds_out_append(cmds_out,&out_idx,&cmd,n##I,                  \
+                          node_idx + I * SKC_FILLS_EXPAND_SUBGROUP_SIZE);
+
+      SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND();
+
+      // any more nodes?
+      if (--count_nodes == 0)
+        return;
+
+      //
+      // get id of next node
+      //
+      id = SKC_TAGGED_BLOCK_ID_GET_ID(SKC_BROADCAST_LAST(n,SKC_FILLS_EXPAND_PATH_BLOCK_EXPAND_I_LAST));
+    }
+}
+
+//
+//
+//
diff --git a/src/compute/skc/grid.c b/src/compute/skc/grid.c
new file mode 100644
index 0000000..934fa9f
--- /dev/null
+++ b/src/compute/skc/grid.c
@@ -0,0 +1,763 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include <string.h>
+#include <assert.h>
+#include <stdbool.h>
+
+#include "grid.h"
+#include "macros.h"
+#include "runtime_cl_12.h"
+
+//
+// SKC grid dependencies can be represented with a DAG.
+//
+// This dependency graph may be modified to include some sort of block
+// pool barrier to make block recovery explicit (and guaranteed safe).
+//
+//
+//              PATH BUILDER
+//                    |
+//                    |
+//                    |
+//                    v
+//             RASTER BUILDER
+//                    |
+//            +----+  |           +----+
+//    Set Ops |    |  |           |    | Set Ops
+//            |    v  v           v    |
+//            +--COMPOSITION  STYLING--+
+//                    |          |
+//                    | +--------+
+//                    | |
+//                    v v
+//                  SURFACE
+//
+//
+//       STAGE                DEPENDENCIES
+//  ==============    ============================
+//  PATH BUILDER      -
+//  RASTER BUILDER    PATH BUILDER
+//  COMPOSITION       RASTER BUILDER, *COMPOSITION
+//  STYLING           -, *STYLING
+//  SURFACE           COMPOSITION, STYLING
+//
+
+//
+// How many active grids can/should we have?
+//
+// FIXME -- we'll need to provide a small level of indirection if we
+// want to support a much larger number of work-in-progress grids
+//
+// For now and for simplicity, unify all grid ids in one set.
+//
+
+typedef skc_uchar            skc_grid_id_t;                   // 256 values
+#define SKC_GRID_ID_INVALID  SKC_UCHAR_MAX                    // 255
+
+#define SKC_GRID_SIZE_WORDS  8                                // 256 bits
+#define SKC_GRID_SIZE_IDS    ((32 * SKC_GRID_SIZE_WORDS) - 1) // 255 ids
+
+//
+//
+//
+
+typedef enum skc_grid_state_e {
+
+  SKC_GRID_STATE_READY,
+  SKC_GRID_STATE_WAITING,
+  SKC_GRID_STATE_FORCED,
+  SKC_GRID_STATE_EXECUTING,
+  SKC_GRID_STATE_COMPLETE,
+  SKC_GRID_STATE_DETACHED,
+
+  SKC_GRID_STATE_COUNT
+
+} skc_grid_state_e;
+
+//
+//
+//
+
+struct skc_grid_pfn_name
+{
+  skc_grid_pfn pfn;
+  char const * name;
+};
+
+//
+//
+//
+
+struct skc_grid
+{
+  skc_grid_state_e          state;
+  skc_uint                  id;
+
+  struct skc_grid_deps    * deps;    // backpointer to deps
+  void                  * * addr;    // pointer to invalidate
+
+  void                    * data;
+
+  struct skc_grid_pfn_name  waiting; // optional - if defined, typically used to yank the grid away from host
+  struct skc_grid_pfn_name  execute; // optional - starts execution of waiting grid
+  struct skc_grid_pfn_name  dispose; // optional - invoked when grid is complete
+  
+  struct {
+    skc_uint                words[SKC_GRID_SIZE_WORDS]; // 0:inactive, 1:active
+    skc_uint                count;
+  } before;
+
+  struct {
+    skc_uint                words[SKC_GRID_SIZE_WORDS]; // 0:inactive, 1:active
+    skc_uint                count;
+  } after;
+};
+
+//
+//
+//
+
+struct skc_grid_deps
+{
+  struct skc_runtime   * runtime;
+  struct skc_scheduler * scheduler;
+
+  skc_grid_id_t        * handle_map;
+
+  struct skc_grid        grids [SKC_GRID_SIZE_IDS];   // deps + pfns + data
+  skc_uint               active[SKC_GRID_SIZE_WORDS]; // 1:inactive, 0:active
+
+  skc_uint               count;                       // number of active ids
+};
+
+//
+//
+//
+
+static
+void
+skc_grid_call(skc_grid_t const grid, struct skc_grid_pfn_name const * const pn)
+{
+  if (pn->pfn != NULL) {
+    pn->pfn(grid);
+  }
+}
+
+static
+void
+skc_grid_schedule(skc_grid_t const grid, struct skc_grid_pfn_name const * const pn)
+{
+  if (pn->pfn != NULL) {
+    skc_scheduler_schedule(grid->deps->scheduler,pn->pfn,grid,pn->name);
+  }
+}
+
+//
+//
+//
+
+static
+void
+skc_grid_invalidate(skc_grid_t const grid)
+{
+  if (grid->addr != NULL) {
+    *grid->addr = NULL;
+  }
+}
+
+//
+//
+//
+
+#if 0
+skc_grid_t
+skc_grid_move(skc_grid_t         const grid,
+              skc_grid_state_e * const state,
+              skc_grid_t       * const addr,
+              void             * const data)
+{
+  skc_grid_invalidate(grid);
+
+  grid->state = state;
+  grid->addr  = addr;
+  grid->data  = data;
+
+  return grid;
+}
+#endif
+
+void *
+skc_grid_get_data(skc_grid_t const grid)
+{
+  return grid->data;
+}
+
+void
+skc_grid_set_data(skc_grid_t const grid, void * const data)
+{
+  grid->data = data;
+}
+
+//
+//
+//
+
+skc_grid_deps_t
+skc_grid_deps_create(struct skc_runtime   * const runtime,
+                     struct skc_scheduler * const scheduler,
+                     skc_uint               const handle_pool_size)
+{
+  struct skc_grid_deps * const deps = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,sizeof(*deps));
+
+  // save runtime
+  deps->runtime    = runtime;
+  deps->scheduler  = scheduler;
+
+  size_t const handle_map_size = sizeof(*deps->handle_map) * handle_pool_size;
+
+  // allocate handle map
+  deps->handle_map = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,handle_map_size);
+
+  // initialize handle map
+  memset(deps->handle_map,0xFF,handle_map_size);
+
+  // grids
+  struct skc_grid * const grids = deps->grids;
+
+#if 0 // DELETE ME LATER
+  // initalize ids once -- could always infer id using offsetof()
+  for (skc_uint id=0; id < SKC_GRID_SIZE_IDS; id++)
+    grids[id].id = id;
+#endif
+
+  // mark all grids inactive except for last bit -- 1:inactive / 0:active
+  for (skc_uint ii=0; ii < SKC_GRID_SIZE_WORDS-1; ii++)
+    deps->active[ii] = 0xFFFFFFFF;
+
+  // last bit is marked active so that it is never allocated
+  deps->active[SKC_GRID_SIZE_WORDS-1] = 0x7FFFFFFF;
+
+  // nothing active
+  deps->count = 1;
+
+  return deps;
+}
+
+void
+skc_grid_deps_dispose(skc_grid_deps_t const deps)
+{
+  //
+  // FIXME -- debug checks for active grids
+  //
+  skc_runtime_host_perm_free(deps->runtime,deps->handle_map);
+  skc_runtime_host_perm_free(deps->runtime,deps);
+}
+
+//
+//
+//
+
+#ifndef NDEBUG
+
+void
+skc_grid_deps_debug(struct skc_grid_deps const * const deps)
+{
+  fprintf(stderr,
+          "00000000000000001111111111111111\n"
+          "0123456789ABCDEF0123456789ABCDEF\n"
+          "--------------------------------\n");
+
+  for (skc_uint ii=0; ii<SKC_GRID_SIZE_WORDS; ii++)
+    {
+      skc_uint const a = deps->active[ii];
+      fprintf(stderr,
+              "%1u%1u%1u%1u%1u%1u%1u%1u%1u%1u%1u%1u%1u%1u%1u%1u"
+              "%1u%1u%1u%1u%1u%1u%1u%1u%1u%1u%1u%1u%1u%1u%1u%1u\n",
+              (a>>0x00)&1,(a>>0x01)&1,(a>>0x02)&1,(a>>0x03)&1,
+              (a>>0x04)&1,(a>>0x05)&1,(a>>0x06)&1,(a>>0x07)&1,
+              (a>>0x08)&1,(a>>0x09)&1,(a>>0x0A)&1,(a>>0x0B)&1,
+              (a>>0x0C)&1,(a>>0x0D)&1,(a>>0x0E)&1,(a>>0x0F)&1,
+              (a>>0x10)&1,(a>>0x11)&1,(a>>0x12)&1,(a>>0x13)&1,
+              (a>>0x14)&1,(a>>0x15)&1,(a>>0x16)&1,(a>>0x17)&1,
+              (a>>0x18)&1,(a>>0x19)&1,(a>>0x1A)&1,(a>>0x1B)&1,
+              (a>>0x1C)&1,(a>>0x1D)&1,(a>>0x1E)&1,(a>>0x1F)&1);
+    }
+
+  fprintf(stderr,"\n");
+}
+
+#endif
+
+//
+//
+//
+
+skc_grid_t
+skc_grid_deps_attach(skc_grid_deps_t const deps,
+                     skc_grid_t    * const addr,
+                     void          * const data,
+                     skc_grid_pfn          waiting_pfn,  // upon READY         > WAITING
+                     skc_grid_pfn          execute_pfn,  // upon READY/WAITING > EXECUTING
+                     skc_grid_pfn          dispose_pfn,  // upon EXECUTING     > COMPLETE
+                     char    const * const waiting_name,
+                     char    const * const execute_name,
+                     char    const * const dispose_name)
+{
+  // FIXME -- no more ids -- either fatal or flush & wait for grids to be released
+  assert(deps->count < SKC_GRID_SIZE_IDS);
+
+  // otherwise, an id exists so decrement count
+  deps->count += 1;
+
+  // find first set bit (1:inactive)
+  skc_uint * active = deps->active;
+  skc_uint   first  = 0;
+
+  while (1)
+    {
+      skc_uint const idx = SKC_LZCNT_32(*active);
+
+      first += idx;
+
+      if (idx < 32)
+        {
+          // make inactive bit active: 1 -> 0
+          *active &= ~(0x80000000 >> idx); // 0:active
+          break;
+        }
+
+      // otherwise, inspect next word for inactive bit
+      active += 1;
+    }
+
+  struct skc_grid * const grid = deps->grids + first;
+
+  // save grid pointer
+  if (addr != NULL)
+    *addr = grid;
+
+  // initialize elem
+  *grid = (struct skc_grid){
+    .state   = SKC_GRID_STATE_READY,
+    .id      = first,
+    .deps    = deps,
+    .addr    = addr,
+    .data    = data,
+    .waiting = { .pfn = waiting_pfn, .name = waiting_name },
+    .execute = { .pfn = execute_pfn, .name = execute_name },
+    .dispose = { .pfn = dispose_pfn, .name = dispose_name },
+    .before  = { { 0 }, 0 },
+    .after   = { { 0 }, 0 }
+  };
+
+  return grid;
+}
+
+//
+//
+//
+
+static
+skc_bool
+skc_grid_words_set(skc_uint ids[SKC_GRID_SIZE_WORDS], skc_uint const id)
+{
+  skc_uint * const ptr  = ids + (id/32);
+  skc_uint   const pre  = *ptr;
+  skc_uint   const post = pre | (0x80000000 >> (id & 0x1F)); // set
+
+  *ptr = post;
+
+  return pre != post;
+}
+
+static
+skc_bool
+skc_grid_words_clear(skc_uint ids[SKC_GRID_SIZE_WORDS], skc_uint const id)
+{
+  skc_uint * const ptr  = ids + (id/32);
+  skc_uint   const pre  = *ptr;
+  skc_uint   const post = pre & ~(0x80000000 >> (id & 0x1F)); // clear
+
+  *ptr = post;
+
+  return pre != post;
+}
+
+//
+// we may want to allow the host to detach a grid
+//
+
+static
+void
+skc_grid_detach(skc_grid_t const grid)
+{
+  // for now make sure grid is complete
+  // assert(*grid->state >= SKC_GRID_STATE_COMPLETE);
+
+  // transition state
+  grid->state = SKC_GRID_STATE_DETACHED;
+
+  //
+  // FIXME -- save profiling info
+  //
+
+  if (skc_grid_words_set(grid->deps->active,grid->id)) // 1:inactive
+    grid->deps->count -= 1;
+}
+
+//
+//
+//
+
+void
+skc_grid_map(skc_grid_t const grid, skc_handle_t const handle)
+{
+  grid->deps->handle_map[handle] = grid->id;
+}
+
+//
+//
+//
+
+void
+skc_grid_deps_force(skc_grid_deps_t      const deps,
+                    skc_handle_t const * const handles,
+                    skc_uint             const count)
+{
+  //
+  // FIXME -- test to make sure handles aren't completely out of range integers
+  //
+  skc_grid_id_t * const handle_map = deps->handle_map;
+
+  for (skc_uint ii=0; ii<count; ii++)
+    {
+      skc_grid_id_t grid_id = handle_map[SKC_TYPED_HANDLE_TO_HANDLE(handles[ii])];
+
+      if (grid_id != SKC_GRID_ID_INVALID)
+        {
+          skc_grid_t const grid = deps->grids + grid_id;
+
+          skc_grid_force(grid);
+
+          while (grid->state >= SKC_GRID_STATE_COMPLETE)
+            skc_scheduler_wait_one(deps->scheduler);
+        }
+    }
+}
+
+void
+skc_grid_deps_unmap(skc_grid_deps_t      const deps,
+                    skc_handle_t const * const handles,
+                    skc_uint             const count)
+{
+  skc_grid_id_t * const handle_map = deps->handle_map;
+
+  for (skc_uint ii=0; ii<count; ii++)
+    handle_map[handles[ii]] = SKC_GRID_ID_INVALID;
+}
+
+//
+// NOTE: We want this routine to be very very fast. The array of bit
+// flags is probably as fast as we can go for a modest number of
+// grids.
+//
+// NOTE: The before grid should never be NULL.  This means the grid's
+// lifecycle should match the lifetime of the object it represents.
+// This also means the grid "invalidation upon start" feature should
+// be well understood before using it to clear the skc_grid_t.
+//
+
+void
+skc_grid_happens_after_grid(skc_grid_t const after,
+                            skc_grid_t const before)
+{
+  assert(after->state == SKC_GRID_STATE_READY);
+
+  if (before->state >= SKC_GRID_STATE_COMPLETE)
+    return;
+
+  if (skc_grid_words_set(after->before.words,before->id))
+    after->before.count += 1;
+
+  if (skc_grid_words_set(before->after.words,after->id))
+    before->after.count += 1;
+}
+
+void
+skc_grid_happens_after_handle(skc_grid_t const after, skc_handle_t const before)
+{
+  assert(after->state == SKC_GRID_STATE_READY);
+
+  skc_uint const id_before = after->deps->handle_map[before];
+
+  if (id_before == SKC_GRID_ID_INVALID)
+    return;
+
+  if (skc_grid_words_set(after->before.words,id_before))
+    after->before.count += 1;
+
+  skc_grid_t const grid_before = after->deps->grids + id_before;
+
+  if (skc_grid_words_set(grid_before->after.words,after->id))
+    grid_before->after.count += 1;
+}
+
+//
+// Remove dependency from grid
+//
+
+static
+void
+skc_grid_clear_dependency(skc_grid_t const after, skc_uint const before)
+{
+  skc_bool const is_change = skc_grid_words_clear(after->before.words,before);
+
+  assert(is_change); // for now let's make sure this is a rising edge
+
+  after->before.count -= 1;
+
+  if ((after->before.count == 0) && ((after->state == SKC_GRID_STATE_WAITING) || 
+                                     (after->state == SKC_GRID_STATE_FORCED)))
+    {
+      // schedule grid for execution
+      after->state = SKC_GRID_STATE_EXECUTING;
+      skc_grid_schedule(after,&after->execute);
+    }
+}
+
+//
+// Start the ready grid and wait for dependencies to complete
+//
+
+void
+skc_grid_start(skc_grid_t const grid)
+{
+  // nothing to do if this grid isn't in a ready state
+  if (grid->state != SKC_GRID_STATE_READY)
+    return;
+
+  // record transition through waiting state
+  grid->state = SKC_GRID_STATE_WAITING;
+
+  // the waiting pfn may be null -- e.g. the path builder
+  // skc_grid_schedule(grid,&grid->waiting);
+  skc_grid_call(grid,&grid->waiting);
+
+  // clear the reference
+  skc_grid_invalidate(grid);
+
+  // execute if there are no dependencies
+  if (grid->before.count == 0)
+    {
+      // tell grid it can execute
+      grid->state = SKC_GRID_STATE_EXECUTING;
+      skc_grid_schedule(grid,&grid->execute);
+    }
+}
+
+//
+// Start this grid and all its ready dependencies
+//
+
+void
+skc_grid_force(skc_grid_t const grid)
+{
+  // return if this grid was forced, executing or complete
+  if (grid->state >= SKC_GRID_STATE_FORCED)
+    return;
+
+  // if ready then move to waiting state
+  if (grid->state == SKC_GRID_STATE_READY)
+    {
+      // tell grid to wait for execution
+      grid->state = SKC_GRID_STATE_WAITING;
+
+      // the waiting pfn may be null -- e.g. the path builder
+      // skc_grid_schedule(grid,&grid->waiting);
+      skc_grid_call(grid,&grid->waiting);
+
+      // clear the reference
+      skc_grid_invalidate(grid);
+    }
+
+  skc_uint before_count = grid->before.count;
+
+  // if there are no grid dependencies then execute
+  if (before_count == 0)
+    {
+      // tell grid it can execute
+      grid->state = SKC_GRID_STATE_EXECUTING;
+      skc_grid_schedule(grid,&grid->execute);
+    }
+  else // otherwise, start or make waiting all dependencies
+    {
+      grid->state = SKC_GRID_STATE_FORCED;
+
+      struct skc_grid * before       = grid->deps->grids;
+      skc_uint        * before_words = grid->before.words;
+      skc_uint          active       = *before_words++;
+
+      while (true)
+        {
+          // find first active
+          skc_uint const idx = SKC_LZCNT_32(active);
+
+          // no bits set so inspect next word
+          if (idx == 32)
+            {
+              active  = *before_words++;
+              before += 1;
+              continue;
+            }
+          else // clear active
+            {
+              active       &= ~(0x80000000 >> idx);
+              before_count -= 1;
+            }
+
+          // otherwise, force this elem with dependent
+          skc_grid_force(before+idx);
+
+          // no more bits?
+          if (before_count == 0)
+            break;
+        }
+    }
+}
+
+//
+// Notify grids dependent on this grid that this grid is complete
+//
+
+void
+skc_grid_complete(skc_grid_t const grid)
+{
+  // debug: grid was executing
+  assert(grid->state == SKC_GRID_STATE_EXECUTING);
+
+  // move grid to completion and dispose after notifying dependents
+  grid->state = SKC_GRID_STATE_COMPLETE;
+
+  skc_uint after_count = grid->after.count;
+
+  if (after_count > 0)
+    {
+      // find set bits
+      struct skc_grid * after       = grid->deps->grids;
+      skc_uint        * after_words = grid->after.words;
+      skc_uint          active      = *after_words++;
+
+      while (true)
+        {
+          // find first active
+          skc_uint const idx = SKC_LZCNT_32(active);
+
+          // no bits set so inspect next word
+          if (idx == 32)
+            {
+              active  = *after_words++;
+              after  += 1;
+              continue;
+            }
+          else // clear active
+            {
+              active      &= ~(0x80000000 >> idx);
+              after_count -= 1;
+            }
+
+          // otherwise, clear this dependency
+          skc_grid_clear_dependency(after+idx,grid->id);
+
+          // no more bits?
+          if (after_count == 0)
+            break;
+        }
+    }
+
+  // dispose of resources
+  skc_grid_call(grid,&grid->dispose);
+
+  // we don't need to hang on to this grid id any longer
+  skc_grid_detach(grid);
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// ALTERNATIVE IMPLEMENTATION WOULD SUPPORT A VARIABLE NUMBER OF
+// ACTIVE GRIDS PER STAGE PRESUMABLY RESULTING IN SLIGHTLY LESS MEMORY
+// USAGE.
+//
+// THE #1 OBJECTIVE OF THE GRID IMPLEMENTATION IS TO ENSURE THAT THE
+// "HAPPENS-BEFORE" DECLARATION REMAINS ***FAST*** SINCE IT WILL BE
+// CALLED FREQUENTLY.  THUS THE |GRIDS|^2 BIT ARRAY...
+//
+// WE DON'T NEED THIS RIGHT NOW...
+//
+
+#if 0
+
+//
+// For now, make them all the same size
+//
+
+#define SKC_GRID_STAGE_WORDS_PATH_BUILDER          SKC_GRID_MASK_WORDS
+#define SKC_GRID_STAGE_WORDS_RASTER_BUILDER        SKC_GRID_MASK_WORDS
+#define SKC_GRID_STAGE_WORDS_COMPOSITION           SKC_GRID_MASK_WORDS
+#define SKC_GRID_STAGE_WORDS_STYLING               SKC_GRID_MASK_WORDS
+#define SKC_GRID_STAGE_WORDS_SURFACE_COMPOSITION   SKC_GRID_MASK_WORDS
+#define SKC_GRID_STAGE_WORDS_SURFACE_STYLING       SKC_GRID_MASK_WORDS
+
+//
+//
+//
+
+typedef enum skc_grid_stage_type {
+
+  SKC_GRID_STAGE_TYPE_PATH_BUILDER,
+  SKC_GRID_STAGE_TYPE_RASTER_BUILDER,
+  SKC_GRID_STAGE_TYPE_COMPOSITION,
+  SKC_GRID_STAGE_TYPE_STYLING,
+  SKC_GRID_STAGE_TYPE_SURFACE_COMPOSITION,
+  SKC_GRID_STAGE_TYPE_SURFACE_STYLING,
+
+  SKC_GRID_STAGE_TYPE_COUNT
+
+} skc_grid_stage_type;
+
+//
+//
+//
+
+union skc_grid_id
+{
+  skc_grid_id_t u32;
+
+  struct {
+    skc_ushort  index;
+    skc_ushort  stage;
+  };
+}
+
+SKC_STATIC_ASSERT(sizeof(union skc_grid_id) == sizeof(skc_uint));
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/grid.h b/src/compute/skc/grid.h
new file mode 100644
index 0000000..006625e
--- /dev/null
+++ b/src/compute/skc/grid.h
@@ -0,0 +1,167 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "handle.h"
+#include "scheduler.h"
+
+//
+// The requirement is that every grid struct begin with an skc_grid_t
+//
+
+typedef struct skc_grid      * skc_grid_t;
+typedef struct skc_grid_deps * skc_grid_deps_t;
+
+//
+//
+//
+
+typedef void (* skc_grid_pfn)(skc_grid_t const grid);
+
+//
+//
+//
+
+#define SKC_IS_GRID_INVALID(grid)  (grid == NULL)
+
+//
+//
+//
+
+#define SKC_GRID_DEPS_ATTACH(deps,addr,data,waiting_pfn,execute_pfn,dispose_pfn) \
+  skc_grid_deps_attach(deps,addr,data,                                  \
+                       waiting_pfn,execute_pfn,dispose_pfn,             \
+                       #waiting_pfn,#execute_pfn,#dispose_pfn)          \
+//
+//
+//
+
+skc_grid_deps_t
+skc_grid_deps_create(struct skc_runtime   * const runtime,
+                     struct skc_scheduler * const scheduler,
+                     skc_uint               const handle_pool_size);
+
+void
+skc_grid_deps_dispose(skc_grid_deps_t const deps);
+
+//
+//
+//
+
+#ifndef NDEBUG
+void
+skc_grid_deps_debug(struct skc_grid_deps const * const deps);
+#endif
+
+//
+//
+//
+
+skc_grid_t
+skc_grid_deps_attach(skc_grid_deps_t const deps,
+                     skc_grid_t    * const addr,
+                     void          * const data,
+                     skc_grid_pfn          waiting_pfn,  // upon READY         > WAITING
+                     skc_grid_pfn          execute_pfn,  // upon READY/WAITING > EXECUTING
+                     skc_grid_pfn          dispose_pfn,  // upon EXECUTING     > COMPLETE
+                     char    const * const waiting_name,
+                     char    const * const execute_name,
+                     char    const * const dispose_name);
+
+#if 0
+//
+// Not using this yet -- needs to properly detach and reclaim a ready
+// grid's resources
+//
+void
+skc_grid_detach(skc_grid_t const grid);
+#endif
+
+//
+//
+//
+
+void *
+skc_grid_get_data(skc_grid_t const grid);
+
+void
+skc_grid_set_data(skc_grid_t const grid, void * const data);
+
+//
+//
+//
+
+void
+skc_grid_map(skc_grid_t const grid, skc_handle_t const handle);
+
+//
+//
+//
+
+void
+skc_grid_deps_force(skc_grid_deps_t      const deps,
+                    skc_handle_t const * const handles,
+                    skc_uint             const count);
+
+void
+skc_grid_deps_unmap(skc_grid_deps_t      const deps,
+                    skc_handle_t const * const handles,
+                    skc_uint             const count);
+
+//
+//
+//
+
+void
+skc_grid_happens_after_grid(skc_grid_t const after,
+                            skc_grid_t const before);
+
+void
+skc_grid_happens_after_handle(skc_grid_t   const after,
+                              skc_handle_t const before);
+
+//
+// should be called by host
+//
+
+void
+skc_grid_start(skc_grid_t const grid);
+
+void
+skc_grid_force(skc_grid_t const grid);
+
+//
+// should be called by the scheduler
+//
+
+void
+skc_grid_complete(skc_grid_t const grid);
+
+//
+//
+//
+
+#if 0
+//
+// delete when ready
+//
+skc_grid_t
+skc_grid_move(skc_grid_t         const grid,
+              skc_grid_state_e * const state,
+              skc_grid_t       * const addr,
+              void             * const data);
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/handle.h b/src/compute/skc/handle.h
new file mode 100644
index 0000000..3751b65
--- /dev/null
+++ b/src/compute/skc/handle.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "types.h"
+
+//
+// Add defensive high guard-bit flags to the opaque path and raster
+// handles. This is tested once and stripped down to a handle.
+//
+//   union skc_typed_handle
+//   {
+//     skc_uint   u32;
+//
+//     struct {
+//       skc_uint handle    : 30;
+//       skc_uint is_path   :  1;
+//       skc_uint is_raster :  1;
+//     };
+//     struct {
+//       skc_uint na        : 30;
+//       skc_uint type      :  2;
+//     };
+//   }
+//
+
+typedef enum skc_typed_handle_type_e
+{
+  SKC_TYPED_HANDLE_TYPE_IS_PATH   = 0x40000000,
+  SKC_TYPED_HANDLE_TYPE_IS_RASTER = 0x80000000
+} skc_typed_handle_type_e;
+  
+typedef skc_uint skc_typed_handle_t;
+typedef skc_uint skc_handle_t;
+
+//
+//
+//
+
+#define SKC_TYPED_HANDLE_MASK_TYPE     (SKC_TYPED_HANDLE_TYPE_IS_PATH | SKC_TYPED_HANDLE_TYPE_IS_RASTER)
+
+#define SKC_TYPED_HANDLE_TO_HANDLE(h)  ((h) & ~SKC_TYPED_HANDLE_MASK_TYPE)
+
+#define SKC_TYPED_HANDLE_IS_TYPE(h,t)  ((h) & (t))
+#define SKC_TYPED_HANDLE_IS_PATH(h)    ((h) & SKC_TYPED_HANDLE_TYPE_IS_PATH)
+#define SKC_TYPED_HANDLE_IS_RASTER(h)  ((h) & SKC_TYPED_HANDLE_TYPE_IS_RASTER)
+
+//
+//
+//
diff --git a/src/compute/skc/handle_pool_cl_12.c b/src/compute/skc/handle_pool_cl_12.c
new file mode 100644
index 0000000..65288c3
--- /dev/null
+++ b/src/compute/skc/handle_pool_cl_12.c
@@ -0,0 +1,752 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <stdio.h>
+#include <assert.h>
+
+//
+//
+//
+
+#include "common/cl/assert_cl.h"
+
+#include "block.h"
+#include "grid.h"
+#include "config_cl.h"
+#include "runtime_cl_12.h"
+
+//
+// FIXME -- these comments are now quite stale
+//
+//
+// HANDLE/ACQUIRE RELEASE
+//
+// The runtime vends handles just in case we decide to exploit shared
+// virtual memory.  But for most platforms and devices we will have a
+// pool of host-managed handles and on the device there will be a
+// table that maps the host handle to a device-managed memory block.
+//
+// HANDLE READINESS
+//
+// A host handle may reference a path or a raster which is not ready
+// for use further down the pipeline because it hasn't yet been
+// processed by the device.
+//
+// The simplest scheme for providing every handle a readiness state is
+// to build a map that that marks a new handle as being not-ready
+// while being processed by a particular grid id.  When the final
+// sub-pipeline grid responsible for the path or raster is complete,
+// then mark the handle as being ready and eventually return the grid
+// id back to the pool.  This can be performed on a separate thread.
+//
+// The side-benefit of this approach is that a handle's reference
+// count integral type can spare some bits for its associated grid id.
+//
+// A more memory-intensive approach uses a 64-bit epoch+grid key and
+// relies on the ~56 bits of epoch space to avoid any post
+// sub-pipeline status update by assuming that a handle and grid will
+// match or mismatch when queried.
+//
+
+#define SKC_HANDLE_REFCNT_HOST_BITS   (SKC_MEMBER_SIZE(union skc_handle_refcnt,h) * 8)
+#define SKC_HANDLE_REFCNT_DEVICE_BITS (SKC_MEMBER_SIZE(union skc_handle_refcnt,d) * 8)
+
+#define SKC_HANDLE_REFCNT_HOST_MAX    SKC_BITS_TO_MASK(SKC_HANDLE_REFCNT_HOST_BITS)
+#define SKC_HANDLE_REFCNT_DEVICE_MAX  SKC_BITS_TO_MASK(SKC_HANDLE_REFCNT_DEVICE_BITS)
+
+//
+//
+//
+
+static
+void
+skc_handle_reclaim_create(struct skc_runtime      * const runtime,
+                          struct skc_handle_pool  * const handle_pool,
+                          skc_handle_reclaim_type_e const reclaim_type,
+                          skc_device_kernel_id      const kernel_id)
+{
+  struct skc_handle_reclaim * const reclaim = handle_pool->reclaim + reclaim_type;
+
+  // init counters
+  reclaim->bih.rem   = 0;
+
+  // acquire kernel
+  reclaim->kernel    = skc_device_acquire_kernel(runtime->device,kernel_id);
+  reclaim->kernel_id = kernel_id;
+
+  // set default args
+  cl(SetKernelArg(reclaim->kernel,0,SKC_CL_ARG(runtime->block_pool.ids.drw)));
+  cl(SetKernelArg(reclaim->kernel,1,SKC_CL_ARG(runtime->block_pool.blocks.drw)));
+  cl(SetKernelArg(reclaim->kernel,2,SKC_CL_ARG(runtime->block_pool.atomics.drw)));
+  cl(SetKernelArg(reclaim->kernel,3,SKC_CL_ARG(runtime->config->block_pool.ring_mask)));
+  cl(SetKernelArg(reclaim->kernel,4,SKC_CL_ARG(runtime->handle_pool.map.drw)));
+}
+
+static
+void
+skc_handle_reclaim_dispose(struct skc_runtime      * const runtime,
+                           skc_handle_reclaim_type_e const reclaim_type)
+{
+  struct skc_handle_reclaim * const reclaim = runtime->handle_pool.reclaim + reclaim_type;
+
+  cl(ReleaseKernel(reclaim->kernel));
+}
+
+//
+//
+//
+
+#define SKC_HANDLE_POOL_BLOCKS_PAD  8
+
+void
+skc_handle_pool_create(struct skc_runtime     * const runtime,
+                       struct skc_handle_pool * const handle_pool,
+                       skc_uint                 const size,
+                       skc_uint                 const width,
+                       skc_uint                 const recs)
+{
+  skc_uint const blocks         = (size + width - 1) / width;
+  skc_uint const blocks_padded  = blocks + SKC_HANDLE_POOL_BLOCKS_PAD;
+  skc_uint const handles        = blocks        * width;
+  skc_uint const handles_padded = blocks_padded * width;
+  skc_uint const recs_padded    = recs + 2; // one for pointer and one for head node
+
+  skc_extent_pdrw_alloc(runtime,&handle_pool->map,handles * sizeof(skc_block_id_t));
+
+  handle_pool->handle.indices   = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,handles_padded * sizeof(*handle_pool->handle.indices));
+  handle_pool->handle.refcnts   = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,handles        * sizeof(*handle_pool->handle.refcnts));
+  handle_pool->block.indices    = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,blocks_padded  * sizeof(*handle_pool->block.indices));
+  handle_pool->recs             = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,recs_padded    * sizeof(*handle_pool->recs));
+
+  // initialize handles and refcnts
+  for (skc_uint ii=0; ii<handles; ii++)
+    handle_pool->handle.indices[ii] = ii;
+
+  for (skc_uint ii=0; ii<handles; ii++)
+    handle_pool->handle.refcnts[ii].hd = 0;
+
+  handle_pool->handle.count     = handles;
+
+  // initialize block accounting
+  for (skc_uint ii=0; ii<blocks_padded; ii++)
+    handle_pool->block.indices[ii] = ii;
+
+  handle_pool->block.count      = blocks_padded;
+  handle_pool->block.width      = width;
+
+  handle_pool->block.tos        = blocks; // pop = pre-decrement  / push = post-increment
+  handle_pool->block.bos        = blocks; // pop = post-increment / push = pre-decrement
+
+  // initialize recs -- first two elements are interpreted differently
+  handle_pool->recs[0].runtime  = runtime;
+  handle_pool->recs[1]          = (union skc_handle_reclaim_rec){ .rem = recs, .head = 2 };
+
+  for (skc_uint ii=2; ii<recs_padded; ii++)
+    handle_pool->recs[ii] = (union skc_handle_reclaim_rec){ .index = ii, .next = ii+1 };
+
+  handle_pool->recs[recs_padded-1].next = SKC_UINT_MAX;
+
+  // initialize acquire
+  handle_pool->acquire.rem = 0;
+
+  // create reclaimers
+  skc_handle_reclaim_create(runtime,
+                            handle_pool,
+                            SKC_HANDLE_RECLAIM_TYPE_PATH,
+                            SKC_DEVICE_KERNEL_ID_PATHS_RECLAIM);
+
+  skc_handle_reclaim_create(runtime,
+                            handle_pool,
+                            SKC_HANDLE_RECLAIM_TYPE_RASTER,
+                            SKC_DEVICE_KERNEL_ID_RASTERS_RECLAIM);
+}
+
+//
+//
+//
+
+void
+skc_handle_pool_dispose(struct skc_runtime     * const runtime,
+                        struct skc_handle_pool * const handle_pool)
+{
+  skc_handle_reclaim_dispose(runtime,SKC_HANDLE_RECLAIM_TYPE_RASTER);
+  skc_handle_reclaim_dispose(runtime,SKC_HANDLE_RECLAIM_TYPE_PATH);
+
+  skc_runtime_host_perm_free(runtime,handle_pool->recs);
+  skc_runtime_host_perm_free(runtime,handle_pool->block.indices);
+  skc_runtime_host_perm_free(runtime,handle_pool->handle.refcnts);
+  skc_runtime_host_perm_free(runtime,handle_pool->handle.indices);
+
+  skc_extent_pdrw_free(runtime,&handle_pool->map);
+}
+
+//
+//
+//
+
+static
+skc_uint
+skc_handle_pool_block_readable_pop(struct skc_runtime     * const runtime,
+                                   struct skc_handle_pool * const handle_pool)
+{
+  SKC_SCHEDULER_WAIT_WHILE(runtime->scheduler,handle_pool->block.tos == 0);
+
+  skc_uint const index = handle_pool->block.indices[--handle_pool->block.tos];
+
+#if 0
+  skc_handle_t * handles = handle_pool->handle.indices + (index + 1) * handle_pool->block.width;
+  for (skc_uint ii=0; ii<handle_pool->block.width; ii++)
+    printf("R-: %u\n",*--handles);
+#endif
+
+  return index;
+}
+
+static
+void
+skc_handle_pool_block_readable_push(struct skc_handle_pool * const handle_pool,
+                                    skc_uint                 const index)
+{
+  handle_pool->block.indices[handle_pool->block.tos++] = index;
+
+#if 0
+  skc_handle_t * handles = handle_pool->handle.indices + (index + 1) * handle_pool->block.width;
+  for (skc_uint ii=0; ii<handle_pool->block.width; ii++)
+    printf("R+: %u\n",*--handles);
+#endif
+}
+
+
+static
+skc_uint
+skc_handle_pool_block_writable_pop(struct skc_runtime     * const runtime,
+                                   struct skc_handle_pool * const handle_pool)
+{
+  SKC_SCHEDULER_WAIT_WHILE(runtime->scheduler,handle_pool->block.bos == handle_pool->block.count);
+
+  return handle_pool->block.indices[handle_pool->block.bos++];
+}
+
+static
+void
+skc_handle_pool_block_writable_push(struct skc_handle_pool * const handle_pool,
+                                    skc_uint                 const block_idx)
+{
+  handle_pool->block.indices[--handle_pool->block.bos] = block_idx;
+}
+
+//
+// May need to acquire the path or raster handle *early* just to be
+// sure one exists
+//
+
+skc_handle_t
+skc_runtime_handle_device_acquire(struct skc_runtime * const runtime)
+{
+  struct skc_handle_pool * const handle_pool = &runtime->handle_pool;
+
+  // acquire a block of handles at a time
+  if (handle_pool->acquire.rem == 0)
+    {
+      skc_uint const block_idx = skc_handle_pool_block_readable_pop(runtime,handle_pool);
+
+      handle_pool->acquire.block   = block_idx;
+      handle_pool->acquire.rem     = handle_pool->block.width;
+      handle_pool->acquire.handles = handle_pool->handle.indices + (block_idx + 1) * handle_pool->block.width;
+    }
+
+  // load handle from next block slot
+  skc_uint     const rem    =  --handle_pool->acquire.rem;
+  skc_handle_t const handle = *--handle_pool->acquire.handles;
+
+  // initialize refcnt for handle
+  handle_pool->handle.refcnts[handle] = (union skc_handle_refcnt){ .h = 1, .d = 1 };
+
+  // if this was the last handle in the block then move the block id
+  // to the reclamation stack to be used as a scratchpad
+  if (rem == 0) {
+    skc_handle_pool_block_writable_push(handle_pool,handle_pool->acquire.block);
+  }
+
+  return handle;
+}
+
+//
+//
+//
+
+static
+void
+skc_handle_reclaim_completion(union skc_handle_reclaim_rec * const recN)
+{
+  // get root rec which contains pointer to runtime
+  union skc_handle_reclaim_rec * const rec0 = recN - recN->index;
+  union skc_handle_reclaim_rec * const rec1 = rec0 + 1;
+
+  // return block for reading
+  skc_handle_pool_block_readable_push(&rec0->runtime->handle_pool,recN->block);
+
+  // recN is new head of list
+  recN->next = rec1->head;
+  rec1->head = recN->index;
+  rec1->rem += 1;
+}
+
+static
+void
+skc_handle_reclaim_cb(cl_event event, cl_int status, union skc_handle_reclaim_rec * const recN)
+{
+  SKC_CL_CB(status);
+
+  union skc_handle_reclaim_rec * const rec0 = recN - recN->index;
+
+  // as quickly as possible, enqueue next stage in pipeline to context command scheduler
+  SKC_SCHEDULER_SCHEDULE(rec0->runtime->scheduler,skc_handle_reclaim_completion,recN);
+}
+
+//
+// FIXME -- is there an issue launching on the host thread?
+//
+
+static
+void
+skc_handle_reclaim_launch(struct skc_runtime            * const runtime,
+                          struct skc_handle_pool        * const handle_pool,
+                          struct skc_handle_reclaim     * const reclaim,
+                          union  skc_handle_reclaim_rec * const recN)
+{
+  cl(SetKernelArg(reclaim->kernel,
+                  5,
+                  handle_pool->block.width * sizeof(skc_handle_t),
+                  reclaim->bih.handles));
+
+  // acquire a cq
+  cl_command_queue cq = skc_runtime_acquire_cq_in_order(runtime);
+
+  cl_event complete;
+
+  // the kernel grid is shaped by the target device
+  skc_device_enqueue_kernel(runtime->device,
+                            reclaim->kernel_id,
+                            cq,
+                            reclaim->kernel,
+                            handle_pool->block.width,
+                            0,NULL,&complete);
+
+  cl(SetEventCallback(complete,CL_COMPLETE,skc_handle_reclaim_cb,recN));
+  cl(ReleaseEvent(complete));
+
+  // kickstart kernel execution
+  cl(Flush(cq));
+
+  // release the cq
+  skc_runtime_release_cq_in_order(runtime,cq);
+}
+
+//
+// reclaim a handle
+//
+
+static
+union skc_handle_reclaim_rec *
+skc_handle_acquire_reclaim_rec(struct skc_runtime     * const runtime,
+                               struct skc_handle_pool * const handle_pool)
+{
+  union skc_handle_reclaim_rec * const rec1 = handle_pool->recs + 1;
+
+  SKC_SCHEDULER_WAIT_WHILE(runtime->scheduler,rec1->rem == 0);
+
+  union skc_handle_reclaim_rec * const recN = handle_pool->recs + rec1->head;
+
+  rec1->head = recN->next;
+  rec1->rem -= 1;
+
+  // fprintf(stderr,"rec1->rem = %u\n",rec1->rem);
+
+  return recN;
+}
+
+static
+void
+skc_runtime_device_reclaim(struct skc_runtime        * const runtime,
+                           struct skc_handle_pool    * const handle_pool,
+                           struct skc_handle_reclaim * const reclaim,
+                           skc_handle_t                const handle)
+{
+  // grab a new block?
+  if (reclaim->bih.rem == 0)
+    {
+      skc_uint const block_idx = skc_handle_pool_block_writable_pop(runtime,handle_pool);
+
+      reclaim->bih.block   = block_idx;
+      reclaim->bih.rem     = handle_pool->block.width;
+      reclaim->bih.handles = handle_pool->handle.indices + (block_idx + 1) * handle_pool->block.width;
+    }
+
+  // store handle -- handle's refcnt was already set to {0:0}
+  *--reclaim->bih.handles = handle;
+
+  // if block is full then launch reclamation kernel
+  if (--reclaim->bih.rem == 0)
+    {
+      union skc_handle_reclaim_rec * recN = skc_handle_acquire_reclaim_rec(runtime,handle_pool);
+
+      recN->block = reclaim->bih.block;
+
+      skc_handle_reclaim_launch(runtime,handle_pool,reclaim,recN);
+    }
+}
+
+//
+// Validate host-provided handles before retaining.
+//
+// Retain validation consists of:
+//
+//   - correct handle type
+//   - handle is in range of pool
+//   - host refcnt is not zero
+//   - host refcnt is not at the maximum value
+//
+// After validation, retain the handles for the host
+//
+
+static
+skc_err
+skc_runtime_handle_host_validated_retain(struct skc_runtime       * const runtime,
+                                         skc_typed_handle_type_e    const handle_type,
+                                         skc_typed_handle_t const * const typed_handles,
+                                         uint32_t                   const count)
+{
+  //
+  // FIXME -- test to make sure handles aren't completely out of range integers
+  //
+
+  union skc_handle_refcnt * const refcnts = runtime->handle_pool.handle.refcnts;
+
+  for (skc_uint ii=0; ii<count; ii++)
+    {
+      skc_typed_handle_t const typed_handle = typed_handles[ii];
+
+      if (!SKC_TYPED_HANDLE_IS_TYPE(typed_handle,handle_type))
+        {
+          return SKC_ERR_HANDLE_INVALID;
+        }
+      else
+        {
+          skc_handle_t const handle = SKC_TYPED_HANDLE_TO_HANDLE(typed_handle);
+
+          if (handle >= runtime->handle_pool.handle.count)
+            {
+              return SKC_ERR_HANDLE_INVALID;
+            }
+          else
+            {
+              union skc_handle_refcnt * const refcnt_ptr = refcnts + handle;
+              skc_uint                  const host       = refcnt_ptr->h;
+
+              if (host == 0)
+                {
+                  return SKC_ERR_HANDLE_INVALID;
+                }
+              else if (host == SKC_HANDLE_REFCNT_HOST_MAX)
+                {
+                  return SKC_ERR_HANDLE_OVERFLOW;
+                }
+            }
+        }
+    }
+
+  //
+  // all the handles validated, so retain them all..
+  //
+  for (skc_uint ii=0; ii<count; ii++)
+    refcnts[SKC_TYPED_HANDLE_TO_HANDLE(typed_handles[ii])].h++;
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
+
+skc_err
+skc_runtime_path_host_retain(struct skc_runtime * const runtime,
+                             skc_path_t   const *       paths,
+                             uint32_t                   count)
+{
+  return skc_runtime_handle_host_validated_retain(runtime,
+                                                  SKC_TYPED_HANDLE_TYPE_IS_PATH,
+                                                  paths,
+                                                  count);
+}
+
+skc_err
+skc_runtime_raster_host_retain(struct skc_runtime * const runtime,
+                               skc_path_t   const *       rasters,
+                               uint32_t                   count)
+{
+  return skc_runtime_handle_host_validated_retain(runtime,
+                                                  SKC_TYPED_HANDLE_TYPE_IS_RASTER,
+                                                  rasters,
+                                                  count);
+}
+
+//
+//
+//
+
+skc_err
+skc_runtime_raster_host_flush(struct skc_runtime * const runtime,
+                               skc_raster_t const *       rasters,
+                               uint32_t                   count)
+{
+  skc_grid_deps_force(runtime->deps,rasters,count);
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_runtime_path_host_flush(struct skc_runtime * const runtime,
+                            skc_path_t   const *       paths,
+                            uint32_t                   count)
+{
+  skc_grid_deps_force(runtime->deps,paths,count);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+// Validate host-provided handles before releasing.
+//
+// Release validation consists of:
+//
+//   - correct handle type
+//   - handle is in range of pool
+//   - host refcnt is not zero
+//
+// After validation, release the handles for the host
+//
+
+static
+skc_err
+skc_runtime_host_validated_release(struct skc_runtime       * const runtime,
+                                   skc_typed_handle_type_e    const type,
+                                   skc_handle_reclaim_type_e  const reclaim_type,
+                                   skc_typed_handle_t const * const handles,
+                                   uint32_t                   const count)
+{
+  struct skc_handle_pool   * const handle_pool = &runtime->handle_pool;
+  union  skc_handle_refcnt * const refcnts     = handle_pool->handle.refcnts;
+
+  for (skc_uint ii=0; ii<count; ii++)
+    {
+      skc_typed_handle_t const typed_handle = handles[ii];
+
+      if (!SKC_TYPED_HANDLE_IS_TYPE(typed_handle,type))
+        {
+          return SKC_ERR_HANDLE_INVALID;
+        }
+      else
+        {
+          skc_handle_t const handle = SKC_TYPED_HANDLE_TO_HANDLE(typed_handle);
+
+          if (handle >= handle_pool->handle.count)
+            {
+              return SKC_ERR_HANDLE_INVALID;
+            }
+          else
+            {
+              union skc_handle_refcnt * const refcnt_ptr = refcnts + handle;
+              skc_uint                  const host       = refcnt_ptr->h;
+
+              if (host == 0)
+                {
+                  return SKC_ERR_HANDLE_INVALID;
+                }
+            }
+        }
+    }
+
+  //
+  // all the handles validated, so release them all..
+  //
+  struct skc_handle_reclaim * const reclaim = handle_pool->reclaim + reclaim_type;
+
+  for (skc_uint ii=0; ii<count; ii++)
+    {
+      skc_handle_t              const handle     = SKC_TYPED_HANDLE_TO_HANDLE(handles[ii]);
+      union skc_handle_refcnt * const refcnt_ptr = refcnts + handle;
+      union skc_handle_refcnt         refcnt     = *refcnt_ptr;
+
+      refcnt.h   -= 1;
+      *refcnt_ptr = refcnt;
+
+      if (refcnt.hd == 0) {
+        skc_runtime_device_reclaim(runtime,handle_pool,reclaim,handle);
+      }
+    }
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
+
+skc_err
+skc_runtime_path_host_release(struct skc_runtime * const runtime,
+                              skc_path_t   const *       paths,
+                              uint32_t                   count)
+{
+  return skc_runtime_host_validated_release(runtime,
+                                            SKC_TYPED_HANDLE_TYPE_IS_PATH,
+                                            SKC_HANDLE_RECLAIM_TYPE_PATH,
+                                            paths,
+                                            count);
+}
+
+skc_err
+skc_runtime_raster_host_release(struct skc_runtime * const runtime,
+                                skc_raster_t const *       rasters,
+                                uint32_t                   count)
+{
+  return skc_runtime_host_validated_release(runtime,
+                                            SKC_TYPED_HANDLE_TYPE_IS_RASTER,
+                                            SKC_HANDLE_RECLAIM_TYPE_RASTER,
+                                            rasters,
+                                            count);
+}
+
+//
+// Validate host-provided handles before retaining on the device.
+//
+//   - correct handle type
+//   - handle is in range of pool
+//   - host refcnt is not zero
+//   - device refcnt is not at the maximum value
+//
+
+skc_err
+skc_runtime_handle_device_validate_retain(struct skc_runtime       * const runtime,
+                                          skc_typed_handle_type_e    const type,
+                                          skc_typed_handle_t const *       handles,
+                                          uint32_t                         count)
+{
+  union skc_handle_refcnt * const refcnts = runtime->handle_pool.handle.refcnts;
+
+  while (count-- > 0)
+    {
+      skc_typed_handle_t const typed_handle = *handles++;
+
+      if (!SKC_TYPED_HANDLE_IS_TYPE(typed_handle,type))
+        {
+          return SKC_ERR_HANDLE_INVALID;
+        }
+      else
+        {
+          skc_handle_t const handle = SKC_TYPED_HANDLE_TO_HANDLE(typed_handle);
+
+          if (handle >= runtime->handle_pool.handle.count)
+            {
+              return SKC_ERR_HANDLE_INVALID;
+            }
+          else
+            {
+              union skc_handle_refcnt * const refcnt_ptr = refcnts + handle;
+              union skc_handle_refcnt         refcnt     = *refcnt_ptr;
+
+              if (refcnt.h == 0)
+                {
+                  return SKC_ERR_HANDLE_INVALID;
+                }
+              else if (refcnt.d == SKC_HANDLE_REFCNT_DEVICE_MAX)
+                {
+                  return SKC_ERR_HANDLE_OVERFLOW;
+                }
+            }
+        }
+    }
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+// After validation, retain the handles for the device
+//
+
+void
+skc_runtime_handle_device_retain(struct skc_runtime * const runtime,
+                                 skc_handle_t const *       handles,
+                                 uint32_t                   count)
+{
+  union skc_handle_refcnt * const refcnts = runtime->handle_pool.handle.refcnts;
+
+  while (count-- > 0)
+    refcnts[SKC_TYPED_HANDLE_TO_HANDLE(*handles++)].d++;
+}
+
+//
+// Release the device-held handles -- no validation required!
+//
+
+static
+void
+skc_runtime_handle_device_release(struct skc_runtime      * const runtime,
+                                  skc_handle_reclaim_type_e const reclaim_type,
+                                  skc_handle_t      const *       handles,
+                                  skc_uint                        count)
+{
+  struct skc_handle_pool    * const handle_pool = &runtime->handle_pool;
+  union  skc_handle_refcnt  * const refcnts     = handle_pool->handle.refcnts;
+  struct skc_handle_reclaim * const reclaim     = handle_pool->reclaim + reclaim_type;
+
+  while (count-- > 0) {
+    skc_handle_t              const handle     = *handles++;
+    union skc_handle_refcnt * const refcnt_ptr = refcnts + handle;
+    union skc_handle_refcnt         refcnt     = *refcnt_ptr;
+
+    refcnt.d   -= 1;
+    *refcnt_ptr = refcnt;
+
+#if 0
+    printf("%8u = { %u, %u }\n",handle,refcnt.h,refcnt.d);
+#endif
+
+    if (refcnt.hd == 0) {
+      skc_runtime_device_reclaim(runtime,handle_pool,reclaim,handle);
+    }
+  }
+}
+
+//
+//
+//
+
+void
+skc_runtime_path_device_release(struct skc_runtime * const runtime,
+                                skc_handle_t const *       handles,
+                                skc_uint                   count)
+{
+  skc_runtime_handle_device_release(runtime,SKC_HANDLE_RECLAIM_TYPE_PATH,handles,count);
+}
+
+void
+skc_runtime_raster_device_release(struct skc_runtime * const runtime,
+                                  skc_handle_t const *       handles,
+                                  skc_uint                   count)
+{
+  skc_runtime_handle_device_release(runtime,SKC_HANDLE_RECLAIM_TYPE_RASTER,handles,count);
+}
+
+//
+//
+//
diff --git a/src/compute/skc/handle_pool_cl_12.h b/src/compute/skc/handle_pool_cl_12.h
new file mode 100644
index 0000000..4fefae3
--- /dev/null
+++ b/src/compute/skc/handle_pool_cl_12.h
@@ -0,0 +1,177 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "macros.h"
+#include "handle.h"
+#include "extent_cl_12.h"
+#include "device_cl_12.h"
+
+//
+// FIXME -- THIS DOCUMENTATION IS STALE NOW THAT A REFERENCE COUNT REP
+// IS A {HOST:DEVICE} PAIR.
+//
+// Host-side handle pool
+//
+// The bulk size of the three extents is currently 6 bytes of overhead
+// per number of host handles.  The number of host handles is usually
+// less than the number of blocks in the pool.  Note that the maximum
+// number of blocks is 2^27.
+//
+// A practical instantiation might provide a combined 2^20 path and
+// raster host handles. This would occupy 6 MB of host RAM for the
+// 32-bit handle, 8-bit reference count and 8-bit handle-to-grid map.
+//
+// Also note that we could use isolated/separate path and raster block
+// pools. Worst case, this would double the memory footprint of SKC.
+//
+// Host-side handle reference count
+//
+//   [0      ] : release
+//   [1..UMAX] : retain
+//
+// In a garbage-collected environment we might want to rely on an
+// existing mechanism for determing whether a handle is live.
+//
+// Otherwise, we probably want to have a 16 or 32-bit ref count.
+//
+// The handle reference count is defensive and will not allow the host
+// to underflow a handle that's still retained by the pipeline.
+//
+// The single reference counter is split into host and device counts.
+//
+
+union skc_handle_refcnt
+{
+  skc_ushort  hd; // host and device
+
+  struct {
+    skc_uchar h;  // host
+    skc_uchar d;  // device
+  };
+};
+
+SKC_STATIC_ASSERT(SKC_MEMBER_SIZE(union skc_handle_refcnt,hd) ==
+                  SKC_MEMBER_SIZE(union skc_handle_refcnt,h) +
+                  SKC_MEMBER_SIZE(union skc_handle_refcnt,d));
+
+//
+//
+//
+
+struct skc_handle_bih
+{
+  skc_uint       block;
+  skc_uint       rem;
+  skc_handle_t * handles;
+};
+
+struct skc_handle_reclaim
+{
+  struct skc_handle_bih bih;
+
+  cl_kernel             kernel;
+  skc_device_kernel_id  kernel_id;
+};
+
+union skc_handle_reclaim_rec
+{
+  // ELEMENT  0
+  struct skc_runtime * runtime;
+  
+  // ELEMENT  1
+  struct {
+    skc_uint           rem;   // # of available records
+    skc_uint           head;  // index of first record
+  };
+
+  // ELEMENTS 2+
+  struct {
+    skc_uint           index; // index of this record -- never modified
+    union {
+      skc_uint         next;  // index of next record
+      skc_uint         block; // block index of reclaimed handles
+    };
+  };
+};
+
+SKC_STATIC_ASSERT(sizeof(union skc_handle_reclaim_rec) == sizeof(skc_uint2));
+
+//
+//
+//
+
+typedef enum skc_handle_reclaim_type_e {
+
+  SKC_HANDLE_RECLAIM_TYPE_PATH,
+  SKC_HANDLE_RECLAIM_TYPE_RASTER,
+
+  SKC_HANDLE_RECLAIM_TYPE_COUNT
+
+} skc_handle_reclaim_type_e;
+
+struct skc_handle_pool
+{
+  //
+  // FIXME -- should we be pedantic and make these always-host-side
+  // allocations "extents" as well?  I think it's OK not being an
+  // extent structure for now and is mostly consistent with the rest
+  // of the code.
+  //
+  // FIXME -- the cbs[] array is a little idiosyncratic but the intent
+  // is to avoid storing the 64-bit backpointer inside of every single
+  // record.  This can be harmonized later.  Note that only a few
+  // hundred outstanding callbacks would represent many many subgroups
+  // of work and would fully occupy the GPU (if we allow it).
+  //
+  //
+  struct skc_extent_pdrw         map;     // device-managed extent mapping a host handle to device block id
+
+  struct {
+    skc_handle_t               * indices; // array of individual host handles -- fragmented into blocks
+    union skc_handle_refcnt    * refcnts; // array of reference counts indexed by an individual handle
+    skc_uint                     count;
+  } handle;
+
+  struct {
+    skc_uint                   * indices; // stack of indices to fixed-size blocks of host handles
+    skc_uint                     count;   // number of handles -- valid from [0,size)
+    skc_uint                     width;   // width of a fixed-size block of handles
+    skc_uint                     tos;     // grows upward   / push++ / --pop / # fixed-size blocks for reading
+    skc_uint                     bos;     // grows downward / --push / pop++ / # fixed-size blocks for writing
+  } block;
+
+  union skc_handle_reclaim_rec * recs;    // array of reclaim records
+
+  struct skc_handle_bih          acquire;
+  struct skc_handle_reclaim      reclaim[SKC_HANDLE_RECLAIM_TYPE_COUNT];
+};
+
+//
+//
+//
+
+void
+skc_handle_pool_create(struct skc_runtime     * const runtime,
+                       struct skc_handle_pool * const handle_pool,
+                       skc_uint                 const size,
+                       skc_uint                 const width,
+                       skc_uint                 const recs);
+
+void
+skc_handle_pool_dispose(struct skc_runtime     * const runtime,
+                        struct skc_handle_pool * const handle_pool);
+
+//
+//
+//
diff --git a/src/compute/skc/interop.c b/src/compute/skc/interop.c
new file mode 100644
index 0000000..6697bb7
--- /dev/null
+++ b/src/compute/skc/interop.c
@@ -0,0 +1,629 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <glad/glad.h>
+#include <glfw/glfw3.h>
+
+//
+//
+//
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <math.h>
+
+//
+//
+//
+
+#include "common/cl/assert_cl.h"
+#include "types.h"
+
+//
+//
+//
+
+#include "interop.h"
+#include "context.h"
+#include "runtime_cl_12.h"
+
+//
+//
+//
+
+#include "svg2skc/transform_stack.h"
+
+//
+//
+//
+
+#if 1
+#define SKC_IMAGE_FORMAT GL_RGBA8
+#else
+#define SKC_IMAGE_FORMAT GL_RGBA16F
+#endif
+
+//
+//
+//
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+//
+//
+//
+
+struct skc_interop_fb
+{
+  cl_context context;
+
+  GLuint     fbo;
+  GLuint     rbo;
+
+  cl_mem     mem;
+
+  int        width;
+  int        height;
+
+  bool       is_srgb;
+  bool       is_vsync_on;
+  bool       is_fullscreen;
+  bool       is_iconified;
+  bool       is_resized;
+  bool       is_spinning;
+  bool       is_info;
+
+  skc_float  scale;
+  skc_float2 translate;
+  float      rotate_theta;
+};
+
+static struct skc_interop_fb fb =
+  {
+    .mem           = NULL,
+
+    .is_srgb       = true,
+    .is_vsync_on   = false,
+    .is_fullscreen = false,
+    .is_iconified  = false,
+    .is_resized    = true,
+    .is_spinning   = false,
+    .is_info       = false,
+
+    .scale         = 1.0f,
+    .translate     = { 0.0f, 0.0f },
+    .rotate_theta  = 0.0f
+  };
+
+//
+// FPS COUNTER FROM HERE:
+//
+// http://antongerdelan.net/opengl/glcontext2.html
+//
+
+static
+void
+skc_interop_fps(GLFWwindow * window)
+{
+  if (fb.is_fullscreen)
+    return;
+
+  // static fps counters
+  static double stamp_prev  = 0.0;
+  static int    frame_count = 0;
+
+  // locals
+  double const  stamp_curr  = glfwGetTime();
+  double const  elapsed     = stamp_curr - stamp_prev;
+
+  if (elapsed >= 0.5)
+    {
+      stamp_prev = stamp_curr;
+
+      double const fps = (double)frame_count / elapsed;
+
+      char tmp[64];
+
+      sprintf_s(tmp,64,"(%d x %d) - VSync %s - sRGB %s - FPS: %.2f",
+                fb.width,fb.height,
+                fb.is_vsync_on ? "ON"      : "OFF",
+                fb.is_srgb     ? "ENABLED" : "DISABLED",
+                fps);
+
+      glfwSetWindowTitle(window,tmp);
+
+      frame_count = 0;
+    }
+
+  frame_count++;
+}
+
+//
+// INITIALIZE GLFW/GLAD
+//
+
+static
+void
+skc_interop_error_callback(int error, char const * description)
+{
+  fputs(description,stderr);
+}
+
+//
+//
+//
+
+static
+void
+skc_interop_iconify_callback(GLFWwindow * window, int iconified)
+{
+  fb.is_iconified = iconified;
+}
+
+//
+//
+//
+
+static
+void
+skc_interop_key_callback(GLFWwindow * window, int key, int scancode, int action, int mods)
+{
+  if (action == GLFW_RELEASE)
+    return;
+
+  switch (key)
+    {
+    case GLFW_KEY_EQUAL:
+      fb.rotate_theta = 0.0f;
+      break;
+
+    case GLFW_KEY_I:
+      fb.is_info = true;
+      break;
+
+    case GLFW_KEY_R:
+      fb.is_spinning ^= true;
+      break;
+
+    case GLFW_KEY_S:
+      fb.is_srgb ^= true;
+      if (fb.is_srgb)
+        glEnable(GL_FRAMEBUFFER_SRGB);
+      else
+        glDisable(GL_FRAMEBUFFER_SRGB);
+      break;
+
+    case GLFW_KEY_V:
+      fb.is_vsync_on ^= true;
+      glfwSwapInterval(fb.is_vsync_on ? 1 : 0);
+      break;
+
+    case GLFW_KEY_W:
+      glfwSetWindowSize(window,1024,1024);
+      break;
+
+    case GLFW_KEY_ESCAPE:
+      glfwSetWindowShouldClose(window,GL_TRUE);
+      break;
+    }
+}
+
+static
+void
+skc_interop_window_size_callback(GLFWwindow * window, int width, int height)
+{
+  fb.width      = width;
+  fb.height     = height;
+  fb.is_resized = true;
+
+#if 0
+  skc_render_kernel_set_clip(0,0,width,height);
+#endif
+}
+
+static
+void
+skc_interop_scale(double const scale_offset)
+{
+#define SKC_SCALE_FACTOR 1.05
+
+  static double scale_exp = 0.0;
+
+  scale_exp += scale_offset;
+  fb.scale   = (float)pow(SKC_SCALE_FACTOR,scale_exp);
+}
+
+static
+void
+skc_interop_scroll_callback(GLFWwindow * window, double xoffset, double yoffset)
+{
+  bool const ctrl =
+    (glfwGetKey(window,GLFW_KEY_LEFT_CONTROL)  == GLFW_PRESS) ||
+    (glfwGetKey(window,GLFW_KEY_RIGHT_CONTROL) == GLFW_PRESS);
+
+  if (!ctrl)
+    return;
+
+  skc_interop_scale(yoffset);
+}
+
+static
+void
+skc_interop_translate(float const dx, float const dy)
+{
+  float const dx_scaled = dx / fb.scale;
+  float const dy_scaled = dy / fb.scale;
+
+  float const cos_theta = cosf(fb.rotate_theta); // replace with cospi if available
+  float const sin_theta = sinf(fb.rotate_theta); // replace with sinpi if available
+
+  fb.translate.x += dx_scaled*cos_theta + dy_scaled*sin_theta;
+  fb.translate.y += dy_scaled*cos_theta - dx_scaled*sin_theta;
+}
+
+static
+void
+skc_interop_cursor_position_callback(GLFWwindow * window, double x, double y)
+{
+  int const state = glfwGetMouseButton(window,GLFW_MOUSE_BUTTON_LEFT);
+
+  static bool  is_mouse_dragging = false;
+  static float x_prev=0.0, y_prev=0.0;
+
+  float const mx = (float)x;
+  float const my = (float)y;
+
+  if (state == GLFW_PRESS)
+    {
+      if (is_mouse_dragging)
+        {
+          const bool ctrl =
+            (glfwGetKey(window,GLFW_KEY_LEFT_CONTROL)  == GLFW_PRESS) ||
+            (glfwGetKey(window,GLFW_KEY_RIGHT_CONTROL) == GLFW_PRESS);
+
+          if (ctrl)
+            {
+              float const cx  = 0.5f * fb.width;
+              float const cy  = 0.5f * fb.height;
+
+              // find angle between mouse and center
+              float const vx  = x_prev - cx;
+              float const vy  = y_prev - cy;
+
+              float const wx  = mx - cx;
+              float const wy  = my - cy;
+
+              float const len = sqrtf((vx*vx + vy*vy) * (wx*wx + wy*wy));
+
+              if (len > 0.0f)
+                {
+                  float const dot = vx*wx + vy*wy;
+                  float const da  = acosf(dot / len);
+
+                  if (vx*wy - vy*wx >= 0.0f)
+                    fb.rotate_theta += da;
+                  else
+                    fb.rotate_theta -= da;
+
+                  fb.rotate_theta = fmodf(fb.rotate_theta,(float)(M_PI*2.0));
+                }
+            }
+          else
+            {
+              skc_interop_translate(mx - x_prev,
+                                    my - y_prev);
+            }
+        }
+      else
+        {
+          is_mouse_dragging = true;
+        }
+
+      x_prev = mx;
+      y_prev = my;
+    }
+  else
+    {
+      is_mouse_dragging = false;
+    }
+}
+
+//
+//
+//
+
+static
+void
+skc_interop_resize()
+{
+  fb.is_resized = false;
+
+  // release the image2d
+  if (fb.mem != NULL)
+    cl(ReleaseMemObject(fb.mem));
+
+  // resize rbo
+  glNamedRenderbufferStorage(fb.rbo,
+                             SKC_IMAGE_FORMAT,
+                             fb.width,
+                             fb.height);
+
+  // attach rbo to fbo
+  glNamedFramebufferRenderbuffer(fb.fbo,
+                                 GL_COLOR_ATTACHMENT0,
+                                 GL_RENDERBUFFER,
+                                 fb.rbo);
+  //
+  //
+  //
+  cl_int cl_err;
+
+  fb.mem = clCreateFromGLRenderbuffer(fb.context,
+                                      CL_MEM_WRITE_ONLY,
+                                      fb.rbo,
+                                      &cl_err); cl_ok(cl_err);
+  //
+  // for debugging porpoises!
+  //
+  cl_image_format format;
+
+  cl(GetImageInfo(fb.mem,
+                  CL_IMAGE_FORMAT,
+                  sizeof(format),
+                  &format,
+                  NULL));
+}
+
+//
+//
+//
+
+static
+void
+skc_interop_acquire()
+{
+  // frame buffer object
+  glCreateFramebuffers(1,&fb.fbo);
+
+  // render buffer object w/a color buffer
+  glCreateRenderbuffers(1,&fb.rbo);
+
+  // size rbo
+  glNamedRenderbufferStorage(fb.rbo,
+                             SKC_IMAGE_FORMAT,
+                             fb.width,
+                             fb.height);
+
+  // attach rbo to fbo
+  glNamedFramebufferRenderbuffer(fb.fbo,
+                                 GL_COLOR_ATTACHMENT0,
+                                 GL_RENDERBUFFER,
+                                 fb.rbo);
+}
+
+void
+skc_interop_register(skc_context_t context)
+{
+  fb.context = context->runtime->cl.context;
+}
+
+//
+//
+//
+
+void
+skc_interop_init(GLFWwindow * * window)
+{
+  //
+  // INITIALIZE GLFW/GLAD
+  //
+  glfwSetErrorCallback(skc_interop_error_callback);
+
+  if (!glfwInit())
+    exit(EXIT_FAILURE);
+
+  GLFWmonitor       * const primary = glfwGetPrimaryMonitor();
+  GLFWvidmode const * const mode    = glfwGetVideoMode(primary);
+
+  if (fb.is_fullscreen)
+    {
+      fb.width  = mode->width;
+      fb.height = mode->height;
+    }
+  else
+    {
+      fb.width  = 1600;
+      fb.height = 1024;
+    }
+
+  glfwWindowHint(GLFW_ALPHA_BITS,            0);
+  glfwWindowHint(GLFW_DEPTH_BITS,            0);
+  glfwWindowHint(GLFW_STENCIL_BITS,          0);
+
+  glfwWindowHint(GLFW_SRGB_CAPABLE,          GL_TRUE);
+
+  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
+  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
+
+  glfwWindowHint(GLFW_OPENGL_PROFILE,        GLFW_OPENGL_CORE_PROFILE);
+
+  *window = glfwCreateWindow(fb.width,fb.height,
+                             "Skia Compute",
+                             fb.is_fullscreen ? primary : NULL,
+                             NULL);
+
+  if (*window == NULL)
+    {
+      glfwTerminate();
+      exit(EXIT_FAILURE);
+    }
+
+  glfwMakeContextCurrent(*window);
+
+  // set up GLAD
+  gladLoadGLLoader((GLADloadproc)glfwGetProcAddress);
+
+  // ignore vsync for now
+  glfwSwapInterval(fb.is_vsync_on ? 1 : 0);
+
+  // only copy r/g/b
+  glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
+
+  // enable SRGB, disable scissor
+  glEnable(GL_FRAMEBUFFER_SRGB);
+  glDisable(GL_SCISSOR_TEST);
+
+  //
+  // SET USER POINTER AND CALLBACKS
+  //
+  glfwSetKeyCallback            (*window,skc_interop_key_callback);
+  glfwSetFramebufferSizeCallback(*window,skc_interop_window_size_callback);
+  glfwSetScrollCallback         (*window,skc_interop_scroll_callback);
+  glfwSetCursorPosCallback      (*window,skc_interop_cursor_position_callback);
+  glfwSetWindowIconifyCallback  (*window,skc_interop_iconify_callback);
+
+  //
+  //
+  //
+  fprintf(stderr,
+          "GL_VENDOR   : %s\n"
+          "GL_RENDERER : %s\n",
+          glGetString(GL_VENDOR),
+          glGetString(GL_RENDERER));
+
+  //
+  // acquire an FBO/RBO
+  //
+  skc_interop_acquire();
+}
+
+//
+//
+//
+
+#define SKC_ROTATE_STEP ((float)(M_PI / 180.0))
+
+static
+void
+skc_interop_transform(struct skc_transform_stack * ts)
+{
+  // OpenGL'ism
+  skc_transform_stack_push_affine(ts,
+                                  1.0f, 0.0f,0.0f,
+                                  0.0f,-1.0f,(float)fb.height);
+  // multiply
+  skc_transform_stack_concat(ts);
+
+  // spinner...
+  if (fb.is_spinning)
+    fb.rotate_theta = fmodf(fb.rotate_theta + SKC_ROTATE_STEP,(float)(M_PI*2.0));
+  
+  // always rotate and scale around surface center point
+  skc_transform_stack_push_rotate_scale_xy(ts,
+                                           fb.rotate_theta,
+                                           fb.scale,fb.scale,
+                                           0.5f*fb.width,0.5f*fb.height);
+  skc_transform_stack_concat(ts);
+
+  // where did the mouse take us?
+  skc_transform_stack_push_translate(ts,
+                                     fb.translate.x,fb.translate.y);
+  skc_transform_stack_concat(ts);
+}
+
+
+void
+skc_interop_poll(GLFWwindow                 * window,
+                 struct skc_transform_stack * ts)
+{
+  // wait until uniconified
+  while (fb.is_iconified)
+    {
+      glfwWaitEvents();
+      continue;
+    }
+
+  // what's happended?
+  glfwPollEvents();
+
+  // resize?
+  if (fb.is_resized)
+    skc_interop_resize();
+
+  // monitor fps
+  skc_interop_fps(window);
+
+  skc_interop_transform(ts);
+}
+
+//
+//
+//
+
+void
+skc_interop_blit(GLFWwindow * window)
+{
+  // blit skc rbo
+  glBlitNamedFramebuffer(fb.fbo,0,
+                         0,0,fb.width,fb.height,
+                         0,0,fb.width,fb.height,
+                         GL_COLOR_BUFFER_BIT,
+                         GL_NEAREST);
+
+#if 0
+  //
+  // FIXME -- this clear does nothing!
+  //
+  // As a hack we're clearing the interop'd RBO with a
+  // clEnqueueFillImage().
+  //
+  float const rgba[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
+  // GLenum const attachments[] = { GL_COLOR_ATTACHMENT0 };
+  // glInvalidateNamedFramebufferData(fb.fbo,1,attachments);
+  glClearNamedFramebufferfv(fb.fbo,GL_COLOR,0,rgba);
+#endif
+
+  // swap buffers
+  glfwSwapBuffers(window);
+}
+
+//
+//
+//
+
+void *
+skc_interop_get_fb(GLFWwindow * window)
+{
+  glFlush();
+
+  return fb.mem;
+}
+
+//
+//
+//
+
+void
+skc_interop_get_dim(uint32_t dim[2])
+{
+  dim[0] = fb.width;
+  dim[1] = fb.height;
+}
+
+//
+//
+//
+
+
diff --git a/src/compute/skc/interop.h b/src/compute/skc/interop.h
new file mode 100644
index 0000000..112d365
--- /dev/null
+++ b/src/compute/skc/interop.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "skc.h"
+
+//
+//
+//
+
+void
+skc_interop_init(GLFWwindow * * window);
+
+void
+skc_interop_register(skc_context_t context);
+
+void
+skc_interop_poll(GLFWwindow                 * window,
+                 struct skc_transform_stack * ts);
+
+void *
+skc_interop_get_fb(GLFWwindow * window);
+
+void
+skc_interop_get_dim(uint32_t dim[2]);
+
+void
+skc_interop_blit(GLFWwindow * window);
+
+//
+//
+//
diff --git a/src/compute/skc/macros.h b/src/compute/skc/macros.h
new file mode 100644
index 0000000..1d5e508
--- /dev/null
+++ b/src/compute/skc/macros.h
@@ -0,0 +1,204 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_ONCE_MACROS
+#define SKC_ONCE_MACROS
+
+//
+//
+//
+
+#include "types.h"
+
+//
+//
+//
+
+#define SKC_RESTRICT   __restrict
+
+//
+//
+//
+
+#define SKC_CONSTANT   __constant
+#define SKC_GLOBAL     __global
+
+//
+//
+//
+
+#define SKC_CALLBACK   __stdcall
+
+//
+//
+//
+
+#define SKC_TRUE   1
+#define SKC_FALSE  0
+
+//
+//
+//
+
+#define SKC_EMPTY
+#define SKC_COMMA  ,
+
+//
+// INDEX, SUFFIX, COMPONENT, PUNCTUATION, RGBA
+//
+
+#define SKC_EXPAND_1()                          \
+  SKC_EXPAND_X(0,SKC_EMPTY,SKC_EMPTY,SKC_EMPTY,SKC_EMPTY)
+
+#define SKC_EXPAND_2()                          \
+  SKC_EXPAND_X(0, 0,.s0,SKC_COMMA,.even)        \
+  SKC_EXPAND_X(1, 1,.s1,SKC_EMPTY,.odd)
+
+#define SKC_EXPAND_4()                          \
+  SKC_EXPAND_X(0, 0,.s0,SKC_COMMA,.even.even)   \
+  SKC_EXPAND_X(1, 1,.s1,SKC_COMMA,.odd.even)    \
+  SKC_EXPAND_X(2, 2,.s2,SKC_COMMA,.even.odd)    \
+  SKC_EXPAND_X(3, 3,.s3,SKC_EMPTY,.odd.odd)
+
+#define SKC_EXPAND_8()                          \
+  SKC_EXPAND_X(0, 0,.s0,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(1, 1,.s1,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(2, 2,.s2,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(3, 3,.s3,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(4, 4,.s4,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(5, 5,.s5,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(6, 6,.s6,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(7, 7,.s7,SKC_EMPTY,SKC_EMPTY)
+
+#define SKC_EXPAND_16()                         \
+  SKC_EXPAND_X(0, 0,.s0,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(1, 1,.s1,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(2, 2,.s2,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(3, 3,.s3,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(4, 4,.s4,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(5, 5,.s5,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(6, 6,.s6,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(7, 7,.s7,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(8, 8,.s8,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(9, 9,.s9,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(10,A,.sA,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(11,B,.sB,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(12,C,.sC,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(13,D,.sD,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(14,E,.sE,SKC_COMMA,SKC_EMPTY)    \
+  SKC_EXPAND_X(15,F,.sF,SKC_EMPTY,SKC_EMPTY)
+
+//
+//
+//
+
+#define SKC_BITS_TO_MASK(n)         (((skc_uint)1<<(n))-1)
+#define SKC_BITS_TO_MASK_64(n)      (((skc_ulong)1<<(n))-1)
+
+#define SKC_BITS_TO_MASK_AT(n,b)    (SKC_BITS_TO_MASK(n)<<(b))
+#define SKC_BITS_TO_MASK_AT_64(n,b) (SKC_BITS_TO_MASK_64(n)<<(b))
+
+//
+// IF BFE IS SUPPORTED BY THE PLATFORM THEN IMPLEMENT DIFFERENTLY
+//
+
+#define SKC_BFE(x,n,i)        (((x) & SKC_BITS_TO_MASK_AT(n,i)) >> (i))
+
+//
+// IF BFI IS SUPPORTED BY THE PLATFORM THEN IMPLEMENT DIFFERENTLY
+//
+// Note this BFI assumes the destination bits were already set to zero
+//
+
+#define SKC_BFI(d,n,i,v)      ((((v) & SKC_BITS_TO_MASK(n)) << (i)) | (d))
+
+//
+//
+//
+
+#define SKC_STRINGIFY2(a)     #a
+#define SKC_STRINGIFY(a)      SKC_STRINGIFY2(a)
+
+//
+//
+//
+
+#define SKC_EVAL(x)           x
+#define SKC_CONCAT(a,b)       SKC_EVAL(a)##SKC_EVAL(b)
+
+//
+//
+//
+
+#define SKC_MAX_MACRO(a,b)    (((a) > (b)) ? (a) : (b))
+#define SKC_MIN_MACRO(a,b)    (((a) < (b)) ? (a) : (b))
+#define SKC_GTE_MACRO(a,b)    ((a) >= (b))
+#define SKC_LT_MACRO(a,b)     ((a) <  (b))
+
+//
+//
+//
+
+#define SKC_COUNT_OF(x)       (sizeof(x) / sizeof(x)[0])
+#define SKC_OFFSET_OF(t,m)    ((size_t)&(((t*)0)->m))
+#define SKC_MEMBER_SIZE(t,m)  sizeof(((t*)0)->m)
+
+
+//
+// Returns rounded up next power-of-2 for non-zero -- via bit
+// twiddling hacks, etc.
+//
+
+#define SKC_P2_OR_RS(n,x)     ((x)|(x)>>n)
+#define SKC_POW2_RU_U32(x)    (1+SKC_P2_OR_RS(16,SKC_P2_OR_RS(8,SKC_P2_OR_RS(4,SKC_P2_OR_RS(2,SKC_P2_OR_RS(1,x-1))))))
+
+//
+// Round up
+//
+
+#define SKC_ROUND_DOWN(v,q)      (((v) / (q)) * (q))
+#define SKC_ROUND_UP(v,q)        ((((v) + (q) - 1) / (q)) * (q))
+
+#define SKC_ROUND_DOWN_POW2(v,q) ((v) & ~((q) - 1))
+#define SKC_ROUND_UP_POW2(v,q)   SKC_ROUND_DOWN_POW2((v) + (q) - 1,q)
+
+//
+//
+//
+
+#if !defined(__OPENCL_C_VERSION__)
+
+#define SKC_STATIC_ASSERT(p)  static_assert((p),#p)
+
+#else
+
+#define SKC_STATIC_ASSERT(p)
+
+#endif
+
+//
+// Returns 1-based bit position of MSB
+//
+
+#define SKC_MSB_4(x,n)        (((x>>(n-0))&1)+((x>>(n-1))&1)+((x>>(n-2))&1)+((x>>(n-3))&1))
+#define SKC_MSB_7654(x)       SKC_MSB_4(x,31)+SKC_MSB_4(x,27)+SKC_MSB_4(x,23)+SKC_MSB_4(x,19)
+#define SKC_MSB_3210(x)       SKC_MSB_4(x,15)+SKC_MSB_4(x,11)+SKC_MSB_4(x, 7)+SKC_MSB_4(x, 3)
+#define SKC_MSB_U32(x)        ( SKC_MSB_7654(((skc_uint)x)) + SKC_MSB_3210(((skc_uint)x)) )
+
+//
+// FIXME -- handle other compilers besides MSVC/x86
+//
+
+#define SKC_LZCNT_32(v)       __lzcnt(v)
+
+//
+//
+//
+
+#endif
+
diff --git a/src/compute/skc/main.c b/src/compute/skc/main.c
new file mode 100644
index 0000000..ad18b29
--- /dev/null
+++ b/src/compute/skc/main.c
@@ -0,0 +1,277 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSVG_DOC-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <glad/glad.h>
+#include <GLFW/glfw3.h>
+
+//
+//
+//
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <conio.h>
+
+#include "svg/svg_doc.h"
+#include "svg2skc/svg2skc.h"
+#include "svg2skc/transform_stack.h"
+
+//
+//
+//
+
+#include <CL/opencl.h>
+#include "interop.h"
+
+//
+//
+//
+
+void
+skc_runtime_cl_12_debug(struct skc_context * const context);
+
+//
+//
+//
+
+
+
+//
+//
+//
+
+static 
+void
+is_render_complete(skc_surface_t     surface,
+                   skc_styling_t     styling,
+                   skc_composition_t composition,
+                   bool            * quit)
+{
+  *quit = true;
+}
+
+//
+//
+//
+
+int
+main(int argc, char** argv)
+{
+  //
+  // 
+  //
+  if (argc <= 1) 
+    {
+      fprintf(stderr,"-- missing filename\n");
+      return EXIT_FAILURE; // no filename
+    }
+
+  //
+  // load test file
+  //
+  // #include "test/lion.inl"
+
+  struct svg_doc * svg_doc = svg_doc_parse(argv[1],false);
+
+  fprintf(stderr,"p/r/l = %u / %u / %u\n",
+          svg_doc_path_count(svg_doc),
+          svg_doc_raster_count(svg_doc),
+          svg_doc_layer_count(svg_doc));
+
+  //
+  // fire up GL
+  //
+  GLFWwindow * window;
+
+  skc_interop_init(&window);
+
+  //
+  // get GL and device contexts
+  //
+  HGLRC hGLRC = wglGetCurrentContext();
+  HDC   hDC   = wglGetCurrentDC();
+
+  //
+  //
+  //
+  cl_context_properties context_properties[] =
+    {
+      CL_CONTEXT_PLATFORM, (cl_context_properties)-1,
+      CL_GL_CONTEXT_KHR,   (cl_context_properties)hGLRC,
+      CL_WGL_HDC_KHR,      (cl_context_properties)hDC,
+      0
+    };
+  
+  //
+  // create context
+  //
+  skc_context_t context;
+
+  skc_err err = skc_context_create(&context,"Intel","Graphics",context_properties);
+
+  //
+  // associate
+  //
+  skc_interop_register(context);
+
+  //
+  // create path builder
+  //
+  skc_path_builder_t path_builder;
+
+  err = skc_path_builder_create(context,&path_builder);
+
+  //
+  // create raster builder
+  //
+  skc_raster_builder_t raster_builder;
+
+  err = skc_raster_builder_create(context,&raster_builder);
+  
+  //
+  // create a composition
+  //
+  skc_composition_t composition;
+
+  err = skc_composition_create(context,&composition);
+  
+  //
+  // create a styling instance
+  //
+  skc_styling_t styling;
+
+  err = skc_styling_create(context,
+                           &styling,
+                           svg_doc_layer_count(svg_doc),
+                           1000,
+                           2 * 1024 * 1024);
+  
+  //
+  // create a surface
+  //
+  skc_surface_t surface;
+
+  err = skc_surface_create(context,&surface);
+
+  //
+  // create a transform stack
+  //
+  struct skc_transform_stack * ts = skc_transform_stack_create(32);
+
+  // prime the transform stack with subpixel scale
+  skc_transform_stack_push_scale(ts,32.0,32.0);
+
+  //
+  // rasterize, render and reclaim svg until escape
+  //
+  while (!glfwWindowShouldClose(window))
+    {
+      // save stack
+      uint32_t const ts_save = skc_transform_stack_save(ts);
+
+      // poll glfw
+      skc_interop_poll(window,ts);
+
+      // decode paths
+      skc_path_t * paths = svg_doc_paths_decode(svg_doc,path_builder);
+
+      // decode rasters
+      skc_raster_t * rasters = svg_doc_rasters_decode(svg_doc,ts,paths,raster_builder);
+
+      // restore the transform stack
+      skc_transform_stack_restore(ts,ts_save);
+
+      // decode layers -- places rasters
+      svg_doc_layers_decode(svg_doc,rasters,composition,styling,true/*is_srgb*/);    
+
+      // seal the composition
+      skc_composition_seal(composition);
+
+      bool           quit   = false;
+      uint32_t const clip[] = { 0, 0, 65535, 65535 }; // tile clip is <= 9 bits (512)
+
+      // render the styled composition to the surface
+      skc_surface_render(surface,clip,styling,composition,
+                         is_render_complete,&quit,
+                         skc_interop_get_fb(window));
+
+      // release the paths
+      svg_doc_paths_release(svg_doc,paths,context);
+
+      // rasters have been released
+      svg_doc_rasters_release(svg_doc,rasters,context);
+
+      // spin until framebuffer is rendered
+      while (!quit) {
+        // fprintf(stderr,"WAITING ON: !quit\n");
+        skc_context_wait(context);
+      }
+
+      // blit and swap
+      skc_interop_blit(window);
+
+      // print out some useful debug info
+      skc_runtime_cl_12_debug(context);
+
+      // rewind the doc
+      svg_doc_rewind(svg_doc);
+
+      //
+      // I don't like this being here
+      //
+      float    const rgba[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
+      uint32_t       rect[4] = { 0 };
+
+      skc_interop_get_dim(rect+2);
+
+      skc_surface_clear(surface,rgba,rect,
+                        skc_interop_get_fb(window));
+
+      // exit(EXIT_SUCCESS);
+
+      // reset styling
+      skc_styling_reset(styling);
+
+      // unseal the composition
+      skc_composition_unseal(composition,true);
+    }
+  
+  //
+  // dispose of mundane resources
+  //
+  skc_transform_stack_release(ts);
+
+  //
+  // dispose of all SKC resources
+  //
+  err = skc_surface_release(surface);
+  err = skc_styling_release(styling);
+  err = skc_composition_release(composition);
+  err = skc_raster_builder_release(raster_builder);
+  err = skc_path_builder_release(path_builder);
+  err = skc_context_release(context);
+
+  //
+  // GLFW CLEANUP
+  //
+  glfwDestroyWindow(window);
+  glfwTerminate();
+
+  //
+  //
+  //
+  return EXIT_SUCCESS;
+}
+
+//
+//
+//
diff --git a/src/compute/skc/make_all.bat b/src/compute/skc/make_all.bat
new file mode 100644
index 0000000..4772cc7
--- /dev/null
+++ b/src/compute/skc/make_all.bat
@@ -0,0 +1,15 @@
+@ECHO OFF

+

+CMD /C make_inl_cl.bat  block_pool_init.cl

+CMD /C make_inl_cl.bat  fills_expand.cl

+CMD /C make_inl_cl.bat  paths_copy.cl

+CMD /C make_inl_cl.bat  rasterize.cl

+CMD /C make_inl_cl.bat  segment_ttrk.cl

+CMD /C make_inl_cl.bat  rasters_alloc.cl

+CMD /C make_inl_cl.bat  prefix.cl

+CMD /C make_inl_cl.bat  place.cl

+CMD /C make_inl_cl.bat  segment_ttck.cl

+CMD /C make_inl_cl.bat  render.cl

+CMD /C make_inl_cl.bat  paths_reclaim.cl

+CMD /C make_inl_cl.bat  rasters_reclaim.cl

+

diff --git a/src/compute/skc/make_inl_cl.bat b/src/compute/skc/make_inl_cl.bat
new file mode 100644
index 0000000..777a5f3
--- /dev/null
+++ b/src/compute/skc/make_inl_cl.bat
@@ -0,0 +1,72 @@
+@ECHO OFF

+

+SET OPENCL_STD=-cl-std=CL1.2

+SET OPENCL_PRE=__OPENCL_C_VERSION__=120

+

+:: OPENCL_STD=-cl-std=CL2.0

+:: OPENCL_PRE=__OPENCL_C_VERSION__=200

+

+::

+::

+::

+

+SET IOC=ioc64

+

+::

+::

+::

+

+SET IOC_IR_OPTS_OPT=%OPENCL_STD% -cl-single-precision-constant -cl-denorms-are-zero -cl-mad-enable -cl-no-signed-zeros -cl-fast-relaxed-math -cl-kernel-arg-info

+

+SET IOC_IR_OPTS_DBG=%OPENCL_STD% -cl-kernel-arg-info -g

+

+SET IOC_IR_OPTS=%IOC_IR_OPTS_OPT%

+

+::

+::

+::

+

+SET PRE_DIR=%~p1

+

+CD %PRE_DIR%

+

+SET PRE_CL=%~n1

+SET PRE_CL=%PRE_CL%.pre.cl

+

+SET PRE_SRC_INL=%~n1

+SET PRE_SRC_INL=%PRE_SRC_INL%.pre.src.inl

+

+SET PRE_BIN_IR=%~n1

+SET PRE_BIN_IR=%PRE_BIN_IR%.pre.ir

+

+SET PRE_BIN_INL=%~n1

+SET PRE_BIN_INL=%PRE_BIN_INL%.pre.bin.inl

+

+::

+:: *.pre.cl

+:: *.pre.src.inl

+::

+

+CMD /C cl -I . -I .. -I "%INTELOCLSDKROOT%\include" -D %OPENCL_PRE% -EP %1 -P -Fi"%PRE_CL%"

+CMD /C clang-format -style=Mozilla -i %PRE_CL%

+CMD /C dos2unix -q %PRE_CL%

+CMD /C xxd -i %PRE_CL% %PRE_SRC_INL%

+

+echo %PRE_CL%

+echo %PRE_SRC_INL%

+

+::

+:: *.pre.cl

+:: *.pre.src.inl

+::

+

+CMD /C touch %PRE_BIN_IR%

+ECHO ON

+@CMD /C %IOC% -cmd=build -bo="%IOC_IR_OPTS%" -device=gpu -input=%PRE_CL% -ir=%PRE_BIN_IR%

+@ECHO OFF

+CMD /C xxd -i %PRE_BIN_IR% %PRE_BIN_INL%

+

+echo %PRE_BIN_IR%

+echo %PRE_BIN_INL%

+

+

diff --git a/src/compute/skc/path.h b/src/compute/skc/path.h
new file mode 100644
index 0000000..effcb05
--- /dev/null
+++ b/src/compute/skc/path.h
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_ONCE_PATH
+#define SKC_ONCE_PATH
+
+//
+//
+//
+
+#include "block.h"
+
+//
+//
+//
+
+union skc_path_header
+{
+  skc_uint4   u32v4;
+
+  struct {
+    skc_uint  handle; // host handle
+    skc_uint  blocks; // # of S-segment blocks in path
+    skc_uint  nodes;  // # of S-segment node blocks -- not including header
+    skc_uint  prims;  // # of path elements: lines, quads, cubics, rat-quads, rat-cubics
+  };
+};
+
+union skc_path_bounds
+{
+  skc_float4  f32v4;
+
+  struct {
+    skc_float x0;
+    skc_float y0;
+    skc_float x1;
+    skc_float y1;
+  };
+};
+
+//
+// This head structure aliases a block.
+//
+// Blocks are at least 16 words.
+//
+
+struct skc_path_head
+{
+  union skc_path_header     header;    // 4
+  union skc_path_bounds     bounds;    // 4
+  union skc_tagged_block_id tag_ids[]; // 8+ ids
+};
+
+#define SKC_PATH_HEAD_WORDS               8
+
+#define SKC_PATH_HEAD_OFFSET_HANDLE       0
+#define SKC_PATH_HEAD_OFFSET_BLOCKS       1
+#define SKC_PATH_HEAD_OFFSET_NODES        2
+#define SKC_PATH_HEAD_OFFSET_PRIMS        3
+
+#define SKC_PATH_HEAD_OFFSET_IDS          8
+
+#define SKC_PATH_HEAD_WORDS_CALC          (sizeof(struct skc_path_head) / sizeof(skc_uint))
+#define SKC_PATH_HEAD_OFFSET_HANDLE_CALC  (SKC_OFFSET_OF(struct skc_path_head,header.handle) / sizeof(skc_uint))
+#define SKC_PATH_HEAD_OFFSET_BLOCKS_CALC  (SKC_OFFSET_OF(struct skc_path_head,header.blocks) / sizeof(skc_uint))
+#define SKC_PATH_HEAD_OFFSET_NODES_CALC   (SKC_OFFSET_OF(struct skc_path_head,header.nodes)  / sizeof(skc_uint))
+#define SKC_PATH_HEAD_OFFSET_PRIMS_CALC   (SKC_OFFSET_OF(struct skc_path_head,header.prims)  / sizeof(skc_uint))
+#define SKC_PATH_HEAD_OFFSET_IDS_CALC     (SKC_OFFSET_OF(struct skc_path_head,tag_ids)       / sizeof(skc_uint))
+
+//
+// NOT ALL OPENCL PREPROCESSORS ARE HAPPY WITH CALCULATING OFFSET_OF()
+//
+// - Intel ioc compiler failed in the past
+//
+
+#if !defined(__OPENCL_C_VERSION__)
+SKC_STATIC_ASSERT(SKC_PATH_HEAD_WORDS         == SKC_PATH_HEAD_WORDS_CALC);
+SKC_STATIC_ASSERT(SKC_PATH_HEAD_OFFSET_HANDLE == SKC_PATH_HEAD_OFFSET_HANDLE_CALC);
+SKC_STATIC_ASSERT(SKC_PATH_HEAD_OFFSET_BLOCKS == SKC_PATH_HEAD_OFFSET_BLOCKS_CALC);
+SKC_STATIC_ASSERT(SKC_PATH_HEAD_OFFSET_NODES  == SKC_PATH_HEAD_OFFSET_NODES_CALC);
+SKC_STATIC_ASSERT(SKC_PATH_HEAD_OFFSET_PRIMS  == SKC_PATH_HEAD_OFFSET_PRIMS_CALC);
+SKC_STATIC_ASSERT(SKC_PATH_HEAD_OFFSET_IDS    == SKC_PATH_HEAD_OFFSET_IDS_CALC);
+#endif
+
+//
+// This node structure aliases a block.
+//
+// Blocks are at least 16 words.
+//
+// The last word in the block points to the next block
+//
+// The tag indicating a 'next' pointer is zero.
+//
+
+#if !defined(__OPENCL_C_VERSION__)
+struct skc_path_node
+{
+  union skc_tagged_block_id tag_ids[];
+};
+#endif
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/path_builder.c b/src/compute/skc/path_builder.c
new file mode 100644
index 0000000..15372de
--- /dev/null
+++ b/src/compute/skc/path_builder.c
@@ -0,0 +1,272 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include "path_builder.h"
+#include "context.h"
+
+//
+//
+//
+
+skc_err
+skc_path_builder_retain(skc_path_builder_t path_builder)
+{
+  ++path_builder->refcount;
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_path_builder_release(skc_path_builder_t path_builder)
+{
+  SKC_ASSERT_STATE_ASSERT(SKC_PATH_BUILDER_STATE_READY,path_builder);
+
+  path_builder->release(path_builder->impl);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+// PATH BODY
+//
+
+skc_err
+skc_path_begin(skc_path_builder_t path_builder)
+{
+  SKC_ASSERT_STATE_TRANSITION(SKC_PATH_BUILDER_STATE_READY,
+                              SKC_PATH_BUILDER_STATE_BUILDING,
+                              path_builder);
+
+  // init path builder counters
+  path_builder->line .rem  = 0;
+  path_builder->quad .rem  = 0;
+  path_builder->cubic.rem  = 0;
+
+  // begin the path
+  path_builder->begin(path_builder->impl);
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_path_end(skc_path_builder_t path_builder, skc_path_t * path)
+{
+  SKC_ASSERT_STATE_TRANSITION(SKC_PATH_BUILDER_STATE_BUILDING,
+                              SKC_PATH_BUILDER_STATE_READY,
+                              path_builder);
+
+  // update path header with proper counts
+  path_builder->end(path_builder->impl,path);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+// PATH SEGMENT OPS
+//
+
+static
+void
+skc_path_move_to_1(skc_path_builder_t path_builder,
+                   float x0, float y0)
+{
+  path_builder->curr[0].x = x0;
+  path_builder->curr[0].y = y0;
+  path_builder->curr[1].x = x0;
+  path_builder->curr[1].y = y0;
+}
+
+static
+void
+skc_path_move_to_2(skc_path_builder_t path_builder,
+                   float x0, float y0,
+                   float x1, float y1)
+{
+  path_builder->curr[0].x = x0;
+  path_builder->curr[0].y = y0;
+  path_builder->curr[1].x = x1;
+  path_builder->curr[1].y = y1;
+}
+
+skc_err
+skc_path_move_to(skc_path_builder_t path_builder,
+                 float x0, float y0)
+{
+  skc_path_move_to_1(path_builder,x0,y0);
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_path_close(skc_path_builder_t path_builder)
+{
+  //
+  // FIXME -- CLARIFY WHY SUBTLE AUTO-CLOSE BEHAVIORS _DON'T BELONG_
+  // IN THE SKIA COMPUTE LAYER
+  //
+  // OR, BETTER YET, GET RID OF THIS FUNC ENTIRELY
+  //
+  return SKC_ERR_NOT_IMPLEMENTED;
+}
+
+skc_err
+skc_path_line_to(skc_path_builder_t path_builder,
+                 float x1, float y1)
+{
+  if (path_builder->line.rem == 0) {
+    path_builder->new_line(path_builder->impl);
+  }
+
+  --path_builder->line.rem;
+
+  *path_builder->line.coords[0]++ = path_builder->curr[0].x;
+  *path_builder->line.coords[1]++ = path_builder->curr[0].y;
+  *path_builder->line.coords[2]++ = x1;
+  *path_builder->line.coords[3]++ = y1;
+
+  skc_path_move_to_1(path_builder,x1,y1);
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_path_quad_to(skc_path_builder_t path_builder,
+                 float x1, float y1,
+                 float x2, float y2)
+{
+  if (path_builder->quad.rem == 0) {
+    path_builder->new_quad(path_builder->impl);
+  }
+
+  --path_builder->quad.rem;
+
+  *path_builder->quad.coords[0]++ = path_builder->curr[0].x;
+  *path_builder->quad.coords[1]++ = path_builder->curr[0].y;
+  *path_builder->quad.coords[2]++ = x1;
+  *path_builder->quad.coords[3]++ = y1;
+  *path_builder->quad.coords[4]++ = x2;
+  *path_builder->quad.coords[5]++ = y2;
+
+  skc_path_move_to_2(path_builder,x2,y2,x1,y1);
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_path_quad_smooth_to(skc_path_builder_t path_builder,
+                        float x2, float y2)
+{
+  float const x1 = path_builder->curr[0].x * 2.0f - path_builder->curr[1].x;
+  float const y1 = path_builder->curr[0].y * 2.0f - path_builder->curr[1].y;
+
+  return skc_path_quad_to(path_builder,x1,y1,x2,y2);
+}
+
+skc_err
+skc_path_cubic_to(skc_path_builder_t path_builder,
+                  float x1, float y1,
+                  float x2, float y2,
+                  float x3, float y3)
+{
+  if (path_builder->cubic.rem == 0) {
+    path_builder->new_cubic(path_builder->impl);
+  }
+
+  --path_builder->cubic.rem;
+
+  *path_builder->cubic.coords[0]++ = path_builder->curr[0].x;
+  *path_builder->cubic.coords[1]++ = path_builder->curr[0].y;
+  *path_builder->cubic.coords[2]++ = x1;
+  *path_builder->cubic.coords[3]++ = y1;
+  *path_builder->cubic.coords[4]++ = x2;
+  *path_builder->cubic.coords[5]++ = y2;
+  *path_builder->cubic.coords[6]++ = x3;
+  *path_builder->cubic.coords[7]++ = y3;
+
+  skc_path_move_to_2(path_builder,x3,y3,x2,y2);
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_path_cubic_smooth_to(skc_path_builder_t path_builder,
+                         float x2, float y2,
+                         float x3, float y3)
+{
+  float const x1 = path_builder->curr[0].x * 2.0f - path_builder->curr[1].x;
+  float const y1 = path_builder->curr[0].y * 2.0f - path_builder->curr[1].y;
+
+  return skc_path_cubic_to(path_builder,x1,y1,x2,y2,x3,y3);
+}
+
+//
+// FIXME -- add rational quad and cubic support and move primitives
+// like ellipse into an adapter. They do *not* belong in the core API.
+//
+
+skc_err
+skc_path_ellipse(skc_path_builder_t path_builder,
+                 float cx, float cy,
+                 float rx, float ry)
+{
+  //
+  // FIXME -- we can implement this with rationals later...
+  //
+
+  //
+  // Approximate a circle with 4 cubics:
+  //
+  // http://en.wikipedia.org/wiki/B%C3%A9zier_spline#Approximating_circular_arcs
+  //
+  skc_path_move_to_1(path_builder, cx, cy + ry);
+
+#define KAPPA_FLOAT 0.55228474983079339840f // moar digits!
+
+  float const kx = rx * KAPPA_FLOAT;
+  float const ky = ry * KAPPA_FLOAT;
+
+  skc_err err;
+
+  err = skc_path_cubic_to(path_builder,
+                          cx + kx, cy + ry,
+                          cx + rx, cy + ky,
+                          cx + rx, cy);
+
+  if (err)
+    return err;
+
+  err = skc_path_cubic_to(path_builder,
+                          cx + rx, cy - ky,
+                          cx + kx, cy - ry,
+                          cx,      cy - ry);
+
+  if (err)
+    return err;
+
+  err = skc_path_cubic_to(path_builder,
+                          cx - kx, cy - ry,
+                          cx - rx, cy - ky,
+                          cx - rx, cy);
+
+  if (err)
+    return err;
+
+  err = skc_path_cubic_to(path_builder,
+                          cx - rx, cy + ky,
+                          cx - kx, cy + ry,
+                          cx,      cy + ry);
+  return err;
+}
+
+//
+//
+//
diff --git a/src/compute/skc/path_builder.h b/src/compute/skc/path_builder.h
new file mode 100644
index 0000000..c8e36df
--- /dev/null
+++ b/src/compute/skc/path_builder.h
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "skc.h"
+#include "assert_state.h"
+
+//
+//
+//
+
+typedef enum skc_path_builder_state_e {
+
+  SKC_PATH_BUILDER_STATE_READY,
+  SKC_PATH_BUILDER_STATE_BUILDING
+
+} skc_path_builder_state_e;
+
+//
+// FIXME -- we might be able to bury more of this in the impl
+//
+
+struct skc_coords_rem_count_line
+{
+  skc_uint    rem;
+  skc_float * coords[4];
+};
+
+struct skc_coords_rem_count_quad
+{
+  skc_uint    rem;
+  skc_float * coords[6];
+};
+
+struct skc_coords_rem_count_cubic
+{
+  skc_uint    rem;
+  skc_float * coords[8];
+};
+
+//
+//
+//
+
+struct skc_path_builder
+{
+  struct skc_context              * context;
+  
+  struct skc_path_builder_impl    * impl;
+
+  void                           (* begin    )(struct skc_path_builder_impl * const impl); 
+  void                           (* end      )(struct skc_path_builder_impl * const impl, skc_path_t * const path);
+  void                           (* new_line )(struct skc_path_builder_impl * const impl);
+  void                           (* new_quad )(struct skc_path_builder_impl * const impl);
+  void                           (* new_cubic)(struct skc_path_builder_impl * const impl);
+  void                           (* release  )(struct skc_path_builder_impl * const impl);
+
+  struct skc_coords_rem_count_line  line;
+  struct skc_coords_rem_count_quad  quad;
+  struct skc_coords_rem_count_cubic cubic;
+
+  struct {
+    float                           x;
+    float                           y;
+  } curr[2];
+
+  skc_uint                          refcount;
+
+  SKC_ASSERT_STATE_DECLARE(skc_path_builder_state_e);
+};
+
+//
+//
+//
+
diff --git a/src/compute/skc/path_builder_cl_12.c b/src/compute/skc/path_builder_cl_12.c
new file mode 100644
index 0000000..e915dff
--- /dev/null
+++ b/src/compute/skc/path_builder_cl_12.c
@@ -0,0 +1,1443 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <float.h>
+#include <stdio.h>
+
+#include "common/cl/assert_cl.h"
+
+#include "context.h"
+#include "handle.h"
+#include "grid.h"
+#include "path.h"
+#include "path_builder.h"
+
+#include "config_cl.h"
+#include "export_cl_12.h"
+#include "runtime_cl_12.h"
+#include "path_builder_cl_12.h"
+
+//
+// OpenCL 1.2 devices support mapping of buffers into the host address
+// space.
+//
+// Mapped buffers must be aligned on MIN_DATA_TYPE_ALIGN_SIZE bit
+// boundary (e.g. 128 bytes).  This complicates coordinating sharing
+// of data between the host and the device.
+//
+// Some OpenCL 2.0 devices support fine-grained shared virtual memory
+// pointers with byte-addressing and allow simpler coordination
+// strategies at the cost of maintaining cache coherency.
+//
+// The path builder is focused on moving bulk path data from the host
+// into the device-managed "block" memory pool and arranging it into a
+// SIMT/SIMD-friendly data structure that can be efficiently read by
+// the rasterizer.
+//
+// Note that one simplifying assumption is that the maximum length of
+// a *single* path can't be larger than what fits in the single extent
+// (which is split into M subbuffers).  This would be a very long path
+// and a legitimate size limitation.
+//
+// For some systems, it may be appropriate to never pull path data
+// into the device-managed block pool and instead present the path
+// data to the device in a temporarily available allocated memory
+// "zone" of paths that can be discarded all at once.
+//
+// For other systems, it may be appropriate to simply copy the path
+// data from host to device.
+//
+// But the majority of OpenCL (and VK, MTL, DX12) devices we'll be
+// targeting support basic map/unmap functionality similar to OpenCL
+// 1.2.  Furthermore, not all OpenCL 2.0 devices support fine-grained
+// sharing of memory and still require a map/unmap step... but note
+// that they all support byte-aligned mapping and subbuffers.
+//
+// The general strategy that this particular CL_12 implementation uses
+// is to allocate a large mappable bulk-data path buffer and an
+// auxilary mappable command buffer.
+//
+// The buffers are split into a reasonable number of properly aligned
+// subbuffers to enable simultaneous host and device access.
+//
+
+//
+// Blocks:
+//   1 extent
+//   M mapped subbuffers (configurable) to allow for concurrency
+//
+// Commands:
+//   1 extent
+//   M mapped subbuffers (configurable) to allow for concurrency
+//
+// Spans:
+//   M hi/lo structures
+//
+// { cl_sub, void*, event, base }
+//
+// - size of sub buffer
+// - remaining
+//
+// - counts
+//
+
+//
+// For any kernel launch, at most one path will be discontiguous and
+// defined across two sub-buffers.
+//
+// Nodes are updated locally until full and then stored so they will
+// never be incomplete.  Headers are stored locally until the path is
+// ended so they will never be incomplete.
+//
+// A line, quad or cubic acquires 4/6/8 segments which may be spread
+// across one or more congtiguous blocks.
+//
+// If a flush() occurs then the remaining columns of multi-segment
+// paths are initialized with zero-length line, quad, cubic elements.
+//
+// Every block's command word has a type and a count acquired from a
+// rolling counter.
+//
+// The kernel is passed two spans of blocks { base, count } to
+// process.  The grid is must process (lo.count + hi.count) blocks.
+//
+
+struct skc_subbuffer_blocks
+{
+  cl_mem   device;
+  void *   host;
+};
+
+struct skc_subbuffer_cmds
+{
+  cl_mem   device;
+  void *   host;
+  cl_event map;
+};
+
+//
+// ringdex is an index with range [0, blocks-per-subbuf * subbufs-per-buffer )
+//
+
+typedef skc_uint skc_ringdex_t;
+
+union skc_ringdex_expand
+{
+  div_t      qr;
+
+  struct {
+#ifndef SKC_DIV_REM_BEFORE_QUOT // offsetof(div_t,quot) != 0
+    skc_uint subbuf;
+    skc_uint block;
+#else
+    skc_uint block;
+    skc_uint subbuf;
+#endif
+  };
+};
+
+//
+// this record is executed by the grid
+//
+
+struct skc_release_record
+{
+  struct skc_path_builder_impl * impl; // back pointer to impl
+
+  skc_grid_t                     grid; // pointer to scheduled grid
+
+  skc_uint                       from; // inclusive starting index   : [from,to)
+  skc_uint                       to;   // non-inclusive ending index : [from,to)
+};
+
+//
+//
+//
+
+struct skc_path_builder_impl
+{
+  struct skc_path_builder       * path_builder;
+
+  struct skc_runtime            * runtime;
+
+  cl_command_queue                cq;
+
+  struct {
+    cl_kernel                     alloc;
+    cl_kernel                     copy;
+  } kernels;
+
+  //
+  // FIXME -- make this pointer to constant config
+  //
+  // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+  struct {
+    skc_uint                      subbufs;  // how many subbufs in the buffer?
+
+    struct {
+      skc_uint                    buffer;   // how many blocks in the buffer?
+      skc_uint                    subbuf;   // how many blocks in a   subbuf?
+    } blocks_per;
+  } ring;
+  //
+  // ^^^^^^^^^^^ don't duplicate these constants ^^^^^^^^^^^^^^^^^^
+  //
+
+  struct {
+    cl_mem                        buffer;   // backing buffer for blocks
+    struct skc_subbuffer_blocks * subbufs;  // array of structures
+  } blocks;
+
+  struct {
+    cl_mem                        buffer;   // backing buffer for commands
+    struct skc_subbuffer_cmds   * subbufs;  // array of structures
+  } cmds;
+
+  struct {
+    struct skc_release_record   * records;  // max release records is equal to max subbufs
+    skc_path_t                  * paths;    // max paths is less than or equal to max commands
+  } release;
+
+  cl_mem                          reads;    // each kernel only requires one word to store the block pool "base"
+
+  struct {
+    skc_uint                      rolling;  // rolling counter used by cmds to map to block pool alloc
+    skc_ringdex_t                 from;
+    skc_ringdex_t                 to;
+  } prev;
+
+  struct {
+    skc_ringdex_t                 from;
+    skc_ringdex_t                 to;
+  } curr;
+
+  struct {
+    struct skc_path_head        * head;     // pointer to local path header -- not written until path end
+    struct skc_path_node        * node;     // pointer to local node -- may alias head until head is full
+
+    struct {
+      skc_uint                    rolling;  // rolling counter of wip node -- valid after one node is allocated
+      union skc_tagged_block_id * next;     // next slot in node -- may initially point to head.ids
+      skc_uint                    rem;      // how many id slots left in node block
+    } ids;
+
+    struct {
+      skc_uint                    rem;      // how many subblocks left in block?
+      skc_uint                    rolling;  // rolling counter of block of subblocks
+      float                     * next;     // next subblock in current subblock block
+      skc_uint                    idx;      // index of next subblock
+    } subblocks;
+
+    struct {
+      skc_uint                    one;      // .block = 1
+      skc_uint                    next;     // rolling counter used by cmds to map to block pool alloc
+    } rolling;
+
+    skc_ringdex_t                 to;       // ringdex of _next_available_ command/block in ring -- FIXME -- should be current
+  } wip;
+};
+
+//
+// FIXME -- move to a pow2 subbuffer size and dispense with division
+// and modulo operations
+//
+
+static
+union skc_ringdex_expand
+skc_ringdex_expand(struct skc_path_builder_impl * const impl, 
+                   skc_ringdex_t                  const ringdex)
+{
+  return (union skc_ringdex_expand){
+    .qr = div(ringdex,impl->ring.blocks_per.subbuf)
+  };
+}
+
+static
+void
+skc_ringdex_wip_to_block_inc(struct skc_path_builder_impl * const impl)
+{
+  //
+  // FIXME - which is faster?
+  //
+#if 1
+  impl->wip.to  = (impl->wip.to + 1) % impl->ring.blocks_per.buffer;
+#else
+  impl->wip.to -= (impl->wip.to < impl->ring.blocks_per.buffer) ? -1 : impl->wip.to;
+#endif
+
+  // this path is too long -- for now assert() and die
+  assert(impl->wip.to != impl->curr.from);
+}
+
+static
+skc_ringdex_t
+skc_ringdex_span(struct skc_path_builder_impl * const impl,
+                 skc_ringdex_t                  const from,
+                 skc_ringdex_t                  const to)
+{
+  return (to - from) % impl->ring.blocks_per.buffer;
+}
+
+static
+void
+skc_ringdex_wip_to_subbuf_inc(struct skc_path_builder_impl * const impl)
+{
+  union skc_ringdex_expand const to = skc_ringdex_expand(impl,impl->wip.to);
+
+  // nothing to do if this is the first block in the subbuf
+  if (to.block == 0)
+    return;
+
+  skc_uint const new_subbuf = (to.subbuf + 1) % impl->ring.subbufs;
+
+  // otherwise increment and mod
+  impl->wip.to = new_subbuf * impl->ring.blocks_per.subbuf;
+}
+
+static
+skc_bool
+skc_ringdex_curr_is_equal(struct skc_path_builder_impl * const impl)
+{
+  return impl->curr.from == impl->curr.to;
+}
+
+static
+skc_bool
+skc_ringdex_prev_is_equal(struct skc_path_builder_impl * const impl)
+{
+  return impl->prev.from == impl->prev.to;
+}
+
+static
+skc_uint
+skc_ringdex_dont_map_last(struct skc_path_builder_impl * const impl, 
+                          skc_uint                       const to_block)
+{
+  // no blocks acquired OR this is last block in subbuf
+  return !((impl->wip.to == impl->curr.to) || (to_block == 0));
+}
+
+//
+//
+//
+
+static
+struct skc_release_record *
+skc_release_curr(struct skc_path_builder_impl * const impl)
+{
+  union skc_ringdex_expand curr_from = skc_ringdex_expand(impl,impl->curr.from);
+
+  return impl->release.records + curr_from.subbuf;
+}
+
+//
+// FIXME -- get rid of all distant config references -- grab them at all at creation time
+//
+
+static
+void
+skc_path_builder_pfn_begin(struct skc_path_builder_impl * const impl)
+{
+  // init header counters // { handle, blocks, nodes, prims }
+  impl->wip.head->header = (union skc_path_header){
+    .handle = 0,
+    .blocks = 0,
+    .nodes  = 0,
+    .prims  = 0
+  };
+
+  // FIXME -- BOUNDS SHOULD USE SIMD4 TRICK AND NEGATE ONE OF THE CORNERS
+  impl->wip.head->bounds  = (union skc_path_bounds){ +FLT_MIN, +FLT_MIN, -FLT_MIN, -FLT_MIN };
+
+  // point wip ids at local head node
+  impl->wip.ids.next      = impl->wip.head->tag_ids; // point to local head node
+  impl->wip.ids.rem       = impl->runtime->config->block.words - SKC_PATH_HEAD_WORDS; // FIXME -- save this constant somewhere
+
+  // start with no subblocks
+  impl->wip.subblocks.rem = 0;
+}
+
+//
+//
+//
+
+static
+void
+skc_path_builder_impl_finalize_node(struct skc_path_builder_impl * const impl)
+{
+#if 1
+  //
+  // FIXME -- a Duff's device might be optimal here but would have to
+  // be customized per device since node's could be 16-128+ words
+  //
+  while (impl->wip.ids.rem > 0)
+    {
+      impl->wip.ids.rem      -= 1;
+      impl->wip.ids.next->u32 = SKC_TAGGED_BLOCK_ID_INVALID;
+      impl->wip.ids.next     += 1;
+    }
+#else
+  memset(&impl->wip.ids.next->u32,
+         SKC_TAGGED_BLOCK_ID_INVALID, // 0xFF
+         sizeof(impl->wip.ids.next->u32) * impl->wip.ids.rem);
+
+  impl->wip.ids.next += impl->wip.ids.rem;
+  impl->wip.ids.rem   = 0;
+#endif
+}
+
+//
+//
+//
+
+static
+void
+skc_zero_float(skc_float * p, skc_uint rem)
+{
+  memset(p,0,sizeof(*p)*rem);
+}
+
+static
+void
+skc_path_builder_finalize_subblocks(struct skc_path_builder * const path_builder)
+{
+  //
+  // FIXME -- it might be more performant to zero the remaining
+  // columns in a subblock -- a subblock at a time -- instead of the
+  // same column across all the subblocks
+  //
+#if 0
+  while (path_builder->line.rem > 0)
+    {
+      --path_builder->line.rem;
+
+      *path_builder->line.coords[0]++ = 0.0f;
+      *path_builder->line.coords[1]++ = 0.0f;
+      *path_builder->line.coords[2]++ = 0.0f;
+      *path_builder->line.coords[3]++ = 0.0f;
+    }
+
+  while (path_builder->quad.rem > 0)
+    {
+      --path_builder->quad.rem;
+
+      *path_builder->line.coords[0]++ = 0.0f;
+      *path_builder->line.coords[1]++ = 0.0f;
+      *path_builder->line.coords[2]++ = 0.0f;
+      *path_builder->line.coords[3]++ = 0.0f;
+      *path_builder->line.coords[4]++ = 0.0f;
+      *path_builder->line.coords[5]++ = 0.0f;
+    }
+
+  while (path_builder->cubic.rem > 0)
+    {
+      --path_builder->cubic.rem;
+
+      *path_builder->line.coords[0]++ = 0.0f;
+      *path_builder->line.coords[1]++ = 0.0f;
+      *path_builder->line.coords[2]++ = 0.0f;
+      *path_builder->line.coords[3]++ = 0.0f;
+      *path_builder->line.coords[4]++ = 0.0f;
+      *path_builder->line.coords[5]++ = 0.0f;
+      *path_builder->line.coords[6]++ = 0.0f;
+      *path_builder->line.coords[7]++ = 0.0f;
+    }
+#else
+  if (path_builder->line.rem > 0)
+    {
+      skc_zero_float(path_builder->line.coords[0],path_builder->line.rem);
+      skc_zero_float(path_builder->line.coords[1],path_builder->line.rem);
+      skc_zero_float(path_builder->line.coords[2],path_builder->line.rem);
+      skc_zero_float(path_builder->line.coords[3],path_builder->line.rem);
+
+      path_builder->line.rem = 0;
+    }
+
+  if (path_builder->quad.rem > 0)
+    {
+      skc_zero_float(path_builder->quad.coords[0],path_builder->quad.rem);
+      skc_zero_float(path_builder->quad.coords[1],path_builder->quad.rem);
+      skc_zero_float(path_builder->quad.coords[2],path_builder->quad.rem);
+      skc_zero_float(path_builder->quad.coords[3],path_builder->quad.rem);
+      skc_zero_float(path_builder->quad.coords[4],path_builder->quad.rem);
+      skc_zero_float(path_builder->quad.coords[5],path_builder->quad.rem);
+
+      path_builder->quad.rem = 0;
+    }
+
+  if (path_builder->cubic.rem > 0)
+    {
+      skc_zero_float(path_builder->cubic.coords[0],path_builder->cubic.rem);
+      skc_zero_float(path_builder->cubic.coords[1],path_builder->cubic.rem);
+      skc_zero_float(path_builder->cubic.coords[2],path_builder->cubic.rem);
+      skc_zero_float(path_builder->cubic.coords[3],path_builder->cubic.rem);
+      skc_zero_float(path_builder->cubic.coords[4],path_builder->cubic.rem);
+      skc_zero_float(path_builder->cubic.coords[5],path_builder->cubic.rem);
+      skc_zero_float(path_builder->cubic.coords[6],path_builder->cubic.rem);
+      skc_zero_float(path_builder->cubic.coords[7],path_builder->cubic.rem);
+
+      path_builder->cubic.rem = 0;
+    }
+#endif
+}
+
+//
+//
+//
+
+static
+void
+skc_path_builder_impl_unmap(struct skc_path_builder_impl * const impl,
+                            skc_uint                             from,
+                            skc_uint                             to)
+{
+  // to might be out of range
+  to = to % impl->ring.subbufs;
+
+#if 0
+  fprintf(stderr,"unmap: [%2u,%2u)\n",from,to);
+#endif
+  
+  while (from != to) // 'to' might be out of range
+    {
+      // bring 'from' back in range
+      from = from % impl->ring.subbufs;
+
+      struct skc_subbuffer_blocks * const blocks = impl->blocks.subbufs + from;
+      struct skc_subbuffer_cmds   * const cmds   = impl->cmds  .subbufs + from;
+
+      cl(EnqueueUnmapMemObject(impl->cq,
+                               blocks->device,
+                               blocks->host,
+                               0,NULL,NULL));
+
+      cl(EnqueueUnmapMemObject(impl->cq,
+                               cmds->device,
+                               cmds->host,
+                               0,NULL,NULL));
+
+      // bring from back in range
+      from = ++from % impl->ring.subbufs;
+    }
+}
+
+//
+// FIXME -- reuse this in create()
+//
+
+static
+void
+skc_path_builder_impl_map(struct skc_path_builder_impl * const impl,
+                          skc_uint                             from,
+                          skc_uint                             to)
+{
+  // to might be out of range
+  to = to % impl->ring.subbufs;
+
+#if 0
+  fprintf(stderr,"  map: [%2u,%2u)\n",from,to);
+#endif
+
+  while (from != to)
+    {
+      cl_int cl_err;
+
+      struct skc_subbuffer_blocks * const blocks = impl->blocks.subbufs + from;
+      struct skc_subbuffer_cmds   * const cmds   = impl->cmds  .subbufs + from;
+
+      blocks->host = clEnqueueMapBuffer(impl->cq,
+                                        blocks->device,
+                                        CL_FALSE,
+                                        CL_MAP_WRITE_INVALIDATE_REGION,
+                                        0,impl->runtime->config->paths_copy.block.subbuf,
+                                        0,NULL,NULL,
+                                        &cl_err); cl_ok(cl_err);
+
+      cl(ReleaseEvent(cmds->map));
+
+      cmds->host   = clEnqueueMapBuffer(impl->cq,
+                                        cmds->device,
+                                        CL_FALSE,
+                                        CL_MAP_WRITE_INVALIDATE_REGION,
+                                        0,impl->runtime->config->paths_copy.command.subbuf,
+                                        0,NULL,&cmds->map,
+                                        &cl_err); cl_ok(cl_err);
+
+      // bring from back in range
+      from = ++from % impl->ring.subbufs;
+    }
+  //
+  // FIXME -- when we switch to out of order queues we'll need a barrier here
+  //
+}
+
+//
+//
+//
+
+static
+void
+skc_path_builder_release_dispose(struct skc_release_record    * const release,
+                                 struct skc_path_builder_impl * const impl)
+{
+  struct skc_runtime * runtime = impl->runtime;
+
+  if (release->from <= release->to) // no wrap
+    {
+      skc_path_t const * paths = impl->release.paths + release->from;
+      skc_uint           count = release->to         - release->from;
+
+      skc_grid_deps_unmap(runtime->deps,paths,count);
+      skc_runtime_path_device_release(runtime,paths,count);
+    }
+  else // from > to implies wrap
+    {
+      skc_path_t const * paths_lo = impl->release.paths + release->from;
+      skc_uint           count_lo = impl->ring.blocks_per.buffer - release->from;
+
+      skc_grid_deps_unmap(runtime->deps,paths_lo,count_lo);
+      skc_runtime_path_device_release(runtime,paths_lo,count_lo);
+
+      skc_grid_deps_unmap(runtime->deps,impl->release.paths,release->to);
+      skc_runtime_path_device_release(runtime,impl->release.paths,release->to);
+    }
+
+  release->to = release->from;
+}
+
+static
+void
+skc_path_builder_grid_pfn_dispose(skc_grid_t const grid)
+{
+  struct skc_release_record    * const release = skc_grid_get_data(grid);
+  struct skc_path_builder_impl * const impl    = release->impl;
+
+  skc_path_builder_release_dispose(release,impl);
+}
+
+static
+void
+// skc_path_builder_complete(struct skc_release_record * const release)
+skc_path_builder_complete(skc_grid_t grid)
+{
+  //
+  // notify deps that this grid is complete enough for other grids to
+  // proceed
+  //
+  // the path builder still has some cleanup to do before all its
+  // resources can be reused
+  //
+  skc_grid_complete(grid);
+}
+
+static
+void
+skc_path_builder_paths_copy_cb(cl_event event, cl_int status, skc_grid_t grid)
+{
+  SKC_CL_CB(status);
+  
+  struct skc_release_record * const release = skc_grid_get_data(grid);
+  
+  SKC_SCHEDULER_SCHEDULE(release->impl->runtime->scheduler,skc_path_builder_complete,grid);
+}
+
+//
+//
+//
+
+static
+void
+skc_path_builder_grid_pfn_waiting(skc_grid_t const grid)
+{
+  struct skc_release_record    * const release = skc_grid_get_data(grid);
+  struct skc_path_builder_impl * const impl    = release->impl;
+
+  // 1. flush incomplete subblocks of path elements
+  // 2. unmap subbuffer on cq.unmap
+  // 3. flush cq.unmap
+  // 4. launch kernel on cq.kernel but wait for unmap completion
+  // 5. flush cq.kernel
+  // 6. remap relevant subbuffers on cq.map but wait for kernel completion
+  // 7. flush cq.map
+
+  //
+  // FIXME -- can be smarter about flushing if the wip paths are not
+  // in the same subbuf as curr.to
+  //
+  // THIS IS IMPORTANT TO FIX
+  //
+
+  // flush incomplete subblocks
+  skc_path_builder_finalize_subblocks(impl->path_builder);
+
+  //
+  // get range of subbufs that need to be unmapped
+  //
+  // note that impl->prev subbufs have already been unmapped
+  //
+  union skc_ringdex_expand       curr_from  = skc_ringdex_expand(impl,impl->curr.from);
+  union skc_ringdex_expand       curr_to    = skc_ringdex_expand(impl,impl->curr.to);
+  skc_uint                 const is_partial = curr_to.block > 0;
+  skc_uint                 const unmap_to   = curr_to.subbuf + is_partial;
+
+  //
+  // unmap all subbufs in range [from,to)
+  //
+  skc_path_builder_impl_unmap(impl,curr_from.subbuf,unmap_to);
+
+  //
+  // launch kernels
+  //
+  skc_uint const pb_prev_span = skc_ringdex_span(impl,impl->prev.from,impl->prev.to);
+  skc_uint const pb_curr_span = skc_ringdex_span(impl,impl->curr.from,impl->curr.to);
+  skc_uint const pb_cmds      = pb_prev_span + pb_curr_span;
+
+  //
+  // 1) allocate blocks from pool
+  //
+
+  //
+  // FIXME -- pack integers into struct/vector
+  //
+  cl(SetKernelArg(impl->kernels.alloc,0,SKC_CL_ARG(impl->runtime->block_pool.atomics.drw)));
+  cl(SetKernelArg(impl->kernels.alloc,1,SKC_CL_ARG(impl->reads)));
+  cl(SetKernelArg(impl->kernels.alloc,2,SKC_CL_ARG(curr_from.subbuf)));
+  cl(SetKernelArg(impl->kernels.alloc,3,SKC_CL_ARG(pb_cmds)));
+
+  skc_device_enqueue_kernel(impl->runtime->device,
+                            SKC_DEVICE_KERNEL_ID_PATHS_ALLOC,
+                            impl->cq,
+                            impl->kernels.alloc,
+                            1,
+                            0,NULL,NULL);
+
+  //
+  // 2) copy blocks from unmapped device-accessible memory
+  //
+
+  //
+  // FIXME -- pack integers into struct/vector and reduce 13 arguments down to 7
+  //
+  cl(SetKernelArg(impl->kernels.copy, 0,SKC_CL_ARG(impl->runtime->handle_pool.map.drw)));
+
+  cl(SetKernelArg(impl->kernels.copy, 1,SKC_CL_ARG(impl->runtime->block_pool.ids.drw)));
+  cl(SetKernelArg(impl->kernels.copy, 2,SKC_CL_ARG(impl->runtime->block_pool.blocks.drw)));
+  cl(SetKernelArg(impl->kernels.copy, 3,SKC_CL_ARG(impl->runtime->block_pool.size->ring_mask)));
+
+  cl(SetKernelArg(impl->kernels.copy, 4,SKC_CL_ARG(impl->reads)));
+  cl(SetKernelArg(impl->kernels.copy, 5,SKC_CL_ARG(curr_from.subbuf)));
+
+  cl(SetKernelArg(impl->kernels.copy, 6,SKC_CL_ARG(impl->cmds.buffer)));
+  cl(SetKernelArg(impl->kernels.copy, 7,SKC_CL_ARG(impl->blocks.buffer)));
+
+  cl(SetKernelArg(impl->kernels.copy, 8,SKC_CL_ARG(impl->ring.blocks_per.buffer)));
+  cl(SetKernelArg(impl->kernels.copy, 9,SKC_CL_ARG(impl->prev.rolling)));
+
+  cl(SetKernelArg(impl->kernels.copy,10,SKC_CL_ARG(impl->prev.from)));
+  cl(SetKernelArg(impl->kernels.copy,11,SKC_CL_ARG(pb_prev_span)));
+  cl(SetKernelArg(impl->kernels.copy,12,SKC_CL_ARG(impl->curr.from)));
+
+  cl_event complete;
+
+  skc_device_enqueue_kernel(impl->runtime->device,
+                            SKC_DEVICE_KERNEL_ID_PATHS_COPY,
+                            impl->cq,
+                            impl->kernels.copy,
+                            pb_cmds,
+                            0,NULL,&complete);
+
+  // set a callback on completion
+  cl(SetEventCallback(complete,CL_COMPLETE,
+                      skc_path_builder_paths_copy_cb,
+                      grid));
+
+  // immediately release
+  cl(ReleaseEvent(complete));
+
+  //
+  // remap as many subbuffers as possible after the kernel completes
+  //
+  // note that remaps are async and enqueued on the same command queue
+  // as the kernel launch
+  //
+  // we can't remap subbuffers that are in the possibly empty range
+  //
+  // cases:
+  //
+  //   - curr.to == wip.to which means no blocks have been acquired
+  //   - curr.to points to first block in (next) subbuf
+  //   - otherwise, wip acquired blocks in the curr.to subbuf
+  //
+  // check for these first 2 cases!
+  //
+  union skc_ringdex_expand const prev_from = skc_ringdex_expand(impl,impl->prev.from);
+  skc_uint                 const no_wip    = impl->curr.to == impl->wip.to;
+  skc_uint                       map_to    = curr_to.subbuf + (is_partial && no_wip);
+
+  // remap all subbufs in range [from,to)
+  skc_path_builder_impl_map(impl,prev_from.subbuf,map_to);
+
+  // flush command queue
+  cl(Flush(impl->cq));
+
+  // save rolling
+  impl->prev.rolling = impl->wip.rolling.next;
+
+  // update prev and curr
+  if (no_wip)
+    {
+      //
+      // if there was no wip then round up to the next subbuf
+      //
+      skc_ringdex_wip_to_subbuf_inc(impl);
+    
+      //
+      // update prev/curr with with incremented wip
+      //
+      impl->prev.from = impl->prev.to = impl->wip.to;
+      impl->curr.from = impl->curr.to = impl->wip.to;
+    }
+  else
+    {
+      //
+      // update prev with wip partials
+      //
+      impl->prev.from    = impl->curr.to;
+      impl->prev.to      = impl->wip .to;
+
+      //
+      // start curr on a new subbuf boundary
+      //
+      skc_ringdex_wip_to_subbuf_inc(impl);
+
+      impl->curr.from    = impl->wip.to;
+      impl->curr.to      = impl->wip.to;
+    }
+}
+
+//
+//
+//
+
+static
+void
+skc_path_builder_impl_acquire_subbuffer(struct skc_path_builder_impl * const impl,
+                                        skc_uint                       const subbuf)
+{
+  //
+  // FIXME -- move to a power-of-two subbuf size and kickstart path
+  // copies as early as possible
+  //
+  // FIXME -- the subbufs "self-clock" (flow control) the kernel
+  // launches and accounting.  Combine all the subbuffers and release
+  // records into a single indexable struct instead of 3.
+  //
+  struct skc_subbuffer_cmds * const sc        = impl->cmds.subbufs    + subbuf;
+  struct skc_release_record * const release   = impl->release.records + subbuf;
+  struct skc_scheduler      * const scheduler = impl->runtime->scheduler;
+
+  // can't proceed until the paths have been released
+  SKC_SCHEDULER_WAIT_WHILE(scheduler,release->from != release->to);
+
+  // throw in a scheduler yield ... FIXME -- get rid of
+  skc_scheduler_yield(scheduler);
+
+  // can't proceed until the subbuffer is mapped
+  cl(WaitForEvents(1,&sc->map));
+}
+
+//
+//
+//
+
+static
+union skc_ringdex_expand
+skc_path_builder_impl_acquire_block(struct skc_path_builder_impl * const impl)
+{
+  // break ringdex into components
+  union skc_ringdex_expand const to = skc_ringdex_expand(impl,impl->wip.to);
+
+  // does wip ringdex point to a new subbuffer?
+  if (to.block == 0)
+    {
+      // potentially spin/block waiting for subbuffer
+      skc_path_builder_impl_acquire_subbuffer(impl,to.subbuf);
+    }
+
+  // post increment wip.to
+  skc_ringdex_wip_to_block_inc(impl);
+
+  return to;
+}
+
+//
+//
+//
+
+static
+skc_uint
+skc_rolling_block(skc_uint const rolling, skc_uint const tag)
+{
+  return rolling | tag;
+}
+
+static
+skc_uint
+skc_rolling_subblock(skc_uint const rolling, skc_uint const subblock, skc_uint const tag)
+{
+  return rolling | (subblock << SKC_TAGGED_BLOCK_ID_BITS_TAG) | tag;
+}
+
+static
+void
+skc_rolling_inc(struct skc_path_builder_impl * const impl)
+{
+  impl->wip.rolling.next += impl->wip.rolling.one;
+}
+
+//
+//
+//
+
+static
+void *
+skc_path_builder_impl_new_command(struct skc_path_builder_impl * const impl,
+                                  skc_uint                       const rolling,
+                                  skc_cmd_paths_copy_tag         const tag)
+{
+  // bump blocks count
+  impl->wip.head->header.blocks += 1;
+
+  // acquire a block
+  union skc_ringdex_expand    const to          = skc_path_builder_impl_acquire_block(impl);
+
+  // make a pointer
+  union skc_tagged_block_id * const cmds_subbuf = impl->cmds.subbufs[to.subbuf].host;
+
+  // store command for block
+  cmds_subbuf[to.block].u32 = skc_rolling_block(rolling,tag);
+
+#if 0
+  // store command for block
+  cmds_subbuf[to.block].u32 = skc_rolling_block(impl->wip.rolling.next,tag);
+
+  // increment rolling
+  skc_rolling_inc(impl);
+#endif
+
+  // return pointer to block
+  float * const blocks_subbuf = impl->blocks.subbufs[to.subbuf].host;
+
+  // FIXME -- make it easier to get config constant
+  return blocks_subbuf + (to.block * impl->runtime->config->block.words);
+}
+
+//
+//
+//
+
+static
+void
+skc_path_builder_impl_flush_node(struct skc_path_builder_impl * const impl)
+{
+  // store command to subbuf and get pointer to blocks subbuf
+  void * const block = skc_path_builder_impl_new_command(impl,impl->wip.ids.rolling,
+                                                         SKC_CMD_PATHS_COPY_TAG_NODE);
+
+  // copy head to blocks subbuf -- write-only
+  memcpy(block,impl->wip.node,impl->runtime->config->block.bytes);
+}
+
+static
+void
+skc_path_builder_impl_flush_head(struct skc_path_builder_impl * const impl)
+{
+  // store command to subbuf and get pointer to blocks subbuf
+  void * const block = skc_path_builder_impl_new_command(impl,impl->wip.rolling.next,
+                                                         SKC_CMD_PATHS_COPY_TAG_HEAD);
+
+  // copy head to blocks subbuf -- write-only
+  memcpy(block,impl->wip.head,impl->runtime->config->block.bytes);
+
+  // increment rolling
+  skc_rolling_inc(impl);
+
+  // the 'to' index is non-inclusive so assign wip.to after flush_head
+  impl->curr.to = impl->wip.to;
+}
+
+//
+//
+//
+
+static
+void
+skc_path_builder_impl_new_node_block(struct skc_path_builder_impl * const impl)
+{
+  // update final block id in node
+  impl->wip.ids.next->u32 = skc_rolling_block(impl->wip.rolling.next,SKC_BLOCK_ID_TAG_PATH_NEXT);
+
+  // if wip.ids is not the header then flush now full wip node
+  if (impl->wip.head->header.nodes > 0)
+    skc_path_builder_impl_flush_node(impl);
+
+  // bump node count
+  impl->wip.head->header.nodes += 1;
+
+  // save current rolling
+  impl->wip.ids.rolling = impl->wip.rolling.next;
+
+  // increment rolling
+  skc_rolling_inc(impl);
+
+  // update wip.ids.*
+  impl->wip.ids.next = impl->wip.node->tag_ids;
+  impl->wip.ids.rem  = impl->runtime->config->block.words;
+}
+
+static
+void
+skc_path_builder_impl_new_segs_block(struct skc_path_builder_impl * const impl)
+{
+  impl->wip.subblocks.rem     = impl->runtime->config->block.subblocks; // FIXME -- move constants closer to structure
+  impl->wip.subblocks.rolling = impl->wip.rolling.next;
+  impl->wip.subblocks.next    = skc_path_builder_impl_new_command(impl,impl->wip.rolling.next,
+                                                                  SKC_CMD_PATHS_COPY_TAG_SEGS);
+  impl->wip.subblocks.idx     = 0;
+
+  // increment rolling
+  skc_rolling_inc(impl);
+}
+
+//
+//
+//
+
+static
+void
+skc_path_builder_impl_acquire_subblocks(struct skc_path_builder_impl * const impl,
+                                        skc_block_id_tag                     tag,
+                                        skc_uint                             vertices,
+                                        float * *                            subblocks)
+{
+  //
+  // FIRST TAG RECORDS THE ELEMENT TYPE
+  //
+  while (true)
+    {
+      // if only one block id left in node then acquire new node block
+      // and append its block id as with a next tag
+      if (impl->wip.ids.rem == 1)
+        skc_path_builder_impl_new_node_block(impl);
+
+      // if zero subblocks left then acquire a new subblock block and
+      // append its block id
+      if (impl->wip.subblocks.rem == 0)
+        skc_path_builder_impl_new_segs_block(impl);
+
+      // save first command -- tag and subblocks may have been updated
+      impl->wip.ids.next->u32 = skc_rolling_subblock(impl->wip.subblocks.rolling,impl->wip.subblocks.idx,tag);
+
+      // increment node block subblock pointer
+      impl->wip.ids.next += 1;
+      impl->wip.ids.rem  -= 1;
+
+      // how many vertices can we store
+      skc_uint rem = min(vertices,impl->wip.subblocks.rem);
+
+      // decrement vertices
+      vertices                -= rem;
+      impl->wip.subblocks.rem -= rem;
+      impl->wip.subblocks.idx += rem;
+
+      // assign subblocks
+      do {
+        *subblocks++              = impl->wip.subblocks.next;
+        impl->wip.subblocks.next += impl->runtime->config->subblock.words;
+        // FIXME -- move constants closer to structure
+      } while (--rem > 0);
+
+      // anything left to do?
+      if (vertices == 0)
+        break;
+
+      // any tag after this will be a caboose command
+      tag = SKC_BLOCK_ID_TAG_PATH_NEXT;
+    }
+}
+
+//
+//
+//
+
+static
+void
+skc_path_builder_pfn_end(struct skc_path_builder_impl * const impl, skc_path_t * const path)
+{
+  // finalize incomplete active subblocks -- we don't care about any
+  // remaining unused subblocks in block
+  skc_path_builder_finalize_subblocks(impl->path_builder);
+
+  // mark remaining wips.ids in the head or node as invalid
+  skc_path_builder_impl_finalize_node(impl);
+
+  // flush node if rem > 0 and node is not actually head
+  if (impl->wip.head->header.nodes >= 1)
+    skc_path_builder_impl_flush_node(impl);
+
+  // acquire path host id
+  *path = skc_runtime_handle_device_acquire(impl->runtime); // FIXME -- MAY WANT TO GRAB AN ID ON BEGIN
+
+  // save path host handle
+  impl->wip.head->header.handle = *path;
+
+  // flush head -- acquires a block and bumps head->header.blocks
+  skc_path_builder_impl_flush_head(impl);
+
+  // get current release
+  struct skc_release_record * const release = skc_release_curr(impl);
+
+  // acquire grid if null
+  if (release->grid == NULL)
+    {
+      release->grid =
+        SKC_GRID_DEPS_ATTACH(impl->runtime->deps,
+                             &release->grid, // NULL on start/force
+                             release,        // data payload
+                             skc_path_builder_grid_pfn_waiting,
+                             NULL,           // no execute pfn
+                             skc_path_builder_grid_pfn_dispose);
+    }
+
+  // update grid map
+  skc_grid_map(release->grid,*path);
+
+  // update path release
+  impl->release.paths[release->to] = *path;
+
+  // increment release.to
+  release->to = (release->to + 1) % impl->ring.blocks_per.buffer;
+
+  // add guard bit
+  *path |= SKC_TYPED_HANDLE_TYPE_IS_PATH;
+
+#if 1
+  //
+  // eager kernel launch?
+  //
+  {
+    union skc_ringdex_expand const curr_from = skc_ringdex_expand(impl,impl->curr.from);
+    union skc_ringdex_expand const curr_to   = skc_ringdex_expand(impl,impl->curr.to);
+
+    if (curr_from.subbuf != curr_to.subbuf)
+      {
+        skc_grid_start(release->grid);
+        // skc_scheduler_yield(impl->runtime->scheduler);
+      }
+  }
+#endif
+}
+
+//
+// FIXME -- clean up accessing of CONFIG constants in these 3 routines
+//
+
+static
+void
+skc_path_builder_pfn_new_line(struct skc_path_builder_impl * const impl)
+{
+  // acquire subblock pointers
+  skc_path_builder_impl_acquire_subblocks(impl,SKC_BLOCK_ID_TAG_PATH_LINE,4,
+                                          impl->path_builder->line.coords);
+
+  // increment line count
+  impl->wip.head->header.prims += 1;
+
+  // update rem_count_xxx count
+  impl->path_builder->line.rem = impl->runtime->config->subblock.words;
+}
+
+static
+void
+skc_path_builder_pfn_new_quad(struct skc_path_builder_impl * const impl)
+{
+  // acquire subblock pointers
+  skc_path_builder_impl_acquire_subblocks(impl,SKC_BLOCK_ID_TAG_PATH_QUAD,6,
+                                          impl->path_builder->quad.coords);
+
+  // increment line count
+  impl->wip.head->header.prims += 1;
+
+  // update rem_count_xxx count
+  impl->path_builder->quad.rem = impl->runtime->config->subblock.words;
+}
+
+static
+void
+skc_path_builder_pfn_new_cubic(struct skc_path_builder_impl * const impl)
+{
+  // acquire subblock pointers
+  skc_path_builder_impl_acquire_subblocks(impl,SKC_BLOCK_ID_TAG_PATH_CUBIC,8,
+                                          impl->path_builder->cubic.coords);
+
+  // increment line count
+  impl->wip.head->header.prims += 1;
+
+  // update rem_count_xxx count
+  impl->path_builder->cubic.rem = impl->runtime->config->subblock.words;
+}
+
+//
+//
+//
+
+static
+void
+skc_path_builder_pfn_release(struct skc_path_builder_impl * const impl)
+{
+  // decrement reference count
+  if (--impl->path_builder->refcount != 0)
+    return;
+
+  //
+  // otherwise, dispose of everything
+  //
+  struct skc_runtime * const runtime = impl->runtime;
+
+  // free path builder
+  skc_runtime_host_perm_free(impl->runtime,impl->path_builder);
+
+  // release cq
+  skc_runtime_release_cq_in_order(runtime,impl->cq);
+
+  // release kernels
+  cl(ReleaseKernel(impl->kernels.alloc));
+  cl(ReleaseKernel(impl->kernels.copy));
+
+  // free blocks extents
+  cl(ReleaseMemObject(impl->blocks.buffer));
+  skc_runtime_host_perm_free(runtime,impl->blocks.subbufs);
+
+  cl(ReleaseMemObject(impl->cmds.buffer));
+  skc_runtime_host_perm_free(runtime,impl->cmds.subbufs);
+
+  // free records
+  skc_runtime_host_perm_free(runtime,impl->release.records);
+  skc_runtime_host_perm_free(runtime,impl->release.paths);
+
+  // release staging head and node
+  skc_runtime_host_perm_free(runtime,impl->wip.head);
+  skc_runtime_host_perm_free(runtime,impl->wip.node);
+
+  // release reads scratch array
+  cl(ReleaseMemObject(impl->reads));
+
+  // for all subbuffers
+  //   unmap   subbuffer
+  //   release subbuffer
+  // printf("%s not releasing subbuffers\n",__func__);
+
+  skc_runtime_host_perm_free(impl->runtime,impl);
+}
+
+//
+//
+//
+
+skc_err
+skc_path_builder_cl_12_create(struct skc_context        * const context,
+                              struct skc_path_builder * * const path_builder)
+{
+  //
+  // retain the context
+  // skc_context_retain(context);
+  //
+  struct skc_runtime * const runtime = context->runtime;
+
+  // allocate path builder
+  (*path_builder)             = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,sizeof(**path_builder));
+
+  // init state
+  SKC_ASSERT_STATE_INIT((*path_builder),SKC_PATH_BUILDER_STATE_READY);
+
+  (*path_builder)->context    = context;
+
+  // save opaque impl-specific pointers
+  (*path_builder)->begin      = skc_path_builder_pfn_begin;
+  (*path_builder)->end        = skc_path_builder_pfn_end;
+  (*path_builder)->new_line   = skc_path_builder_pfn_new_line;
+  (*path_builder)->new_quad   = skc_path_builder_pfn_new_quad;
+  (*path_builder)->new_cubic  = skc_path_builder_pfn_new_cubic;
+  (*path_builder)->release    = skc_path_builder_pfn_release;
+
+  // initialize path builder counts
+  (*path_builder)->line.rem   = 0;
+  (*path_builder)->quad.rem   = 0;
+  (*path_builder)->cubic.rem  = 0;
+
+  (*path_builder)->refcount   = 1;
+
+  struct skc_path_builder_impl * const impl = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,sizeof(*impl));
+
+  (*path_builder)->impl       = impl;
+
+  //
+  // init impl
+  //
+  impl->path_builder  = *path_builder;
+  impl->runtime       = runtime;
+
+  impl->cq            = skc_runtime_acquire_cq_in_order(runtime);
+
+  impl->kernels.alloc = skc_device_acquire_kernel(runtime->device,SKC_DEVICE_KERNEL_ID_PATHS_ALLOC);
+  impl->kernels.copy  = skc_device_acquire_kernel(runtime->device,SKC_DEVICE_KERNEL_ID_PATHS_COPY);
+
+  //
+  // FIXME -- let these config constants remain constant and in place
+  //
+  struct skc_config const * const config = runtime->config;
+
+  impl->ring.subbufs           = config->paths_copy.buffer.count;
+  impl->ring.blocks_per.buffer = config->paths_copy.subbuf.count * config->paths_copy.buffer.count;
+  impl->ring.blocks_per.subbuf = config->paths_copy.subbuf.count;
+  //
+  // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  //
+
+  cl_int cl_err;
+
+  // allocate large device-side extent for path data
+  impl->blocks.buffer   = clCreateBuffer(runtime->cl.context,
+                                         CL_MEM_READ_ONLY | CL_MEM_ALLOC_HOST_PTR,
+                                         config->paths_copy.block.buffer, // FIXME -- either use config or local constants everywhere
+                                         NULL,&cl_err); cl_ok(cl_err);
+
+  // allocate small host-side array of pointers to mapped subbufs
+  impl->blocks.subbufs  = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,
+                                                      impl->ring.subbufs *
+                                                      sizeof(*impl->blocks.subbufs));
+
+  // allocate large device-side extent for path copy commands
+  impl->cmds.buffer     = clCreateBuffer(runtime->cl.context,
+                                         CL_MEM_READ_ONLY | CL_MEM_ALLOC_HOST_PTR,
+                                         config->paths_copy.command.buffer,
+                                         NULL,&cl_err); cl_ok(cl_err);
+
+  // allocate small host-side array of pointers to mapped subbufs
+  impl->cmds.subbufs    = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,
+                                                      impl->ring.subbufs *
+                                                      sizeof(*impl->cmds.subbufs));
+
+  // allocate small host-side array of intervals of path handles
+  impl->release.records = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,
+                                                      impl->ring.subbufs *
+                                                      sizeof(*impl->release.records));
+
+  // allocate large host-side array that is max # of path handles in flight
+  impl->release.paths   = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,
+                                                      impl->ring.blocks_per.buffer *
+                                                      sizeof(*impl->release.paths));
+
+  // small scratch used by kernels
+  impl->reads           = clCreateBuffer(runtime->cl.context,
+                                         CL_MEM_READ_WRITE | CL_MEM_HOST_NO_ACCESS,
+                                         sizeof(skc_uint) * impl->ring.subbufs,
+                                         NULL,&cl_err); cl_ok(cl_err);
+
+  // initialize release record with impl backpointer
+  for (skc_uint ii=0; ii<impl->ring.subbufs; ii++)
+    {
+      struct skc_release_record * record = impl->release.records + ii;
+
+      record->impl = impl;
+      record->grid = NULL;
+      record->from = record->to = ii * impl->ring.blocks_per.subbuf;
+    }
+
+  //
+  // allocate and map subbuffers -- we always check the command
+  // subbuffer's map/unmap events before touching it or its associated
+  // block subbuffer.
+  //
+  struct skc_subbuffer_blocks * sb = impl->blocks.subbufs;
+  struct skc_subbuffer_cmds   * sc = impl->cmds  .subbufs;
+
+  cl_buffer_region              rb = { 0, config->paths_copy.block.subbuf   };
+  cl_buffer_region              rc = { 0, config->paths_copy.command.subbuf };
+
+  // for each subbuffer
+  for (skc_uint ii=0; ii<config->paths_copy.buffer.count; ii++)
+    {
+      sb->device = clCreateSubBuffer(impl->blocks.buffer,
+                                     CL_MEM_HOST_WRITE_ONLY,
+                                     CL_BUFFER_CREATE_TYPE_REGION,
+                                     &rb,
+                                     &cl_err); cl_ok(cl_err);
+
+      sb->host   = clEnqueueMapBuffer(impl->cq,
+                                      sb->device,
+                                      CL_FALSE,
+                                      CL_MAP_WRITE_INVALIDATE_REGION,
+                                      0,rb.size,
+                                      0,NULL,NULL,
+                                      &cl_err); cl_ok(cl_err);
+
+      sc->device = clCreateSubBuffer(impl->cmds.buffer,
+                                     CL_MEM_HOST_WRITE_ONLY,
+                                     CL_BUFFER_CREATE_TYPE_REGION,
+                                     &rc,
+                                     &cl_err); cl_ok(cl_err);
+
+      sc->host   = clEnqueueMapBuffer(impl->cq,
+                                      sc->device,
+                                      CL_FALSE,
+                                      CL_MAP_WRITE_INVALIDATE_REGION,
+                                      0,rc.size,
+                                      0,NULL,&sc->map,
+                                      &cl_err); cl_ok(cl_err);
+      sb        += 1;
+      sc        += 1;
+
+      rb.origin += rb.size;
+      rc.origin += rc.size;
+    }
+
+  //
+  // initialize remaining members
+  //
+  impl->prev.from        = 0;
+  impl->prev.to          = 0;
+  impl->prev.rolling     = 0;
+
+  impl->curr.from        = 0;
+  impl->curr.to          = 0;
+
+  impl->wip.to           = 0;
+
+  impl->wip.head         = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,config->block.bytes);
+  impl->wip.node         = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,config->block.bytes);
+
+  impl->wip.rolling.one  = SKC_BLOCK_ID_TAG_COUNT * config->block.subblocks;
+  impl->wip.rolling.next = 0;
+
+  // for now, completely initialize builder before returning
+  cl(Finish(impl->cq));
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
diff --git a/src/compute/skc/path_builder_cl_12.h b/src/compute/skc/path_builder_cl_12.h
new file mode 100644
index 0000000..20bb13c
--- /dev/null
+++ b/src/compute/skc/path_builder_cl_12.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef PATH_BUILDER_CL_12_ONCE
+#define PATH_BUILDER_CL_12_ONCE
+
+//
+//
+//
+
+#include "block.h"
+
+//
+// A tag type that fits into the block id tag bitfield
+//
+
+typedef enum skc_cmd_paths_copy_tag {
+
+  SKC_CMD_PATHS_COPY_TAG_SEGS,
+  SKC_CMD_PATHS_COPY_TAG_NODE,
+  SKC_CMD_PATHS_COPY_TAG_HEAD,
+
+  SKC_CMD_PATHS_COPY_TAG_COUNT
+
+} skc_cmd_paths_copy_tag;
+
+
+SKC_STATIC_ASSERT(SKC_CMD_PATHS_COPY_TAG_COUNT <= SKC_BLOCK_ID_TAG_COUNT);
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
+
diff --git a/src/compute/skc/paths_copy.cl b/src/compute/skc/paths_copy.cl
new file mode 100644
index 0000000..06cc393
--- /dev/null
+++ b/src/compute/skc/paths_copy.cl
@@ -0,0 +1,543 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include "device_cl_12_gen9.h"
+#include "path_builder_cl_12.h"
+#include "path.h"
+#include "block_pool_cl.h"
+
+//
+//
+//
+
+#if 0
+
+//
+// SIMD AVX2
+//
+
+#define SKC_PATHS_COPY_WORDS_PER_ELEM          8
+#define SKC_PATHS_COPY_SUBGROUP_SIZE           1
+#define SKC_PATHS_COPY_KERNEL_ATTRIBUTES
+
+typedef skc_uint8  skc_paths_copy_elem;
+typedef skc_uint8  skc_pb_idx_v;
+
+#define SKC_PATHS_COPY_ELEM_EXPAND()           SKC_EXPAND_8()
+
+#define SKC_IS_NOT_PATH_HEAD(sg,I)             ((sg) + I >= SKC_PATH_HEAD_WORDS)
+
+#endif
+
+//
+//
+//
+
+#define SKC_PATHS_COPY_SUBGROUP_SIZE_MASK      (SKC_PATHS_COPY_SUBGROUP_SIZE - 1)
+#define SKC_PATHS_COPY_ELEMS_PER_BLOCK         (SKC_DEVICE_BLOCK_WORDS / SKC_PATHS_COPY_ELEM_WORDS)
+#define SKC_PATHS_COPY_ELEMS_PER_SUBBLOCK      (SKC_DEVICE_SUBBLOCK_WORDS / SKC_PATHS_COPY_ELEM_WORDS)
+#define SKC_PATHS_COPY_ELEMS_PER_THREAD        (SKC_PATHS_COPY_ELEMS_PER_BLOCK / SKC_PATHS_COPY_SUBGROUP_SIZE)
+
+// FIXME -- use SUBGROUP terminology everywhere
+#define SKC_PATHS_COPY_SUBGROUP_WORDS          (SKC_PATHS_COPY_SUBGROUP_SIZE * SKC_PATHS_COPY_ELEM_WORDS)
+
+//
+//
+//
+
+#define SKC_PATHS_COPY_ELEMS_BEFORE_HEADER                              \
+  (SKC_PATHS_COPY_SUBGROUP_SIZE * ((SKC_PATH_HEAD_WORDS / SKC_PATHS_COPY_ELEM_WORDS) / SKC_PATHS_COPY_SUBGROUP_WORDS))
+
+#define SKC_PATHS_COPY_ELEMS_INCLUDING_HEADER                           \
+  (SKC_PATHS_COPY_SUBGROUP_SIZE * ((SKC_PATH_HEAD_WORDS + SKC_PATHS_COPY_SUBGROUP_WORDS - 1) / SKC_PATHS_COPY_SUBGROUP_WORDS))
+
+// #define SKC_PATHS_COPY_HEAD_ELEMS    ((SKC_PATH_HEAD_WORDS + SKC_PATHS_COPY_ELEM_WORDS - 1) / SKC_PATHS_COPY_ELEM_WORDS)
+
+//
+//
+//
+
+//
+// BIT-FIELD EXTRACT/INSERT ARE NOT AVAILABLE IN OPENCL
+//
+
+#define SKC_CMD_PATHS_COPY_ONE_BITS              (SKC_TAGGED_BLOCK_ID_BITS_TAG + SKC_DEVICE_SUBBLOCK_WORDS_LOG2)
+
+#define SKC_CMD_PATHS_COPY_ONE_MASK              SKC_BITS_TO_MASK(SKC_CMD_PATHS_COPY_ONE_BITS)
+
+#define SKC_CMD_PATHS_COPY_ONE                   (1u << SKC_CMD_PATHS_COPY_ONE_BITS)
+
+#define SKC_CMD_PATHS_COPY_GET_TAG(ti)           SKC_TAGGED_BLOCK_ID_GET_TAG(ti)
+
+#define SKC_CMD_PATHS_COPY_GET_ROLLING(ti)       ((ti) >> SKC_CMD_PATHS_COPY_ONE_BITS)
+
+#define SKC_CMD_PATHS_COPY_UPDATE_ROLLING(ti,b)  (((ti) & SKC_CMD_PATHS_COPY_ONE_MASK) | ((b) << SKC_TAGGED_BLOCK_ID_BITS_TAG))
+
+//
+//
+//
+
+skc_uint
+skc_sub_group_local_id()
+{
+#if SKC_PATHS_COPY_SUBGROUP_SIZE > 1
+  return get_sub_group_local_id();
+#else
+  return 0;
+#endif
+}
+
+//
+// convert an atomic read counter offset to a block id
+//
+
+skc_block_id_t
+skc_bp_off_to_id(__global skc_block_id_t const * const bp_ids,
+                 skc_uint                        const bp_idx_mask,
+                 skc_uint                        const bp_reads,
+                 skc_uint                        const bp_off)
+{
+  skc_uint const bp_idx = (bp_reads + bp_off) & bp_idx_mask;
+
+  return bp_ids[bp_idx];
+}
+
+//
+//
+//
+
+void
+skc_copy_segs(__global skc_paths_copy_elem       * const bp_elems, // to
+              skc_uint                             const bp_elems_idx,
+              __global skc_paths_copy_elem const * const pb_elems, // from
+              skc_uint                             const pb_elems_idx)
+{
+  for (skc_uint ii=0; ii<SKC_PATHS_COPY_ELEMS_PER_BLOCK; ii+=SKC_PATHS_COPY_SUBGROUP_SIZE)
+    {
+      (bp_elems+bp_elems_idx)[ii] = (pb_elems+pb_elems_idx)[ii];
+    }
+
+#if 0
+  //
+  // NOTE THIS IS PRINTING 8 ROWS
+  //
+  printf("%5u : (%8u) : { { %5.0f, %5.0f }, { %5.0f, %5.0f } },\n",
+         (skc_uint)get_global_id(0),pb_elems_idx,
+         as_float((pb_elems+pb_elems_idx)[0*SKC_PATHS_COPY_SUBGROUP_SIZE]),
+         as_float((pb_elems+pb_elems_idx)[1*SKC_PATHS_COPY_SUBGROUP_SIZE]),
+         as_float((pb_elems+pb_elems_idx)[2*SKC_PATHS_COPY_SUBGROUP_SIZE]),
+         as_float((pb_elems+pb_elems_idx)[3*SKC_PATHS_COPY_SUBGROUP_SIZE]));
+  printf("%5u : (%8u) : { { %5.0f, %5.0f }, { %5.0f, %5.0f } },\n",
+         (skc_uint)get_global_id(0),pb_elems_idx,
+         as_float((pb_elems+pb_elems_idx)[4*SKC_PATHS_COPY_SUBGROUP_SIZE]),
+         as_float((pb_elems+pb_elems_idx)[5*SKC_PATHS_COPY_SUBGROUP_SIZE]),
+         as_float((pb_elems+pb_elems_idx)[6*SKC_PATHS_COPY_SUBGROUP_SIZE]),
+         as_float((pb_elems+pb_elems_idx)[7*SKC_PATHS_COPY_SUBGROUP_SIZE]));
+#endif
+}
+
+//
+//
+//
+
+void
+skc_copy_node(__global skc_paths_copy_elem       * const bp_elems, // to
+              skc_uint                             const bp_elems_idx,
+              __global skc_block_id_t      const * const bp_ids,
+              skc_uint                             const bp_reads,
+              skc_uint                             const bp_idx_mask,
+              __global skc_paths_copy_elem const * const pb_elems, // from
+              skc_uint                             const pb_elems_idx,
+              skc_uint                             const pb_rolling)
+{
+  //
+  // remap block id tags bp_elems the host-side rolling counter pb_elems a
+  // device-side block pool id
+  //
+  for (skc_uint ii=0; ii<SKC_PATHS_COPY_ELEMS_PER_BLOCK; ii+=SKC_PATHS_COPY_SUBGROUP_SIZE)
+    {
+      // load block_id_tag words
+      skc_paths_copy_elem elem   = (pb_elems + pb_elems_idx)[ii];
+
+      // calculate ahead of time -- if elem was invalid then bp_idx is definitely invalid
+      skc_pb_idx_v  const bp_idx = (bp_reads + SKC_CMD_PATHS_COPY_GET_ROLLING(elem - pb_rolling)) & bp_idx_mask;
+
+      // FIXME ^^^^^ THE IDX PROBABLY DOESN'T NEED TO BE SHIFTED TWICE AND WE CAN SAVE A FEW INSTRUCTIONS
+
+      //
+      // FIXME -- SIMD can be fully parallelized since a bp_ids[] load
+      // will _always_ be safe as long as we don't use the loaded
+      // value!  So... fix UPDATE_ROLLING to be SIMD-friendly instead
+      // of iterating over the vector components.
+      //
+
+      // only convert if original elem is not invalid
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                 \
+      if (elem C != SKC_TAGGED_BLOCK_ID_INVALID) {              \
+        skc_block_id_t const b = bp_ids[bp_idx C];              \
+        elem C = SKC_CMD_PATHS_COPY_UPDATE_ROLLING(elem C,b);   \
+      }
+
+      // printf("%2u: < %8X, %8X, %8X >\n",ii,bp_idx,b,elem C);
+      
+      SKC_PATHS_COPY_ELEM_EXPAND();
+
+      // store the elem back
+      (bp_elems+bp_elems_idx)[ii] = elem;
+    }
+}
+
+//
+//
+//
+
+void
+skc_host_map_update(__global skc_uint * const host_map,
+                    skc_uint            const block,
+                    skc_paths_copy_elem const elem)
+{
+  //
+  // write first elem to map -- FIXME -- this is a little nasty
+  // because it relies on the the host handle always being the first
+  // word in the path header.
+  //
+  // OTOH, this is not unreasonable.  The alternative is to have a
+  // separate kernel initializing the map.
+  //
+#if SKC_PATHS_COPY_SUBGROUP_SIZE > 1
+  if (get_sub_group_local_id() == SKC_PATH_HEAD_OFFSET_HANDLE)
+#endif
+    {
+#if SKC_PATHS_COPY_ELEM_WORDS == 1
+      host_map[elem] = block; 
+#if 0
+      printf("[%u] = %u\n",elem,block);
+#endif
+#else
+      host_map[elem.SKC_CONCAT(s,SKC_PATH_HEAD_OFFSET_HANDLE)] = block;
+#endif
+    }
+}
+
+//
+//
+//
+
+void
+skc_copy_head(__global skc_uint                  * const host_map,
+              skc_uint                             const block,
+              __global skc_paths_copy_elem       * const bp_elems, // to
+              skc_uint                             const bp_elems_idx,
+              __global skc_block_id_t      const * const bp_ids,
+              skc_uint                             const bp_reads,
+              skc_uint                             const bp_idx_mask,
+              __global skc_paths_copy_elem const * const pb_elems, // from
+              skc_uint                             const pb_elems_idx,
+              skc_uint                             const pb_rolling)
+{
+  //
+  // if there are more path header words than there are
+  // threads-per-block then we can just copy the initial header words
+  //
+#if ( SKC_PATHS_COPY_ELEMS_BEFORE_HEADER > 0 )
+  for (skc_uint ii=0; ii<SKC_PATHS_COPY_ELEMS_BEFORE_HEADER; ii+=SKC_PATHS_COPY_SUBGROUP_SIZE)
+    {
+      skc_paths_copy_elem const elem = (pb_elems+pb_elems_idx)[ii];
+
+      (bp_elems+bp_elems_idx)[ii] = elem;
+
+      if (ii == 0) {
+        skc_host_map_update(host_map,block,elem);
+      }
+    }
+#endif
+
+  //
+  // this is similar to copy node but the first H words of the path
+  // header are not modified and simply copied
+  //
+  for (skc_uint ii=SKC_PATHS_COPY_ELEMS_BEFORE_HEADER; ii<SKC_PATHS_COPY_ELEMS_INCLUDING_HEADER; ii+=SKC_PATHS_COPY_SUBGROUP_SIZE)
+    {
+      skc_paths_copy_elem elem = (pb_elems+pb_elems_idx)[ii];
+
+#if ( SKC_PATHS_COPY_ELEMS_BEFORE_HEADER == 0 )
+      if (ii == 0) {
+        skc_host_map_update(host_map,block,elem);
+      }
+#endif
+      // calculate ahead of time -- if elem was invalid then bp_idx is definitely invalid
+      skc_pb_idx_v const bp_idx = (bp_reads + SKC_CMD_PATHS_COPY_GET_ROLLING(elem - pb_rolling)) & bp_idx_mask;
+
+      //
+      // FIXME -- SIMD can be fully parallelized since a bp_ids[] load
+      // will _always_ be safe as long as we don't use the loaded
+      // value!  So... fix UPDATE_ROLLING to be SIMD-friendly instead
+      // of iterating over the vector components.
+      //
+
+      // FIXME ^^^^^ THE IDX PROBABLY DOESN'T NEED TO BE SHIFTED TWICE AND WE CAN SAVE A FEW INSTRUCTIONS
+
+      // FIXME -- MIX MIX MIX MIX / SELECT
+
+      // only convert if original elem is not invalid
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+      if (SKC_IS_NOT_PATH_HEAD(ii,I) && (elem C != SKC_TAGGED_BLOCK_ID_INVALID)) { \
+        skc_block_id_t const b = bp_ids[bp_idx C];                      \
+        elem C = SKC_CMD_PATHS_COPY_UPDATE_ROLLING(elem C,b);           \
+      }
+
+      // printf("%2u: ( %8X, %8X, %8X )\n",ii,bp_idx,b,elem C);
+
+      SKC_PATHS_COPY_ELEM_EXPAND();
+
+      // store the elem back
+      (bp_elems+bp_elems_idx)[ii] = elem;
+    }
+
+  //
+  // the remaining words are treated like a node
+  //
+  for (skc_uint ii=SKC_PATHS_COPY_ELEMS_INCLUDING_HEADER; ii<SKC_PATHS_COPY_ELEMS_PER_BLOCK; ii+=SKC_PATHS_COPY_SUBGROUP_SIZE)
+    {
+      // load block_id_tag words
+      skc_paths_copy_elem elem   = (pb_elems+pb_elems_idx)[ii];
+
+      // calculate ahead of time
+      skc_pb_idx_v  const bp_idx = (bp_reads + SKC_CMD_PATHS_COPY_GET_ROLLING(elem - pb_rolling)) & bp_idx_mask;
+
+      //
+      // FIXME -- SIMD can be fully parallelized since a bp_ids[] load
+      // will _always_ be safe as long as we don't use the loaded
+      // value!  So... fix UPDATE_ROLLING to be SIMD-friendly instead
+      // of iterating over the vector components.
+      //
+
+      // FIXME ^^^^^ THE IDX PROBABLY DOESN'T NEED TO BE SHIFTED TWICE AND WE CAN SAVE A FEW INSTRUCTIONS
+
+      // only convert if original elem is not invalid
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                 \
+      if (elem C != SKC_TAGGED_BLOCK_ID_INVALID) {              \
+        skc_block_id_t const b = bp_ids[bp_idx C];              \
+        elem C = SKC_CMD_PATHS_COPY_UPDATE_ROLLING(elem C,b);   \
+      }
+
+      // printf("%2u: [ %8X, %8X, %8X ]\n",ii,bp_idx,b,elem C);
+
+      SKC_PATHS_COPY_ELEM_EXPAND();
+
+      // store the elem
+      (bp_elems+bp_elems_idx)[ii] = elem;
+    }
+}
+
+//
+// FIXME -- pack some of these constant integer args in a vec or struct
+//
+
+__kernel
+SKC_PATHS_COPY_KERNEL_ATTRIBS
+void
+skc_kernel_paths_copy
+(__global skc_uint                        * const host_map,
+
+ __global skc_block_id_t            const * const bp_ids,
+ __global skc_paths_copy_elem             * const bp_elems,
+ skc_uint                                   const bp_idx_mask, // pow2 modulo mask for block pool ring
+
+ __global skc_uint                  const * const bp_alloc,    // block pool ring base
+ skc_uint                                   const bp_alloc_idx,// which subbuf
+
+ __global union skc_tagged_block_id const * const pb_cmds,
+ __global skc_paths_copy_elem       const * const pb_elems,
+
+ skc_uint                                   const pb_size,     // # of commands/blocks in buffer
+ skc_uint                                   const pb_rolling,  // shifted rolling counter base
+
+ skc_uint                                   const pb_prev_from,
+ skc_uint                                   const pb_prev_span,
+ skc_uint                                   const pb_curr_from)
+{
+  //
+  // THERE ARE 3 TYPES OF PATH COPYING COMMANDS:
+  //
+  // - HEAD
+  // - NODE
+  // - SEGS
+  //
+  // THESE ARE SUBGROUP ORIENTED KERNELS
+  //
+  // A SUBGROUP CAN OPERATE ON [1,N] BLOCKS
+  //
+
+  //
+  // It's likely that peak bandwidth is achievable with a single
+  // workgroup.
+  //
+  // So let's keep the grids modestly sized and for simplicity and
+  // portability, let's assume that a single workgroup can perform all
+  // steps in the copy.
+  //
+  // Launch as large of a workgroup as possiblex
+  //
+  // 1. ATOMICALLY ALLOCATE BLOCKS BP_ELEMS POOL
+  // 2. CONVERT COMMANDS IN PB_ELEMS BLOCK OFFSETS
+  // 3. FOR EACH COMMAND:
+  //      - HEAD: SAVED HEAD ID PB_ELEMS MAP. CONVERT AND COPY H INDICES.
+  //      - NODE: CONVERT AND COPY B INDICES
+  //      - SEGS: BULK COPY
+  //
+  // B : number of words in block -- always pow2
+  // W : intelligently/arbitrarily chosen factor of B -- always pow2
+  //
+
+  //
+  // There are several approaches to processing the commands:
+  //
+  // 1. B threads are responsible for one block. All threads broadcast
+  //    load a single command word. Workgroup size must be a facpb_elemsr of
+  //    B.
+  //
+  // 2. W threads process an entire block. W will typically be the
+  //    device's subgroup/warp/wave width. W threads broadcast load a
+  //    single command word.
+  //
+  // 3. W threads process W blocks. W threads load W command words and
+  //    process W blocks.
+  //
+  // Clearly (1) has low I/O intensity but will achieve high
+  // parallelism by activating the most possible threads. The downside
+  // of this kind of approach is that the kernel will occupy even a
+  // large GPU with low intensity work and reduce opportunities for
+  // concurrent kernel execution (of other kernels).
+  //
+  // See Vasily Volkov's CUDA presentation describing these tradeoffs.
+  //
+  // Note that there are many other approaches.  For example, similar
+  // pb_elems (1) but each thread loads a pow2 vector of block data.
+  //
+
+  // load the copied atomic read "base" from gmem
+  skc_uint const bp_reads = bp_alloc[bp_alloc_idx];
+  // will always be less than 2^32
+  skc_uint const gid      = get_global_id(0);
+  // every subgroup/simd that will work on the block loads the same command
+  skc_uint const sg_idx   = gid / SKC_PATHS_COPY_SUBGROUP_SIZE;
+  // path builder data can be spread across two spans
+  skc_uint       pb_idx   = sg_idx + ((sg_idx < pb_prev_span) ? pb_prev_from : pb_curr_from);
+
+  // no need pb_elems make this branchless
+  if (pb_idx >= pb_size)
+    pb_idx -= pb_size;
+
+  // broadcast load the command
+  union skc_tagged_block_id const pb_cmd       = pb_cmds[pb_idx];
+
+  // what do we want pb_elems do with this block?
+  skc_cmd_paths_copy_tag    const tag          = SKC_CMD_PATHS_COPY_GET_TAG(pb_cmd.u32);
+
+  // compute offset from rolling base to get index into block pool ring allocation
+  skc_uint                  const bp_off       = SKC_CMD_PATHS_COPY_GET_ROLLING(pb_cmd.u32 - pb_rolling);
+
+  // convert the pb_cmd's offset counter pb_elems a block id
+  skc_block_id_t            const block        = skc_bp_off_to_id(bp_ids,bp_idx_mask,bp_reads,bp_off);
+
+#if 0
+  if (get_sub_group_local_id() == 0) {
+    printf("bp_off/reads = %u / %u\n",bp_off,bp_reads);
+    printf("< %8u >\n",block);
+  }
+#endif
+
+  // FIXME -- could make this 0 for SIMD, gid&mask or get_sub_group_local_id()
+  skc_uint                 const tid          = gid & SKC_PATHS_COPY_SUBGROUP_SIZE_MASK;
+
+  // calculate bp_elems (to) / pb_elems (from)
+  skc_uint                 const bp_elems_idx = block  * SKC_PATHS_COPY_ELEMS_PER_SUBBLOCK + tid;
+  skc_uint                 const pb_elems_idx = pb_idx * SKC_PATHS_COPY_ELEMS_PER_BLOCK    + tid;
+
+  if      (tag == SKC_CMD_PATHS_COPY_TAG_SEGS)
+    {
+#if 0
+      if (tid == 0)
+        printf("%3u, segs\n",bp_off);
+#endif
+      skc_copy_segs(bp_elems,
+                    bp_elems_idx,
+                    pb_elems,
+                    pb_elems_idx);
+    }
+  else if (tag == SKC_CMD_PATHS_COPY_TAG_NODE)
+    {
+#if 0
+      if (tid == 0)
+        printf("%3u, NODE\n",bp_off);
+#endif
+      skc_copy_node(bp_elems, // to
+                    bp_elems_idx,
+                    bp_ids,
+                    bp_reads,
+                    bp_idx_mask,
+                    pb_elems, // from
+                    pb_elems_idx,
+                    pb_rolling);
+    }
+  else // ( tag == SKC_CMD_PATHS_COPY_TAG_HEAD)
+    {
+#if 0
+      if (tid == 0)
+        printf("%3u, HEAD\n",bp_off);
+#endif
+      skc_copy_head(host_map,
+                    block,
+                    bp_elems, // to
+                    bp_elems_idx,
+                    bp_ids,
+                    bp_reads,
+                    bp_idx_mask,
+                    pb_elems, // from
+                    pb_elems_idx,
+                    pb_rolling);
+    }
+}
+
+//
+//
+//
+
+__kernel
+SKC_PATHS_ALLOC_KERNEL_ATTRIBS
+void
+skc_kernel_paths_alloc(__global skc_uint volatile * const bp_atomics,
+                       __global skc_uint          * const bp_alloc,
+                       skc_uint                     const bp_alloc_idx,
+                       skc_uint                     const pb_cmd_count)
+{
+  //
+  // allocate blocks in block pool
+  //
+  skc_uint const reads = atomic_add(bp_atomics+SKC_BP_ATOMIC_OFFSET_READS,pb_cmd_count);
+
+  // store in slot
+  bp_alloc[bp_alloc_idx] = reads;
+
+#if 0
+  printf("pc: %8u + %u\n",reads,pb_cmd_count);
+#endif
+}
+
+//
+//
+//
diff --git a/src/compute/skc/paths_reclaim.cl b/src/compute/skc/paths_reclaim.cl
new file mode 100644
index 0000000..5631606
--- /dev/null
+++ b/src/compute/skc/paths_reclaim.cl
@@ -0,0 +1,390 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+// FIXME -- a pre-allocation step could load the path header quads and
+// total up the number of blocks in the workgroup or subgroup
+// minimizing the number of later atomics adds.
+//
+
+#include "device_cl_12_gen9.h"
+#include "block_pool_cl.h"
+#include "atomic_cl.h"
+#include "block.h"
+#include "path.h"
+#include "common.h"
+
+//
+//
+//
+
+#define SKC_PATHS_RECLAIM_SUBGROUP_SIZE_MASK (SKC_PATHS_RECLAIM_SUBGROUP_SIZE - 1)
+
+#define SKC_PATHS_RECLAIM_SUBGROUP_ELEMS     (SKC_PATHS_RECLAIM_SUBGROUP_SIZE * SKC_PATHS_RECLAIM_LOCAL_ELEMS)
+
+#define SKC_PATHS_RECLAIM_X                  (SKC_DEVICE_BLOCK_WORDS / SKC_PATHS_RECLAIM_SUBGROUP_ELEMS)
+
+//
+//
+//
+
+#if   ( SKC_PATHS_RECLAIM_X == 1 )
+#define SKC_PATHS_RECLAIM_BLOCK_EXPAND()       SKC_EXPAND_1()
+#define SKC_PATHS_RECLAIM_BLOCK_EXPAND_I_LAST  0
+
+#elif ( SKC_PATHS_RECLAIM_X == 2 )
+#define SKC_PATHS_RECLAIM_BLOCK_EXPAND()       SKC_EXPAND_2()
+#define SKC_PATHS_RECLAIM_BLOCK_EXPAND_I_LAST  1
+
+#elif ( SKC_PATHS_RECLAIM_X == 4 )
+#define SKC_PATHS_RECLAIM_BLOCK_EXPAND()       SKC_EXPAND_4()
+#define SKC_PATHS_RECLAIM_BLOCK_EXPAND_I_LAST  3
+
+#elif ( SKC_PATHS_RECLAIM_X == 8 )
+#define SKC_PATHS_RECLAIM_BLOCK_EXPAND()       SKC_EXPAND_8()
+#define SKC_PATHS_RECLAIM_BLOCK_EXPAND_I_LAST  7
+
+#elif ( SKC_PATHS_RECLAIM_X == 16)
+#define SKC_PATHS_RECLAIM_BLOCK_EXPAND()       SKC_EXPAND_16()
+#define SKC_PATHS_RECLAIM_BLOCK_EXPAND_I_LAST  15
+
+#else
+#error "MISSING SKC_PATHS_RECLAIM_X"
+#endif
+
+//
+// FIXME -- slate these for replacement
+//
+
+#define SKC_BROADCAST(E,S,I)                                            \
+  sub_group_broadcast(E,S - I * SKC_PATHS_RECLAIM_SUBGROUP_SIZE)
+
+#define SKC_BROADCAST_LAST_HELPER(E,I)                          \
+  sub_group_broadcast(E,SKC_PATHS_RECLAIM_SUBGROUP_SIZE - 1)
+
+#define SKC_BROADCAST_LAST(E,I)                 \
+  SKC_BROADCAST_LAST_HELPER(E,I)
+
+//
+// COMPILE-TIME PREDICATES
+//
+
+#define SKC_PATHS_RECLAIM_ELEM_GTE(X,I)                         \
+  SKC_GTE_MACRO(X,(I+1) * SKC_PATHS_RECLAIM_SUBGROUP_SIZE)
+
+#define SKC_PATHS_RECLAIM_ELEM_IN_RANGE(X,I)                            \
+  (skc_bool)SKC_GTE_MACRO(X, I   * SKC_PATHS_RECLAIM_SUBGROUP_SIZE) &&  \
+  (skc_bool)SKC_LT_MACRO(X,(I+1) * SKC_PATHS_RECLAIM_SUBGROUP_SIZE)
+
+#define SKC_PATHS_RECLAIM_ENTIRELY_HEADER(I)            \
+  SKC_PATHS_RECLAIM_ELEM_GTE(SKC_PATH_HEAD_WORDS,I)
+
+#define SKC_PATHS_RECLAIM_PARTIALLY_HEADER(I)                   \
+  SKC_PATHS_RECLAIM_ELEM_IN_RANGE(SKC_PATH_HEAD_WORDS,I)
+
+//
+// RUN-TIME PREDICATES
+//
+
+#define SKC_PATHS_RECLAIM_IS_HEADER(I)                                  \
+  (get_sub_group_local_id() + I * SKC_PATHS_RECLAIM_SUBGROUP_SIZE < SKC_PATH_HEAD_WORDS)
+
+//
+// FIXME -- THIS BITFIELD SCAN APPROACH CAN BE PARAMETERIZED FOR ALL
+// POSSIBLE PRACTICAL POWER-OF-TWO SUBGROUP AND SUBBLOCKS-PER-BLOCK
+// COMBOS (NOT NECESSARILY POW2)
+//
+// FOR WIDER SUBGROUPS WITH BIG BLOCKS, WE WILL WANT TO USE A VECTOR
+// UINT TYPE INSTEAD OF A ULONG.
+//
+
+#define SKC_PATHS_RECLAIM_PACKED_COUNT_BITS     SKC_PATHS_RECLAIM_SUBGROUP_SIZE_LOG2
+#define SKC_PATHS_RECLAIM_PACKED_COUNT_DECLARE  skc_uint
+
+//
+//
+//
+
+#define SKC_PATHS_RECLAIM_PACKED_COUNT_MASK  SKC_BITS_TO_MASK(SKC_PATHS_RECLAIM_PACKED_COUNT_BITS)
+
+#define SKC_PATHS_RECLAIM_PACKED_COUNT_IS_BLOCK(E,I)            \
+  (((E) & SKC_DEVICE_SUBBLOCKS_PER_BLOCK_MASK)                  \
+   ? 0 : (1u << SKC_PATHS_RECLAIM_PACKED_COUNT_BITS * I))
+
+#define SKC_PATHS_RECLAIM_PACKED_COUNT_SCAN_EXCLUSIVE_ADD(S,C)  \
+  S = sub_group_scan_exclusive_add(C)
+
+#define SKC_PATHS_RECLAIM_PACKED_COUNT_GET(C,I)                         \
+  (((C) >> (SKC_PATHS_RECLAIM_PACKED_COUNT_BITS * I)) & SKC_PATHS_RECLAIM_PACKED_COUNT_MASK)
+
+//
+//
+//
+
+struct skc_reclaim
+{
+  skc_path_h aN[SKC_RECLAIM_ARRAY_SIZE];
+};
+
+__kernel
+SKC_PATHS_RECLAIM_KERNEL_ATTRIBS
+void
+skc_kernel_paths_reclaim(__global skc_block_id_t          * const bp_ids,      // block pool ids ring
+                         __global skc_uint                * const bp_elems,    // block pool blocks
+                         __global skc_uint       volatile * const bp_atomics,  // read/write atomics
+                         skc_uint                           const bp_mask,     // pow2 modulo mask for block pool ring
+                         __global skc_block_id_t const    * const map,         // path host-to-device map
+                         struct   skc_reclaim               const reclaim)     // array of host path ids
+{
+#if (__OPENCL_VERSION__ < 200)
+  skc_uint const reclaim_stride = get_num_sub_groups();
+#else
+  skc_uint const reclaim_stride = get_enqueued_num_sub_groups(); // 2.0 supports non-uniform workgroups
+#endif
+  skc_uint       reclaim_idx    = get_group_id(0) * reclaim_stride + get_sub_group_id();
+
+#if 0
+  //
+  // NOTE -- FOR NOW, THIS KERNEL ALWAYS LAUNCHES FIXED SIZE GRIDS BUT
+  // WE MIGHT WANT TO HAVE THE GRID LIMIT ITSELF TO A FRACTIONAL
+  // MULTIPROCESSOR IN ORDER TO MINIMIZE THE IMPACT OF A LARGE
+  // RECLAMATION JOB ON THE REST OF THE PIPELINE.
+  //
+  for (; reclaim_idx < SKC_RECLAIM_ARRAY_SIZE; reclaim_idx+=reclaim_stride)
+#endif
+    {
+      // get host path id
+      skc_path_h const path = reclaim.aN[reclaim_idx];
+
+      // get the path header block from the map
+      skc_block_id_t   id   = map[path];
+
+      //
+      // blindly load all of the head elements into registers
+      //
+      skc_uint const head_idx = id * SKC_DEVICE_SUBBLOCK_WORDS + get_sub_group_local_id();
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+      skc_uint h##I = bp_elems[head_idx + I * SKC_PATHS_RECLAIM_SUBGROUP_SIZE];
+
+      SKC_PATHS_RECLAIM_BLOCK_EXPAND();
+
+      //
+      // pick out count.nodes and count.prims from the header
+      //
+      skc_uint count_blocks, count_nodes;
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+      if (SKC_PATHS_RECLAIM_ELEM_IN_RANGE(SKC_PATH_HEAD_OFFSET_BLOCKS,I)) { \
+        count_blocks = SKC_BROADCAST(h##I,SKC_PATH_HEAD_OFFSET_BLOCKS,I); \
+      }                                                                 \
+      if (SKC_PATHS_RECLAIM_ELEM_IN_RANGE(SKC_PATH_HEAD_OFFSET_NODES,I)) { \
+        count_nodes  = SKC_BROADCAST(h##I,SKC_PATH_HEAD_OFFSET_NODES,I); \
+      }
+
+      SKC_PATHS_RECLAIM_BLOCK_EXPAND();
+
+#if 0
+      if (get_sub_group_local_id() == 0) {
+        printf("reclaim paths:   %9u / %5u / %5u\n",path,count_blocks,count_nodes);
+      }
+#endif
+
+      //
+      // acquire a span in the block pool ids ring for reclaimed ids
+      //
+      // FIXME count_blocks and atomic add can be done in same lane
+      //
+      skc_uint bp_ids_base = 0;
+
+      if (get_sub_group_local_id() == 0) {
+        bp_ids_base = SKC_ATOMIC_ADD_GLOBAL_RELAXED_SUBGROUP(bp_atomics+SKC_BP_ATOMIC_OFFSET_WRITES,count_blocks);
+
+#if 0
+        printf("paths: bp_ids_base = %u\n",bp_ids_base);
+#endif
+      }
+
+      bp_ids_base = sub_group_broadcast(bp_ids_base,0);
+
+      //
+      // shift away the tagged block id's tag
+      //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                         \
+      if (!SKC_PATHS_RECLAIM_ENTIRELY_HEADER(I)) {      \
+        h##I = h##I >> SKC_TAGGED_BLOCK_ID_BITS_TAG;    \
+      }
+
+      SKC_PATHS_RECLAIM_BLOCK_EXPAND();
+
+      //
+      // swap current id with next
+      //
+      if (get_sub_group_local_id() == SKC_PATHS_RECLAIM_SUBGROUP_SIZE - 1)
+        {
+          skc_block_id_t const next = SKC_CONCAT(h,SKC_PATHS_RECLAIM_BLOCK_EXPAND_I_LAST);
+
+          SKC_CONCAT(h,SKC_PATHS_RECLAIM_BLOCK_EXPAND_I_LAST) = id;
+
+          id = next;
+        }
+
+      //
+      // - we'll skip subgroups that are entirely header
+      //
+      // - but we need to mark any header elements that partially fill
+      //   a subgroup as invalid tagged block ids
+      //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                         \
+      if (!SKC_PATHS_RECLAIM_ENTIRELY_HEADER(I)) {      \
+        if (SKC_PATHS_RECLAIM_PARTIALLY_HEADER(I)) {    \
+          if (SKC_PATHS_RECLAIM_IS_HEADER(I)) {         \
+            h##I = SKC_TAGGED_BLOCK_ID_INVALID;         \
+          }                                             \
+        }                                               \
+      }
+
+      SKC_PATHS_RECLAIM_BLOCK_EXPAND();
+
+      {
+        //
+        // count reclaimable blocks in each lane
+        //
+        SKC_PATHS_RECLAIM_PACKED_COUNT_DECLARE packed_count = ( 0 );
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+        if (!SKC_PATHS_RECLAIM_ENTIRELY_HEADER(I)) {                    \
+          packed_count |= SKC_PATHS_RECLAIM_PACKED_COUNT_IS_BLOCK(h##I,I); \
+        }
+
+        SKC_PATHS_RECLAIM_BLOCK_EXPAND();
+
+        //
+        // scan to find index of each block
+        //
+        SKC_PATHS_RECLAIM_PACKED_COUNT_DECLARE packed_index = ( 0 );
+
+        SKC_PATHS_RECLAIM_PACKED_COUNT_SCAN_EXCLUSIVE_ADD(packed_index,packed_count);
+
+        //
+        // store blocks back to ring
+        //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+        if (!SKC_PATHS_RECLAIM_ENTIRELY_HEADER(I)) {                    \
+          skc_uint const index      = SKC_PATHS_RECLAIM_PACKED_COUNT_GET(packed_index,I); \
+          skc_uint const count      = SKC_PATHS_RECLAIM_PACKED_COUNT_GET(packed_count,I); \
+          skc_uint const bp_ids_idx = (bp_ids_base + index) & bp_mask;  \
+          if (count > 0) {                                              \
+            bp_ids[bp_ids_idx] = h##I;                                  \
+          }                                                             \
+          skc_uint const total = index + count;                         \
+          bp_ids_base += sub_group_broadcast(total,SKC_PATHS_RECLAIM_SUBGROUP_SIZE-1); \
+        }
+
+        SKC_PATHS_RECLAIM_BLOCK_EXPAND();
+
+        // printf("P %7u ! %u\n",bp_ids_idx,h##I);
+      }
+
+      //
+      // we're done if it was just the header
+      //
+      if (count_nodes == 0)
+        return;
+
+      //
+      // otherwise, walk the nodes
+      //
+      do {
+        // id of next block is in last lane
+        id = sub_group_broadcast(id,SKC_PATHS_RECLAIM_SUBGROUP_SIZE-1);
+
+        // get index of each element
+        skc_uint const node_idx = id * SKC_DEVICE_SUBBLOCK_WORDS + get_sub_group_local_id();
+
+        //
+        // blindly load all of the node elements into registers
+        //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+        skc_uint n##I = bp_elems[node_idx + I * SKC_PATHS_RECLAIM_SUBGROUP_SIZE];
+
+        SKC_PATHS_RECLAIM_BLOCK_EXPAND();
+
+        //
+        // shift away the tagged block id's tag
+        //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                         \
+        n##I = n##I >> SKC_TAGGED_BLOCK_ID_BITS_TAG;
+
+        SKC_PATHS_RECLAIM_BLOCK_EXPAND();
+
+        //
+        // swap current id with next
+        //
+        if (get_sub_group_local_id() == SKC_PATHS_RECLAIM_SUBGROUP_SIZE - 1)
+          {
+            skc_block_id_t const next = SKC_CONCAT(n,SKC_PATHS_RECLAIM_BLOCK_EXPAND_I_LAST);
+
+            SKC_CONCAT(n,SKC_PATHS_RECLAIM_BLOCK_EXPAND_I_LAST) = id;
+
+            id = next;
+          }
+
+        //
+        // count reclaimable blocks in each lane
+        //
+        SKC_PATHS_RECLAIM_PACKED_COUNT_DECLARE packed_count = ( 0 );
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+        packed_count |= SKC_PATHS_RECLAIM_PACKED_COUNT_IS_BLOCK(n##I,I);
+
+        SKC_PATHS_RECLAIM_BLOCK_EXPAND();
+
+        //
+        // scan to find index of each block
+        //
+        SKC_PATHS_RECLAIM_PACKED_COUNT_DECLARE packed_index = ( 0 );
+
+        SKC_PATHS_RECLAIM_PACKED_COUNT_SCAN_EXCLUSIVE_ADD(packed_index,packed_count);
+
+        //
+        // store blocks back to ring
+        //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R) {                                       \
+          skc_uint const index      = SKC_PATHS_RECLAIM_PACKED_COUNT_GET(packed_index,I); \
+          skc_uint const count      = SKC_PATHS_RECLAIM_PACKED_COUNT_GET(packed_count,I); \
+          skc_uint const bp_ids_idx = (bp_ids_base + index) & bp_mask;  \
+          if (count > 0) {                                              \
+            bp_ids[bp_ids_idx] = n##I;                                  \
+          }                                                             \
+          skc_uint const total = index + count;                         \
+          bp_ids_base += sub_group_broadcast(total,SKC_PATHS_RECLAIM_SUBGROUP_SIZE-1); \
+        }
+
+        SKC_PATHS_RECLAIM_BLOCK_EXPAND();
+
+        // printf("P %7u ! %u\n",bp_ids_idx,n##I);
+
+        // any more nodes?
+      } while (--count_nodes > 0);
+    }
+}
+
+//
+//
+//
diff --git a/src/compute/skc/place.cl b/src/compute/skc/place.cl
new file mode 100644
index 0000000..00f16f7
--- /dev/null
+++ b/src/compute/skc/place.cl
@@ -0,0 +1,871 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include "device_cl_12_gen9.h"
+#include "common.h"
+#include "atomic_cl.h"
+#include "raster.h"
+#include "tile.h"
+
+//
+//
+//
+
+#define SKC_PLACE_SUBGROUP_MASK      (SKC_PLACE_SUBGROUP_SIZE - 1)
+#define SKC_PLACE_SUBGROUP_LAST      (SKC_PLACE_SUBGROUP_SIZE - 1)
+
+//
+//
+//
+
+#define SKC_PLACE_SMEM_COUNT_TTSK    SKC_MAX_MACRO(SKC_RASTER_NODE_MAX_TTSK,SKC_PLACE_SUBGROUP_SIZE)
+#define SKC_PLACE_SMEM_COUNT_TTPK    SKC_RASTER_NODE_MAX_TTPK
+
+//
+//
+//
+
+#define SKC_PLACE_X                  (SKC_DEVICE_BLOCK_DWORDS / SKC_PLACE_SUBGROUP_SIZE)
+
+//
+//
+//
+
+#if   ( SKC_PLACE_X == 1 )
+#define SKC_PLACE_EXPAND()           SKC_EXPAND_1()
+#define SKC_PLACE_EXPAND_I_LAST      0
+
+#elif ( SKC_PLACE_X == 2 )
+#define SKC_PLACE_EXPAND()           SKC_EXPAND_2()
+#define SKC_PLACE_EXPAND_I_LAST      1
+
+#elif ( SKC_PLACE_X == 4 )
+#define SKC_PLACE_EXPAND()           SKC_EXPAND_4()
+#define SKC_PLACE_EXPAND_I_LAST      3
+
+#elif ( SKC_PLACE_X == 8 )
+#define SKC_PLACE_EXPAND()           SKC_EXPAND_8()
+#define SKC_PLACE_EXPAND_I_LAST      7
+
+#elif ( SKC_PLACE_X == 16)
+#define SKC_PLACE_EXPAND()           SKC_EXPAND_16()
+#define SKC_PLACE_EXPAND_I_LAST      15
+#endif
+
+//
+// PREFIX STORES THE 64-BIT KEYS WITH TWO 32-BIT SUBGROUP-WIDE
+// COALESCED WRITES.  LO FIRST, FOLLOWED BY HI.
+//
+// THIS SLIGHTLY COMPLICATES LOADING BY THE PLACE KERNEL IF THE
+// KERNELS USE DIFFERENT SUBGROUP SIZES.
+//
+// THE BENEFIT IS THAT THE RASTER RECLAIM KERNEL ONLY HAS TO LOAD THE
+// LO WORD OF THE KEY SINCE IT CONTAINS THE BLOCK ID.
+//
+// NOTE: AT THIS POINT, ONLY INTEL'S HD GRAPHICS ARCHITECTURE UNDER
+// OPENCL SUPPORTS SELECTING A SUBGROUP SIZE (8/16/32). VULKAN MAY
+// ONLY SUPPORT A SUBGROUP SIZE OF 16.
+//
+
+#if    ( SKC_PREFIX_SUBGROUP_SIZE == SKC_PLACE_SUBGROUP_SIZE )
+
+#define SKC_PLACE_STRIDE_H(L)              (L)
+#define SKC_PLACE_STRIDE_V_LO(I)           (I * 2 * SKC_PLACE_SUBGROUP_SIZE)
+#define SKC_PLACE_STRIDE_V_HI(I)           (SKC_PLACE_STRIDE_V_LO(I) + SKC_PLACE_SUBGROUP_SIZE)
+
+#elif  ( SKC_PREFIX_SUBGROUP_SIZE >  SKC_PLACE_SUBGROUP_SIZE ) // same as above when ratio equals 1
+
+#define SKC_PLACE_SUBGROUP_RATIO           (SKC_PREFIX_SUBGROUP_SIZE / SKC_PLACE_SUBGROUP_SIZE)
+#define SKC_PLACE_SUBGROUP_RATIO_MASK      (SKC_PLACE_SUBGROUP_RATIO - 1)
+#define SKC_PLACE_SUBGROUP_RATIO_SCALE(I)  ((I / SKC_PLACE_SUBGROUP_RATIO) * 2 * SKC_PLACE_SUBGROUP_RATIO + (I & SKC_PLACE_SUBGROUP_RATIO_MASK))
+
+#define SKC_PLACE_STRIDE_H(L)              (L)
+#define SKC_PLACE_STRIDE_V_LO(I)           (SKC_PLACE_SUBGROUP_RATIO_SCALE(I) * SKC_PLACE_SUBGROUP_SIZE)
+#define SKC_PLACE_STRIDE_V_HI(I)           (SKC_PLACE_STRIDE_V_LO(I) + SKC_PLACE_SUBGROUP_RATIO * SKC_PLACE_SUBGROUP_SIZE)
+
+#elif  ( SKC_PREFIX_SUBGROUP_SIZE <  SKC_PLACE_SUBGROUP_SIZE ) // same as above when ratio equals 1
+
+#define SKC_PLACE_SUBGROUP_RATIO           (SKC_PLACE_SUBGROUP_SIZE / SKC_PREFIX_SUBGROUP_SIZE)
+#define SKC_PLACE_SUBGROUP_RATIO_MASK      (SKC_PLACE_SUBGROUP_SIZE / SKC_PLACE_SUBGROUP_RATIO - 1) // equal to prefix subgroup mask
+
+#define SKC_PLACE_STRIDE_H(L)              (((L) & ~SKC_PLACE_SUBGROUP_RATIO_MASK) * 2 + ((L) & SKC_PLACE_SUBGROUP_RATIO_MASK))
+#define SKC_PLACE_STRIDE_V_LO(I)           (I * 2 * SKC_PLACE_SUBGROUP_SIZE)
+#define SKC_PLACE_STRIDE_V_HI(I)           (SKC_PLACE_STRIDE_V_LO(I) + SKC_PLACE_SUBGROUP_SIZE / SKC_PLACE_SUBGROUP_RATIO)
+
+#endif
+
+//
+// A COARSE COMPILE-TIME GUARD -- WILL ONLY MATTER WHEN SUBGROUP SIZE
+// IS EQUAL TO THE RASTER HEADER SIZE (CURRENTLY 8)
+//
+
+#define SKC_PLACE_IS_ALL_HEADER_ROW(i)   (((i)+1) * SKC_PLACE_SUBGROUP_SIZE <= SKC_RASTER_HEAD_DWORDS)
+
+#define SKC_PLACE_IS_NOT_HEADER_ROW(i)   ( (i)    * SKC_PLACE_SUBGROUP_SIZE >= SKC_RASTER_HEAD_DWORDS)
+
+#define SKC_PLACE_IS_TRAILING_ROW(i)     (((i)+1) * SKC_PLACE_SUBGROUP_SIZE == SKC_DEVICE_BLOCK_DWORDS)
+
+#define SKC_PLACE_IS_HEADER_ROW_KEY(i)   ((i) * SKC_PLACE_SUBGROUP_SIZE + get_sub_group_local_id() - SKC_RASTER_HEAD_DWORDS < (k))
+
+
+//
+// Note: HEADER_LESS_THAN purposefully wraps unsigned integer to ~UINT_MAX
+//
+#define SKC_PLACE_HEADER_LESS_THAN(i,k) ((i) * SKC_PLACE_SUBGROUP_SIZE + get_sub_group_local_id() - SKC_RASTER_HEAD_DWORDS < (k))
+#define SKC_PLACE_NODE_LESS_THAN(i,k)   ((i) * SKC_PLACE_SUBGROUP_SIZE + get_sub_group_local_id()                          < (k))
+
+//
+// TTSK v2:
+//
+//  0                                       63
+//  | TTSB ID | PREFIX |  SPAN   |  X  |  Y  |
+//  +---------+--------+---------+-----+-----+
+//  |    27   | 1 (=0) | 12 (=0) | 12  | 12  |
+//
+//
+// TTPK v2:
+//
+//  0                                    63
+//  | TTPB ID | PREFIX | SPAN |  X  |  Y  |
+//  +---------+--------+------+-----+-----+
+//  |    27   | 1 (=1) |  12  | 12  | 12  |
+//
+//
+
+//
+// TTCK (32-BIT COMPARE) v1:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          30          |    1   |    1   |   18  |  7  |  7  |
+//
+//
+// TTCK (32-BIT COMPARE) v2:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          30          |    1   |    1   |   15  |  9  |  8  |
+//
+//
+// TTCK (64-BIT COMPARE) -- achieves 4K x 4K with an 8x16 tile:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          27          |    1   |    1   |   18  |  9  |  8  |
+//
+
+union skc_subgroup_smem
+{
+  skc_uint scratch[SKC_PLACE_SUBGROUP_SIZE]; // will only use SKC_PLACE_SUBGROUP_SIZE
+
+  struct {
+    struct {
+      skc_ttsk_lo_t sk[SKC_PLACE_SMEM_COUNT_TTSK];
+      skc_ttpk_lo_t pk[SKC_PLACE_SMEM_COUNT_TTPK];
+    } lo;
+
+    struct {
+      skc_ttsk_hi_t sk[SKC_PLACE_SMEM_COUNT_TTSK];
+      skc_ttpk_hi_t pk[SKC_PLACE_SMEM_COUNT_TTPK];
+    } hi;
+
+    // skc_uint span[SKC_PLACE_SMEM_COUNT_TTPK];
+  };
+
+};
+
+//
+// scatter scan max
+//
+static
+skc_int_v_t
+skc_scatter_scan_max(__local union skc_subgroup_smem  volatile * const smem,
+                     skc_int_v_t                                 const iss,
+                     skc_int_v_t                                 const ess)
+{
+  //
+  // prefix sums determine which lanes we're going to work on next
+  //
+  skc_pred_v_t const is_scratch_store = (iss > 0) && (ess < SKC_PLACE_SUBGROUP_SIZE);
+  skc_int_v_t  const scratch_idx      = max(ess,0);
+
+  //
+  // SIMT
+  //
+
+  //
+  // zero the volatile smem scratchpad using vector syntax
+  //
+  smem->scratch[get_sub_group_local_id()] = ( 0 );
+
+  //
+  // store source lane at starting lane
+  //
+  if (is_scratch_store) {
+    smem->scratch[scratch_idx] = get_sub_group_local_id();
+  }
+
+  //
+  // propagate lanes to right using max scan
+  //
+  skc_int_v_t const scratch = smem->scratch[get_sub_group_local_id()];
+  skc_int_v_t const source  = sub_group_scan_inclusive_max(scratch);
+
+  return source;
+}
+
+//
+//
+//
+
+static
+skc_bool
+skc_xk_clip(union skc_tile_clip const * const tile_clip,
+            skc_ttxk_t                * const xk)
+{
+  //
+  // clip the sk and pk keys
+  //
+  // if fully clipped then return false
+  //
+  // alternatively -- we can expand all these keys in place
+  //
+  // alternatively -- keep sk and pk keys segregated because sk
+  // represents the vast majority of keys and are easier to process.
+  // don't mess with the fastpath!
+  //
+  return false;
+}
+
+//
+//
+//
+
+static
+skc_ttck_t
+skc_sk_to_ck(__local union skc_subgroup_smem  volatile * const smem,
+             union skc_cmd_place              const    * const cmd,
+             skc_uint                                    const sk_idx)
+{
+  skc_uint const lo = smem->lo.sk[sk_idx]; // assumes prefix bit is 0
+  skc_uint const hi = smem->hi.sk[sk_idx];
+
+  skc_ttck_t ck;
+
+  ck.lo = lo | (cmd->layer_id << SKC_TTCK_LO_BITS_ID_PREFIX_ESCAPE); // FIXME -- preshift the layer id
+
+  // FIXME -- x and y should already be clipped and shifted
+  skc_uint const x = (cmd->tx + SKC_BFE(hi,SKC_TTXK_HI_BITS_X,SKC_TTXK_HI_OFFSET_X)) << SKC_TTCK_HI_OFFSET_X;
+  skc_uint const y = (cmd->ty + SKC_BFE(hi,SKC_TTXK_HI_BITS_Y,SKC_TTXK_HI_OFFSET_Y)) << SKC_TTCK_HI_OFFSET_Y;
+
+  ck.hi = (cmd->layer_id >> SKC_TTCK_HI_SHR_LAYER) | x | y;
+
+  return ck;
+}
+
+static
+skc_ttck_t
+skc_pk_to_ck(__local union skc_subgroup_smem  volatile * const smem,
+             union skc_cmd_place              const    * const cmd,
+             skc_uint                                    const pk_idx,
+             skc_uint                                    const dx)
+{
+  skc_uint const lo = smem->lo.pk[pk_idx] & SKC_TTXK_LO_MASK_ID_PREFIX; // assumes prefix bit is 1
+  skc_uint const hi = smem->hi.pk[pk_idx];
+
+  skc_ttck_t ck;
+
+  ck.lo = lo | (cmd->layer_id << SKC_TTCK_LO_BITS_ID_PREFIX_ESCAPE); // FIXME -- preshift the layer id
+
+  // FIXME -- x and y should already be clipped and shifted
+  skc_uint const x = (cmd->tx + dx + SKC_BFE(hi,SKC_TTXK_HI_BITS_X,SKC_TTXK_HI_OFFSET_X)) << SKC_TTCK_HI_OFFSET_X;
+  skc_uint const y = (cmd->ty +      SKC_BFE(hi,SKC_TTXK_HI_BITS_Y,SKC_TTXK_HI_OFFSET_Y)) << SKC_TTCK_HI_OFFSET_Y;
+
+  ck.hi = (cmd->layer_id >> SKC_TTCK_HI_SHR_LAYER) | x | y;
+
+  return ck;
+}
+
+//
+//
+//
+
+static
+void
+skc_ttsk_flush(__global SKC_ATOMIC_UINT         volatile * const place_atomics,
+               __global skc_ttck_t                       * const ck_extent,
+               __local union skc_subgroup_smem  volatile * const smem,
+               union skc_cmd_place              const    * const cmd,
+               skc_uint                         const            sk)
+{
+  //
+  // Pretty sure you can never ever have an sk count equal to 0
+  //
+  skc_uint ck_base = 0;
+
+  // last lane performs the block pool allocation with an atomic increment
+  if (get_sub_group_local_id() == 0) {
+    ck_base = SKC_ATOMIC_ADD_GLOBAL_RELAXED_DEVICE(place_atomics,sk);
+  }
+
+  // broadcast base to all lanes
+  ck_base = sub_group_broadcast(ck_base,0);
+
+  // convert sk keys to ck keys
+  for (skc_uint ii=get_sub_group_local_id(); ii<sk; ii+=SKC_PLACE_SUBGROUP_SIZE)
+    {
+      ck_extent[ck_base+ii] = skc_sk_to_ck(smem,cmd,ii);
+    }
+}
+
+//
+//
+//
+
+static
+skc_int
+skc_ttpk_get_span(__local union skc_subgroup_smem  volatile * const smem,
+                  skc_uint                                    const idx)
+{
+  skc_uint const lo      = smem->lo.pk[idx];
+  skc_uint const hi      = smem->hi.pk[idx];
+
+  skc_uint const span_lo = lo >> SKC_TTXK_LO_OFFSET_SPAN;
+  skc_uint const span_hi = (hi & SKC_BITS_TO_MASK(SKC_TTXK_HI_BITS_SPAN)) << SKC_TTXK_LO_BITS_SPAN;
+
+  return (span_lo | span_hi) + 1;
+}
+
+//
+//
+//
+
+static
+void
+skc_ttpk_flush(__global SKC_ATOMIC_UINT         volatile * const place_atomics,
+               __global skc_ttck_t                       * const ck_extent,
+               __local union skc_subgroup_smem  volatile * const smem,
+               union skc_cmd_place              const    * const cmd,
+               skc_uint                         const            pk)
+{
+  // bail out if pk queue is empty
+  if (pk == 0)
+    return;
+
+#if 0
+  if (get_sub_group_local_id() == 0)
+    printf("%u\n",pk);
+#endif
+
+  //
+  // FIXME -- this nested loop iterates over the queue processing a
+  // subgroup of 64-bit keys at a time.  This is probably not the most
+  // efficient approach so investigate how to store and iterate over a
+  // wider than subgroup (node-sized) queue of keys.
+  //
+
+  // round up so we work with full subgroups
+  skc_uint const pk_ru = (pk + SKC_PLACE_SUBGROUP_SIZE - 1) & ~SKC_PLACE_SUBGROUP_MASK;
+  skc_uint       ii    = 0;
+
+  // nested loop that expands all ttpk keys
+#if (SKC_PLACE_SMEM_COUNT_TTPK > SKC_PLACE_SUBGROUP_SIZE)
+  for (; ii<pk_ru; ii+=SKC_PLACE_SUBGROUP_SIZE)
+#endif
+    {
+      skc_uint idx  = ii + get_sub_group_local_id();
+      skc_int  span = 0;
+
+      // how many tiles does this ttpk span?
+      if (idx < pk)
+        span = skc_ttpk_get_span(smem,idx);
+
+      // we need inclusive, exclusive and total
+      skc_int iss = sub_group_scan_inclusive_add(span);
+      skc_int ess = iss - span;
+      skc_int rem = sub_group_broadcast(iss,SKC_PLACE_SUBGROUP_SIZE-1);
+
+      // printf("%u : %u\n",span,iss);
+      // continue;
+
+      // atomically allocate space for the pk keys
+      skc_uint ck_base = 0;
+
+      // last lane performs the block pool allocation with an atomic increment
+      if (get_sub_group_local_id() == 0) {
+        ck_base = SKC_ATOMIC_ADD_GLOBAL_RELAXED_DEVICE(place_atomics,rem);
+      }
+
+      // broadcast atomically allocated extent base to all lanes
+      skc_uint ck_idx = sub_group_broadcast(ck_base,0) + get_sub_group_local_id();
+
+      //
+      // FIXME -- this loop would probably be faster if the ttpk keys
+      // were held in registers and accessed with shuffles instead of
+      // SMEM loads
+      //
+
+      //
+      // loop until there are no more expanded pk keys
+      //
+      while (true)
+        {
+          skc_int const source = skc_scatter_scan_max(smem,iss,ess);
+          skc_int const dx     = get_sub_group_local_id() - intel_sub_group_shuffle(ess,source);
+
+          // store valid ck keys to gmem
+          if (get_sub_group_local_id() < rem) {
+            ck_extent[ck_idx] = skc_pk_to_ck(smem,cmd,ii+source,dx);
+          }
+
+          // decrement remainder
+          rem -= SKC_PLACE_SUBGROUP_SIZE;
+
+          if (rem <= 0)
+            break;
+
+          // increment/decrement indices
+          ck_idx += SKC_PLACE_SUBGROUP_SIZE;
+          iss    -= SKC_PLACE_SUBGROUP_SIZE;
+          ess    -= SKC_PLACE_SUBGROUP_SIZE;
+        }
+    }
+}
+
+//
+//
+//
+
+static
+skc_uint
+skc_ballot(skc_uint * const xk, skc_uint const is_xk)
+{
+#if 0
+  //
+  // FIXME -- when available, this should use the idiom:
+  //
+  //   ballot() + lane_mask_less_than_or_equal + popcount()
+  //
+  // Supported by:
+  //
+  //   - Vulkan 1.1 / SPIR-V 1.3
+  //   - CUDA
+  //   - AVX2 (SSE*?)
+  //
+#else
+  //
+  // otherwise, emulate with an inclusive scan (yuk)
+  //
+  skc_uint const prefix = sub_group_scan_inclusive_add(is_xk);
+
+  skc_uint const xk_idx = *xk + prefix - is_xk;
+
+  *xk += sub_group_broadcast(prefix,SKC_PLACE_SUBGROUP_LAST);
+
+#if 0
+  printf("< %3u >\n",xk_idx);
+#endif
+
+  return xk_idx;
+#endif
+}
+
+//
+//
+//
+__kernel
+SKC_PLACE_KERNEL_ATTRIBS
+void
+skc_kernel_place(__global skc_bp_elem_t                * const bp_elems,
+                 __global SKC_ATOMIC_UINT     volatile * const place_atomics,
+                 __global skc_ttck_t                   * const ck_extent,
+                 __global union skc_cmd_place const    * const cmds,
+                 __global skc_block_id_t               * const map,
+                 skc_uint4                               const clip,
+                 skc_uint                                const count)
+{
+  //
+  // declare shared memory block
+  //
+#if ( SKC_PLACE_WORKGROUP_SUBGROUPS == 1 )
+  __local union skc_subgroup_smem  volatile                smem[1];
+#else
+  __local union skc_subgroup_smem  volatile                smem_wg[SKC_PLACE_WORKGROUP_SUBGROUPS];
+  __local union skc_subgroup_smem  volatile * const smem = smem_wg + get_sub_group_id();
+#endif
+
+  //
+  // This is a subgroup-centric kernel
+  //
+  // Which subgroup in the grid is this?
+  //
+  // TAKE NOTE: the Intel GEN compiler appears to be recognizing
+  // get_group_id(0) as a uniform but the alternative calculation used
+  // when there are multiple subgroups per workgroup is not
+  // cooperating and driving spillage elsewhere.
+  //
+  // Test the raster's translated bounds against the composition's
+  // tile clip
+  //
+  // There are 3 cases:
+  //
+  //   - the raster is completely clipped -> return
+  //   - the raster is partially  clipped -> all keys must clipped
+  //   - the raster is not        clipped -> no keys are tested
+  //
+  //
+  // There are at least 4 implementations of place and we want to
+  // special-case them as much as possible so that, at the least, the
+  // fastpath remains fast.
+  //
+  //  - implement NO CLIP + NO TRANSLATION fastpath -- CAN ATOMICALLY ALLOCATE SK+PK KEYS IN ONE STEP
+  //
+  //  - implement CLIPPED + NO TRANSLATION path
+  //
+  //  - implement NO CLIP +    TRANSLATION path
+  //
+  //  - implement CLIPPED +    TRANSLATION path
+  //
+  //
+  // FIXME/OPTIMIZATION: split scan accumulator into a triple-bin
+  // 12:12:8 integer where:
+  //
+  //  12: ttsk
+  //  12: ttpk
+  //   8: /dev/null -- clipped or invalid key
+  //
+  // Three kinds of nodes in a raster's list:
+  //
+  //  - the head node
+  //  - an internal node
+  //  - the final node
+  //
+
+#if ( SKC_PLACE_WORKGROUP_SUBGROUPS == 1 )
+  skc_uint const cmd_idx = get_group_id(0);
+#else
+  skc_uint const cmd_idx = get_group_id(0) * SKC_PLACE_WORKGROUP_SUBGROUPS + get_sub_group_id();
+#endif
+
+  // load command
+  union skc_cmd_place const cmd = cmds[cmd_idx];
+
+  // get the raster header from the raster host id -- scalar
+  skc_block_id_t            id  = map[cmd.raster_h];
+
+  //
+  // load all of the head block ttxk keys into registers
+  //
+  // FIXME -- this pattern lends itself to using the higher
+  // performance Intel GEN block load instructions
+  //
+  skc_uint const head_id = id * SKC_DEVICE_SUBBLOCK_WORDS + SKC_PLACE_STRIDE_H(get_sub_group_local_id());
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                 \
+  union skc_raster_node_elem const h##I = {                     \
+    .u32v2 = { bp_elems[head_id + SKC_PLACE_STRIDE_V_LO(I)],    \
+               bp_elems[head_id + SKC_PLACE_STRIDE_V_HI(I)]  }  \
+  };
+
+  SKC_PLACE_EXPAND();
+
+  //
+  // load raster header counts -- we only need the "nodes" and "keys"
+  // words but the keys we loaded are doublewords.
+  //
+  // FIXME -- this can be made portable with compile-time macro expansion
+  //
+  skc_uint nodes = sub_group_broadcast(h0.u32v2.lo,1); // SKC_RASTER_HEAD_OFFSET_COUNTS_NODES
+  skc_uint keys  = sub_group_broadcast(h0.u32v2.hi,1); // SKC_RASTER_HEAD_OFFSET_COUNTS_KEYS
+
+  //
+  //
+  //
+#if 0
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                 \
+  printf("%5u :  %6u : %3u : %08X . %08X - %08X\n",             \
+         nodes,keys,                                            \
+         I*SKC_PLACE_SUBGROUP_SIZE + get_sub_group_local_id(),  \
+         h##I.u32v2.hi,h##I.u32v2.lo,                           \
+         h##I.u32v2.lo & SKC_TTXK_LO_MASK_PREFIX);
+
+  SKC_PLACE_EXPAND();
+#endif
+
+  //
+#if 0
+  if (get_sub_group_local_id() == 0) {
+    printf("place: %u / %u / %u\n",head_id,nodes,keys);
+  }
+#endif
+
+  {
+    //
+    // classify every key in the header
+    //
+    // keys: 0 is not a key / 1 is a key
+    // skpk: 0 is sk        / 1 is pk
+    //
+    skc_uint bits_keys = 0;
+    skc_uint bits_skpk = 0;
+
+    //
+    // calculate bits_keys
+    //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+    if (!SKC_PLACE_IS_ALL_HEADER_ROW(I)) {                              \
+      skc_uint const idx = I * SKC_PLACE_SUBGROUP_SIZE + get_sub_group_local_id() - SKC_RASTER_HEAD_DWORDS; \
+      if (idx < keys) {                                                 \
+        bits_keys |= (1u << I);                                         \
+      }                                                                 \
+      if (SKC_PLACE_IS_TRAILING_ROW(I)) {                               \
+        if (keys > SKC_RASTER_HEAD_COUNT_KEYS) {                        \
+          if (get_sub_group_local_id() == SKC_PLACE_SUBGROUP_LAST) {    \
+            bits_keys &= ~(1u << I);                                    \
+          }                                                             \
+        }                                                               \
+      }                                                                 \
+    }
+
+    SKC_PLACE_EXPAND();
+
+    //
+    // blindly calculate bits_skpk
+    //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+    if (!SKC_PLACE_IS_ALL_HEADER_ROW(I)) {                              \
+      bits_skpk |= (h##I.xk.lo & SKC_TTXK_LO_MASK_PREFIX) >> (SKC_TTXK_LO_OFFSET_PREFIX - I); \
+    }
+
+    SKC_PLACE_EXPAND();
+
+#if 0
+    printf("%2X : %2X\n",bits_keys,bits_skpk);
+#endif
+
+    //
+    // next pointer is last element of last row.  save it now because
+    // this might be recognized as a subgroup-uniform/scalar.
+    //
+    id = sub_group_broadcast(SKC_CONCAT(h,SKC_PLACE_EXPAND_I_LAST).next.node,SKC_PLACE_SUBGROUP_LAST);
+
+    //
+    // append SK keys first
+    //
+    skc_uint const bits_sk = bits_keys & ~bits_skpk;
+    skc_uint       sk      = 0;
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                 \
+    if (!SKC_PLACE_IS_ALL_HEADER_ROW(I)) {      \
+      skc_uint is_sk  = (bits_sk >> I) & 1;     \
+      skc_uint sk_idx = skc_ballot(&sk,is_sk);  \
+      if (is_sk) {                              \
+        smem->lo.sk[sk_idx] = h##I.xk.lo;       \
+        smem->hi.sk[sk_idx] = h##I.xk.hi;       \
+      }                                         \
+    }
+
+    SKC_PLACE_EXPAND();
+
+    //
+    // append PK keys next
+    //
+    skc_uint const bits_pk = bits_keys & bits_skpk;
+    skc_uint       pk      = 0;
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                 \
+    if (!SKC_PLACE_IS_ALL_HEADER_ROW(I)) {      \
+      skc_uint is_pk  = (bits_pk >> I) & 1;     \
+      skc_uint pk_idx = skc_ballot(&pk,is_pk);  \
+      if (is_pk) {                              \
+        smem->lo.pk[pk_idx] = h##I.xk.lo;       \
+        smem->hi.pk[pk_idx] = h##I.xk.hi;       \
+      }                                         \
+    }
+
+    SKC_PLACE_EXPAND();
+
+#if 0
+    printf("%2u * %2u\n",sk,pk);
+#endif
+    //
+    // flush the keys
+    //
+    skc_ttsk_flush(place_atomics,ck_extent,smem,&cmd,sk);
+    skc_ttpk_flush(place_atomics,ck_extent,smem,&cmd,pk);
+  }
+
+  //
+  // we're done if there was only a head node
+  //
+  if (nodes == 0)
+    return;
+
+  //
+  // decrement keys
+  //
+  keys -= SKC_RASTER_HEAD_COUNT_KEYS;
+
+  //
+  // otherwise, append keys in trailing nodes to smem
+  //
+  while (true)
+    {
+      //
+      // load all of the node block ttxk keys into registers
+      //
+      // FIXME -- this pattern lends itself to using the higher
+      // performance Intel GEN block load instructions
+      //
+      skc_uint const node_id = id * SKC_DEVICE_SUBBLOCK_WORDS + SKC_PLACE_STRIDE_H(get_sub_group_local_id());
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+      union skc_raster_node_elem const n##I = {                         \
+        .u32v2 = { bp_elems[node_id + SKC_PLACE_STRIDE_V_LO(I)],        \
+                   bp_elems[node_id + SKC_PLACE_STRIDE_V_HI(I)]  }      \
+      };
+
+      SKC_PLACE_EXPAND();
+
+#if 0
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+      printf("%5u :  %6u : %3u : %08X . %08X - %08X\n",                 \
+             nodes,keys,                                                \
+             I*SKC_PLACE_SUBGROUP_SIZE + get_sub_group_local_id(),      \
+             n##I.u32v2.hi,n##I.u32v2.lo,                               \
+             n##I.u32v2.lo & SKC_TTXK_LO_MASK_PREFIX);
+
+      SKC_PLACE_EXPAND();
+#endif
+
+      //
+      // classify every key in the header
+      //
+      // keys: 0 is not a key / 1 is a key
+      // skpk: 0 is sk        / 1 is pk
+      //
+      skc_uint bits_keys = 0;
+      skc_uint bits_skpk = 0;
+
+      //
+      // calculate bits_keys
+      //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R) {                                       \
+        skc_uint const idx = I * SKC_PLACE_SUBGROUP_SIZE + get_sub_group_local_id(); \
+        if (idx < keys) {                                               \
+          bits_keys |= (1u << I);                                       \
+        }                                                               \
+        if (SKC_PLACE_IS_TRAILING_ROW(I)) {                             \
+          if (keys > SKC_RASTER_NODE_COUNT_KEYS) {                      \
+            if (get_sub_group_local_id() == SKC_PLACE_SUBGROUP_LAST) {  \
+              bits_keys &= ~(1u << I);                                  \
+            }                                                           \
+          }                                                             \
+        }                                                               \
+      }
+
+      SKC_PLACE_EXPAND();
+
+      //
+      // blindly calculate bits_skpk
+      //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R) {                                       \
+        bits_skpk |= (n##I.xk.lo & SKC_TTXK_LO_MASK_PREFIX) >> (SKC_TTXK_LO_OFFSET_PREFIX - I); \
+      }
+
+      SKC_PLACE_EXPAND();
+
+#if 0
+      printf("%2X : %2X\n",bits_keys,bits_skpk);
+#endif
+
+      //
+      // next pointer is last element of last row.  save it now because
+      // this might be recognized as a subgroup-uniform/scalar.
+      //
+      id = sub_group_broadcast(SKC_CONCAT(n,SKC_PLACE_EXPAND_I_LAST).next.node,SKC_PLACE_SUBGROUP_LAST);
+
+      //
+      // append SK keys first
+      //
+      skc_uint const bits_sk = bits_keys & ~bits_skpk;
+      skc_uint       sk      = 0;
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R) {                       \
+        skc_uint is_sk  = (bits_sk >> I) & 1;           \
+        skc_uint sk_idx = skc_ballot(&sk,is_sk);        \
+        if (is_sk) {                                    \
+          smem->lo.sk[sk_idx] = n##I.xk.lo;             \
+          smem->hi.sk[sk_idx] = n##I.xk.hi;             \
+        }                                               \
+      }
+
+      SKC_PLACE_EXPAND();
+
+      //
+      // append PK keys next
+      //
+      skc_uint const bits_pk = bits_keys & bits_skpk;
+      skc_uint       pk      = 0;
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R) {                       \
+        skc_uint is_pk  = (bits_pk >> I) & 1;           \
+        skc_uint pk_idx = skc_ballot(&pk,is_pk);        \
+        if (is_pk) {                                    \
+          smem->lo.pk[pk_idx] = n##I.xk.lo;             \
+          smem->hi.pk[pk_idx] = n##I.xk.hi;             \
+        }                                               \
+      }
+
+      SKC_PLACE_EXPAND();
+
+#if 0
+    printf("%2u * %2u\n",sk,pk);
+#endif
+      //
+      // if total for either the sk or pk queue reaches the
+      // highwater mark then flush it to the extent
+      //
+      skc_ttsk_flush(place_atomics,ck_extent,smem,&cmd,sk);
+      skc_ttpk_flush(place_atomics,ck_extent,smem,&cmd,pk);
+
+      //
+      // if this was the last node then we're done
+      //
+      if (--nodes == 0)
+        return;
+
+      //
+      // otherwise decrement keys
+      //
+      keys -= SKC_RASTER_NODE_COUNT_KEYS;
+    }
+}
+
+//
+//
+//
diff --git a/src/compute/skc/prefix.cl b/src/compute/skc/prefix.cl
new file mode 100644
index 0000000..960b6cf
--- /dev/null
+++ b/src/compute/skc/prefix.cl
@@ -0,0 +1,1042 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include "device_cl_12_gen9.h"
+#include "raster_builder_cl_12.h"
+#include "block.h"
+#include "raster.h"
+#include "atomic_cl.h"
+#include "macros.h"
+#include "tile.h"
+
+//
+// INPUT:
+//
+//   TTRK (64-BIT COMPARE)
+//
+//    0                                  63
+//    | TTSB ID |   X  |   Y  | COHORT ID |
+//    +---------+------+------+-----------+
+//    |    27   |  12  |  12  |     13    |
+//
+//
+//   TTRK (32-BIT COMPARE)
+//
+//    0                                        63
+//    | TTSB ID | N/A |   X  |   Y  | COHORT ID |
+//    +---------+-----+------+------+-----------+
+//    |    27   |  5  |  12  |  12  |     8     |
+//
+//
+// OUTPUT:
+//
+//   TTSK v2:
+//
+//    0                                     63
+//    | TTSB ID | PREFIX |  N/A |  X |  Y |
+//    +---------+--------+------+----+----+
+//    |    27   | 1 (=0) |  12  | 12 | 12 |
+//
+//
+//   TTPK v1:
+//
+//    0                                        63
+//    | TTPB ID | ALL ZEROES | SPAN |  X  |  Y  |
+//    +---------+------------+------+-----+-----+
+//    |    27   |      1     |  12  | 12  | 12  |
+//
+//
+//   TTPK v2:
+//
+//    0                                       63
+//    | TTPB ID | PREFIX | SPAN |  X  |  Y  |
+//    +---------+--------+------+-----+-----+
+//    |    27   | 1 (=1) |  12  | 12  | 12  |
+//
+
+#define SKC_PREFIX_SUBGROUP_MASK  (SKC_PREFIX_SUBGROUP_SIZE - 1)
+
+//
+// smem accumulator
+//
+
+union skc_subgroup_accum
+{
+  struct {
+    SKC_ATOMIC_INT        ttp[SKC_TILE_HEIGHT];
+  } atomic;
+
+  struct {
+    skc_ttp_t             ttp[SKC_TILE_HEIGHT];
+  } aN;
+
+  struct {
+    SKC_PREFIX_TTP_V      ttp[SKC_PREFIX_SUBGROUP_SIZE];
+  } vN;
+
+  struct {
+    SKC_PREFIX_SMEM_ZERO  ttp[SKC_TILE_HEIGHT / SKC_PREFIX_SMEM_ZERO_WIDTH];
+  } zero;
+};
+
+//
+//
+//
+
+struct skc_subgroup_smem
+{
+  // prefix accumulator
+  union skc_subgroup_accum accum;
+};
+
+//
+//
+//
+
+static
+skc_uint
+skc_subgroup_lane()
+{
+#if ( SKC_PREFIX_SUBGROUP_SIZE > 1 )
+  return get_sub_group_local_id();
+#else
+  return 0;
+#endif
+}
+
+//
+//
+//
+
+static
+SKC_PREFIX_TTS_V_BITFIELD
+skc_tts_get_dy(skc_tts_v_t const ttsv)
+{
+  // tts.dy is packed to fit in range [-32,31] and unpacked to [-32..-1,+1..+32]
+  SKC_PREFIX_TTS_V_BITFIELD const dy = ttsv >> SKC_TTS_OFFSET_DY;
+
+  return dy - (~ttsv >> 31);
+}
+
+static
+SKC_PREFIX_TTS_V_BITFIELD
+skc_tts_get_py(skc_tts_v_t const ttsv)
+{
+  return SKC_BFE(ttsv,SKC_TTS_BITS_TY-SKC_SUBPIXEL_RESL_Y_LOG2,SKC_TTS_OFFSET_TY+SKC_SUBPIXEL_RESL_Y_LOG2);
+}
+
+//
+//
+//
+
+static
+void
+skc_accum_scatter(__local struct skc_subgroup_smem * const smem, skc_tts_v_t const tts_v)
+{
+  // get "altitude"
+  SKC_PREFIX_TTS_V_BITFIELD dy = skc_tts_get_dy(tts_v);
+
+  // get the y pixel coordinate
+  SKC_PREFIX_TTS_V_BITFIELD py = skc_tts_get_py(tts_v);
+
+  //
+  // FIXME -- benchmark performance of setting dy to 0 if tts_v is invalid?
+  //
+  // FIXME -- consider making TTS_INVALID a dy/py/etc. that's a no-op
+  //
+
+#if 0
+  if (tts_v != SKC_TTS_INVALID)
+    printf("< %08X = %u : %d >\n",tts_v,py,dy); 
+#endif
+
+  //
+  // scatter-add the "altitude" to accumulator
+  //
+#if ( SKC_PREFIX_SUBGROUP_SIZE > 1 )
+  //
+  // GPU/SIMT -- IMPLIES SUPPORT FOR ATOMIC SCATTER-ADD
+  //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A)                                         \
+  if (tts_v C != SKC_TTS_INVALID) {                                     \
+    SKC_ATOMIC_ADD_LOCAL_RELAXED_SUBGROUP(smem->accum.atomic.ttp + py C, dy C); \
+  }
+
+#else
+  //
+  // CPU/SIMD -- ITERATE OVER VECTOR, NO NEED FOR ATOMICS
+  //
+  // WITH SIMD, ONCE A TTS_INVALID IS DETECTED WE CAN QUIT
+  //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A)                 \
+  if (tts_v C == SKC_TTS_INVALID)               \
+    return;                                     \
+  smem->accum.aN.ttp[py C] = dy C;
+#endif
+
+  SKC_PREFIX_TTS_VECTOR_INT_EXPAND();
+}
+
+//
+// The implication here is that if our device configuration has a
+// rectangular 1:2 tile then we need a block size of at least 2
+// subblocks. The subblock size of course needs to match the length of
+// the smallest tile side.
+//
+
+static
+void
+skc_accum_flush(__local struct skc_subgroup_smem * const smem,
+                __global skc_bp_elem_t           * const bp_elems,
+                skc_block_id_t                     const pb_id)
+{
+  // load the ttp elements
+  SKC_PREFIX_TTP_V const ttp_v  = smem->accum.vN.ttp[get_sub_group_local_id()];
+  skc_uint         const offset = pb_id * (SKC_DEVICE_SUBBLOCK_WORDS / SKC_TILE_RATIO) + skc_subgroup_lane();
+  
+#if   ( SKC_TILE_RATIO == 1 )
+
+  bp_elems[offset] = ttp_v;
+
+#elif ( SKC_TILE_RATIO == 2 )
+
+  vstore2(ttp_v,offset,bp_elems);
+
+#else
+
+#error("tile ratio greater than 2 not supported")
+
+#endif
+}
+
+//
+//
+//
+
+static
+void
+skc_accum_reset(__local struct skc_subgroup_smem * const smem)
+{
+  for (uint ii=0; ii<SKC_TILE_HEIGHT / SKC_PREFIX_SMEM_ZERO_WIDTH / SKC_PREFIX_SUBGROUP_SIZE; ii++)
+    smem->accum.zero.ttp[ii * SKC_PREFIX_SUBGROUP_SIZE + skc_subgroup_lane()] = ( 0 );
+}
+
+//
+// get next sk key
+//
+
+static
+skc_ttsk_s_t
+skc_ttsk_v_get_next(skc_ttsk_v_t * const sk_v,
+                    skc_uint     * const sk_next,
+                    skc_int      * const rkpk_rem)
+{
+  // decrement count
+  *rkpk_rem -= 1;
+
+#if ( SKC_PREFIX_SUBGROUP_SIZE > 1 )
+  //
+  // SIMT with subgroup support is easy
+  //
+  // SIMT without subgroup support can always emulate with smem
+  //
+#if 0
+  //
+  // BUG TICKLED BY FILTHY CODE -- Intel compiler doesn't properly
+  // broadcast a uint2 cast to a long. It was probably bad to do this
+  // anyway without a union wrapping the TTSK scalar type.
+  //
+  // Consider creating a union { ulong; uint2 } at a later date --
+  // probably no need to ever do this unless it makes broadcast faster
+  // which is unlikely since it will probably be implemented as 2
+  // 32-bit broadcasts.
+  //
+  // Additionally, the TTRK and TTXK key bitfield sizes are probably
+  // cast in stone and we aren't going to change them no matter
+  // architecture we're on.
+  //
+  skc_ttsk_s_t sk_s = sub_group_broadcast(SKC_AS(ulong)(*sk_v),(*sk_next)++);
+#else
+  skc_ttsk_s_t sk_s;
+
+  sk_s.lo   = sub_group_broadcast(sk_v->lo,*sk_next);
+  sk_s.hi   = sub_group_broadcast(sk_v->hi,*sk_next);
+  *sk_next += 1;
+#endif
+
+#else
+  //
+  // SIMD will always grab component .s0 and then rotate the vector
+  //
+  sk_s = ( sk_v->s0 );
+
+  skc_ttsk_v_rotate_down(sk_v);
+
+#endif
+
+  return sk_s;
+}
+
+//
+//
+//
+
+static
+skc_raster_yx_s
+skc_ttsk_v_first(skc_ttsk_v_t * const sk_v, skc_uint const sk_next)
+{
+#if ( SKC_PREFIX_SUBGROUP_SIZE > 1 )
+  //
+  // SIMT with subgroup support is easy
+  //
+  // SIMT without subgroup support can always emulate with smem
+  //
+  skc_raster_yx_s const yx_s = sub_group_broadcast(sk_v->hi,sk_next);
+
+#else
+  //
+  // SIMD will always grab component .s0 and then rotate the vector
+  //
+  skc_raster_yx_s const yx_s = ( sk_v->s0.hi );
+
+#endif
+
+  return yx_s;
+}
+
+//
+// mask off ttsb id
+//
+
+static
+skc_block_id_s_t
+skc_ttsk_s_get_ttsb_id(skc_ttsk_s_t const * const sk_s)
+{
+  return ( sk_s->lo & SKC_TTXK_LO_MASK_ID );
+}
+
+//
+// load tts_v as early as possible
+//
+
+static
+skc_tts_v_t
+skc_load_tts(__global skc_bp_elem_t * const bp_elems,
+             skc_block_id_s_t         const sb_id)
+{
+  return ( bp_elems[sb_id * SKC_DEVICE_SUBBLOCK_WORDS + skc_subgroup_lane()] );
+}
+
+//
+// massage ttrk keys into ttsk keys
+//
+
+static
+void
+skc_ttrk_to_ttsk(skc_ttsk_v_t * const sk_v)
+{
+  sk_v->lo = sk_v->lo  & SKC_TTXK_LO_MASK_ID;     // clear high (N/A) bits
+  sk_v->hi = sk_v->hi << SKC_TTRK_HI_BITS_COHORT; // shift cohort away -- zeroes low bits
+}
+
+//
+// replenish ttsk keys
+//
+
+static
+void
+skc_ttsk_v_replenish(skc_ttsk_v_t                * const sk_v,
+                     skc_uint                    * const sk_next,
+                     skc_uint                    * const rks_next,
+                     __global skc_ttrk_e_t const * const rks)
+{
+  // if there are still keys available then return
+  if (*sk_next < SKC_PREFIX_TTXK_V_SIZE)
+    return;
+
+  //
+  // otherwise, replenish sk_v
+  //
+  // NOTE NOTE NOTE -- we are assuming rks[] extent size is always
+  // divisible by TTXK_V_SIZE and therefore loading some keys from the
+  // next raster is OK.
+  //
+  *sk_next   = 0;
+  *rks_next += SKC_PREFIX_SUBGROUP_SIZE;
+  *sk_v      = rks[*rks_next];
+
+#if 0
+  printf("* %08X ( %3u, %3u )\n",
+         sk_v->hi,
+         (sk_v->hi >> 12) & 0xFFF,
+         (sk_v->hi      ) & 0xFFF);
+#endif
+  
+  skc_ttrk_to_ttsk(sk_v);
+
+#if 0
+  printf("! %08X ( %3u, %3u )\n",
+         sk_v->hi,
+         (sk_v->hi >> 20) & 0xFFF,
+         (sk_v->hi >>  8) & 0xFFF);
+#endif
+}
+
+//
+// replenish block ids
+//
+// note that you can't overrun the block id pool since it's a ring
+//
+
+static
+void
+skc_blocks_replenish(skc_uint                      * const blocks_next,
+                     skc_uint                      * const blocks_idx,
+                     skc_block_id_v_t              * const blocks,
+                     skc_uint                        const bp_mask, // pow2 modulo mask for block pool ring
+                     __global skc_block_id_t const * const bp_ids)
+
+{
+  *blocks_idx += SKC_PREFIX_BLOCK_ID_V_SIZE;
+  *blocks      = bp_ids[*blocks_idx & bp_mask];
+  *blocks_next = 0;
+
+#if 0
+  printf("replenish blocks: %u\n",*blocks);
+#endif
+}
+
+//
+//
+//
+
+static
+skc_block_id_t
+skc_blocks_get_next(skc_uint                      * const blocks_next,
+                    skc_uint                      * const blocks_idx,
+                    skc_block_id_v_t              * const blocks,
+                    skc_uint                        const bp_mask, // pow2 modulo mask for block pool ring
+                    __global skc_block_id_t const * const bp_ids)
+{
+  // replenish?
+  if (*blocks_next == SKC_PREFIX_BLOCK_ID_V_SIZE)
+    {
+      skc_blocks_replenish(blocks_next,blocks_idx,blocks,bp_mask,bp_ids);
+    }
+
+#if ( SKC_PREFIX_SUBGROUP_SIZE > 1 )
+  //
+  // SIMT
+  //
+  skc_block_id_t id = sub_group_broadcast(*blocks,*blocks_next);
+
+#else
+  //
+  // SIMD
+  //
+  skc_block_id_t id = blocks->s0;
+
+  skc_shuffle_down_1(*blocks);
+
+#endif
+
+  *blocks_next += 1;
+
+  return id;
+}
+
+//
+// subblock allocator
+//
+
+#if ( SKC_DEVICE_SUBBLOCK_WORDS_LOG2 < SKC_DEVICE_BLOCK_WORDS_LOG2 )
+
+static
+skc_block_id_t
+skc_subblocks_get_next_pb_id(skc_block_id_t                * const subblocks,
+                             skc_uint                      * const blocks_next,
+                             skc_uint                      * const blocks_idx,
+                             skc_block_id_v_t              * const blocks,
+                             skc_uint                        const bp_mask, // pow2 modulo mask for block pool ring
+                             __global skc_block_id_t const * const bp_ids)
+{
+  if ((*subblocks & SKC_DEVICE_SUBBLOCKS_PER_BLOCK_MASK) == 0)
+    {
+      *subblocks = skc_blocks_get_next(blocks_next,blocks_idx,blocks,bp_mask,bp_ids);
+    }
+
+  skc_block_id_t const pb_id = *subblocks;
+
+  *subblocks += SKC_TILE_RATIO; // note this is one or two subblocks
+
+  return pb_id;
+}
+
+#endif
+
+//
+// append a ttsk key to the work-in-progress node
+//
+
+static
+void
+skc_node_v_append_sk(skc_ttsk_s_t            const * const sk_s,
+
+                     skc_ttxk_v_t                  * const xk_v,
+                     skc_uint                      * const xk_v_next,
+                     skc_uint                      * const xk_v_idx,
+                     __global skc_bp_elem_t        * const bp_elems,
+
+                     skc_int                         const rkpk_rem,
+
+                     skc_uint                      * const blocks_next,
+                     skc_uint                      * const blocks_idx,
+                     skc_block_id_v_t              * const blocks,
+                     skc_uint                        const bp_mask,
+                     __global skc_block_id_t const * const bp_ids)
+{
+  //
+  // Append an sk key to the in-register xk_v vector
+  //
+  // If the work-in-progress node in gmem will only have room for one
+  // more key then:
+  //
+  //   - if this was the final SK then write out xk_v and exit
+  //
+  //   - otherwise, acquire a block id, link it, write out xk_v,
+  //     prepare new node
+  //
+  // Note that this does *not* try to squeeze in a final key into the
+  // next node slot.  This optimization isn't worth the added
+  // down-pipeline complexity.
+  //
+#if ( SKC_PREFIX_SUBGROUP_SIZE > 1 )
+  //
+  // SIMT
+  //
+  if (get_sub_group_local_id() == (*xk_v_next & SKC_PREFIX_TTXK_V_MASK))
+    {
+      *xk_v = *sk_s;
+    }
+
+  *xk_v_next += 1;
+
+  // are there more keys coming?
+  if (rkpk_rem > 0)
+    {
+      // is the node almost full?
+      if (*xk_v_next == SKC_RASTER_NODE_DWORDS - 1)
+        {
+          skc_block_id_t const id = skc_blocks_get_next(blocks_next,blocks_idx,blocks,bp_mask,bp_ids);
+
+          if (get_sub_group_local_id() == SKC_PREFIX_TTXK_V_SIZE - 1)
+            {
+              xk_v->lo = id;
+              xk_v->hi = SKC_UINT_MAX; // this initialization isn't necessary
+            }
+
+          // store xk_v (uint2) to bp (uint)
+          bp_elems[*xk_v_idx                         ] = xk_v->lo;
+          bp_elems[*xk_v_idx+SKC_PREFIX_SUBGROUP_SIZE] = xk_v->hi;
+#if 0
+          printf("S) %u : %08v2X\n",*xk_v_idx,*xk_v);
+#endif
+          // reinitialize xk_v
+          xk_v->lo = SKC_UINT_MAX;
+          xk_v->hi = SKC_UINT_MAX;
+
+          // update node elem idx
+          *xk_v_idx = id * SKC_DEVICE_SUBBLOCK_WORDS + get_sub_group_local_id();
+
+          // reset node count
+          *xk_v_next = 0;
+        }
+      // is xk_v full?
+      else if ((*xk_v_next & SKC_PREFIX_TTXK_V_MASK) == 0)
+        {
+          // store xk_v to bp
+          bp_elems[*xk_v_idx                         ] = xk_v->lo;
+          bp_elems[*xk_v_idx+SKC_PREFIX_SUBGROUP_SIZE] = xk_v->hi;
+#if 0
+          printf("s) %u : %08v2X\n",*xk_v_idx,*xk_v);
+#endif
+          // reinitialize xk_v
+          xk_v->lo = SKC_UINT_MAX;
+          xk_v->hi = SKC_UINT_MAX;
+
+          // increment node elem idx
+          *xk_v_idx += SKC_PREFIX_SUBGROUP_SIZE * 2;
+        }
+    }
+  else
+    {
+      bp_elems[*xk_v_idx                         ] = xk_v->lo;
+      bp_elems[*xk_v_idx+SKC_PREFIX_SUBGROUP_SIZE] = xk_v->hi;
+#if 0
+      printf("z) %u : %08v2X\n",*xk_v_idx,*xk_v);
+#endif
+      while ((*xk_v_idx & SKC_DEVICE_BLOCK_WORDS_MASK) < SKC_DEVICE_BLOCK_WORDS - SKC_PREFIX_SUBGROUP_SIZE * 2)
+        {
+          *xk_v_idx += SKC_PREFIX_SUBGROUP_SIZE * 2;
+
+          bp_elems[*xk_v_idx]                          = SKC_UINT_MAX;
+          bp_elems[*xk_v_idx+SKC_PREFIX_SUBGROUP_SIZE] = SKC_UINT_MAX;
+        }
+    }
+
+#else
+  //
+  // SIMD
+  //
+
+#endif
+}
+
+//
+//
+//
+
+static
+skc_ttpk_s_t
+skc_ttpk_create(skc_raster_yx_s const yx_prev,
+                skc_raster_yx_s const yx_next,
+                skc_block_id_t  const pb_id)
+{
+  // - yx_prev is already incremented by one 
+  // - yx_span is already shifted up at hi.x
+  skc_uint const yx_span = yx_next - yx_prev;
+
+  skc_ttpk_s_t pk;
+
+  // turn on prefix bit | shift span bits upward
+  pk.lo = pb_id | SKC_TTXK_LO_MASK_PREFIX | (yx_span << SKC_TTPK_LO_SHL_YX_SPAN);
+
+  // shift down high span bits | yx of tile
+  pk.hi = (yx_span >> SKC_TTPK_HI_SHR_YX_SPAN) | yx_prev;
+
+#if 0
+  if (get_sub_group_local_id() == 0)
+    printf("* %08v2X : %u\n",pk,yx_span);
+#endif
+
+  return pk;
+}
+
+//
+// append a ttpk key to the work-in-progress node
+//
+
+static
+void
+skc_node_v_append_pk(skc_ttpk_s_t            const * const pk_s,
+
+                     skc_ttxk_v_t                  * const xk_v,
+                     skc_uint                      * const xk_v_next,
+                     skc_uint                      * const xk_v_idx,
+                     __global skc_bp_elem_t        * const bp_elems,
+
+                     skc_uint                      * const blocks_next,
+                     skc_uint                      * const blocks_idx,
+                     skc_block_id_v_t              * const blocks,
+                     skc_uint                        const bp_mask,
+                     __global skc_block_id_t const * const bp_ids)
+{
+  //
+  // append a pk key to the in-register xk_v vector
+  //
+  // if the work-in-progress node in gmem will only have room for one
+  // more key then:
+  //
+  //   - if this was the final SK then write out xk_v and exit
+  //
+  //   - otherwise, acquire a block id, link it, write out xk_v,
+  //     prepare new node
+  //
+#if ( SKC_PREFIX_SUBGROUP_SIZE > 1 )
+  //
+  // SIMT
+  //
+  if (get_sub_group_local_id() == (*xk_v_next & SKC_PREFIX_TTXK_V_MASK))
+    {
+      *xk_v = *pk_s;
+    }
+
+  *xk_v_next += 1;
+
+  // is the node almost full?
+  if (*xk_v_next == SKC_RASTER_NODE_DWORDS - 1)
+    {
+      skc_block_id_t const id = skc_blocks_get_next(blocks_next,blocks_idx,blocks,bp_mask,bp_ids);
+
+      if (get_sub_group_local_id() == SKC_PREFIX_TTXK_V_SIZE - 1)
+        {
+          xk_v->lo = id;
+          xk_v->hi = SKC_UINT_MAX; // this initialization isn't necessary
+        }
+
+      // store xk_v to bp
+      bp_elems[*xk_v_idx                         ] = xk_v->lo;
+      bp_elems[*xk_v_idx+SKC_PREFIX_SUBGROUP_SIZE] = xk_v->hi;
+#if 0
+      printf("P) %u : %08v2X\n",*xk_v_idx,*xk_v);
+#endif
+      // reinitialize xk_v
+      xk_v->lo = SKC_UINT_MAX;
+      xk_v->hi = SKC_UINT_MAX;
+
+      // update node elem idx
+      *xk_v_idx  = id * SKC_DEVICE_SUBBLOCK_WORDS + get_sub_group_local_id();
+
+      // reset node count
+      *xk_v_next = 0;
+    }
+  // is xk_v full?
+  else if ((*xk_v_next & SKC_PREFIX_TTXK_V_MASK) == 0)
+    {
+      // store xk_v to bp
+      bp_elems[*xk_v_idx                         ] = xk_v->lo;
+      bp_elems[*xk_v_idx+SKC_PREFIX_SUBGROUP_SIZE] = xk_v->hi;
+#if 0
+      printf("p) %u : %08v2X\n",*xk_v_idx,*xk_v);
+#endif
+      // reinitialize xk_v
+      xk_v->lo = SKC_UINT_MAX;
+      xk_v->hi = SKC_UINT_MAX;
+      
+      // increment node elem idx
+      *xk_v_idx += SKC_PREFIX_SUBGROUP_SIZE * 2;
+    }
+
+#else
+  //
+  // SIMD
+  //
+#endif
+}
+
+//
+// append the first 3 fields of meta info to the raster header
+//
+
+static
+void
+skc_node_v_init_header(skc_ttxk_v_t                           * const xk_v,
+                       skc_uint                               * const xk_v_next,
+                       union skc_raster_cohort_meta_out const * const meta)
+{
+#if ( SKC_PREFIX_SUBGROUP_SIZE > 1 )
+  //
+  // SIMT
+  //
+  if (get_sub_group_local_id() < 2)
+    {
+      *xk_v = ((get_sub_group_local_id() & 1) == 0) ? meta->u32v4.lo : meta->u32v4.hi;
+    }
+
+#if 0
+  if (get_sub_group_local_id() == 0)
+    printf("header: %08v4X\n",meta->u32v4);
+#endif
+
+  //
+  // increment counter: uint4 + uint4 = uint2 x 4
+  //
+  *xk_v_next = 2 + 2; // +2 for unitialized bounds
+
+#else
+  //
+  // SIMD
+  //
+
+#endif
+}
+
+//
+//
+//
+
+__kernel
+SKC_PREFIX_KERNEL_ATTRIBS
+void
+skc_kernel_prefix(__global skc_uint       const * const bp_atomics,
+                  __global skc_block_id_t const * const bp_ids,
+                  __global skc_bp_elem_t        * const bp_elems,
+                  skc_uint                        const bp_mask, // pow2 modulo mask for block pool ring
+                  __global skc_ttrk_e_t   const * const rks,
+                  __global skc_block_id_t       * const map,
+                  __global skc_uint       const * const metas,
+                  skc_uint                        const count)
+{
+  //
+  // declare shared memory block
+  //
+#if ( SKC_PREFIX_WORKGROUP_SUBGROUPS == 1 )
+  __local struct skc_subgroup_smem                  smem[1];
+#else
+  __local struct skc_subgroup_smem                  smems[SKC_PREFIX_WORKGROUP_SUBGROUPS];
+  __local struct skc_subgroup_smem * restrict const smem = smems + get_sub_group_id();
+#endif
+
+  //
+  // where is this subgroup in the grid?
+  //
+#if ( SKC_PREFIX_WORKGROUP_SUBGROUPS == 1 )
+  skc_uint const sgi = get_group_id(0);
+#else
+  skc_uint const sgi = get_group_id(0) * SKC_PREFIX_WORKGROUP_SUBGROUPS + get_sub_group_id();
+#endif
+
+  skc_uint const sgl = get_sub_group_local_id();
+
+  //
+  // return if this subgroup is excess
+  //
+#if ( SKC_PREFIX_WORKGROUP_SUBGROUPS > 1 )
+  if (sgi >= count)
+    return;
+#endif
+
+  //
+  // get meta info for this subgroup's raster
+  //
+  union skc_raster_cohort_meta_out const meta  = { vload4(sgi,metas) };
+  skc_uint                         const reads = metas[SKC_RASTER_COHORT_META_OFFSET_READS + sgi];
+
+#if 0
+  if (get_sub_group_local_id() == 0)
+    printf("%3u : %5u / %5u / %5u / %5u / %u\n",
+           sgi,
+           meta.blocks,
+           meta.offset,
+           meta.nodes,
+           meta.keys,
+           reads);
+#endif
+
+  //
+  // preload blocks -- align on subgroup
+  //
+  skc_uint         blocks_idx  = (reads & ~SKC_PREFIX_SUBGROUP_MASK) + skc_subgroup_lane();
+  skc_block_id_v_t blocks      = bp_ids[blocks_idx & bp_mask];
+  skc_uint         blocks_next = (reads &  SKC_PREFIX_SUBGROUP_MASK);
+
+  //
+  // prime xk_v_idx with a block but note that OpenCL vstore_n() will scale the offset
+  //
+  skc_uint xk_v_idx = sub_group_broadcast(blocks,blocks_next++) * SKC_DEVICE_SUBBLOCK_WORDS + get_sub_group_local_id();
+
+  //
+  // initialize raster header -- assumes block is greater than 8 words (4 doublewords)
+  //
+  skc_ttxk_v_t xk_v = { SKC_UINT_MAX, SKC_UINT_MAX };
+  skc_uint     xk_v_next;
+
+  skc_node_v_init_header(&xk_v,&xk_v_next,&meta);
+
+  //
+  // no keys -- this is an empty raster!
+  //
+  if (meta.keys == 0)
+    {
+      bp_elems[xk_v_idx                         ] = xk_v.lo;
+      bp_elems[xk_v_idx+SKC_PREFIX_SUBGROUP_SIZE] = xk_v.hi;
+
+      while ((xk_v_idx & SKC_DEVICE_BLOCK_WORDS_MASK) < SKC_DEVICE_BLOCK_WORDS - SKC_PREFIX_SUBGROUP_SIZE * 2)
+        {
+          xk_v_idx += SKC_PREFIX_SUBGROUP_SIZE * 2;
+
+          bp_elems[xk_v_idx]                          = SKC_UINT_MAX;
+          bp_elems[xk_v_idx+SKC_PREFIX_SUBGROUP_SIZE] = SKC_UINT_MAX;
+        }
+
+      return;
+    }
+
+  //
+  // load TTRK keys and in-place convert to TTSK keys
+  //
+  skc_uint         rks_next    = (meta.offset & ~SKC_PREFIX_SUBGROUP_MASK) + skc_subgroup_lane();
+  skc_ttsk_v_t     sk_v        = rks[rks_next];
+  skc_uint         sk_next     = (meta.offset & SKC_PREFIX_SUBGROUP_MASK);
+  skc_int          rkpk_rem    = meta.keys; // signed count of remaining rk+pk keys
+
+#if 0
+  printf("* %08X ( %3u, %3u )\n",
+         sk_v.hi,
+         (sk_v.hi >> 12) & 0xFFF,
+         (sk_v.hi      ) & 0xFFF);
+#endif
+  
+  skc_ttrk_to_ttsk(&sk_v);
+
+#if 0
+  printf("! %08X ( %3u, %3u )\n",
+         sk_v.hi,
+         (sk_v.hi >> 20) & 0xFFF,
+         (sk_v.hi >>  8) & 0xFFF);
+#endif
+
+  //
+  // subblocks
+  //
+#if ( SKC_DEVICE_SUBBLOCK_WORDS_LOG2 < SKC_DEVICE_BLOCK_WORDS_LOG2 )
+  skc_block_id_t subblocks = 0;
+#endif
+
+  //
+  // begin "scan" of tiles
+  //
+  skc_raster_yx_s yx_prev = skc_ttsk_v_first(&sk_v,sk_next);
+
+  //
+  // zero the accumulator
+  //
+  skc_accum_reset(smem);
+
+  while (true)
+    {
+      // get next rk key
+      skc_ttsk_s_t     const sk_s  = skc_ttsk_v_get_next(&sk_v,&sk_next,&rkpk_rem);
+
+      // load ttsb id
+      skc_block_id_s_t const sb_id = skc_ttsk_s_get_ttsb_id(&sk_s);
+
+      // load tts_v transaction "in flight" as early as possible
+      skc_tts_v_t      const tts_v = skc_load_tts(bp_elems,sb_id);
+
+#if 0
+      printf("{ %08X }\n",tts_v);
+#endif
+
+#if 0
+      if (get_sub_group_local_id() == 0)
+        printf("[ %d, %X ]\n",rkpk_rem,sb_id);
+#endif
+
+#if 0
+      if (get_sub_group_local_id() == 0)
+        printf("@ %08X ( %3u, %3u )\n",sk_s.hi,(sk_s.hi >> 20),(sk_s.hi >> 8) & 0xFFF);
+#endif
+
+      //
+      // FIXME -- SOME OF THESE COMPARISONS CAN BE PERFORMED AHEAD OF
+      // TIME AND SIMD'IZED
+      //
+
+      // if yx's don't match then we're either issuing a ttpk or
+      // resetting the accumulator
+      if (sk_s.hi != yx_prev)
+        {
+          // if yx_next.y == yx_last.y then x changed
+          if (((sk_s.hi ^ yx_prev) & SKC_TTXK_HI_MASK_Y) == 0)
+            {
+              //
+              // if the tile is not square then it's ratio is 1:2
+              //
+#if SKC_DEVICE_SUBBLOCK_WORDS_LOG2 < SKC_DEVICE_BLOCK_WORDS_LOG2
+              skc_block_id_t const pb_id = skc_subblocks_get_next_pb_id(&subblocks,
+                                                                        &blocks_next,
+                                                                        &blocks_idx,
+                                                                        &blocks,
+                                                                        bp_mask,
+                                                                        bp_ids);
+#else
+              skc_block_id_t const pb_id = skc_blocks_get_next(&blocks_next,
+                                                               &blocks_idx,
+                                                               &blocks,
+                                                               bp_mask,
+                                                               bp_ids);
+#endif
+
+              // flush accumulated ttp vector to block/subblock at ttpb_id
+              skc_accum_flush(smem,bp_elems,pb_id);
+
+#if 0
+              if (get_sub_group_local_id() == 0)
+                {
+                  printf("%8u : ( %4u, %4u ) -> ( %4u, %4u )\n",
+                         pb_id,
+                         (yx_prev >> SKC_TTXK_HI_OFFSET_Y),
+                         (yx_prev >> SKC_TTXK_HI_OFFSET_X) & 0xFFF,
+                         (sk_s.hi >> SKC_TTXK_HI_OFFSET_Y) & 0xFFF,
+                         (sk_s.hi >> SKC_TTXK_HI_OFFSET_X) & 0xFFF);
+                }
+#endif
+
+              //
+              // FIXME -- A SIMD-WIDE BLOCK OF TTPK KEYS CAN BE CREATED IN ONE STEP
+              //
+              rkpk_rem -= 1;
+
+              // create the pk
+              skc_ttpk_s_t const pk_s = skc_ttpk_create(yx_prev+SKC_TTXK_HI_ONE_X,sk_s.hi,pb_id);
+
+              // append pk key to xk buffer
+              skc_node_v_append_pk(&pk_s,
+
+                                   &xk_v,
+                                   &xk_v_next,
+                                   &xk_v_idx,
+                                   bp_elems,
+
+                                   &blocks_next,
+                                   &blocks_idx,
+                                   &blocks,
+                                   bp_mask,
+                                   bp_ids);
+            }
+          else if (rkpk_rem > 0) // we're starting a new tile row
+            {
+              skc_accum_reset(smem);
+            }
+        }
+
+      //
+      // append sk key to node_v
+      //
+      // if rkpk_rem is zero then return from kernel
+      //
+      skc_node_v_append_sk(&sk_s,
+
+                           &xk_v,
+                           &xk_v_next,
+                           &xk_v_idx,
+                           bp_elems,
+
+                           rkpk_rem,
+
+                           &blocks_next,
+                           &blocks_idx,
+                           &blocks,
+                           bp_mask,
+                           bp_ids);
+
+      // we're done if no more sk keys
+      if (rkpk_rem == 0)
+        break;
+
+      // move to new tile
+      yx_prev = sk_s.hi;
+
+      // scatter tts values into accumulator
+      skc_accum_scatter(smem,tts_v);
+
+      // replenish sk keys
+      skc_ttsk_v_replenish(&sk_v,&sk_next,&rks_next,rks);
+    }
+}
+
+//
+//
+//
diff --git a/src/compute/skc/raster.h b/src/compute/skc/raster.h
new file mode 100644
index 0000000..c2b9583
--- /dev/null
+++ b/src/compute/skc/raster.h
@@ -0,0 +1,178 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_ONCE_RASTER
+#define SKC_ONCE_RASTER
+
+//
+//
+//
+
+#include "block.h"
+
+//
+// The raster "head" structure aliases a block.
+//
+// Blocks are guaranteed to be at least 16 words.
+//
+// Note that the end of the ttsk key sequence and beginning of the
+// ttpk key sequence may share a node.
+//
+// Note that keys are 64-bits and the "next" id is only a 32-bit
+// (27-bit tagged block id) so there is room for another next id or a
+// key/node countdown. For now we'll leave the second to last word
+// empty/unused.
+//
+
+typedef skc_uint2 skc_ttsk_t;
+typedef skc_uint2 skc_ttpk_t;
+typedef skc_uint2 skc_ttxk_t;
+
+union skc_raster_node_next
+{
+  skc_uint2        u32v2;
+
+  struct {
+    skc_block_id_t node; // low word
+    skc_uint       na;
+  };
+};
+
+//
+//
+//
+
+union skc_raster_node_elem
+{
+  skc_uint2                  u32v2;
+  skc_ttsk_t                 sk;
+  skc_ttpk_t                 pk;
+  skc_ttxk_t                 xk;
+  union skc_raster_node_next next;
+};
+
+//
+//
+//
+
+union skc_raster_header
+{
+  skc_uint4  u32v4;
+
+  struct {
+    skc_uint blocks; // # of blocks -- head+node+skb+pkb    -- uint2.lo
+    skc_uint na;     // unused                              -- uint2.hi
+    skc_uint nodes;  // # of nodes  -- not including header -- uint2.lo
+    skc_uint keys;   // # of sk+pk keys                     -- uint2.hi
+  };
+};
+
+//
+//
+//
+
+struct skc_raster_head
+{
+  union skc_raster_header    header;  // 3 counters and a spare
+  skc_int4                   bounds;  // sub-pixel resolution bounds
+  union skc_raster_node_elem elems[]; // 64-bit keys and index of next node
+};
+
+//
+//
+//
+
+#define SKC_RASTER_HEAD_WORDS                     8
+
+#define SKC_RASTER_HEAD_OFFSET_COUNTS_BLOCKS      0
+#define SKC_RASTER_HEAD_OFFSET_COUNTS_NA          1
+#define SKC_RASTER_HEAD_OFFSET_COUNTS_NODES       2
+#define SKC_RASTER_HEAD_OFFSET_COUNTS_KEYS        3
+
+#define SKC_RASTER_HEAD_OFFSET_BOUNDS             4
+#define SKC_RASTER_HEAD_OFFSET_ELEMS              8
+
+//
+//
+//
+
+#define SKC_RASTER_HEAD_WORDS_CALC                (sizeof(struct skc_raster_head) / sizeof(skc_uint))
+
+#define SKC_RASTER_HEAD_OFFSET_COUNTS_BLOCKS_CALC (SKC_OFFSET_OF(struct skc_raster_head,header.blocks) / sizeof(skc_uint))
+#define SKC_RASTER_HEAD_OFFSET_COUNTS_NODES_CALC  (SKC_OFFSET_OF(struct skc_raster_head,header.nodes)  / sizeof(skc_uint))
+#define SKC_RASTER_HEAD_OFFSET_COUNTS_KEYS_CALC   (SKC_OFFSET_OF(struct skc_raster_head,header.keys)   / sizeof(skc_uint))
+
+#define SKC_RASTER_HEAD_OFFSET_BOUNDS_CALC        (SKC_OFFSET_OF(struct skc_raster_head,bounds) / sizeof(skc_uint))
+#define SKC_RASTER_HEAD_OFFSET_ELEMS_CALC         (SKC_OFFSET_OF(struct skc_raster_head,elems)  / sizeof(skc_uint))
+
+//
+// NOT ALL OPENCL PREPROCESSORS ARE HAPPY WITH CALCULATING OFFSET_OF()
+//
+// - Intel ioc compiler failed in the past
+//
+
+#if !defined(__OPENCL_C_VERSION__)
+SKC_STATIC_ASSERT(SKC_RASTER_HEAD_WORDS                == SKC_RASTER_HEAD_WORDS_CALC);
+SKC_STATIC_ASSERT(SKC_RASTER_HEAD_OFFSET_COUNTS_BLOCKS == SKC_RASTER_HEAD_OFFSET_COUNTS_BLOCKS_CALC);
+SKC_STATIC_ASSERT(SKC_RASTER_HEAD_OFFSET_COUNTS_NODES  == SKC_RASTER_HEAD_OFFSET_COUNTS_NODES_CALC);
+SKC_STATIC_ASSERT(SKC_RASTER_HEAD_OFFSET_COUNTS_KEYS   == SKC_RASTER_HEAD_OFFSET_COUNTS_KEYS_CALC);
+SKC_STATIC_ASSERT(SKC_RASTER_HEAD_OFFSET_BOUNDS        == SKC_RASTER_HEAD_OFFSET_BOUNDS_CALC);
+SKC_STATIC_ASSERT(SKC_RASTER_HEAD_OFFSET_ELEMS         == SKC_RASTER_HEAD_OFFSET_ELEMS_CALC);
+#endif
+
+//
+//
+//
+
+#if 0
+#if !defined(__OPENCL_C_VERSION__)
+struct skc_raster_node
+{
+  union skc_raster_node_elem elems[];
+};
+#endif
+#endif
+
+//
+//
+//
+
+#define SKC_RASTER_HEAD_DWORDS       (SKC_RASTER_HEAD_WORDS / 2)
+#define SKC_RASTER_NODE_DWORDS       SKC_DEVICE_BLOCK_DWORDS
+
+//
+//
+
+#define SKC_RASTER_NODE_COUNT_KEYS   (SKC_DEVICE_BLOCK_DWORDS - 1)
+#define SKC_RASTER_HEAD_COUNT_KEYS   (SKC_RASTER_NODE_COUNT_KEYS - SKC_RASTER_HEAD_DWORDS)
+
+//
+// these are the most possible keys that could be produced by a node
+//
+
+#define SKC_RASTER_HEAD_MAX_TTSK     SKC_RASTER_HEAD_COUNT_KEYS
+#define SKC_RASTER_HEAD_MAX_TTPK     ((SKC_DEVICE_BLOCK_DWORDS - SKC_RASTER_HEAD_DWORDS) / 2)
+
+#define SKC_RASTER_NODE_MAX_TTSK     SKC_RASTER_NODE_COUNT_KEYS   // a node could be all TTSK keys minus next pointer
+#define SKC_RASTER_NODE_MAX_TTPK     (SKC_RASTER_NODE_DWORDS / 2) // a node could be at most half TTPK keys and (half-1) TTSK keys
+
+#define SKC_RASTER_HEAD_MIN_TTSK     (SKC_RASTER_HEAD_MAX_TTSK - SKC_RASTER_NODE_MAX_TTPK)
+#define SKC_RASTER_HEAD_MIN_TTPK     0
+
+#define SKC_RASTER_NODE_MIN_TTSK     (SKC_RASTER_NODE_MAX_TTSK - SKC_RASTER_NODE_MAX_TTPK)
+#define SKC_RASTER_NODE_MIN_TTPK     0
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/raster_builder.c b/src/compute/skc/raster_builder.c
new file mode 100644
index 0000000..6da8071
--- /dev/null
+++ b/src/compute/skc/raster_builder.c
@@ -0,0 +1,321 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <stdlib.h>
+#include <memory.h>
+#include <float.h>
+
+#include "raster_builder.h"
+
+#include "context.h"
+#include "weakref.h"
+
+#include "scheduler.h"
+#include "handle.h"
+
+#include "common.h"
+
+//
+//
+//
+
+#ifndef NDEBUG
+
+#include <stdio.h>
+
+#define SKC_CONTEXT_WAIT_DEBUG(p)               \
+  fprintf(stderr,"WAITING ON: " p "\n")
+
+#else
+
+#define SKC_CONTEXT_WAIT_DEBUG(p)
+
+#endif
+
+//
+//
+//
+
+#define SKC_CONTEXT_WAIT_WHILE(c,p)             \
+  while (p) {                                   \
+    SKC_CONTEXT_WAIT_DEBUG(#p);                 \
+    skc_context_wait(c);                        \
+  }
+
+//
+//
+//
+
+#if 0
+
+//
+// IDENTITY TRANSFORM
+//
+
+static
+float const skc_transform_identity[8] =
+  {
+    1.0f, 0.0f, 0.0f,  // sx  shx tx
+    0.0f, 1.0f, 0.0f,  // shy sy  ty
+    0.0f, 0.0f         // w0  w1  1  <-- always 1
+  };
+
+float const * const skc_transform_identity_ptr = skc_transform_identity;
+
+//
+// DEFAULT RASTER CLIP
+//
+
+static
+float const skc_raster_clip_default[4] =
+  {
+    -FLT_MAX, -FLT_MAX, // lower left  corner of bounding box
+    +FLT_MAX, +FLT_MAX  // upper right corner of bounding box
+  };
+
+float const * const skc_raster_clip_default_ptr = skc_raster_clip_default;
+
+#endif
+
+//
+//
+//
+
+skc_err
+skc_raster_builder_retain(skc_raster_builder_t raster_builder)
+{
+  raster_builder->refcount += 1;
+
+  return SKC_ERR_SUCCESS;
+}
+
+//xbli
+//
+//
+
+skc_err
+skc_raster_builder_release(skc_raster_builder_t raster_builder)
+{
+  SKC_ASSERT_STATE_ASSERT(SKC_RASTER_BUILDER_STATE_READY,raster_builder);
+
+  raster_builder->release(raster_builder->impl);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
+
+static
+skc_bool
+skc_raster_builder_path_ids_append(struct skc_raster_builder * const raster_builder,
+                                   union skc_cmd_fill        * const cmd,
+                                   skc_path_t                  const path)
+{
+  SKC_CONTEXT_WAIT_WHILE(raster_builder->context,skc_extent_ring_is_full(&raster_builder->path_ids.ring));
+
+  cmd->path = path;
+
+  raster_builder->path_ids.extent[skc_extent_ring_wip_index_inc(&raster_builder->path_ids.ring)] = path;
+
+  return skc_extent_ring_wip_is_full(&raster_builder->path_ids.ring);
+}
+
+static
+skc_bool
+skc_raster_builder_transforms_append(struct skc_raster_builder * const raster_builder,
+                                     union skc_cmd_fill        * const cmd,
+                                     skc_transform_weakref_t   * const transform_weakref,
+                                     skc_float           const * const transform)
+{
+  //
+  // FIXME -- check weakref
+  //
+  SKC_CONTEXT_WAIT_WHILE(raster_builder->context,skc_extent_ring_is_full(&raster_builder->transforms.ring));
+
+  cmd->transform = skc_extent_ring_wip_count(&raster_builder->transforms.ring);
+
+  skc_uint const base = skc_extent_ring_wip_index_inc(&raster_builder->transforms.ring);
+
+  memcpy(raster_builder->transforms.extent[base].f32a8,transform,sizeof(skc_float8));
+
+  return skc_extent_ring_wip_is_full(&raster_builder->transforms.ring);
+}
+
+static
+skc_bool
+skc_raster_builder_clips_append(struct skc_raster_builder * const raster_builder,
+                                union skc_cmd_fill        * const cmd,                                
+                                skc_raster_clip_weakref_t * const raster_clip_weakref,
+                                skc_float           const * const raster_clip)
+{
+  //
+  // FIXME -- check weakref
+  //
+  SKC_CONTEXT_WAIT_WHILE(raster_builder->context,skc_extent_ring_is_full(&raster_builder->clips.ring));
+
+  cmd->clip = skc_extent_ring_wip_count(&raster_builder->clips.ring);
+
+  skc_uint const base = skc_extent_ring_wip_index_inc(&raster_builder->clips.ring);
+
+  memcpy(raster_builder->clips.extent[base].f32a4,raster_clip,sizeof(skc_float4));
+
+  return skc_extent_ring_wip_is_full(&raster_builder->clips.ring);
+}
+
+static
+skc_bool
+skc_raster_builder_cmds_append(struct skc_raster_builder * const raster_builder,
+                               union skc_cmd_fill        * const cmd)
+{
+  SKC_CONTEXT_WAIT_WHILE(raster_builder->context,skc_extent_ring_is_full(&raster_builder->fill_cmds.ring));
+
+  cmd->cohort = skc_extent_ring_wip_count(&raster_builder->raster_ids.ring);
+
+  skc_uint const base = skc_extent_ring_wip_index_inc(&raster_builder->fill_cmds.ring);
+  
+  raster_builder->fill_cmds.extent[base] = *cmd;
+
+#if 0
+  fprintf(stderr,"[ %4u, %4u, %4u, %4u ]\n",
+          cmd->path,
+          cmd->transform,
+          cmd->clip,
+          cmd->cohort);
+#endif
+
+  return skc_extent_ring_wip_is_full(&raster_builder->fill_cmds.ring);
+}
+
+//
+//
+//
+
+static
+skc_bool
+skc_raster_builder_raster_ids_append(struct skc_raster_builder * const raster_builder,
+                                     skc_raster_t                const raster)
+{
+  SKC_CONTEXT_WAIT_WHILE(raster_builder->context,skc_extent_ring_is_full(&raster_builder->raster_ids.ring));
+
+  raster_builder->raster_ids.extent[skc_extent_ring_wip_index_inc(&raster_builder->raster_ids.ring)] = raster;
+
+  return skc_extent_ring_wip_is_full(&raster_builder->raster_ids.ring);
+}
+
+//
+//
+//
+
+static
+void
+skc_raster_builder_checkpoint(struct skc_raster_builder * const raster_builder)
+{
+  skc_extent_ring_checkpoint(&raster_builder->path_ids  .ring);
+  skc_extent_ring_checkpoint(&raster_builder->transforms.ring);
+  skc_extent_ring_checkpoint(&raster_builder->clips     .ring);
+  skc_extent_ring_checkpoint(&raster_builder->fill_cmds .ring);
+  skc_extent_ring_checkpoint(&raster_builder->raster_ids.ring);
+}
+
+//
+// RASTER OPS
+//
+
+skc_err
+skc_raster_begin(skc_raster_builder_t raster_builder)
+{
+  SKC_ASSERT_STATE_TRANSITION(SKC_RASTER_BUILDER_STATE_READY,
+                              SKC_RASTER_BUILDER_STATE_BUILDING,
+                              raster_builder);
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_raster_end(skc_raster_builder_t raster_builder, skc_raster_t * raster)
+{
+  SKC_ASSERT_STATE_TRANSITION(SKC_RASTER_BUILDER_STATE_BUILDING,
+                              SKC_RASTER_BUILDER_STATE_READY,
+                              raster_builder);
+  // get a raster id
+  raster_builder->end(raster_builder->impl,raster);
+
+  // if cohort is full then launch
+  skc_bool const snap = skc_raster_builder_raster_ids_append(raster_builder,*raster);
+
+  // checkpoint the current ring range
+  skc_raster_builder_checkpoint(raster_builder);
+
+  // snapshot and force start because the cohort is full -- no need to wait
+  if (snap)
+    raster_builder->force(raster_builder->impl);
+
+  // add guard bit
+  *raster |= SKC_TYPED_HANDLE_TYPE_IS_RASTER; // FIXME -- the guard bit can be buried
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+// PATH-TO-RASTER OPS
+//
+
+skc_err
+skc_raster_add_filled(skc_raster_builder_t        raster_builder,
+                      skc_path_t                  path,
+                      skc_transform_weakref_t   * transform_weakref,
+                      float               const * transform,
+                      skc_raster_clip_weakref_t * raster_clip_weakref,
+                      float               const * raster_clip)
+{
+  SKC_ASSERT_STATE_ASSERT(SKC_RASTER_BUILDER_STATE_BUILDING,raster_builder);
+
+  //
+  // validate and retain the path handle before proceeding
+  //
+  skc_err err = raster_builder->add(raster_builder->impl,&path,1);
+
+  if (err)
+    return err;
+
+  // mask off the guard bits
+  path = SKC_TYPED_HANDLE_TO_HANDLE(path);
+
+  // 
+  // build the command...
+  //
+  union skc_cmd_fill cmd;
+
+  // append path to ring
+  skc_bool snap = skc_raster_builder_path_ids_append(raster_builder,&cmd,path);
+
+  // append transform
+  snap = skc_raster_builder_transforms_append(raster_builder,&cmd,transform_weakref,transform) || snap;
+
+  // append raster clip
+  snap = skc_raster_builder_clips_append(raster_builder,&cmd,raster_clip_weakref,raster_clip) || snap;
+
+  // append fill command
+  snap = skc_raster_builder_cmds_append(raster_builder,&cmd) || snap;
+
+  // snapshot and lazily start
+  if (snap)
+    raster_builder->start(raster_builder->impl);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
diff --git a/src/compute/skc/raster_builder.h b/src/compute/skc/raster_builder.h
new file mode 100644
index 0000000..9996a2b
--- /dev/null
+++ b/src/compute/skc/raster_builder.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "skc.h"
+#include "assert_state.h"
+#include "extent_ring.h" // note that these structs are *not* opaque
+
+//
+//
+//
+
+typedef enum skc_raster_builder_state_e {
+
+  SKC_RASTER_BUILDER_STATE_READY,
+  SKC_RASTER_BUILDER_STATE_BUILDING
+
+} skc_raster_builder_state_e;
+
+//
+// Construct and dispose of a raster builder and its opaque
+// implementation.
+//
+
+struct skc_raster_builder
+{
+  struct skc_context              * context;
+
+  struct skc_raster_builder_impl  * impl;
+
+  skc_err                        (* add    )(struct skc_raster_builder_impl * const impl, skc_path_t const * paths, skc_uint count);
+  void                           (* end    )(struct skc_raster_builder_impl * const impl, skc_raster_t * const raster);
+  void                           (* start  )(struct skc_raster_builder_impl * const impl);
+  void                           (* force  )(struct skc_raster_builder_impl * const impl);
+  void                           (* release)(struct skc_raster_builder_impl * const impl);
+
+  struct {
+    skc_path_t                    * extent;
+    struct skc_extent_ring          ring;
+  } path_ids;
+
+  struct {
+    union skc_transform           * extent;
+    struct skc_extent_ring          ring;
+  } transforms;
+
+  struct {
+    union skc_path_clip           * extent;
+    struct skc_extent_ring          ring;
+  } clips;
+
+  struct {
+    union skc_cmd_fill            * extent;
+    struct skc_extent_ring          ring;
+  } fill_cmds;
+
+  struct {
+    skc_raster_t                  * extent;
+    struct skc_extent_ring          ring;
+  } raster_ids;
+
+  skc_uint                          refcount; // FIXME -- split this into host and impl refcounts
+
+  SKC_ASSERT_STATE_DECLARE(skc_raster_builder_state_e);
+};
+
+//
+//
+//
diff --git a/src/compute/skc/raster_builder_cl_12.c b/src/compute/skc/raster_builder_cl_12.c
new file mode 100644
index 0000000..33992cb
--- /dev/null
+++ b/src/compute/skc/raster_builder_cl_12.c
@@ -0,0 +1,1349 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+// get rid of these
+#include <stdio.h>
+#include <stdlib.h>
+
+//
+//
+//
+
+#include "hs/cl/hs_cl_launcher.h"
+
+#include "common/cl/assert_cl.h"
+
+#include "context.h"
+#include "grid.h"
+#include "raster.h"
+#include "extent_ring.h"
+#include "raster_builder.h"
+
+#include "tile.h"
+
+#include "config_cl.h"
+#include "runtime_cl_12.h"
+#include "extent_cl_12.h"
+#include "raster_builder_cl_12.h"
+
+//
+// RASTERIZATION SUB-PIPELINE
+// --------------------------
+//
+// Phase 1: expand commands
+//
+// Phase 2: rasterize
+//
+// Phase 3: sort & segment || release paths
+//
+// Phase 4: prefix
+//
+// Phase 5: release rasters
+//
+//                                                      RASTER  COHORT
+//                                                      ==============
+//
+//                      BUILDER                           RASTERIZER                              POST PROCESSING
+//   <----------------------------------------------->  <------------>  <--------------------------------------------------------------------->
+//
+//   fill cmds  transforms  raster clips  path release  rasterize cmds  cohort map  raster release  TTSB  TTSK  cohort atomics  context atomics
+//   ---------  ----------  ------------  ------------  --------------  ----------  --------------  ----  ----  --------------  ---------------
+//      1,2        1,2           1,2           1,2             2            1-4         1,2,3,4       2-4   2-4       2-4            global
+//
+//
+// NOTES: FINE-GRAINED SVM
+// -----------------------
+//
+//   1) In a fine-grained system we know the exact number of
+//      rasterize cmds per segment type before phase 1
+//
+//   2) A raster that's "under construction" shouldn't be rasterized
+//      until it is complete.  This implies that a raster is not part
+//      of a cohort until it is complete.  The raster builder must
+//      handle raster promises being "forced" to completion -- this is
+//      likely the result of composition construction and subsequent
+//      rendering to a surface.
+//
+//   3) The raster cohort rasterizer state retains the fill cmd,
+//      transform, raster clip and path release "ring" extents.
+//
+//   4) The rasterize cmd extent sizes (line, quad, cubic, rational
+//      quad, rational cubic) are known ahead of time.
+//
+//   5) The raster cohort post processor is standalone and retains the
+//      raster_map, cohort atomics, TTSK_RYX extent, and raster
+//      references until complete.
+//
+
+//
+// Notes:
+//
+// - Could have a pipeline stage before expansion count the exact
+//   number of line/quad/cubic commands but the command buffers are
+//   relatively small (64-bit commands * # of path segments).
+//
+
+//                          raster
+//                          cohort atomics path_ids raster_ids transforms clips cmds_fill cmds_l/q/c ttsk_ryx
+//
+//
+// BEGIN                      ^
+//                            |
+//   EXPAND                   |
+//                            |
+//   RASTERIZE                |
+//                            |
+//   SORT || RELEASE PATHS    |
+//                            |
+//   PREFIX                   |
+//                            |
+//   RELEASE RASTERS          |
+//                            |
+// END                        v
+//
+//
+// BEGIN
+//
+//   EXPAND                   -- PRODUCES:   one or more extents of rasterization commands
+//
+//   RASTERIZE                -- DEPENDENCY: requires size of command extents before launching
+//                            -- PRODUCES:   an extent of ttsk_ryx keys
+//
+//   SORT || RELEASE PATHS    -- DEPENDENCY: requires size of key extent before launching
+//                            -- PRODUCES:   sorted array of keys
+//
+//   PREFIX                   -- DEPENDENCY: none -- can execute after SORT because grid size is number of rasters
+//
+//   RELEASE RASTERS          -- DEPENDENCY: none -- can execute after prefix
+//
+// END
+//
+
+// ------------------------
+//
+// DEPENDENCY is cleanly implemented with a host callback or device kernel launcher
+//
+// Can this hide resource acquisition?  Yes.  But there are two cases:
+//
+// 1. acqusition of resources occurs on the host thread and lack of
+//    resources drains the host command queue until resources are
+//    available (OpenCL 2.x)
+//
+// 2. the host commands lazily acquire resources (OpenCL 1.2)
+//
+// ------------------------
+//
+// How to express?
+//
+// Each substage launches its successors.  This supports both dependency models.
+//
+// If OpenCL 1.2 then the substage can't be launched until the prior
+// stage's event is complete.  So this requires registering a callback
+// to invoke the substage.
+//
+// ------------------------
+
+//
+// BUILD
+//
+
+struct skc_raster_builder_impl
+{
+  struct skc_raster_builder    * raster_builder;
+  struct skc_runtime           * runtime;
+
+  skc_grid_t                     cohort;
+
+  // these are all durable/perm extents
+  struct skc_extent_phrwg_thr1s  path_ids;    // read/write by host
+  struct skc_extent_phw1g_tdrNs  transforms;  // write once by host + read by device
+  struct skc_extent_phw1g_tdrNs  clips;       // write once by host + read by device
+  struct skc_extent_phw1g_tdrNs  fill_cmds;   // write once by host + read by device
+  struct skc_extent_phrwg_tdrNs  raster_ids;  // read/write by host + read by device
+
+  struct {
+    cl_kernel                    fills_expand;
+    cl_kernel                    rasterize_all;
+    cl_kernel                    segment;
+    cl_kernel                    rasters_alloc;
+    cl_kernel                    prefix;
+  } kernels;
+};
+
+//
+// RASTER COHORT
+//
+// This sub-pipeline snapshots the raster builder and then acquires
+// and releases host and device resources as necessary (as late as
+// possible).
+//
+// Note that the cohort extents are ephemeral and are only used by one
+// or more stages of a the rasterization sub-pipeline.
+//
+// The pipeline implementation may vary between compute platforms.
+//
+
+struct skc_raster_cohort
+{
+  struct skc_raster_builder_impl    * impl;
+
+  struct skc_extent_phrwg_thr1s_snap  path_ids;    // read/write by host
+  struct skc_extent_phw1g_tdrNs_snap  transforms;  // write once by host + read by device
+  struct skc_extent_phw1g_tdrNs_snap  clips;       // write once by host + read by device
+  struct skc_extent_phw1g_tdrNs_snap  fill_cmds;   // write once by host + read by device
+  struct skc_extent_phrwg_tdrNs_snap  raster_ids;  // read/write by host + read by device
+
+  cl_command_queue                    cq;
+
+  // sub-pipeline atomics
+  struct skc_extent_thr_tdrw          atomics;
+
+  // path primitives are expanded into line/quad/cubic/rational cmds
+  struct skc_extent_tdrw              cmds;
+
+  // rasterization output
+  struct skc_extent_tdrw              keys;
+  // struct skc_extent_thrw_tdrw      keys;
+
+  // post-sort extent with metadata for each raster
+  struct skc_extent_tdrw              metas;
+  // struct skc_extent_thrw_tdrw      metas;
+
+  // subbuf id
+  skc_subbuf_id_t                     id;
+
+  //
+  // pipeline also uses the following global resources:
+  //
+  // - command queue from global factory
+  // - global block pool and its atomics
+  // - global path and raster host id map
+  // - temporary host and device allocations
+  //
+};
+
+//
+// TTRK (64-BIT COMPARE)
+//
+//    0                                  63
+//    | TTSB ID |   X  |   Y  | COHORT ID |
+//    +---------+------+------+-----------+
+//    |    27   |  12  |  12  |     13    |
+//
+//
+// TTRK (32-BIT COMPARE)
+//
+//    0                                        63
+//    | TTSB ID | N/A |   X  |   Y  | COHORT ID |
+//    +---------+-----+------+------+-----------+
+//    |    27   |  5  |  12  |  12  |     8     |
+//
+
+//
+// TTRK is sortable intermediate key format for TTSK
+//
+// We're going to use the 32-bit comparison version for now
+//
+
+union skc_ttrk
+{
+  skc_ulong  u64;
+  skc_uint2  u32v2;
+
+  struct {
+    skc_uint block    : SKC_TTXK_LO_BITS_ID;
+    skc_uint na0      : SKC_TTRK_LO_BITS_NA;
+    skc_uint x        : SKC_TTXK_HI_BITS_X;
+    skc_uint y        : SKC_TTXK_HI_BITS_Y;
+    skc_uint cohort   : SKC_TTRK_HI_BITS_COHORT;
+  };
+
+  struct {
+    skc_uint na1;
+    skc_uint yx       : SKC_TTXK_HI_BITS_YX;
+    skc_uint na2      : SKC_TTRK_HI_BITS_COHORT;
+  };
+
+  struct {
+    skc_uint na3;
+    skc_uint na4      : SKC_TTXK_HI_BITS_X;
+    skc_uint cohort_y : SKC_TTRK_HI_BITS_COHORT_Y;
+  };
+};
+
+//
+//
+//
+
+static
+void
+skc_raster_builder_pfn_release(struct skc_raster_builder_impl * const impl)
+{
+  // decrement reference count
+  if (--impl->raster_builder->refcount != 0)
+    return;
+
+  //
+  // otherwise, dispose of the the raster builder and its impl
+  //
+  struct skc_runtime * const runtime = impl->runtime;
+
+  // free the raster builder
+  skc_runtime_host_perm_free(runtime,impl->raster_builder);
+
+  // free durable/perm extents
+  skc_extent_phrwg_thr1s_free(runtime,&impl->path_ids);
+  skc_extent_phw1g_tdrNs_free(runtime,&impl->transforms);
+  skc_extent_phw1g_tdrNs_free(runtime,&impl->clips);
+  skc_extent_phw1g_tdrNs_free(runtime,&impl->fill_cmds);
+  skc_extent_phrwg_tdrNs_free(runtime,&impl->raster_ids);
+
+  // release kernels
+  cl(ReleaseKernel(impl->kernels.fills_expand));
+  cl(ReleaseKernel(impl->kernels.rasterize_all));
+
+#if 0
+  cl(ReleaseKernel(impl->kernels.rasterize_lines));
+  cl(ReleaseKernel(impl->kernels.rasterize_quads));
+  cl(ReleaseKernel(impl->kernels.rasterize_cubics));
+#endif
+
+  cl(ReleaseKernel(impl->kernels.segment));
+  cl(ReleaseKernel(impl->kernels.rasters_alloc));
+  cl(ReleaseKernel(impl->kernels.prefix));
+
+  // free the impl
+  skc_runtime_host_perm_free(runtime,impl);
+}
+
+//
+//
+//
+
+static 
+void
+skc_raster_builder_rasters_release(struct skc_runtime * const runtime,
+                                   skc_raster_t const * const rasters,
+                                   skc_uint             const size,
+                                   skc_uint             const from,
+                                   skc_uint             const to)
+{
+  if (from <= to) // no wrap
+    {
+      skc_raster_t const * rasters_from = rasters + from;
+      skc_uint             count_from   = to      - from;
+
+      skc_grid_deps_unmap(runtime->deps,rasters_from,count_from);
+      skc_runtime_raster_device_release(runtime,rasters_from,count_from);
+    } 
+  else // from > to implies wrap
+    {
+      skc_raster_t const * rasters_lo = rasters + from;
+      skc_uint             count_lo   = size    - from;
+      
+      skc_grid_deps_unmap(runtime->deps,rasters_lo,count_lo);
+      skc_runtime_raster_device_release(runtime,rasters_lo,count_lo);
+
+      skc_grid_deps_unmap(runtime->deps,rasters,to);
+      skc_runtime_raster_device_release(runtime,rasters,to);
+    }
+}
+
+static 
+void
+skc_raster_builder_paths_release(struct skc_runtime                 * const runtime,
+                                 struct skc_extent_phrwg_thr1s_snap * const snap)
+{
+  // release lo
+  skc_runtime_path_device_release(runtime,snap->hr1.lo,snap->count.lo);
+
+  // release hi
+  if (snap->count.hi)
+    skc_runtime_path_device_release(runtime,snap->hr1.hi,snap->count.hi);
+}
+
+static
+void
+skc_raster_builder_cohort_grid_pfn_dispose(skc_grid_t const grid)
+{
+  //
+  // ALLOCATED RESOURCES
+  //
+  // path_ids          -
+  // raster_ids        a
+  // transforms        -
+  // clips             -
+  // fill_cmds         -
+  // cq                a
+  // cohort atomics    a
+  // cmds              -
+  // keys              a
+  // meta              a
+  //
+
+  struct skc_raster_cohort       * const cohort  = skc_grid_get_data(grid);
+  struct skc_raster_builder_impl * const impl    = cohort->impl;
+  struct skc_runtime             * const runtime = impl->runtime;
+
+  //
+  // release paths -- FIXME -- Note that releasing paths can be
+  // performed after rasterization is complete
+  //
+
+  // snap alloc the paths -- this host snap simply sets up pointers
+  skc_extent_phrwg_thr1s_snap_alloc(runtime,&impl->path_ids,&cohort->path_ids);
+  
+  // unmap and release raster ids
+  skc_raster_builder_paths_release(runtime,&cohort->path_ids);
+
+  // release path ids
+  skc_extent_phrwg_thr1s_snap_free(runtime,&cohort->path_ids);
+
+  //
+  // release rasters
+  //
+  skc_uint const size = cohort->raster_ids.snap->ring->size.pow2;
+  skc_uint const from = skc_extent_ring_snap_from(cohort->raster_ids.snap);
+  skc_uint const to   = skc_extent_ring_snap_to(cohort->raster_ids.snap);
+
+  // unmap and release raster ids
+  skc_raster_builder_rasters_release(runtime,impl->raster_ids.hrw,size,from,to);
+
+  // release cohort's remaining allocated resources 
+  skc_extent_phrwg_tdrNs_snap_free(runtime,&cohort->raster_ids);
+  skc_runtime_release_cq_in_order(runtime,cohort->cq);
+  skc_extent_thr_tdrw_free(runtime,&cohort->atomics);
+  skc_extent_tdrw_free(runtime,&cohort->keys);
+  skc_extent_tdrw_free(runtime,&cohort->metas);
+  // skc_extent_thrw_tdrw_free(runtime,&cohort->keys);
+  // skc_extent_thrw_tdrw_free(runtime,&cohort->metas);
+  skc_runtime_host_temp_free(runtime,cohort,cohort->id);
+
+  // release the raster builder
+  skc_raster_builder_pfn_release(impl);
+
+  //
+  // ALLOCATED RESOURCES
+  //
+  // path_ids          -
+  // raster_ids        -
+  // transforms        -
+  // clips             -
+  // fill_cmds         -
+  // cq                -
+  // cohort atomics    -
+  // cmds              -
+  // keys              -
+  // meta              -
+  //
+}
+
+//
+//
+//
+
+static
+void
+skc_raster_cohort_prefix_release(skc_grid_t const grid)
+{
+  // FIXME -- note that pfn_dispose can be accomplished here
+
+  // release the grid
+  skc_grid_complete(grid); 
+}
+
+static
+void
+skc_raster_cohort_prefix_cb(cl_event event, cl_int status, skc_grid_t const grid)
+{
+  SKC_CL_CB(status);
+  
+  struct skc_raster_cohort * const cohort    = skc_grid_get_data(grid);
+  struct skc_scheduler     * const scheduler = cohort->impl->runtime->scheduler;
+
+  // as quickly as possible, enqueue next stage in pipeline to context command scheduler
+  SKC_SCHEDULER_SCHEDULE(scheduler,skc_raster_cohort_prefix_release,grid);
+}
+
+//
+//
+//
+
+#if 0
+static
+int cmp64(const void * ptr_a, const void * ptr_b)
+{
+  skc_ulong const a = *(const skc_ulong *)ptr_a;
+  skc_ulong const b = *(const skc_ulong *)ptr_b;
+
+  if (a < b) return -1;
+  if (a > b) return +1;
+  else       return  0;
+}
+#endif
+
+//
+//
+//
+
+static
+void
+skc_raster_cohort_sort_prefix(skc_grid_t const grid)
+{
+  //
+  // ALLOCATED RESOURCES
+  //
+  // path_ids          i
+  // raster_ids        i
+  // transforms        a
+  // clips             a
+  // fill_cmds         -
+  // cq                a
+  // cohort atomics    a
+  // cmds              a
+  // keys              a
+  // meta              -
+  //
+
+  // use the backpointers
+  struct skc_raster_cohort       * const cohort  = skc_grid_get_data(grid);
+  struct skc_raster_builder_impl * const impl    = cohort->impl;
+  struct skc_runtime             * const runtime = impl->runtime;
+
+  // release transforms
+  skc_extent_phw1g_tdrNs_snap_free(runtime,&cohort->transforms);
+
+  // release clips
+  skc_extent_phw1g_tdrNs_snap_free(runtime,&cohort->clips);
+
+  // release expanded cmds
+  skc_extent_tdrw_free(runtime,&cohort->cmds);
+
+  // alloc the snapshost -- could be zero-sized
+  skc_extent_phrwg_tdrNs_snap_alloc(runtime,
+                                    &impl->raster_ids,
+                                    &cohort->raster_ids,
+                                    cohort->cq,NULL);
+
+  // will never be zero
+  skc_uint const rasters = skc_extent_ring_snap_count(cohort->raster_ids.snap);
+
+  // acquire fixed-size device-side extent
+  skc_extent_tdrw_alloc(runtime,
+                        &cohort->metas,
+                        sizeof(struct skc_raster_cohort_meta));
+
+  // skc_extent_thrw_tdrw_alloc(runtime,
+  //                            &cohort->metas,
+  //                            sizeof(struct skc_raster_cohort_meta));
+
+  // zero the metas
+  skc_extent_tdrw_zero(&cohort->metas,cohort->cq,NULL);
+
+  // get the read-only host copy of the device atomics
+  struct skc_raster_cohort_atomic const * const atomics = cohort->atomics.hr;
+
+  //
+  // SORT
+  //
+  if (atomics->keys > 0)
+    {
+#ifndef NDEBUG
+      fprintf(stderr,"raster cohort sort: %u\n",atomics->keys);
+#endif
+
+      //
+      //
+      //
+      uint32_t keys_padded_in, keys_padded_out;
+
+      hs_pad(atomics->keys,&keys_padded_in,&keys_padded_out);
+
+      hs_sort(cohort->cq,
+              cohort->keys.drw,
+              cohort->keys.drw,
+              atomics->keys,
+              keys_padded_in,
+              keys_padded_out,
+              false);
+
+      cl(SetKernelArg(impl->kernels.segment,0,SKC_CL_ARG(cohort->keys.drw)));
+      cl(SetKernelArg(impl->kernels.segment,1,SKC_CL_ARG(cohort->metas.drw)));
+
+#ifndef NDEBUG
+      fprintf(stderr,"post-sort\n");
+#endif
+
+      // find start of each tile
+      skc_device_enqueue_kernel(runtime->device,
+                                SKC_DEVICE_KERNEL_ID_SEGMENT_TTRK,
+                                cohort->cq,
+                                impl->kernels.segment,
+                                atomics->keys,
+                                0,NULL,NULL);
+
+#ifndef NDEBUG
+      fprintf(stderr,"post-segment\n");
+#endif
+
+      //
+      // DELETE ALL THIS WHEN READY
+      //
+
+#if 0    
+      //
+      //
+      //
+      cl(Finish(cohort->cq));
+
+      // map keys to host
+      union skc_ttrk * const keys = skc_extent_thrw_tdrw_map(&cohort->keys,
+                                                             cohort->cq,
+                                                             NULL);
+      // map meta to host
+      struct skc_raster_cohort_meta * const metas = skc_extent_thrw_tdrw_map(&cohort->metas,
+                                                                             cohort->cq,
+                                                                             NULL);
+      // block until done
+      cl(Finish(cohort->cq));
+
+      // sort keys
+      qsort(keys,atomics->keys,sizeof(*keys),cmp64);
+
+      // mask to determine if rk id is a new block
+      skc_uint const subblock_mask = runtime->config->block.subblocks - 1;
+
+      //
+      // some counters
+      //
+      union skc_raster_cohort_meta_in meta_in = { 
+        .blocks = 0,
+        .offset = 0,
+        .pk     = 0,
+        .rk     = 0
+      };
+
+      // get first key
+      union skc_ttrk curr = keys[0];
+
+      skc_uint ii=0, jj=0;
+
+      // for all TTRK keys
+      while (true)
+        {
+          // increment ttrk count
+          meta_in.rk += 1;
+
+          // was this a new block?
+          if ((curr.u32v2.lo & subblock_mask) == 0)
+            meta_in.blocks += 1;
+
+          // break if we're out of keys
+          if (++ii >= atomics->keys)
+            break;
+
+          // otherwise, process next key
+          union skc_ttrk const next = keys[ii];
+
+          // if new cohort then save curr meta and init next meta
+          if (next.cohort != curr.cohort)
+            {
+              fprintf(stderr,"[ %u, %u, %u, %u ]\n",
+                      meta_in.blocks,
+                      meta_in.offset,
+                      meta_in.pk,
+                      meta_in.rk);
+
+              // store back to buffer
+              metas->inout[curr.cohort].in = meta_in;
+            
+              // update meta_in
+              meta_in.blocks = 0;
+              meta_in.offset = ii; 
+              meta_in.pk     = 0;
+              meta_in.rk     = 0;
+            }
+          // otherwise, if same y but new x then increment TTPK count
+          else if ((next.y == curr.y) && (next.x != curr.x))
+            {
+              meta_in.pk += 1;
+
+#if 0
+              fprintf(stderr,"%3u : %3u : ( %3u, %3u ) -> ( %3u )\n",
+                      jj++,curr.cohort,curr.y,curr.x,next.x);
+#endif
+            }
+
+#if 0
+          fprintf(stderr,"( %3u, %3u )\n",next.y,next.x);
+#endif
+
+          curr = next;
+        }
+
+      fprintf(stderr,"[ %u, %u, %u, %u ]\n",
+              meta_in.blocks,
+              meta_in.offset,
+              meta_in.pk,
+              meta_in.rk);
+
+      // store back to buffer
+      metas->inout[curr.cohort].in = meta_in;
+
+    
+      // unmap
+      skc_extent_thrw_tdrw_unmap(&cohort->keys,
+                                 keys,
+                                 cohort->cq,
+                                 NULL);
+
+      // unmap
+      skc_extent_thrw_tdrw_unmap(&cohort->metas,
+                                 metas,
+                                 cohort->cq,
+                                 NULL);
+#endif
+    }
+
+#ifndef NDEBUG
+  fprintf(stderr,"rasters_alloc: %u\n",rasters);
+#endif
+
+  //
+  // RASTER ALLOC/INIT
+  //
+  cl(SetKernelArg(impl->kernels.rasters_alloc,0,SKC_CL_ARG(runtime->block_pool.atomics.drw)));
+  cl(SetKernelArg(impl->kernels.rasters_alloc,1,SKC_CL_ARG(runtime->block_pool.ids.drw)));
+  cl(SetKernelArg(impl->kernels.rasters_alloc,2,SKC_CL_ARG(runtime->block_pool.size->ring_mask)));
+  cl(SetKernelArg(impl->kernels.rasters_alloc,3,SKC_CL_ARG(runtime->handle_pool.map.drw)));
+  cl(SetKernelArg(impl->kernels.rasters_alloc,4,SKC_CL_ARG(cohort->metas.drw)));
+  cl(SetKernelArg(impl->kernels.rasters_alloc,5,SKC_CL_ARG(cohort->raster_ids.drN)));
+  cl(SetKernelArg(impl->kernels.rasters_alloc,6,SKC_CL_ARG(rasters)));
+
+  skc_device_enqueue_kernel(runtime->device,
+                            SKC_DEVICE_KERNEL_ID_RASTERS_ALLOC,
+                            cohort->cq,
+                            impl->kernels.rasters_alloc,
+                            rasters,
+                            0,NULL,NULL);
+
+#ifndef NDEBUG
+  fprintf(stderr,"post-alloc\n");
+#endif
+
+  //
+  // PREFIX
+  //
+  cl(SetKernelArg(impl->kernels.prefix,0,SKC_CL_ARG(runtime->block_pool.atomics.drw)));
+  cl(SetKernelArg(impl->kernels.prefix,1,SKC_CL_ARG(runtime->block_pool.ids.drw)));
+  cl(SetKernelArg(impl->kernels.prefix,2,SKC_CL_ARG(runtime->block_pool.blocks.drw)));
+  cl(SetKernelArg(impl->kernels.prefix,3,SKC_CL_ARG(runtime->block_pool.size->ring_mask)));
+
+  cl(SetKernelArg(impl->kernels.prefix,4,SKC_CL_ARG(cohort->keys.drw)));
+  cl(SetKernelArg(impl->kernels.prefix,5,SKC_CL_ARG(runtime->handle_pool.map.drw)));
+
+  cl(SetKernelArg(impl->kernels.prefix,6,SKC_CL_ARG(cohort->metas.drw)));
+  cl(SetKernelArg(impl->kernels.prefix,7,SKC_CL_ARG(rasters)));
+
+  cl_event complete;
+
+  skc_device_enqueue_kernel(runtime->device,
+                            SKC_DEVICE_KERNEL_ID_PREFIX,
+                            cohort->cq,
+                            impl->kernels.prefix,
+                            rasters,
+                            0,NULL,
+                            &complete);
+
+  cl(SetEventCallback(complete,CL_COMPLETE,skc_raster_cohort_prefix_cb,grid));
+  cl(ReleaseEvent(complete));
+
+#ifndef NDEBUG
+  fprintf(stderr,"post-prefix\n");
+#endif
+
+  // flush command queue
+  cl(Flush(cohort->cq));
+
+  //
+  // ALLOCATED RESOURCES
+  //
+  // path_ids          a
+  // raster_ids        a
+  // transforms        -
+  // clips             -
+  // fill_cmds         -
+  // cq                a
+  // cohort atomics    a
+  // cmds              -
+  // keys              a
+  // meta              a
+  //
+}
+
+static
+void
+skc_raster_cohort_rasterize_cb(cl_event event, cl_int status, skc_grid_t const grid)
+{
+  SKC_CL_CB(status);
+  
+  struct skc_raster_cohort * const cohort = skc_grid_get_data(grid);
+
+  // as quickly as possible, enqueue next stage in pipeline to context command scheduler
+  SKC_SCHEDULER_SCHEDULE(cohort->impl->runtime->scheduler,skc_raster_cohort_sort_prefix,grid);
+}
+
+static
+void
+skc_raster_cohort_rasterize(skc_grid_t const grid)
+{
+  //
+  // ALLOCATED RESOURCES
+  //
+  // path_ids          i
+  // raster_ids        i
+  // transforms        i
+  // clips             i
+  // fill_cmds         s
+  // cq                a
+  // cohort atomics    a
+  // cmds              a
+  // cmds_quad         a
+  // cmds_cubic        a
+  // keys              -
+  // meta              -
+
+  // use the backpointers
+  struct skc_raster_cohort       * const cohort  = skc_grid_get_data(grid);
+  struct skc_raster_builder_impl * const impl    = cohort->impl;
+  struct skc_runtime             * const runtime = impl->runtime;
+
+  //
+  // RELEASED RESOURCES
+  //
+  // cmds       snap
+  //
+
+  // release the cmds extent and snap since it's only used by the expand stage
+  skc_extent_phw1g_tdrNs_snap_free(runtime,&cohort->fill_cmds);
+
+  //
+  // NEW ALLOCATED RESOURCES
+  //
+  // transforms snap
+  // clips snap
+  // ttrk keys
+  //
+  skc_extent_phw1g_tdrNs_snap_alloc(runtime,
+                                    &impl->transforms,
+                                    &cohort->transforms,
+                                    cohort->cq,NULL);
+
+  skc_extent_phw1g_tdrNs_snap_alloc(runtime,
+                                    &impl->clips,
+                                    &cohort->clips,
+                                    cohort->cq,NULL);
+
+  // acquire device-side extent
+  skc_extent_tdrw_alloc(runtime,
+                        &cohort->keys,
+                        sizeof(union skc_ttrk) * runtime->config->raster_cohort.rasterize.keys);
+
+  // skc_extent_thrw_tdrw_alloc(runtime,
+  //                            &cohort->keys,
+  //                            sizeof(union skc_ttrk) * runtime->config->raster_cohort.rasterize.keys);
+
+  //
+  // acquire out-of-order command queue
+  //
+  // and launch up to 3 kernels
+  //
+  // for each kernel:
+  //
+  //   set runtime "global" kernel args:
+  //
+  //   - block pool atomics
+  //   - block pool extent
+  //
+  //   set cohort "local" kernel args:
+  //
+  //   - atomics
+  //   - cmds
+  //
+  // enqueue barrier
+  // enqueue copy back of atomics on the command queue
+  // set callback on copy back event
+  // release command queue
+  //
+  struct skc_raster_cohort_atomic const * const atomics = cohort->atomics.hr;
+
+  if (atomics->cmds > 0)
+    {
+      cl(SetKernelArg(impl->kernels.rasterize_all,0,SKC_CL_ARG(runtime->block_pool.atomics.drw)));
+      cl(SetKernelArg(impl->kernels.rasterize_all,1,SKC_CL_ARG(runtime->block_pool.blocks.drw)));
+      cl(SetKernelArg(impl->kernels.rasterize_all,2,SKC_CL_ARG(runtime->block_pool.ids.drw)));
+      cl(SetKernelArg(impl->kernels.rasterize_all,3,SKC_CL_ARG(runtime->block_pool.size->ring_mask)));
+
+      cl(SetKernelArg(impl->kernels.rasterize_all,4,SKC_CL_ARG(cohort->atomics.drw)));
+      cl(SetKernelArg(impl->kernels.rasterize_all,5,SKC_CL_ARG(cohort->keys.drw)));
+
+      cl(SetKernelArg(impl->kernels.rasterize_all,6,SKC_CL_ARG(cohort->transforms.drN)));
+      cl(SetKernelArg(impl->kernels.rasterize_all,7,SKC_CL_ARG(cohort->clips.drN)));
+      cl(SetKernelArg(impl->kernels.rasterize_all,8,SKC_CL_ARG(cohort->cmds.drw)));
+      cl(SetKernelArg(impl->kernels.rasterize_all,9,SKC_CL_ARG(atomics->cmds)));
+
+      skc_device_enqueue_kernel(runtime->device,
+                                SKC_DEVICE_KERNEL_ID_RASTERIZE_ALL,
+                                cohort->cq,
+                                impl->kernels.rasterize_all,
+                                atomics->cmds,
+                                0,NULL,NULL);
+    }
+
+  //
+  // copyback number of TTSK keys
+  //
+  cl_event complete;
+
+  skc_extent_thr_tdrw_read(&cohort->atomics,cohort->cq,&complete);
+
+  cl(SetEventCallback(complete,CL_COMPLETE,skc_raster_cohort_rasterize_cb,grid));
+  cl(ReleaseEvent(complete));
+
+  // flush command queue
+  cl(Flush(cohort->cq));
+
+  //
+  // ALLOCATED RESOURCES
+  //
+  // path_ids          i
+  // raster_ids        i
+  // transforms        a
+  // clips             a
+  // fill_cmds         -
+  // cq                a
+  // cohort atomics    a
+  // cmds              a
+  // keys              a
+  // meta              -
+}
+
+static
+void
+skc_raster_cohort_fills_expand_cb(cl_event event, cl_int status, skc_grid_t const grid)
+{
+  SKC_CL_CB(status);
+
+  struct skc_raster_cohort * const cohort = skc_grid_get_data(grid);
+
+  // as quickly as possible, enqueue next stage in pipeline to context command scheduler
+  SKC_SCHEDULER_SCHEDULE(cohort->impl->runtime->scheduler,skc_raster_cohort_rasterize,grid);
+}
+
+static
+void
+skc_raster_builder_cohort_grid_pfn_execute(skc_grid_t const grid)
+{
+  //
+  // ALLOCATED RESOURCES
+  //
+  // path_ids          i
+  // raster_ids        i
+  // transforms        i
+  // clips             i
+  // fill_cmds         i
+  // cq                -
+  // cohort atomics    -
+  // cmds              -
+  // keys              -
+  // meta              -
+  //
+
+  // allocate the cohort
+  struct skc_raster_cohort       * const cohort  = skc_grid_get_data(grid);
+
+  // get impl
+  struct skc_raster_builder_impl * const impl    = cohort->impl;
+  struct skc_runtime             * const runtime = impl->runtime;
+
+  // acquire in-order cq
+  cohort->cq = skc_runtime_acquire_cq_in_order(runtime);
+
+  // alloc the snapshot -- could be zero-sized
+  skc_extent_phw1g_tdrNs_snap_alloc(runtime,
+                                    &impl->fill_cmds,
+                                    &cohort->fill_cmds,
+                                    cohort->cq,NULL);
+
+  // flush the cq to get the fill running
+  // cl(Flush(cohort->cq));
+
+  // create split atomics
+  skc_extent_thr_tdrw_alloc(runtime,&cohort->atomics,sizeof(struct skc_raster_cohort_atomic));
+
+  // zero the atomics
+  skc_extent_thr_tdrw_zero(&cohort->atomics,cohort->cq,NULL);
+
+  // get config
+  struct skc_config const * const config = runtime->config;
+
+  // acquire device-side extents
+  skc_extent_tdrw_alloc(runtime,
+                        &cohort->cmds,
+                        sizeof(union skc_cmd_rasterize) * config->raster_cohort.expand.cmds);
+
+  //
+  // FILLS EXPAND
+  //
+  // need result of cmd counts before launching RASTERIZE grids
+  //
+  // - OpenCL 1.2: copy atomic counters back to host and launch RASTERIZE grids from host
+  // - OpenCL 2.x: have a kernel size and launch RASTERIZE grids from device
+  // - or launch a device-wide grid that feeds itself but that's unsatisfying
+  //
+
+  // how many commands?  could be zero
+  skc_uint const work_size = skc_extent_ring_snap_count(cohort->fill_cmds.snap);
+
+  if (work_size > 0)
+    {
+      cl(SetKernelArg(impl->kernels.fills_expand,0,SKC_CL_ARG(impl->runtime->block_pool.blocks.drw)));
+      cl(SetKernelArg(impl->kernels.fills_expand,1,SKC_CL_ARG(cohort->atomics.drw)));
+      cl(SetKernelArg(impl->kernels.fills_expand,2,SKC_CL_ARG(runtime->handle_pool.map.drw)));
+      cl(SetKernelArg(impl->kernels.fills_expand,3,SKC_CL_ARG(cohort->fill_cmds.drN)));
+      cl(SetKernelArg(impl->kernels.fills_expand,4,SKC_CL_ARG(cohort->cmds.drw)));
+
+      skc_device_enqueue_kernel(runtime->device,
+                                SKC_DEVICE_KERNEL_ID_FILLS_EXPAND,
+                                cohort->cq,
+                                impl->kernels.fills_expand,
+                                work_size,
+                                0,NULL,NULL);
+    }
+
+  //
+  // copyback number of rasterization commands
+  //
+  cl_event complete;
+
+  skc_extent_thr_tdrw_read(&cohort->atomics,cohort->cq,&complete);
+
+  cl(SetEventCallback(complete,CL_COMPLETE,skc_raster_cohort_fills_expand_cb,grid));
+  cl(ReleaseEvent(complete));
+
+  // flush command queue
+  cl(Flush(cohort->cq));
+
+  //
+  // ALLOCATED RESOURCES
+  //
+  // path_ids          i
+  // raster_ids        i
+  // transforms        i
+  // clips             i
+  // fill_cmds         s
+  // cq                a
+  // cohort atomics    a
+  // cmds              a
+  // keys              -
+  // meta              -
+  //
+}
+
+//
+// move grid into waiting state
+//
+// this entails allocating a cohort from the temporary extent
+//
+
+static
+void
+skc_raster_builder_cohort_grid_pfn_waiting(skc_grid_t const grid)
+{
+  // get the impl
+  struct skc_raster_builder_impl * const impl    = skc_grid_get_data(grid);
+  struct skc_runtime             * const runtime = impl->runtime;
+
+  // retain the raster builder
+  impl->raster_builder->refcount += 1;
+
+  // allocate the ephemeral/temp cohort
+  skc_subbuf_id_t id;
+
+  struct skc_raster_cohort * const cohort = 
+    skc_runtime_host_temp_alloc(runtime,
+                                SKC_MEM_FLAGS_READ_WRITE,
+                                sizeof(*cohort),
+                                &id,
+                                NULL);
+
+  // save the id and backpointer
+  cohort->id   = id;
+  cohort->impl = impl;
+
+  // set grid data -- replaces impl
+  skc_grid_set_data(grid,cohort);
+
+  //
+  // ACQUIRE RESOURCES FOR THE COHORT
+  //
+
+  struct skc_raster_builder * const raster_builder = impl->raster_builder;
+
+  // immediately take snapshots of all rings -- these are very inexpensive operations
+  skc_extent_phrwg_thr1s_snap_init(runtime,&raster_builder->path_ids  .ring,&cohort->path_ids);
+  skc_extent_phw1g_tdrNs_snap_init(runtime,&raster_builder->transforms.ring,&cohort->transforms);
+  skc_extent_phw1g_tdrNs_snap_init(runtime,&raster_builder->clips     .ring,&cohort->clips);
+  skc_extent_phw1g_tdrNs_snap_init(runtime,&raster_builder->fill_cmds .ring,&cohort->fill_cmds);
+  skc_extent_phrwg_tdrNs_snap_init(runtime,&raster_builder->raster_ids.ring,&cohort->raster_ids);
+
+  //
+  // ALLOCATED RESOURCES
+  //
+  // path_ids          i
+  // raster_ids        i
+  // transforms        i
+  // clips             i
+  // fill_cmds         i
+  // cq                -
+  // cohort atomics    -
+  // cmds              -
+  // keys              -
+  // meta              -
+  //
+}
+
+//
+//
+//
+
+static
+void
+skc_raster_builder_cohort_create(struct skc_raster_builder_impl * const impl)
+{
+  // attach a grid
+  impl->cohort = SKC_GRID_DEPS_ATTACH(impl->runtime->deps,
+                                      &impl->cohort,
+                                      impl,
+                                      skc_raster_builder_cohort_grid_pfn_waiting,
+                                      skc_raster_builder_cohort_grid_pfn_execute,
+                                      skc_raster_builder_cohort_grid_pfn_dispose);
+}
+
+//
+//
+//
+
+static
+skc_err
+skc_raster_builder_pfn_add(struct skc_raster_builder_impl * const impl, 
+                           skc_path_t               const *       paths,
+                           skc_uint                               count)
+{
+  // validate and retain the path
+  skc_err err;
+
+  err = skc_runtime_handle_device_validate_retain(impl->runtime,
+                                                  SKC_TYPED_HANDLE_TYPE_IS_PATH,
+                                                  paths,
+                                                  count);
+
+  if (err)
+    return err;
+
+  skc_runtime_handle_device_retain(impl->runtime,paths,count);
+
+  // make sure there is a grid
+  if (impl->cohort == NULL) {
+    skc_raster_builder_cohort_create(impl);
+  }
+
+  // declare rasterization grid happens after path
+  while (count-- > 0)
+    skc_grid_happens_after_handle(impl->cohort,SKC_TYPED_HANDLE_TO_HANDLE(*paths++));
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
+
+static
+void
+skc_raster_builder_pfn_end(struct skc_raster_builder_impl * const impl, skc_raster_t * const raster)
+{
+  //
+  // acquire host-managed path raster handle and bump reference count
+  // to 2 handles will be released (reduced to 1) once the rasters are
+  // completely rasterized
+  //
+  *raster = skc_runtime_handle_device_acquire(impl->runtime);
+
+  // make sure there is a grid
+  if (impl->cohort == NULL) {
+    skc_raster_builder_cohort_create(impl);
+  }
+
+  // map a handle to a grid
+  skc_grid_map(impl->cohort,*raster);
+}
+
+//
+// snapshot the ring and lazily start the grid
+//
+// FIXME -- might want to revisit this and settle on an even more
+// opaque implementation.  Some options:
+//
+//  - never let the SKC API expose a forced grid start
+//  - make snapshots kick off a forced grid start
+//  - be lazy all the time everywhere
+//
+
+static
+void
+skc_raster_builder_pfn_start(struct skc_raster_builder_impl * const impl)
+{
+  skc_grid_t const cohort = impl->cohort;
+
+  if (cohort != NULL) {
+    skc_grid_start(cohort);
+  }
+}
+
+//
+// NOTE: THIS MIGHT BE REMOVED
+//
+
+static
+void
+skc_raster_builder_pfn_force(struct skc_raster_builder_impl * const impl)
+{
+  skc_grid_t const cohort = impl->cohort;
+
+  if (cohort != NULL) {
+    skc_grid_force(cohort);
+  }
+}
+
+//
+//
+//
+
+skc_err
+skc_raster_builder_cl_12_create(struct skc_context          * const context,
+                                struct skc_raster_builder * * const raster_builder)
+{
+  struct skc_runtime * const runtime = context->runtime;
+
+  // allocate raster builder
+  (*raster_builder) = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,sizeof(**raster_builder));
+
+  // refcount
+  (*raster_builder)->refcount = 1;
+
+  // state
+  SKC_ASSERT_STATE_INIT((*raster_builder),SKC_RASTER_BUILDER_STATE_READY);
+
+  // allocate runtime raster builder
+  struct skc_raster_builder_impl * const impl = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,sizeof(*impl));
+
+  // save the impl
+  (*raster_builder)->impl = impl;
+
+  // intialize impl
+  impl->raster_builder = (*raster_builder);
+  impl->runtime        = runtime;
+  impl->cohort         = NULL;
+
+  // get config
+  struct skc_config const * const config = runtime->config;
+
+  skc_extent_phrwg_thr1s_alloc(runtime,&impl->path_ids  ,sizeof(skc_path_t         ) * config->raster_cohort.path_ids  .elem_count);
+  skc_extent_phw1g_tdrNs_alloc(runtime,&impl->transforms,sizeof(union skc_transform) * config->raster_cohort.transforms.elem_count);
+  skc_extent_phw1g_tdrNs_alloc(runtime,&impl->clips     ,sizeof(union skc_path_clip) * config->raster_cohort.clips     .elem_count);
+  skc_extent_phw1g_tdrNs_alloc(runtime,&impl->fill_cmds ,sizeof(union skc_cmd_fill ) * config->raster_cohort.fill      .elem_count);
+  skc_extent_phrwg_tdrNs_alloc(runtime,&impl->raster_ids,sizeof(skc_raster_t       ) * config->raster_cohort.raster_ids.elem_count);
+
+  // retain the context
+  //skc_context_retain(context);
+
+  (*raster_builder)->context = context;
+
+  (*raster_builder)->add     = skc_raster_builder_pfn_add;
+  (*raster_builder)->end     = skc_raster_builder_pfn_end;
+  (*raster_builder)->start   = skc_raster_builder_pfn_start;
+  (*raster_builder)->force   = skc_raster_builder_pfn_force;
+  (*raster_builder)->release = skc_raster_builder_pfn_release;
+
+  // initialize raster builder with host-writable buffers
+  (*raster_builder)->path_ids  .extent = impl->path_ids.hrw;
+  (*raster_builder)->transforms.extent = impl->transforms.hw1;
+  (*raster_builder)->clips     .extent = impl->clips.hw1;
+  (*raster_builder)->fill_cmds .extent = impl->fill_cmds.hw1;
+  (*raster_builder)->raster_ids.extent = impl->raster_ids.hrw;
+
+  //
+  // the rings perform bookkeeping on the extents
+  //
+  // the ring snapshotting and checkpointing are necessary because
+  // another part of the API can _force_ the raster cohort to flush
+  // its work-in-progress commands but only up to a checkpointed
+  // boundary
+  //
+  skc_extent_ring_init(&(*raster_builder)->path_ids.ring,
+                       config->raster_cohort.path_ids.elem_count,
+                       config->raster_cohort.path_ids.snap_count,
+                       sizeof(skc_path_t));
+
+  skc_extent_ring_init(&(*raster_builder)->transforms.ring,
+                       config->raster_cohort.transforms.elem_count,
+                       config->raster_cohort.transforms.snap_count,
+                       sizeof(union skc_transform));
+
+  skc_extent_ring_init(&(*raster_builder)->clips.ring,
+                       config->raster_cohort.clips.elem_count,
+                       config->raster_cohort.clips.snap_count,
+                       sizeof(union skc_path_clip));
+
+  skc_extent_ring_init(&(*raster_builder)->fill_cmds.ring,
+                       config->raster_cohort.fill.elem_count,
+                       config->raster_cohort.fill.snap_count,
+                       sizeof(union skc_cmd_fill));
+
+  skc_extent_ring_init(&(*raster_builder)->raster_ids.ring,
+                       config->raster_cohort.raster_ids.elem_count,
+                       config->raster_cohort.raster_ids.snap_count,
+                       sizeof(skc_raster_t));
+
+  //
+  // acquire kernels
+  //
+  impl->kernels.fills_expand     = skc_device_acquire_kernel(runtime->device, SKC_DEVICE_KERNEL_ID_FILLS_EXPAND);
+  impl->kernels.rasterize_all    = skc_device_acquire_kernel(runtime->device, SKC_DEVICE_KERNEL_ID_RASTERIZE_ALL);  
+
+#if 0
+  impl->kernels.rasterize_lines  = skc_device_acquire_kernel(runtime->device, SKC_DEVICE_KERNEL_ID_RASTERIZE_LINES);
+  impl->kernels.rasterize_quads  = skc_device_acquire_kernel(runtime->device, SKC_DEVICE_KERNEL_ID_RASTERIZE_QUADS);
+  impl->kernels.rasterize_cubics = skc_device_acquire_kernel(runtime->device, SKC_DEVICE_KERNEL_ID_RASTERIZE_CUBICS);
+#endif
+
+  impl->kernels.segment          = skc_device_acquire_kernel(runtime->device, SKC_DEVICE_KERNEL_ID_SEGMENT_TTRK);
+  impl->kernels.rasters_alloc    = skc_device_acquire_kernel(runtime->device, SKC_DEVICE_KERNEL_ID_RASTERS_ALLOC);
+  impl->kernels.prefix           = skc_device_acquire_kernel(runtime->device, SKC_DEVICE_KERNEL_ID_PREFIX);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
diff --git a/src/compute/skc/raster_builder_cl_12.h b/src/compute/skc/raster_builder_cl_12.h
new file mode 100644
index 0000000..f6e1751
--- /dev/null
+++ b/src/compute/skc/raster_builder_cl_12.h
@@ -0,0 +1,165 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_RASTER_BUILDER_CL_12_ONCE
+#define SKC_RASTER_BUILDER_CL_12_ONCE
+
+//
+//
+//
+
+#include "types.h"
+#include "macros.h"
+#include "common.h"
+
+//
+// FIXME -- these magic numbers will be replaced with tile.h constants
+// although they're probably universal across all devices
+//
+// FIXME -- NEED TO EVALUATE IF THIS DISTRIBUTION OF BITS IS GOING TO
+// BE TOO SMALL -- plenty of room to jiggle these bits
+//
+
+#define SKC_CMD_RASTERIZE_BITS_TRANSFORM  12
+#define SKC_CMD_RASTERIZE_BITS_CLIP       12
+#define SKC_CMD_RASTERIZE_BITS_COHORT      8
+
+SKC_STATIC_ASSERT(SKC_CMD_RASTERIZE_BITS_TRANSFORM == SKC_CMD_FILL_BITS_TRANSFORM);
+SKC_STATIC_ASSERT(SKC_CMD_RASTERIZE_BITS_CLIP      == SKC_CMD_FILL_BITS_CLIP);
+SKC_STATIC_ASSERT(SKC_CMD_RASTERIZE_BITS_COHORT    == SKC_CMD_FILL_BITS_COHORT);
+
+//
+// device-side rasterization cmd
+//
+
+union skc_cmd_rasterize
+{
+  skc_ulong    u64;
+
+  skc_uint2    u32v2;
+
+  struct {
+    //
+    // Unlike anywhere else in the pipeline, the nodeword index points
+    // "inside" of a path node (with word resolution). This means
+    // there is up to 16 GB of 32-bit word addressing in a unified
+    // block pool:
+    //
+    // "16GB ought to be enough for anyone" -- ASM 5/30/17
+    //
+    skc_uint   nodeword;
+#if defined(__OPENCL_C_VERSION__)
+    skc_uint   tcc;
+#else
+    skc_uint   transform : SKC_CMD_RASTERIZE_BITS_TRANSFORM;
+    skc_uint   clip      : SKC_CMD_RASTERIZE_BITS_CLIP;
+    skc_uint   cohort    : SKC_CMD_RASTERIZE_BITS_COHORT;
+#endif
+  };
+};
+
+SKC_STATIC_ASSERT(sizeof(union skc_cmd_rasterize) == sizeof(skc_uint2));
+
+//
+//
+//
+
+#define SKC_CMD_RASTERIZE_HI_OFFSET_COHORT  (SKC_CMD_RASTERIZE_BITS_TRANSFORM + SKC_CMD_RASTERIZE_BITS_CLIP)
+#define SKC_CMD_RASTERIZE_MASK_COHORT(c)    ((c).u32v2.hi & SKC_BITS_TO_MASK_AT(SKC_CMD_RASTERIZE_BITS_COHORT,SKC_CMD_RASTERIZE_HI_OFFSET_COHORT))
+
+#define SKC_CMD_RASTERIZE_GET_TRANSFORM(c)  ((c).u32v2.hi & SKC_BITS_TO_MASK(SKC_CMD_RASTERIZE_BITS_TRANSFORM))
+#define SKC_CMD_RASTERIZE_GET_CLIP(c)       SKC_BFE((c).tcc,SKC_CMD_RASTERIZE_BITS_CLIP,SKC_CMD_RASTERIZE_BITS_TRANSFORM)
+#define SKC_CMD_RASTERIZE_GET_COHORT(c)     ((c).u32v2.hi >> SKC_CMD_RASTERIZE_HI_OFFSET_COHORT)
+// SKC_BFE((c).tcc,SKC_CMD_RASTERIZE_BITS_COHORT,SKC_CMD_RASTERIZE_HI_OFFSET_COHORT)
+
+//
+//
+//
+
+#define SKC_TTSK_SIZE_COHORT                (1 << SKC_CMD_RASTERIZE_BITS_COHORT)
+
+//
+// COHORT META DATA
+//
+
+union skc_raster_cohort_meta_in
+{
+  skc_uint4  u32v4;
+
+  struct {
+    skc_uint blocks; // # of rk blocks
+    skc_uint offset; // start of rk span
+    skc_uint pk;     // # of pk keys
+    skc_uint rk;     // # of rk keys
+  };
+};
+
+union skc_raster_cohort_meta_out
+{
+  skc_uint4  u32v4;
+
+  struct {
+    skc_uint blocks; // # of blocks in raster -- initially just rk blocks
+    skc_uint offset; // start of rk span
+    skc_uint nodes;  // # of nodes in raster  -- necessary for walking
+    skc_uint keys;   // # of rk & pk keys     -- initially just rk
+  };
+};
+
+union skc_raster_cohort_meta_inout
+{
+  union skc_raster_cohort_meta_in  in;
+  union skc_raster_cohort_meta_out out;
+};
+
+//
+// followed by one word for the offset
+//
+
+struct skc_raster_cohort_meta
+{
+  union skc_raster_cohort_meta_inout inout[SKC_TTSK_SIZE_COHORT];
+  skc_uint                           reads[SKC_TTSK_SIZE_COHORT]; // starting ring reads  -- [0] is raster head
+};
+
+#define SKC_RASTER_COHORT_META_OFFSET_READS (SKC_OFFSET_OF(struct skc_raster_cohort_meta,reads) / sizeof(skc_uint))
+
+//
+// COHORT ATOMICS
+//
+
+struct skc_raster_cohort_atomic
+{
+  // rasterization input
+  skc_uint cmds;
+
+  // rasterization output
+  skc_uint keys;
+
+  // block pool base -- idea here is to perform one atomic allocation
+  // skc_uint bp_base;
+};
+
+#define SKC_RASTER_COHORT_ATOMIC_OFFSET_CMDS      0
+#define SKC_RASTER_COHORT_ATOMIC_OFFSET_KEYS      1
+
+#define SKC_RASTER_COHORT_ATOMIC_OFFSET_CMDS_CALC (SKC_OFFSET_OF(struct skc_raster_cohort_atomic,cmds) / sizeof(skc_uint))
+#define SKC_RASTER_COHORT_ATOMIC_OFFSET_KEYS_CALC (SKC_OFFSET_OF(struct skc_raster_cohort_atomic,keys) / sizeof(skc_uint))
+
+SKC_STATIC_ASSERT(SKC_RASTER_COHORT_ATOMIC_OFFSET_CMDS == SKC_RASTER_COHORT_ATOMIC_OFFSET_CMDS_CALC); // verify
+SKC_STATIC_ASSERT(SKC_RASTER_COHORT_ATOMIC_OFFSET_KEYS == SKC_RASTER_COHORT_ATOMIC_OFFSET_KEYS_CALC); // verify
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/rasterize.cl b/src/compute/skc/rasterize.cl
new file mode 100644
index 0000000..c9462ec
--- /dev/null
+++ b/src/compute/skc/rasterize.cl
@@ -0,0 +1,3367 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include "device_cl_12_gen9.h"
+#include "raster_builder_cl_12.h"
+#include "block_pool_cl.h"
+
+#include "atomic_cl.h"
+#include "common.h"
+#include "tile.h"
+
+// #define SKC_ARCH_AVX2
+// #define SKC_RASTERIZE_SIMD_USES_SMEM
+
+#define PRINTF_ENABLE       0
+#define PRINTF_BLOCK_COUNT  0
+
+//
+// NOTE:
+//
+// ON SIMD DEVICES THE BIN COUNT MUST BE POW2 SO THAT WE CAN LOAD IT
+// AS A VECTOR AND PERFORM A SWIZZLE/SHUFFLE
+//
+// NOTE:
+//
+// IGNORE FOR NOW ANY AVX2 CODE SNIPPETS.  THEY WILL BE MOVED ASAP.
+//
+//
+
+#if 0 // SKC_ARCH_AVX2
+
+// #define SKC_RASTERIZE_SUBGROUP_SIZE              1
+// #define SKC_RASTERIZE_VECTOR_SIZE_LOG2           3
+// #define SKC_RASTERIZE_WORKGROUP_COUNT_SUBGROUP   1
+
+// #define SKC_TTXB_WORDS                           8
+
+// #define SKC_RASTERIZE_FLOAT                      float8
+// #define SKC_RASTERIZE_UINT                       uint8
+// #define SKC_RASTERIZE_INT                        int8
+// #define SKC_RASTERIZE_PREDICATE                  int8
+
+// #define SKC_RASTERIZE_BIN_BLOCK                  uint16
+// #define SKC_RASTERIZE_BIN                        uint8
+
+// #define SKC_RASTERIZE_POOL                       uint8
+// #define SKC_RASTERIZE_POOL_SCALE                 6
+
+// #define SKC_RASTERIZE_TILE_HASH_X_BITS           1
+// #define SKC_RASTERIZE_TILE_HASH_Y_BITS           2
+
+// #define SKC_RASTERIZE_VECTOR_EXPAND()            SKC_EXPAND_8()
+
+#endif
+
+//
+// SIMT
+//
+
+#define SKC_RASTERIZE_BLOCK_ID_V_SIZE        SKC_RASTERIZE_SUBGROUP_SIZE
+#define SKC_RASTERIZE_TTSK_V_SIZE            SKC_RASTERIZE_SUBGROUP_SIZE
+#define SKC_RASTERIZE_TTSK_V_MASK            (SKC_RASTERIZE_TTSK_V_SIZE - 1)
+
+//
+//
+//
+
+#define SKC_RASTERIZE_VECTOR_SIZE            (1 << SKC_RASTERIZE_VECTOR_SIZE_LOG2)
+#define SKC_RASTERIZE_ELEMS_PER_SUBGROUP     (SKC_RASTERIZE_SUBGROUP_SIZE * SKC_RASTERIZE_VECTOR_SIZE)
+
+//
+//
+//
+
+#define SKC_RASTERIZE_YX_INIT                0x7FFF7FFF  // { +32767, +32767 }
+#define SKC_RASTERIZE_YX_INVALID             0x80008000  // { -32768, -32768 }
+
+//
+//
+//
+
+#define SKC_RASTERIZE_TILE_HASH_X_MASK       SKC_BITS_TO_MASK(SKC_RASTERIZE_TILE_HASH_X_BITS)
+#define SKC_RASTERIZE_TILE_HASH_Y_MASK       SKC_BITS_TO_MASK(SKC_RASTERIZE_TILE_HASH_Y_BITS)
+#define SKC_RASTERIZE_TILE_HASH_BITS         (SKC_RASTERIZE_TILE_HASH_X_BITS + SKC_RASTERIZE_TILE_HASH_Y_BITS)
+#define SKC_RASTERIZE_TILE_HASH_BIN_COUNT    (1 << SKC_RASTERIZE_TILE_HASH_BITS)
+#define SKC_RASTERIZE_TILE_HASH_BIN_BITS     (SKC_RASTERIZE_TILE_HASH_BITS + 1) // FIXME -- LOG2_RU(BIN_COUNT)
+#define SKC_RASTERIZE_TILE_HASH_BIN_MASK     SKC_BITS_TO_MASK(SKC_RASTERIZE_TILE_HASH_BIN_BITS)
+
+//
+// Norbert Juffa notes: "GPU Pro Tip: Lerp Faster in C++"
+//
+// https://devblogs.nvidia.com/parallelforall/lerp-faster-cuda/
+//
+// Lerp in two fma/mad ops:
+//
+//    t * b + ((-t) * a + a)
+//
+// Note: OpenCL documents mix() as being implemented as:
+//
+//    a + (b - a) * t
+//
+// But this may be a native instruction on some devices. For example,
+// on GEN9 there is an LRP "linear interoplation" opcode but it
+// doesn't appear to support half floats.
+//
+// Feel free to toggle this option and then benchmark and inspect the
+// generated code.  We really want the double FMA to be generated when
+// there isn't support for a LERP/MIX operation.
+//
+
+#if 1
+#define SKC_LERP(a,b,t)      mad(t,b,mad(-(t),a,a))
+#else
+#define SKC_LERP(a,b,t)      mix(a,b,t)
+#endif
+
+//
+// There is no integer MAD in OpenCL with "don't care" overflow
+// semantics.
+//
+// FIXME -- verify if the platform needs explicit MAD operations even
+// if a "--fastmath" option is available at compile time.  It might
+// make sense to explicitly use MAD calls if the platform requires it.
+//
+
+#if 1
+#define SKC_MAD_UINT(a,b,c)  ((a) * (b) + (c))
+#else
+#define SKC_MAD_UINT(a,b,c)  mad_sat(a,b,c)
+#endif
+
+//
+//
+//
+
+#define SKC_RASTERIZE_SEGMENT(id) (id * SKC_DEVICE_SUBBLOCK_WORDS + skc_subgroup_lane())
+
+//
+//
+//
+
+union skc_bp_elem
+{
+  skc_uint              u32;
+  skc_tagged_block_id_t tag_id;
+  skc_float             coord;
+};
+
+//
+//
+//
+
+struct skc_subgroup_smem
+{
+  //
+  // SIMT subgroup scratchpad for max scan -- also shared with 'winner' member
+  //
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE > 1 ) || defined ( SKC_RASTERIZE_SIMD_USES_SMEM )
+  struct {
+    union {
+
+      skc_uint                winner;
+
+      struct {
+        skc_uint              scratch[SKC_RASTERIZE_SUBGROUP_SIZE];
+      } aN;
+
+      struct {
+        SKC_RASTERIZE_UINT    scratch[SKC_RASTERIZE_SUBGROUP_SIZE];
+      } vN;
+    };
+  } subgroup;
+#endif
+
+  //
+  // work-in-progress TTSB blocks and associated YX keys
+  //
+  union {
+    struct {
+      // FIXME -- some typedefs are valid here
+      skc_uint                ttsb [SKC_RASTERIZE_TILE_HASH_BIN_COUNT][SKC_DEVICE_SUBBLOCK_WORDS];
+      skc_uint                yx   [SKC_RASTERIZE_TILE_HASH_BIN_COUNT];
+      skc_uint                id   [SKC_RASTERIZE_TILE_HASH_BIN_COUNT];
+      skc_uint                count[SKC_RASTERIZE_TILE_HASH_BIN_COUNT];
+    } aN;
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+    struct {
+      SKC_RASTERIZE_BIN_BLOCK ttsb[SKC_RASTERIZE_TILE_HASH_BIN_COUNT];
+      SKC_RASTERIZE_BIN       yx;
+      SKC_RASTERIZE_BIN       id;
+      SKC_RASTERIZE_BIN       count;
+    } vN;
+#endif
+  } bin;
+};
+
+//
+//
+//
+
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+#define skc_subgroup_lane()  0
+#else
+#define skc_subgroup_lane()  get_sub_group_local_id()
+#endif
+
+//
+// replenish block ids
+//
+// note that you can't overrun the block id pool since it's a ring
+//
+
+static
+void
+skc_blocks_replenish(skc_uint                           * const blocks_next,
+                     skc_block_id_v_t                   * const blocks,
+                     __global SKC_ATOMIC_UINT  volatile * const bp_atomics,
+                     skc_uint                             const bp_mask, // pow2 modulo mask for block pool ring
+                     __global skc_block_id_t   const    * const bp_ids)
+{
+  //
+  // get a new vector of block ids -- this is kind of a narrow
+  // allocation but subblocks help stretch out the pool.
+  //
+  // FIXME -- there is now plenty of SMEM to allocate a LOT of block ids
+  //
+  skc_uint bp_idx = 0;
+
+  if (skc_subgroup_lane() == 0)
+    {
+      bp_idx = SKC_ATOMIC_ADD_GLOBAL_RELAXED_DEVICE(bp_atomics+SKC_BP_ATOMIC_OFFSET_READS,
+                                                    SKC_RASTERIZE_BLOCK_ID_V_SIZE); // ring_reads
+#if 0
+      printf("r+: %8u + %u\n",bp_idx,SKC_RASTERIZE_BLOCK_ID_V_SIZE);
+#endif
+    }
+
+  bp_idx       = (sub_group_broadcast(bp_idx,0) + skc_subgroup_lane()) & bp_mask;
+  *blocks      = bp_ids[bp_idx];
+  *blocks_next = 0;
+}
+
+//
+//
+//
+
+static
+skc_block_id_t
+skc_blocks_get_next(skc_uint                           * const blocks_next,
+                    skc_block_id_v_t                   * const blocks,
+                    __global SKC_ATOMIC_UINT  volatile * const bp_atomics,
+                    skc_uint                             const bp_mask, // pow2 modulo mask for block pool ring
+                    __global skc_block_id_t   const    * const bp_ids)
+{
+  // replenish?
+  if (*blocks_next == SKC_RASTERIZE_BLOCK_ID_V_SIZE)
+    {
+      skc_blocks_replenish(blocks_next,blocks,bp_atomics,bp_mask,bp_ids);
+    }
+
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE > 1 )
+  //
+  // SIMT
+  //
+  skc_block_id_t id = sub_group_broadcast(*blocks,*blocks_next);
+
+#else
+  //
+  // SIMD
+  //
+  skc_block_id_t id = blocks->s0;
+
+  skc_shuffle_down_1(*blocks);
+
+#endif
+
+  *blocks_next += 1;
+
+  return id;
+}
+
+//
+// subblock allocator
+//
+
+#if SKC_DEVICE_BLOCK_WORDS_LOG2 > SKC_DEVICE_SUBBLOCK_WORDS_LOG2
+
+static
+skc_block_id_t
+skc_subblocks_get_next(skc_block_id_t                     * const subblocks,
+                       skc_uint                           * const blocks_next,
+                       skc_block_id_v_t                   * const blocks,
+                       __global SKC_ATOMIC_UINT  volatile * const bp_atomics,
+                       skc_uint                             const bp_mask, // pow2 modulo mask for block pool ring
+                       __global skc_block_id_t   const    * const bp_ids)
+{
+  if ((*subblocks & SKC_DEVICE_SUBBLOCKS_PER_BLOCK_MASK) == 0)
+    {
+      *subblocks = skc_blocks_get_next(blocks_next,blocks,bp_atomics,bp_mask,bp_ids);
+    }
+
+  skc_block_id_t const sb_id = *subblocks;
+
+  *subblocks += 1;
+
+#if 0
+  if (get_sub_group_local_id() == 0)
+    printf("= %u\n",sb_id);
+#endif
+
+  return sb_id;
+}
+
+
+#define SKC_SUBBLOCKS_BLOCKS_PROTO() skc_block_id_t * const subblocks, skc_block_id_t * const blocks
+#define SKC_SUBBLOCKS_BLOCKS_ARGS()  subblocks, blocks
+
+#else
+
+#define SKC_SUBBLOCKS_BLOCKS_PROTO() skc_block_id_t * const blocks
+#define SKC_SUBBLOCKS_BLOCKS_ARGS()  blocks
+
+#endif
+
+//
+//
+//
+
+static
+skc_block_id_t
+skc_ttsk_v_append(SKC_SUBBLOCKS_BLOCKS_PROTO(),
+                  skc_uint                           * const blocks_next,
+                  __global SKC_ATOMIC_UINT  volatile * const bp_atomics,
+                  skc_uint                             const bp_mask, // pow2 modulo mask for block pool ring
+                  __global skc_block_id_t   const    * const bp_ids,
+                  __global SKC_ATOMIC_UINT  volatile * const cohort_atomics,
+                  skc_ttsk_v_t                       * const sk_v,
+                  skc_uint                           * const sk_v_next,
+                  __global skc_ttsk_s_t              * const sk_extent,
+                  skc_uint                             const new_yx)
+{
+#if SKC_DEVICE_BLOCK_WORDS_LOG2 > SKC_DEVICE_SUBBLOCK_WORDS_LOG2
+  skc_block_id_t const new_id = skc_subblocks_get_next(subblocks,
+                                                       blocks_next,
+                                                       blocks,
+                                                       bp_atomics,
+                                                       bp_mask,
+                                                       bp_ids);
+#else
+  skc_block_id_t const new_id = skc_blocks_get_next(blocks_next,
+                                                    blocks,
+                                                    bp_atomics,
+                                                    bp_mask, // pow2 modulo mask for block pool ring
+                                                    bp_ids);
+#endif
+
+  if (get_sub_group_local_id() == (*sk_v_next & SKC_RASTERIZE_TTSK_V_MASK))
+    {
+      sk_v->lo = new_id;
+      sk_v->hi = (sk_v->hi & SKC_TTRK_HI_MASK_COHORT) | new_yx;
+#if 0
+      printf("@ ( %3u, %3u ) %u\n",
+             (new_yx >> 12) & 0xFFF,
+             (new_yx      ) & 0xFFF,
+             new_id);
+#endif
+    }
+
+  *sk_v_next += 1;
+
+  if (*sk_v_next == SKC_RASTERIZE_TTSK_V_SIZE)
+    {
+      *sk_v_next = 0;
+
+      skc_uint sk_idx = 0;
+
+      if (skc_subgroup_lane() == 0)
+        {
+          sk_idx = SKC_ATOMIC_ADD_GLOBAL_RELAXED_DEVICE
+            (cohort_atomics+SKC_RASTER_COHORT_ATOMIC_OFFSET_KEYS,SKC_RASTERIZE_TTSK_V_SIZE);
+#if 0
+          printf("+ %u\n",sk_idx);
+#endif
+        }
+
+      sk_idx = sub_group_broadcast(sk_idx,0) + skc_subgroup_lane();
+
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE > SKC_RASTERIZE_TTSK_V_SIZE )
+      if (skc_subgroup_lane() < SKC_RASTERIZE_TTSK_V_SIZE)
+#endif
+        {
+          sk_extent[sk_idx] = *sk_v;
+#if 0
+          printf("> %u : %v2u\n",sk_idx,*sk_v);
+#endif
+        }
+    }
+
+  return new_id;
+}
+
+//
+//
+//
+
+static
+SKC_RASTERIZE_FLOAT
+skc_subgroup_scan_inclusive_add_float(SKC_RASTERIZE_FLOAT const v)
+{
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+  //
+  // SIMD
+  //
+  // Note that there isn't a built-in horizontal scan for vectors so
+  // we'll define some here for various widths.
+  //
+  // FIXME -- a scalar version might be faster so put in a
+  // compile-time switch to selection between implementations
+  //
+
+#if   ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 0 )
+  return v;
+
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 1 )
+  // 01
+  //  0 +
+  // --
+  // 01
+  SKC_RASTERIZE_FLOAT const w = mad(v.s10,(SKC_RASTERIZE_FLOAT)(0,1),v);
+  return w;
+
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 2 )
+  // 0123
+  //  012 +
+  // ----
+  // 0123
+  //   01 +
+  // ----
+  // 0123
+  //
+  SKC_RASTERIZE_FLOAT const w = mad(v.s3012,(SKC_RASTERIZE_FLOAT)(0,1,1,1),v);
+  SKC_RASTERIZE_FLOAT const x = mad(w.s2301,(SKC_RASTERIZE_FLOAT)(0,0,1,1),w);
+  return x;
+
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 3 )
+  // 01234567
+  //  0123456 +
+  // --------
+  // 01234567
+  //   012345 +
+  // --------
+  // 01234567
+  //     0123 +
+  // --------
+  // 01234567
+  //
+  SKC_RASTERIZE_FLOAT const w = mad(v.s70123456,(SKC_RASTERIZE_FLOAT)(0,1,1,1,1,1,1,1),v);
+  SKC_RASTERIZE_FLOAT const x = mad(w.s67012345,(SKC_RASTERIZE_FLOAT)(0,0,1,1,1,1,1,1),w);
+  SKC_RASTERIZE_FLOAT const y = mad(x.s45670123,(SKC_RASTERIZE_FLOAT)(0,0,0,0,1,1,1,1),x);
+  return y;
+
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 4 )
+  // 0123456789abcdef
+  //  0123456789abcde +
+  // ----------------
+  // 0123456789abcdef
+  //   0123456789abcd +
+  // ----------------
+  // 0123456789abcdef
+  //     0123456789ab +
+  // ----------------
+  // 0123456789abcdef
+  //         01234567 +
+  // ----------------
+  // 0123456789abcdef
+  //
+  SKC_RASTERIZE_FLOAT const w = mad(v.sf0123456789abcde,(SKC_RASTERIZE_FLOAT)(0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),v);
+  SKC_RASTERIZE_FLOAT const x = mad(w.sef0123456789abcd,(SKC_RASTERIZE_FLOAT)(0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1),w);
+  SKC_RASTERIZE_FLOAT const y = mad(x.scdef0123456789ab,(SKC_RASTERIZE_FLOAT)(0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1),x);
+  SKC_RASTERIZE_FLOAT const z = mad(y.s89abcdef01234567,(SKC_RASTERIZE_FLOAT)(0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1),y);
+  return z;
+
+#endif
+
+#else
+  //
+  // SIMT
+  //
+
+  return sub_group_scan_inclusive_add(v);
+
+#endif
+}
+
+//
+//
+//
+
+static
+SKC_RASTERIZE_UINT
+skc_subgroup_scan_inclusive_add_uint(SKC_RASTERIZE_UINT const v)
+{
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+  //
+  // SIMD
+  //
+  // Note that there isn't a built-in horizontal scan for vectors so
+  // we'll define some here for various widths.
+  //
+  // FIXME -- a scalar version might be faster so put in a
+  // compile-time switch to selection between implementations
+  //
+
+#if   ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 0 )
+  return v;
+
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 1 )
+  // 01
+  //  0 +
+  // --
+  // 01
+  SKC_RASTERIZE_UINT const w = SKC_MAD_UINT(v.s10,(SKC_RASTERIZE_UINT)(0,1),v);
+  return w;
+
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 2 )
+  // 0123
+  //  012 +
+  // ----
+  // 0123
+  //   01 +
+  // ----
+  // 0123
+  //
+  SKC_RASTERIZE_UINT const w = SKC_MAD_UINT(v.s3012,(SKC_RASTERIZE_UINT)(0,1,1,1),v);
+  SKC_RASTERIZE_UINT const x = SKC_MAD_UINT(w.s2301,(SKC_RASTERIZE_UINT)(0,0,1,1),w);
+  return x;
+
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 3 )
+  // 01234567
+  //  0123456 +
+  // --------
+  // 01234567
+  //   012345 +
+  // --------
+  // 01234567
+  //     0123 +
+  // --------
+  // 01234567
+  //
+  SKC_RASTERIZE_UINT const w = SKC_MAD_UINT(v.s70123456,(SKC_RASTERIZE_UINT)(0,1,1,1,1,1,1,1),v);
+  SKC_RASTERIZE_UINT const x = SKC_MAD_UINT(w.s67012345,(SKC_RASTERIZE_UINT)(0,0,1,1,1,1,1,1),w);
+  SKC_RASTERIZE_UINT const y = SKC_MAD_UINT(x.s45670123,(SKC_RASTERIZE_UINT)(0,0,0,0,1,1,1,1),x);
+  return y;
+
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 4 )
+  // 0123456789abcdef
+  //  0123456789abcde +
+  // ----------------
+  // 0123456789abcdef
+  //   0123456789abcd +
+  // ----------------
+  // 0123456789abcdef
+  //     0123456789ab +
+  // ----------------
+  // 0123456789abcdef
+  //         01234567 +
+  // ----------------
+  // 0123456789abcdef
+  //
+  SKC_RASTERIZE_UINT const w = SKC_MAD_UINT(v.sf0123456789abcde,(SKC_RASTERIZE_UINT)(0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),v);
+  SKC_RASTERIZE_UINT const x = SKC_MAD_UINT(w.sef0123456789abcd,(SKC_RASTERIZE_UINT)(0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1),w);
+  SKC_RASTERIZE_UINT const y = SKC_MAD_UINT(x.scdef0123456789ab,(SKC_RASTERIZE_UINT)(0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1),x);
+  SKC_RASTERIZE_UINT const z = SKC_MAD_UINT(y.s89abcdef01234567,(SKC_RASTERIZE_UINT)(0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1),y);
+  return z;
+
+#endif
+
+#else
+  //
+  // SIMT
+  //
+
+  return sub_group_scan_inclusive_add(v);
+
+#endif
+}
+
+//
+//
+//
+
+static
+SKC_RASTERIZE_UINT
+skc_subgroup_scan_inclusive_max(SKC_RASTERIZE_UINT const v)
+{
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+  //
+  // SIMD
+  //
+  // Note that there isn't a built-in horizontal scan for vectors so
+  // we'll define some here for various widths.
+  //
+  // FIXME -- a scalar version might be faster so put in a
+  // compile-time switch to selection between implementations
+  //
+
+#if   ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 0 )
+  return v;
+
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 1 )
+  // 01
+  // 00 max
+  // --
+  // 01
+  SKC_RASTERIZE_UINT const w = max(v.s00,v);
+  return w;
+
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 2 )
+  // 0123
+  // 0012 +
+  // ----
+  // 0123
+  // 0101 +
+  // ----
+  // 0123
+  //
+  SKC_RASTERIZE_UINT const w = max(v.s0012,v);
+  SKC_RASTERIZE_UINT const x = max(w.s0101,w);
+  return x;
+
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 3 )
+  // 01234567
+  // 00123456 +
+  // --------
+  // 01234567
+  // 01012345 +
+  // --------
+  // 01234567
+  // 01230123 +
+  // --------
+  // 01234567
+  //
+  SKC_RASTERIZE_UINT const w = max(v.s00123456,v);
+  SKC_RASTERIZE_UINT const x = max(w.s01012345,w);
+  SKC_RASTERIZE_UINT const y = max(x.s01230123,x);
+  return y;
+
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 4 )
+  // 0123456789abcdef
+  // 00123456789abcde +
+  // ----------------
+  // 0123456789abcdef
+  // 010123456789abcd +
+  // ----------------
+  // 0123456789abcdef
+  // 01230123456789ab +
+  // ----------------
+  // 0123456789abcdef
+  // 0123456701234567 +
+  // ----------------
+  // 0123456789abcdef
+  //
+  SKC_RASTERIZE_UINT const w = max(v.s00123456789abcde,v);
+  SKC_RASTERIZE_UINT const x = max(w.s010123456789abcd,w);
+  SKC_RASTERIZE_UINT const y = max(x.s01230123456789ab,x);
+  SKC_RASTERIZE_UINT const z = max(y.s0123456701234567,y);
+  return z;
+
+#endif
+
+#else
+  //
+  // SIMT
+  //
+
+  return sub_group_scan_inclusive_max(v);
+
+#endif
+}
+
+//
+//
+//
+
+static
+float
+skc_subgroup_last_float(SKC_RASTERIZE_FLOAT const v)
+{
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+  //
+  // SIMD
+  //
+#if   ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 0 )
+  return v;
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 1 )
+  return v.s1;
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 2 )
+  return v.s3;
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 3 )
+  return v.s7;
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 4 )
+  return v.sf;
+#endif
+
+#else
+  //
+  // SIMT
+  //
+  return sub_group_broadcast(v,SKC_RASTERIZE_SUBGROUP_SIZE-1);
+
+#endif
+}
+
+//
+//
+//
+
+static
+SKC_RASTERIZE_UINT
+skc_subgroup_last_uint(SKC_RASTERIZE_UINT const v)
+{
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+  //
+  // SIMD
+  //
+#if   ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 0 )
+  return v;
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 1 )
+  return v.s1;
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 2 )
+  return v.s3;
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 3 )
+  return v.s7;
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 4 )
+  return v.sf;
+#endif
+
+#else
+  //
+  // SIMT
+  //
+  return sub_group_broadcast(v,SKC_RASTERIZE_SUBGROUP_SIZE-1);
+
+#endif
+}
+
+//
+//
+//
+
+static
+float
+skc_subgroup_first(SKC_RASTERIZE_FLOAT const v)
+{
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+  //
+  // SIMD
+  //
+#if   ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 0 )
+  return v;
+#else
+  return v.s0;
+#endif
+
+#else
+  //
+  // SIMT
+  //
+  return sub_group_broadcast(v,0);
+
+#endif
+}
+
+//
+//
+//
+
+static
+SKC_RASTERIZE_FLOAT
+skc_subgroup_shuffle(SKC_RASTERIZE_FLOAT const v,
+                      SKC_RASTERIZE_UINT  const i)
+{
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+  //
+  // SIMD
+  //
+#if   ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 0 )
+  return v;
+#else
+  return shuffle(v,i);
+#endif
+
+#else
+  //
+  // SIMT
+  //
+  return intel_sub_group_shuffle(v,i);
+
+#endif
+}
+
+//
+//
+//
+
+static
+SKC_RASTERIZE_FLOAT
+skc_subgroup_shuffle_up_1(SKC_RASTERIZE_FLOAT const p, // previous
+                          SKC_RASTERIZE_FLOAT const c) // current
+{
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+  //
+  // SIMD
+  //
+  // FIXME -- there are alternative formulations here:
+  //
+  // Option 1:
+  //
+  //   select(c.rotate(+1),p.rotate(-1),(1,0,0,...))
+  //
+  // Option 2:
+  //
+  //   p is a scalar
+  //   t    = c.rotate(+1)
+  //   t.s0 = p;
+  //
+  // Option 3: ...
+  //
+#if   ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 0 )
+  return p;
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 1 )
+  return shuffle2(p,c,(uint2)(1,2));
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 2 )
+  return shuffle2(p,c,(uint4)(3,4,5,6));
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 3 )
+  return shuffle2(p,c,(uint8)(7,8,9,10,11,12,13,14));
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 4 )
+  return shuffle2(p,c,(uint16)(15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30));
+#endif
+
+#else
+  //
+  // SIMT
+  //
+  return intel_sub_group_shuffle_up(p,c,1);
+
+#endif
+}
+
+//
+//
+//
+
+static
+bool
+skc_is_lane_first()
+{
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1)
+  //
+  // SIMD
+  //
+  return true;
+#else
+  //
+  // SIMT
+  //
+  return get_sub_group_local_id() == 0;
+#endif
+}
+
+//
+//
+//
+
+static
+SKC_RASTERIZE_FLOAT
+skc_delta_offset()
+{
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+  //
+  // SIMD
+  //
+#if   ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 0 )
+  return 1;
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 1 )
+  return (SKC_RASTERIZE_FLOAT)( 1, 2 );
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 2 )
+  return (SKC_RASTERIZE_FLOAT)( 1, 2, 3, 4 );
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 3 )
+  return (SKC_RASTERIZE_FLOAT)( 1, 2, 3, 4, 5, 6, 7, 8 );
+#elif ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 4 )
+  return (SKC_RASTERIZE_FLOAT)( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 );
+#endif
+
+#else
+  //
+  // SIMT
+  //
+  return 1.0f + get_sub_group_local_id();
+
+#endif
+
+}
+
+//
+//
+//
+
+static
+int
+skc_subgroup_any(SKC_RASTERIZE_PREDICATE const p)
+{
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+  //
+  // SIMD
+  //
+  return any(p);
+#else
+  //
+  // SIMT
+  //
+  return sub_group_any(p);
+#endif
+}
+
+//
+//
+//
+
+#define SKC_PATH_NODEWORD_IS_LAST(n)  (((n) & SKC_DEVICE_BLOCK_WORDS_MASK) == SKC_DEVICE_BLOCK_WORDS_MASK)
+
+void
+skc_segment_next(__global union skc_bp_elem * const bp_elems,
+                 skc_uint                   * const nodeword,
+                 skc_block_id_t             * const id)
+{
+  if ((++*id & SKC_DEVICE_SUBBLOCKS_PER_BLOCK_MASK) == 0)
+    {
+      if (SKC_PATH_NODEWORD_IS_LAST(++*nodeword))
+        {
+          *nodeword = SKC_TAGGED_BLOCK_ID_GET_ID(bp_elems[*nodeword].tag_id) * SKC_DEVICE_SUBBLOCK_WORDS;
+        }
+
+      skc_tagged_block_id_t const tag_id = bp_elems[*nodeword].tag_id;
+
+      *id = SKC_TAGGED_BLOCK_ID_GET_ID(tag_id);
+    }
+}
+
+//
+//
+//
+
+static
+SKC_RASTERIZE_FLOAT
+skc_native_length(SKC_RASTERIZE_FLOAT const x, SKC_RASTERIZE_FLOAT const y)
+{
+  return native_sqrt(x * x + y * y);
+}
+
+//
+// Wang's Formula (1985)
+//
+
+#define SKC_WANG_PIXEL_RESL   0.25f // <-- this can be tuned
+
+#define SKC_WANG_EPSILON      (SKC_WANG_PIXEL_RESL * SKC_SUBPIXEL_RESL_X_F32)
+
+#define SKC_WANG_CUBIC        ((3.0f * 2.0f) / (8.0f * SKC_WANG_EPSILON))
+#define SKC_WANG_QUADRATIC    ((2.0f       ) / (8.0f * SKC_WANG_EPSILON))
+
+#define SKC_WANG_LENGTH(x,y)  skc_native_length(x,y)
+#define SKC_WANG_SQRT(x)      native_sqrt(x)
+
+//
+//
+//
+
+static
+SKC_RASTERIZE_FLOAT
+skc_wangs_formula_cubic(SKC_RASTERIZE_FLOAT const t0x, SKC_RASTERIZE_FLOAT const t0y,
+                        SKC_RASTERIZE_FLOAT const t1x, SKC_RASTERIZE_FLOAT const t1y,
+                        SKC_RASTERIZE_FLOAT const t2x, SKC_RASTERIZE_FLOAT const t2y,
+                        SKC_RASTERIZE_FLOAT const t3x, SKC_RASTERIZE_FLOAT const t3y)
+{
+  //
+  // Return the number of evenly spaced (in the parametric sense) line
+  // segments that are guaranteed to be within "epsilon" error of the
+  // curve.
+  //
+  // We're then going to take multiples of the reciprocal of this
+  // number so that the segmentation can be distributed across the
+  // subgroup.
+  //
+  // Note, this can probably be slightly optimized per architecture
+  // but it's probably far from being a hotspot since it's all
+  // straight-line unpredicated code.
+  //
+  // The result is an integer ranging from [1.0,#segments]
+  //
+  // Note that even if all of the control points are coincident, the
+  // max(1.0f) will categorize this as a line of 1 segment.
+  //
+  // This is what we want!  We want to convert cubics to lines as
+  // easily as possible and *then* cull lines that are either
+  // horizontal or zero length.
+  //
+  return max(1.0f,
+             ceil(SKC_WANG_SQRT(SKC_WANG_CUBIC *
+                                SKC_WANG_LENGTH(max(fabs(t2x - 2.0f * t1x + t0x),
+                                                    fabs(t3x - 2.0f * t2x + t1x)),
+                                                max(fabs(t2y - 2.0f * t1y + t0y),
+                                                    fabs(t3y - 2.0f * t2y + t1y))))));
+}
+
+static
+SKC_RASTERIZE_FLOAT
+skc_wangs_formula_quadratic(SKC_RASTERIZE_FLOAT const t0x, SKC_RASTERIZE_FLOAT const t0y,
+                            SKC_RASTERIZE_FLOAT const t1x, SKC_RASTERIZE_FLOAT const t1y,
+                            SKC_RASTERIZE_FLOAT const t2x, SKC_RASTERIZE_FLOAT const t2y)
+{
+  return max(1.0f,
+             ceil(SKC_WANG_SQRT(SKC_WANG_QUADRATIC *
+                                SKC_WANG_LENGTH(fabs(t2x - 2.0f * t1x + t0x),
+                                                fabs(t2y - 2.0f * t1y + t0y)))));
+}
+
+//
+// rational curves
+//
+
+static
+SKC_RASTERIZE_FLOAT
+skc_wangs_formula_cubic_rat()
+{
+  return 0.0f;
+}
+
+static
+SKC_RASTERIZE_FLOAT
+skc_wangs_formula_quad_rat()
+{
+  return 0.0f;
+}
+
+//
+// flush any work-in-progress blocks and return unused block ids
+//
+
+static
+void
+skc_finalize(__global SKC_ATOMIC_UINT          volatile * const bp_atomics,
+             __global union skc_bp_elem                 * const bp_elems,
+             __global uint                              * const bp_ids,
+             skc_uint                                     const bp_mask,
+             __global SKC_ATOMIC_UINT          volatile * const cohort_atomics,
+             skc_block_id_v_t                           * const blocks,
+             skc_uint                                     const blocks_next,
+             skc_ttsk_v_t                               * const sk_v,
+             skc_uint                                     const sk_v_next,
+             __global skc_ttsk_s_t                      * const sk_extent,
+             __local  struct skc_subgroup_smem volatile * const smem)
+{
+  //
+  // flush non-empty bins
+  //
+  // FIXME -- accelerate this iteration/search with a subgroup operation
+  //
+  for (skc_uint ii=0; ii<SKC_RASTERIZE_TILE_HASH_BIN_COUNT; ii++)
+    {
+      if (smem->bin.aN.count[ii] > 0)
+        {
+          skc_block_id_v_t const id  = smem->bin.aN.id[ii];
+          skc_uint         const idx = id * SKC_DEVICE_SUBBLOCK_WORDS + skc_subgroup_lane();
+          skc_uint         const tts = smem->bin.aN.ttsb[ii][skc_subgroup_lane()];
+#if 0
+          printf("???????? : [ %10u = %10u : %08X ]\n",id,idx,tts);
+#endif
+          bp_elems[idx].u32 = tts;
+        }
+
+      //
+      // FIXME -- vectorize with vstoreN()
+      //
+    }
+
+  //
+  // return remaining block ids back to the pool
+  //
+  skc_uint const blocks_rem = SKC_RASTERIZE_BLOCK_ID_V_SIZE - blocks_next;
+
+  if (blocks_rem > 0)
+    {
+      skc_uint bp_idx = 0;
+
+      if (skc_subgroup_lane() == 0)
+        {
+          bp_idx = SKC_ATOMIC_ADD_GLOBAL_RELAXED_DEVICE(bp_atomics+SKC_BP_ATOMIC_OFFSET_WRITES,blocks_rem);
+
+#if 0
+          printf("r-: %8u + %u\n",bp_idx,blocks_rem);
+#endif
+        }
+
+      bp_idx = (sub_group_broadcast(bp_idx,0) + skc_subgroup_lane() - blocks_next) & bp_mask;
+
+      if (skc_subgroup_lane() >= blocks_next)
+        {
+          bp_ids[bp_idx] = *blocks;
+        }
+    }
+
+  //
+  // flush work-in-progress ryx keys
+  //
+  if (sk_v_next > 0)
+    {
+      skc_uint sk_idx = 0;
+
+      if (skc_subgroup_lane() == 0)
+        {
+          sk_idx = SKC_ATOMIC_ADD_GLOBAL_RELAXED_DEVICE
+            (cohort_atomics+SKC_RASTER_COHORT_ATOMIC_OFFSET_KEYS,sk_v_next);
+#if 0
+          printf("* %u\n",sk_idx);
+#endif
+        }
+
+      sk_idx = sub_group_broadcast(sk_idx,0) + skc_subgroup_lane();
+
+      if (skc_subgroup_lane() < sk_v_next)
+        {
+          sk_extent[sk_idx] = *sk_v;
+        }
+    }
+}
+
+//
+// If there are lanes that were unable to append to a bin because
+// their hashes collided with a bin's current ryx key then those bins
+// must be ejected.
+//
+// Note that we do not eject "full" bins because lazily waiting for a
+// collision results in simpler code.
+//
+
+static
+void
+skc_flush(__global SKC_ATOMIC_UINT          volatile * const bp_atomics,
+          __global union skc_bp_elem                 * const bp_elems,
+          __global uint                              * const bp_ids,
+          skc_uint                                     const bp_mask,
+          __global SKC_ATOMIC_UINT          volatile * const cohort_atomics,
+          skc_block_id_t                             * const subblocks,
+          skc_block_id_v_t                           * const blocks,
+          skc_uint                                   * const blocks_next,
+          skc_ttsk_v_t                               * const sk_v,
+          skc_uint                                   * const sk_v_next,
+          __global skc_ttsk_s_t                      * const sk_extent,
+          __local  struct skc_subgroup_smem volatile * const smem,
+          SKC_RASTERIZE_UINT                           const hash,
+          SKC_RASTERIZE_UINT                           const yx,
+          SKC_RASTERIZE_PREDICATE                            is_collision) // pass by value
+{
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+  //
+  // SIMD
+  //
+
+  //
+  // FIXME -- this code is now stale with the changes to the
+  // subblock/block allocation strategy
+  //
+
+  //
+  // get local TTSB ID queue count
+  //
+  skc_uint ttsb_id_count  = smem->pool.count; // scalar
+
+  // init hash bit mask
+  skc_uint component_mask = 0;
+
+  for (int cc=0; cc<SKC_RASTERIZE_VECTOR_SIZE; cc++)
+    {
+      // if no collision continue
+      if (((int*)&is_collision)[cc] == 0)
+        continue;
+
+      uint const winner        = ((uint*)&hash)[cc];
+      uint const component_bit = 1u << winner;
+
+      // if already processed this hash then continue
+      if (component_mask & component_bit)
+        continue;
+
+      // update component mask
+      component_mask |= component_bit;
+
+      //
+      // new winner requires ejecting the old TTSB
+      //
+      if (smem->bin.aN.count[winner] > 0)
+        {
+          skc_uint const elem_idx = smem->bin.aN.id[winner] * SKC_DEVICE_SUBBLOCK_WORDS + skc_subgroup_lane();
+
+          bp_elems[elem_idx].u32 = smem->bin.aN.ttsb[winner][skc_subgroup_lane()];
+        }
+
+        //
+        // ensure there is at least one TTSK and TTSB ID
+        //
+        if (ttsb_id_count == SKC_RASTERIZE_POOL_SIZE)
+          {
+            //
+            // update remaining count
+            //
+            ttsb_id_count = 0;
+
+            //
+            // flush accumulated ttsk_ryx keys
+            //
+            uint const idx = SKC_ATOMIC_ADD_GLOBAL_RELAXED_DEVICE
+              (cohort_atomics+SKC_RASTER_COHORT_ATOMIC_OFFSET_KEYS,SKC_RASTERIZE_POOL_SIZE); // ttsk_ryx_count
+
+#if 0
+            printf("# %u\n",idx);
+#endif
+
+            for (uint ii=0; ii<SKC_RASTERIZE_POOL_SIZE; ii+=SKC_RASTERIZE_SUBGROUP_SIZE)
+              {
+                ttsk_ryx[idx + ii] = skc_make_ttsk_ryx(smem,SKC_CMD_RASTERIZE_GET_COHORT(cmd),ii);
+              }
+
+            //
+            // allocate more ttsb ids from pool
+            //
+            uint const id = SKC_ATOMIC_ADD_GLOBAL_RELAXED_DEVICE(bp_atomics+0,SKC_RASTERIZE_POOL_SIZE); // ring_reads
+
+            for (uint ii=0; ii<SKC_RASTERIZE_POOL_SIZE; ii+=SKC_RASTERIZE_SUBGROUP_SIZE)
+              smem->pool.aN.id[ii] = bp_ids[id + ii];
+          }
+
+      //
+      // invalidate the winning block
+      //
+
+      //
+      // update bin with winning yx, new ttsb id and zero count
+      //
+      // all lanes are loading/storing from/to the same index
+      //
+      smem->bin.vN.ttsb [winner] = ( SKC_TTS_INVALID );
+      smem->bin.aN.id   [winner] = smem->pool.aN.id[ttsb_id_count];
+      smem->bin.aN.yx   [winner] = smem->pool.aN.yx[ttsb_id_count] = ((uint*)&yx)[cc];
+      smem->bin.aN.count[winner] = 0;
+
+      //
+      // update count
+      //
+      ttsb_id_count += 1;
+    }
+
+  //
+  // save count
+  //
+  smem->pool.count = ttsb_id_count;
+
+#else
+  //
+  // SIMT
+  //
+
+  do {
+    //
+    // only one lane will win!
+    //
+    if (is_collision)
+      smem->subgroup.winner = hash;
+
+    barrier(CLK_LOCAL_MEM_FENCE);
+
+    //
+    // which bin is being ejected?
+    //
+    skc_uint const winner = smem->subgroup.winner;
+
+    //
+    // which colliding hash is taking over the bin?
+    //
+    SKC_RASTERIZE_PREDICATE const is_winner = is_collision && (hash == winner);
+
+    //
+    // all lanes with the same hash will try to store but only one
+    // lane will win
+    //
+    if (is_winner)
+      smem->subgroup.winner = yx;
+
+    barrier(CLK_LOCAL_MEM_FENCE);
+
+    //
+    // flush this block to the pool
+    //
+    if (smem->bin.aN.count[winner] > 0)
+      {
+        skc_block_id_v_t const id  = smem->bin.aN.id[winner];
+        skc_uint         const idx = id * SKC_DEVICE_SUBBLOCK_WORDS + skc_subgroup_lane();
+        skc_uint         const tts = smem->bin.aN.ttsb[winner][skc_subgroup_lane()];
+#if 0
+        printf("%08X : [ %10u = %10u : %08X ]\n",yx,id,idx,tts);
+#endif
+        bp_elems[idx].u32 = tts;
+      }
+
+    //
+    // append new ttsk
+    //
+    skc_uint       const new_yx = smem->subgroup.winner;
+    skc_block_id_t const new_id = skc_ttsk_v_append(SKC_SUBBLOCKS_BLOCKS_ARGS(),
+                                                    blocks_next,
+                                                    bp_atomics,
+                                                    bp_mask, // pow2 modulo mask for block pool ring
+                                                    bp_ids,
+                                                    cohort_atomics,
+                                                    sk_v,
+                                                    sk_v_next,
+                                                    sk_extent,
+                                                    new_yx);
+
+#if 0
+    if (get_sub_group_local_id() == 0) {
+      printf(">>> %9u\n",new_id);
+    }
+#endif
+
+    //
+    // update bin with winning yx, new ttsb id and zero count
+    //
+    smem->bin.aN.ttsb [winner][skc_subgroup_lane()] = SKC_TTS_INVALID;
+    smem->bin.aN.yx   [winner]                      = new_yx;
+    smem->bin.aN.id   [winner]                      = new_id;
+    smem->bin.aN.count[winner]                      = 0;
+
+    //
+    // remove all lanes matching this hash
+    //
+    is_collision = is_collision && !is_winner;
+
+    //
+    // exit if nothing left to do
+    //
+  } while (sub_group_any(is_collision));
+
+#endif
+}
+
+//
+// scatter scan max
+//
+static
+SKC_RASTERIZE_UINT
+skc_scatter_scan_max(__local struct skc_subgroup_smem volatile * const smem,
+                     SKC_RASTERIZE_FLOAT                         const iss,
+                     SKC_RASTERIZE_FLOAT                         const ess)
+{
+  //
+  // prefix sums determine which lanes we're going to work on next
+  //
+  SKC_RASTERIZE_PREDICATE const is_scratch_store = (iss > 0.0f) && (ess < (float)SKC_RASTERIZE_ELEMS_PER_SUBGROUP);
+  SKC_RASTERIZE_UINT      const scratch_idx      = SKC_CONVERT(SKC_RASTERIZE_UINT)(max(ess,0.0f));
+
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+  //
+  // SIMD
+  //
+#ifdef SKC_RASTERIZE_SIMD_USES_SMEM
+  //
+  // SIMD APPROACH 1: SIMT'ISH
+  //
+
+  // zero the volatile smem scratchpad using vector syntax
+  smem->subgroup.vN.scratch[0] = ( 0 );
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A)                         \
+  if (is_scratch_store C)                               \
+    smem->subgroup.aN.scratch[scratch_idx C] = I;
+
+  SKC_RASTERIZE_VECTOR_EXPAND();
+
+  // propagate lanes to right using max scan
+  SKC_RASTERIZE_UINT const scratch = smem->subgroup.vN.scratch[0];
+  SKC_RASTERIZE_UINT const source  = skc_subgroup_scan_inclusive_max(scratch);
+
+#else
+  //
+  // SIMD APPROACH 2: SCALAR'ISH
+  //
+
+  SKC_RASTERIZE_UINT source = ( 0 );
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A)                 \
+  if (is_scratch_store C)                       \
+    ((uint *)&source)[scratch_idx C] = I;
+
+  SKC_RASTERIZE_VECTOR_EXPAND();
+
+  for (uint ii=1; ii<SKC_RASTERIZE_ELEMS_PER_SUBGROUP; ii++)
+    ((uint *)&source)[ii] = max(((uint *)&source)[ii-1],((uint *)&source)[ii]);
+#endif
+
+#else
+  //
+  // SIMT
+  //
+
+  //
+  // zero the volatile smem scratchpad using vector syntax
+  //
+  smem->subgroup.vN.scratch[skc_subgroup_lane()] = ( 0 );
+
+  //
+  // store source lane at starting lane
+  //
+  if (is_scratch_store)
+    smem->subgroup.aN.scratch[scratch_idx] = skc_subgroup_lane();
+
+  //
+  // propagate lanes to right using max scan
+  //
+  SKC_RASTERIZE_UINT const scratch = smem->subgroup.vN.scratch[skc_subgroup_lane()];
+  SKC_RASTERIZE_UINT const source  = skc_subgroup_scan_inclusive_max(scratch);
+#endif
+
+  return source;
+}
+
+//
+// sliver lines into subpixels
+//
+
+static
+void
+skc_sliver(__global SKC_ATOMIC_UINT          volatile * const bp_atomics,
+           __global union skc_bp_elem                 * const bp_elems,
+           __global uint                              * const bp_ids,
+           skc_uint                                     const bp_mask,
+           __global SKC_ATOMIC_UINT          volatile * const cohort_atomics,
+           skc_block_id_t                             * const subblocks,
+           skc_block_id_v_t                           * const blocks,
+           skc_uint                                   * const blocks_next,
+           skc_ttsk_v_t                               * const sk_v,
+           skc_uint                                   * const sk_v_next,
+           __global skc_ttsk_s_t                      * const sk_extent,
+           __local  struct skc_subgroup_smem volatile * const smem,
+           SKC_RASTERIZE_FLOAT                          const l0x,
+           SKC_RASTERIZE_FLOAT                          const l0y,
+           SKC_RASTERIZE_FLOAT                          const l1x,
+           SKC_RASTERIZE_FLOAT                          const l1y)
+{
+  //
+  // Y-SLIVERING
+  // -----------
+  //
+  // immediately sliver all multi-pixel lines in into 1-pixel high
+  // lines
+  //
+  // note this implicitly squelches horizontal lines
+  //
+  // there is another test for horizontal lines after x-slivering
+  // is complete
+  //
+
+  //
+  // will we need to flip the sign of y_delta ?
+  //
+  SKC_RASTERIZE_PREDICATE const y_lt   = (l0y <= l1y);
+  SKC_RASTERIZE_UINT      const dy_xor = y_lt ? 0 : 0x80000000;
+
+  //
+  // save 1/dy
+  //
+  SKC_RASTERIZE_FLOAT const y_denom = native_recip(l1y - l0y);
+
+  //
+  // how many non-horizontal subpixel y-axis slivers are there?
+  //
+  SKC_RASTERIZE_FLOAT const y_min   = floor(fmin(l0y,l1y) * SKC_SUBPIXEL_Y_SCALE_DOWN);
+  SKC_RASTERIZE_FLOAT const y_max   = ceil (fmax(l0y,l1y) * SKC_SUBPIXEL_Y_SCALE_DOWN);
+  SKC_RASTERIZE_FLOAT const y_base  = y_lt ? y_min : y_max;
+  SKC_RASTERIZE_FLOAT       y_segs  = y_max - y_min;
+
+  //
+  // inclusive subgroup scan of y_segs
+  //
+  SKC_RASTERIZE_FLOAT       y_iss   = skc_subgroup_scan_inclusive_add_float(y_segs);
+  SKC_RASTERIZE_FLOAT       y_ess   = y_iss - y_segs;
+  float                     y_rem   = skc_subgroup_last_float(y_iss);
+
+  //
+  // if this is a horizontal line then tweak y_iss so "is_scratch_store" always fails
+  //
+  if (y_segs == 0.0f)
+    y_iss = 0.0f;
+
+#if 0
+  printf("{ { %5.0f, %5.0f }, { %5.0f, %5.0f } (* %5.0f / %5.0f / %5.0f / %5.0f *) }, \n",a0x,a0y,a1x,a1y,y_segs,y_iss,y_ess,y_rem);
+#endif
+
+  //
+  // these values don't matter on first iteration
+  //
+  SKC_RASTERIZE_FLOAT n1x_prev = 0;
+  SKC_RASTERIZE_FLOAT n1y_prev = 0;
+
+  //
+  // loop until done
+  //
+  while (y_rem > 0.0f)
+    {
+      //
+      // distribute work across lanes
+      //
+      SKC_RASTERIZE_UINT const y_source = skc_scatter_scan_max(smem,y_iss,y_ess);
+
+      //
+      // get line at y_source line
+      //
+      SKC_RASTERIZE_FLOAT const m0x = skc_subgroup_shuffle(l0x,y_source);
+      SKC_RASTERIZE_FLOAT const m0y = skc_subgroup_shuffle(l0y,y_source);
+      SKC_RASTERIZE_FLOAT const m1x = skc_subgroup_shuffle(l1x,y_source);
+      SKC_RASTERIZE_FLOAT const m1y = skc_subgroup_shuffle(l1y,y_source);
+
+      //
+      // every lane will create a 1 pixel tall line "sliver"
+      //
+      // FIXME -- this gets expanded on SIMD
+      //
+      // if numerator == 1 then this is the first lane
+      // if numerator == s then this is the last  lane
+      //
+      SKC_RASTERIZE_FLOAT     const y_delta    = skc_delta_offset() - skc_subgroup_shuffle(y_ess,y_source);
+      SKC_RASTERIZE_FLOAT     const y_count    = skc_subgroup_shuffle(y_segs,y_source);
+
+      SKC_RASTERIZE_PREDICATE const is_y_first = (y_delta == 1.0f);
+      SKC_RASTERIZE_PREDICATE const is_y_last  = (y_delta >= y_count);
+
+      // toggle y_delta sign
+      SKC_RASTERIZE_FLOAT     const y_offset   = as_float((as_uint(y_delta) ^ intel_sub_group_shuffle(dy_xor,y_source)));
+
+      //
+      // calculate "right" line segment endpoint
+      //
+      SKC_RASTERIZE_FLOAT       n1y = (y_offset + skc_subgroup_shuffle(y_base,y_source)) * SKC_SUBPIXEL_Y_SCALE_UP;
+      SKC_RASTERIZE_FLOAT const n_t = (n1y - m0y) * skc_subgroup_shuffle(y_denom,y_source);
+      SKC_RASTERIZE_FLOAT       n1x = round(SKC_LERP(m0x,m1x,n_t));
+
+      //
+      // override c1 if this is last point
+      //
+      n1y = select(n1y,m1y,is_y_last);
+      n1x = select(n1x,m1x,is_y_last);
+
+      //
+      // shuffle up "left" line segment endpoint
+      //
+      // NOTE: Intel's shuffle_up is unique with its elegant
+      // "previous" argument so don't get used to it
+      //
+      SKC_RASTERIZE_FLOAT n0y = skc_subgroup_shuffle_up_1(n1y_prev,n1y);
+      SKC_RASTERIZE_FLOAT n0x = skc_subgroup_shuffle_up_1(n1x_prev,n1x);
+
+      //
+      // override shuffle up if this is the first line segment
+      //
+      n0y = select(n0y,m0y,is_y_first);
+      n0x = select(n0x,m0x,is_y_first);
+
+      //
+      // save previous right endpoint
+      //
+      n1x_prev = n1x;
+      n1y_prev = n1y;
+
+      //
+      // decrement by subgroup size
+      //
+      y_iss -= (float)SKC_RASTERIZE_ELEMS_PER_SUBGROUP;
+      y_ess -= (float)SKC_RASTERIZE_ELEMS_PER_SUBGROUP;
+      y_rem -= (float)SKC_RASTERIZE_ELEMS_PER_SUBGROUP;
+
+#if 0
+      //
+      // debug
+      //
+      if (n0y != n1y) {
+        printf("{ { %5.0f, %5.0f }, { %5.0f, %5.0f } },\n",n0x,n0y,n1x,n1y);
+      }
+#endif
+
+      //
+      // X-SLIVERING
+      // -----------
+      //
+      // now sliver 1-pixel high lines into at either vertical or
+      // 1-pixel wide lines
+      //
+      // save original direction and work with increasing x
+      //
+      SKC_RASTERIZE_PREDICATE const x_lt   = (n0x <= n1x);
+      SKC_RASTERIZE_UINT      const dx_xor = x_lt ? 0 : 0x80000000;
+
+      //
+      // save 1/dy
+      //
+      SKC_RASTERIZE_FLOAT const x_denom  = native_recip(n1x - n0x);
+
+      //
+      // how many non-horizontal subpixel y-axis slivers are there?
+      //
+      SKC_RASTERIZE_FLOAT const x_min    = floor(fmin(n0x,n1x) * SKC_SUBPIXEL_X_SCALE_DOWN);
+      SKC_RASTERIZE_FLOAT const x_max    = ceil (fmax(n0x,n1x) * SKC_SUBPIXEL_X_SCALE_DOWN);
+      SKC_RASTERIZE_FLOAT const x_base   = x_lt ? x_min : x_max;
+      SKC_RASTERIZE_FLOAT const x_segs   = fmax(x_max - x_min,1.0f);
+
+      //
+      // inclusive subgroup scan of y_segs
+      //
+      SKC_RASTERIZE_FLOAT       x_iss    = skc_subgroup_scan_inclusive_add_float(x_segs);
+      SKC_RASTERIZE_FLOAT       x_ess    = x_iss - x_segs;
+      float                     x_rem    = skc_subgroup_last_float(x_iss);
+
+      //
+      // if this is a horizontal line then tweak x_iss so "is_scratch_store" always fails
+      //
+      //if (x_segs == 0.0f)
+      // x_iss = 0.0f;
+
+      //
+      // these values don't matter on first iteration
+      //
+      SKC_RASTERIZE_FLOAT       p1x_prev = 0;
+      SKC_RASTERIZE_FLOAT       p1y_prev = 0;
+
+      //
+      // loop until done
+      //
+      while (x_rem > 0)
+        {
+          //
+          // distribute work across lanes
+          //
+          SKC_RASTERIZE_UINT const x_source = skc_scatter_scan_max(smem,x_iss,x_ess);
+
+          //
+          // get line at y_source line
+          //
+          SKC_RASTERIZE_FLOAT const o0x = skc_subgroup_shuffle(n0x,x_source);
+          SKC_RASTERIZE_FLOAT const o0y = skc_subgroup_shuffle(n0y,x_source);
+          SKC_RASTERIZE_FLOAT const o1x = skc_subgroup_shuffle(n1x,x_source);
+          SKC_RASTERIZE_FLOAT const o1y = skc_subgroup_shuffle(n1y,x_source);
+
+          //
+          // every lane will create a 1 pixel tall line "sliver"
+          //
+          // FIXME -- this gets expanded on SIMD
+          //
+          // if numerator == 1 then this is the first lane
+          // if numerator == s then this is the last  lane
+          //
+          SKC_RASTERIZE_FLOAT     const x_delta    = skc_delta_offset() - skc_subgroup_shuffle(x_ess,x_source);
+          SKC_RASTERIZE_FLOAT     const x_count    = skc_subgroup_shuffle(x_segs,x_source);
+
+          SKC_RASTERIZE_PREDICATE const is_x_first = (x_delta == 1.0f);
+          SKC_RASTERIZE_PREDICATE const is_x_last  = (x_delta >= x_count);
+
+          // toggle x_delta sign
+          SKC_RASTERIZE_FLOAT     const x_offset   = as_float((as_uint(x_delta) ^ intel_sub_group_shuffle(dx_xor,x_source)));
+
+          //
+          // calculate "right" line segment endpoint
+          //
+          SKC_RASTERIZE_FLOAT       p1x = (x_offset + skc_subgroup_shuffle(x_base,x_source)) * SKC_SUBPIXEL_X_SCALE_UP;
+          SKC_RASTERIZE_FLOAT const p_t = (p1x - o0x) * skc_subgroup_shuffle(x_denom,x_source);
+          SKC_RASTERIZE_FLOAT       p1y = round(SKC_LERP(o0y,o1y,p_t));
+
+          //
+          // override c1 if this is last point
+          //
+          p1x = select(p1x,o1x,is_x_last);
+          p1y = select(p1y,o1y,is_x_last);
+
+          //
+          // shuffle up "left" line segment endpoint
+          //
+          // NOTE: Intel's shuffle_up is unique with its elegant
+          // "previous" argument so don't get used to it
+          //
+          SKC_RASTERIZE_FLOAT p0x = skc_subgroup_shuffle_up_1(p1x_prev,p1x);
+          SKC_RASTERIZE_FLOAT p0y = skc_subgroup_shuffle_up_1(p1y_prev,p1y);
+
+          //
+          // override shuffle up if this is the first line segment
+          //
+          p0x = select(p0x,o0x,is_x_first);
+          p0y = select(p0y,o0y,is_x_first);
+
+          //
+          // save previous right endpoint
+          //
+          p1x_prev = p1x;
+          p1y_prev = p1y;
+
+          //
+          // decrement by subgroup size
+          //
+          x_iss -= SKC_RASTERIZE_ELEMS_PER_SUBGROUP;
+          x_ess -= SKC_RASTERIZE_ELEMS_PER_SUBGROUP;
+          x_rem -= SKC_RASTERIZE_ELEMS_PER_SUBGROUP;
+
+          //
+          // only non-horizontal subpixel lines are valid
+          //
+          SKC_RASTERIZE_PREDICATE is_active = (p0y != p1y);
+
+          //
+          // if no lanes are active then continue
+          //
+          // FIXME -- THIS SIMPLE SUB_GROUP_ANY TEST SIGNIFICANTLY
+          // IMPACTS PERFORMANCE (+12% ?)
+          //
+          // IT SHOULDN'T !!!
+          //
+#if 0
+          if (!skc_subgroup_any(is_active))
+            continue;
+#endif
+
+          //
+          // Option 1: use SLM for explicitly managed coalesced stores
+          //
+          // 1. which tile does this line belong?
+          // 2. hash tile coordinates
+          // 3. lookup hash
+          // 4. if tile matches then SLM append keys
+          // 5. if tile doesn't match
+          //   a. flush
+          //   b. create new TTSK_RYX
+          //   c. obtain TTSB block from pool
+          //   d. goto 3.
+          //
+
+          //
+          // Option 2: rely on L1/L2/L3 to mitigate non-coalesced stores
+          //
+          // 1. which tile does this line belong?
+          // 2. hash tile coordinates
+          // 3. lookup hash
+          // 4. if tile matches then GMEM append keys
+          // 5. if tile doesn't match
+          //   a. flush (and invalidate empty elems)
+          //   b. create new TTSK_RYX
+          //   c. obtain TTSB block from pool
+          //   d. goto 3.
+          //
+
+          //
+          // The virtual rasterization surface is very large and
+          // signed: +/- ~64K-256K, depending on the architecture.
+          //
+          // Rasters must be clipped to the virtual surface and,
+          // optionally, clipped even further on a per raster
+          // basis.
+          //
+
+          //
+          // Clip to the per-raster clip
+          //
+
+          /*
+
+            CLIP HERE
+
+          */
+
+          //
+          // Hash the tile coordinates
+          //
+          // This table lists nominal values for each architecture.
+          // We want to choose values that are naturally fit the
+          // "width" of the architecture.
+          //
+          //   SIMD   RANGE   BITS  MAX RANGE  MAX BINS  HASH BITS
+          //   ----  -------  ----  ---------  --------  ---------
+          //     4   [0,  4]    3    [0,  7]      10      mod(10)  <-- SSE42, ?
+          //     8   [0,  8]    4    [0, 15]       8         3     <-- GEN*,AVX*
+          //    16   [0, 16]    5    [0, 31]       6      mod(6)   <-- GEN*,?
+          //    32   [0, 32]    6    [0, 63]       5      mod(5)   <-- CUDA,PowerVR,Adreno,GEN*
+          //    64   [0, 64]    7    [0,127]       4         2     <-- AMD Radeon
+          //
+          // NOTE: When possible, bias the hash toward using more y
+          // bits because of:
+          //
+          //   1. the 90 degree counter-clockwise rotation that we put
+          //      in place to offset the render-time clockwise
+          //      rotation
+          //
+          //   2. the likely presence of left-to-right or
+          //      right-to-left glyphs.
+          //
+          // For power-of-two bins, the hash is easy.
+          //
+          // For non-power-of-two, we may want to either implement a
+          // fast mod (compiler should do this for us... hahahaha) or
+          // drop down to the next power-of-two.
+          //
+
+          //
+          // FIXME -- this snarl is not good -- can probably reduce
+          // some of the sign casting but some is there to vectorize a
+          // scalar
+          //
+          SKC_RASTERIZE_INT       const z0y    = SKC_CONVERT(SKC_RASTERIZE_INT)(p0y);
+          SKC_RASTERIZE_INT       const z1y    = SKC_CONVERT(SKC_RASTERIZE_INT)(p1y);
+
+          SKC_RASTERIZE_INT       const z0x    = SKC_CONVERT(SKC_RASTERIZE_INT)(p0x);
+          SKC_RASTERIZE_INT       const z1x    = SKC_CONVERT(SKC_RASTERIZE_INT)(p1x);
+
+          SKC_RASTERIZE_INT       const min_y  = min(z0y,z1y);
+          SKC_RASTERIZE_INT       const max_y  = max(z0y,z1y);
+
+          SKC_RASTERIZE_INT       const tile_y = min_y >> SKC_SUBTILE_RESL_Y_LOG2;
+
+          SKC_RASTERIZE_UINT      const ty     = SKC_AS(SKC_RASTERIZE_UINT)(min_y) & SKC_SUBTILE_MASK_Y;
+          SKC_RASTERIZE_INT             dy     = SKC_AS(SKC_RASTERIZE_INT)(z1y - z0y);
+
+          //
+          // map [+1,+32] to [ 0,+31]
+          // map [-1,-32] to [-1,-32]
+          //
+          SKC_RASTERIZE_INT             dys    = (dy + (~dy >> 31)) << 26;
+
+          SKC_RASTERIZE_INT       const min_x  = min(z0x,z1x);
+          SKC_RASTERIZE_INT       const max_x  = max(z0x,z1x);
+          SKC_RASTERIZE_INT       const tile_x = min_x >> SKC_SUBTILE_RESL_X_LOG2;
+
+          SKC_RASTERIZE_UINT      const tx     = SKC_AS(SKC_RASTERIZE_UINT)(min_x) & SKC_SUBTILE_MASK_X;
+          SKC_RASTERIZE_UINT      const sx     = SKC_AS(SKC_RASTERIZE_UINT)(max_x - min_x);
+
+          SKC_RASTERIZE_UINT      const tts    = dys | (ty << 16) | (sx << 10) | tx;
+
+          SKC_RASTERIZE_UINT      const hash   = (((SKC_AS(SKC_RASTERIZE_UINT)(tile_y) & SKC_RASTERIZE_TILE_HASH_Y_MASK) << SKC_RASTERIZE_TILE_HASH_X_BITS) |
+                                                   (SKC_AS(SKC_RASTERIZE_UINT)(tile_x) & SKC_RASTERIZE_TILE_HASH_X_MASK));
+
+          SKC_RASTERIZE_UINT      const yx     = (((SKC_AS(SKC_RASTERIZE_UINT)(tile_y) & 0xFFF) << 12) | (SKC_AS(SKC_RASTERIZE_UINT)(tile_x) & 0xFFF));
+
+#if 0
+          printf("(%3u, %3u)\n",tile_y,tile_x);
+#endif
+
+#if 0
+          if (is_active)
+            printf("( %3u, %3u ) : [ %3u, %3u, %3d, %3d, %3u ]\n",tile_y,tile_x,ty,tx,dy,((int)dys)>>26,sx);
+#endif
+
+          //
+          // debug
+          //
+#if 0 // PRINTF_ENABLE
+
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A)                                         \
+          if (is_active C)                                              \
+            printf("{ { %5d, %5d }, { %5d, %5d } (* %2u *) },\n",z0x C,z0y C,z1x C,z1y C,hash C);
+
+          SKC_RASTERIZE_VECTOR_EXPAND();
+#else
+          if (is_active)
+            printf("{ { %5d, %5d }, { %5d, %5d } } (* %2u *),\n",z0x,z0y,z1x,z1y,hash);
+#endif
+
+#endif
+          //
+          // flush all active lanes
+          //
+          while (true)
+            {
+              //
+              // either gather load or vector load+shuffle the yx keys
+              //
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+              SKC_RASTERIZE_BIN       const yx_bin     = smem->bin.vN.yx;
+              SKC_RASTERIZE_UINT      const yx_cur     = shuffle(yx_bin,hash);
+#else
+              SKC_RASTERIZE_UINT      const yx_cur     = smem->bin.aN.yx[hash];
+#endif
+
+              //
+              // does yx for lane match yx for hash?
+              //
+              SKC_RASTERIZE_UINT      const active_yx  = is_active ? yx : SKC_RASTERIZE_YX_INVALID;
+              SKC_RASTERIZE_PREDICATE const is_match   = (yx_cur == active_yx);
+
+              //
+              // OpenCL spec: "When casting a bool to a vector integer
+              // data type, the vector components will be set to -1
+              // (i.e. all bits set) if the vector bool value is true
+              // and 0 otherwise.
+              //
+#if ( SKC_RASTERIZE_VECTOR_SIZE_LOG2 == 0 )
+              SKC_RASTERIZE_UINT      const h_match    = (SKC_RASTERIZE_UINT)is_match;
+#else
+              SKC_RASTERIZE_UINT      const h_match    = abs(is_match); // {-1,0} -> {+1,0}
+#endif
+              //
+              // how many new elements for each matching hash bin?
+              //
+              SKC_RASTERIZE_UINT      const h_shl      = hash * SKC_RASTERIZE_TILE_HASH_BIN_BITS;
+              SKC_RASTERIZE_UINT      const h          = h_match << h_shl;
+
+              //
+              // prefix sum all of the bins in parallel
+              //
+              SKC_RASTERIZE_UINT      const h_iss      = skc_subgroup_scan_inclusive_add_uint(h);
+              SKC_RASTERIZE_UINT      const h_total    = skc_subgroup_last_uint(h_iss);
+
+              //
+              // current bin counts
+              //
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+              SKC_RASTERIZE_BIN       const count_bin  = smem->bin.vN.count;
+              SKC_RASTERIZE_UINT      const count_cur  = shuffle(count_bin,hash);
+#else
+              SKC_RASTERIZE_UINT      const count_cur  = smem->bin.aN.count[hash];
+#endif
+
+              //
+              // calculate where each cache-hit and in-bounds tts should be stored
+              //
+              SKC_RASTERIZE_UINT      const ttsb_index = (h_iss   >> h_shl & SKC_RASTERIZE_TILE_HASH_BIN_MASK) + count_cur - 1;
+              SKC_RASTERIZE_UINT      const count_new  = (h_total >> h_shl & SKC_RASTERIZE_TILE_HASH_BIN_MASK) + count_cur;
+
+              //
+              // which lanes can append to a matching bin?
+              //
+              SKC_RASTERIZE_PREDICATE const is_append  = is_match && (ttsb_index < SKC_DEVICE_SUBBLOCK_WORDS);
+
+              //
+              // scatter append tts elements to bin blocks
+              //
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1)
+              //
+              // SIMD
+              //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A)                                         \
+              if (is_append C)                                          \
+                {                                                       \
+                  smem->bin.aN.ttsb [hash C][ttsb_index C] = tts       C; \
+                  smem->bin.aN.count[hash C]               = count_new C; \
+                }
+
+              SKC_RASTERIZE_VECTOR_EXPAND();
+#else
+              //
+              // SIMT
+              //
+              if (is_append)
+                {
+                  smem->bin.aN.ttsb [hash][ttsb_index] = tts;
+                  smem->bin.aN.count[hash]             = count_new; // it's ok if this is > SKC_DEVICE_SUBBLOCK_WORDS
+                }
+#endif
+              //
+              // try to keep predicate updates SIMD-friendly and
+              // outside of predicated code paths -- this is not
+              // always how we would normally do things on SIMT but
+              // either approach is acceptable
+              //
+
+              //
+              // mask off lanes/components that successfully appended
+              //
+              is_active = is_active && !is_append;
+
+              //
+              // are there any active lanes left?
+              //
+              if (!skc_subgroup_any(is_active))
+                break;
+
+              //
+              // There are active lanes that couldn't be appended to a
+              // bin because their hashes collided with the bin's
+              // current ryx key then those bins must be ejected.
+              //
+              // Note that we do not eject "full" bins because lazily
+              // waiting for a collision results in simpler code.
+              //
+              skc_flush(bp_atomics,
+                        bp_elems,
+                        bp_ids,
+                        bp_mask,
+                        cohort_atomics,
+                        subblocks,
+                        blocks,
+                        blocks_next,
+                        sk_v,
+                        sk_v_next,
+                        sk_extent,
+                        smem,
+                        hash,
+                        yx,
+                        is_active);
+            }
+        }
+    }
+}
+
+//
+// INITIALIZE SMEM
+//
+// Note that SIMD/SIMT have nearly the same syntax.
+//
+static
+void
+skc_smem_init(__local struct skc_subgroup_smem volatile * const smem)
+{
+  //
+  // initialize smem bins
+  //
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+  //
+  // SIMD
+  //
+  smem->bin.vN.yx    = ( SKC_RASTERIZE_YX_INIT );
+  smem->bin.vN.count = ( 0 );
+#else
+  //
+  // SIMT
+  //
+  int idx = skc_subgroup_lane();
+
+#if   ( SKC_RASTERIZE_TILE_HASH_BIN_COUNT < SKC_RASTERIZE_ELEMS_PER_SUBGROUP )
+  if (idx < SKC_RASTERIZE_TILE_HASH_BIN_COUNT)
+#elif ( SKC_RASTERIZE_TILE_HASH_BIN_COUNT > SKC_RASTERIZE_ELEMS_PER_SUBGROUP )
+  for (; idx<SKC_RASTERIZE_TILE_HASH_BIN_COUNT; idx+=SKC_RASTERIZE_SUBGROUP_SIZE)
+#endif
+    {
+      smem->bin.aN.yx   [idx] = ( SKC_RASTERIZE_YX_INIT );
+      smem->bin.aN.count[idx] = ( 0 );
+    }
+#endif
+}
+
+//
+// RASTERIZE CUBIC KERNEL
+//
+
+static
+void
+skc_rasterize_cubics(__global SKC_ATOMIC_UINT         volatile * const bp_atomics,
+                     __global union skc_bp_elem                * const bp_elems,
+                     __global uint                             * const bp_ids,
+                     skc_uint                                    const bp_mask,
+
+                     __global SKC_ATOMIC_UINT         volatile * const cohort_atomics,
+                     __global skc_ttsk_s_t                     * const sk_extent,
+
+                     __local struct skc_subgroup_smem volatile * const smem,
+
+                     skc_uint                                  * const nodeword,
+                     skc_block_id_t                            * const id,
+
+                     union skc_transform              const    * const tv,
+                     union skc_path_clip              const    * const cv,
+                     skc_uint                                    const cohort)
+{
+  //
+  // the initial segment idx and segments-per-block constant determine
+  // how many block ids will need to be loaded
+  //
+  SKC_RASTERIZE_FLOAT const c0x = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  skc_segment_next(bp_elems,nodeword,id);
+
+  SKC_RASTERIZE_FLOAT const c0y = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  skc_segment_next(bp_elems,nodeword,id);
+
+  SKC_RASTERIZE_FLOAT const c1x = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  skc_segment_next(bp_elems,nodeword,id);
+
+  SKC_RASTERIZE_FLOAT const c1y = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  skc_segment_next(bp_elems,nodeword,id);
+
+  SKC_RASTERIZE_FLOAT const c2x = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  skc_segment_next(bp_elems,nodeword,id);
+
+  SKC_RASTERIZE_FLOAT const c2y = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  skc_segment_next(bp_elems,nodeword,id);
+
+  SKC_RASTERIZE_FLOAT const c3x = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  skc_segment_next(bp_elems,nodeword,id);
+
+  SKC_RASTERIZE_FLOAT const c3y = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  //
+  // apply transform
+  //
+  // note that we only care if the end points are rounded to subpixel precision
+  //
+  // FIXME -- transformation is currently affine-only support perspective later
+  //
+  // the affine transformation requires 8 FMA + 2 ROUND operations
+  //
+  SKC_RASTERIZE_FLOAT const b0x = round(c0x * tv->sx  + c0y * tv->shx + tv->tx);
+  SKC_RASTERIZE_FLOAT const b0y = round(c0x * tv->shy + c0y * tv->sy  + tv->ty);
+
+  SKC_RASTERIZE_FLOAT const t1x = c1x * tv->sx  + c1y * tv->shx + tv->tx;
+  SKC_RASTERIZE_FLOAT const t1y = c1x * tv->shy + c1y * tv->sy  + tv->ty;
+
+  SKC_RASTERIZE_FLOAT const t2x = c2x * tv->sx  + c2y * tv->shx + tv->tx;
+  SKC_RASTERIZE_FLOAT const t2y = c2x * tv->shy + c2y * tv->sy  + tv->ty;
+
+  SKC_RASTERIZE_FLOAT const t3x = round(c3x * tv->sx  + c3y * tv->shx + tv->tx);
+  SKC_RASTERIZE_FLOAT const t3y = round(c3x * tv->shy + c3y * tv->sy  + tv->ty);
+
+  //
+  //
+  //
+#if PRINTF_ENABLE
+
+#if ( SKC_RASTERIZE_SUBGROUP_SIZE == 1 )
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A)                                         \
+  printf("{ { %.02f, %.02f }, { %.02f, %.02f },"                        \
+         "  { %.02f, %.02f }, { %.02f, %.02f } },\n",                   \
+         b0x C,b0y C,t1x C,t1y C,                                       \
+         t2x C,t2y C,t3x C,t3y C);
+
+  SKC_RASTERIZE_VECTOR_EXPAND();
+
+#else
+
+  printf("{ { %.02f, %.02f }, { %.02f, %.02f }, { %.02f, %.02f }, { %.02f, %.02f } },\n",
+         b0x,b0y,t1x,t1y,t2x,t2y,t3x,t3y);
+
+#endif
+
+#endif
+
+  //
+  // OLD APPROACH
+  // ------------
+  //
+  // The Spinel CUDA rasterizer was significantly more complex and
+  // performed a few different tasks that are probably best kept
+  // separate.
+  //
+  // The Spinel rasterizer Bezier held 4-element x and y coordinates
+  // in adjacent lanes. This simplified intermingling of single lane
+  // 4-coordinate line segments with two-lane cubic Beziers.
+  //
+  // After transformation of the input segments, the Spinel rasterizer
+  // would test cubics for flatness and, if flat, collapse the
+  // adjacent lanes into a single line lane and an empty lane.
+  //
+  // Any lines would then be appended to a line queue.
+  //
+  // Any cubics would then be subdivided.
+  //
+  // The reclassification process would be repeated.
+  //
+  // NEW APPROACH
+  // ------------
+  //
+  // Assume we're only working with cubics in this kernel.
+  //
+  // Optimization: if the line segment is a special case -- a cusp,
+  // has 1+ inflections, or a loop -- it might be beneficial to
+  // subdivide the control cage 1+ times in order to separate the
+  // flatter segments the high-velocity region(s).
+  //
+  // This means we want to split using [a,b] formulation to _directly_
+  // subdivide producing a new control cage.
+  //
+  // Wang's Formula is still useful even if we subdivide once or twice
+  // as it's so cheap that it might give some useful hints about where
+  // the high-velocity sections of curve reside.
+  //
+  // But it seems like using Wang's and directly flattening to line
+  // segments without any subdivision is good enough for the limited
+  // set of test cases that I've tried.
+  //
+  // So... use Wang's Formula to estimate how many line segment are
+  // required to properly flatten the cubics.
+  //
+  // Then use inclusive/exclusive scans to put all the lanes to work:
+  //
+  //   1. segmenting cubics to line segments
+  //
+  //   2. slivering line segments into 1-pixel high line segments
+  //
+  //   3. slivering 1-pixel high line segments into 1-pixel wide line
+  //      segments
+  //
+  // MORE BACKGROUND ON NEW APPROACH
+  // -------------------------------
+  //
+  // Two options for handling line segments:
+  //
+  // 1. append the line segments onto an SLM array until enough
+  //    work has been accrued (Spinel does this)
+  //
+  // 2. immediately sliver the potentially multi-pixel line
+  //    segments into subpixel lines
+  //
+  // The advantage of (1) is that it guarantees the slivering
+  // process will, on average, always be emitting a full subgroup
+  // of subpixel lines.
+  //
+  // The advantage of (2) is that it reduces code complexity and
+  // leaves more room for SLM tile bins. The difference between Spinel
+  // and Skia Compute is that Wang's Formula guarantees there will be
+  // a full subgroup of multi-pixel lines unless this is the final
+  // iteration of the warp of multi-pixel lines.
+  //
+  // Note that wider GPU architectures might benefit from (1) and
+  // other work accumulation strategies because it will minimize
+  // partial warp workloads in the final iteration of each stage.  It
+  // also minimizes the sunk cost of the uniform control logic steps.
+  //
+  // So let's implement (2) for now...
+  //
+
+  //
+  // And... begin!
+  //
+  // Estimate how many line segments are in quad/cubic curve.
+  //
+  // Wang's Formula will return zero if the control points are
+  // collinear but we bump it up to 1.0f.
+  //
+  SKC_RASTERIZE_FLOAT const s_segs  = skc_wangs_formula_cubic(b0x,b0y,t1x,t1y,t2x,t2y,t3x,t3y);
+
+  //
+  // if there are free registers then precalculate the reciprocal for
+  // each estimated segments since it will never change
+  //
+  SKC_RASTERIZE_FLOAT const s_denom = native_recip(s_segs);
+
+
+  //
+  // inclusive add scan of estimated line segments
+  // exclusive add scan of estimated line segments
+  // total number       of estimated line segments
+  //
+  SKC_RASTERIZE_FLOAT       s_iss   = skc_subgroup_scan_inclusive_add_float(s_segs);
+  SKC_RASTERIZE_FLOAT       s_ess   = s_iss - s_segs;
+  float                     s_rem   = skc_subgroup_last_float(s_iss); // scalar
+
+  //
+  // Precompute cubic polynomial coefficients from transformed control
+  // cage so we can shuffle them in on each iteration of the outer
+  // loop and then evaluate the polynomial in Horner form.
+  //
+  //                            |  1  0  0  0 | | c0 |
+  //                            |             | |    |
+  //                            | -3  3  0  0 | | c1 |
+  //   B(t) = [ 1 t^1 t^2 t^3 ] |             | |    |
+  //                            |  3 -6  3  0 | | c2 |
+  //                            |             | |    |
+  //                            | -1  3 -3  1 | | c3 |
+  //
+  //
+  SKC_RASTERIZE_FLOAT const b1x = mad(-3.0f,b0x,3.0f*t1x);                // 2 - 1 MAD + MUL
+  SKC_RASTERIZE_FLOAT const b1y = mad(-3.0f,b0y,3.0f*t1y);                // 2 - 1 MAD + MUL
+
+  SKC_RASTERIZE_FLOAT const b2x = mad(3.0f,b0x,mad(-6.0f,t1x,3.0f*t2x));  // 3 - 2 MAD + MUL
+  SKC_RASTERIZE_FLOAT const b2y = mad(3.0f,b0y,mad(-6.0f,t1y,3.0f*t2y));  // 3 - 2 MAD + MUL
+
+  SKC_RASTERIZE_FLOAT const b3x = mad(3.0f,t1x,mad(-3.0f,t2x,t3x)) - b0x; // 3 - 2 MAD + SUB
+  SKC_RASTERIZE_FLOAT const b3y = mad(3.0f,t1y,mad(-3.0f,t2y,t3y)) - b0y; // 3 - 2 MAD + SUB
+
+  //
+  // these values don't matter on the first iteration
+  //
+  SKC_RASTERIZE_FLOAT l1x_prev  = 0;
+  SKC_RASTERIZE_FLOAT l1y_prev  = 0;
+
+  //
+  // allocate and init in-register TTSK keys
+  //
+  skc_uint     sk_v_next = 0;
+  skc_ttsk_v_t sk_v; 
+
+  sk_v.hi = cohort;
+
+  //
+  // initialize smem
+  //
+  skc_smem_init(smem);
+
+  //
+  // initialize blocks / subblocks
+  //
+  skc_block_id_v_t blocks;
+  skc_uint         blocks_next = SKC_RASTERIZE_BLOCK_ID_V_SIZE;
+
+#if SKC_DEVICE_BLOCK_WORDS_LOG2 > SKC_DEVICE_SUBBLOCK_WORDS_LOG2
+  skc_block_id_t   subblocks   = 0;
+#endif
+
+  //
+  // loop until done
+  //
+  while (s_rem > 0)
+    {
+      //
+      // distribute work across lanes
+      //
+      SKC_RASTERIZE_UINT const s_source = skc_scatter_scan_max(smem,s_iss,s_ess);
+
+      //
+      // every lane has a fraction to work off of
+      //
+      // FIXME -- this gets expanded on SIMD
+      //
+      // if delta == 1      then this is the first lane
+      // if count == s_segs then this is the last  lane
+      //
+      SKC_RASTERIZE_FLOAT     const s_delta    = skc_delta_offset() - skc_subgroup_shuffle(s_ess,s_source);
+      SKC_RASTERIZE_FLOAT     const s_count    = skc_subgroup_shuffle(s_segs,s_source);
+
+      SKC_RASTERIZE_PREDICATE const is_s_first = (s_delta == 1.0f);
+      SKC_RASTERIZE_PREDICATE const is_s_last  = (s_delta >= s_count);
+
+      //
+      // init parametric t
+      //
+      SKC_RASTERIZE_FLOAT s_t = s_delta * skc_subgroup_shuffle(s_denom,s_source); // faster than native_recip(s_count)?
+
+      //
+      // if last then override to a hard 1.0f
+      //
+      s_t    = is_s_last ? 1.0f : s_t;
+
+      //
+      // decrement by subgroup size
+      //
+      s_iss -= SKC_RASTERIZE_ELEMS_PER_SUBGROUP;
+      s_ess -= SKC_RASTERIZE_ELEMS_PER_SUBGROUP;
+      s_rem -= SKC_RASTERIZE_ELEMS_PER_SUBGROUP;
+
+      //
+      // now every lane knows what to do and the following lines will
+      // pump out up to SUBGROUP_SIZE line segments
+      //
+      // obtain the src vertices through shared or via a shuffle
+      //
+
+      //
+      // shuffle in the polynomial coefficients their source lane
+      //
+      SKC_RASTERIZE_FLOAT const s0x = skc_subgroup_shuffle(b0x,s_source);
+      SKC_RASTERIZE_FLOAT const s0y = skc_subgroup_shuffle(b0y,s_source);
+
+      SKC_RASTERIZE_FLOAT const s1x = skc_subgroup_shuffle(b1x,s_source);
+      SKC_RASTERIZE_FLOAT const s1y = skc_subgroup_shuffle(b1y,s_source);
+
+      SKC_RASTERIZE_FLOAT const s2x = skc_subgroup_shuffle(b2x,s_source);
+      SKC_RASTERIZE_FLOAT const s2y = skc_subgroup_shuffle(b2y,s_source);
+
+      SKC_RASTERIZE_FLOAT const s3x = skc_subgroup_shuffle(b3x,s_source);
+      SKC_RASTERIZE_FLOAT const s3y = skc_subgroup_shuffle(b3y,s_source);
+
+      //
+      // calculate "right" line segment endpoint using Horner form
+      //
+      SKC_RASTERIZE_FLOAT       l1x = round(mad(mad(mad(s3x,s_t,s2x),s_t,s1x),s_t,s0x)); // 3 MAD + ROUND
+      SKC_RASTERIZE_FLOAT       l1y = round(mad(mad(mad(s3y,s_t,s2y),s_t,s1y),s_t,s0y)); // 3 MAD + ROUND
+
+      //
+      // shuffle up "left" line segment endpoint
+      //
+      // NOTE: Intel's shuffle_up is unique with its elegant
+      // "previous" argument so don't get used to it
+      //
+      SKC_RASTERIZE_FLOAT       l0x = skc_subgroup_shuffle_up_1(l1x_prev,l1x);
+      SKC_RASTERIZE_FLOAT       l0y = skc_subgroup_shuffle_up_1(l1y_prev,l1y);
+
+      //
+      // save previous right endpoint
+      //
+      l1x_prev = l1x;
+      l1y_prev = l1y;
+
+      //
+      // override shuffle up if this is the first line segment
+      //
+      l0x = select(l0x,s0x,is_s_first);
+      l0y = select(l0y,s0y,is_s_first);
+
+      //
+      // sliver lines
+      //
+      skc_sliver(bp_atomics,
+                 bp_elems,
+                 bp_ids,
+                 bp_mask,
+                 cohort_atomics,
+                 &subblocks,
+                 &blocks,
+                 &blocks_next,
+                 &sk_v,
+                 &sk_v_next,
+                 sk_extent,
+                 smem,
+                 l0x,l0y,l1x,l1y);
+    }
+
+  //
+  // - flush work-in-progress blocks
+  // - return unused block ids
+  //
+  skc_finalize(bp_atomics,
+               bp_elems,
+               bp_ids,
+               bp_mask,
+               cohort_atomics,
+               &blocks,
+               blocks_next,
+               &sk_v,
+               sk_v_next,
+               sk_extent,
+               smem);
+}
+
+//
+// RASTERIZE QUAD KERNEL
+//
+
+static
+void
+skc_rasterize_quads(__global SKC_ATOMIC_UINT         volatile * const bp_atomics,
+                    __global union skc_bp_elem                * const bp_elems,
+                    __global uint                             * const bp_ids,
+                    skc_uint                                    const bp_mask,
+
+                    __global SKC_ATOMIC_UINT         volatile * const cohort_atomics,
+                    __global skc_ttsk_s_t                     * const sk_extent,
+
+                    __local struct skc_subgroup_smem volatile * const smem,
+                    
+                    skc_uint                                  * const nodeword,
+                    skc_block_id_t                            * const id,
+
+                    union skc_transform              const    * const tv,
+                    union skc_path_clip              const    * const cv,
+                    skc_uint                                    const cohort)
+{
+  //
+  // the initial segment idx and segments-per-block constant determine
+  // how many block ids will need to be loaded
+  //
+  SKC_RASTERIZE_FLOAT const c0x = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  skc_segment_next(bp_elems,nodeword,id);
+
+  SKC_RASTERIZE_FLOAT const c0y = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  skc_segment_next(bp_elems,nodeword,id);
+
+  SKC_RASTERIZE_FLOAT const c1x = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  skc_segment_next(bp_elems,nodeword,id);
+
+  SKC_RASTERIZE_FLOAT const c1y = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  skc_segment_next(bp_elems,nodeword,id);
+
+  SKC_RASTERIZE_FLOAT const c2x = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  skc_segment_next(bp_elems,nodeword,id);
+
+  SKC_RASTERIZE_FLOAT const c2y = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  //
+  // apply transform
+  //
+  // note that we only care if the end points are rounded to subpixel precision
+  //
+  // FIXME -- transformation is currently affine-only support perspective later
+  //
+  // the affine transformation requires 8 FMA + 2 ROUND operations
+  //
+  SKC_RASTERIZE_FLOAT const b0x = round(c0x * tv->sx  + c0y * tv->shx + tv->tx);
+  SKC_RASTERIZE_FLOAT const b0y = round(c0x * tv->shy + c0y * tv->sy  + tv->ty);
+
+  SKC_RASTERIZE_FLOAT const t1x = c1x * tv->sx  + c1y * tv->shx + tv->tx;
+  SKC_RASTERIZE_FLOAT const t1y = c1x * tv->shy + c1y * tv->sy  + tv->ty;
+
+  SKC_RASTERIZE_FLOAT const t2x = round(c2x * tv->sx  + c2y * tv->shx + tv->tx);
+  SKC_RASTERIZE_FLOAT const t2y = round(c2x * tv->shy + c2y * tv->sy  + tv->ty);
+
+  //
+  // Estimate how many line segments are in quad/cubic curve.
+  //
+  // Wang's Formula will return zero if the control points are
+  // collinear but we bump it up to 1.0f.
+  //
+  SKC_RASTERIZE_FLOAT const s_segs  = skc_wangs_formula_quadratic(b0x,b0y,t1x,t1y,t2x,t2y);
+
+  //
+  // if there are free registers then precalculate the reciprocal for
+  // each estimated segments since it will never change
+  //
+  SKC_RASTERIZE_FLOAT const s_denom = native_recip(s_segs);
+
+
+  //
+  // inclusive add scan of estimated line segments
+  // exclusive add scan of estimated line segments
+  // total number       of estimated line segments
+  //
+  SKC_RASTERIZE_FLOAT       s_iss   = skc_subgroup_scan_inclusive_add_float(s_segs);
+  SKC_RASTERIZE_FLOAT       s_ess   = s_iss - s_segs;
+  float                     s_rem   = skc_subgroup_last_float(s_iss); // scalar
+
+  //
+  // Precompute quadratic polynomial coefficients from control cage so
+  // we can shuffle them in on each iteration of the outer loop and
+  // then evaluate the polynomial in Horner form.
+  //
+
+  //                        |  1  0  0  | | c0 |
+  //                        |           | |    |
+  //   B(t) = [ 1 t^1 t^2 ] | -2  2  0  | | c1 |
+  //                        |           | |    |
+  //                        |  1 -2  1  | | c2 |
+  //
+  //
+  SKC_RASTERIZE_FLOAT const b1x = mad(-2.0f,b0x,2.0f*t1x); // 2 - 1 MAD + MUL
+  SKC_RASTERIZE_FLOAT const b1y = mad(-2.0f,b0y,2.0f*t1y); // 2 - 1 MAD + MUL
+
+  SKC_RASTERIZE_FLOAT const b2x = mad(-2.0f,t1x,b0x+t2x);  // 2 - 1 MAD + ADD
+  SKC_RASTERIZE_FLOAT const b2y = mad(-2.0f,t1y,b0y+t2y);  // 2 - 1 MAD + ADD
+
+  //
+  // these values don't matter on the first iteration
+  //
+  SKC_RASTERIZE_FLOAT l1x_prev  = 0;
+  SKC_RASTERIZE_FLOAT l1y_prev  = 0;
+
+  //
+  // allocate and init in-register TTSK keys
+  //
+  skc_uint     sk_v_next = 0;
+  skc_ttsk_v_t sk_v; 
+
+  sk_v.hi = cohort;
+
+  //
+  // initialize smem
+  //
+  skc_smem_init(smem);
+
+  //
+  // initialize blocks / subblocks
+  //
+  skc_block_id_v_t blocks;
+  skc_uint         blocks_next = SKC_RASTERIZE_BLOCK_ID_V_SIZE;
+
+#if SKC_DEVICE_BLOCK_WORDS_LOG2 > SKC_DEVICE_SUBBLOCK_WORDS_LOG2
+  skc_block_id_t   subblocks   = 0;
+#endif
+
+  //
+  // loop until done
+  //
+  while (s_rem > 0)
+    {
+      //
+      // distribute work across lanes
+      //
+      SKC_RASTERIZE_UINT const s_source = skc_scatter_scan_max(smem,s_iss,s_ess);
+
+      //
+      // every lane has a fraction to work off of
+      //
+      // FIXME -- this gets expanded on SIMD
+      //
+      // if delta == 1      then this is the first lane
+      // if count == s_segs then this is the last  lane
+      //
+      SKC_RASTERIZE_FLOAT     const s_delta    = skc_delta_offset() - skc_subgroup_shuffle(s_ess,s_source);
+      SKC_RASTERIZE_FLOAT     const s_count    = skc_subgroup_shuffle(s_segs,s_source);
+
+      SKC_RASTERIZE_PREDICATE const is_s_first = (s_delta == 1.0f);
+      SKC_RASTERIZE_PREDICATE const is_s_last  = (s_delta >= s_count);
+
+      //
+      // init parametric t
+      //
+      SKC_RASTERIZE_FLOAT s_t = s_delta * skc_subgroup_shuffle(s_denom,s_source); // faster than native_recip(s_count)?
+
+      //
+      // if last then override to a hard 1.0f
+      //
+      s_t    = is_s_last ? 1.0f : s_t;
+
+      //
+      // decrement by subgroup size
+      //
+      s_iss -= SKC_RASTERIZE_ELEMS_PER_SUBGROUP;
+      s_ess -= SKC_RASTERIZE_ELEMS_PER_SUBGROUP;
+      s_rem -= SKC_RASTERIZE_ELEMS_PER_SUBGROUP;
+
+      //
+      // now every lane knows what to do and the following lines will
+      // pump out up to SUBGROUP_SIZE line segments
+      //
+      // obtain the src vertices through shared or via a shuffle
+      //
+
+      //
+      // shuffle in the polynomial coefficients their source lane
+      //
+      SKC_RASTERIZE_FLOAT const s0x = skc_subgroup_shuffle(b0x,s_source);
+      SKC_RASTERIZE_FLOAT const s0y = skc_subgroup_shuffle(b0y,s_source);
+
+      SKC_RASTERIZE_FLOAT const s1x = skc_subgroup_shuffle(b1x,s_source);
+      SKC_RASTERIZE_FLOAT const s1y = skc_subgroup_shuffle(b1y,s_source);
+
+      SKC_RASTERIZE_FLOAT const s2x = skc_subgroup_shuffle(b2x,s_source);
+      SKC_RASTERIZE_FLOAT const s2y = skc_subgroup_shuffle(b2y,s_source);
+
+      //
+      // calculate "right" line segment endpoint using Horner form
+      //
+      SKC_RASTERIZE_FLOAT       l1x = round(mad(mad(s2x,s_t,s1x),s_t,s0x)); // 2 MAD + ROUND
+      SKC_RASTERIZE_FLOAT       l1y = round(mad(mad(s2y,s_t,s1y),s_t,s0y)); // 2 MAD + ROUND
+
+      //
+      // shuffle up "left" line segment endpoint
+      //
+      // NOTE: Intel's shuffle_up is unique with its elegant
+      // "previous" argument so don't get used to it
+      //
+      SKC_RASTERIZE_FLOAT       l0x = skc_subgroup_shuffle_up_1(l1x_prev,l1x);
+      SKC_RASTERIZE_FLOAT       l0y = skc_subgroup_shuffle_up_1(l1y_prev,l1y);
+
+      //
+      // save previous right endpoint
+      //
+      l1x_prev = l1x;
+      l1y_prev = l1y;
+
+      //
+      // override shuffle up if this is the first line segment
+      //
+      l0x = select(l0x,s0x,is_s_first);
+      l0y = select(l0y,s0y,is_s_first);
+
+      //
+      // sliver lines
+      //
+      skc_sliver(bp_atomics,
+                 bp_elems,
+                 bp_ids,
+                 bp_mask,
+                 cohort_atomics,
+                 &subblocks,
+                 &blocks,
+                 &blocks_next,
+                 &sk_v,
+                 &sk_v_next,
+                 sk_extent,
+                 smem,
+                 l0x,l0y,l1x,l1y);
+    }
+
+  //
+  // - flush work-in-progress blocks
+  // - return unused block ids
+  //
+  skc_finalize(bp_atomics,
+               bp_elems,
+               bp_ids,
+               bp_mask,
+               cohort_atomics,
+               &blocks,
+               blocks_next,
+               &sk_v,
+               sk_v_next,
+               sk_extent,
+               smem);
+}
+
+//
+// RASTERIZE LINE KERNEL
+//
+
+static
+void
+skc_rasterize_lines(__global SKC_ATOMIC_UINT         volatile * const bp_atomics,
+                    __global union skc_bp_elem                * const bp_elems,
+                    __global uint                             * const bp_ids,
+                    skc_uint                                    const bp_mask,
+
+                    __global SKC_ATOMIC_UINT         volatile * const cohort_atomics,
+                    __global skc_ttsk_s_t                     * const sk_extent,
+
+                    __local struct skc_subgroup_smem volatile * const smem,
+                    
+                    skc_uint                                  * const nodeword,
+                    skc_block_id_t                            * const id,
+
+                    union skc_transform              const    * const tv,
+                    union skc_path_clip              const    * const cv,
+                    skc_uint                                    const cohort)
+{
+  //
+  // the initial segment idx and segments-per-block constant determine
+  // how many block ids will need to be loaded
+  //
+  SKC_RASTERIZE_FLOAT const c0x = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  skc_segment_next(bp_elems,nodeword,id);
+
+  SKC_RASTERIZE_FLOAT const c0y = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  skc_segment_next(bp_elems,nodeword,id);
+
+  SKC_RASTERIZE_FLOAT const c1x = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+  skc_segment_next(bp_elems,nodeword,id);
+
+  SKC_RASTERIZE_FLOAT const c1y = bp_elems[SKC_RASTERIZE_SEGMENT(*id)].coord;
+
+#if 0
+  // printf("%5u : { { %5.0f, %5.0f }, { %5.0f, %5.0f } },\n",(skc_uint)get_global_id(0),c0x,c0y,c1x,c1y);
+  printf("{ { %5.0f, %5.0f }, { %5.0f, %5.0f } },\n",c0x,c0y,c1x,c1y);
+#endif
+
+  //
+  // apply transform
+  //
+  // note that we only care if the end points are rounded to subpixel precision
+  //
+  // FIXME -- transformation is currently affine-only
+  // FIXME -- support perspective later
+  //
+  // the affine transformation requires 8 FMA + 4 ROUND operations
+  //
+  SKC_RASTERIZE_FLOAT const l0x = round(c0x * tv->sx  + c0y * tv->shx + tv->tx);
+  SKC_RASTERIZE_FLOAT const l0y = round(c0x * tv->shy + c0y * tv->sy  + tv->ty);
+
+  SKC_RASTERIZE_FLOAT const l1x = round(c1x * tv->sx  + c1y * tv->shx + tv->tx);
+  SKC_RASTERIZE_FLOAT const l1y = round(c1x * tv->shy + c1y * tv->sy  + tv->ty);
+
+#if 0
+  printf("{ { %5.0f, %5.0f }, { %5.0f, %5.0f } },\n",l0x,l0y,l1x,l1y);
+#endif
+
+  //
+  // allocate and init in-register TTSK keys
+  //
+  skc_uint     sk_v_next = 0;
+  skc_ttsk_v_t sk_v; 
+
+  sk_v.hi = cohort;
+
+  //
+  // initialize smem
+  //
+  skc_smem_init(smem);
+
+  //
+  // initialize blocks / subblocks
+  //
+  skc_block_id_v_t blocks;
+  skc_uint         blocks_next = SKC_RASTERIZE_BLOCK_ID_V_SIZE;
+
+#if SKC_DEVICE_BLOCK_WORDS_LOG2 > SKC_DEVICE_SUBBLOCK_WORDS_LOG2
+  skc_block_id_t   subblocks   = 0;
+#endif
+
+  //
+  // sliver lines
+  //
+  skc_sliver(bp_atomics,
+             bp_elems,
+             bp_ids,
+             bp_mask,
+             cohort_atomics,
+             &subblocks,
+             &blocks,
+             &blocks_next,
+             &sk_v,
+             &sk_v_next,
+             sk_extent,
+             smem,
+             l0x,l0y,l1x,l1y);
+
+  //
+  // - flush work-in-progress blocks
+  // - return unused block ids
+  //
+  skc_finalize(bp_atomics,
+               bp_elems,
+               bp_ids,
+               bp_mask,
+               cohort_atomics,
+               &blocks,
+               blocks_next,
+               &sk_v,
+               sk_v_next,
+               sk_extent,
+               smem);
+}
+
+//
+//
+//
+
+__kernel
+SKC_RASTERIZE_KERNEL_ATTRIBS
+void
+skc_kernel_rasterize_all(__global SKC_ATOMIC_UINT         volatile * const bp_atomics,
+                         __global union skc_bp_elem                * const bp_elems,
+                         __global uint                             * const bp_ids,
+                         skc_uint                                    const bp_mask,
+
+                         __global SKC_ATOMIC_UINT         volatile * const cohort_atomics,
+                         __global skc_ttsk_s_t                     * const sk_extent,
+
+                         __global float8                  const    * const transforms, // FIXME -- __constant
+                         __global float4                  const    * const clips,      // FIXME -- __constant
+                         __global union skc_cmd_rasterize const    * const cmds,       // FIXME -- __constant
+                         skc_uint                                    const count)
+{
+  //
+  // declare shared memory block
+  //
+#if ( SKC_RASTERIZE_WORKGROUP_SUBGROUPS == 1 )
+  __local struct skc_subgroup_smem volatile                smem[1];
+#else
+  __local struct skc_subgroup_smem volatile                smem_wg[SKC_RASTERIZE_WORKGROUP_SUBGROUPS];
+  __local struct skc_subgroup_smem volatile * const smem = smem_wg + get_sub_group_id();
+#endif
+  
+  //
+  // this is a subgroup/warp-centric kernel
+  //
+  // which subgroup in the grid is this?
+  //
+  // TAKE NOTE: the Intel GEN compiler appears to be recognizing
+  // get_group_id(0) as a uniform but the alternative calculation used
+  // when there are multiple subgroups per workgroup is not
+  // cooperating and driving spillage elsewhere.
+  //
+#if ( SKC_RASTERIZE_WORKGROUP_SUBGROUPS == 1 )
+  uint const cmd_idx = get_group_id(0);
+#else
+  uint const cmd_idx = get_group_id(0) * SKC_RASTERIZE_WORKGROUP_SUBGROUPS + get_sub_group_id();
+#endif
+
+#if 0
+  if (get_sub_group_local_id() == 0)
+    printf("+cmd_idx = %u\n",cmd_idx);
+#endif
+
+  //
+  // if worksgroups are multi-subgroup then there may be excess
+  // subgroups in the final workgroup
+  //
+  if (cmd_idx >= count)
+    return;
+
+#if 0
+  if (get_sub_group_local_id() == 0)
+    printf("-cmd_idx = %u\n",cmd_idx);
+#endif
+
+  //
+  // load a single command for this subgroup
+  //
+  union skc_cmd_rasterize const cmd = cmds[cmd_idx];
+
+#if 0
+  if (get_sub_group_local_id() == 0)
+    printf("[ %u ]< %u, %u, %u, %u >\n",
+           cmd_idx,
+           cmd.nodeword,
+           SKC_CMD_RASTERIZE_GET_TRANSFORM(cmd),
+           SKC_CMD_RASTERIZE_GET_CLIP(cmd),
+           SKC_CMD_RASTERIZE_GET_COHORT(cmd));
+#endif
+
+  //
+  // get first block node command word and its subblock
+  //
+  skc_uint              nodeword = cmd.nodeword; // nodeword has word-addressing
+  skc_tagged_block_id_t tag_id   = bp_elems[nodeword].tag_id;
+  skc_block_id_tag      tag      = SKC_TAGGED_BLOCK_ID_GET_TAG(tag_id);
+  skc_block_id_t        id       = SKC_TAGGED_BLOCK_ID_GET_ID(tag_id);
+
+  //
+  // load transform -- uniform across subgroup
+  //
+  // v8: { sx shx tx shy sy ty w0 w1 }
+  //
+  // NOTE THAT WE'RE SCALING UP THE TRANSFORM BY:
+  //
+  //   [ SKC_SUBPIXEL_RESL_X_F32, SKC_SUBPIXEL_RESL_Y_F32, 1.0f ]
+  //
+  // Coordinates are scaled to subpixel resolution.  All that matters
+  // is that continuity is maintained between end path element
+  // endpoints.
+  //
+  // It's the responsibility of the host to ensure that the transforms
+  // are properly scaled either via intitializing a transform stack
+  // with the subpixel resolution scaled identity or scaling the
+  // transform before its loaded by a rasterization grid.
+  //
+  // FIXME -- horizontal load might be better than this broadcast load
+  //
+  union skc_transform const tv     = { .f32v8 = transforms[SKC_CMD_RASTERIZE_GET_TRANSFORM(cmd)] }; // uniform load
+  union skc_path_clip const cv     = { .f32v4 = clips     [SKC_CMD_RASTERIZE_GET_CLIP(cmd)     ] }; // uniform load
+  skc_uint            const cohort = SKC_CMD_RASTERIZE_MASK_COHORT(cmd); // shifted
+
+  switch (tag)
+    {
+    case SKC_BLOCK_ID_TAG_PATH_LINE:
+      skc_rasterize_lines(bp_atomics,
+                          bp_elems,
+                          bp_ids,
+                          bp_mask,
+                          cohort_atomics,
+                          sk_extent,
+                          smem,
+                          &nodeword,&id,
+                          &tv,&cv,cohort);
+      break;
+
+    case SKC_BLOCK_ID_TAG_PATH_QUAD:
+      skc_rasterize_quads(bp_atomics,
+                          bp_elems,
+                          bp_ids,
+                          bp_mask,
+                          cohort_atomics,
+                          sk_extent,
+                          smem,
+                          &nodeword,&id,
+                          &tv,&cv,cohort);
+      break;
+
+    case SKC_BLOCK_ID_TAG_PATH_CUBIC:
+      skc_rasterize_cubics(bp_atomics,
+                           bp_elems,
+                           bp_ids,
+                           bp_mask,
+                           cohort_atomics,
+                           sk_extent,
+                           smem,
+                           &nodeword,&id,
+                           &tv,&cv,cohort);
+      break;
+
+    case SKC_BLOCK_ID_TAG_PATH_RAT_QUAD:
+      break;
+    case SKC_BLOCK_ID_TAG_PATH_RAT_CUBIC:
+      break;
+
+    default:
+      break;
+    }
+}
+
+//
+//
+//
+
+__kernel
+SKC_RASTERIZE_KERNEL_ATTRIBS
+void
+skc_kernel_rasterize_lines(__global SKC_ATOMIC_UINT         volatile * const bp_atomics,
+                           __global union skc_bp_elem                * const bp_elems,
+                           __global uint                             * const bp_ids,
+                           skc_uint                                    const bp_mask,
+
+                           __global SKC_ATOMIC_UINT         volatile * const cohort_atomics,
+                           __global skc_ttsk_s_t                     * const sk_extent,
+
+                           __global float8                  const    * const transforms, // FIXME -- __constant
+                           __global float4                  const    * const clips,      // FIXME -- __constant
+                           __global union skc_cmd_rasterize const    * const cmds,       // FIXME -- __constant
+                           skc_uint                                    const count)
+{
+  //
+  // declare shared memory block
+  //
+#if ( SKC_RASTERIZE_WORKGROUP_SUBGROUPS == 1 )
+  __local struct skc_subgroup_smem volatile                smem[1];
+#else
+  __local struct skc_subgroup_smem volatile                smem_wg[SKC_RASTERIZE_WORKGROUP_SUBGROUPS];
+  __local struct skc_subgroup_smem volatile * const smem = smem_wg + get_sub_group_id();
+#endif
+  
+  //
+  // this is a subgroup/warp-centric kernel
+  //
+  // which subgroup in the grid is this?
+  //
+  // TAKE NOTE: the Intel GEN compiler appears to be recognizing
+  // get_group_id(0) as a uniform but the alternative calculation used
+  // when there are multiple subgroups per workgroup is not
+  // cooperating and driving spillage elsewhere.
+  //
+#if ( SKC_RASTERIZE_WORKGROUP_SUBGROUPS == 1 )
+  uint const cmd_idx = get_group_id(0);
+#else
+  uint const cmd_idx = get_group_id(0) * SKC_RASTERIZE_WORKGROUP_SUBGROUPS + get_sub_group_id();
+#endif
+
+  //
+  // if worksgroups are multi-subgroup then there may be excess
+  // subgroups in the final workgroup
+  //
+  if (cmd_idx >= count)
+    return;
+
+#if 0
+  if (get_sub_group_local_id() == 0)
+    printf("cmd_idx = %u\n",cmd_idx);
+#endif
+
+  //
+  // load a single command for this subgroup
+  //
+  union skc_cmd_rasterize const cmd = cmds[cmd_idx];
+
+  //
+  // get first block node command word and its subblock
+  //
+  skc_uint              nodeword = cmd.nodeword; // nodeword has word-addressing
+  skc_tagged_block_id_t tag_id   = bp_elems[nodeword].tag_id;
+  skc_block_id_t        id       = SKC_TAGGED_BLOCK_ID_GET_ID(tag_id);
+
+  //
+  // load transform -- uniform across subgroup
+  //
+  // v8: { sx shx tx shy sy ty w0 w1 }
+  //
+  // NOTE THAT WE'RE SCALING UP THE TRANSFORM BY:
+  //
+  //   [ SKC_SUBPIXEL_RESL_X_F32, SKC_SUBPIXEL_RESL_Y_F32, 1.0f ]
+  //
+  // Coordinates are scaled to subpixel resolution.  All that matters
+  // is that continuity is maintained between end path element
+  // endpoints.
+  //
+  // It's the responsibility of the host to ensure that the transforms
+  // are properly scaled either via intitializing a transform stack
+  // with the subpixel resolution scaled identity or scaling the
+  // transform before its loaded by a rasterization grid.
+  //
+  // FIXME -- horizontal load might be better than this broadcast load
+  //
+  union skc_transform const tv     = { .f32v8 = transforms[SKC_CMD_RASTERIZE_GET_TRANSFORM(cmd)] }; // uniform load
+  union skc_path_clip const cv     = { .f32v4 = clips     [SKC_CMD_RASTERIZE_GET_CLIP(cmd)     ] }; // uniform load
+  skc_uint            const cohort = SKC_CMD_RASTERIZE_MASK_COHORT(cmd); // shifted
+
+  skc_rasterize_lines(bp_atomics,
+                      bp_elems,
+                      bp_ids,
+                      bp_mask,
+                      cohort_atomics,
+                      sk_extent,
+                      smem,
+                      &nodeword,&id,
+                      &tv,&cv,cohort);
+}
+
+//
+//
+//
+
+//
+//
+//
+
+__kernel
+SKC_RASTERIZE_KERNEL_ATTRIBS
+void
+skc_kernel_rasterize_quads(__global SKC_ATOMIC_UINT         volatile * const bp_atomics,
+                           __global union skc_bp_elem                * const bp_elems,
+                           __global uint                             * const bp_ids,
+                           skc_uint                                    const bp_mask,
+
+                           __global SKC_ATOMIC_UINT         volatile * const cohort_atomics,
+                           __global skc_ttsk_s_t                     * const sk_extent,
+
+                           __global float8                  const    * const transforms, // FIXME -- __constant
+                           __global float4                  const    * const clips,      // FIXME -- __constant
+                           __global union skc_cmd_rasterize const    * const cmds,       // FIXME -- __constant
+                           skc_uint                                    const count)
+{
+  //
+  // declare shared memory block
+  //
+#if ( SKC_RASTERIZE_WORKGROUP_SUBGROUPS == 1 )
+  __local struct skc_subgroup_smem volatile                smem[1];
+#else
+  __local struct skc_subgroup_smem volatile                smem_wg[SKC_RASTERIZE_WORKGROUP_SUBGROUPS];
+  __local struct skc_subgroup_smem volatile * const smem = smem_wg + get_sub_group_id();
+#endif
+  
+  //
+  // this is a subgroup/warp-centric kernel
+  //
+  // which subgroup in the grid is this?
+  //
+  // TAKE NOTE: the Intel GEN compiler appears to be recognizing
+  // get_group_id(0) as a uniform but the alternative calculation used
+  // when there are multiple subgroups per workgroup is not
+  // cooperating and driving spillage elsewhere.
+  //
+#if ( SKC_RASTERIZE_WORKGROUP_SUBGROUPS == 1 )
+  uint const cmd_idx = get_group_id(0);
+#else
+  uint const cmd_idx = get_group_id(0) * SKC_RASTERIZE_WORKGROUP_SUBGROUPS + get_sub_group_id();
+#endif
+
+  //
+  // if worksgroups are multi-subgroup then there may be excess
+  // subgroups in the final workgroup
+  //
+  if (cmd_idx >= count)
+    return;
+
+#if 0
+  if (get_sub_group_local_id() == 0)
+    printf("cmd_idx = %u\n",cmd_idx);
+#endif
+
+  //
+  // load a single command for this subgroup
+  //
+  union skc_cmd_rasterize const cmd = cmds[cmd_idx];
+
+  //
+  // get first block node command word and its subblock
+  //
+  skc_uint              nodeword = cmd.nodeword; // nodeword has word-addressing
+  skc_tagged_block_id_t tag_id   = bp_elems[nodeword].tag_id;
+  skc_block_id_t        id       = SKC_TAGGED_BLOCK_ID_GET_ID(tag_id);
+
+  //
+  // load transform -- uniform across subgroup
+  //
+  // v8: { sx shx tx shy sy ty w0 w1 }
+  //
+  // NOTE THAT WE'RE SCALING UP THE TRANSFORM BY:
+  //
+  //   [ SKC_SUBPIXEL_RESL_X_F32, SKC_SUBPIXEL_RESL_Y_F32, 1.0f ]
+  //
+  // Coordinates are scaled to subpixel resolution.  All that matters
+  // is that continuity is maintained between end path element
+  // endpoints.
+  //
+  // It's the responsibility of the host to ensure that the transforms
+  // are properly scaled either via intitializing a transform stack
+  // with the subpixel resolution scaled identity or scaling the
+  // transform before its loaded by a rasterization grid.
+  //
+  // FIXME -- horizontal load might be better than this broadcast load
+  //
+  union skc_transform const tv     = { .f32v8 = transforms[SKC_CMD_RASTERIZE_GET_TRANSFORM(cmd)] }; // uniform load
+  union skc_path_clip const cv     = { .f32v4 = clips     [SKC_CMD_RASTERIZE_GET_CLIP(cmd)     ] }; // uniform load
+  skc_uint            const cohort = SKC_CMD_RASTERIZE_MASK_COHORT(cmd); // shifted
+
+  skc_rasterize_quads(bp_atomics,
+                      bp_elems,
+                      bp_ids,
+                      bp_mask,
+                      cohort_atomics,
+                      sk_extent,
+                      smem,
+                      &nodeword,&id,
+                      &tv,&cv,cohort);
+}
+
+//
+//
+//
+
+__kernel
+SKC_RASTERIZE_KERNEL_ATTRIBS
+void
+skc_kernel_rasterize_cubics(__global SKC_ATOMIC_UINT         volatile * const bp_atomics,
+                            __global union skc_bp_elem                * const bp_elems,
+                            __global uint                             * const bp_ids,
+                            skc_uint                                    const bp_mask,
+
+                            __global SKC_ATOMIC_UINT         volatile * const cohort_atomics,
+                            __global skc_ttsk_s_t                     * const sk_extent,
+
+                            __global float8                  const    * const transforms, // FIXME -- __constant
+                            __global float4                  const    * const clips,      // FIXME -- __constant
+                            __global union skc_cmd_rasterize const    * const cmds,       // FIXME -- __constant
+                            skc_uint                                    const count)
+{
+  //
+  // declare shared memory block
+  //
+#if ( SKC_RASTERIZE_WORKGROUP_SUBGROUPS == 1 )
+  __local struct skc_subgroup_smem volatile                smem[1];
+#else
+  __local struct skc_subgroup_smem volatile                smem_wg[SKC_RASTERIZE_WORKGROUP_SUBGROUPS];
+  __local struct skc_subgroup_smem volatile * const smem = smem_wg + get_sub_group_id();
+#endif
+  
+  //
+  // this is a subgroup/warp-centric kernel
+  //
+  // which subgroup in the grid is this?
+  //
+  // TAKE NOTE: the Intel GEN compiler appears to be recognizing
+  // get_group_id(0) as a uniform but the alternative calculation used
+  // when there are multiple subgroups per workgroup is not
+  // cooperating and driving spillage elsewhere.
+  //
+#if ( SKC_RASTERIZE_WORKGROUP_SUBGROUPS == 1 )
+  uint const cmd_idx = get_group_id(0);
+#else
+  uint const cmd_idx = get_group_id(0) * SKC_RASTERIZE_WORKGROUP_SUBGROUPS + get_sub_group_id();
+#endif
+
+  //
+  // if worksgroups are multi-subgroup then there may be excess
+  // subgroups in the final workgroup
+  //
+  if (cmd_idx >= count)
+    return;
+
+#if 0
+  if (get_sub_group_local_id() == 0)
+    printf("cmd_idx = %u\n",cmd_idx);
+#endif
+
+  //
+  // load a single command for this subgroup
+  //
+  union skc_cmd_rasterize const cmd = cmds[cmd_idx];
+
+  //
+  // get first block node command word and its subblock
+  //
+  skc_uint              nodeword = cmd.nodeword; // nodeword has word-addressing
+  skc_tagged_block_id_t tag_id   = bp_elems[nodeword].tag_id;
+  skc_block_id_t        id       = SKC_TAGGED_BLOCK_ID_GET_ID(tag_id);
+
+  //
+  // load transform -- uniform across subgroup
+  //
+  // v8: { sx shx tx shy sy ty w0 w1 }
+  //
+  // NOTE THAT WE'RE SCALING UP THE TRANSFORM BY:
+  //
+  //   [ SKC_SUBPIXEL_RESL_X_F32, SKC_SUBPIXEL_RESL_Y_F32, 1.0f ]
+  //
+  // Coordinates are scaled to subpixel resolution.  All that matters
+  // is that continuity is maintained between end path element
+  // endpoints.
+  //
+  // It's the responsibility of the host to ensure that the transforms
+  // are properly scaled either via intitializing a transform stack
+  // with the subpixel resolution scaled identity or scaling the
+  // transform before its loaded by a rasterization grid.
+  //
+  // FIXME -- horizontal load might be better than this broadcast load
+  //
+  union skc_transform const tv     = { .f32v8 = transforms[SKC_CMD_RASTERIZE_GET_TRANSFORM(cmd)] }; // uniform load
+  union skc_path_clip const cv     = { .f32v4 = clips     [SKC_CMD_RASTERIZE_GET_CLIP(cmd)     ] }; // uniform load
+  skc_uint            const cohort = SKC_CMD_RASTERIZE_MASK_COHORT(cmd); // shifted
+
+  skc_rasterize_cubics(bp_atomics,
+                       bp_elems,
+                       bp_ids,
+                       bp_mask,
+                       cohort_atomics,
+                       sk_extent,
+                       smem,
+                       &nodeword,&id,
+                       &tv,&cv,cohort);
+}
+
+//
+//
+//
+
+__kernel
+SKC_RASTERIZE_KERNEL_ATTRIBS
+void
+skc_kernel_rasterize_rat_quads(__global SKC_ATOMIC_UINT         volatile * const bp_atomics,
+                               __global union skc_bp_elem                * const bp_elems,
+                               __global uint                             * const bp_ids,
+                               skc_uint                                    const bp_mask,
+
+                               __global SKC_ATOMIC_UINT         volatile * const cohort_atomics,
+                               __global skc_ttsk_s_t                     * const sk_extent,
+
+                               __global float8                  const    * const transforms, // FIXME -- __constant
+                               __global float4                  const    * const clips,      // FIXME -- __constant
+                               __global union skc_cmd_rasterize const    * const cmds,       // FIXME -- __constant
+                               skc_uint                                    const count)
+{
+  ;
+}
+
+//
+//
+//
+
+__kernel
+SKC_RASTERIZE_KERNEL_ATTRIBS
+void
+skc_kernel_rasterize_rat_cubics(__global SKC_ATOMIC_UINT         volatile * const bp_atomics,
+                                __global union skc_bp_elem                * const bp_elems,
+                                __global uint                             * const bp_ids,
+                                skc_uint                                    const bp_mask,
+
+                                __global SKC_ATOMIC_UINT         volatile * const cohort_atomics,
+                                __global skc_ttsk_s_t                     * const sk_extent,
+
+                                __global float8                  const    * const transforms, // FIXME -- __constant
+                                __global float4                  const    * const clips,      // FIXME -- __constant
+                                __global union skc_cmd_rasterize const    * const cmds,       // FIXME -- __constant
+                                skc_uint                                    const count)
+{
+  ;
+}
+
+//
+//
+//
diff --git a/src/compute/skc/rasters_alloc.cl b/src/compute/skc/rasters_alloc.cl
new file mode 100644
index 0000000..f8f76a7
--- /dev/null
+++ b/src/compute/skc/rasters_alloc.cl
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include "device_cl_12_gen9.h"
+#include "raster_builder_cl_12.h"
+#include "block_pool_cl.h"
+#include "atomic_cl.h"
+#include "raster.h"
+#include "tile.h"
+
+//
+// There is a fixed-size meta table per raster cohort that we use to
+// peform a mostly coalesced sizing and allocation of blocks.
+//
+// This code is simple and fast.
+//
+
+__kernel
+SKC_RASTERS_ALLOC_KERNEL_ATTRIBS
+void
+skc_kernel_rasters_alloc(__global SKC_ATOMIC_UINT volatile * const bp_atomics,
+                         __global skc_block_id_t  const    * const bp_ids,
+                         skc_uint                            const bp_mask, // pow2 modulo mask for block pool ring
+                         __global skc_block_id_t           * const map,
+                         __global skc_uint                 * const metas,
+                         __global skc_uint        const    * const raster_ids, // FIXME -- CONSTANT
+                         skc_uint                            const count)
+{
+  // access to the meta extent is linear
+  skc_uint const gid       = get_global_id(0);
+  skc_bool const is_active = gid < count;
+
+  //
+  // init with defaults for all lanes
+  //
+  union skc_raster_cohort_meta_inout meta         = { .in.u32v4 = { 0, 0, 0, 0 } };
+  skc_uint                           raster_id    = SKC_UINT_MAX;
+  skc_uint                           extra_blocks = 0;
+
+  if (is_active)
+    {
+      // load meta_in
+      meta.in.u32v4     = vload4(gid,metas);
+
+      // load raster_id as early as possible
+      raster_id         = raster_ids[gid];
+
+#if 0
+      printf("%3u + %5u, %5u, %5u, %5u\n",
+             gid,
+             meta.in.blocks,
+             meta.in.offset,
+             meta.in.pk,
+             meta.in.rk);
+#endif
+
+      // how many blocks will the ttpb blocks consume?
+      extra_blocks      = ((meta.in.pk * SKC_TILE_RATIO + SKC_DEVICE_SUBBLOCKS_PER_BLOCK - SKC_TILE_RATIO) / 
+                           SKC_DEVICE_SUBBLOCKS_PER_BLOCK);
+
+      // total keys
+      meta.out.keys    += meta.in.pk;
+
+      // how many blocks do we need to store the keys in the head and trailing nodes?
+      skc_uint const hn = ((SKC_RASTER_HEAD_DWORDS + meta.out.keys + SKC_RASTER_NODE_DWORDS - 2) /
+                           (SKC_RASTER_NODE_DWORDS - 1));
+      // increment blocks
+      extra_blocks     += hn;
+
+      // how many nodes trail the head?
+      meta.out.nodes    = hn - 1;
+      
+      // update blocks
+      meta.out.blocks  += extra_blocks;
+
+#if 0
+      printf("%3u - %5u, %5u, %5u, %5u\n",
+             gid,
+             meta.out.blocks,
+             meta.out.offset,
+             meta.out.nodes,
+             meta.out.keys);
+#endif
+    }
+
+  //
+  // allocate blocks from block pool
+  //
+  // first perform a prefix sum on the subgroup to reduce atomic
+  // operation traffic
+  //
+  // note this idiom can be implemented with vectors, subgroups or
+  // workgroups
+  //
+  
+  skc_uint const prefix = SKC_RASTERS_ALLOC_INCLUSIVE_ADD(extra_blocks);
+  skc_uint       reads  = 0;
+
+  // last lane performs the block pool allocation with an atomic increment
+  if (SKC_RASTERS_ALLOC_LOCAL_ID() == SKC_RASTERS_ALLOC_GROUP_SIZE - 1) {
+    reads = SKC_ATOMIC_ADD_GLOBAL_RELAXED_DEVICE(bp_atomics+SKC_BP_ATOMIC_OFFSET_READS,prefix); // ring_reads
+  }
+
+  // broadcast block pool base to all lanes
+  reads = SKC_RASTERS_ALLOC_BROADCAST(reads,SKC_RASTERS_ALLOC_GROUP_SIZE - 1);
+
+  // update base for each lane
+  reads += prefix - extra_blocks;
+
+  //
+  // store meta header
+  //
+  if (is_active)
+    {
+      // store headers back to meta extent
+      vstore4(meta.out.u32v4,gid,metas);
+
+      // store reads
+      metas[SKC_RASTER_COHORT_META_OFFSET_READS + gid] = reads; 
+
+      // get block_id of each raster head 
+      skc_block_id_t const block_id = bp_ids[reads & bp_mask];
+
+      // update map
+      map[raster_id] = block_id;
+
+#if 0
+      printf("alloc: %u / %u\n",raster_id,block_id);
+#endif
+    }
+}
+
+//
+//
+//
diff --git a/src/compute/skc/rasters_reclaim.cl b/src/compute/skc/rasters_reclaim.cl
new file mode 100644
index 0000000..f0abdb0
--- /dev/null
+++ b/src/compute/skc/rasters_reclaim.cl
@@ -0,0 +1,442 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include "device_cl_12_gen9.h"
+#include "block_pool_cl.h"
+#include "atomic_cl.h"
+#include "block.h"
+#include "raster.h"
+#include "common.h"
+#include "tile.h"
+
+//
+//
+//
+
+#define SKC_RASTERS_RECLAIM_SUBGROUP_SIZE_MASK (SKC_RASTERS_RECLAIM_SUBGROUP_SIZE - 1)
+
+#define SKC_RASTERS_RECLAIM_SUBGROUP_WORDS     (SKC_RASTERS_RECLAIM_SUBGROUP_SIZE * SKC_RASTERS_RECLAIM_LOCAL_ELEMS)
+
+#define SKC_RASTERS_RECLAIM_X                  (SKC_DEVICE_BLOCK_DWORDS / SKC_RASTERS_RECLAIM_SUBGROUP_WORDS)
+
+//
+//
+//
+
+#if   ( SKC_RASTERS_RECLAIM_X == 1 )
+#define SKC_RASTERS_RECLAIM_BLOCK_EXPAND()       SKC_EXPAND_1()
+#define SKC_RASTERS_RECLAIM_BLOCK_EXPAND_I_LAST  0
+
+#elif ( SKC_RASTERS_RECLAIM_X == 2 )
+#define SKC_RASTERS_RECLAIM_BLOCK_EXPAND()       SKC_EXPAND_2()
+#define SKC_RASTERS_RECLAIM_BLOCK_EXPAND_I_LAST  1
+
+#elif ( SKC_RASTERS_RECLAIM_X == 4 )
+#define SKC_RASTERS_RECLAIM_BLOCK_EXPAND()       SKC_EXPAND_4()
+#define SKC_RASTERS_RECLAIM_BLOCK_EXPAND_I_LAST  3
+
+#elif ( SKC_RASTERS_RECLAIM_X == 8 )
+#define SKC_RASTERS_RECLAIM_BLOCK_EXPAND()       SKC_EXPAND_8()
+#define SKC_RASTERS_RECLAIM_BLOCK_EXPAND_I_LAST  7
+
+#elif ( SKC_RASTERS_RECLAIM_X == 16)
+#define SKC_RASTERS_RECLAIM_BLOCK_EXPAND()       SKC_EXPAND_16()
+#define SKC_RASTERS_RECLAIM_BLOCK_EXPAND_I_LAST  15
+
+#else
+#error "MISSING SKC_RASTERS_RECLAIM_X"
+#endif
+
+#if    ( SKC_PREFIX_SUBGROUP_SIZE == SKC_RASTERS_RECLAIM_SUBGROUP_SIZE )
+
+#define SKC_RASTERS_RECLAIM_STRIDE_H(L)              (L)
+#define SKC_RASTERS_RECLAIM_STRIDE_V_LO(I)           (I * 2 * SKC_RASTERS_RECLAIM_SUBGROUP_SIZE)
+#define SKC_RASTERS_RECLAIM_STRIDE_V_HI(I)           (SKC_RASTERS_RECLAIM_STRIDE_V_LO(I) + SKC_RASTERS_RECLAIM_SUBGROUP_SIZE)
+
+#elif  ( SKC_PREFIX_SUBGROUP_SIZE >  SKC_RASTERS_RECLAIM_SUBGROUP_SIZE ) // same as above when ratio equals 1
+
+#define SKC_RASTERS_RECLAIM_SUBGROUP_RATIO           (SKC_PREFIX_SUBGROUP_SIZE / SKC_RASTERS_RECLAIM_SUBGROUP_SIZE)
+#define SKC_RASTERS_RECLAIM_SUBGROUP_RATIO_MASK      (SKC_RASTERS_RECLAIM_SUBGROUP_RATIO - 1)
+#define SKC_RASTERS_RECLAIM_SUBGROUP_RATIO_SCALE(I)  ((I / SKC_RASTERS_RECLAIM_SUBGROUP_RATIO) * 2 * SKC_RASTERS_RECLAIM_SUBGROUP_RATIO + \
+                                                      (I & SKC_RASTERS_RECLAIM_SUBGROUP_RATIO_MASK))
+
+#define SKC_RASTERS_RECLAIM_STRIDE_H(L)              (L)
+#define SKC_RASTERS_RECLAIM_STRIDE_V_LO(I)           (SKC_RASTERS_RECLAIM_SUBGROUP_RATIO_SCALE(I) * SKC_RASTERS_RECLAIM_SUBGROUP_SIZE)
+#define SKC_RASTERS_RECLAIM_STRIDE_V_HI(I)           (SKC_RASTERS_RECLAIM_STRIDE_V_LO(I) + SKC_RASTERS_RECLAIM_SUBGROUP_RATIO * SKC_RASTERS_RECLAIM_SUBGROUP_SIZE)
+
+#elif  ( SKC_PREFIX_SUBGROUP_SIZE <  SKC_RASTERS_RECLAIM_SUBGROUP_SIZE ) // same as above when ratio equals 1
+
+#define SKC_RASTERS_RECLAIM_SUBGROUP_RATIO           (SKC_RASTERS_RECLAIM_SUBGROUP_SIZE / SKC_PREFIX_SUBGROUP_SIZE)
+#define SKC_RASTERS_RECLAIM_SUBGROUP_RATIO_MASK      (SKC_RASTERS_RECLAIM_SUBGROUP_SIZE / SKC_RASTERS_RECLAIM_SUBGROUP_RATIO - 1) // equal to prefix subgroup mask
+
+#define SKC_RASTERS_RECLAIM_STRIDE_H(L)              (((L) & ~SKC_RASTERS_RECLAIM_SUBGROUP_RATIO_MASK) * 2 + ((L) & SKC_RASTERS_RECLAIM_SUBGROUP_RATIO_MASK))
+#define SKC_RASTERS_RECLAIM_STRIDE_V_LO(I)           (I * 2 * SKC_RASTERS_RECLAIM_SUBGROUP_SIZE)
+#define SKC_RASTERS_RECLAIM_STRIDE_V_HI(I)           (SKC_RASTERS_RECLAIM_STRIDE_V_LO(I) + SKC_RASTERS_RECLAIM_SUBGROUP_SIZE / SKC_RASTERS_RECLAIM_SUBGROUP_RATIO)
+
+#endif
+
+//
+// FIXME -- slate these for replacement
+//
+
+#define SKC_BROADCAST(E,S,I)                                            \
+  sub_group_broadcast(E,S - I * SKC_RASTERS_RECLAIM_SUBGROUP_SIZE)
+
+#define SKC_BROADCAST_LAST_HELPER(E,I)                          \
+  sub_group_broadcast(E,SKC_RASTERS_RECLAIM_SUBGROUP_SIZE - 1)
+
+#define SKC_BROADCAST_LAST(E,I)                 \
+  SKC_BROADCAST_LAST_HELPER(E,I)
+
+//
+// COMPILE-TIME PREDICATES
+//
+
+#define SKC_RASTERS_RECLAIM_ELEM_GTE(X,I)                       \
+  SKC_GTE_MACRO(X,(I+1) * SKC_RASTERS_RECLAIM_SUBGROUP_SIZE)
+
+#define SKC_RASTERS_RECLAIM_ELEM_IN_RANGE(X,I)                          \
+  (skc_bool)SKC_GTE_MACRO(X, I   * SKC_RASTERS_RECLAIM_SUBGROUP_SIZE) && \
+  (skc_bool)SKC_LT_MACRO(X,(I+1) * SKC_RASTERS_RECLAIM_SUBGROUP_SIZE)
+
+#define SKC_RASTERS_RECLAIM_ENTIRELY_HEADER(I)          \
+  SKC_RASTERS_RECLAIM_ELEM_GTE(SKC_RASTER_HEAD_DWORDS,I)
+
+#define SKC_RASTERS_RECLAIM_PARTIALLY_HEADER(I)                 \
+  SKC_RASTERS_RECLAIM_ELEM_IN_RANGE(SKC_RASTER_HEAD_DWORDS,I)
+
+//
+// RUN-TIME PREDICATES
+//
+
+#define SKC_RASTERS_RECLAIM_IS_HEADER(I)                                \
+  (get_sub_group_local_id() + I * SKC_RASTERS_RECLAIM_SUBGROUP_SIZE < SKC_RASTER_HEAD_DWORDS)
+
+//
+// FIXME -- THIS BITFIELD SCAN APPROACH CAN BE PARAMETERIZED FOR ALL
+// POSSIBLE PRACTICAL POWER-OF-TWO SUBGROUP AND SUBBLOCKS-PER-BLOCK
+// COMBOS (NOT NECESSARILY POW2)
+//
+// FOR WIDER SUBGROUPS WITH BIG BLOCKS, WE WILL WANT TO USE A VECTOR
+// UINT TYPE INSTEAD OF A ULONG.
+//
+
+#define SKC_RASTERS_RECLAIM_PACKED_COUNT_BITS     SKC_RASTERS_RECLAIM_SUBGROUP_SIZE_LOG2
+#define SKC_RASTERS_RECLAIM_PACKED_COUNT_DECLARE  skc_uint
+
+//
+//
+//
+
+#define SKC_RASTERS_RECLAIM_PACKED_COUNT_MASK  SKC_BITS_TO_MASK(SKC_RASTERS_RECLAIM_PACKED_COUNT_BITS)
+
+#define SKC_RASTERS_RECLAIM_PACKED_COUNT_IS_BLOCK(E,I)          \
+  (((E) & SKC_DEVICE_SUBBLOCKS_PER_BLOCK_MASK)                  \
+   ? 0 : (1u << SKC_RASTERS_RECLAIM_PACKED_COUNT_BITS * I))
+
+#define SKC_RASTERS_RECLAIM_PACKED_COUNT_SCAN_EXCLUSIVE_ADD(S,C)        \
+  S = sub_group_scan_exclusive_add(C)
+
+#define SKC_RASTERS_RECLAIM_PACKED_COUNT_GET(C,I)                       \
+  (((C) >> (SKC_RASTERS_RECLAIM_PACKED_COUNT_BITS * I)) & SKC_RASTERS_RECLAIM_PACKED_COUNT_MASK)
+
+//
+//
+//
+
+struct skc_reclaim
+{
+  skc_raster_h aN[SKC_RECLAIM_ARRAY_SIZE];
+};
+
+__kernel
+SKC_RASTERS_RECLAIM_KERNEL_ATTRIBS
+void
+skc_kernel_rasters_reclaim(__global skc_block_id_t          * const bp_ids,      // block pool ids ring
+                           __global skc_uint                * const bp_elems,    // block pool blocks
+                           __global skc_uint       volatile * const bp_atomics,  // read/write atomics
+                           skc_uint                           const bp_mask,     // pow2 modulo mask for block pool ring
+                           __global skc_block_id_t const    * const map,         // raster host-to-device map
+                           struct   skc_reclaim               const reclaim)     // array of host raster ids
+{
+#if (__OPENCL_VERSION__ < 200)
+  skc_uint const reclaim_stride = get_num_sub_groups();
+#else
+  skc_uint const reclaim_stride = get_enqueued_num_sub_groups(); // 2.0 supports non-uniform workgroups
+#endif
+  skc_uint       reclaim_idx    = get_group_id(0) * reclaim_stride + get_sub_group_id();
+
+#if 0
+  //
+  // NOTE -- FOR NOW, THIS KERNEL ALWAYS LAUNCHES FIXED SIZE GRIDS BUT
+  // WE MIGHT WANT TO HAVE THE GRID LIMIT ITSELF TO A FRACTIONAL
+  // MULTIPROCESSOR IN ORDER TO MINIMIZE THE IMPACT OF A LARGE
+  // RECLAMATION JOB ON THE REST OF THE PIPELINE.
+  //
+  for (; reclaim_idx < SKC_RECLAIM_ARRAY_SIZE; reclaim_idx+=reclaim_stride)
+#endif
+    {
+      // get host raster id
+      skc_raster_h const raster = reclaim.aN[reclaim_idx];
+
+      // get block id of raster header
+      skc_block_id_t     id     = map[raster];
+
+      //
+      // load all of the head block ttxk.lo keys into registers
+      //
+      // FIXME -- this pattern lends itself to using the higher
+      // performance Intel GEN block load instructions
+      //
+      skc_uint const head_id = id * SKC_DEVICE_SUBBLOCK_WORDS + SKC_RASTERS_RECLAIM_STRIDE_H(get_sub_group_local_id());
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+      skc_uint h##I = bp_elems[head_id + SKC_RASTERS_RECLAIM_STRIDE_V_LO(I)];
+
+      SKC_RASTERS_RECLAIM_BLOCK_EXPAND();
+
+      //
+      // pick out count.nodes and count.prims from the header
+      //
+      // load raster header counts -- we only need the blocks and
+      // nodes words the keys are doublewords.
+      //
+      // FIXME -- this can be made portable with compile-time macro expansion
+      //
+      skc_uint count_blocks = sub_group_broadcast(h0,0); // SKC_RASTER_HEAD_OFFSET_COUNTS_NODES
+      skc_uint count_nodes  = sub_group_broadcast(h0,1); // SKC_RASTER_HEAD_OFFSET_COUNTS_KEYS
+
+#if 0
+      if (get_sub_group_local_id() == 0) {
+        printf("reclaim rasters: %u / %u / %5u / %5u\n",raster,id,count_blocks,count_nodes);
+      }
+#endif
+      //
+      // acquire a span in the block pool ids ring for reclaimed ids
+      //
+      skc_uint bp_ids_base = 0;
+
+      if (get_sub_group_local_id() == 0) {
+        bp_ids_base = SKC_ATOMIC_ADD_GLOBAL_RELAXED_SUBGROUP(bp_atomics+SKC_BP_ATOMIC_OFFSET_WRITES,count_blocks);
+      }
+
+      bp_ids_base = sub_group_broadcast(bp_ids_base,0);
+
+      //
+      // mask off everything but the block id
+      //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                         \
+      if (!SKC_RASTERS_RECLAIM_ENTIRELY_HEADER(I)) {    \
+        h##I = h##I & SKC_TTXK_LO_MASK_ID;              \
+      }
+
+      SKC_RASTERS_RECLAIM_BLOCK_EXPAND();
+
+      //
+      // swap current id with next
+      //
+      if (get_sub_group_local_id() == SKC_RASTERS_RECLAIM_SUBGROUP_SIZE - 1)
+        {
+          skc_block_id_t const next = SKC_CONCAT(h,SKC_RASTERS_RECLAIM_BLOCK_EXPAND_I_LAST);
+
+          SKC_CONCAT(h,SKC_RASTERS_RECLAIM_BLOCK_EXPAND_I_LAST) = id;
+
+          id = next;
+#if 0
+          printf("rasters next = %u\n",id);
+#endif
+        }
+
+#if 0
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                 \
+        printf("%08X %u\n",h##I,h##I);
+
+        SKC_RASTERS_RECLAIM_BLOCK_EXPAND();
+#endif
+      
+#if 0
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                         \
+      if (!SKC_RASTERS_RECLAIM_ENTIRELY_HEADER(I)) {    \
+        printf("%08X\n",h##I);                          \
+      }
+
+      SKC_RASTERS_RECLAIM_BLOCK_EXPAND();
+#endif
+
+      //
+      // - we'll skip subgroups that are entirely header
+      //
+      // - but we need to mark any header elements that partially fill
+      //   a subgroup as subblocks
+      //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                         \
+      if (!SKC_RASTERS_RECLAIM_ENTIRELY_HEADER(I)) {    \
+        if (SKC_RASTERS_RECLAIM_PARTIALLY_HEADER(I)) {  \
+          if (SKC_RASTERS_RECLAIM_IS_HEADER(I)) {       \
+            h##I = SKC_UINT_MAX;                        \
+          }                                             \
+        }                                               \
+      }
+
+      SKC_RASTERS_RECLAIM_BLOCK_EXPAND();
+
+      {
+        //
+        // count reclaimable blocks in each lane
+        //
+        SKC_RASTERS_RECLAIM_PACKED_COUNT_DECLARE packed_count = ( 0 );
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+        if (!SKC_RASTERS_RECLAIM_ENTIRELY_HEADER(I)) {                  \
+          packed_count |= SKC_RASTERS_RECLAIM_PACKED_COUNT_IS_BLOCK(h##I,I); \
+        }
+
+        SKC_RASTERS_RECLAIM_BLOCK_EXPAND();
+
+        //
+        // scan to find index of each block
+        //
+        SKC_RASTERS_RECLAIM_PACKED_COUNT_DECLARE packed_index = ( 0 );
+
+        SKC_RASTERS_RECLAIM_PACKED_COUNT_SCAN_EXCLUSIVE_ADD(packed_index,packed_count);
+
+        //
+        // store blocks back to ring
+        //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+        if (!SKC_RASTERS_RECLAIM_ENTIRELY_HEADER(I)) {                  \
+          skc_uint const index      = SKC_RASTERS_RECLAIM_PACKED_COUNT_GET(packed_index,I); \
+          skc_uint const count      = SKC_RASTERS_RECLAIM_PACKED_COUNT_GET(packed_count,I); \
+          skc_uint const bp_ids_idx = (bp_ids_base + index) & bp_mask;  \
+          if (count > 0) {                                              \
+            bp_ids[bp_ids_idx] = h##I;                                  \
+          }                                                             \
+          skc_uint const total = index + count;                         \
+          bp_ids_base += sub_group_broadcast(total,SKC_RASTERS_RECLAIM_SUBGROUP_SIZE-1); \
+        }
+
+        SKC_RASTERS_RECLAIM_BLOCK_EXPAND();
+      }
+
+      // printf("R %7u ! %u\n",bp_ids_idx,h##I);
+            
+      //
+      // we're done if it was just the header
+      //
+      if (count_nodes == 0)
+        return;
+
+      //
+      // otherwise, walk the nodes
+      //
+      do {
+        // id of next block is in last lane
+        id = sub_group_broadcast(id,SKC_RASTERS_RECLAIM_SUBGROUP_SIZE-1);
+
+        //
+        // load all of the node block ttxk.lo keys into registers
+        //
+        // FIXME -- this pattern lends itself to using the higher
+        // performance Intel GEN block load instructions
+        //
+        skc_uint const node_id = id * SKC_DEVICE_SUBBLOCK_WORDS + SKC_RASTERS_RECLAIM_STRIDE_H(get_sub_group_local_id());
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+        skc_uint n##I = bp_elems[node_id + SKC_RASTERS_RECLAIM_STRIDE_V_LO(I)];
+
+        SKC_RASTERS_RECLAIM_BLOCK_EXPAND();
+
+        //
+        // mask off everything but the block id
+        //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                 \
+        n##I = n##I & SKC_TTXK_LO_MASK_ID;
+
+        SKC_RASTERS_RECLAIM_BLOCK_EXPAND();
+
+        //
+        // swap current id with next
+        //
+        if (get_sub_group_local_id() == SKC_RASTERS_RECLAIM_SUBGROUP_SIZE - 1)
+          {
+            skc_block_id_t const next = SKC_CONCAT(n,SKC_RASTERS_RECLAIM_BLOCK_EXPAND_I_LAST);
+
+            SKC_CONCAT(n,SKC_RASTERS_RECLAIM_BLOCK_EXPAND_I_LAST) = id;
+
+            id = next;
+#if 0
+            printf("rasters next = %u\n",id);            
+#endif
+          }
+
+#if 0
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                 \
+        printf("%08X %u\n",n##I,n##I);
+
+        SKC_RASTERS_RECLAIM_BLOCK_EXPAND();
+#endif
+
+        //
+        // count reclaimable blocks in each lane
+        //
+        SKC_RASTERS_RECLAIM_PACKED_COUNT_DECLARE packed_count = ( 0 );
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R)                                         \
+        packed_count |= SKC_RASTERS_RECLAIM_PACKED_COUNT_IS_BLOCK(n##I,I);
+
+        SKC_RASTERS_RECLAIM_BLOCK_EXPAND();
+
+        //
+        // scan to find index of each block
+        //
+        SKC_RASTERS_RECLAIM_PACKED_COUNT_DECLARE packed_index = ( 0 );
+
+        SKC_RASTERS_RECLAIM_PACKED_COUNT_SCAN_EXCLUSIVE_ADD(packed_index,packed_count);
+
+        //
+        // store blocks back to ring
+        //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,R) {                                       \
+          skc_uint const index      = SKC_RASTERS_RECLAIM_PACKED_COUNT_GET(packed_index,I); \
+          skc_uint const count      = SKC_RASTERS_RECLAIM_PACKED_COUNT_GET(packed_count,I); \
+          skc_uint const bp_ids_idx = (bp_ids_base + index) & bp_mask;  \
+          if (count > 0) {                                              \
+            bp_ids[bp_ids_idx] = n##I;                                  \
+          }                                                             \
+          skc_uint const total = index + count;                         \
+          bp_ids_base += sub_group_broadcast(total,SKC_RASTERS_RECLAIM_SUBGROUP_SIZE-1); \
+        }
+
+        SKC_RASTERS_RECLAIM_BLOCK_EXPAND();
+
+        // printf("R %7u ! %u\n",bp_ids_idx,n##I);
+        
+        // any more nodes?
+      } while (--count_nodes > 0);
+    }
+}
+
+//
+//
+//
diff --git a/src/compute/skc/render.cl b/src/compute/skc/render.cl
new file mode 100644
index 0000000..ba2fd7b
--- /dev/null
+++ b/src/compute/skc/render.cl
@@ -0,0 +1,2165 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include "device_cl_12_gen9.h"
+#include "block.h"
+#include "tile.h"
+#include "atomic_cl.h"
+#include "styling_types.h"
+
+//
+//
+//
+
+#define SKC_RENDER_SUBGROUP_MASK  (SKC_RENDER_SUBGROUP_SIZE - 1)
+
+//
+//
+//
+
+#if   ( SKC_RENDER_SCANLINE_VECTOR_SIZE == 1 )
+#define SKC_RENDER_SCANLINE_VECTOR_EXPAND()           SKC_EXPAND_1()
+#define SKC_RENDER_SCANLINE_VECTOR_EXPAND_I_LAST      0
+
+#elif ( SKC_RENDER_SCANLINE_VECTOR_SIZE == 2 )
+#define SKC_RENDER_SCANLINE_VECTOR_EXPAND()           SKC_EXPAND_2()
+#define SKC_RENDER_SCANLINE_VECTOR_EXPAND_I_LAST      1
+
+#elif ( SKC_RENDER_SCANLINE_VECTOR_SIZE == 4 )
+#define SKC_RENDER_SCANLINE_VECTOR_EXPAND()           SKC_EXPAND_4()
+#define SKC_RENDER_SCANLINE_VECTOR_EXPAND_I_LAST      3
+
+#elif ( SKC_RENDER_SCANLINE_VECTOR_SIZE == 8 )
+#define SKC_RENDER_SCANLINE_VECTOR_EXPAND()           SKC_EXPAND_8()
+#define SKC_RENDER_SCANLINE_VECTOR_EXPAND_I_LAST      7
+
+#elif ( SKC_RENDER_SCANLINE_VECTOR_SIZE == 16)
+#define SKC_RENDER_SCANLINE_VECTOR_EXPAND()           SKC_EXPAND_16()
+#define SKC_RENDER_SCANLINE_VECTOR_EXPAND_I_LAST      15
+#endif
+
+//
+// tile state flag bits
+//
+
+typedef enum skc_tile_flags_e {
+
+  // FLUSH
+  SKC_TILE_FLAGS_FLUSH_FINALIZE    = 0x00000001,
+  SKC_TILE_FLAGS_FLUSH_UNWIND      = 0x00000002,
+  SKC_TILE_FLAGS_FLUSH_COMPLETE    = 0x00000004,
+
+  // OPACITY
+  SKC_TILE_FLAGS_SCATTER_SKIP      = 0x00000008,
+
+  //
+  // Note: testing for opacity and skipping scattering is on its way
+  // to becoming a much more programmable option because sometimes we
+  // may be compositing/blending from back-to-front and/or be using
+  // group blend rules that ignore opacity.
+  //
+  // The point is that all of these decisions should be encoded in
+  // styling commands and, as much as possible, removed from the final
+  // group/layer styling traversal render loop.
+  //
+
+} skc_tile_flags_e;
+
+//
+// COVER -- assumes availability of either fp16 or fp32
+//
+
+union skc_tile_cover
+{
+  struct {
+    SKC_RENDER_TILE_COVER             c[SKC_TILE_WIDTH];
+  } aN;
+
+#ifdef SKC_RENDER_TILE_COVER_VECTOR
+  struct {
+    SKC_RENDER_TILE_COVER_VECTOR      c[SKC_RENDER_TILE_COVER_VECTOR_COUNT];
+  } vN;
+#endif
+};
+
+//
+// COLOR -- assumes availability of either fp16 or fp32
+//
+
+union skc_tile_color
+{
+  union {
+    struct {
+      SKC_RENDER_TILE_COLOR           r;
+      SKC_RENDER_TILE_COLOR           g;
+      SKC_RENDER_TILE_COLOR           b;
+      SKC_RENDER_TILE_COLOR           a;
+    } rgba[SKC_TILE_WIDTH];
+  } aN;
+
+#ifdef SKC_RENDER_TILE_COLOR_INTERLEAVED
+  union {
+    SKC_RENDER_TILE_COLOR_INTERLEAVED rgba[SKC_TILE_WIDTH];
+  } iN;
+#endif
+
+#ifdef SKC_RENDER_TILE_COLOR_VECTOR
+  union {
+    SKC_RENDER_TILE_COLOR_VECTOR      rgba[SKC_RENDER_TILE_COLOR_VECTOR_COUNT];
+  } vN;
+#endif
+
+  struct {
+    union {
+      struct {
+        SKC_RENDER_TILE_COLOR         r;
+        SKC_RENDER_TILE_COLOR         g;
+      };
+      SKC_RENDER_GRADIENT_FLOAT       distance;
+    };
+    union {
+      struct {
+        SKC_RENDER_TILE_COLOR         b;
+        SKC_RENDER_TILE_COLOR         a;
+      };
+      SKC_RENDER_GRADIENT_FLOAT       stoplerp;
+    };
+  } grad[SKC_TILE_WIDTH];
+};
+
+//
+// SHARED MEMORY STATE
+//
+
+#define SKC_RENDER_TILE_SMEM_WORDS ((SKC_TILE_WIDTH + 1) * SKC_TILE_HEIGHT)
+
+#define SKC_RENDER_WIDE_AA_BYTES   (SKC_RENDER_TILE_SMEM_WORDS * sizeof(int) / SKC_RENDER_SUBGROUP_SIZE)
+#define SKC_RENDER_WIDE_AA_WIDTH   (SKC_RENDER_WIDE_AA_BYTES / sizeof(SKC_RENDER_WIDE_AA))
+
+//
+//
+//
+
+union skc_subgroup_smem
+{
+  //
+  // The tiles are stored in column-major / height-major order
+  //
+  // The final column is a guard column that is OK to write to but
+  // will never be read.  It simplifies the TTSB scatter but could be
+  // predicated if SMEM is really at a premium.
+  //
+#if ( SKC_RENDER_SUBGROUP_SIZE > 1 )
+  struct {
+    SKC_ATOMIC_UINT              area[SKC_RENDER_TILE_SMEM_WORDS]; // area[w][h]
+  } atomic;
+#endif
+
+  struct {
+    int                          area[SKC_RENDER_TILE_SMEM_WORDS]; // area[w][h]
+  } aN;
+
+  struct { // assumption is that height = subgroup
+    SKC_RENDER_AREA_V            area[SKC_TILE_WIDTH + 1][SKC_RENDER_SUBGROUP_SIZE];
+  } vN;
+
+  struct { // assumption is that height = subgroup
+    SKC_RENDER_WIDE_AA           area[SKC_RENDER_WIDE_AA_WIDTH][SKC_RENDER_SUBGROUP_SIZE];
+  } wide;
+
+  union skc_styling_cmd          cmds[(SKC_TILE_WIDTH + 1) * SKC_TILE_HEIGHT];
+
+  half                           gc  [(SKC_TILE_WIDTH + 1) * SKC_TILE_HEIGHT * 2];
+
+#if 0
+  //
+  // SPILL TO GMEM
+  //
+#if (SKC_REGS_COLOR_S > 0) || (SKC_REGS_COVER_S > 0)
+  struct {
+
+#if (SKC_REGS_COLOR_S > 0)
+    union skc_color_r            color[SKC_REGS_COLOR_S][SKC_TILE_HEIGHT][SKC_TILE_WIDTH];
+#endif
+
+#if (SKC_REGS_COVER_S > 0)
+    union float                  cover[SKC_REGS_COVER_S][SKC_TILE_HEIGHT][SKC_TILE_WIDTH];
+#endif
+
+  } regs;
+#endif
+  //
+  //
+  //
+#endif
+};
+
+//
+//
+//
+
+#if ( SKC_RENDER_SUBGROUP_SIZE == 1 )
+
+#define skc_subgroup_lane()  0
+
+#else
+
+#define skc_subgroup_lane()  get_sub_group_local_id()
+
+#endif
+
+//
+//
+//
+
+typedef skc_uint  skc_ttsk_lo_t;
+typedef skc_uint  skc_ttsk_hi_t;
+
+typedef skc_uint  skc_ttpk_lo_t;
+typedef skc_uint  skc_ttpk_hi_t;
+
+typedef skc_uint  skc_ttxk_lo_t;
+typedef skc_uint  skc_ttxk_hi_t;
+
+typedef skc_uint  skc_ttck_lo_t;
+typedef skc_uint  skc_ttck_hi_t;
+
+typedef skc_uint2 skc_ttck_t;
+
+typedef skc_int   skc_ttxb_t;
+
+//
+// TTCK (32-BIT COMPARE) v1:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          30          |    1   |    1   |   18  |  7  |  7  |
+//
+//
+// TTCK (32-BIT COMPARE) v2:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          30          |    1   |    1   |   15  |  9  |  8  |
+//
+//
+// TTCK (64-BIT COMPARE) -- achieves 4K x 4K with an 8x16 tile:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          27          |    1   |    1   |   18  |  9  |  8  |
+//
+
+static
+skc_uint
+skc_ttck_lo_get_ttxb_id(skc_ttck_lo_t const a)
+{
+  return a & SKC_TTCK_LO_MASK_ID;
+}
+
+static
+skc_layer_id
+skc_ttck_get_layer(skc_ttck_t const a)
+{
+  //
+  // FIXME -- a union with a ulong and a shift down and mask is
+  // probably faster on some architectures
+  //
+  skc_uint const lo = (a.lo >> SKC_TTCK_LO_BITS_ID_PREFIX_ESCAPE);
+  skc_uint const hi = (a.hi  & SKC_TTCK_HI_MASK_LAYER) << SKC_TTCK_LO_BITS_LAYER;
+
+  return lo | hi;
+}
+
+static
+skc_uint
+skc_ttck_hi_get_x(skc_ttck_hi_t const a)
+{
+  return SKC_BFE(a,SKC_TTCK_HI_BITS_X,SKC_TTCK_HI_OFFSET_X);
+}
+
+static
+skc_uint
+skc_ttck_hi_get_y(skc_ttck_hi_t const a)
+{
+  return a >> SKC_TTCK_HI_OFFSET_Y;
+}
+
+static
+skc_bool
+skc_ttck_equal_yxl(skc_ttck_t const a, skc_ttck_t const b)
+{
+  skc_uint const lo = (a.lo ^ b.lo) & SKC_BITS_TO_MASK_AT(SKC_TTCK_LO_BITS_LAYER,SKC_TTCK_LO_BITS_ID_PREFIX_ESCAPE);
+  skc_uint const hi = (a.hi ^ b.hi);
+
+  return (lo | hi) == 0;
+}
+
+static
+skc_bool
+skc_ttck_hi_equal_yx(skc_ttck_hi_t const a, skc_ttck_hi_t const b)
+{
+  return ((a ^ b) & SKC_TTCK_HI_MASK_YX) == 0;
+}
+
+static
+skc_bool
+skc_ttck_lo_is_prefix(skc_ttck_lo_t const a)
+{
+  return (a & SKC_TTCK_LO_MASK_PREFIX) != 0;
+}
+
+//
+// TILE TRACE SUBPIXEL
+//
+// The subpixels are encoded with either absolute tile coordinates
+// (32-bits) or packed in delta-encoded form form.
+//
+// For 32-bit subpixel packing of a 32x32 tile:
+//
+// A tile X is encoded as:
+//
+//   TX : 10 : unsigned min(x0,x1) tile subpixel coordinate.
+//
+//   SX :  6 : unsigned subpixel span from min to max x with range
+//             [0,32]. The original direction is not captured. Would
+//             be nice to capture dx but not necessary right now but
+//             could be in the future. <--- SPARE VALUES AVAILABLE
+//
+// A tile Y is encoded as:
+//
+//   TY : 10 : unsigned min(y0,y1) tile subpixel coordinate.
+//
+//   DY :  6 : signed subpixel delta y1-y0. The range of delta is
+//             [-32,32] but horizontal lines are not encoded so [1,32]
+//             is mapped to [0,31]. The resulting range [-32,31] fits
+//             in 6 bits.
+//
+// TTS:
+//
+//  0                        31
+//  |  TX |  SX  |  TY |  DY  |
+//  +-----+------+-----+------+
+//  |  10 |   6  |  10 |   6  |
+//
+
+static
+SKC_RENDER_TTS_V_BITFIELD
+skc_tts_get_ty_pixel_v(SKC_RENDER_TTS_V const a)
+{
+  //
+  // extract the whole pixel y coordinate
+  //
+  return SKC_BFE(a,
+                 SKC_TTS_BITS_TY   - SKC_SUBPIXEL_RESL_Y_LOG2,
+                 SKC_TTS_OFFSET_TY + SKC_SUBPIXEL_RESL_Y_LOG2);
+}
+
+static
+SKC_RENDER_TTS_V_BITFIELD
+skc_tts_get_xy_idx_v(SKC_RENDER_TTS_V const a)
+{
+  //
+  // get the linear array tile index of the pixel
+  //
+  return (((a & SKC_TTS_MASK_TX_PIXEL)
+
+#if   (SKC_SUBPIXEL_RESL_X_LOG2 > SKC_TILE_HEIGHT_LOG2)
+           >> (SKC_SUBPIXEL_RESL_X_LOG2 - SKC_TILE_HEIGHT_LOG2)
+#elif (SKC_SUBPIXEL_RESL_X_LOG2 < SKC_TILE_HEIGHT_LOG2)
+           << (SKC_TILE_HEIGHT_LOG2     - SKC_SUBPIXEL_RESL_X_LOG2)
+#endif
+
+           ) | skc_tts_get_ty_pixel_v(a));
+}
+
+#if 0
+static
+skc_ttx_v_s32_t
+skc_tts_get_dy_v(SKC_RENDER_TTS_V const a)
+{
+  skc_ttx_v_s32_t const dy = SKC_AS(skc_ttx_v_s32_t)a >> SKC_TTS_OFFSET_DY;
+
+  return (dy + SKC_AS(skc_ttx_v_s32_t)(~a >> 31));
+}
+#else
+static
+SKC_RENDER_TTS_V_BITFIELD
+skc_tts_get_dy_v(SKC_RENDER_TTS_V const a)
+{
+  SKC_RENDER_TTS_V_BITFIELD const dy = a >> SKC_TTS_OFFSET_DY;
+
+  return dy - (~a >> 31);
+}
+#endif
+
+static
+SKC_RENDER_TTS_V_BITFIELD
+skc_tts_get_tx_subpixel_v(SKC_RENDER_TTS_V const a)
+{
+  return a & SKC_BITS_TO_MASK(SKC_SUBPIXEL_RESL_X_LOG2);
+}
+
+static
+SKC_RENDER_TTS_V_BITFIELD
+skc_tts_get_sx_v(SKC_RENDER_TTS_V const a)
+{
+  return SKC_BFE(a,SKC_TTS_BITS_SX,SKC_TTS_OFFSET_SX);
+}
+
+//
+//
+//
+
+static
+void
+skc_tile_aa_zero(__local union skc_subgroup_smem * SKC_RESTRICT const smem)
+{
+  //
+  // SIMD / CPU
+  //
+  //      &
+  //
+  // SIMT / GPU
+  //
+  // Note that atomic_init() is likely implemented as a simple
+  // assignment so there is no identifiable performance difference on
+  // current targets.
+  //
+  // If such an architecture appears in the future then we'll probably
+  // still want to implement this zero'ing operation as below but
+  // follow with an appropriate fence that occurs before any scatter
+  // operations.
+  //
+  // The baroque expansion below improves performance on Intel GEN by,
+  // presumably, achieving the 64-byte per clock SLM write as well as
+  // minimizing the overall number of SEND() block initializations and
+  // launches.
+  //
+  // Intel GENx has a documented 64 byte per cycle SLM write limit.
+  // So having each lane in an 8 lane subgroup zero-write 8 bytes is
+  // probably a safe bet (Later: benchmarking backs this up!).
+  //
+  // Note there is no reason at this time to unroll this loop.
+  //
+  for (uint ii=0; ii<SKC_RENDER_WIDE_AA_WIDTH; ii++)
+    smem->wide.area[ii][skc_subgroup_lane()] = ( 0 );
+}
+
+//
+// Note this is going to be vectorizable on most architectures.
+//
+// The return of the key translation feature might complicate things.
+//
+
+static
+void
+skc_scatter_ttpb(__global skc_ttxb_t        const * SKC_RESTRICT const ttxb_extent,
+                 __local  union skc_subgroup_smem * SKC_RESTRICT const smem,
+                 skc_block_id_t                                  const pb_id)
+{
+  skc_uint const offset = pb_id * (SKC_DEVICE_SUBBLOCK_WORDS / SKC_TILE_RATIO) + skc_subgroup_lane();
+
+#if   ( SKC_TILE_RATIO == 1 )
+
+  SKC_RENDER_TTP_V const ttp_v = ttxb_extent[offset];
+
+#elif ( SKC_TILE_RATIO == 2 )
+
+  SKC_RENDER_TTP_V const ttp_v = vload2(offset,ttxb_extent);
+
+#else
+
+#error("tile ratio greater than 2 not supported")
+
+#endif
+
+  //
+  // Note there is no need to use an atomic for this operation on the
+  // current group of target platforms... but this may change if
+  // atomic ops truly go through a different path.
+  //
+  // As noted above, this direct increment is probably faster and can
+  // always be followed by a fence.
+  //
+  // Furthermore, note that the key sorting orders all ttck keys
+  // before ttpk keys.
+  //
+
+  //
+  // FIXME -- if the SMEM store is wider than bank word count then we
+  // might want to odd-even interleave the TTP values if the target
+  // device can't handle 64-bit stores
+  //
+
+  //
+  // skipping per-key translation for now
+  //
+  smem->vN.area[0][skc_subgroup_lane()] += ttp_v << (SKC_SUBPIXEL_RESL_X_LOG2 + 1);
+}
+
+//
+// Note that skc_scatter_ttsb is *not* vectorizable unless the
+// architecture supports a "scatter-add" capability.  All relevant
+// GPUs support atomic add on shared/local memory and thus support
+// scatter-add.
+//
+
+static
+void
+skc_scatter_ttsb(__global skc_ttxb_t        const * SKC_RESTRICT const ttxb_extent,
+                 __local  union skc_subgroup_smem * SKC_RESTRICT const smem,
+                 skc_block_id_t                                  const sb_id)
+{
+  skc_uint         const offset = sb_id * SKC_DEVICE_SUBBLOCK_WORDS + skc_subgroup_lane();
+
+  SKC_RENDER_TTS_V const tts_v  = ttxb_extent[offset];
+
+  //
+  // Skipping per-key translation for now
+  //
+
+  // Index into tile
+  //
+  // The tiles are stored in column-major / height-major order
+  //
+  // The final column is a guard column that is OK to write to but
+  // will never be read.  It simplifies the TTSB scatter but could be
+  // predicated if SMEM is really at a premium.
+  //
+
+  SKC_RENDER_TTS_V_BITFIELD const xy_idx = skc_tts_get_xy_idx_v(tts_v);
+
+#if 0
+  if (tts_v != SKC_TTS_INVALID)
+    printf("(%08X) = %u\n",tts_v,xy_idx);
+#endif
+
+  //
+  // adjust subpixel range to max y
+  //
+  // range is stored as [-32,31] and when read [0,31] is mapped to
+  // [1,32] because a dy of 0 is not possible.
+  //
+  // more succinctly: if dy >= 0 then ++dy
+  //
+  SKC_RENDER_TTS_V_BITFIELD const dy     = skc_tts_get_dy_v(tts_v);
+
+  //
+  // FIXME -- benchmark performance of setting dy to 0 if ttsv.vN is invalid?
+  //
+
+  // this "min(x0) * 2 + dx" is equivalent to "x0 + x1"
+  SKC_RENDER_TTS_V_BITFIELD const widths = skc_tts_get_tx_subpixel_v(tts_v) * 2 + skc_tts_get_sx_v(tts_v);
+
+  // Calculate left and right coverage contribution trapezoids
+  SKC_RENDER_TTS_V_BITFIELD const left   = dy * widths;
+  SKC_RENDER_TTS_V_BITFIELD const right  = (dy << (SKC_SUBPIXEL_RESL_X_LOG2 + 1)) - left;
+
+  //
+  // Accumulate altitudes and areas
+  //
+  // Optimization: if the device supports an CPU/SIMD vector-add or
+  // GPU/SIMT scatter-add atomic int2 add operation then placing the
+  // ALT and AREA values side-by-side would halve the number of
+  // additions.
+  //
+#if ( SKC_RENDER_SUBGROUP_SIZE == 1 )
+  //
+  // CPU/SIMD
+  //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A)                                 \
+  if (tts_v C != SKC_TTS_INVALID) {                             \
+    smem->aN.area[SKC_TILE_HEIGHT + xy_idx C] += left  C;       \
+    smem->aN.area[                  xy_idx C] += right C;       \
+  }
+
+#else
+  //
+  // GPU/SIMT -- IMPLIES SUPPORT FOR ATOMIC SCATTER-ADD
+  //
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A)                                         \
+  if (tts_v C != SKC_TTS_INVALID) {                                     \
+    SKC_ATOMIC_ADD_LOCAL_RELAXED_SUBGROUP(smem->atomic.area +           \
+                                          SKC_TILE_HEIGHT   + xy_idx C, \
+                                          left C);                      \
+    SKC_ATOMIC_ADD_LOCAL_RELAXED_SUBGROUP(smem->atomic.area + xy_idx C, \
+                                          right C);                     \
+  }
+#endif
+
+  SKC_RENDER_TTSB_EXPAND();
+}
+
+//
+// Note that 2048.0 can be represented exactly with fp16... fortuitous!
+//
+
+#define SKC_RENDER_FILL_MAX_AREA          (2u * SKC_SUBPIXEL_RESL_X * SKC_SUBPIXEL_RESL_Y)
+#define SKC_RENDER_FILL_MAX_AREA_2        (2u * SKC_RENDER_FILL_MAX_AREA)
+#define SKC_RENDER_FILL_EVEN_ODD_MASK     (SKC_RENDER_FILL_MAX_AREA_2 - 1)
+#define SKC_RENDER_FILL_MAX_AREA_RCP_F32  (SKC_RENDER_TILE_COVER)(1.0f / SKC_RENDER_FILL_MAX_AREA)
+
+//
+//
+//
+
+static
+void
+skc_tile_cover_nonzero(__local union skc_subgroup_smem * SKC_RESTRICT const smem,
+                       union skc_tile_cover            * SKC_RESTRICT const cover,
+                       union skc_tile_color            * SKC_RESTRICT const color)
+{
+  SKC_RENDER_ACC_COVER_INT area = 0;
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH))) // doesn't help on AVX2
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    {
+      area                                   += smem->vN.area[ii][skc_subgroup_lane()];
+      SKC_RENDER_ACC_COVER_UINT const trapabs = abs(area);
+      SKC_RENDER_TILE_COVER     const nonzero = SKC_CONVERT(SKC_RENDER_TILE_COVER)(min(trapabs,SKC_RENDER_FILL_MAX_AREA));
+
+      cover->aN.c[ii] = nonzero * (SKC_RENDER_TILE_COVER)(SKC_RENDER_FILL_MAX_AREA_RCP_F32);
+    }
+}
+
+static
+void
+skc_tile_cover_evenodd(__local union skc_subgroup_smem * SKC_RESTRICT const smem,
+                       union skc_tile_cover            * SKC_RESTRICT const cover,
+                       union skc_tile_color            * SKC_RESTRICT const color)
+{
+  SKC_RENDER_ACC_COVER_INT area = 0;
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH))) // doesn't help on AVX2
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    {
+      area                                   += smem->vN.area[ii][skc_subgroup_lane()];
+      SKC_RENDER_ACC_COVER_UINT const trapabs = abs(area);
+      SKC_RENDER_ACC_COVER_UINT const reflect = abs(SKC_AS(SKC_RENDER_ACC_COVER_INT)((trapabs & SKC_RENDER_FILL_EVEN_ODD_MASK) - SKC_RENDER_FILL_MAX_AREA));
+
+      cover->aN.c[ii] = SKC_CONVERT(SKC_RENDER_TILE_COVER)(SKC_RENDER_FILL_MAX_AREA - reflect) * (SKC_RENDER_TILE_COVER)SKC_RENDER_FILL_MAX_AREA_RCP_F32;
+    }
+}
+
+//
+//
+//
+
+static
+void
+skc_tile_color_fill_solid(__global union skc_styling_cmd const * SKC_RESTRICT const commands,
+                          uint                                 * SKC_RESTRICT const cmd_next,
+                          union skc_tile_color                 * SKC_RESTRICT const color)
+{
+  //
+  // rgba = solid fill
+  //
+  __global half const * const rgba_ptr = commands[*cmd_next].f16a2 + 0;
+
+  *cmd_next += 2;
+
+#if !defined( SKC_RENDER_TILE_COLOR_VECTOR )
+
+  SKC_RENDER_TILE_COLOR_PAIR const rg = SKC_RENDER_TILE_COLOR_PAIR_LOAD(0,rgba_ptr);
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH-1)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    color->aN.rgba[ii].r = rg.lo;
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH-1)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    color->aN.rgba[ii].g = rg.hi;
+
+  SKC_RENDER_TILE_COLOR_PAIR const ba = SKC_RENDER_TILE_COLOR_PAIR_LOAD(1,rgba_ptr);
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH-1)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    color->aN.rgba[ii].b = ba.lo;
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH-1)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    color->aN.rgba[ii].a = ba.hi;
+
+#else
+
+  SKC_RENDER_TILE_COLOR_PAIR const rg = SKC_RENDER_TILE_COLOR_PAIR_LOAD(0,rgba_ptr);
+  SKC_RENDER_TILE_COLOR      const r  = rg.lo;
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COLOR_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COLOR_VECTOR_COUNT; ii++)
+    color->vN.rgba[ii].even.even = SKC_AS(SKC_RENDER_TILE_COLOR_VECTOR_COMPONENT)(r);
+
+  SKC_RENDER_TILE_COLOR      const g  = rg.hi;
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COLOR_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COLOR_VECTOR_COUNT; ii++)
+    color->vN.rgba[ii].odd.even  = SKC_AS(SKC_RENDER_TILE_COLOR_VECTOR_COMPONENT)(g);
+
+  SKC_RENDER_TILE_COLOR_PAIR const ba = SKC_RENDER_TILE_COLOR_PAIR_LOAD(1,rgba_ptr);
+  SKC_RENDER_TILE_COLOR      const b  = ba.lo;
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COLOR_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COLOR_VECTOR_COUNT; ii++)
+    color->vN.rgba[ii].even.odd  = SKC_AS(SKC_RENDER_TILE_COLOR_VECTOR_COMPONENT)(b);
+
+  SKC_RENDER_TILE_COLOR      const a  = ba.hi;
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COLOR_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COLOR_VECTOR_COUNT; ii++)
+    color->vN.rgba[ii].odd.odd   = SKC_AS(SKC_RENDER_TILE_COLOR_VECTOR_COMPONENT)(a);
+
+#endif
+}
+
+//
+// Norbert Juffa notes: "GPU Pro Tip: Lerp Faster in C++"
+//
+// https://devblogs.nvidia.com/parallelforall/lerp-faster-cuda/
+//
+// Lerp in two fma/mad ops:
+//
+//    t * b + ((-t) * a + a)
+//
+// Note: OpenCL documents mix() as being implemented as:
+//
+//    a + (b - a) * t
+//
+// But this may be a native instruction on some devices.  For example,
+// on GEN9 there is an LRP "linear interoplation" function but it
+// doesn't appear to support half floats.
+//
+
+#if 1
+#define SKC_LERP(a,b,t)  mad(t,b,mad(-(t),a,a))
+#else
+#define SKC_LERP(a,b,t)  mix(a,b,t)
+#endif
+
+//
+// CPUs have a mock local address space so copying the gradient header
+// is probably not useful.  Just read directly from global.
+//
+
+#ifndef SKC_RENDER_GRADIENT_IS_GLOBAL
+#define SKC_RENDER_GRADIENT_SPACE  __local
+#else
+#define SKC_RENDER_GRADIENT_SPACE  __global
+#endif
+
+//
+// gradient is non-vertical
+//
+// removed the vertical (actually, horizontal) special case
+//
+
+static
+void
+skc_tile_color_fill_gradient_linear_nonvertical(__local  union skc_subgroup_smem     * SKC_RESTRICT const smem,
+                                                __global union skc_styling_cmd const * SKC_RESTRICT const commands,
+                                                uint                                 * SKC_RESTRICT const cmd_next,
+                                                union skc_tile_color                 * SKC_RESTRICT const color,
+                                                skc_ttck_hi_t                                       const ttck_hi)
+{
+  //
+  // Where is this tile?
+  //
+  // Note that the gradient is being sampled from pixel centers.
+  //
+  SKC_RENDER_GRADIENT_FLOAT const y =
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A) I##.5f P
+    (SKC_RENDER_GRADIENT_FLOAT)( SKC_RENDER_SCANLINE_VECTOR_EXPAND() ) +
+    (skc_ttck_hi_get_y(ttck_hi) * SKC_TILE_HEIGHT + (skc_subgroup_lane() * SKC_RENDER_SCANLINE_VECTOR_SIZE));
+
+  float                     const x = 0.5f + (skc_ttck_hi_get_x(ttck_hi) * SKC_TILE_WIDTH);
+
+  //
+  // Get starting numerator and denominator
+  //
+  // Note: if gh[0].dx is exactly 0.0f then this is a vertical
+  // gradient and can be handled by a special opcode.
+  //
+  // Note: the mad() ordering is slightly different than the original
+  // CUDA implementation.
+  //
+  union skc_gradient_vector const gv       = { vload4(0,&commands[*cmd_next].f32) };
+
+  *cmd_next += 4;
+
+  float                     const gv_x_dot = mad(x,gv.dx,gv.p0);
+  SKC_RENDER_GRADIENT_FLOAT const gv_numer = mad(y,gv.dy,gv_x_dot);
+
+  //
+  // Where are columns along gradient vector?
+  //
+  // TODO: Note that the gv_denom isn't multiplied through.
+  //
+  // Please doublecheck this... but I recall that in certain cases
+  // this wipes out some precision and results in minor but noticeable
+  // gradient artifacts.
+  //
+  // All arguments are scalars except gv_numer so a simpler
+  // evaluation might save some flops.
+  //
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    color->grad[ii].distance = mad(gv.dx,(float)ii,gv_numer) * gv.denom;
+
+  //
+  // is gradient non-repeating, repeating or reflecting?
+  //
+  switch (commands[(*cmd_next)++].u32)
+    {
+    case SKC_STYLING_GRADIENT_TYPE_LINEAR_NON_REPEATING:
+      // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+      for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+        color->grad[ii].distance = clamp(color->grad[ii].distance,0.0f,1.0f);
+      break;
+
+    case SKC_STYLING_GRADIENT_TYPE_LINEAR_REPEATING:
+      // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+      for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+        color->grad[ii].distance -= floor(color->grad[ii].distance);
+      break;
+
+    default: // PXL_STYLING_GRADIENT_TYPE_LINEAR_REFLECTING
+      //
+      // OPTIMIZATION: Can this be done in fewer than ~4 ops?
+      //
+      // Note: OpenCL "rint()" is round-to-nearest-even integer!
+      //
+      // Note: the floor() "round to -inf" op is implemented in the
+      // GEN op 'FRC' so probably don't use trunc() when floor will
+      // suffice.
+      //
+
+      // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+      for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+        {
+          SKC_RENDER_GRADIENT_FLOAT dist_abs = fabs(color->grad[ii].distance);
+          color->grad[ii].distance = fabs(dist_abs - rint(dist_abs));
+        }
+    }
+
+  //
+  // initialize "stoplerp" for all columns
+  //
+  uint const slope_count = commands[(*cmd_next)++].u32;
+  uint const gd_n_v1     = commands[(*cmd_next)++].u32; // REMOVE ME
+
+  {
+    float const slope = commands[(*cmd_next)++].f32;
+
+    // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+    for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+      color->grad[ii].stoplerp = color->grad[ii].distance * slope;
+  }
+
+  //
+  // compute stoplerp for remaining stops
+  //
+  for (int jj=1; jj<slope_count; jj++)
+    {
+      float const floor = (float)jj;
+      float const slope = commands[(*cmd_next)++].f32;
+
+      // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+      for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+        color->grad[ii].stoplerp = mad(min(0, color->grad[ii].stoplerp - floor),slope,color->grad[ii].stoplerp);
+    }
+
+  //
+  // copy gradient colors to local memory
+  //
+  uint const gd_n = slope_count + 1;
+
+#ifndef SKC_RENDER_GRADIENT_IS_GLOBAL
+  //
+  // copy entire gradient descriptor to local memory
+  //
+  for (uint ii=skc_subgroup_lane(); ii<gd_n*4; ii+=SKC_RENDER_SUBGROUP_SIZE)
+    smem->cmds[ii].u32 = commands[*cmd_next + ii].u32;
+
+  __local  half const * const SKC_RESTRICT gc = smem->gc + 0;
+#else
+  //
+  // prefetch entire gradient header
+  //
+  // no noticeable impact on performance
+  //
+  // prefetch(&commands[*cmd_next].u32,gh_words);
+  //
+  __global half const * const SKC_RESTRICT gc = commands[*cmd_next].f16a2 + 0;
+#endif
+
+  //
+  // adjust cmd_next so that V1 structure is consumed -- FIXME
+  //
+  *cmd_next += SKC_GRADIENT_CMD_WORDS_V2_ADJUST(gd_n_v1,gd_n);
+
+  //
+  // lerp between color pair stops
+  //
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    {
+      //
+      // Finally, we have the gradient stop index and the color stop
+      // pair lerp fraction
+      //
+      // Note that if these are vector values then a gather operation
+      // must occur -- there may be platforms (AVX-512?) that can
+      // perform an explicit gather on a vector type but it's not
+      // really expressible in OpenCL except implicitly with a
+      // workgroup of work items.
+      //
+      // ***********************
+      //
+      // FIXME -- USE HERB'S SINGLE FMA LERP
+      //
+      // ***********************
+      //
+      SKC_RENDER_GRADIENT_STOP const gc_stop = SKC_CONVERT(SKC_RENDER_GRADIENT_STOP)(color->grad[ii].stoplerp);
+      SKC_RENDER_GRADIENT_FRAC const gc_frac = SKC_CONVERT(SKC_RENDER_GRADIENT_FRAC)(color->grad[ii].stoplerp - floor(color->grad[ii].stoplerp));
+
+      {
+        SKC_RENDER_TILE_COLOR lo, hi;
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A) {                                       \
+          SKC_RENDER_TILE_COLOR_PAIR const cc = SKC_RENDER_TILE_COLOR_PAIR_LOAD(gc_stop C + 0,gc); \
+          lo C                                = cc.lo;                  \
+          hi C                                = cc.hi;                  \
+        }
+
+        SKC_RENDER_SCANLINE_VECTOR_EXPAND();
+
+        color->aN.rgba[ii].r = SKC_LERP(lo,hi,gc_frac);
+      }
+
+      //
+      //
+      //
+      {
+        SKC_RENDER_TILE_COLOR lo, hi;
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A) {                                       \
+          SKC_RENDER_TILE_COLOR_PAIR const cc = SKC_RENDER_TILE_COLOR_PAIR_LOAD(gc_stop C + gd_n,gc); \
+          lo C                                = cc.lo;                  \
+          hi C                                = cc.hi;                  \
+        }
+
+        SKC_RENDER_SCANLINE_VECTOR_EXPAND();
+
+        color->aN.rgba[ii].g = SKC_LERP(lo,hi,gc_frac);
+      }
+
+      //
+      //
+      //
+      {
+        SKC_RENDER_TILE_COLOR lo, hi;
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A) {                                       \
+          SKC_RENDER_TILE_COLOR_PAIR const cc = SKC_RENDER_TILE_COLOR_PAIR_LOAD(gc_stop C + gd_n*2,gc); \
+          lo C                                = cc.lo;                  \
+          hi C                                = cc.hi;                  \
+        }
+
+        SKC_RENDER_SCANLINE_VECTOR_EXPAND();
+
+        color->aN.rgba[ii].b = SKC_LERP(lo,hi,gc_frac);
+      }
+
+      //
+      //
+      //
+      {
+        SKC_RENDER_TILE_COLOR lo, hi;
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A) {                                       \
+          SKC_RENDER_TILE_COLOR_PAIR const cc = SKC_RENDER_TILE_COLOR_PAIR_LOAD(gc_stop C + gd_n*3,gc); \
+          lo C                                = cc.lo;                  \
+          hi C                                = cc.hi;                  \
+        }
+
+        SKC_RENDER_SCANLINE_VECTOR_EXPAND();
+
+        color->aN.rgba[ii].a = SKC_LERP(lo,hi,gc_frac);
+      }
+    }
+}
+
+//
+//
+//
+
+static
+void
+skc_tile_blend_over(union skc_tile_color       * SKC_RESTRICT const color_acc,
+                    union skc_tile_cover const * SKC_RESTRICT const cover_wip,
+                    union skc_tile_color const * SKC_RESTRICT const color_wip)
+{
+  //
+  // fralunco = cover.wip * acc.a
+  //
+  // acc.r    =  fralunco * wip.r + acc.r
+  // acc.g    =  fralunco * wip.g + acc.g
+  // acc.b    =  fralunco * wip.b + acc.b
+  // acc.a    = -fralunco * wip.a + acc.a
+  //
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    {
+      SKC_RENDER_TILE_COVER const fralunco = cover_wip->aN.c[ii] * color_acc->aN.rgba[ii].a;
+
+      color_acc->aN.rgba[ii].r = mad(+fralunco,color_wip->aN.rgba[ii].r,color_acc->aN.rgba[ii].r);
+      color_acc->aN.rgba[ii].g = mad(+fralunco,color_wip->aN.rgba[ii].g,color_acc->aN.rgba[ii].g);
+      color_acc->aN.rgba[ii].b = mad(+fralunco,color_wip->aN.rgba[ii].b,color_acc->aN.rgba[ii].b);
+      color_acc->aN.rgba[ii].a = mad(-fralunco,color_wip->aN.rgba[ii].a,color_acc->aN.rgba[ii].a);
+    }
+}
+
+//
+//
+//
+
+static
+void
+skc_tile_blend_plus(union skc_tile_color       * SKC_RESTRICT const color_acc,
+                    union skc_tile_cover const * SKC_RESTRICT const cover_wip,
+                    union skc_tile_color const * SKC_RESTRICT const color_wip)
+{
+  //
+  // cover_min = min(cover.wip,a.acc)
+  //
+  // r.acc =  cover_min * r.wip + r.acc
+  // g.acc =  cover_min * g.wip + g.acc
+  // b.acc =  cover_min * b.wip + b.acc
+  // a.acc = -cover_min * a.wip + a.acc
+  //
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    {
+      SKC_RENDER_TILE_COVER const cover_min = fmin(cover_wip->aN.c[ii],color_acc->aN.rgba[ii].a);
+
+      color_acc->aN.rgba[ii].r = mad(+cover_min,color_wip->aN.rgba[ii].r,color_acc->aN.rgba[ii].r);
+      color_acc->aN.rgba[ii].g = mad(+cover_min,color_wip->aN.rgba[ii].g,color_acc->aN.rgba[ii].g);
+      color_acc->aN.rgba[ii].b = mad(+cover_min,color_wip->aN.rgba[ii].b,color_acc->aN.rgba[ii].b);
+      color_acc->aN.rgba[ii].a = mad(-cover_min,color_wip->aN.rgba[ii].a,color_acc->aN.rgba[ii].a);
+    }
+}
+
+//
+//
+//
+
+static
+void
+skc_tile_blend_multiply(union skc_tile_color       * SKC_RESTRICT const color_acc,
+                        union skc_tile_cover const * SKC_RESTRICT const cover_wip,
+                        union skc_tile_color const * SKC_RESTRICT const color_wip)
+{
+  //
+  // r.acc = (cover.wip * r.wip) * r.acc
+  // g.acc = (cover.wip * g.wip) * g.acc
+  // b.acc = (cover.wip * b.wip) * b.acc
+  // a.acc = (cover.wip * a.wip) * (1.0 - a.acc) <-- a.acc is already (1.0 - alpha)
+  //
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    {
+      color_acc->aN.rgba[ii].r *= cover_wip->aN.c[ii] * color_wip->aN.rgba[ii].r;
+      color_acc->aN.rgba[ii].g *= cover_wip->aN.c[ii] * color_wip->aN.rgba[ii].g;
+      color_acc->aN.rgba[ii].b *= cover_wip->aN.c[ii] * color_wip->aN.rgba[ii].b;
+      color_acc->aN.rgba[ii].a *= cover_wip->aN.c[ii] * color_wip->aN.rgba[ii].a;
+    }
+}
+
+//
+//
+//
+
+static
+void
+skc_tile_blend_knockout(union skc_tile_cover       * SKC_RESTRICT const cover_acc,
+                        union skc_tile_color       * SKC_RESTRICT const color_acc,
+                        union skc_tile_cover const * SKC_RESTRICT const cover_wip,
+                        union skc_tile_color const * SKC_RESTRICT const color_wip)
+{
+  //
+  // cover.wip.contrib = (1.0 - cover.acc) * cover.wip
+  // cover.acc         = cover.acc + cover.wip.contrib
+  //
+  // r.acc =  cover.wip.contrib * r.wip + r.acc
+  // g.acc =  cover.wip.contrib * g.wip + g.acc
+  // b.acc =  cover.wip.contrib * b.wip + b.acc
+  // a.acc = -cover.wip.contrib * a.wip * a.acc
+  //
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    {
+      SKC_RENDER_TILE_COVER const contrib = (1 - cover_acc->aN.c[ii]) * cover_wip->aN.c[ii];
+
+      cover_acc->aN.c[ii]     += contrib;
+
+      color_acc->aN.rgba[ii].r = mad(+contrib,color_wip->aN.rgba[ii].r,color_acc->aN.rgba[ii].r);
+      color_acc->aN.rgba[ii].g = mad(+contrib,color_wip->aN.rgba[ii].g,color_acc->aN.rgba[ii].g);
+      color_acc->aN.rgba[ii].b = mad(+contrib,color_wip->aN.rgba[ii].b,color_acc->aN.rgba[ii].b);
+      color_acc->aN.rgba[ii].a = mad(-contrib,color_wip->aN.rgba[ii].a,color_acc->aN.rgba[ii].a);
+    }
+}
+
+//
+//
+//
+
+static
+void
+skc_tile_cover_msk_copy_wip(union skc_tile_cover       * SKC_RESTRICT const cover_msk,
+                            union skc_tile_cover const * SKC_RESTRICT const cover_wip)
+{
+#if !defined( SKC_RENDER_TILE_COVER_VECTOR ) || defined( SKC_ARCH_GEN9 )
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    cover_msk->aN.c[ii] = cover_wip->aN.c[ii];
+
+#else
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COVER_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COVER_VECTOR_COUNT; ii++)
+    cover_msk->vN.c[ii] = cover_wip->vN.c[ii];
+
+#endif
+}
+
+//
+//
+//
+
+static
+void
+skc_tile_cover_msk_copy_acc(union skc_tile_cover       * SKC_RESTRICT const cover_msk,
+                            union skc_tile_cover const * SKC_RESTRICT const cover_acc)
+{
+#if !defined( SKC_RENDER_TILE_COVER_VECTOR ) || defined( SKC_ARCH_GEN9 )
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    cover_msk->aN.c[ii] = cover_acc->aN.c[ii];
+
+#else
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COVER_VECTOR_COUNTN)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COVER_VECTOR_COUNT; ii++)
+    cover_msk->vN.c[ii] = cover_acc->vN.c[ii];
+
+#endif
+}
+
+//
+//
+//
+
+static
+void
+skc_tile_cover_accumulate(union skc_tile_cover       * SKC_RESTRICT const cover_acc,
+                          union skc_tile_cover const * SKC_RESTRICT const cover_wip)
+{
+  //
+  // cover.wip.contrib = (1.0 - cover.acc) * cover.wip
+  // cover.acc         = cover.acc + cover.wip.contrib
+  //
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    cover_acc->aN.c[ii] = mad(1 - cover_acc->aN.c[ii],cover_wip->aN.c[ii],cover_acc->aN.c[ii]);
+}
+
+//
+//
+//
+
+static
+void
+skc_tile_cover_wip_mask(union skc_tile_cover       * SKC_RESTRICT const cover_wip,
+                        union skc_tile_cover const * SKC_RESTRICT const cover_msk)
+{
+  //
+  // cover.wip *= cover.msk
+  //
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    cover_wip->aN.c[ii] *= cover_msk->aN.c[ii];
+}
+
+//
+//
+//
+
+static
+void
+skc_tile_cover_wip_zero(union skc_tile_cover * SKC_RESTRICT const cover)
+{
+#if !defined( SKC_RENDER_TILE_COVER_VECTOR ) // || defined( SKC_ARCH_GEN9 )
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    cover->aN.c[ii] = 0;
+
+#else
+  //
+  // GEN9 compiler underperforms on this
+  //
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COVER_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COVER_VECTOR_COUNT; ii++)
+    cover->vN.c[ii] = 0;
+
+#endif
+}
+
+static
+void
+skc_tile_cover_acc_zero(union skc_tile_cover * SKC_RESTRICT const cover)
+{
+#if !defined( SKC_RENDER_TILE_COVER_VECTOR ) // || defined( SKC_ARCH_GEN9 )
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    cover->aN.c[ii] = 0;
+
+#else
+  //
+  // GEN9 compiler underperforms on this
+  //
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COVER_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COVER_VECTOR_COUNT; ii++)
+    cover->vN.c[ii] = 0;
+
+#endif
+}
+
+static
+void
+skc_tile_cover_msk_zero(union skc_tile_cover * SKC_RESTRICT const cover)
+{
+#if !defined( SKC_RENDER_TILE_COVER_VECTOR ) || defined( SKC_ARCH_GEN9 )
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    cover->aN.c[ii] = 0;
+
+#else
+  //
+  // GEN9 compiler underperforms on this
+  //
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COVER_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COVER_VECTOR_COUNT; ii++)
+    cover->vN.c[ii] = 0;
+
+#endif
+}
+
+//
+//
+//
+
+static
+void
+skc_tile_cover_msk_one(union skc_tile_cover * SKC_RESTRICT const cover)
+{
+#if !defined( SKC_RENDER_TILE_COVER_VECTOR ) || defined( SKC_ARCH_GEN9 )
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    cover->aN.c[ii] = 1;
+
+#else
+  //
+  // GEN9 compiler underperforms on this
+  //
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COVER_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COVER_VECTOR_COUNT; ii++)
+    cover->vN.c[ii] = SKC_RENDER_TILE_COVER_VECTOR_ONE;
+
+#endif
+}
+
+//
+//
+//
+
+static
+void
+skc_tile_cover_msk_invert(union skc_tile_cover * SKC_RESTRICT const cover)
+{
+#if !defined( SKC_RENDER_TILE_COVER_VECTOR ) || defined( SKC_ARCH_GEN9 )
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    cover->aN.c[ii] = 1 - cover->aN.c[ii];
+
+#else
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COVER_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COVER_VECTOR_COUNT; ii++)
+    cover->vN.c[ii] = 1 - cover->vN.c[ii];
+
+#endif
+}
+
+//
+//
+//
+
+static
+void
+skc_tile_color_wip_zero(union skc_tile_color * SKC_RESTRICT const color)
+{
+#if !defined( SKC_RENDER_TILE_COLOR_VECTOR ) || defined( SKC_ARCH_GEN9 )
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    {
+      color->aN.rgba[ii].r = 0;
+      color->aN.rgba[ii].g = 0;
+      color->aN.rgba[ii].b = 0;
+      color->aN.rgba[ii].a = 1;
+    }
+
+#else
+  //
+  // DISABLED ON GEN9 -- probably a compiler bug
+  //
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COLOR_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COLOR_VECTOR_COUNT; ii++)
+    color->vN.rgba[ii].even.even = 0;
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COLOR_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COLOR_VECTOR_COUNT; ii++)
+    color->vN.rgba[ii].odd.even  = 0;
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COLOR_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COLOR_VECTOR_COUNT; ii++)
+    color->vN.rgba[ii].even.odd  = 0;
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COLOR_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COLOR_VECTOR_COUNT; ii++)
+    color->vN.rgba[ii].odd.odd   = 1;
+#endif
+}
+
+static
+void
+skc_tile_color_acc_zero(union skc_tile_color * SKC_RESTRICT const color)
+{
+#if !defined( SKC_RENDER_TILE_COLOR_VECTOR ) || defined( SKC_ARCH_GEN9 )
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    {
+      color->aN.rgba[ii].r = 0;
+      color->aN.rgba[ii].g = 0;
+      color->aN.rgba[ii].b = 0;
+      color->aN.rgba[ii].a = 1;
+    }
+
+#else
+  //
+  // DISABLED ON GEN9 -- probably a compiler bug
+  //
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COLOR_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COLOR_VECTOR_COUNT; ii++)
+    color->vN.rgba[ii].even.even = 0;
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COLOR_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COLOR_VECTOR_COUNT; ii++)
+    color->vN.rgba[ii].odd.even  = 0;
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COLOR_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COLOR_VECTOR_COUNT; ii++)
+    color->vN.rgba[ii].even.odd  = 0;
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COLOR_VECTOR_COUNT)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COLOR_VECTOR_COUNT; ii++)
+    color->vN.rgba[ii].odd.odd   = 1;
+#endif
+}
+
+//
+//
+//
+
+static
+bool
+skc_tile_color_test_opacity(union skc_tile_color const * SKC_RESTRICT const color)
+{
+  //
+  // returns true if tile is opaque
+  //
+  // various hacks to test for complete tile opacity
+  //
+  // note that front-to-back currently has alpha at 0.0f -- this can
+  // be harmonized to use a traditional alpha if we want to support
+  // rendering in either direction
+  //
+  // hack -- ADD/MAX/OR all alphas together and test for non-zero
+  //
+  SKC_RENDER_TILE_COLOR t = color->aN.rgba[0].a;
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH-1)))
+  for (uint ii=1; ii<SKC_TILE_WIDTH; ii++)
+    t += color->aN.rgba[ii].a;
+
+#if ( SKC_RENDER_SUBGROUP_SIZE == 1 )
+  //
+  // SIMD
+  //
+  return !any(t != ( 0 ));
+
+#elif ( SKC_RENDER_SCANLINE_VECTOR_SIZE == 1 )
+  //
+  // SIMT - scalar per lane
+  //
+  return !sub_group_any(t != 0);
+
+#else
+  //
+  // SIMT - vector per lane
+  //
+  return !sub_group_any(any(t != ( 0 )));
+
+#endif
+
+  //
+  // TODO: The alternative vector-per-lane implementation below is
+  // *not* believed to be performant because the terse vector-wide
+  // test is just hiding a series of comparisons and is likely worse
+  // than the blind ADD/MAX/OR'ing of all alphas followed by a single
+  // test.
+  //
+#if 0
+  //
+  // SIMT - vector per lane
+  //
+
+  // __attribute__((opencl_unroll_hint(SKC_RENDER_TILE_COLOR_VECTOR_COUNT-1)))
+  for (uint ii=0; ii<SKC_RENDER_TILE_COLOR_VECTOR_COUNT; ii++)
+    {
+      if (sub_group_any(any(color->vN.ba[ii].a != ( 0 ))))
+        return false;
+    }
+
+  return true;
+#endif
+}
+
+//
+//
+//
+
+static
+void
+skc_tile_background_over(__global union skc_styling_cmd const * SKC_RESTRICT const commands,
+                         uint                                 * SKC_RESTRICT const cmd_next,
+                         union skc_tile_color                 * SKC_RESTRICT const color)
+{
+  //
+  // acc.r = acc.a * r + acc.r
+  // acc.g = acc.a * g + acc.g
+  // acc.b = acc.a * b + acc.b
+  //
+  __global half const * const rgba_ptr = commands[*cmd_next].f16a2 + 0;
+
+  *cmd_next += 2;
+
+  SKC_RENDER_TILE_COLOR_PAIR const rg = SKC_RENDER_TILE_COLOR_PAIR_LOAD(0,rgba_ptr);
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    color->aN.rgba[ii].r = mad(color->aN.rgba[ii].a,rg.lo,color->aN.rgba[ii].r);
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    color->aN.rgba[ii].g = mad(color->aN.rgba[ii].a,rg.hi,color->aN.rgba[ii].g);
+
+  SKC_RENDER_TILE_COLOR_PAIR const ba = SKC_RENDER_TILE_COLOR_PAIR_LOAD(1,rgba_ptr);
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    color->aN.rgba[ii].b = mad(color->aN.rgba[ii].a,ba.lo,color->aN.rgba[ii].b);
+}
+
+//
+//
+//
+
+// #define SKC_SURFACE_IS_BUFFER
+#ifdef  SKC_SURFACE_IS_BUFFER
+
+static
+void
+skc_surface_composite_u8_rgba(__global SKC_RENDER_SURFACE_U8_RGBA * SKC_RESTRICT const surface,
+                              skc_uint                                           const surface_pitch,
+                              union skc_tile_color          const * SKC_RESTRICT const color,
+                              skc_ttck_hi_t                                      const ttck_hi)
+{
+  //
+  // NEW MAJOR OPTIMIZATION:
+  //
+  // Rotating and rasterizing the original world transform by -90
+  // degrees and then rendering the scene scene by +90 degrees enables
+  // all the final surface composite to be perfomed in perfectly
+  // coalesced wide transactions.
+  //
+  // For this reason, linear access to the framebuffer is preferred.
+  //
+  // vvvvvvvvvvvv OLD NOTE BELOW vvvvvvvvvvvvv
+  //
+  // NOTE THIS IS TRANSPOSED BY 90 DEGREES
+  //
+  // INTEL HAS A "BLOCK STORE" FEATURE THAT SOLVES THIS AND TEXTURE
+  // CACHES ARE ALSO PROBABLY SOMEWHAT FORGIVING.
+  //
+  // IT'S EASY TO TRANSPOSE THIS IN SMEM BEFORE STORING BUT IN THIS
+  // CPU EXAMPLE WE CAN PROBABLY DO WELL BY JUST WRITING OUT SCALARS
+  //
+  // FIXME -- NEED TO HARMONIZE BYTE AND COMPONENT COLOR CHANNEL
+  // ORDERING SO THAT COLOR CHANNELS MATCH 0xAARRGGBBAA ORDER
+  //
+  uint const pitch = surface_pitch / SKC_RENDER_SCANLINE_VECTOR_SIZE;
+  uint const x     = skc_ttck_hi_get_x(ttck_hi);
+  uint const y     = skc_ttck_hi_get_y(ttck_hi) ;
+  uint const base  = x * SKC_TILE_WIDTH * pitch + y * (SKC_TILE_HEIGHT / SKC_RENDER_SCANLINE_VECTOR_SIZE) + skc_subgroup_lane();
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    {
+      SKC_RENDER_SURFACE_U8_RGBA rgba = ( 0xFF000000 );
+
+      rgba |= SKC_CONVERT(SKC_RENDER_SURFACE_U8_RGBA)(color->aN.rgba[ii].r * 255);
+      rgba |= SKC_CONVERT(SKC_RENDER_SURFACE_U8_RGBA)(color->aN.rgba[ii].g * 255) << 8;
+      rgba |= SKC_CONVERT(SKC_RENDER_SURFACE_U8_RGBA)(color->aN.rgba[ii].b * 255) << 16;
+
+      surface[base + ii * pitch] = rgba;
+
+      // printf("%08v2X\n",rgba);
+    }
+}
+
+#else
+
+static
+void
+skc_surface_composite_u8_rgba(__write_only image2d_t                          surface,
+                              union skc_tile_color const * SKC_RESTRICT const color,
+                              skc_ttck_hi_t                                   const ttck_hi)
+{
+  //
+  // NEW MAJOR OPTIMIZATION:
+  //
+  // Rotating and rasterizing the original world transform by -90
+  // degrees and then rendering the scene scene by +90 degrees enables
+  // all the final surface composite to be perfomed in perfectly
+  // coalesced wide transactions.
+  //
+  // For this reason, linear access to the framebuffer is preferred.
+  //
+  // vvvvvvvvvvvv OLD NOTE BELOW vvvvvvvvvvvvv
+  //
+  // NOTE THIS IS TRANSPOSED BY 90 DEGREES
+  //
+  // INTEL HAS A "BLOCK STORE" FEATURE THAT SOLVES THIS AND TEXTURE
+  // CACHES ARE ALSO PROBABLY SOMEWHAT FORGIVING.
+  //
+  // IT'S EASY TO TRANSPOSE THIS IN SMEM BEFORE STORING BUT IN THIS
+  // CPU EXAMPLE WE CAN PROBABLY DO WELL BY JUST WRITING OUT SCALARS
+  //
+  // FIXME -- NEED TO HARMONIZE BYTE AND COMPONENT COLOR CHANNEL
+  // ORDERING SO THAT COLOR CHANNELS MATCH 0xAARRGGBBAA ORDER
+  //
+
+#if 1
+  int x = skc_ttck_hi_get_x(ttck_hi) * SKC_TILE_WIDTH;
+  int y = skc_ttck_hi_get_y(ttck_hi) * SKC_TILE_HEIGHT + (skc_subgroup_lane() * SKC_RENDER_SCANLINE_VECTOR_SIZE);
+
+  // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+  for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+    {
+#ifdef SKC_RENDER_TILE_COLOR_INTERLEAVED
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A) {                       \
+        SKC_RENDER_SURFACE_WRITE(surface,               \
+                                 (int2)(x,y+I),         \
+                                 color->iN.rgba[ii] A); \
+      }
+
+#else
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A) {                               \
+        SKC_RENDER_SURFACE_COLOR const rgba =                   \
+          (SKC_RENDER_SURFACE_COLOR)                            \
+          (color->aN.rgba[ii].r C,                              \
+           color->aN.rgba[ii].g C,                              \
+           color->aN.rgba[ii].b C,                              \
+           1.0);                                                \
+        SKC_RENDER_SURFACE_WRITE(surface,(int2)(x,y+I),rgba);   \
+      }
+
+#endif
+
+      SKC_RENDER_SCANLINE_VECTOR_EXPAND();
+
+      x += 1;
+    }
+#else
+    int x = skc_ttck_hi_get_y(ttck_hi) * SKC_TILE_HEIGHT + (skc_subgroup_lane() * SKC_RENDER_SCANLINE_VECTOR_SIZE);
+    int y = skc_ttck_hi_get_x(ttck_hi) * SKC_TILE_WIDTH;
+
+    // __attribute__((opencl_unroll_hint(SKC_TILE_WIDTH)))
+    for (uint ii=0; ii<SKC_TILE_WIDTH; ii++)
+      {
+#ifdef SKC_RENDER_TILE_COLOR_INTERLEAVED
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A) {                       \
+        SKC_RENDER_SURFACE_WRITE(surface,               \
+                                 (int2)(x+I,y+ii),      \
+                                 color->iN.rgba[ii] A); \
+      }
+
+#else
+
+#undef  SKC_EXPAND_X
+#define SKC_EXPAND_X(I,S,C,P,A) {                               \
+      SKC_RENDER_SURFACE_COLOR const rgba =                     \
+        (SKC_RENDER_SURFACE_COLOR)                              \
+        (color->aN.rgba[ii].r C,                                \
+        color->aN.rgba[ii].g C,                                 \
+        color->aN.rgba[ii].b C,                                 \
+        1.0);                                                   \
+      SKC_RENDER_SURFACE_WRITE(surface,(int2)(x+I,y+ii),rgba);  \
+    }
+
+#endif
+
+      SKC_RENDER_SCANLINE_VECTOR_EXPAND();
+    }
+
+#endif
+}
+
+#endif
+
+//
+//
+//
+static
+uint const
+skc_ttck_lane(uint const ttck_idx)
+{
+  return ttck_idx & SKC_RENDER_SUBGROUP_MASK;
+}
+
+//
+// RENDER KERNEL
+//
+
+__kernel
+SKC_RENDER_KERNEL_ATTRIBS
+void
+skc_kernel_render(__global   union  skc_layer_node   const * SKC_RESTRICT const layers,
+                  __global   struct skc_group_node   const * SKC_RESTRICT const groups,
+                  __global   union  skc_styling_cmd  const * SKC_RESTRICT const commands,     // FIXME -- rename
+
+                  __global   skc_ttck_t              const * SKC_RESTRICT const ttck_keys,    // rename: keys
+                  skc_uint                                                const ttck_count,   // rename: key_count
+
+                  __global   uint                    const * SKC_RESTRICT const ttck_offsets, // rename: offsets
+                  skc_uint                                                const tile_count,   // rename: offset_count
+
+                  __global   skc_ttxb_t              const * SKC_RESTRICT const ttxb_extent,
+#ifdef SKC_SURFACE_IS_BUFFER
+                  __global   void                          * SKC_RESTRICT const surface,
+#else
+                  __write_only image2d_t                                        surface,
+#endif
+#ifdef SKC_SURFACE_IS_BUFFER
+                  skc_uint                                                const surface_pitch,
+#endif
+                  uint4                                                   const tile_clip)    // rename: clip
+{
+  //
+  // Each subgroup is responsible for a tile.  No extra subgroups are
+  // launched.
+  //
+  // FIXME -- might be better implemented as a "grid stride loop" if
+  // Intel GEN really has a local memory "quantum" of 4KB which means
+  // we would need to launch 4 subgroups per workgroup.
+  //
+  // Confirmed: GEN8 has 4KB SLM workgroup min while GEN9 is 1KB.
+  //
+
+  //
+  // declare tile cover and color registers
+  //
+  // this used to be a neat unified struct but the Intel GEN compiler
+  // wasn't cooperating and spilling to private memory even though all
+  // registers were indexed by constants
+  //
+  union skc_tile_color  color_wip;
+  union skc_tile_color  color_acc;
+
+  union skc_tile_cover  cover_wip;
+  union skc_tile_cover  cover_acc;
+  union skc_tile_cover  cover_msk;
+
+  //
+  // which subgroup in the grid is this?
+  //
+  // TAKE NOTE: the Intel GEN compiler is recognizing get_group_id(0)
+  // as a uniform but the alternative calculation used when there are
+  // multiple subgroups per workgroup is not cooperating and
+  // driving spillage elsewhere.
+  //
+#if ( SKC_RENDER_WORKGROUP_SUBGROUPS == 1 )
+  skc_uint const ttck_offset_idx = get_group_id(0);
+#else
+  skc_uint const ttck_offset_idx = get_group_id(0) * SKC_RENDER_WORKGROUP_SUBGROUPS + get_sub_group_id();
+#endif
+
+  //
+  // load the starting ttck for this offset and get a bound on the max
+  // number of keys that might be loaded
+  //
+  // these are uniform across all subgroup lanes
+  //
+  skc_uint ttck_idx = ttck_offsets[ttck_offset_idx];
+
+  //
+  // FIXME -- SIMD/CPU version should probaby load a 256-bit (4-wide)
+  // vector of ttck keys
+  //
+#ifndef SKC_TARGET_ARCH_COALESCED_LOAD_TTCK
+
+  skc_ttck_t ttck = ttck_keys[ttck_idx];
+
+#else
+
+  uint const ttck_base = ttck_idx & ~SKC_RENDER_SUBGROUP_MASK;
+  uint const ttck_lane = ttck_idx &  SKC_RENDER_SUBGROUP_MASK;
+  skc_ttck_t ttck_s    = ttck_keys[min(ttck_base+max(get_sub_group_local_id(),ttck_lane),ttck_count-1)]
+
+#endif
+
+  //
+  // set up style group/layer state
+  //
+  struct skc_styling_group {
+    union skc_group_range range;
+    skc_uint              depth;
+    skc_uint              id;
+  } group;
+
+  group.range.lo = 0;
+  group.range.hi = SKC_UINT_MAX;
+  group.depth    = 0;
+  group.id       = SKC_UINT_MAX;
+
+  //
+  // start with clear tile opacity, knockout and flag bits
+  //
+  // uint color_acc_opacity  = 0; // per lane bit mask -- assumes a PIXEL_TILE_HEIGHT <= 32
+  // uint cover_acc_knockout = 0; // per lane bit mask -- assumes a PIXEL_TILE_HEIGHT <= 32
+  //
+  skc_uint flags = 0;
+
+  //
+  // declare and initialize accumulators
+  //
+#if ( SKC_RENDER_WORKGROUP_SUBGROUPS == 1 )
+  __local union skc_subgroup_smem                      smem[1];
+#else
+  __local union skc_subgroup_smem                      smem_wg[SKC_RENDER_WORKGROUP_SUBGROUPS];
+  __local union skc_subgroup_smem * SKC_RESTRICT const smem = smem_wg + get_sub_group_id();
+#endif
+
+#ifdef SKC_TARGET_ARCH_COALESCED_LOAD_TTCK
+  //
+  // select the initial ttck key
+  //
+  skc_ttck_t ttck;
+#if 0
+  ttck    = sub_group_broadcast(ttck_s,ttck_lane);    // SHOULD WORK BUT .4454 COMPILER IS BROKEN
+#else
+  ttck.lo = sub_group_broadcast(ttck_s.lo,ttck_lane); // EXPLICIT WORKAROUND
+  ttck.hi = sub_group_broadcast(ttck_s.hi,ttck_lane);
+#endif
+
+#endif
+
+  //
+  // save the first key so we know what tile we're in
+  //
+  skc_ttck_t ttck0 = ttck;
+
+  //
+  // evaluate the coarse clip as late as possible
+  //
+  skc_uint const ttck_hi_x = skc_ttck_hi_get_x(ttck0.hi);
+
+  if ((ttck_hi_x < tile_clip.lo.x) || (ttck_hi_x >= tile_clip.hi.x))
+    return;
+
+  skc_uint const ttck_hi_y = skc_ttck_hi_get_y(ttck0.hi);
+
+  if ((ttck_hi_y < tile_clip.lo.y) || (ttck_hi_y >= tile_clip.hi.y))
+    return;
+
+#if 0
+  printf("< %u, %u >\n",ttck_hi_x,ttck_hi_y);
+#endif
+
+  //
+  // load -> scatter -> flush
+  //
+  while (true)
+    {
+      // if scattering is disabled then just run through ttck keys
+      bool const is_scatter_enabled = (flags & SKC_TILE_FLAGS_SCATTER_SKIP) == 0;
+
+      // need to clear accumulators before a scatter loop
+      if (is_scatter_enabled)
+        {
+          skc_tile_aa_zero(smem);
+        }
+
+      do {
+        // skip scattering?
+        if (is_scatter_enabled)
+          {
+            skc_block_id_t const xb_id = skc_ttck_lo_get_ttxb_id(ttck.lo);
+
+            if (skc_ttck_lo_is_prefix(ttck.lo)) {
+              skc_scatter_ttpb(ttxb_extent,smem,xb_id);
+            } else {
+              skc_scatter_ttsb(ttxb_extent,smem,xb_id);
+            }
+          }
+
+        //
+        // any ttck keys left?
+        //
+        if (++ttck_idx >= ttck_count)
+          {
+            flags |= SKC_TILE_FLAGS_FLUSH_FINALIZE;
+            break;
+          }
+
+        //
+        // process next ttck key
+        //
+#ifndef SKC_TARGET_ARCH_COALESCED_LOAD_TTCK
+        //
+        // SIMD -- read next key
+        //
+        ttck = ttck_keys[ttck_idx];
+#else
+        //
+        // SIMT -- refresh the ttck_s?
+        //
+        uint const ttck_lane_next = ttck_idx & SKC_RENDER_SUBGROUP_MASK;
+
+        if (ttck_lane_next == 0)
+          ttck_s = ttck_keys[min(ttck_idx+get_sub_group_local_id(),ttck_count-1)];
+
+        //
+        // broadcast next key to entire subgroup
+        //
+#if 0
+        ttck    = sub_group_broadcast(ttck_s,ttck_lane_next);    // SHOULD WORK BUT .4454 COMPILER IS BROKEN
+#else
+        ttck.lo = sub_group_broadcast(ttck_s.lo,ttck_lane_next); // EXPLICIT WORKAROUND
+        ttck.hi = sub_group_broadcast(ttck_s.hi,ttck_lane_next);
+#endif
+#endif
+        // continue scattering if on same YXL layer
+      } while (skc_ttck_equal_yxl(ttck0,ttck));
+
+      // finalize if no longer on same YX tile
+      if (!skc_ttck_hi_equal_yx(ttck0.hi,ttck.hi))
+        {
+          // otherwise, unwind the tile styling and exit
+          flags |= SKC_TILE_FLAGS_FLUSH_FINALIZE;
+        }
+
+      //
+      // given: new layer id from ttxk key
+      //
+      // load [layer id]{ group id, depth }
+      //
+      // if within current group's layer range
+      //
+      //   if at same depth
+      //
+      //     load and execute cover>[mask>]color>blend commands
+      //
+      //   else if not at same depth then move deeper
+      //
+      //     for all groups in group trail from cur depth to new depth
+      //       enter group, saving and initializing regs as necessary
+      //     increment depth and update layer range
+      //     load and execute cover>[mask>]color>blend commands
+      //
+      // else not within layer range
+      //
+      //   exit current group, restoring regs as necessary
+      //   decrement depth and update layer range
+      //
+      //
+      skc_layer_id         const layer_id_new   = skc_ttck_get_layer(ttck0); // FIXME -- this was ttck_hi
+      union skc_layer_node const layer_node_new = layers[layer_id_new];
+
+      // clear flag that controls group/layer traversal
+      flags &= ~SKC_TILE_FLAGS_FLUSH_COMPLETE;
+
+      do {
+        bool const unwind = (flags & SKC_TILE_FLAGS_FLUSH_UNWIND) != 0;
+
+        //
+        // is layer a child of the current parent group?
+        //
+        uint cmd_next = 0;
+
+        if (!unwind && (layer_node_new.parent == group.id))
+          {
+            // execute this layer's cmds
+            cmd_next = layer_node_new.cmds;
+
+            // if this is final then configure so groups get unwound, otherwise we're done
+            flags   |= ((flags & SKC_TILE_FLAGS_FLUSH_FINALIZE) ? SKC_TILE_FLAGS_FLUSH_UNWIND : SKC_TILE_FLAGS_FLUSH_COMPLETE);
+          }
+        else if (!unwind && (layer_id_new >= group.range.lo && layer_id_new <= group.range.hi))
+          {
+            //
+            // is layer in a child group?
+            //
+            union skc_group_parents const gp = groups[layer_node_new.parent].parents;
+            uint                    const gn = gp.depth - ++group.depth;
+
+            if (gn == 0)
+              group.id = layer_node_new.parent;
+            else
+              group.id = commands[gp.base + gn - 1].parent;
+
+            // update group layer range
+            group.range = groups[group.id].range;
+
+            // enter current group
+            cmd_next    = groups[group.id].cmds.enter;
+          }
+        else // otherwise, exit this group
+          {
+            // enter current group
+            cmd_next = groups[group.id].cmds.leave;
+
+            // decrement group depth
+            if (--group.depth == 0)
+              {
+                flags |= SKC_TILE_FLAGS_FLUSH_COMPLETE;
+              }
+            else
+              {
+                // get path_base of current group
+                uint const gnpb = groups[group.id].parents.base;
+
+                // get parent of current group
+                group.id    = commands[gnpb].parent;
+
+                // update group layer range
+                group.range = groups[group.id].range;
+              }
+          }
+
+        //
+        // execute cmds
+        //
+        while (true)
+          {
+            union skc_styling_cmd const cmd = commands[cmd_next++];
+
+            switch (cmd.u32 & SKC_STYLING_OPCODE_MASK_OPCODE)
+              {
+              case SKC_STYLING_OPCODE_NOOP:
+                break;
+
+              case SKC_STYLING_OPCODE_COVER_NONZERO:
+                skc_tile_cover_nonzero(smem,&cover_wip,&color_wip);
+                break;
+
+              case SKC_STYLING_OPCODE_COVER_EVENODD:
+                skc_tile_cover_evenodd(smem,&cover_wip,&color_wip);
+                break;
+
+              case SKC_STYLING_OPCODE_COVER_ACCUMULATE:
+                skc_tile_cover_accumulate(&cover_acc,&cover_wip);
+                break;
+
+              case SKC_STYLING_OPCODE_COVER_MASK:
+                skc_tile_cover_wip_mask(&cover_wip,&cover_msk);
+                break;
+
+              case SKC_STYLING_OPCODE_COVER_WIP_ZERO:
+                skc_tile_cover_wip_zero(&cover_wip);
+                break;
+
+              case SKC_STYLING_OPCODE_COVER_ACC_ZERO:
+                skc_tile_cover_acc_zero(&cover_acc);
+                break;
+
+              case SKC_STYLING_OPCODE_COVER_MASK_ZERO:
+                skc_tile_cover_msk_zero(&cover_msk);
+                break;
+
+              case SKC_STYLING_OPCODE_COVER_MASK_ONE:
+                skc_tile_cover_msk_one(&cover_msk);
+                break;
+
+              case SKC_STYLING_OPCODE_COVER_MASK_INVERT:
+                skc_tile_cover_msk_invert(&cover_msk);
+                break;
+
+              case SKC_STYLING_OPCODE_COLOR_FILL_SOLID:
+                skc_tile_color_fill_solid(commands,&cmd_next,&color_wip);
+                break;
+
+              case SKC_STYLING_OPCODE_COLOR_FILL_GRADIENT_LINEAR:
+                //
+                // FIXME -- gradients shouldn't be executing so much
+                // conditional driven code at runtime since we *know*
+                // the gradient style on the host can just create a
+                // new styling command to exploit this.
+                //
+                // FIXME -- it might be time to try using the GPU's
+                // sampler on a linear array of half4 vectors -- it
+                // might outperform the explicit load/lerp routines.
+                //
+                // FIXME -- optimizing for vertical gradients (uhhh,
+                // they're actually horizontal due to the -90 degree
+                // view transform) is nice but is it worthwhile to
+                // have this in the kernel?  Easy to add it back...
+                //
+#if defined( SKC_ARCH_GEN9 )
+                // disable gradients due to exessive spillage -- fix later
+                cmd_next += SKC_GRADIENT_CMD_WORDS_V1(commands[cmd_next+6].u32);
+#else
+                skc_tile_color_fill_gradient_linear_nonvertical(smem,commands,&cmd_next,&color_wip,ttck0.hi);
+#endif
+                break;
+
+              case SKC_STYLING_OPCODE_COLOR_WIP_ZERO:
+                skc_tile_color_wip_zero(&color_wip);
+                break;
+
+              case SKC_STYLING_OPCODE_COLOR_ACC_ZERO:
+                skc_tile_color_acc_zero(&color_acc);
+                break;
+
+              case SKC_STYLING_OPCODE_BLEND_OVER:
+                skc_tile_blend_over(&color_acc,&cover_wip,&color_wip);
+                break;
+
+              case SKC_STYLING_OPCODE_BLEND_PLUS:
+                skc_tile_blend_plus(&color_acc,&cover_wip,&color_wip);
+                break;
+
+              case SKC_STYLING_OPCODE_BLEND_MULTIPLY:
+                skc_tile_blend_multiply(&color_acc,&cover_wip,&color_wip);
+                break;
+
+              case SKC_STYLING_OPCODE_BLEND_KNOCKOUT:
+                skc_tile_blend_knockout(&cover_acc,&color_acc,&cover_wip,&color_wip);
+                break;
+
+              case SKC_STYLING_OPCODE_COVER_WIP_MOVE_TO_MASK:
+                // skc_tile_cover_msk_copy_wip(&cover_msk,&cover_wip);
+                break;
+
+              case SKC_STYLING_OPCODE_COVER_ACC_MOVE_TO_MASK:
+                // skc_tile_cover_msk_copy_acc(&cover_msk,&cover_acc);
+                break;
+
+              case SKC_STYLING_OPCODE_BACKGROUND_OVER:
+                skc_tile_background_over(commands,&cmd_next,&color_acc);
+                break;
+
+              case SKC_STYLING_OPCODE_SURFACE_COMPOSITE:
+#ifdef SKC_SURFACE_IS_BUFFER
+                skc_surface_composite_u8_rgba(surface,surface_pitch,&color_acc,ttck0.hi);
+#else
+                skc_surface_composite_u8_rgba(surface,              &color_acc,ttck0.hi);
+#endif
+                break;
+
+              case SKC_STYLING_OPCODE_COLOR_ACC_TEST_OPACITY:
+                if (skc_tile_color_test_opacity(&color_acc))
+                  flags |= SKC_TILE_FLAGS_SCATTER_SKIP;
+                break;
+
+              default:
+                return; // this is an illegal opcode -- trap and die!
+              }
+
+            //
+            // if sign bit is set then this was final command
+            //
+            if (cmd.s32 < 0)
+              break;
+          }
+
+        // continue as long as tile flush isn't complete
+      } while ((flags & SKC_TILE_FLAGS_FLUSH_COMPLETE) == 0);
+
+      // return if was the final flush
+      if (flags & SKC_TILE_FLAGS_FLUSH_FINALIZE)
+        return;
+
+      // update wip ttck_hi
+      ttck0 = ttck;
+    }
+}
+
+//
+//
+//
diff --git a/src/compute/skc/runtime.h b/src/compute/skc/runtime.h
new file mode 100644
index 0000000..6050f9b
--- /dev/null
+++ b/src/compute/skc/runtime.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "allocator_host.h"
+
+//
+// HOST MEMORY ALLOCATION
+//
+
+void *
+skc_runtime_host_perm_alloc(struct skc_runtime * const runtime,
+                            skc_mem_flags_e      const flags,
+                            size_t               const size);
+
+void
+skc_runtime_host_perm_free(struct skc_runtime * const runtime,
+                           void               * const mem);
+
+void *
+skc_runtime_host_temp_alloc(struct skc_runtime * const runtime,
+                            skc_mem_flags_e      const flags,
+                            size_t               const size,
+                            skc_subbuf_id_t    * const subbuf_id,
+                            size_t             * const subbuf_size);
+
+void
+skc_runtime_host_temp_free(struct skc_runtime * const runtime,
+                           void               * const mem,
+                           skc_subbuf_id_t      const subbuf_id);
+
+
+//
+//
+//
diff --git a/src/compute/skc/runtime_cl.c b/src/compute/skc/runtime_cl.c
new file mode 100644
index 0000000..a745ed0
--- /dev/null
+++ b/src/compute/skc/runtime_cl.c
@@ -0,0 +1,362 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+//
+//
+//
+
+#include "runtime_cl.h"
+#include "common/cl/assert_cl.h"
+
+//
+//
+//
+
+static is_verbose = true;
+
+//
+// FIXME -- all variable length device queries need to start querying
+// the parameter's return size before getting its value
+//
+// FIXME -- this is now handled by the common/cl/find.* routine
+//
+
+union skc_cl_device_version {
+  struct {
+    cl_uchar opencl_space[7]; // "OpenCL_"
+    cl_uchar major;
+    cl_uchar dot;
+    cl_uchar minor;
+#if 1 // Intel NEO requires at least 16 bytes
+    cl_uchar space;
+    cl_uchar vendor[32];
+#endif
+  };
+  struct {
+    cl_uchar aN[];
+  };
+};
+
+typedef cl_bitfield cl_diagnostic_verbose_level_intel;
+
+#define CL_CONTEXT_SHOW_DIAGNOSTICS_INTEL           0x4106
+#define CL_CONTEXT_DIAGNOSTICS_LEVEL_BAD_INTEL      0x2
+#define CL_CONTEXT_DIAGNOSTICS_LEVEL_GOOD_INTEL     0x1
+#define CL_CONTEXT_DIAGNOSTICS_LEVEL_NEUTRAL_INTEL  0x4
+
+static
+void 
+CL_CALLBACK 
+skc_context_callback(char const * error, void const * info, size_t size, void * user)
+{
+  if (info != NULL )
+    {
+      fprintf(stderr,"%s\n",error);
+    }
+}
+
+//
+//
+//
+
+skc_err
+skc_runtime_cl_create(struct skc_runtime_cl * const runtime_cl,
+                      char const            * const target_platform_substring,
+                      char const            * const target_device_substring,
+                      cl_context_properties         context_properties[])
+{
+  skc_err err = SKC_ERR_SUCCESS;
+  
+  //
+  // search available devices for a match
+  //
+#define PLATFORM_IDS_MAX         16
+#define DEVICE_IDS_MAX           16
+#define PLATFORM_NAME_SIZE_MAX   64
+#define DEVICE_NAME_SIZE_MAX     64
+#define DRIVER_VERSION_SIZE_MAX  64
+
+  cl_int         cl_err;
+
+  cl_platform_id platform_ids[PLATFORM_IDS_MAX];
+  cl_device_id   device_ids  [PLATFORM_IDS_MAX][DEVICE_IDS_MAX];
+
+  cl_uint        platform_count;
+  cl_uint        device_count[PLATFORM_IDS_MAX];
+  
+  cl_uint        platform_idx = UINT32_MAX, device_idx = UINT32_MAX;
+
+  bool           match = false; // find _first_ match
+
+  //
+  // get number of platforms
+  //
+  cl(GetPlatformIDs(PLATFORM_IDS_MAX,platform_ids,&platform_count));
+
+  //
+  // search platforms
+  //
+  for (cl_uint ii=0; ii<platform_count; ii++)
+    {
+      char platform_name[PLATFORM_NAME_SIZE_MAX];
+
+      cl(GetPlatformInfo(platform_ids[ii],
+                         CL_PLATFORM_NAME,
+                         sizeof(platform_name),
+                         platform_name,
+                         NULL));
+
+      if (!match && (strstr(platform_name,target_platform_substring) != NULL)) 
+        {
+          platform_idx = ii;
+        }
+
+      if (is_verbose) {
+        fprintf(stdout,"%2u: %s\n",ii,platform_name);
+      }
+
+      cl_err = clGetDeviceIDs(platform_ids[ii],
+                              CL_DEVICE_TYPE_ALL,
+                              DEVICE_IDS_MAX,
+                              device_ids[ii],
+                              device_count+ii);
+
+      if (cl_err != CL_DEVICE_NOT_FOUND)
+        cl_ok(cl_err);
+
+      for (cl_uint jj=0; jj<device_count[ii]; jj++)
+        {
+          char                        device_name[DEVICE_NAME_SIZE_MAX];
+          union skc_cl_device_version device_version;
+          cl_uint                     device_align_bits;
+          char                        driver_version[DRIVER_VERSION_SIZE_MAX];
+
+          cl(GetDeviceInfo(device_ids[ii][jj],
+                           CL_DEVICE_NAME,
+                           sizeof(device_name),
+                           device_name,
+                           NULL));
+
+          // FIXME -- some of these variable length parameters should
+          // use the "size the param before reading" idiom
+          cl(GetDeviceInfo(device_ids[ii][jj],
+                           CL_DEVICE_VERSION,
+                           sizeof(device_version),
+                           device_version.aN,
+                           NULL));
+
+          cl(GetDeviceInfo(device_ids[ii][jj],
+                           CL_DEVICE_MEM_BASE_ADDR_ALIGN,
+                           sizeof(device_align_bits),
+                           &device_align_bits,
+                           NULL));
+          
+          cl_uint const base_align = device_align_bits / 8; // bytes
+
+          cl(GetDeviceInfo(device_ids[ii][jj],
+                           CL_DRIVER_VERSION,
+                           sizeof(driver_version),
+                           driver_version,
+                           NULL));
+          
+          if (!match && (platform_idx == ii) && (strstr(device_name,target_device_substring) != NULL))
+            {
+              match      = true;
+              device_idx = jj;
+
+              runtime_cl->version.major = device_version.major - 48;
+              runtime_cl->version.minor = device_version.minor - 48;
+              runtime_cl->base_align    = base_align;
+
+              if (is_verbose) {
+                fprintf(stdout," >>>");
+              }
+            }
+          else if (is_verbose) 
+            {
+              fprintf(stdout,"    ");
+            }
+
+          if (is_verbose) {
+            fprintf(stdout,
+                    " %1u: %s [ %s ] [ %s ] [ %u ]\n",
+                    jj,
+                    device_name,
+                    device_version.aN,
+                    driver_version,
+                    base_align);
+          }
+        }
+    }
+
+  if (is_verbose) {
+    fprintf(stdout,"\n");
+  }
+
+  //
+  // get target platform and device
+  //
+  if (platform_idx >= platform_count)
+    {
+      fprintf(stderr,"no match for target platform substring %s\n",target_platform_substring);
+      exit(EXIT_FAILURE);
+    }
+  if (device_idx >= device_count[platform_idx])
+    {
+      fprintf(stderr,"no match for target device substring %s\n",target_device_substring);
+      exit(EXIT_FAILURE);
+    }
+
+  runtime_cl->platform_id = platform_ids[platform_idx];
+  runtime_cl->device_id   = device_ids  [platform_idx][device_idx];
+
+  //
+  // create context
+  //
+
+#if 0
+  cl_context_properties context_properties[] = 
+    { 
+      CL_CONTEXT_PLATFORM,(cl_context_properties)runtime_cl->platform_id,
+      0 
+    };
+#else
+  context_properties[1] = (cl_context_properties)runtime_cl->platform_id;
+#endif
+
+  runtime_cl->context = clCreateContext(context_properties,
+                                    1,
+                                    &runtime_cl->device_id,
+                                    skc_context_callback,
+                                    NULL,
+                                    &cl_err);
+  cl_ok(cl_err);
+
+  //
+  // get device name, driver version, and unified memory flag
+  //
+  if (is_verbose)
+    {
+      char                       device_name[DEVICE_NAME_SIZE_MAX];
+      char                       driver_version[DRIVER_VERSION_SIZE_MAX];
+      cl_bool                    device_is_unified; 
+      cl_device_svm_capabilities svm_caps;
+      size_t                     printf_buffer_size;
+
+      cl(GetDeviceInfo(runtime_cl->device_id,
+                       CL_DEVICE_NAME,
+                       sizeof(device_name),
+                       device_name,
+                       NULL));
+
+      cl(GetDeviceInfo(runtime_cl->device_id,
+                       CL_DRIVER_VERSION,
+                       sizeof(driver_version),
+                       driver_version,
+                       NULL));
+
+      cl(GetDeviceInfo(runtime_cl->device_id,
+                       CL_DEVICE_HOST_UNIFIED_MEMORY,
+                       sizeof(device_is_unified),
+                       &device_is_unified,
+                       NULL));
+
+      cl(GetDeviceInfo(runtime_cl->device_id,
+                       CL_DEVICE_SVM_CAPABILITIES,
+                       sizeof(svm_caps),
+                       &svm_caps,
+                       0));
+
+      cl(GetDeviceInfo(runtime_cl->device_id,
+                       CL_DEVICE_PRINTF_BUFFER_SIZE,
+                       sizeof(printf_buffer_size),
+                       &printf_buffer_size,
+                       NULL));
+
+      fprintf(stderr,
+              "CL_DEVICE_SVM_COARSE_GRAIN_BUFFER  %c\n"
+              "CL_DEVICE_SVM_FINE_GRAIN_BUFFER    %c\n"
+              "CL_DEVICE_SVM_FINE_GRAIN_SYSTEM    %c\n"
+              "CL_DEVICE_SVM_ATOMICS              %c\n"
+              "CL_DEVICE_PRINTF_BUFFER_SIZE       %zu\n\n",
+              svm_caps & CL_DEVICE_SVM_COARSE_GRAIN_BUFFER ? '*' : '-',
+              svm_caps & CL_DEVICE_SVM_FINE_GRAIN_BUFFER   ? '*' : '-',
+              svm_caps & CL_DEVICE_SVM_FINE_GRAIN_SYSTEM   ? '*' : '-',
+              svm_caps & CL_DEVICE_SVM_ATOMICS             ? '*' : '-',
+              printf_buffer_size);
+    }
+
+  return err;
+}
+
+//
+//
+//
+
+skc_err
+skc_runtime_cl_dispose(struct skc_runtime_cl * const runtime_cl)
+{
+  // FIXME
+  printf("%s incomplete!\n",__func__);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
+
+cl_command_queue
+skc_runtime_cl_create_cq(struct skc_runtime_cl * const runtime_cl, skc_cq_type_e const type)
+{
+  cl_command_queue cq;
+
+  if (runtime_cl->version.major < 2)
+    {
+      //
+      // <= OpenCL 1.2
+      //
+      cl_int cl_err;
+
+      cq = clCreateCommandQueue(runtime_cl->context,
+                                runtime_cl->device_id,
+                                (cl_command_queue_properties)type,
+                                &cl_err); cl_ok(cl_err);  
+    }
+  else
+    {
+      //
+      // >= OpenCL 2.0
+      //
+      cl_int                    cl_err;
+      cl_queue_properties const queue_properties[] = {
+        CL_QUEUE_PROPERTIES,(cl_queue_properties)type,0
+      };
+
+      cq = clCreateCommandQueueWithProperties(runtime_cl->context,
+                                              runtime_cl->device_id,
+                                              queue_properties,
+                                              &cl_err); cl_ok(cl_err);
+    }
+
+  return cq;
+}
+
+//
+//
+//
+
diff --git a/src/compute/skc/runtime_cl.h b/src/compute/skc/runtime_cl.h
new file mode 100644
index 0000000..9e58ca0
--- /dev/null
+++ b/src/compute/skc/runtime_cl.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+// squelch OpenCL 1.2 deprecation warning
+//
+
+#ifndef CL_USE_DEPRECATED_OPENCL_1_2_APIS
+#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
+#endif
+
+#include <CL/opencl.h>
+
+//
+//
+//
+
+#include "skc.h"
+
+//
+// Minimal OpenCL state needed by the runtime to get started
+//
+
+struct skc_runtime_cl
+{
+  cl_platform_id platform_id;
+  cl_device_id   device_id;
+  cl_context     context;
+  
+  struct {
+    cl_uint      major;
+    cl_uint      minor;
+  } version; // sometimes we need to know this at runtime 
+
+  cl_uint        base_align; // base address alignment for subbuffer origins
+};
+
+//
+//
+//
+
+typedef enum skc_cq_type_e {
+  SKC_CQ_TYPE_IN_ORDER               = 0,
+  SKC_CQ_TYPE_OUT_OF_ORDER           = CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE,
+  SKC_CQ_TYPE_IN_ORDER_PROFILING     = (SKC_CQ_TYPE_IN_ORDER     | CL_QUEUE_PROFILING_ENABLE),
+  SKC_CQ_TYPE_OUT_OF_ORDER_PROFILING = (SKC_CQ_TYPE_OUT_OF_ORDER | CL_QUEUE_PROFILING_ENABLE),
+} skc_cq_type_e;
+
+//
+// safely creates a generic OpenCL target in very few lines
+//
+
+skc_err
+skc_runtime_cl_create(struct skc_runtime_cl * const runtime_cl,
+                      char const            * const target_platform_substring,
+                      char const            * const target_device_substring,
+                      cl_context_properties         context_properties[]);
+
+skc_err
+skc_runtime_cl_dispose(struct skc_runtime_cl * const runtime_cl);
+
+//
+// create a command queue with the non-deprecated function
+//
+
+cl_command_queue
+skc_runtime_cl_create_cq(struct skc_runtime_cl * const runtime_cl, skc_cq_type_e const type);
+
+//
+//
+//
+
diff --git a/src/compute/skc/runtime_cl_12.c b/src/compute/skc/runtime_cl_12.c
new file mode 100644
index 0000000..fca13ed
--- /dev/null
+++ b/src/compute/skc/runtime_cl_12.c
@@ -0,0 +1,314 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+//
+//
+//
+
+#include "context.h"
+#include "block.h"
+#include "grid.h"
+#include "common/cl/assert_cl.h"
+#include "config_cl.h"
+#include "runtime_cl.h"
+#include "runtime_cl_12.h"
+#include "export_cl_12.h"
+
+//
+//
+//
+
+static 
+void
+skc_block_pool_create(struct skc_runtime * const runtime, cl_command_queue cq)
+{
+  // save size
+  runtime->block_pool.size = &runtime->config->block_pool;
+
+  // create block extent
+  skc_extent_pdrw_alloc(runtime,
+                        &runtime->block_pool.blocks,
+                        runtime->block_pool.size->pool_size * 
+                        runtime->config->block.bytes);
+
+  // allocate block pool ids
+  skc_extent_pdrw_alloc(runtime,
+                        &runtime->block_pool.ids,
+                        runtime->block_pool.size->ring_pow2 * sizeof(skc_uint));
+
+  // allocate block pool atomics
+  skc_extent_phr_pdrw_alloc(runtime,
+                            &runtime->block_pool.atomics,
+                            sizeof(union skc_block_pool_atomic));
+
+  // acquire pool id and atomic initialization kernels
+  cl_kernel k0 = skc_device_acquire_kernel(runtime->device,SKC_DEVICE_KERNEL_ID_BLOCK_POOL_INIT_IDS);
+  cl_kernel k1 = skc_device_acquire_kernel(runtime->device,SKC_DEVICE_KERNEL_ID_BLOCK_POOL_INIT_ATOMICS);
+
+  // init ids
+  cl(SetKernelArg(k0,0,sizeof(runtime->block_pool.ids.drw),&runtime->block_pool.ids.drw));
+  cl(SetKernelArg(k0,1,SKC_CL_ARG(runtime->block_pool.size->pool_size)));
+
+  // the kernel grid is shaped by the target device -- always 2 for atomics
+  skc_device_enqueue_kernel(runtime->device,SKC_DEVICE_KERNEL_ID_BLOCK_POOL_INIT_IDS,
+                            cq,k0,runtime->block_pool.size->pool_size,
+                            0,NULL,NULL);
+
+  // init atomics
+  cl(SetKernelArg(k1,0,sizeof(runtime->block_pool.atomics.drw),&runtime->block_pool.atomics.drw));
+  cl(SetKernelArg(k1,1,SKC_CL_ARG(runtime->block_pool.size->pool_size)));
+
+  // the kernel grid is shaped by the target device
+  skc_device_enqueue_kernel(runtime->device,SKC_DEVICE_KERNEL_ID_BLOCK_POOL_INIT_ATOMICS,
+                            cq,k1,2,
+                            0,NULL,NULL);
+
+  // kickstart kernel execution
+  cl(Flush(cq));
+
+  // release kernels
+  cl(ReleaseKernel(k0));
+  cl(ReleaseKernel(k1));
+}
+
+static 
+void
+skc_block_pool_dispose(struct skc_runtime * const runtime)
+{
+  skc_extent_phr_pdrw_free(runtime,&runtime->block_pool.atomics);
+  skc_extent_pdrw_free    (runtime,&runtime->block_pool.ids);
+  skc_extent_pdrw_free    (runtime,&runtime->block_pool.blocks);
+}
+
+//
+//
+//
+
+static
+bool
+skc_runtime_yield(struct skc_runtime * const runtime)
+{
+  return skc_scheduler_yield(runtime->scheduler);
+}
+
+static
+void 
+skc_runtime_wait(struct skc_runtime * const runtime)
+{
+  skc_scheduler_wait(runtime->scheduler);
+}
+
+//
+//
+//
+
+skc_err
+skc_runtime_cl_12_create(struct skc_context * const context,
+                         char const         * const target_platform_substring,
+                         char const         * const target_device_substring,
+                         cl_context_properties      context_properties[])
+{
+  // allocate the runtime
+  struct skc_runtime * const runtime = malloc(sizeof(*runtime));
+
+  // acquire OpenCL ids and context for target device
+  skc_err err = skc_runtime_cl_create(&runtime->cl,
+                                      target_platform_substring,
+                                      target_device_substring,
+                                      context_properties);
+
+  // create device
+  skc_device_create(runtime);
+
+  // create the host and device allocators
+  skc_allocator_host_create(runtime);
+  skc_allocator_device_create(runtime);
+
+  // how many slots in the scheduler?
+  runtime->scheduler = skc_scheduler_create(runtime,runtime->config->scheduler.size);
+
+  // allocate deps structure
+  runtime->deps      = skc_grid_deps_create(runtime,
+                                            runtime->scheduler,
+                                            runtime->config->block_pool.pool_size);
+
+  // initialize cq pool
+  skc_cq_pool_create(runtime,
+                     &runtime->cq_pool,
+                     runtime->config->cq_pool.type,
+                     runtime->config->cq_pool.size);
+
+  // acquire in-order cq
+  cl_command_queue cq = skc_runtime_acquire_cq_in_order(runtime);
+
+  // initialize block pool
+  skc_block_pool_create(runtime,cq);
+
+  // intialize handle pool
+  skc_handle_pool_create(runtime,
+                         &runtime->handle_pool,
+                         runtime->config->handle_pool.size,
+                         runtime->config->handle_pool.width,
+                         runtime->config->handle_pool.recs);
+
+  //
+  // initialize pfns
+  //
+  // FIXME -- at this point we will have identified which device we've
+  // targeted and will load a DLL (or select from a built-in library)
+  // that contains all the pfns.
+  //
+  context->runtime        = runtime;
+
+  context->yield          = skc_runtime_yield;
+  context->wait           = skc_runtime_wait;
+  
+  context->path_builder   = skc_path_builder_cl_12_create;
+  context->path_retain    = skc_runtime_path_host_retain;
+  context->path_release   = skc_runtime_path_host_release;
+  context->path_flush     = skc_runtime_path_host_flush;
+
+  context->raster_builder = skc_raster_builder_cl_12_create;
+  context->raster_retain  = skc_runtime_raster_host_retain;
+  context->raster_release = skc_runtime_raster_host_release;
+  context->raster_flush   = skc_runtime_raster_host_flush;
+
+  context->composition    = skc_composition_cl_12_create;
+  context->styling        = skc_styling_cl_12_create;
+  
+  context->surface        = skc_surface_cl_12_create;
+
+  // block on pool creation
+  cl(Finish(cq));
+
+  // dispose of in-order cq
+  skc_runtime_release_cq_in_order(runtime,cq);
+
+  return err;
+};
+
+//
+//
+//
+
+skc_err
+skc_runtime_cl_12_dispose(struct skc_context * const context)
+{
+  //
+  // FIXME -- incomplete
+  //
+  fprintf(stderr,"%s incomplete!\n",__func__);
+
+  struct skc_runtime * runtime = context->runtime;
+
+  skc_allocator_device_dispose(runtime);
+  skc_allocator_host_dispose(runtime);
+
+  skc_scheduler_dispose(context->runtime,context->runtime->scheduler);
+
+  skc_grid_deps_dispose(context->runtime->deps);
+
+  skc_cq_pool_dispose(runtime,&runtime->cq_pool);
+
+  skc_block_pool_dispose(context->runtime);
+
+  // skc_handle_pool_dispose(context->runtime);
+  
+  return SKC_ERR_SUCCESS;
+}
+
+//
+// TEMPORARY BENCHMARK
+//
+
+#if 1
+
+#include <windows.h>
+
+#define SKC_FRAMES_MASK 0x7F
+#define SKC_FRAMES      (SKC_FRAMES_MASK + 1)
+
+void
+skc_runtime_cl_12_debug(struct skc_context * const context)
+{
+#ifdef NDEBUG
+  static skc_uint      frames=0;
+  static LARGE_INTEGER StartingTime={0}, EndingTime;
+
+  if ((frames++ & SKC_FRAMES_MASK) != SKC_FRAMES_MASK)
+    return;
+
+  QueryPerformanceCounter(&EndingTime);
+  
+  LARGE_INTEGER ElapsedMicroseconds, Frequency;
+
+  ElapsedMicroseconds.QuadPart = EndingTime.QuadPart - StartingTime.QuadPart;
+
+  QueryPerformanceFrequency(&Frequency);   
+
+  double const msecs_total  = 1000.0 * ElapsedMicroseconds.QuadPart / Frequency.QuadPart;
+  double const msecs_frame  = msecs_total / SKC_FRAMES;
+
+  printf("Frames / Total / Per : %u / %.3f / %.3f\n",
+         SKC_FRAMES,msecs_total,msecs_frame);
+#endif
+
+  struct skc_runtime * const runtime = context->runtime;
+  
+  // acquire out-of-order cq
+  cl_command_queue cq = skc_runtime_acquire_cq_in_order(runtime);
+
+  // copy atomics to host
+  skc_extent_phr_pdrw_read(&runtime->block_pool.atomics,cq,NULL);
+
+  // block until complete
+  cl(Finish(cq));
+
+  // dispose of out-of-order cq
+  skc_runtime_release_cq_in_order(runtime,cq);
+
+  union skc_block_pool_atomic const * const bp_atomic = runtime->block_pool.atomics.hr;
+
+  skc_uint const available = bp_atomic->writes - bp_atomic->reads;
+  skc_uint const inuse     = runtime->config->block_pool.pool_size - available;
+
+  fprintf(stderr,"w/r/f/a: %9u - %9u = %9u : %6.2f MB\n",
+          bp_atomic->writes,
+          bp_atomic->reads,
+          available,
+          (inuse * runtime->config->block.bytes) / (1024.0*1024.0));
+
+  if (available >= (1<<27))
+    {
+      fprintf(stderr,"block pool corrupted!\n");
+      exit(-1);
+    }
+
+  //
+  //
+  //
+#ifdef NDEBUG
+  QueryPerformanceCounter(&StartingTime);
+#endif
+}
+
+#endif
+
+//
+//
+//
+
diff --git a/src/compute/skc/runtime_cl_12.h b/src/compute/skc/runtime_cl_12.h
new file mode 100644
index 0000000..7e7ffcb
--- /dev/null
+++ b/src/compute/skc/runtime_cl_12.h
@@ -0,0 +1,177 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "runtime.h"
+#include "runtime_cl.h"
+#include "cq_pool_cl.h"
+#include "handle_pool_cl_12.h"
+#include "block_pool_cl_12.h"
+#include "allocator_device_cl.h"
+
+//
+// FIXME -- two parts:
+//
+// 1. directly access the structures in the runtime sub-struct implementations
+// 2. possibly wall off the non-platform-specific structs into a sub structure
+//
+
+struct skc_runtime
+{
+  //
+  // state visible to device
+  //
+  struct skc_runtime_cl            cl;
+
+  struct {
+    struct skc_allocator_host      host;
+    struct skc_allocator_device    device;
+  } allocator;
+
+  struct skc_cq_pool               cq_pool;
+
+  struct skc_block_pool            block_pool;
+
+  struct skc_handle_pool           handle_pool;
+
+  //
+  // state that is slightly opaque (for now)
+  //
+  struct skc_scheduler           * scheduler;
+
+  struct skc_grid_deps           * deps;
+
+  struct skc_config const        * config; // FIXME: config will be determined by device with some opportunities to resize
+
+  struct skc_device              * device; // opaque bundle of kernels
+};
+
+//
+// Creation and disposal intitializes context and may rely on other
+// context resources like the scheduler
+//
+
+skc_err
+skc_runtime_cl_12_create(struct skc_context * const context,
+                         char const         * const target_platform_substring,
+                         char const         * const target_device_substring,
+                         cl_context_properties      context_properties[]);
+
+skc_err
+skc_runtime_cl_12_dispose(struct skc_context * const context);
+
+//
+// HOST HANDLE RETAIN/RELEASE/FLUSH
+//
+
+skc_err
+skc_runtime_path_host_retain(struct skc_runtime * const runtime,
+                             skc_path_t   const *       paths,
+                             uint32_t                   count);
+
+skc_err
+skc_runtime_raster_host_retain(struct skc_runtime * const runtime,
+                               skc_raster_t const *       rasters,
+                               uint32_t                   count);
+
+
+skc_err
+skc_runtime_path_host_release(struct skc_runtime * const runtime,
+                              skc_path_t   const *       paths,
+                              uint32_t                   count);
+
+skc_err
+skc_runtime_raster_host_release(struct skc_runtime * const runtime,
+                                skc_raster_t const *       rasters,
+                                uint32_t                   count);
+
+
+skc_err
+skc_runtime_path_host_flush(struct skc_runtime * const runtime,
+                            skc_path_t   const *       paths,
+                            uint32_t                   count);
+
+skc_err
+skc_runtime_raster_host_flush(struct skc_runtime * const runtime,
+                              skc_raster_t const *       rasters,
+                              uint32_t                   count);
+
+//
+// DEVICE/PIPELINE HANDLE ACQUIRE/RETAIN/RELEASE
+//
+// The retain operations pre-validate handles
+//
+
+skc_handle_t
+skc_runtime_handle_device_acquire(struct skc_runtime * const runtime);
+
+skc_err
+skc_runtime_handle_device_validate_retain(struct skc_runtime       * const runtime,
+                                          skc_typed_handle_type_e    const handle_type,
+                                          skc_typed_handle_t const *       typed_handles,
+                                          uint32_t                         count);
+
+void
+skc_runtime_handle_device_retain(struct skc_runtime * const runtime,
+                                 skc_handle_t const *       handles,
+                                 uint32_t                   count);
+
+void
+skc_runtime_path_device_release(struct skc_runtime * const runtime,
+                                skc_handle_t const *       handles,
+                                uint32_t                   count);
+
+void
+skc_runtime_raster_device_release(struct skc_runtime * const runtime,
+                                  skc_handle_t const *       handles,
+                                  uint32_t                   count);
+
+//
+// We only use in-order command queues in the pipeline
+//
+
+cl_command_queue
+skc_runtime_acquire_cq_in_order(struct skc_runtime * const runtime);
+
+void
+skc_runtime_release_cq_in_order(struct skc_runtime * const runtime,
+                                cl_command_queue           cq);
+
+//
+// DEVICE MEMORY ALLOCATION
+//
+
+cl_mem
+skc_runtime_device_perm_alloc(struct skc_runtime * const runtime,
+                              cl_mem_flags         const flags,
+                              size_t               const size);
+
+void
+skc_runtime_device_perm_free(struct skc_runtime * const runtime,
+                             cl_mem               const mem);
+
+cl_mem
+skc_runtime_device_temp_alloc(struct skc_runtime * const runtime,
+                              cl_mem_flags         const flags,
+                              size_t               const size,
+                              skc_subbuf_id_t    * const subbuf_id,
+                              size_t             * const subbuf_size);
+
+void
+skc_runtime_device_temp_free(struct skc_runtime * const runtime,
+                             cl_mem               const mem,
+                             skc_subbuf_id_t      const subbuf_id);
+
+//
+//
+//
diff --git a/src/compute/skc/scheduler.cpp b/src/compute/skc/scheduler.cpp
new file mode 100644
index 0000000..1099deb
--- /dev/null
+++ b/src/compute/skc/scheduler.cpp
@@ -0,0 +1,505 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+// There is either no or limited support for C11 atomics in the C
+// compilers we're targeting so, for now, implement this in C++11
+//
+
+//
+// FIXME -- get rid of the extent and have supplicants bring their own
+// task structure with a known base structure
+//
+
+extern "C" {
+
+#include "scheduler.h"
+#include "runtime_cl_12.h" // FIXME -- all allocations are extent structures
+
+}
+
+//
+// SUPER-IMPORTANT:
+//
+// THIS LOW-LEVEL SCHEDULER ASSUMES THERE ARE A MAXIMUM NUMBER OF
+// PIPELINE GRIDS ACTIVE AT ANY TIME
+//
+// THIS IS A SAFE INVARIANT BECAUSE WE CONTROL THE VARIOUS POOL SIZE
+// KNOBS AT CONTEXT CONFIGURATION TIME
+//
+// TRANSLATION: DO NOT LARD UP THIS IMPLEMENTATION WITH WELL-INTENDED
+// BUT ENTIRELY UNNECESSARY LOGIC
+//
+
+#include <mutex>
+#include <condition_variable>
+
+//
+// GRID STATES
+//
+
+typedef enum skc_scheduler_command_state {
+
+  SKC_SCHEDULER_COMMAND_STATE_READY,
+  SKC_SCHEDULER_COMMAND_STATE_WAITING,
+  SKC_SCHEDULER_COMMAND_STATE_EXECUTING,
+  SKC_SCHEDULER_COMMAND_STATE_COMPLETED,
+
+  SKC_SCHEDULER_COMMAND_STATE_COUNT
+
+} skc_scheduler_command_state;
+
+//
+//
+//
+
+struct skc_scheduler_command
+{
+  void *                      data;
+  skc_scheduler_command_pfn   pfn;
+  skc_scheduler_command_state state;
+  char const *                name; 
+};                                 
+
+#if 0
+struct skc_scheduler_command
+{
+  union {
+    struct scheduler             * scheduler;
+    struct skc_scheduler_command * next;
+  };
+  skc_scheduler_command_pfn        pfn;
+};
+#endif
+
+//
+//
+//
+
+struct skc_scheduler
+{
+  //
+  // FIXME -- consider adding a backpointer to the runtime or other
+  // critical state
+  //
+
+  struct skc_scheduler_command * extent;
+
+  struct {
+    std::mutex                   mutex;
+
+    skc_ushort                 * indices;
+    skc_uint                     rem;
+  } available;
+
+  struct {
+    std::mutex                   mutex;
+    std::condition_variable      condvar;
+
+    skc_ushort                 * indices;
+    skc_uint                     size;
+    skc_uint                     head;
+    skc_uint                     tail;
+  } waiting;
+};
+
+//
+//
+//
+
+#if 1
+#define SKC_SCHEDULER_EXECUTE(sc) \
+  sc->pfn(sc->data)
+#else
+#define SKC_SCHEDULER_EXECUTE(sc)               \
+  fprintf(stderr,"EXECUTE+ %s\n",sc->name);     \
+  sc->pfn(sc->data);                            \
+  fprintf(stderr,"EXECUTE- %s\n",sc->name);
+#endif
+
+//
+//
+//
+
+struct skc_scheduler *
+skc_scheduler_create(struct skc_runtime * const runtime, skc_uint const size)
+{
+  // allocate scheduler
+  struct skc_scheduler * scheduler = (struct skc_scheduler*)
+    skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,sizeof(*scheduler));
+
+  // execute various std:atomic constructors
+  new (scheduler) skc_scheduler();
+
+  // initialize members
+  scheduler->extent            = (struct skc_scheduler_command*)
+    skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,(sizeof(*scheduler->extent) * size));
+
+  scheduler->available.indices = (skc_ushort*)
+    skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,sizeof(*scheduler->available.indices) * size);
+
+  scheduler->available.rem     = size;
+
+  scheduler->waiting.indices   = (skc_ushort*)
+    skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,sizeof(*scheduler->available.indices) * (size + 1));
+
+  scheduler->waiting.size      = size + 1; // the ring has an extra slot
+  scheduler->waiting.head      = 0;
+  scheduler->waiting.tail      = 0;
+
+  for (skc_uint ii=0; ii<size; ii++)
+    scheduler->available.indices[ii] = ii;
+
+  return scheduler;
+}
+
+void
+skc_scheduler_dispose(struct skc_runtime   * const runtime,
+                      struct skc_scheduler * const scheduler)
+{
+  // free members
+  skc_runtime_host_perm_free(runtime,scheduler->waiting.indices);
+  skc_runtime_host_perm_free(runtime,scheduler->available.indices);
+  skc_runtime_host_perm_free(runtime,scheduler->extent);
+
+  // execute various std:atomic destructors
+  scheduler->~skc_scheduler();
+
+  // free struct
+  skc_runtime_host_perm_free(runtime,scheduler);
+}
+
+//
+//
+//
+
+static
+skc_scheduler_command_t
+skc_scheduler_acquire(struct skc_scheduler * const scheduler,
+                      skc_scheduler_command_pfn    pfn,
+                      void                       * data,
+                      char const                 * name)
+{
+  skc_scheduler_command_t command = SKC_SCHEDULER_COMMAND_INVALID;
+
+  {
+    // mutex lock
+    std::lock_guard<std::mutex> lock(scheduler->available.mutex);
+
+    // get first available index
+    if (scheduler->available.rem > 0)
+      command = scheduler->available.indices[--scheduler->available.rem];
+
+    // mutex unlock
+  }
+
+  if (command != SKC_SCHEDULER_COMMAND_INVALID)
+    {
+      // initialize command
+      struct skc_scheduler_command * const sc = scheduler->extent + command;
+
+      sc->pfn   = pfn;
+      sc->data  = data;
+      sc->name  = name;
+      sc->state = SKC_SCHEDULER_COMMAND_STATE_READY;
+    }
+
+  // return command handle
+  return command;
+}
+
+//
+//
+//
+
+static
+void
+skc_scheduler_release(struct skc_scheduler  * const scheduler,
+                      skc_scheduler_command_t const command)
+{
+  // mutex lock
+  std::lock_guard<std::mutex> lock(scheduler->available.mutex);
+
+  // get first available index
+  scheduler->available.indices[scheduler->available.rem++] = command;
+
+  // mutex unlock
+}
+
+//
+//
+//
+
+static
+void
+skc_scheduler_append(struct skc_scheduler  * const scheduler,
+                     skc_scheduler_command_t const command)
+{
+  scheduler->extent[command].state = SKC_SCHEDULER_COMMAND_STATE_WAITING;
+
+  {
+    // mutex unique lock (locks on construction)
+    std::unique_lock<std::mutex> lock(scheduler->waiting.mutex);
+
+    // note that we guarantee there is always room to store the command
+
+    // append index to ring
+    scheduler->waiting.indices[scheduler->waiting.tail] = command;
+
+    // update last
+    if (++scheduler->waiting.tail == scheduler->waiting.size)
+      scheduler->waiting.tail = 0;
+
+    // mutex unlock
+  }
+
+  // signal condvar
+  scheduler->waiting.condvar.notify_one();
+}
+
+//
+//
+//
+
+skc_scheduler_command_t
+skc_scheduler_schedule(struct skc_scheduler    * const scheduler,
+                       skc_scheduler_command_pfn const pfn,
+                       void                    *       data,
+                       char              const * const name)
+{
+  while (true)
+    {
+      skc_scheduler_command_t const command = skc_scheduler_acquire(scheduler,pfn,data,name);
+
+      if (command != SKC_SCHEDULER_COMMAND_INVALID)
+        {
+          skc_scheduler_append(scheduler,command);
+
+          return command;
+        }
+      else
+        {
+          skc_scheduler_wait(scheduler);
+        }
+    }
+}
+
+//
+// try to pop but don't wait
+//
+
+static
+void
+skc_scheduler_pop(struct skc_scheduler    * const scheduler,
+                  skc_scheduler_command_t * const command)
+{
+  *command = SKC_SCHEDULER_COMMAND_INVALID;
+
+  // mutex lock
+  std::unique_lock<std::mutex> lock(scheduler->waiting.mutex);
+
+  if (scheduler->waiting.head != scheduler->waiting.tail)
+    {
+      // get index at first
+      *command = scheduler->waiting.indices[scheduler->waiting.head];
+
+      // update first
+      if (++scheduler->waiting.head == scheduler->waiting.size)
+        scheduler->waiting.head = 0;
+    }
+
+  // mutex unlock
+}
+
+static
+void
+skc_scheduler_pop_wait(struct skc_scheduler    * const scheduler,
+                       skc_scheduler_command_t * const command)
+{
+  // mutex unique lock -- locks on construction
+  std::unique_lock<std::mutex> lock(scheduler->waiting.mutex);
+
+  // wait for command
+  scheduler->waiting.condvar.wait(lock,[scheduler] {
+      return scheduler->waiting.head != scheduler->waiting.tail;
+    });
+
+  // get index at first
+  *command = scheduler->waiting.indices[scheduler->waiting.head];
+
+  // update first
+  if (++scheduler->waiting.head == scheduler->waiting.size)
+    scheduler->waiting.head = 0;
+
+  // mutex unlock
+}
+
+//
+//
+//
+
+static
+void
+skc_scheduler_command_execute(struct skc_scheduler_command * const sc)
+{
+  sc->state = SKC_SCHEDULER_COMMAND_STATE_EXECUTING;
+
+  SKC_SCHEDULER_EXECUTE(sc);
+
+  sc->state = SKC_SCHEDULER_COMMAND_STATE_COMPLETED;
+}
+
+static
+void
+skc_scheduler_execute(struct skc_scheduler  * const scheduler,
+                      skc_scheduler_command_t const command)
+
+{
+  // execute
+  skc_scheduler_command_execute(scheduler->extent + command);
+
+  // release
+  skc_scheduler_release(scheduler,command);
+}
+
+//
+// drain the scheduler
+//
+
+skc_bool
+skc_scheduler_yield(struct skc_scheduler * const scheduler) // wait for 0 or more completed grids
+{
+  // fprintf(stderr,"YIELD+\n");
+
+  while (true)
+    {
+      skc_scheduler_command_t command;
+
+      skc_scheduler_pop(scheduler,&command);
+
+      if (command == SKC_SCHEDULER_COMMAND_INVALID) {
+        // fprintf(stderr,"YIELD!\n");
+        return false;
+      }
+
+      // otherwise execute the completion record
+      skc_scheduler_execute(scheduler,command);
+    }
+
+  // fprintf(stderr,"YIELD-\n");
+
+  return true;
+}
+
+//
+// wait for at least one grid to complete
+//
+
+void
+skc_scheduler_wait(struct skc_scheduler * const scheduler)
+{
+  // fprintf(stderr,"WAIT+\n");
+
+  skc_scheduler_command_t command;
+
+  // wait for a completion record
+  skc_scheduler_pop_wait(scheduler,&command);
+
+  // execute the completion record
+  skc_scheduler_execute(scheduler,command);
+
+  // process remaining
+  skc_scheduler_yield(scheduler);
+
+  // fprintf(stderr,"WAIT-\n");
+}
+
+//
+// wait for one grid to complete
+//
+
+void
+skc_scheduler_wait_one(struct skc_scheduler * const scheduler)
+{
+  // fprintf(stderr,"WAIT1+\n");
+
+  skc_scheduler_command_t command;
+
+  // wait for a completion record
+  skc_scheduler_pop_wait(scheduler,&command);
+
+  // execute the completion record
+  skc_scheduler_execute(scheduler,command);
+
+  // fprintf(stderr,"WAIT1-\n");
+}
+
+//
+//
+//
+
+#if 0
+
+//
+// wait for a specific grid to complete
+//
+//   true  : success
+//   false : command wasn't started
+//
+// FIXME -- get rid of this idiom
+//
+
+skc_bool
+skc_scheduler_wait_for(struct skc_scheduler  * const scheduler,
+                       skc_scheduler_command_t const command)
+{
+  struct skc_scheduler_command * const sc = scheduler->extent + command;
+
+  // command not started
+  if (sc->state == SKC_SCHEDULER_COMMAND_STATE_READY)
+    return false; // SKC_ERR_COMMAND_NOT_STARTED;
+
+  // command is already complete
+  if (sc->state == SKC_SCHEDULER_COMMAND_STATE_COMPLETED)
+    return true; // SKC_ERR_SUCCESS;
+
+  // force wip grids to start
+  // skc_grid_force(grid_wait_for);
+
+  // otherwise, wait!
+  while (true)
+    {
+      skc_scheduler_command_t next;
+
+      // wait for a completion record
+      skc_scheduler_pop_wait(scheduler,&next);
+
+      // execute the completion record
+      skc_scheduler_execute(scheduler,next);
+
+      // return if this was a match
+      if (next == command)
+        return true; // SKC_ERR_SUCCESS;
+    }
+}
+
+//
+//
+//
+
+void
+skc_thread_sleep(skc_ulong const msecs)
+{
+  std::this_thread::sleep_for(std::chrono::milliseconds(msecs));
+}
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/scheduler.h b/src/compute/skc/scheduler.h
new file mode 100644
index 0000000..334cb0f
--- /dev/null
+++ b/src/compute/skc/scheduler.h
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+// FIXME -- make the scheduler even more lightweight than it is.  Move
+// to an idiom where the scheduled task brings its own state instead
+// of relying on an internal table.  This will make it possible to
+// reliably report the task's lifecycle and terminating state.
+//
+
+#include "types.h"
+
+//
+// 
+//
+
+#define SKC_SCHEDULER_SCHEDULE(s,c,d) skc_scheduler_schedule(s,c,d,#c)
+
+#ifndef NDEBUG 
+
+#include <stdio.h>
+
+#define SKC_SCHEDULER_WAIT_WHILE(s,p)           \
+  while (p) {                                   \
+    fprintf(stderr,"WAITING ON: " #p "\n");     \
+    skc_scheduler_wait(s);                      \
+  }
+#else
+#define SKC_SCHEDULER_WAIT_WHILE(s,p)           \
+  while (p) {                                   \
+    skc_scheduler_wait(s);                      \
+  }
+#endif
+
+//
+//
+//
+
+#ifndef NDEBUG
+#define SKC_CL_CB(s)  fprintf(stderr,"CB+ %s = %d\n",__func__,s)
+#else
+#include <stdio.h>
+#define SKC_CL_CB(s)
+#endif
+
+//
+//
+//
+
+#define SKC_SCHEDULER_COMMAND_INVALID  SKC_UINT_MAX
+
+typedef skc_uint skc_scheduler_command_t;
+
+typedef void (* skc_scheduler_command_pfn)(void * data);
+
+//
+//
+//
+
+struct skc_scheduler *
+skc_scheduler_create(struct skc_runtime * const runtime, skc_uint const size);
+
+void
+skc_scheduler_dispose(struct skc_runtime   * const runtime,
+                      struct skc_scheduler * const scheduler);
+                      
+
+//
+//
+//
+
+skc_scheduler_command_t
+skc_scheduler_schedule(struct skc_scheduler    * const scheduler,
+		       skc_scheduler_command_pfn const pfn,
+		       void                    *       data,
+                       char              const * const name);
+
+//
+//
+//
+
+skc_bool
+skc_scheduler_yield(struct skc_scheduler * const scheduler);
+
+void
+skc_scheduler_wait(struct skc_scheduler * const scheduler);
+
+void
+skc_scheduler_wait_one(struct skc_scheduler * const scheduler);
+
+//
+// FIXME -- get rid of these
+//
+
+#if 0
+
+skc_bool
+skc_scheduler_wait_for(struct skc_scheduler  * const scheduler,
+                       skc_scheduler_command_t const command);
+
+void
+skc_thread_sleep(skc_ulong const msecs);
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/segment_ttck.cl b/src/compute/skc/segment_ttck.cl
new file mode 100644
index 0000000..6ac068b
--- /dev/null
+++ b/src/compute/skc/segment_ttck.cl
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+// NOTE THAT THE SEGMENT TTCK KERNEL IS ENTIRELY DEPENDENT ON THE
+// LAYOUT OF THE TTCK KEY.  IF THE TTCK KEY IS ALTERED THEN THIS
+// KERNEL WILL NEED TO BE UPDATED
+//
+
+#include <hs/cl/gen9/hs_cl_macros.h>
+
+#include "atomic_cl.h"
+#include "tile.h"
+
+//
+//
+//
+
+#define HS_KEYS_PER_SLAB  (HS_KEYS_PER_LANE * HS_LANES_PER_WARP)
+#define HS_LANE_MASK      (HS_LANES_PER_WARP - 1)
+
+//
+//
+//
+
+#define SKC_YX_NEQ(row,prev)                \
+  (((as_uint2(r##row).hi ^ as_uint2(r##prev).hi) & SKC_TTCK_HI_MASK_YX) != 0)
+
+//
+//
+//
+
+__kernel
+__attribute__((intel_reqd_sub_group_size(HS_LANES_PER_WARP)))
+void
+skc_kernel_segment_ttck(__global HS_KEY_TYPE              * SKC_RESTRICT const vout,
+                        __global uint                     * SKC_RESTRICT const indices,
+                        __global SKC_ATOMIC_UINT volatile * SKC_RESTRICT const atomics)
+{
+  uint const global_id = get_global_id(0);
+  uint const gmem_base = (global_id >> HS_LANES_PER_WARP_LOG2) * HS_KEYS_PER_SLAB;
+  uint const gmem_idx  = gmem_base + (global_id & HS_LANE_MASK);
+  uint const lane_idx  = gmem_base + (global_id & HS_LANE_MASK) * HS_KEYS_PER_LANE;
+
+  //
+  // LOAD ALL THE ROWS
+  //
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                                           \
+  HS_KEY_TYPE const r##row = (vout + gmem_idx)[prev * HS_LANES_PER_WARP];
+
+  HS_SLAB_ROWS();
+
+  //
+  // LOAD LAST REGISTER FROM COLUMN TO LEFT
+  //
+  uint  diffs = 0;
+  uint2 r0    = r1;
+
+  if (gmem_base > 0) {
+    // if this is the first key in any slab but the first then it
+    // broadcast loads the last key in previous slab
+    r0.hi = as_uint2(vout[gmem_base - 1]).hi;
+  } else if (get_sub_group_local_id() == 0) {
+    // if this is the first lane in the first slab
+    diffs = 1;
+  }
+
+  // now shuffle in the last key from the column to the left
+  r0.hi = intel_sub_group_shuffle_up(r0.hi,as_uint2(HS_REG_LAST(r)).hi,1);
+
+  //
+  // FIND ALL DIFFERENCES IN SLAB
+  //
+  uint valid = 0;
+
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                   \
+  valid |= ((r##row != SKC_ULONG_MAX) << prev);
+
+  HS_SLAB_ROWS();
+
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                   \
+  diffs |= (SKC_YX_NEQ(row,prev) << prev);
+
+  HS_SLAB_ROWS();
+
+  //
+  // SUM UP THE DIFFERENCES
+  //
+  uint const valid_diffs = valid & diffs;
+  uint const count       = popcount(valid_diffs);
+  uint const inclusive   = sub_group_scan_inclusive_add(count);
+  uint const exclusive   = inclusive - count;
+
+  //
+  // RESERVE SPACE IN THE INDICES ARRAY
+  //
+  uint next = 0;
+
+  if (get_sub_group_local_id() == HS_LANES_PER_WARP-1)
+    next = atomic_add(atomics+1,inclusive); // FIXME -- need a symbolic offset
+
+  // distribute base across subgroup
+  next = exclusive + sub_group_broadcast(next,HS_LANES_PER_WARP-1);
+
+  //
+  // STORE THE INDICES
+  //
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                   \
+  if (valid_diffs & (1 << prev))                \
+    indices[next++] = lane_idx + prev;
+
+  HS_SLAB_ROWS();
+
+  //
+  // TRANSPOSE THE SLAB AND STORE IT
+  //
+  HS_TRANSPOSE_SLAB();
+}
+
+//
+//
+//
diff --git a/src/compute/skc/segment_ttrk.cl b/src/compute/skc/segment_ttrk.cl
new file mode 100644
index 0000000..28a9557
--- /dev/null
+++ b/src/compute/skc/segment_ttrk.cl
@@ -0,0 +1,396 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+// NOTE THAT THE SEGMENT TTRK KERNEL IS ENTIRELY DEPENDENT ON THE
+// LAYOUT OF THE TTRK KEY.  IF THE TTRK KEY IS ALTERED THEN THIS
+// KERNEL WILL NEED TO BE UPDATED
+//
+
+#include <hs/cl/gen9/hs_cl_macros.h>
+
+#include "tile.h"
+#include "raster_builder_cl_12.h" // need meta_in structure
+#include "device_cl_12_gen9.h"
+
+//
+//
+//
+
+#define HS_KEYS_PER_SLAB  (HS_KEYS_PER_LANE * HS_LANES_PER_WARP)
+#define HS_LANE_MASK      (HS_LANES_PER_WARP - 1)
+
+//
+// THE BEST TYPE TO ZERO SMEM
+//
+
+#define SKC_ZERO_TYPE  ulong
+#define SKC_ZERO_WORDS 2
+
+//
+// THE ORDER OF COMPONENTS IS:
+//
+// 0: blocks
+// 1: offset
+// 2: pk
+// 3: rk
+//
+
+#if (HS_KEYS_PER_SLAB < 256)
+
+#define SKC_META_TYPE       uint
+#define SKC_META_WORDS      1
+
+#define SKC_COMPONENT_TYPE  uchar
+
+#else
+
+#define SKC_META_TYPE       uint2
+#define SKC_META_WORDS      2
+
+#define SKC_COMPONENT_TYPE  ushort
+
+#endif
+
+//
+//
+//
+
+#if ( SKC_TTRK_HI_BITS_COHORT <= 8)
+#define SKC_COHORT_TYPE uchar
+#else
+#define SKC_COHORT_TYPE ushort
+#endif
+
+//
+//
+//
+
+#define SKC_COHORT_ID(row)                      \
+  as_uint2(r##row).hi >> SKC_TTRK_HI_OFFSET_COHORT
+
+//
+// FIXME -- THIS WILL BREAK IF EITHER THE YX BITS OR OFFSET ARE CHANGED
+//
+
+#define SKC_IS_BLOCK(row)                                               \
+  ((as_uint2(r##row).lo & SKC_DEVICE_SUBBLOCKS_PER_BLOCK_MASK) == 0)
+
+#define SKC_YX(row,prev)                        \
+  (as_uint2(r##row).hi ^ as_uint2(r##prev).hi)
+
+#define SKC_IS_PK(row,prev)                             \
+  ((uint)(SKC_YX(row,prev) - 1) < SKC_TTRK_HI_MASK_X)
+
+//
+// COHORT   SIZE IS ALWAYS A POWER-OF-TWO
+// SUBGROUP SIZE IS ALWAYS A POWER-OF-TWO
+//
+// COHORT SIZE >= SUBGROUP SIZE
+//
+
+#define SKC_COHORT_SIZE           (1<<SKC_TTRK_HI_BITS_COHORT)
+
+#define SKC_ZERO_RATIO            (SKC_ZERO_WORDS / SKC_META_WORDS)
+#define SKC_META_ZERO_COUNT       (SKC_COHORT_SIZE * sizeof(SKC_META_TYPE) / sizeof(SKC_ZERO_TYPE))
+#define SKC_META_ZERO_REM         (SKC_META_ZERO_COUNT & SKC_BITS_TO_MASK(HS_LANES_PER_WARP_LOG2))
+
+#define SKC_META_COMPONENTS       4
+#define SKC_META_COMPONENT_COUNT  (SKC_COHORT_SIZE * sizeof(SKC_META_TYPE) / sizeof(SKC_COMPONENT_TYPE))
+
+//
+//
+//
+
+__kernel
+__attribute__((intel_reqd_sub_group_size(HS_LANES_PER_WARP)))
+void
+skc_kernel_segment_ttrk(__global HS_KEY_TYPE * SKC_RESTRICT const vout,
+                        __global uint        * SKC_RESTRICT const metas)
+{
+  __local union
+  {
+    SKC_META_TYPE volatile m[SKC_COHORT_SIZE];
+    SKC_ZERO_TYPE          z[SKC_META_ZERO_COUNT];
+    SKC_COMPONENT_TYPE     c[SKC_META_COMPONENT_COUNT];
+  } shared;
+
+  uint const global_id = get_global_id(0);
+  uint const gmem_base = (global_id >> HS_LANES_PER_WARP_LOG2) * HS_KEYS_PER_SLAB;
+  uint const gmem_idx  = gmem_base + (global_id & HS_LANE_MASK);
+  uint const gmem_off  = (global_id & HS_LANE_MASK) * HS_KEYS_PER_LANE;
+
+  //
+  // LOAD ALL THE ROWS
+  //
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                                           \
+  HS_KEY_TYPE const r##row = (vout + gmem_idx)[prev * HS_LANES_PER_WARP];
+
+  HS_SLAB_ROWS();
+
+  //
+  // LOAD LAST REGISTER FROM COLUMN TO LEFT
+  //
+  uint  diffs = 0;
+  uint2 r0    = 0;
+
+  if (gmem_base > 0) {
+    // if this is the first key in any slab but the first then it
+    // broadcast loads the last key in previous slab
+    r0.hi = as_uint2(vout[gmem_base - 1]).hi;
+  } else {
+    // otherwise broadcast the first key in the first slab
+    r0.hi = sub_group_broadcast(as_uint2(r1).hi,0);
+    // and mark it as an implicit diff
+    if (get_sub_group_local_id() == 0)
+      diffs = 1;
+  }
+
+  // now shuffle in the last key from the column to the left
+  r0.hi = intel_sub_group_shuffle_up(r0.hi,as_uint2(HS_REG_LAST(r)).hi,1);
+
+  // shift away y/x
+  SKC_COHORT_TYPE const c0 = r0.hi >> SKC_TTRK_HI_OFFSET_COHORT;
+
+  //
+  // EXTRACT ALL COHORT IDS EARLY...
+  //
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                           \
+  SKC_COHORT_TYPE c##row = SKC_COHORT_ID(row);
+
+  HS_SLAB_ROWS();
+
+  //
+  // DEBUG
+  //
+#if 0
+  if (gmem_base == HS_KEYS_PER_SLAB * 7)
+    {
+      if (get_sub_group_local_id() == 0)
+        printf("\n%llX ",as_ulong(r0));
+      else
+        printf("%llX ",as_ulong(r0));
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                   \
+      if (get_sub_group_local_id() == 0)        \
+        printf("\n%llX ",r##row);               \
+      else                                      \
+        printf("%llX ",r##row);
+
+      HS_SLAB_ROWS();
+    }
+#endif
+
+  //
+  // CAPTURE ALL CONDITIONS WE CARE ABOUT
+  //
+  // Diffs must be captured before cohorts
+  //
+  uint            valid  = 0;
+  uint            blocks = 0;
+  uint            pks    = 0;
+  SKC_COHORT_TYPE c_max  = 0;
+
+  //
+  // FIXME -- IT'S UNCLEAR IF SHIFTING THE CONDITION CODE VS. AN
+  // EXPLICIT PREDICATE WILL GENERATE THE SAME CODE
+  //
+#if 0
+
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                   \
+  diffs |= ((c##row != c##prev) << prev);
+
+  HS_SLAB_ROWS();
+
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                   \
+  blocks |= (SKC_IS_BLOCK(row) << prev);
+
+  HS_SLAB_ROWS();
+
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                   \
+  pks |= SKC_IS_PK(row,prev) << prev);
+
+  HS_SLAB_ROWS();
+
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                   \
+  valid |= ((r##row != SKC_ULONG_MAX) << prev);
+
+  HS_SLAB_ROWS();
+
+#else
+
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                   \
+  if (c##row != c##prev)                        \
+    diffs |= 1<<prev;
+
+  HS_SLAB_ROWS();
+
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                   \
+  if (SKC_IS_BLOCK(row))                        \
+    blocks |= 1<<prev;
+
+  HS_SLAB_ROWS();
+
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                   \
+  if (SKC_IS_PK(row,prev))                      \
+    pks |= 1<<prev;
+
+  HS_SLAB_ROWS();
+
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                   \
+  if (r##row != SKC_ULONG_MAX) {                \
+    valid |= 1<<prev;                           \
+    c_max  = max(c_max,c##row);                 \
+  }
+
+  HS_SLAB_ROWS();
+
+#endif
+
+  //
+  // TRANSPOSE THE SLAB AND STORE IT
+  //
+  HS_TRANSPOSE_SLAB();
+
+  // the min cohort is the first key in the slab
+  uint const c_min = sub_group_broadcast(c1,0);
+  
+  // the max cohort is the max across all lanes
+  c_max = sub_group_reduce_max(c_max);
+
+#if 0 // REMOVE ME LATER
+  if (get_sub_group_local_id() == 0)
+    printf("%3u : ( %3u , %3u )\n",
+           get_global_id(0)>>HS_LANES_PER_WARP_LOG2,c_min,c_max);
+#endif
+
+  //
+  // ZERO SMEM
+  //
+  // zero only the meta info for the cohort ids found in this slab
+  //
+#if   (SKC_ZERO_WORDS >= SKC_META_WORDS)
+  uint       zz     = ((c_min / SKC_ZERO_RATIO) & ~HS_LANE_MASK) + get_sub_group_local_id();
+  uint const zz_max = (c_max + SKC_ZERO_RATIO - 1) / SKC_ZERO_RATIO;
+
+  for (; zz<=zz_max; zz+=HS_LANES_PER_WARP)
+    shared.z[zz] = 0;
+#else
+  // ERROR -- it's highly unlikely that the zero type is smaller than
+  // the meta type
+#error("Unsupported right now...")
+#endif
+
+  //
+  // ACCUMULATE AND STORE META INFO
+  //
+  uint const    valid_blocks = valid & blocks;
+  uint const    valid_pks    = valid & pks & ~diffs;
+  SKC_META_TYPE meta         = ( 0 );
+
+#define SKC_META_LOCAL_ADD(meta)                \
+  atomic_add(shared.m+HS_REG_LAST(c),meta);
+
+#define SKC_META_LOCAL_STORE(meta,prev)         \
+  shared.m[c##prev] = meta;
+
+  // note this is purposefully off by +1
+#define SKC_META_RESET(meta,curr)               \
+  meta = ((gmem_off + curr) << 8);
+
+#if 0
+
+  // FIXME -- this can be tweaked to shift directly
+#define SKC_META_ADD(meta,prev,blocks,pks,rks)  \
+  meta += ((((blocks >> prev) & 1)      ) |     \
+           (((pks    >> prev) & 1) << 16) |     \
+           (((rks    >> prev) & 1) << 24));
+
+#else
+
+#define SKC_META_ADD(meta,prev,blocks,pks,rks)  \
+  if (blocks & (1<<prev))                       \
+    meta += 1;                                  \
+  if (pks    & (1<<prev))                       \
+    meta += 1<<16;                              \
+  if (rks    & (1<<prev))                       \
+    meta += 1<<24;
+
+#endif
+
+#undef  HS_SLAB_ROW
+#define HS_SLAB_ROW(row,prev)                   \
+  if (diffs & (1<<prev)) {                      \
+    SKC_META_LOCAL_STORE(meta,prev);            \
+    SKC_META_RESET(meta,row);                   \
+  }                                             \
+  SKC_META_ADD(meta,prev,                       \
+               valid_blocks,                    \
+               valid_pks,                       \
+               valid);
+
+  HS_SLAB_ROWS();
+
+  //
+  // ATOMICALLY ADD THE CARRIED OUT METAS
+  //
+#if 0 // BUG
+  if ((valid & (1<<(HS_KEYS_PER_LANE-1))) && (meta != 0))
+    SKC_META_LOCAL_ADD(meta);
+#else
+  if (meta != 0)
+    SKC_META_LOCAL_ADD(meta);
+#endif
+
+  //
+  // NOW ATOMICALLY ADD ALL METAS TO THE GLOBAL META TABLE
+  //
+
+  // convert the slab offset to an extent offset
+  bool const is_offset = (get_sub_group_local_id() & 3) == 1;
+  uint const adjust    = is_offset ? gmem_base - 1 : 0;
+
+  //
+  // only process the meta components found in this slab
+  //
+  uint const cc_min = c_min * SKC_META_COMPONENTS;
+  uint const cc_max = c_max * SKC_META_COMPONENTS + SKC_META_COMPONENTS - 1;
+  uint       cc     = (cc_min & ~HS_LANE_MASK) + get_sub_group_local_id();
+
+  if ((cc >= cc_min) && (cc <= cc_max))
+    {
+      uint const c = shared.c[cc];
+
+      if (c != 0)
+        atomic_add(metas+cc,c+adjust);
+    }
+
+  cc += HS_LANES_PER_WARP;
+
+  for (; cc<=cc_max; cc+=HS_LANES_PER_WARP)
+    {
+      uint const c = shared.c[cc];
+
+      if (c != 0)
+        atomic_add(metas+cc,c+adjust);
+    }
+}
+
+//
+//
+//
diff --git a/src/compute/skc/skc.h b/src/compute/skc/skc.h
new file mode 100644
index 0000000..e46b6a9
--- /dev/null
+++ b/src/compute/skc/skc.h
@@ -0,0 +1,497 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_ONCE_SKC
+#define SKC_ONCE_SKC
+
+//
+// FIXME -- get rid of these here
+//
+
+#include <stdint.h>
+#include <stdbool.h>
+
+//
+//
+//
+
+#include "skc_styling.h" // FIXME -- skc_styling
+// #include "skc_err.h"
+
+//
+// FIXME -- move errors to an skc prefixed include
+//
+
+typedef enum skc_err {
+
+  SKC_ERR_SUCCESS                           = 0,
+
+  SKC_ERR_API_BASE                          = 10000,
+
+  SKC_ERR_NOT_IMPLEMENTED                   = SKC_ERR_API_BASE,
+
+  SKC_ERR_POOL_EMPTY,
+
+  SKC_ERR_CONDVAR_WAIT,
+
+  SKC_ERR_LAYER_ID_INVALID,
+  SKC_ERR_LAYER_NOT_EMPTY,
+
+  SKC_ERR_TRANSFORM_WEAKREF_INVALID,
+  SKC_ERR_STROKE_STYLE_WEAKREF_INVALID,
+
+  SKC_ERR_COMMAND_NOT_READY,
+  SKC_ERR_COMMAND_NOT_COMPLETED,
+  SKC_ERR_COMMAND_NOT_STARTED,
+
+  SKC_ERR_COMMAND_NOT_READY_OR_COMPLETED,
+
+  SKC_ERR_COMPOSITION_SEALED,
+  SKC_ERR_STYLING_SEALED,
+
+  SKC_ERR_HANDLE_INVALID,
+  SKC_ERR_HANDLE_OVERFLOW,
+
+  SKC_ERR_COUNT
+
+} skc_err;
+
+//
+// SPINEL TYPES
+//
+
+typedef struct skc_context          * skc_context_t;
+typedef struct skc_path_builder     * skc_path_builder_t;
+typedef struct skc_raster_builder   * skc_raster_builder_t;
+
+typedef struct skc_composition      * skc_composition_t;
+typedef struct skc_styling          * skc_styling_t;
+
+typedef struct skc_surface          * skc_surface_t;
+
+#if 0
+typedef struct skc_interop          * skc_interop_t;
+typedef        uint32_t               skc_interop_surface_t;
+#endif
+
+typedef        uint32_t               skc_path_t;
+typedef        uint32_t               skc_raster_t;
+
+typedef        uint32_t               skc_layer_id;
+typedef        uint32_t               skc_group_id;
+
+typedef        uint32_t               skc_styling_cmd_t;
+
+typedef        uint64_t               skc_weakref_t;
+typedef        skc_weakref_t          skc_transform_weakref_t;
+typedef        skc_weakref_t          skc_raster_clip_weakref_t;
+
+//
+// FIXME -- bury all of this
+//
+
+#define SKC_STYLING_CMDS(...) _countof(__VA_ARGS__),__VA_ARGS__
+#define SKC_GROUP_IDS(...)    _countof(__VA_ARGS__),__VA_ARGS__
+
+//
+//
+//
+
+#define SKC_PATH_INVALID     UINT32_MAX
+#define SKC_RASTER_INVALID   UINT32_MAX
+#define SKC_WEAKREF_INVALID  UINT64_MAX
+
+//
+// TRANSFORM LAYOUT: { sx shx tx shy sy ty w0 w1 }
+//
+
+extern float const * const skc_transform_identity_ptr; // { 1, 0, 0, 0, 1, 0, 0, 0 }
+
+//
+// RASTER CLIP LAYOUT: { x0, y0, x1, y1 }
+//
+
+extern float const * const skc_raster_clip_default_ptr;
+
+//
+// CONTEXT
+//
+
+skc_err
+skc_context_create(skc_context_t       * context,
+                   char          const * target_platform_substring,
+                   char          const * target_device_substring,
+                   intptr_t              context_properties[]);
+
+skc_err
+skc_context_retain(skc_context_t context);
+
+skc_err
+skc_context_release(skc_context_t context);
+
+skc_err
+skc_context_reset(skc_context_t context);
+
+//
+// COORDINATED EXTERNAL OPERATIONS
+//
+
+/*
+  Examples include:
+
+  - Transforming an intermediate layer with a blur, sharpen, rotation or scaling kernel.
+  - Subpixel antialiasing using neighboring pixel color and coverage data.
+  - Performing a blit from one region to another region on a surface.
+  - Blitting from one surface to another.
+  - Loading and processing from one region and storing to another region.
+  - Rendezvousing with an external pipeline.
+*/
+
+//
+//
+//
+
+bool
+skc_context_yield(skc_context_t context);
+
+void
+skc_context_wait(skc_context_t context);
+
+//
+// PATH BUILDER
+//
+
+skc_err
+skc_path_builder_create(skc_context_t context, skc_path_builder_t * path_builder);
+
+skc_err
+skc_path_builder_retain(skc_path_builder_t path_builder);
+
+skc_err
+skc_path_builder_release(skc_path_builder_t path_builder);
+
+//
+// PATH OPS
+//
+
+skc_err
+skc_path_begin(skc_path_builder_t path_builder);
+
+skc_err
+skc_path_end(skc_path_builder_t path_builder, skc_path_t * path);
+
+skc_err
+skc_path_retain(skc_context_t context, skc_path_t const * paths, uint32_t count);
+
+skc_err
+skc_path_release(skc_context_t context, skc_path_t const * paths, uint32_t count);
+
+skc_err
+skc_path_flush(skc_context_t context, skc_path_t const * paths, uint32_t count);
+
+//
+// PATH SEGMENT OPS
+//
+
+//
+// FIXME -- we need a bulk/vectorized path segment operation
+//
+
+skc_err
+skc_path_move_to(skc_path_builder_t path_builder,
+                 float x0, float y0);
+
+skc_err
+skc_path_close(skc_path_builder_t path_builder);
+
+skc_err
+skc_path_line_to(skc_path_builder_t path_builder,
+                 float x1, float y1);
+
+skc_err
+skc_path_cubic_to(skc_path_builder_t path_builder,
+                  float x1, float y1,
+                  float x2, float y2,
+                  float x3, float y3);
+
+skc_err
+skc_path_cubic_smooth_to(skc_path_builder_t path_builder,
+                         float x2, float y2,
+                         float x3, float y3);
+
+skc_err
+skc_path_quad_to(skc_path_builder_t path_builder,
+                 float x1, float y1,
+                 float x2, float y2);
+
+skc_err
+skc_path_quad_smooth_to(skc_path_builder_t path_builder,
+                        float x2, float y2);
+
+skc_err
+skc_path_ellipse(skc_path_builder_t path_builder,
+                 float cx, float cy,
+                 float rx, float ry);
+
+//
+// RASTER BUILDER
+//
+
+skc_err
+skc_raster_builder_create(skc_context_t context, skc_raster_builder_t * raster_builder);
+
+skc_err
+skc_raster_builder_retain(skc_raster_builder_t raster_builder);
+
+skc_err
+skc_raster_builder_release(skc_raster_builder_t raster_builder);
+
+//
+// RASTER OPS
+//
+
+skc_err
+skc_raster_begin(skc_raster_builder_t raster_builder);
+
+skc_err
+skc_raster_end(skc_raster_builder_t raster_builder, skc_raster_t * raster);
+
+skc_err
+skc_raster_retain(skc_context_t context, skc_raster_t const * rasters, uint32_t count);
+
+skc_err
+skc_raster_release(skc_context_t context, skc_raster_t const * rasters, uint32_t count);
+
+skc_err
+skc_raster_flush(skc_context_t context, skc_raster_t const * rasters, uint32_t count);
+
+//
+// PATH-TO-RASTER OPS
+//
+
+//
+// FIXME -- do we need a bulk/vectorized "add filled" function?
+//
+
+skc_err
+skc_raster_add_filled(skc_raster_builder_t        raster_builder,
+                      skc_path_t                  path,
+                      skc_transform_weakref_t   * transform_weakref,
+                      float               const * transform,
+                      skc_raster_clip_weakref_t * raster_clip_weakref,
+                      float               const * raster_clip);
+
+//
+// COMPOSITION STATE
+//
+
+skc_err
+skc_composition_create(skc_context_t context, skc_composition_t * composition);
+
+skc_err
+skc_composition_retain(skc_composition_t composition);
+
+skc_err
+skc_composition_release(skc_composition_t composition);
+
+skc_err
+skc_composition_place(skc_composition_t    composition,
+                      skc_raster_t const * rasters,
+                      skc_layer_id const * layer_ids,
+                      float        const * txs,
+                      float        const * tys,
+                      uint32_t             count); // NOTE: A PER-PLACE CLIP IS POSSIBLE
+
+skc_err
+skc_composition_seal(skc_composition_t composition);
+
+skc_err
+skc_composition_unseal(skc_composition_t composition, bool reset);
+
+skc_err
+skc_composition_get_bounds(skc_composition_t composition, int32_t bounds[4]);
+
+#if 0
+// let's switch to a per place bounds using weakrefs -- clip 0 will be largest clip
+skc_err
+skc_composition_set_clip(skc_composition_t composition, int32_t const clip[4]);
+#endif
+
+//
+// TODO: COMPOSITION "SET ALGEBRA" OPERATIONS
+//
+// Produce a new composition from the union or intersection of two
+// existing compositions
+//
+
+//
+// TODO: COMPOSITION "HIT DETECTION"
+//
+// Report which layers and tiles are intersected by one or more
+// device-space (x,y) points
+//
+
+//
+// STYLING STATE
+//
+
+skc_err
+skc_styling_create(skc_context_t   context,
+                   skc_styling_t * styling,
+                   uint32_t        layers_count,
+                   uint32_t        groups_count,
+                   uint32_t        extras_count);
+
+skc_err
+skc_styling_retain(skc_styling_t styling);
+
+skc_err
+skc_styling_release(skc_styling_t styling);
+
+skc_err
+skc_styling_seal(skc_styling_t styling);
+
+skc_err
+skc_styling_unseal(skc_styling_t styling); // FIXME
+
+skc_err
+skc_styling_reset(skc_styling_t styling); // FIXME -- make unseal reset
+
+//
+// STYLING GROUPS AND LAYERS
+//
+
+skc_err
+skc_styling_group_alloc(skc_styling_t  styling,
+                        skc_group_id * group_id);
+
+skc_err
+skc_styling_group_enter(skc_styling_t             styling,
+                        skc_group_id              group_id,
+                        uint32_t                  n,
+                        skc_styling_cmd_t const * cmds);
+
+skc_err
+skc_styling_group_leave(skc_styling_t             styling,
+                        skc_group_id              group_id,
+                        uint32_t                  n,
+                        skc_styling_cmd_t const * cmds);                        
+
+skc_err
+skc_styling_group_parents(skc_styling_t        styling,
+                          skc_group_id         group_id,
+                          uint32_t             depth,
+                          skc_group_id const * parents);
+
+skc_err
+skc_styling_group_range_lo(skc_styling_t styling,
+                           skc_group_id  group_id,
+                           skc_layer_id  layer_lo);
+
+skc_err
+skc_styling_group_range_hi(skc_styling_t styling,
+                           skc_group_id  group_id,
+                           skc_layer_id  layer_hi);
+
+skc_err
+skc_styling_group_layer(skc_styling_t             styling,
+                        skc_group_id              group_id,
+                        skc_layer_id              layer_id,
+                        uint32_t                  n,
+                        skc_styling_cmd_t const * cmds);                        
+
+//
+// STYLING ENCODERS -- FIXME -- WILL EVENTUALLY BE OPAQUE
+//
+
+void
+skc_styling_layer_fill_rgba_encoder(skc_styling_cmd_t * cmds, float const rgba[4]);
+
+void
+skc_styling_background_over_encoder(skc_styling_cmd_t * cmds, float const rgba[4]);
+
+void
+skc_styling_layer_fill_gradient_encoder(skc_styling_cmd_t         * cmds,
+                                        float                       x0,
+                                        float                       y0,
+                                        float                       x1,
+                                        float                       y1,
+                                        skc_styling_gradient_type_e type,
+                                        uint32_t                    n,
+                                        float                 const stops[],
+                                        float                 const colors[]);
+
+//
+// SURFACE
+//
+
+//
+// FIXME - surface create needs to be able to specify different
+// surface targets here that are a function of the surface type and
+// rendering model: CL/global, GL/buffer, simple SRCOVER model,
+// complex group-based PDF rendering model, etc.
+//
+
+skc_err
+skc_surface_create(skc_context_t context, skc_surface_t * surface);
+
+skc_err
+skc_surface_retain(skc_surface_t surface);
+
+skc_err
+skc_surface_release(skc_surface_t surface);
+
+// skc_interop_surface_t
+// skc_surface_interop_surface_get(skc_surface_t surface);
+
+//
+// NO NO NO -- SKC will always be a client of some other platform so
+// handle things like blits and clears there unless it's something
+// unique like an SKC tile-based clear/blit.
+//
+// (temporarily implement these for testing porpoises)
+//
+
+skc_err
+skc_surface_clear(skc_surface_t  surface, 
+                  float    const rgba[4], 
+                  uint32_t const rect[4],
+                  void         * fb);
+
+skc_err
+skc_surface_blit(skc_surface_t  surface, 
+                 uint32_t const rect[4], 
+                 int32_t  const txty[2]);
+
+//
+// SURFACE RENDER
+//
+
+typedef void (*skc_surface_render_pfn_notify)(skc_surface_t     surface,
+                                              skc_styling_t     styling,
+                                              skc_composition_t composition,
+                                              void            * data);
+skc_err
+skc_surface_render(skc_surface_t                 surface,
+                   uint32_t                const clip[4],
+                   skc_styling_t                 styling,
+                   skc_composition_t             composition,
+                   skc_surface_render_pfn_notify notify,
+                   void                        * data,
+                   void                        * fb); // FIXME FIXME
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
+
diff --git a/src/compute/skc/skc_styling.h b/src/compute/skc/skc_styling.h
new file mode 100644
index 0000000..73cc4fc
--- /dev/null
+++ b/src/compute/skc/skc_styling.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_ONCE_SKC_STYLING
+#define SKC_ONCE_SKC_STYLING
+
+//
+// STYLING COMMANDS
+//
+// FIXME -- THESE ARE PLATFORM "CAPABILITIES" AND PRESENCE OF ANY
+// EXOTIC NON-CORE COMMANDS SHOULD BE DETERMINED AT RUNTIME
+//
+
+typedef enum skc_styling_opcode_e {
+
+  SKC_STYLING_OPCODE_NOOP,
+
+  SKC_STYLING_OPCODE_COVER_NONZERO,
+  SKC_STYLING_OPCODE_COVER_EVENODD,
+  SKC_STYLING_OPCODE_COVER_ACCUMULATE,
+  SKC_STYLING_OPCODE_COVER_MASK,
+
+  SKC_STYLING_OPCODE_COVER_WIP_ZERO,
+  SKC_STYLING_OPCODE_COVER_ACC_ZERO,
+  SKC_STYLING_OPCODE_COVER_MASK_ZERO,
+  SKC_STYLING_OPCODE_COVER_MASK_ONE,
+  SKC_STYLING_OPCODE_COVER_MASK_INVERT,
+
+  SKC_STYLING_OPCODE_COLOR_FILL_SOLID,
+  SKC_STYLING_OPCODE_COLOR_FILL_GRADIENT_LINEAR,
+
+  SKC_STYLING_OPCODE_COLOR_WIP_ZERO,
+  SKC_STYLING_OPCODE_COLOR_ACC_ZERO,
+
+  SKC_STYLING_OPCODE_BLEND_OVER,
+  SKC_STYLING_OPCODE_BLEND_PLUS,
+  SKC_STYLING_OPCODE_BLEND_MULTIPLY,
+  SKC_STYLING_OPCODE_BLEND_KNOCKOUT,
+
+  SKC_STYLING_OPCODE_COVER_WIP_MOVE_TO_MASK,
+  SKC_STYLING_OPCODE_COVER_ACC_MOVE_TO_MASK,
+
+  SKC_STYLING_OPCODE_BACKGROUND_OVER,
+
+  SKC_STYLING_OPCODE_SURFACE_COMPOSITE,
+
+  SKC_STYLING_OPCODE_COLOR_ACC_TEST_OPACITY,
+
+  //
+  //
+  //
+
+  SKC_STYLING_OPCODE_COUNT,
+
+  //
+  //
+  //
+
+  SKC_STYLING_OPCODE_IS_FINAL = 0x80000000
+
+} skc_styling_opcode_e;
+
+//
+//
+//
+
+typedef enum skc_styling_gradient_type_e {
+
+  SKC_STYLING_GRADIENT_TYPE_LINEAR_NON_REPEATING,
+  SKC_STYLING_GRADIENT_TYPE_LINEAR_REPEATING,
+  SKC_STYLING_GRADIENT_TYPE_LINEAR_REFLECTING,
+
+  SKC_STYLING_GRADIENT_TYPE_COUNT
+
+} skc_styling_gradient_type_e;
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/styling.c b/src/compute/skc/styling.c
new file mode 100644
index 0000000..5653e20
--- /dev/null
+++ b/src/compute/skc/styling.c
@@ -0,0 +1,398 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#include <memory.h>
+
+#include "styling.h"
+#include "styling_types.h"
+#include "skc.h"
+
+//
+// FIXME -- x86'isms are temporary
+//
+
+#include <immintrin.h>
+
+//
+//
+//
+
+skc_err
+skc_styling_retain(skc_styling_t styling)
+{
+  styling->ref_count += 1;
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_styling_release(skc_styling_t styling)
+{
+  //
+  // blocks and waits if grid is active
+  //
+  styling->release(styling->impl);
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_styling_seal(skc_styling_t styling)
+{
+  //
+  // no-op if sealed
+  //
+  styling->seal(styling->impl);
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_styling_unseal(skc_styling_t styling)
+{
+  //
+  // no-op if unsealed
+  // blocks and waits if sealed and grid is active
+  //
+  styling->unseal(styling->impl,false);
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_styling_reset(skc_styling_t styling)
+{
+  styling->unseal(styling->impl,true);
+
+  styling->layers.count = 0;
+  styling->groups.count = 0;
+  styling->extras.count = 0;
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+// FIXME -- various robustifications can be made to this builder but
+// we don't want to make this heavyweight too soon
+//
+// - out of range layer_id is an error
+// - extras[] overflow is an error
+//
+
+skc_err
+skc_styling_group_alloc(skc_styling_t  styling,
+                        skc_group_id * group_id)
+{
+  styling->unseal(styling->impl,true);
+
+  *group_id = styling->groups.count++;
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_styling_group_enter(skc_styling_t             styling,
+                        skc_group_id              group_id,
+                        uint32_t                  n,
+                        skc_styling_cmd_t const * cmds)
+{
+  styling->unseal(styling->impl,true);
+
+  styling->groups.extent[group_id].cmds.enter = styling->extras.count;
+
+  memcpy(styling->extras.extent + styling->extras.count,cmds,n * sizeof(*cmds));
+
+  styling->extras.count += n;
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_styling_group_leave(skc_styling_t             styling,
+                        skc_group_id              group_id,
+                        uint32_t                  n,
+                        skc_styling_cmd_t const * cmds)
+{
+  styling->unseal(styling->impl,true);
+
+  styling->groups.extent[group_id].cmds.leave = styling->extras.count;
+
+  memcpy(styling->extras.extent + styling->extras.count,cmds,n * sizeof(*cmds));
+
+  styling->extras.count += n;
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_styling_group_parents(skc_styling_t        styling,
+                          skc_group_id         group_id,
+                          uint32_t             depth,
+                          skc_group_id const * parents)
+{
+  styling->unseal(styling->impl,true);
+
+  styling->groups.extent[group_id].parents = (union skc_group_parents)
+    {
+      .depth = depth,
+      .base  = styling->extras.count
+    };
+
+  memcpy(styling->extras.extent + styling->extras.count,parents,depth * sizeof(*parents));
+
+  styling->extras.count += depth;
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_styling_group_range_lo(skc_styling_t styling,
+                           skc_group_id  group_id,
+                           skc_layer_id  layer_lo)
+{
+  styling->unseal(styling->impl,true);
+
+  styling->groups.extent[group_id].range.lo = layer_lo;
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_styling_group_range_hi(skc_styling_t styling,
+                           skc_group_id  group_id,
+                           skc_layer_id  layer_hi)
+{
+  styling->unseal(styling->impl,true);
+
+  styling->groups.extent[group_id].range.hi = layer_hi;
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_styling_group_layer(skc_styling_t             styling,
+                        skc_group_id              group_id,
+                        skc_layer_id              layer_id,
+                        uint32_t                  n,
+                        skc_styling_cmd_t const * cmds)
+{
+  styling->unseal(styling->impl,true);
+
+  styling->layers.extent[layer_id] = (union skc_layer_node)
+    {
+      .cmds   = styling->extras.count,
+      .parent = group_id
+    };
+
+  memcpy(styling->extras.extent + styling->extras.count,cmds,n * sizeof(*cmds));
+
+  styling->extras.count += n;
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+// FIXME -- get rid of these x86'isms ASAP -- let compiler figure it
+// out with a vector type
+//
+
+static
+__m128i
+skc_convert_colors_4(float const * const colors)
+{
+  __m128i c;
+
+  c = _mm_cvtps_ph(*(__m128*)colors,0);
+
+  return c;
+}
+
+static
+__m128i
+skc_convert_colors_8(float const * const colors)
+{
+  __m128i c;
+
+  c = _mm256_cvtps_ph(*(__m256*)colors,0);
+
+  return c;
+}
+
+//
+//
+//
+
+static
+void
+skc_styling_layer_cmd_rgba_encoder(skc_styling_cmd_t  * const cmds,
+                                   skc_styling_opcode_e const opcode,
+                                   float                const rgba[4])
+{
+  __m128i const c = skc_convert_colors_4(rgba);
+
+  cmds[0] = opcode;
+  cmds[1] = c.m128i_u32[0];
+  cmds[2] = c.m128i_u32[1];
+}
+
+void
+skc_styling_background_over_encoder(skc_styling_cmd_t * cmds, float const rgba[4])
+{
+  skc_styling_layer_cmd_rgba_encoder(cmds,SKC_STYLING_OPCODE_BACKGROUND_OVER,rgba);
+}
+
+void
+skc_styling_layer_fill_rgba_encoder(skc_styling_cmd_t * cmds, float const rgba[4])
+{
+  // encode a solid fill
+  skc_styling_layer_cmd_rgba_encoder(cmds,SKC_STYLING_OPCODE_COLOR_FILL_SOLID,rgba);
+}
+
+//
+//
+//
+
+void
+skc_styling_layer_fill_gradient_encoder(skc_styling_cmd_t         * cmds,
+                                        float                       x0,
+                                        float                       y0,
+                                        float                       x1,
+                                        float                       y1,
+                                        skc_styling_gradient_type_e type,
+                                        uint32_t                    n,
+                                        float                 const stops[],
+                                        float                 const colors[])
+{
+  union skc_styling_cmd * const cmds_u = (union skc_styling_cmd *)cmds;
+
+  //
+  // encode a gradient fill
+  //
+  cmds_u[0].opcode = SKC_STYLING_OPCODE_COLOR_FILL_GRADIENT_LINEAR;
+
+  float const dx = x1 - x0;
+  float const dy = y1 - y0;
+  float const c1 = x0 * dx + y0 * dy;
+  float const c2 = x1 * dx + y1 * dy;
+
+  cmds_u[1].f32 =  dx;               // dx
+  cmds_u[2].f32 = -c1;               // p0
+  cmds_u[3].f32 =  dy;               // dy
+  cmds_u[4].f32 =  1.0f / (c2 - c1); // denom
+
+  //
+  // store type
+  //
+  cmds_u[5].gradient_type = type;
+
+  //
+  // Write out slopes
+  //
+  // Note: make sure that that the first and last stop pairs don't
+  // have a span of zero.  Why?  Because it's meaningless and the
+  // zero-span stops can simply be dropped.
+  //
+  // And obviously the stops need to monotonically increasing.
+  //
+  // These validations can be perfomed elsewhere.
+  //
+  // After a pile of simple algebra the slope necessary to map a stop
+  // percentage on [0,1] to an INDEX.LERP real number from [0.0,N.0]
+  // is simply:
+  //
+  //                delta_stop_prev
+  //   slope_curr = --------------- - 1
+  //                delta_stop_curr
+  //
+  // Each delta stop equal to zero reduces the stop count by 1.
+  //
+  // Note that color pairs are what's stored so this simplified
+  // representation works for both linear gradients with non-zero
+  // delta stops and linear gradients that double-up the stops in
+  // order to produce "stripes".
+  //
+  float                         ds_prev = stops[1] - stops[0];
+  union skc_styling_cmd * const slopes  = cmds_u + 8;
+
+  slopes[0].f32 = 1.0f / ds_prev;
+
+  uint32_t ds_count = 1;
+
+  for (uint32_t ii=1; ii<n-1; ii++)
+    {
+      float const ds_curr = stops[ii+1] - stops[ii];
+
+      if (ds_curr > 0.0f)
+        {
+          slopes[ds_count++].f32 = ds_prev / ds_curr - 1.0f;
+          ds_prev                = ds_curr;
+        }
+    }
+
+  //
+  // save a potentially compressed delta slope count
+  //
+  cmds_u[6].u32 = ds_count;
+  cmds_u[7].u32 = n; // REMOVE ME -------------------------------------------- REMOVE
+
+  //
+  // FIXME -- encode color pair as a single color diff as noted by HERB @ CHAP <------------- FIXME
+  //
+
+  //
+  // write out color pairs while skipping delta stops equal to zero
+  //
+  uint32_t const color_count = ds_count + 1;
+
+  union skc_styling_cmd * color_r = cmds_u + 8 + ds_count;
+  union skc_styling_cmd * color_g = color_r + color_count;
+  union skc_styling_cmd * color_b = color_r + color_count * 2;
+  union skc_styling_cmd * color_a = color_r + color_count * 3;
+
+  for (uint32_t ii=0; ii<n-1; ii++)
+    {
+      if (stops[ii+1] > stops[ii])
+        {
+          __m128i const c = skc_convert_colors_8(colors+ii*4);
+
+          color_r->u16v2.lo = c.m128i_u16[0];
+          color_r->u16v2.hi = c.m128i_u16[4];
+          color_g->u16v2.lo = c.m128i_u16[1];
+          color_g->u16v2.hi = c.m128i_u16[5];
+          color_b->u16v2.lo = c.m128i_u16[2];
+          color_b->u16v2.hi = c.m128i_u16[6];
+          color_a->u16v2.lo = c.m128i_u16[3];
+          color_a->u16v2.hi = c.m128i_u16[7];
+
+          ++color_r;
+          ++color_g;
+          ++color_b;
+          ++color_a;
+        }
+    }
+
+  float laststop[8]; // sentinel to lerp against same color
+
+  for (int ii=0; ii<4; ii++)
+    laststop[ii+4] = laststop[ii] = colors[(n-1)*4+ii];
+
+  __m128i const c = skc_convert_colors_8(laststop);
+
+  color_r->u16v2.lo = c.m128i_u16[0];
+  color_r->u16v2.hi = c.m128i_u16[4];
+  color_g->u16v2.lo = c.m128i_u16[1];
+  color_g->u16v2.hi = c.m128i_u16[5];
+  color_b->u16v2.lo = c.m128i_u16[2];
+  color_b->u16v2.hi = c.m128i_u16[6];
+  color_a->u16v2.lo = c.m128i_u16[3];
+  color_a->u16v2.hi = c.m128i_u16[7];
+}
+
+//
+//
+//
diff --git a/src/compute/skc/styling.h b/src/compute/skc/styling.h
new file mode 100644
index 0000000..7f20c1e
--- /dev/null
+++ b/src/compute/skc/styling.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "types.h"
+
+//
+// STYLING
+//
+
+struct skc_styling
+{
+  struct skc_context      * context;
+
+  struct skc_styling_impl * impl;
+
+  void                   (* seal   )(struct skc_styling_impl * const impl);
+  void                   (* unseal )(struct skc_styling_impl * const impl, skc_bool const block);
+  void                   (* release)(struct skc_styling_impl * const impl);
+                                     
+  skc_int                   ref_count;
+
+  struct {
+    union skc_layer_node  * extent;
+    skc_uint                size;
+    skc_uint                count;
+  } layers;
+
+  struct {
+    struct skc_group_node * extent;
+    skc_uint                size;
+    skc_uint                count;
+  } groups;
+
+  struct {
+    union skc_styling_cmd * extent;
+    skc_uint                size;
+    skc_uint                count;
+  } extras;
+};
+
+//
+//
+//
+
diff --git a/src/compute/skc/styling_cl_12.c b/src/compute/skc/styling_cl_12.c
new file mode 100644
index 0000000..6c84fe6
--- /dev/null
+++ b/src/compute/skc/styling_cl_12.c
@@ -0,0 +1,339 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+// NOTES:
+//
+// - this particular object only needs a command queue for a short
+//   time so consider acquiring/releasing the command queue on demand
+//   but only if command queues are cached and expensive to keep
+//
+
+#include "common/cl/assert_cl.h"
+
+#include "styling_cl_12.h"
+#include "extent_cl_12.h"
+#include "runtime_cl_12.h"
+
+#include "context.h"
+#include "styling_types.h"
+
+//
+//
+//
+
+static
+void
+skc_styling_unmap_complete(skc_grid_t const grid)
+{
+  struct skc_styling_impl * const impl = skc_grid_get_data(grid);
+  
+  impl->state = SKC_STYLING_STATE_SEALED;
+
+  skc_grid_complete(grid);
+}
+
+static
+void
+skc_styling_unmap_cb(cl_event event, cl_int status, skc_grid_t const grid)
+{
+  SKC_CL_CB(status);
+
+  struct skc_styling_impl * const impl      = skc_grid_get_data(grid);
+  struct skc_scheduler    * const scheduler = impl->runtime->scheduler;
+
+  // as quickly as possible, enqueue next stage in pipeline to context command scheduler
+  SKC_SCHEDULER_SCHEDULE(scheduler,skc_styling_unmap_complete,grid);
+}
+
+static
+void
+skc_styling_grid_pfn_execute(skc_grid_t const grid)
+{
+  struct skc_styling_impl * const impl    = skc_grid_get_data(grid);
+  struct skc_styling      * const styling = impl->styling;
+
+  //
+  // unmap all extents
+  //
+  cl_event complete;
+
+  skc_extent_phwN_pdrN_unmap(&impl->layers,styling->layers.extent,impl->cq,NULL);
+  skc_extent_phwN_pdrN_unmap(&impl->groups,styling->groups.extent,impl->cq,NULL);
+  skc_extent_phwN_pdrN_unmap(&impl->extras,styling->extras.extent,impl->cq,&complete);  
+
+  // set the event
+  cl(SetEventCallback(complete,CL_COMPLETE,skc_styling_unmap_cb,grid));
+  cl(ReleaseEvent(complete));
+
+  // flush command queue
+  cl(Flush(impl->cq));
+}
+
+//
+//
+//
+
+static
+void
+skc_styling_pfn_seal(struct skc_styling_impl * const impl)
+{
+  // return if sealing or sealed
+  if (impl->state >= SKC_STYLING_STATE_SEALING)
+    return;
+
+  struct skc_runtime   * const runtime   = impl->runtime;
+  struct skc_scheduler * const scheduler = runtime->scheduler;
+
+  //
+  // otherwise, wait for UNSEALING > UNSEALED transition
+  //
+  if (impl->state == SKC_STYLING_STATE_UNSEALING)
+    {
+      SKC_SCHEDULER_WAIT_WHILE(scheduler,impl->state != SKC_STYLING_STATE_UNSEALED);
+    }
+  
+  //
+  // we're unsealed so we need to seal and start the grid
+  //
+  impl->state = SKC_STYLING_STATE_SEALING;
+  impl->grid  = SKC_GRID_DEPS_ATTACH(runtime->deps,
+                                     NULL,
+                                     impl,
+                                     NULL,  // no waiting
+                                     skc_styling_grid_pfn_execute,
+                                     NULL); // no dispose
+
+  // no need to force -- styling has no dependencies
+  skc_grid_start(impl->grid);
+}
+
+//
+//
+//
+
+void
+skc_styling_unseal_complete(struct skc_styling_impl * const impl)
+{
+  struct skc_runtime * const runtime = impl->runtime;
+  
+  // we're now unsealed
+  impl->state = SKC_STYLING_STATE_UNSEALED;
+}
+
+static
+void
+skc_styling_unseal_cb(cl_event event, cl_int status, struct skc_styling_impl * const impl)
+{
+  SKC_CL_CB(status);
+  
+  // as quickly as possible, enqueue next stage in pipeline to context command scheduler
+  SKC_SCHEDULER_SCHEDULE(impl->runtime->scheduler,skc_styling_unseal_complete,impl);
+}
+
+static
+void
+skc_styling_pfn_unseal(struct skc_styling_impl * const impl, skc_bool const block)
+{
+  // return if already unsealed
+  if (impl->state == SKC_STYLING_STATE_UNSEALED)
+    return;
+
+  //
+  // otherwise, we're going to need to pump the scheduler
+  //
+  struct skc_runtime   * const runtime   = impl->runtime;
+  struct skc_scheduler * const scheduler = runtime->scheduler;
+
+  //
+  // wait for UNSEALING > UNSEALED transition
+  //
+  if (impl->state == SKC_STYLING_STATE_UNSEALING)
+    {
+      if (block) {
+        SKC_SCHEDULER_WAIT_WHILE(scheduler,impl->state != SKC_STYLING_STATE_UNSEALED);
+      }
+      return;
+    }
+
+  //
+  // otherwise, wait for SEALING > SEALED transition ...
+  //
+  if (impl->state == SKC_STYLING_STATE_SEALING)
+    {
+      // wait if sealing 
+      SKC_SCHEDULER_WAIT_WHILE(scheduler,impl->state != SKC_STYLING_STATE_SEALED);
+    }
+  
+  // wait for rendering locks to be released
+  SKC_SCHEDULER_WAIT_WHILE(scheduler,impl->lock_count > 0);
+
+  // ... and then unseal the styling object
+  impl->state = SKC_STYLING_STATE_UNSEALING;
+
+  // defensively NULL the grid reference
+  impl->grid  = NULL; // defensive
+
+  // set styling pointers with mapped extents
+  cl_event complete;
+
+  struct skc_styling * const styling = impl->styling;
+  
+  styling->layers.extent = skc_extent_phwN_pdrN_map(&impl->layers,impl->cq,NULL);
+  styling->groups.extent = skc_extent_phwN_pdrN_map(&impl->groups,impl->cq,NULL);
+  styling->extras.extent = skc_extent_phwN_pdrN_map(&impl->extras,impl->cq,&complete);
+
+  cl(SetEventCallback(complete,CL_COMPLETE,skc_styling_unseal_cb,impl));
+  cl(ReleaseEvent(complete));
+
+  // flush it
+  cl(Flush(impl->cq));
+
+  // wait until unsealed...
+  if (block) {
+    SKC_SCHEDULER_WAIT_WHILE(scheduler,impl->state != SKC_STYLING_STATE_UNSEALED);
+  }
+}
+
+//
+//
+//
+
+static
+void
+skc_styling_pfn_release(struct skc_styling_impl * const impl)
+{
+  if (--impl->styling->ref_count != 0)
+    return;
+
+  //
+  // otherwise, unmap all resources by sealing and delete
+  //
+  skc_styling_pfn_seal(impl);
+
+  struct skc_runtime   * const runtime   = impl->runtime;
+  struct skc_scheduler * const scheduler = runtime->scheduler;
+
+  // wait until sealed
+  SKC_SCHEDULER_WAIT_WHILE(scheduler,impl->state != SKC_STYLING_STATE_SEALED);
+
+  // wait for locks to drain
+  SKC_SCHEDULER_WAIT_WHILE(scheduler,impl->lock_count > 0)
+
+  //
+  // styling is now disposable
+  //
+
+  // free styling host
+  skc_runtime_host_perm_free(runtime,impl->styling);
+
+  // release the cq
+  skc_runtime_release_cq_in_order(runtime,impl->cq);
+  
+  // free extents
+  skc_extent_phwN_pdrN_free(runtime,&impl->layers);
+  skc_extent_phwN_pdrN_free(runtime,&impl->groups);
+  skc_extent_phwN_pdrN_free(runtime,&impl->extras);
+
+  // free styling impl
+  skc_runtime_host_perm_free(runtime,impl);
+}
+
+//
+//
+//
+
+void
+skc_styling_retain_and_lock(struct skc_styling * const styling)
+{
+  skc_styling_retain(styling);
+
+  styling->impl->lock_count += 1;
+}
+
+void
+skc_styling_unlock_and_release(struct skc_styling * const styling)
+{
+  styling->impl->lock_count -= 1;
+
+  skc_styling_pfn_release(styling->impl);
+}
+
+//
+//
+//
+
+skc_err
+skc_styling_cl_12_create(struct skc_context   * const context,
+                         struct skc_styling * * const styling,
+                         skc_uint               const layers_count,
+                         skc_uint               const groups_count,
+                         skc_uint               const extras_count)
+{
+  // retain the context
+  // skc_context_retain(context);
+
+  // allocate the impl
+  struct skc_runtime      * const runtime = context->runtime;
+  struct skc_styling_impl * const impl    = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,sizeof(*impl));
+
+  // allocate styling
+  (*styling)          = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,sizeof(**styling));
+  (*styling)->context = context;
+  (*styling)->impl    = impl;
+
+  // intialize impl
+  impl->styling       = (*styling);
+  impl->runtime       = runtime;
+
+  SKC_ASSERT_STATE_INIT(impl,SKC_STYLING_STATE_SEALED);
+
+  impl->lock_count    = 0;
+
+  impl->cq            = skc_runtime_acquire_cq_in_order(runtime);
+  
+  //
+  // The styling object is unique in that the API lets the user
+  // specify resource limits
+  //
+  // The styling object is a simple container that can have wildly
+  // varying resource requirements (but still relatively modest).
+  //
+  // Additionally, an advanced SKC programmer may want to create many
+  // styling and composition objects as they're relatively cheap.
+  //
+  skc_extent_phwN_pdrN_alloc(runtime,&impl->layers,sizeof(*(*styling)->layers.extent) * layers_count);
+  skc_extent_phwN_pdrN_alloc(runtime,&impl->groups,sizeof(*(*styling)->groups.extent) * groups_count);
+  skc_extent_phwN_pdrN_alloc(runtime,&impl->extras,sizeof(*(*styling)->extras.extent) * extras_count);
+
+  // initialize styling
+  (*styling)->layers.size  = layers_count;
+  (*styling)->groups.size  = groups_count;
+  (*styling)->extras.size  = extras_count;
+
+  (*styling)->layers.count = 0;
+  (*styling)->groups.count = 0;
+  (*styling)->extras.count = 0;
+
+  // save pfns
+  (*styling)->seal         = skc_styling_pfn_seal;
+  (*styling)->unseal       = skc_styling_pfn_unseal;
+  (*styling)->release      = skc_styling_pfn_release;
+
+  // set ref count
+  (*styling)->ref_count    = 1;
+
+  // map the extents by unsealing
+  skc_styling_pfn_unseal(impl,false);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
diff --git a/src/compute/skc/styling_cl_12.h b/src/compute/skc/styling_cl_12.h
new file mode 100644
index 0000000..a319568
--- /dev/null
+++ b/src/compute/skc/styling_cl_12.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include <CL/opencl.h>
+
+#include "styling.h"
+#include "grid.h"
+#include "extent_cl_12.h"
+#include "assert_state.h"
+
+//
+// styling states
+//
+
+typedef enum skc_styling_state_e {
+
+  SKC_STYLING_STATE_UNSEALING,
+  SKC_STYLING_STATE_UNSEALED,
+  SKC_STYLING_STATE_SEALING,
+  SKC_STYLING_STATE_SEALED
+
+} skc_styling_state_e;
+
+//
+// IMPL
+//
+
+struct skc_styling_impl
+{
+  struct skc_styling         * styling;
+  struct skc_runtime         * runtime;
+  
+  SKC_ASSERT_STATE_DECLARE(skc_styling_state_e);
+
+  skc_int                      lock_count;  // # of wip renders
+
+  skc_grid_t                   grid;
+
+  // in-order command queue
+  cl_command_queue             cq;
+
+  //
+  // only 3 extents
+  //
+  struct skc_extent_phwN_pdrN  layers;
+  struct skc_extent_phwN_pdrN  groups;
+  struct skc_extent_phwN_pdrN  extras;
+};
+
+//
+// ONLY VISIBLE WITHIN THIS RUNTIME
+//
+
+void
+skc_styling_retain_and_lock(struct skc_styling * const styling);
+
+void
+skc_styling_unlock_and_release(struct skc_styling * const styling);
+
+//
+//
+//
diff --git a/src/compute/skc/styling_types.h b/src/compute/skc/styling_types.h
new file mode 100644
index 0000000..07d9a10
--- /dev/null
+++ b/src/compute/skc/styling_types.h
@@ -0,0 +1,250 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_ONCE_STYLING_TYPES
+#define SKC_ONCE_STYLING_TYPES
+
+//
+//
+//
+
+#include "types.h"
+#include "macros.h"
+#include "skc_styling.h"
+
+//
+//
+//
+
+typedef skc_uint  skc_layer_id;
+typedef skc_uint  skc_group_id;
+
+//
+//
+//
+
+union skc_styling_cmd
+{
+  skc_uint                    u32;
+  skc_int                     s32;
+  skc_float                   f32;
+  skc_half                    f16a2[2];
+  skc_ushort2                 u16v2;
+  skc_styling_opcode_e        opcode;
+  skc_styling_gradient_type_e gradient_type;
+  skc_group_id                parent;
+
+#if 0
+#if !defined(__OPENCL_C_VERSION__)
+  struct {
+    skc_uint                  opcode : 31;
+    skc_uint                  final  : 1;
+  };
+#endif
+#endif
+};
+
+#define SKC_STYLING_OPCODE_MASK_OPCODE    SKC_BITS_TO_MASK(31)
+#define SKC_STYLING_OPCODE_MASK_IS_FINAL  SKC_BITS_TO_MASK_AT(1,31)
+
+SKC_STATIC_ASSERT(sizeof(union skc_styling_cmd) == sizeof(skc_uint));
+
+//
+//
+//
+
+union skc_layer_node
+{
+  skc_uint2      u32v2;
+
+  struct {
+    skc_uint     cmds;   // starting index of sequence of command words
+    skc_group_id parent; // index of parent group
+  };
+};
+
+SKC_STATIC_ASSERT(sizeof(union skc_layer_node) == sizeof(skc_uint2));
+
+//
+//
+//
+
+union skc_group_parents
+{
+  skc_uint2  u32v2;
+
+  struct {
+    skc_uint depth; // zero-based depth of this group
+    skc_uint base;  // index to sequence of group ids leading back to root
+  };
+};
+
+SKC_STATIC_ASSERT(sizeof(union skc_group_parents) == sizeof(skc_uint2));
+
+//
+// inclusive layer range [lo,hi]
+//
+
+union skc_group_range
+{
+  skc_uint2  u32v2;
+
+  struct {
+    skc_uint lo; // first layer
+    skc_uint hi; // last  layer
+  };
+};
+
+SKC_STATIC_ASSERT(sizeof(union skc_group_range) == sizeof(skc_uint2));
+
+//
+//
+//
+
+struct skc_group_node
+{
+  union skc_group_parents parents; // path of parent groups leading back to root
+
+  union skc_group_range   range;   // range of layers enclosed by this group
+
+  struct {
+    skc_uint              enter;   // starting index of sequence of command words
+    skc_uint              leave;   // starting index of sequence of command words
+  } cmds;
+};
+
+SKC_STATIC_ASSERT(sizeof(struct skc_group_node) == sizeof(skc_uint2) * 3); // 6 words
+
+//
+//
+//
+
+union skc_gradient_slope
+{
+  skc_float  slope;
+  skc_half   color_pair[2];  
+};
+
+SKC_STATIC_ASSERT(sizeof(union skc_gradient_slope) == sizeof(skc_float));
+
+//
+//
+//
+
+union skc_gradient_vector
+{
+  skc_float4               f32v4;
+
+  struct {
+    skc_float              dx;
+    skc_float              p0;
+    skc_float              dy;
+    skc_float              denom;
+  };
+
+  union skc_gradient_slope slopes[4];
+};
+
+SKC_STATIC_ASSERT(sizeof(union skc_gradient_vector) == sizeof(skc_float4));
+
+//
+// FIXME -- will eventually need to know if this gradient is
+// perspective transformed and if so additional values will need to be
+// encoded
+//
+// VERSION 1
+// =============================================================
+//
+// LINEAR GRADIENT HEADER FOR N STOPS
+//
+// +----------+----------+------------+----------+-------------+
+// |  HEADER  |   INFO   |    LUTS    |  FLOORS  |    COLORS   |
+// +----------+----------+------------+----------+-------------+
+// |  uintv4  | u32v2[1] | f32v2[N-1] | f32[N-2] | ushort2[4N] |
+// +----------+----------+------------+----------+-------------+
+//
+//   COLOR PAIR            WORD EXPANSION            TOTAL
+// +------------+---------------------------------+--------+-------------------------+
+// |  ushort2   |  4 + 2 + 2*(N-1) + N - 2 + 4*N  | 7N + 2 | = 7(N-1+1)+2 = 7(N-1)+9 |
+// +------------+---------------------------------+--------+-------------------------+
+//
+// COLOR LAYOUT:
+// 
+//   R[0]R[1], R[1]R[2], ... R[N-1]R[N-1]
+//   G[0]G[1], G[1]G[2], ... G[N-1]G[N-1]
+//   B[0]B[1], B[1]B[2], ... B[N-1]B[N-1]
+//   A[0]A[1], A[1]A[2], ... A[N-1]A[N-1]
+//
+//
+// MINIMUM WORDS:  N=2 --> 16
+//
+//
+// VERSION 2
+// =============================================================
+//
+// LINEAR GRADIENT DESCRIPTOR FOR N STOPS
+//
+//                           +--------------- REMOVE ME LATER
+//                           v
+// +--------+------+-------+---+----------+-----------+
+// | VECTOR | TYPE | COUNT | N |  SLOPES  |   COLORS  |
+// +--------+------+-------+---+----------+-----------+
+// |  f32v4 |   1  |   1   | 1 | f32[N-1] | f16v2[4N] |
+// +--------+------+-------+---+----------+-----------+
+//
+//   COLOR PAIR           WORD EXPANSION            TOTAL
+// +------------+--------------------------------+--------+
+// |   f16v2    |  4 + 1 + 1 + 1 + [N-1] + [4*N] | 5N + 6 |
+// +------------+--------------------------------+--------+
+//
+// COLOR LAYOUT:
+// 
+//   R[0]R[1], R[1]R[2], ... R[N-1]R[N-1] <-------------------------- FIXME -- USE HERB'S SINGLE FMA REPRESENTATION
+//   G[0]G[1], G[1]G[2], ... G[N-1]G[N-1] <-------------------------- FIXME -- USE HERB'S SINGLE FMA REPRESENTATION
+//   B[0]B[1], B[1]B[2], ... B[N-1]B[N-1] <-------------------------- FIXME -- USE HERB'S SINGLE FMA REPRESENTATION
+//   A[0]A[1], A[1]A[2], ... A[N-1]A[N-1] <-------------------------- FIXME -- USE HERB'S SINGLE FMA REPRESENTATION
+//
+//
+// MINIMUM WORDS:  N=2 --> 16
+//
+//
+// VERSION 3+
+// =============================================================
+//
+// FIXME -- will probably want to try using the sampler/texture
+// hardware to interpolate colors.
+//
+// This will require that the colors are laid out in sampler-friendly
+// order:
+//
+//    RGBA[0]RGBA[1], RGBA[1]RGBA[2], ..., RGBA[N-1]RGBA[N-1] 
+//
+//
+
+#if 0
+#define SKC_GRADIENT_HEADER_WORDS_LUTS_OFFSET       4
+#define SKC_GRADIENT_HEADER_WORDS_TOTAL(n_minus_1)  (7 * (n_minus_1) + 9)
+#define SKC_GRADIENT_HEADER_WORDS_MIN               SKC_GRADIENT_HEADER_WORDS_TOTAL(1)
+#define SKC_GRADIENT_CMD_WORDS_V1(n)                (1 + SKC_GRADIENT_HEADER_WORDS_TOTAL(n-1))
+#endif
+
+#define SKC_GRADIENT_CMD_WORDS_V1(n)                (7 * (n) + 2)
+#define SKC_GRADIENT_CMD_WORDS_V2(n)                (5 * (n) + 6)
+#define SKC_GRADIENT_CMD_WORDS_V2_ADJUST(v1,v2)     (SKC_GRADIENT_CMD_WORDS_V1(v1) - ((v2) + 6))
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
+
+  
diff --git a/src/compute/skc/suballocator.c b/src/compute/skc/suballocator.c
new file mode 100644
index 0000000..382e818
--- /dev/null
+++ b/src/compute/skc/suballocator.c
@@ -0,0 +1,381 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include <assert.h>
+#include <memory.h>
+
+#include "runtime_cl_12.h"
+#include "scheduler.h"
+
+//
+//
+//
+
+#ifndef NDEBUG
+
+#include <stdio.h>
+
+#define SKC_SUBALLOCATOR_DEBUG_ALLOC(suballocator,subbuf_id,ss)         \
+  fprintf(stderr,                                                       \
+          "suballocator %s : [ %4u ] : alloc( %9u ) @ %4u = %u\n",      \
+          suballocator->name,                                           \
+          suballocator->rem.avail,                                      \
+          (skc_uint)ss,                                                 \
+          subbuf_id,                                                    \
+          (skc_uint)suballocator->total);
+
+#define SKC_SUBALLOCATOR_DEBUG_FREE(suballocator,subbuf_id,ss)          \
+  fprintf(stderr,                                                       \
+          "suballocator %s : [ %4u ] : free ( %9u ) @ %4u = %u\n",      \
+          suballocator->name,                                           \
+          suballocator->rem.avail,                                      \
+          (skc_uint)ss,                                                 \
+          subbuf_id,                                                    \
+          (skc_uint)suballocator->total);
+
+#else
+
+#define SKC_SUBALLOCATOR_DEBUG_ALLOC(suballocator,subbuf_id,ss)
+#define SKC_SUBALLOCATOR_DEBUG_FREE(suballocator,subbuf_id,ss)
+
+#endif
+
+//
+//
+//
+
+void
+skc_suballocator_create(struct skc_runtime      * const runtime,
+                        struct skc_suballocator * const suballocator,
+                        char              const * const name,
+                        skc_uint                  const subbufs,
+                        size_t                    const align,
+                        size_t                    const size)
+{
+  size_t const subbufs_size = sizeof(*suballocator->subbufs) * subbufs;
+
+  // allocate array of subbuf records
+  suballocator->subbufs = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,subbufs_size);
+
+  // zero subbufs
+  memset(suballocator->subbufs,0,subbufs_size);
+
+  // initialize starting subbuf
+  suballocator->subbufs[0].size = (skc_subbuf_size_t)size;
+
+  // allocate array of ids
+  suballocator->ids = skc_runtime_host_perm_alloc(runtime,
+                                                  SKC_MEM_FLAGS_READ_WRITE,
+                                                  sizeof(*suballocator->ids) * subbufs);
+  for (skc_uint ii=0; ii<subbufs; ii++)
+    suballocator->ids[ii] = ii;
+
+  suballocator->rem.avail = 1;
+  suballocator->rem.spare = subbufs - 1;
+
+  suballocator->align     = (skc_uint)align;
+  suballocator->count     = subbufs;
+
+  suballocator->size      = (skc_subbuf_size_t)size;
+  suballocator->total     = 0;
+
+  suballocator->name      = name;
+}
+
+void
+skc_suballocator_dispose(struct skc_runtime      * const runtime,
+                         struct skc_suballocator * const suballocator)
+{
+  skc_runtime_host_perm_free(runtime,suballocator->ids);
+  skc_runtime_host_perm_free(runtime,suballocator->subbufs);
+}
+
+
+//
+// Sets id and returns origin
+//
+
+size_t
+skc_suballocator_subbuf_alloc(struct skc_suballocator * const suballocator,
+                              struct skc_scheduler    * const scheduler,
+                              size_t                    const size,
+                              skc_subbuf_id_t         * const subbuf_id,
+                              size_t                  * const subbuf_size)
+{
+  //
+  // Note that we can't deadlock here because everything allocated is
+  // expected to be freed within msecs.  Worst case, we wait for a
+  // availability of resources while a fully utilized GPU is making
+  // forward progress on kernels.
+  //
+  // This behavior should guide the sizing of the suballocator's
+  // number of subbuffers and extent.
+  //
+  // We want to allocate a large enough extent and enough subbuffer
+  // records so that the CPU/GPU is never starved.
+  //
+
+  // round up the size
+  skc_subbuf_size_t const size_ru = (skc_subbuf_size_t)SKC_ROUND_UP_POW2(size,suballocator->align);
+
+  // save it
+  if (subbuf_size != NULL)
+    *subbuf_size = size_ru;
+
+  //
+  // We precheck to see there is at least one region of memory
+  // available but do not check to see if there is a spare. Instead,
+  // we simply keep looking for an exact fit.
+  //
+  skc_subbuf_id_t * const ids = suballocator->ids;
+
+  while (true)
+    {
+      skc_uint avail_rem = suballocator->rem.avail;
+      skc_uint spare_rem = suballocator->rem.spare;
+
+      for (skc_uint avail_idx=0; avail_idx<avail_rem; avail_idx++)
+        {
+          skc_subbuf_id_t     const avail_id = ids[avail_idx];
+          struct skc_subbuf * const avail    = suballocator->subbufs + avail_id;
+
+          assert(avail->inuse == 0);
+
+          if (avail->size == size_ru) // size matches exactly
+            {
+              suballocator->total += size_ru;
+
+              // return this id
+              *subbuf_id = avail_id;
+
+              SKC_SUBALLOCATOR_DEBUG_ALLOC(suballocator,avail_id,size_ru);
+
+              // mark the subbuffer as in use
+              avail->inuse += 1;
+
+              assert(avail->inuse == 1);
+
+              // update rem avail count
+              suballocator->rem.avail = --avail_rem;
+
+              // replace now inuse id with last avail id
+              if ((avail_rem > 0) && (avail_idx != avail_rem))
+                {
+                  skc_subbuf_id_t     const last_id = ids[avail_rem];
+                  struct skc_subbuf * const last    = suballocator->subbufs + last_id;
+
+                  ids[avail_idx] = last_id;   // move id
+                  last->idx      = avail_idx; // update idx[]
+                }
+
+              assert(suballocator->rem.avail > 0);
+              
+              // return origin
+              return avail->origin;
+            }
+          else if ((avail->size > size_ru) && (spare_rem > 0)) // requested is less than available so split it
+            {
+              suballocator->total += size_ru;
+
+              skc_uint                  spare_idx = suballocator->count - spare_rem;
+              skc_subbuf_id_t     const spare_id  = ids[spare_idx];
+              struct skc_subbuf * const spare     = suballocator->subbufs + spare_id;
+              
+              assert(spare->inuse == 0);
+
+              // simple -- we're popping the top-of-stack of spares
+              suballocator->rem.spare -= 1;
+
+              // return id
+              *subbuf_id = spare_id;
+
+              SKC_SUBALLOCATOR_DEBUG_ALLOC(suballocator,spare_id,size_ru);
+              
+              // get prev
+              struct skc_subbuf * const prev = avail->prev;
+
+              if (prev != NULL)
+                prev->next = spare;
+
+              // init spare
+              spare->prev    = prev;
+              spare->next    = avail;
+              spare->size    = size_ru;
+              spare->origin  = avail->origin;
+              spare->idx     = SKC_UINT_MAX; // defensive
+              spare->inuse  += 1;
+
+              // update curr
+              avail->prev    = spare;
+              avail->size   -= size_ru;
+              avail->origin += size_ru;
+
+              assert(suballocator->rem.avail > 0);
+
+              return spare->origin;
+            }
+        }
+
+      // uh oh... couldn't find enough memory
+      skc_scheduler_wait(scheduler);
+    }
+}
+
+//
+// FIXME -- simplify this with a merge-with-prev() primitive
+//
+
+void
+skc_suballocator_subbuf_free(struct skc_suballocator * const suballocator,
+                             skc_subbuf_id_t                 subbuf_id)
+{
+  // get subbuf for id
+  struct skc_subbuf * const subbuf = suballocator->subbufs + subbuf_id;
+
+  assert(subbuf->inuse == 1);
+
+  suballocator->total -= subbuf->size;
+
+  SKC_SUBALLOCATOR_DEBUG_FREE(suballocator,subbuf_id,subbuf->size);
+
+  //
+  // try to merge subbuf with left and maybe right and then dispose
+  //
+  struct skc_subbuf * prev;
+  struct skc_subbuf * next;
+
+  if (((prev = subbuf->prev) != NULL) && !prev->inuse)
+    {
+      next = subbuf->next;
+
+      if ((next != NULL) && !next->inuse)
+        {
+          subbuf->inuse -= 1;
+
+          assert(next->inuse == 0);
+
+          // increment size
+          prev->size += (subbuf->size + next->size);
+
+          struct skc_subbuf * const nextnext = next->next;
+
+          // update next link
+          prev->next = nextnext;
+
+          // update prev link
+          if (nextnext != NULL)
+            nextnext->prev = prev;
+
+          //
+          // both subbuf and next are now spare which means we need to
+          // move final available subbuffer into next's old position
+          // unless they're the same
+          //
+          skc_uint const last_idx = --suballocator->rem.avail;
+          skc_uint const next_idx = next->idx;
+
+          assert(suballocator->rem.avail > 0);
+
+          if (last_idx != next_idx)
+            {
+              skc_subbuf_id_t     const last_id = suballocator->ids[last_idx];
+              struct skc_subbuf * const last    = suballocator->subbufs + last_id;
+
+              suballocator->ids[next_idx]       = last_id;
+              last->idx                         = next_idx;
+            }
+
+          skc_subbuf_id_t  const next_id   = (skc_subbuf_id_t)(next - suballocator->subbufs);
+
+          skc_uint         const spare_rem = suballocator->rem.spare + 2;
+          skc_uint         const spare_idx = suballocator->count - spare_rem;
+
+          suballocator->rem.spare          = spare_rem;
+          suballocator->ids[spare_idx + 0] = subbuf_id;
+          suballocator->ids[spare_idx + 1] = next_id;
+        }
+      else
+        {
+          prev->size += subbuf->size;
+          prev->next  = next;
+
+          if (next != NULL)
+            next->prev = prev;
+
+          subbuf->inuse -= 1;
+
+          assert(subbuf->inuse == 0);
+          assert(suballocator->rem.avail > 0);
+
+          suballocator->ids[suballocator->count - ++suballocator->rem.spare] = subbuf_id;
+        }
+    }
+  //
+  // try to merge with right
+  //
+  else if (((next = subbuf->next) != NULL) && !next->inuse)
+    {
+      subbuf->inuse -= 1;
+
+      assert(subbuf->inuse == 0);
+      assert(suballocator->rem.avail > 0);
+
+      next->prev     = prev;
+      next->origin   = subbuf->origin;
+      next->size    += subbuf->size;
+
+      if (prev != NULL)
+        prev->next = next;
+
+      // subbuf is now spare
+      suballocator->ids[suballocator->count - ++suballocator->rem.spare] = subbuf_id;
+    }
+  else // couldn't merge with a neighbor
+    {
+      skc_uint avail_idx = suballocator->rem.avail++;
+
+      // subbuf is now available
+      subbuf->idx    = avail_idx;
+      subbuf->inuse -= 1;
+
+      assert(subbuf->inuse == 0);
+      assert(suballocator->rem.avail > 0);
+
+      suballocator->ids[avail_idx] = subbuf_id;
+    }
+}
+
+//
+//
+//
+
+#if 0
+
+//
+// At some point there might be a reason to sort the available
+// subbuffers into some useful order -- presumably to binary search
+// for the closest match or to chip away at the largest available
+// subbuffer
+//
+
+static
+void
+skc_suballocator_optimize(struct skc_suballocator * const suballocator)
+{
+  ;
+}
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/suballocator.h b/src/compute/skc/suballocator.h
new file mode 100644
index 0000000..7c3a6e8
--- /dev/null
+++ b/src/compute/skc/suballocator.h
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+// This is a suballocator for a large extent typically less than 4 GB.
+//
+// The SKC pipeline will use this for ephemeral host and device memory
+// allocations.  The lifetime of an allocation is typically
+// milliseconds or less and is associated with either a single kernel
+// or a sub-pipeline.
+//
+// Because of this, a relatively small number of allocations (10's)
+// will be outstanding at any time so the implementation can
+// reasonably be very simplistic and optimize for this case.
+//
+// Also, if either memory or subbuffer nodes aren't available the
+// suballocator will block and pump the pipeline's scheduler until it
+// can proceed.
+//
+// Note that this implementation is single-threaded and the
+// suballocator's state may have been altered after pumping the
+// scheduler.
+//
+
+#include "types.h"
+
+//
+// It's practical for the subbuf_id to be either 16 bits or maybe even
+// 8 bits if the number of outstanding subbufs is in the thousands (16
+// bits) or under 256 (8 bits).
+//
+
+typedef skc_ushort skc_subbuf_id_t;
+typedef skc_uint   skc_subbuf_size_t; // <4GB
+// typedef size_t  skc_subbuf_size_t; // >4GB 
+
+//
+//
+//
+
+struct skc_subbuf
+{
+  struct skc_subbuf * prev;
+  struct skc_subbuf * next;
+  
+  skc_subbuf_size_t   size;
+  skc_subbuf_size_t   origin;
+
+  skc_uint            idx; // ids[] index of subbuf in available state
+  skc_uint            inuse;
+};
+
+//
+//
+//
+
+struct skc_suballocator
+{
+  struct skc_subbuf  * subbufs;
+
+  skc_subbuf_id_t    * ids;   // [<-AVAIL-><-empty-><-SPARE->]
+
+  struct {
+    skc_uint           avail;
+    skc_uint           spare;
+  } rem; // inuse = count - (avail + spare)
+
+  skc_uint             align; // required pow2 alignment
+  skc_uint             count; // number of subbufs
+
+  skc_subbuf_size_t    size;  // size of memory extent
+  skc_subbuf_size_t    total;
+
+  char const *         name;
+};
+
+//
+//
+//
+
+void
+skc_suballocator_create(struct skc_runtime      * const runtime,
+                        struct skc_suballocator * const suballocator,
+                        char              const * const name,
+                        skc_uint                  const subbufs,
+                        size_t                    const align,
+                        size_t                    const size);
+
+void
+skc_suballocator_dispose(struct skc_runtime      * const runtime,
+                         struct skc_suballocator * const suballocator);
+
+//
+//
+//
+
+size_t
+skc_suballocator_subbuf_alloc(struct skc_suballocator * const suballocator,
+                              struct skc_scheduler    * const scheduler,
+                              size_t                    const size,
+                              skc_subbuf_id_t         * const subbuf_id,
+                              size_t                  * const subbuf_size);
+
+void
+skc_suballocator_subbuf_free(struct skc_suballocator * const suballocator,
+                             skc_subbuf_id_t                 subbuf_id);
+
+//
+//
+//
diff --git a/src/compute/skc/subblock.h b/src/compute/skc/subblock.h
new file mode 100644
index 0000000..7249e85
--- /dev/null
+++ b/src/compute/skc/subblock.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_ONCE_SUBBLOCK
+#define SKC_ONCE_SUBBLOCK
+
+//
+//
+//
+
+#include "block.h"
+
+//
+//
+//
+
+#if 0
+
+#define SKC_BLOCK_ID_BITS_BLOCK       (SKC_BLOCK_ID_BITS_ID - SKC_BLOCK_ID_BITS_SUBLOCK)
+#define SKC_BLOCK_ID_BITS_SUBLOCK     (SKC_DEVICE_BLOCK_WORDS_LOG2 - SKC_DEVICE_SUBBLOCK_WORDS_LOG2)
+
+#define SKC_BLOCK_ID_MASK_SUBBLOCK    SKC_BITS_TO_MASK_AT(SKC_BLOCK_ID_BITS_SUBLOCK,SKC_BLOCK_ID_BITS_TAG)
+
+#define SKC_BLOCK_ID_GET_BLOCK(b)     ((b) >> (SKC_BLOCK_ID_BITS_SUBLOCK + SKC_BLOCK_ID_BITS_TAG))
+#define SKC_BLOCK_ID_GET_SUBBLOCK(b)  (((b) & SKC_BLOCK_ID_MASK_SUBBLOCK) >> SKC_BLOCK_ID_BITS_TAG)
+
+#endif
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/surface.c b/src/compute/skc/surface.c
new file mode 100644
index 0000000..61bfac3
--- /dev/null
+++ b/src/compute/skc/surface.c
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include "surface.h"
+#include "composition.h"
+#include "styling.h"
+
+//
+//
+//
+
+skc_err
+skc_surface_retain(skc_surface_t surface)
+{
+  surface->ref_count += 1;
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_surface_release(skc_surface_t surface)
+{
+  surface->release(surface->impl);
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_surface_clear(skc_surface_t  surface, 
+                  float    const rgba[4], 
+                  uint32_t const rect[4],
+                  void         * fb)
+{
+  surface->clear(surface->impl,rgba,rect,fb);
+
+  return SKC_ERR_SUCCESS;
+}
+
+skc_err
+skc_surface_blit(skc_surface_t  surface, 
+                 uint32_t const rect[4], 
+                 int32_t  const txty[2])
+{
+  surface->blit(surface->impl,rect,txty);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
+
+skc_err
+skc_surface_render(skc_surface_t                 surface,
+                   uint32_t                const clip[4],
+                   skc_styling_t                 styling,
+                   skc_composition_t             composition,
+                   skc_surface_render_pfn_notify notify,
+                   void                        * data,
+                   void                        * fb)
+{
+  skc_err err;
+
+  // seal styling -- no dependencies so this will start immediately
+  if ((err = skc_styling_seal(styling)) != SKC_ERR_SUCCESS)
+    return err;
+
+  // seal composition -- force started
+  if ((err = skc_composition_seal(composition)) != SKC_ERR_SUCCESS)
+    return err;
+
+  //
+  // FIXME -- at some point, we will want non-overlapping clips to be
+  // rendered simultaneously. There is plenty of compute for nominal
+  // size render tasks so it might not make much a performance
+  // improvement.
+  //
+  surface->render(surface->impl,clip,styling,composition,notify,data,fb);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
diff --git a/src/compute/skc/surface.h b/src/compute/skc/surface.h
new file mode 100644
index 0000000..7f9dda8
--- /dev/null
+++ b/src/compute/skc/surface.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "skc.h"
+#include "assert_state.h"
+
+//
+// SURFACE
+//
+
+struct skc_surface
+{
+  struct skc_context      * context;
+  struct skc_surface_impl * impl;
+
+  skc_int                   ref_count;
+
+  //
+  // FIXME -- this list of pfn's isn't complete
+  //
+  void                   (* release)(struct skc_surface_impl * const impl);
+  void                   (* render )(struct skc_surface_impl * const impl,
+                                     uint32_t                  const clip[4],
+                                     skc_styling_t                   styling,
+                                     skc_composition_t               composition,
+                                     skc_surface_render_pfn_notify   notify,
+                                     void                          * data,
+                                     void                          * fb);
+  //
+  // FIXME -- these will probably be removed
+  //
+  void                   (* clear  )(struct skc_surface_impl * const impl,
+                                     float                     const rgba[4], 
+                                     skc_uint                  const rect[4],
+                                     void                    *       fb);
+
+  void                   (* blit   )(struct skc_surface_impl * const impl,
+                                     skc_uint                  const rect[4], 
+                                     skc_int                   const txty[2]);
+
+};
+
+//
+//
+//
diff --git a/src/compute/skc/surface_cl_12.h b/src/compute/skc/surface_cl_12.h
new file mode 100644
index 0000000..43ea542
--- /dev/null
+++ b/src/compute/skc/surface_cl_12.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_SURFACE_CL_12_ONCE
+#define SKC_SURFACE_CL_12_ONCE
+
+//
+// Unlike other object platform implementations, the surface object
+// implementation needs to access the opaque platform-specfic outputs
+// of the composition and styling objects.
+//
+//  Composition : { keys,   offsets, key_count, offset_count }
+//  Styling     : { layers, groups,  commands                }
+//
+// With the OpenCL platform we'll handle this by simply exposing the
+// argument value (void*) and its size (size_t).
+//
+// TODO: It might make sense in the future to support more complex
+//       rendering jobs that simultaneously involve multiple surfaces,
+//       compositions and stylings.
+//
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/surface_cl_12_buffer.c b/src/compute/skc/surface_cl_12_buffer.c
new file mode 100644
index 0000000..cc7cba5
--- /dev/null
+++ b/src/compute/skc/surface_cl_12_buffer.c
@@ -0,0 +1,453 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#include "common/cl/assert_cl.h"
+
+#include "extent_cl_12.h"
+#include "runtime_cl_12.h"
+#include "styling_cl_12.h"
+#include "composition_cl_12.h"
+
+#include "context.h"
+#include "surface.h"
+
+//
+//
+//
+
+#include <stdio.h>
+
+//
+// BUILD
+//
+
+struct skc_surface_impl
+{
+  struct skc_surface        * surface;
+  struct skc_runtime        * runtime;
+
+  // framebuffer
+  // struct skc_extent_pdrw      fb;
+  // struct skc_extent_phrN_pdwN fb;
+
+  // for now, a single in-order command queue
+  cl_command_queue            cq;
+
+  struct {
+    cl_kernel                 render;
+  } kernels;
+};
+
+//
+// we might want concurrent access to the same surface as long as
+// the clips don't overlap.
+//
+// this would require acquiring a cq on demand when it is determined
+// that the clipped render won't overlap
+//
+// { tile clip , cq } pair
+//
+// skc_uint4                clip;
+// cl_command_queue         cq
+//
+
+struct skc_surface_render
+{
+  skc_uint                      clip[4];
+
+  struct skc_surface_impl     * impl;
+  struct skc_styling          * styling;
+  struct skc_composition      * composition;
+
+  skc_surface_render_pfn_notify notify;
+  void                        * data;
+
+  cl_mem                        fb;
+
+  skc_grid_t                    grid;
+
+  skc_subbuf_id_t               id;
+};
+
+//
+//
+//
+
+static
+void
+skc_surface_pfn_clear(struct skc_surface_impl * const impl,
+                      float                     const rgba[4],
+                      skc_uint                  const rect[4],
+                      void                     *      fb)
+{
+  size_t const origin[3] = { rect[0], rect[1], 0 };
+  size_t const region[3] = { rect[2], rect[3], 1 };
+
+  cl(EnqueueFillImage(impl->cq,
+                      (cl_mem)fb,
+                      rgba,
+                      origin,
+                      region,
+                      0,NULL,NULL));
+}
+
+//
+//
+//
+
+static
+void
+skc_surface_pfn_blit(struct skc_surface_impl * const impl,
+                     skc_uint                  const rect[4],
+                     skc_int                   const txty[2])
+{
+  ;
+}
+
+//
+//
+//
+
+#if 0 // #ifndef NDEBUG
+#define SKC_SURFACE_DEBUG
+#endif
+
+#ifdef SKC_SURFACE_DEBUG
+
+#define SKC_SURFACE_WIDTH  4096
+#define SKC_SURFACE_HEIGHT 4096
+
+static
+void
+skc_surface_debug(struct skc_surface_impl * const impl)
+{
+  //
+  // MAP
+  //
+  cl_uchar4 * const rgba = skc_extent_phrN_pdwN_map(&impl->fb,
+                                                    impl->cq,
+                                                    NULL);
+  cl(Finish(impl->cq));
+
+  //
+  // WRITE
+  //
+  FILE* file;
+
+  errno_t ferr = fopen_s(&file,"surface.ppm","wb");
+
+  fprintf(file,"P6\n%u %u\n255\n",SKC_SURFACE_WIDTH,SKC_SURFACE_HEIGHT);
+
+  for (skc_uint ii=0; ii<SKC_SURFACE_HEIGHT*SKC_SURFACE_WIDTH; ii++)
+    fwrite(rgba + ii,sizeof(skc_uchar),3,file); // R,G,B
+
+  ferr = fclose(file);
+
+  //
+  // UNMAP
+  //
+  skc_extent_phrN_pdwN_unmap(&impl->fb,rgba,impl->cq,NULL);
+
+  cl(Flush(impl->cq));
+}
+
+#endif
+
+//
+//
+//
+
+void
+skc_surface_render_complete(struct skc_surface_render * const render)
+{
+#ifdef SKC_SURFACE_DEBUG
+  // write fb out
+  skc_surface_debug(render->impl);
+#endif
+
+  // notify
+  if (render->notify != NULL) {
+    render->notify(render->impl->surface,
+                   render->styling,
+                   render->composition,
+                   render->data);
+  }
+
+  // unlock and release the styling and composition
+  skc_styling_unlock_and_release(render->styling);
+  skc_composition_unlock_and_release(render->composition);
+
+  // grid is now complete
+  skc_grid_complete(render->grid);
+}
+
+static
+void
+skc_surface_render_cb(cl_event event, cl_int status, struct skc_surface_render * const render)
+{
+  SKC_CL_CB(status);
+
+  // as quickly as possible, enqueue next stage in pipeline to context command scheduler
+  SKC_SCHEDULER_SCHEDULE(render->impl->runtime->scheduler,
+                         skc_surface_render_complete,
+                         render);
+}
+
+//
+//
+//
+
+static
+void
+skc_surface_grid_pfn_execute(skc_grid_t const grid)
+{
+  struct skc_surface_render   * const render  = skc_grid_get_data(grid);
+  struct skc_surface_impl     * const impl    = render->impl;
+  struct skc_runtime          * const runtime = impl->runtime;
+
+  // get the composition args
+  struct skc_composition_impl * const ci      = render->composition->impl;
+  struct skc_place_atomics    * const atomics = ci->atomics.hr;
+
+  if (atomics->offsets > 0)
+    {
+      // acquire the rbo
+      cl(EnqueueAcquireGLObjects(impl->cq,1,&render->fb,0,NULL,NULL));
+
+      // get the styling args
+      struct skc_styling_impl * const si = render->styling->impl;
+
+      cl(SetKernelArg(impl->kernels.render,0,SKC_CL_ARG(si->layers.drN)));
+      cl(SetKernelArg(impl->kernels.render,1,SKC_CL_ARG(si->groups.drN)));
+      cl(SetKernelArg(impl->kernels.render,2,SKC_CL_ARG(si->extras.drN)));
+
+      cl(SetKernelArg(impl->kernels.render,3,SKC_CL_ARG(ci->keys.drw)));
+      cl(SetKernelArg(impl->kernels.render,4,SKC_CL_ARG(atomics->keys)));
+      cl(SetKernelArg(impl->kernels.render,5,SKC_CL_ARG(ci->offsets.drw)));
+      cl(SetKernelArg(impl->kernels.render,6,SKC_CL_ARG(atomics->offsets)));
+
+      // block pool
+      cl(SetKernelArg(impl->kernels.render,7,SKC_CL_ARG(impl->runtime->block_pool.blocks.drw)));
+
+      // surface
+      cl(SetKernelArg(impl->kernels.render,8,SKC_CL_ARG(render->fb)));
+
+#if 1
+      // tile clip
+      cl(SetKernelArg(impl->kernels.render,9,sizeof(skc_uint4),render->clip));
+#else
+      // surface pitch (height)
+      skc_uint const surface_pitch = SKC_SURFACE_HEIGHT;
+      cl(SetKernelArg(impl->kernels.render,9,SKC_CL_ARG(surface_pitch)));
+      // tile clip
+      cl(SetKernelArg(impl->kernels.render,10,sizeof(skc_uint4),render->clip));
+#endif
+
+      // launch render kernel
+      skc_device_enqueue_kernel(runtime->device,
+                                SKC_DEVICE_KERNEL_ID_RENDER,
+                                impl->cq,
+                                impl->kernels.render,
+                                atomics->offsets,
+                                0,NULL,NULL);
+
+
+      cl_event complete;
+
+      // give the rbo back
+      cl(EnqueueReleaseGLObjects(impl->cq,1,&render->fb,0,NULL,&complete));
+
+      // notify anyone listening...
+      cl(SetEventCallback(complete,CL_COMPLETE,skc_surface_render_cb,render));
+      cl(ReleaseEvent(complete));
+
+      // flush it
+      cl(Flush(impl->cq));
+    }
+  else
+    {
+      skc_surface_render_complete(render);
+    }
+}
+
+//
+//
+//
+
+static
+void
+skc_surface_pfn_release(struct skc_surface_impl * const impl)
+{
+  if (--impl->surface->ref_count != 0)
+    return;
+
+  //
+  // otherwise, release all resources
+  //
+  
+  // drain the command queue
+  cl(Finish(impl->cq));
+
+  struct skc_runtime * const runtime = impl->runtime;  
+
+  // release the kernel
+  cl(ReleaseKernel(impl->kernels.render));
+
+  // free surface host
+  skc_runtime_host_perm_free(runtime,impl->surface);
+
+  // release the cq
+  skc_runtime_release_cq_in_order(runtime,impl->cq);
+
+  // release fb
+  // skc_extent_phrN_pdwN_free(runtime,&impl->fb);
+  
+  // free surface impl
+  skc_runtime_host_perm_free(runtime,impl);
+}
+
+//
+//
+//
+
+static
+void
+skc_surface_grid_pfn_dispose(skc_grid_t const grid)
+{
+  struct skc_surface_render * const render  = skc_grid_get_data(grid);
+  struct skc_surface_impl   * const impl    = render->impl;
+  struct skc_runtime        * const runtime = impl->runtime;
+
+  // free the render object
+  skc_runtime_host_temp_free(runtime,render,render->id);
+
+  // release the surface
+  skc_surface_pfn_release(impl);
+}
+
+//
+//
+//
+
+static
+void
+skc_surface_pfn_render(struct skc_surface_impl * const impl,
+                       uint32_t                  const clip[4],
+                       skc_styling_t                   styling,
+                       skc_composition_t               composition,
+                       skc_surface_render_pfn_notify   notify,
+                       void                          * data,
+                       void                          * fb)
+{
+  // retain surface
+  skc_surface_retain(impl->surface);
+
+  //
+  // FIXME -- we used to seal the styling and composition objects if
+  // they weren't already.  Either test that they're sealed or seal
+  // them here.
+  //
+
+  // retain and lock the styling and composition 
+  skc_styling_retain_and_lock(styling);
+  skc_composition_retain_and_lock(composition);
+
+  //
+  // allocate a render instance
+  //
+  skc_subbuf_id_t                   id;
+  struct skc_surface_render * const render = skc_runtime_host_temp_alloc(impl->runtime,
+                                                                         SKC_MEM_FLAGS_READ_WRITE,
+                                                                         sizeof(*render),&id,NULL);
+  render->id          = id;
+
+  render->clip[0]     = clip[0];
+  render->clip[1]     = clip[1];
+  render->clip[2]     = clip[2];
+  render->clip[3]     = clip[3];
+
+  render->impl        = impl;
+  render->styling     = styling;
+  render->composition = composition;
+
+  render->notify      = notify;
+  render->data        = data;
+
+  render->fb          = fb;
+
+  render->grid        = SKC_GRID_DEPS_ATTACH(impl->runtime->deps,
+                                             NULL, // invalidation not necessary
+                                             render,
+                                             NULL, // no waiting
+                                             skc_surface_grid_pfn_execute,
+                                             skc_surface_grid_pfn_dispose);
+
+  // declare happens-after relationships
+  skc_grid_happens_after_grid(render->grid,styling->impl->grid);
+  skc_grid_happens_after_grid(render->grid,composition->impl->grids.sort);
+
+  // wait for styling and composition
+  skc_grid_start(render->grid);
+}
+
+//
+//
+//
+
+skc_err
+skc_surface_cl_12_create(struct skc_context   * const context,
+                         struct skc_surface * * const surface)
+{
+  struct skc_runtime * const runtime = context->runtime;
+
+  // allocate surface
+  (*surface) = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,sizeof(**surface));
+
+  // allocate impl
+  struct skc_surface_impl * const impl = skc_runtime_host_perm_alloc(runtime,SKC_MEM_FLAGS_READ_WRITE,sizeof(*impl));
+
+  // initialize surface
+  // SKC_ASSERT_STATE_INIT((*impl),SKC_SURFACE_STATE_READY);
+
+  (*surface)->context    = context;
+  (*surface)->impl       = impl;
+  (*surface)->ref_count  = 1;
+
+  (*surface)->release    = skc_surface_pfn_release;
+  (*surface)->clear      = skc_surface_pfn_clear;
+  (*surface)->blit       = skc_surface_pfn_blit;
+  (*surface)->render     = skc_surface_pfn_render;
+
+  // intialize impl
+  impl->surface          = *surface;
+  impl->runtime          = runtime;
+
+#if 0
+  // FIXME -- 4K x 4K -- temporarily fixed size
+  size_t const fb_size = sizeof(skc_uchar4) * SKC_SURFACE_WIDTH * SKC_SURFACE_HEIGHT;
+
+  // create framebuffer
+  skc_extent_phrN_pdwN_alloc(runtime,&impl->fb,fb_size);
+#endif
+
+  // acquire a command queue
+  impl->cq               = skc_runtime_acquire_cq_in_order(runtime);
+
+  // acquire kernel
+  impl->kernels.render   = skc_device_acquire_kernel(runtime->device,SKC_DEVICE_KERNEL_ID_RENDER);
+
+  return SKC_ERR_SUCCESS;
+}
+
+//
+//
+//
diff --git a/src/compute/skc/tile.h b/src/compute/skc/tile.h
new file mode 100644
index 0000000..d6d3c7f
--- /dev/null
+++ b/src/compute/skc/tile.h
@@ -0,0 +1,496 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_ONCE_TILE
+#define SKC_ONCE_TILE
+
+//
+//
+//
+
+#include "macros.h"
+
+//
+// Hard requirements:
+//
+//   - A TTXB "block pool" extent that is at least 1GB.
+//
+//   - A virtual surface of at least 8K x 8K
+//
+//   - A physical surface of __don't really care__ because it's
+//     advantageous to tile the physical surface since it's likely
+//     to shrink the post-place TTCK sorting step.
+//
+//
+//      EXTENT                 TTXB BITS
+//     SIZE (MB) +------------------------------------+
+//               |  22    23    24    25    26    27  |
+//          +----+------------------------------------+
+//          |  8 |  128   256   512  1024  2048  4096 |
+//     TTXB | 16 |  256   512  1024  2048  4096  8192 |
+//    WORDS | 32 |  512  1024  2048  4096  8192 16384 |
+//          | 64 | 1024  2048  4096  8192 16384 32768 |
+//          +----+------------------------------------+
+//
+//
+//         SURF                        X/Y BITS
+//         TILE  +------------------------------------------------------+
+//               |   5     6     7     8     9    10    11    12    13  |
+//          +----+------------------------------------------------------+
+//          |  3 |  256   512  1024  2048  4096  8192 16384 32768 65536 |
+//     TILE |  4 |  512  1024  2048  4096  8192 16384 32768 65536  128K |
+//     SIDE |  5 | 1024  2048  4096  8192 16384 32768 65536  128K  256K |
+//     BITS |  6 | 2048  4096  8192 16384 32768 65536  128K  256K  512K |
+//          |  7 | 4096  8192 16384 32768 65536  128K  256K  512K 1024K |
+//          +----+------------------------------------------------------+
+//      TILES^2  | 1024  4096 16384 65536  256K    1M    4M   16M   64M |
+//               +------------------------------------------------------+
+//
+// The following values should be pretty future-proof across all GPUs:
+//
+//   - The minimum addressable subblock size is 16 words (64 bytes) to
+//     ensure there is enough space for a path or raster header and
+//     its payload.
+//
+//   - Blocks are power-of-2 multiples of subblocks. Larger blocks can
+//     reduce allocation activity (fewer atomic adds).
+//
+//   - 27 bits of TTXB_ID space implies a max of 4GB-32GB of
+//     rasterized paths depending on the size of the TTXB block.
+//     This could enable interesting use cases.
+//
+//   - A virtual rasterization surface that's from +/-16K to +/-128K
+//     depending on the size of the TTXB block.
+//
+//   - Keys that (optionally) only require a 32-bit high word
+//     comparison.
+//
+//   - Support for a minimum of 256K layers. This can be practically
+//     raised to 1m or 2m layers.
+//
+
+//
+// TTRK (64-bit COMPARE)
+//
+//  0                                         63
+//  | TTSB ID |   X  |   Y  | RASTER COHORT ID |
+//  +---------+------+------+------------------+
+//  |    27   |  12  |  12  |        13        |
+//
+//
+// TTRK (32-BIT COMPARE)
+//
+//  0                                               63
+//  | TTSB ID | N/A |   X  |   Y  | RASTER COHORT ID |
+//  +---------+-----+------+------+------------------+
+//  |    27   |  5  |  12  |  12  |        8         |
+//
+//
+// TTSK v2:
+//
+//  0                                     63
+//  | TTSB ID | IS_PREFIX |  N/A |  X |  Y |
+//  +---------+-----------+------+----+----+
+//  |    27   |   1 (=0)  |  12  | 12 | 12 |
+//
+//
+// TTPK v2:
+//
+//  0                                       63
+//  | TTPB ID | IS_PREFIX | SPAN |  X  |  Y  |
+//  +---------+-----------+------+-----+-----+
+//  |    27   |   1 (=1)  |  12  | 12  | 12  |
+//
+//
+// TTCK (32-BIT COMPARE) v1:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          30          |    1   |    1   |   18  |  7  |  7  |
+//
+//
+// TTCK (32-BIT COMPARE) v2:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          30          |    1   |    1   |   15  |  9  |  8  |
+//
+//
+// TTCK (64-BIT COMPARE) -- achieves 4K x 4K with an 8x16 tile:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          27          |    1   |    1   |   18  |  9  |  8  |
+//
+
+//
+//
+//
+
+#define SKC_SUBPIXEL_RESL_X_LOG2  5
+#define SKC_SUBPIXEL_RESL_Y_LOG2  5
+
+//
+// FIXME -- COMMON -- HOIST ELSEWHERE
+//
+
+#define SKC_TILE_WIDTH            (1 << SKC_TILE_WIDTH_LOG2)
+#define SKC_TILE_HEIGHT           (1 << SKC_TILE_HEIGHT_LOG2)
+
+#define SKC_SUBPIXEL_RESL_X       (1 << SKC_SUBPIXEL_RESL_X_LOG2)
+#define SKC_SUBPIXEL_RESL_Y       (1 << SKC_SUBPIXEL_RESL_Y_LOG2)
+
+//
+// PLATFORM SURFACE TILE SIZE
+//
+
+#define SKC_TILE_WIDTH_MASK       SKC_BITS_TO_MASK(SKC_TILE_WIDTH_LOG2)
+#define SKC_TILE_HEIGHT_MASK      SKC_BITS_TO_MASK(SKC_TILE_HEIGHT_LOG2)
+
+//
+// TILE SUBPIXEL RESOLUTION
+//
+
+#define SKC_SUBPIXEL_RESL_X       (1 << SKC_SUBPIXEL_RESL_X_LOG2)
+#define SKC_SUBPIXEL_RESL_Y       (1 << SKC_SUBPIXEL_RESL_Y_LOG2)
+
+#define SKC_SUBPIXEL_MASK_X       SKC_BITS_TO_MASK(SKC_SUBPIXEL_RESL_X_LOG2)
+#define SKC_SUBPIXEL_MASK_Y       SKC_BITS_TO_MASK(SKC_SUBPIXEL_RESL_Y_LOG2)
+
+#define SKC_SUBPIXEL_RESL_X_F32   ((float)(SKC_SUBPIXEL_RESL_X))
+#define SKC_SUBPIXEL_RESL_Y_F32   ((float)(SKC_SUBPIXEL_RESL_Y))
+
+#define SKC_SUBPIXEL_X_SCALE_UP   SKC_SUBPIXEL_RESL_X_F32
+#define SKC_SUBPIXEL_Y_SCALE_UP   SKC_SUBPIXEL_RESL_Y_F32
+
+#define SKC_SUBPIXEL_X_SCALE_DOWN (1.0f / SKC_SUBPIXEL_RESL_X_F32)
+#define SKC_SUBPIXEL_Y_SCALE_DOWN (1.0f / SKC_SUBPIXEL_RESL_Y_F32)
+
+//
+// SUBTILE RESOLUTION
+//
+
+#define SKC_SUBTILE_RESL_X_LOG2   (SKC_TILE_WIDTH_LOG2  + SKC_SUBPIXEL_RESL_X_LOG2)
+#define SKC_SUBTILE_RESL_Y_LOG2   (SKC_TILE_HEIGHT_LOG2 + SKC_SUBPIXEL_RESL_Y_LOG2)
+
+#define SKC_SUBTILE_RESL_X        (1 << SKC_SUBTILE_RESL_X_LOG2)
+#define SKC_SUBTILE_RESL_Y        (1 << SKC_SUBTILE_RESL_Y_LOG2)
+
+#define SKC_SUBTILE_MASK_X        SKC_BITS_TO_MASK(SKC_SUBTILE_RESL_X_LOG2)
+#define SKC_SUBTILE_MASK_Y        SKC_BITS_TO_MASK(SKC_SUBTILE_RESL_Y_LOG2)
+
+#define SKC_SUBTILE_RESL_X_F32    ((float)(SKC_SUBTILE_RESL_X))
+#define SKC_SUBTILE_RESL_Y_F32    ((float)(SKC_SUBTILE_RESL_Y))
+
+#define SKC_SUBTILE_X_SCALE_DOWN  (1.0f / SKC_SUBTILE_RESL_X_F32)
+#define SKC_SUBTILE_Y_SCALE_DOWN  (1.0f / SKC_SUBTILE_RESL_Y_F32)
+
+//
+//
+//
+
+#define SKC_TILE_X_OFFSET_U32     (1 << (SKC_TTSK_BITS_X-1))
+#define SKC_TILE_X_SPAN_U32       (1 << (SKC_TTSK_BITS_X))   // exclusive
+
+#define SKC_TILE_Y_OFFSET_U32     (1 << (SKC_TTSK_BITS_Y-1))
+#define SKC_TILE_Y_SPAN_U32       (1 << (SKC_TTSK_BITS_Y))   // exclusive
+
+#define SKC_TILE_X_OFFSET_F32     0 // ((float)SKC_TILE_X_OFFSET_U32)
+#define SKC_TILE_X_SPAN_F32       ((float)SKC_TILE_X_SPAN_U32)
+
+#define SKC_TILE_Y_OFFSET_F32     0 // ((float)SKC_TILE_Y_OFFSET_U32)
+#define SKC_TILE_Y_SPAN_F32       ((float)SKC_TILE_Y_SPAN_U32)
+
+//
+// TILE TRACE SUBPIXEL, PREFIX & COMPOSITION KEYS
+//
+// These keys are are purposefully 64-bits so they can be sorted with
+// Hotsort's 32:32 or 64-bit implementation.
+//
+// Tiles are 32x32 on CUDA but can be made rectangular or smaller to
+// fit other architectures.
+//
+//   TW   : tile width
+//   TH   : tile height
+//
+//   TTS  : tile trace subpixel
+//   TTSB : tile trace subpixel block
+//   TTRK : tile trace subpixel key while in raster cohort
+//   TTSK : tile trace subpixel key
+//
+//   TTP  : tile trace prefix
+//   TTPB : tile trace prefix block
+//   TTPK : tile trace prefix key
+//
+//   TTCK : tile trace composition key
+//
+
+//
+// TILE TRACE SUBPIXEL
+//
+// The subpixels are encoded with either absolute tile coordinates
+// (32-bits) or packed in delta-encoded form form.
+//
+// For 32-bit subpixel packing of a 32x32 or smaller tile:
+//
+// A tile X is encoded as:
+//
+//   TX : 10 : unsigned min(x0,x1) tile subpixel coordinate.
+//
+//   SX :  6 : unsigned subpixel span from min to max x with range
+//             [0,32]. The original direction is not captured. Would
+//             be nice to capture dx but not necessary right now but
+//             could be in the future. <--- SPARE VALUES AVAILABLE
+//
+// A tile Y is encoded as:
+//
+//   TY : 10 : unsigned min(y0,y1) tile subpixel coordinate.
+//
+//   DY :  6 : signed subpixel delta y1-y0. The range of delta is
+//             [-32,32] but horizontal lines are not encoded so [1,32]
+//             is mapped to [0,31]. The resulting range [-32,31] fits
+//             in 6 bits.
+//
+// TTS:
+//
+//  0                        31
+//  |  TX |  SX  |  TY |  DY  |
+//  +-----+------+-----+------+
+//  |  10 |   6  |  10 |   6  |
+//
+
+#define SKC_TTS_BITS_TX           10
+#define SKC_TTS_BITS_SX           6
+#define SKC_TTS_BITS_TY           10
+#define SKC_TTS_BITS_SY           6
+
+//
+//
+//
+
+#define SKC_TTS_INVALID           ( SKC_UINT_MAX ) // relies on limited range of dx
+
+//
+//
+//
+
+#define SKC_TTS_OFFSET_SX         (SKC_TTS_BITS_TX)
+#define SKC_TTS_OFFSET_TY         (SKC_TTS_BITS_TX + SKC_TTS_BITS_SX)
+#define SKC_TTS_OFFSET_DY         (SKC_TTS_BITS_TX + SKC_TTS_BITS_SX + SKC_TTS_BITS_TY)
+
+#define SKC_TTS_MASK_TX           SKC_BITS_TO_MASK(SKC_TTS_BITS_TX)
+#define SKC_TTS_MASK_SX           SKC_BITS_TO_MASK_AT(SKC_TTS_BITS_SX,SKC_TTS_OFFSET_SX)
+#define SKC_TTS_MASK_TY           SKC_BITS_TO_MASK_AT(SKC_TTS_BITS_TY,SKC_TTS_OFFSET_TY)
+
+#define SKC_TTS_MASK_TX_PIXEL     SKC_BITS_TO_MASK_AT(SKC_TTS_BITS_TX-SKC_SUBPIXEL_RESL_X_LOG2, \
+                                                      SKC_SUBPIXEL_RESL_X_LOG2)
+#define SKC_TTS_MASK_TY_PIXEL     SKC_BITS_TO_MASK_AT(SKC_TTS_BITS_TY-SKC_SUBPIXEL_RESL_Y_LOG2, \
+                                                      SKC_TTS_OFFSET_TY+SKC_SUBPIXEL_RESL_Y_LOG2)
+
+//
+// TTRK (64-BIT COMPARE)
+//
+//    0                                  63
+//    | TTSB ID |   X  |   Y  | COHORT ID |
+//    +---------+------+------+-----------+
+//    |    27   |  12  |  12  |     13    |
+//
+//
+// TTRK (32-BIT COMPARE)
+//
+//    0                                        63
+//    | TTSB ID | N/A |   X  |   Y  | COHORT ID |
+//    +---------+-----+------+------+-----------+
+//    |    27   |  5  |  12  |  12  |     8     |
+//
+
+//
+// TTRK is sortable intermediate key format for TTSK
+//
+// We're going to use the 32-bit comparison version for now
+//
+
+//
+// TTSK v2:
+//
+//    0                                  63
+//    | TTSB ID | PREFIX |  N/A |  X |  Y |
+//    +---------+--------+------+----+----+
+//    |    27   | 1 (=0) |  12  | 12 | 12 |
+//
+//
+// TTPK v2:
+//
+//    0                                    63
+//    | TTPB ID | PREFIX | SPAN |  X  |  Y  |
+//    +---------+--------+------+-----+-----+
+//    |    27   | 1 (=1) |  12  | 12  | 12  |
+//
+
+#define SKC_TTXK_LO_BITS_ID          27
+#define SKC_TTXK_LO_BITS_PREFIX      1
+#define SKC_TTXK_HI_BITS_Y           12
+#define SKC_TTXK_HI_BITS_X           12
+#define SKC_TTXK_BITS_SPAN           12
+#define SKC_TTXK_HI_BITS_YX          (SKC_TTXK_HI_BITS_Y + SKC_TTXK_HI_BITS_X)
+
+#define SKC_TTRK_HI_MASK_X           SKC_BITS_TO_MASK(SKC_TTXK_HI_BITS_X)
+#define SKC_TTRK_HI_MASK_YX          SKC_BITS_TO_MASK(SKC_TTXK_HI_BITS_YX)
+
+#define SKC_TTRK_HI_BITS_COHORT      8
+#define SKC_TTRK_LO_BITS_NA          (32 - SKC_TTXK_LO_BITS_ID)
+#define SKC_TTRK_HI_BITS_COHORT_Y    (SKC_TTRK_HI_BITS_COHORT + SKC_TTXK_HI_BITS_Y)
+
+#define SKC_TTRK_HI_OFFSET_COHORT    (32 - SKC_TTRK_HI_BITS_COHORT)
+#define SKC_TTRK_HI_MASK_COHORT      SKC_BITS_TO_MASK_AT(SKC_TTRK_HI_BITS_COHORT,SKC_TTRK_HI_OFFSET_COHORT)
+
+#define SKC_TTRK_HI_BITS_COHORT_YX   (SKC_TTRK_HI_BITS_COHORT + SKC_TTXK_HI_BITS_Y + SKC_TTXK_HI_BITS_X)
+
+#define SKC_TTXK_LO_BITS_ID_PREFIX   (SKC_TTXK_LO_BITS_ID + SKC_TTXK_LO_BITS_PREFIX)
+
+#define SKC_TTXK_LO_OFFSET_PREFIX    SKC_TTXK_LO_BITS_ID
+#define SKC_TTXK_LO_OFFSET_SPAN      SKC_TTXK_LO_BITS_ID_PREFIX
+
+#define SKC_TTXK_LO_BITS_SPAN        (32 - SKC_TTXK_LO_BITS_ID_PREFIX)
+#define SKC_TTXK_HI_BITS_SPAN        (SKC_TTXK_BITS_SPAN - SKC_TTXK_LO_BITS_SPAN)
+
+#define SKC_TTXK_LO_OFFSET_PREFIX    SKC_TTXK_LO_BITS_ID
+
+#define SKC_TTXK_LO_MASK_ID          SKC_BITS_TO_MASK(SKC_TTXK_LO_BITS_ID)
+#define SKC_TTXK_LO_MASK_PREFIX      SKC_BITS_TO_MASK_AT(SKC_TTXK_LO_BITS_PREFIX,SKC_TTXK_LO_OFFSET_PREFIX)
+#define SKC_TTXK_LO_MASK_ID_PREFIX   SKC_BITS_TO_MASK(SKC_TTXK_LO_BITS_ID_PREFIX)
+
+#define SKC_TTXK_HI_OFFSET_Y         (32 - SKC_TTXK_HI_BITS_Y)
+#define SKC_TTXK_HI_OFFSET_X         (SKC_TTXK_HI_OFFSET_Y - SKC_TTXK_HI_BITS_X)
+
+#define SKC_TTXK_HI_ONE_X            (1u << SKC_TTXK_HI_OFFSET_X)
+
+#define SKC_TTXK_HI_MASK_YX          SKC_BITS_TO_MASK_AT(SKC_TTXK_HI_BITS_YX,SKC_TTXK_HI_OFFSET_X)
+#define SKC_TTXK_HI_MASK_Y           SKC_BITS_TO_MASK_AT(SKC_TTXK_HI_BITS_Y ,SKC_TTXK_HI_OFFSET_Y)
+
+#define SKC_TTPK_LO_SHL_YX_SPAN      (SKC_TTXK_LO_OFFSET_SPAN - SKC_TTXK_HI_OFFSET_X)
+#define SKC_TTPK_HI_SHR_YX_SPAN      (SKC_TTXK_HI_OFFSET_X + SKC_TTXK_LO_BITS_SPAN)
+
+//
+// TTCK (32-BIT COMPARE) v1 -- NOT USED:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          30          |    1   |    1   |   18  |  7  |  7  |
+//
+//
+// TTCK (32-BIT COMPARE) v2 -- NOT USED:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          30          |    1   |    1   |   15  |  9  |  8  |
+//
+//
+// TTCK (64-BIT COMPARE) -- achieves 4K x 4K with an 8x16 tile:
+//
+//  0                                                           63
+//  | PAYLOAD/TTSB/TTPB ID | PREFIX | ESCAPE | LAYER |  X  |  Y  |
+//  +----------------------+--------+--------+-------+-----+-----+
+//  |          27          |    1   |    1   |   18  |  9  |  8  |
+//
+
+#define SKC_TTCK_BITS_LAYER               18
+
+#define SKC_TTCK_LO_BITS_ID               SKC_TTXK_LO_BITS_ID
+#define SKC_TTCK_LO_OFFSET_ID             0
+
+#define SKC_TTCK_LO_MASK_ID               SKC_BITS_TO_MASK(SKC_TTCK_LO_BITS_ID)
+
+#define SKC_TTCK_LO_BITS_PREFIX           1
+#define SKC_TTCK_LO_OFFSET_PREFIX         SKC_TTCK_LO_BITS_ID
+#define SKC_TTCK_LO_MASK_PREFIX           SKC_BITS_TO_MASK_AT(SKC_TTCK_LO_BITS_PREFIX,SKC_TTCK_LO_OFFSET_PREFIX)
+  
+#define SKC_TTCK_LO_BITS_ID_PREFIX        (SKC_TTCK_LO_BITS_ID + SKC_TTCK_LO_BITS_PREFIX)
+#define SKC_TTCK_LO_MASK_ID_PREFIX        SKC_BITS_TO_MASK(SKC_TTCK_LO_BITS_ID_PREFIX)
+
+#define SKC_TTCK_LO_BITS_ESCAPE           1
+#define SKC_TTCK_LO_OFFSET_ESCAPE         SKC_TTCK_LO_BITS_ID_PREFIX
+#define SKC_TTCK_LO_MASK_ESCAPE           SKC_BITS_TO_MASK_AT(SKC_TTCK_LO_BITS_ESCAPE,SKC_TTCK_LO_OFFSET_ESCAPE)
+
+#define SKC_TTCK_LO_BITS_ID_PREFIX_ESCAPE (SKC_TTCK_LO_BITS_ID_PREFIX + SKC_TTCK_LO_BITS_ESCAPE)
+
+#define SKC_TTCK_HI_OFFSET_Y              24
+#define SKC_TTCK_HI_OFFSET_X              15
+
+#define SKC_TTCK_HI_BITS_Y                8
+#define SKC_TTCK_HI_BITS_X                9
+#define SKC_TTCK_HI_BITS_YX               (SKC_TTCK_HI_BITS_X + SKC_TTCK_HI_BITS_Y)
+#define SKC_TTCK_HI_MASK_YX               SKC_BITS_TO_MASK_AT(SKC_TTCK_HI_BITS_YX,SKC_TTCK_HI_OFFSET_X)
+
+#define SKC_TTCK_HI_BITS_LAYER            (32 - SKC_TTCK_HI_BITS_YX)
+#define SKC_TTCK_HI_MASK_LAYER            SKC_BITS_TO_MASK(SKC_TTCK_HI_BITS_LAYER)
+#define SKC_TTCK_HI_SHR_LAYER             (SKC_TTCK_HI_BITS_Y + SKC_TTCK_HI_BITS_X + SKC_TTCK_BITS_LAYER - 32)
+
+#define SKC_TTCK_LO_BITS_LAYER            (SKC_TTCK_BITS_LAYER - SKC_TTCK_HI_BITS_LAYER)
+
+//
+// TILE COORD
+//
+//  0                32
+//  | N/A |  X  |  Y  |
+//  +-----+-----+-----+
+//  |  8  | 12  | 12  |
+//
+//
+// This simplifies the clip test in the place kernel.
+//
+
+union skc_tile_coord
+{
+  skc_uint   u32;
+
+  struct {
+#if defined(__OPENCL_C_VERSION__)
+    skc_uint xy;
+#else
+    skc_uint na0 : 32 - SKC_TTXK_HI_BITS_YX;  // 8
+    skc_uint x   : SKC_TTXK_HI_BITS_X;        // 12
+    skc_uint y   : SKC_TTXK_HI_BITS_Y;        // 12
+#endif
+  };
+};
+
+SKC_STATIC_ASSERT(sizeof(union skc_tile_coord) == sizeof(skc_uint));
+
+//
+//
+//
+
+union skc_tile_clip
+{
+  skc_uint               u32a2[2];
+
+  skc_uint2              u32v2;
+
+  struct {
+    union skc_tile_coord xy0; // lower left
+    union skc_tile_coord xy1; // upper right
+  };
+};
+
+SKC_STATIC_ASSERT(sizeof(union skc_tile_clip) == sizeof(skc_uint2));
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
diff --git a/src/compute/skc/types.h b/src/compute/skc/types.h
new file mode 100644
index 0000000..6d6d19a
--- /dev/null
+++ b/src/compute/skc/types.h
@@ -0,0 +1,267 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_ONCE_TYPES
+#define SKC_ONCE_TYPES
+
+//
+//
+//
+
+#if !defined(__OPENCL_C_VERSION__)
+
+//
+// What is going on here is that OpenCL defines both host and device
+// scalar and vector types.
+//
+// Our actual device kernels should try to use native compiler types
+// for anything that's private to the kernel and the skc_* variant for
+// types and composites that get pulled into host code.
+//
+// I'm not excited about redefining all the basic types but this is a
+// reasonable solution that allows the code to bridge the host (C/C++)
+// and device (OpenCL) environments as well as provide vector types.
+//
+
+#ifdef __APPLE__
+#include "OpenCL/opencl.h"
+#else
+#include "CL/opencl.h"
+#endif
+
+//
+//
+//
+
+#include <stdbool.h>
+
+//
+//
+//
+
+#define SKC_TYPE_HELPER(t)  skc_##t
+#define SKC_TYPE(t)         SKC_TYPE_HELPER(t)
+
+typedef cl_bool     skc_bool;
+
+typedef cl_char     skc_char;
+typedef cl_char2    skc_char2;
+typedef cl_char3    skc_char3;
+typedef cl_char4    skc_char4;
+typedef cl_char8    skc_char8;
+typedef cl_char16   skc_char16;
+
+typedef cl_uchar    skc_uchar;
+typedef cl_uchar2   skc_uchar2;
+typedef cl_uchar3   skc_uchar3;
+typedef cl_uchar4   skc_uchar4;
+typedef cl_uchar8   skc_uchar8;
+typedef cl_uchar16  skc_uchar16;
+
+typedef cl_short    skc_short;
+typedef cl_short2   skc_short2;
+typedef cl_short3   skc_short3;
+typedef cl_short4   skc_short4;
+typedef cl_short8   skc_short8;
+typedef cl_short16  skc_short16;
+
+typedef cl_ushort   skc_ushort;
+typedef cl_ushort2  skc_ushort2;
+typedef cl_ushort3  skc_ushort3;
+typedef cl_ushort4  skc_ushort4;
+typedef cl_ushort8  skc_ushort8;
+typedef cl_ushort16 skc_ushort16;
+
+typedef cl_int      skc_int;
+typedef cl_int2     skc_int2;
+typedef cl_int3     skc_int3;
+typedef cl_int4     skc_int4;
+typedef cl_int8     skc_int8;
+typedef cl_int16    skc_int16;
+
+typedef cl_uint     skc_uint;
+typedef cl_uint2    skc_uint2;
+typedef cl_uint3    skc_uint3;
+typedef cl_uint4    skc_uint4;
+typedef cl_uint8    skc_uint8;
+typedef cl_uint16   skc_uint16;
+
+typedef cl_ulong    skc_ulong;
+typedef cl_ulong2   skc_ulong2;
+typedef cl_ulong3   skc_ulong3;
+typedef cl_ulong4   skc_ulong4;
+typedef cl_ulong8   skc_ulong8;
+typedef cl_ulong16  skc_ulong16;
+
+typedef cl_long     skc_long;
+typedef cl_long2    skc_long2;
+typedef cl_long3    skc_long3;
+typedef cl_long4    skc_long4;
+typedef cl_long8    skc_long8;
+typedef cl_long16   skc_long16;
+
+typedef cl_float    skc_float;
+typedef cl_float2   skc_float2;
+typedef cl_float3   skc_float3;
+typedef cl_float4   skc_float4;
+typedef cl_float8   skc_float8;
+typedef cl_float16  skc_float16;
+
+typedef cl_half     skc_half;
+
+#if defined( __CL_HALF2__)
+typedef cl_half2    skc_half2;
+#endif
+#if defined( __CL_HALF4__)
+typedef cl_half4    skc_half4;
+#endif
+#if defined( __CL_HALF8__)
+typedef cl_half8    skc_half8;
+#endif
+#if defined( __CL_HALF16__)
+typedef cl_half16   skc_half16;
+#endif
+
+//
+//
+//
+
+#else
+
+//
+//
+//
+
+#define SKC_TYPE(t) t
+
+typedef bool        skc_bool;
+
+typedef char        skc_char;
+typedef char2       skc_char2;
+typedef char3       skc_char3;
+typedef char4       skc_char4;
+typedef char8       skc_char8;
+typedef char16      skc_char16;
+
+typedef uchar       skc_uchar;
+typedef uchar2      skc_uchar2;
+typedef uchar3      skc_uchar3;
+typedef uchar4      skc_uchar4;
+typedef uchar8      skc_uchar8;
+typedef uchar16     skc_uchar16;
+
+typedef short       skc_short;
+typedef short2      skc_short2;
+typedef short3      skc_short3;
+typedef short4      skc_short4;
+typedef short8      skc_short8;
+typedef short16     skc_short16;
+
+typedef ushort      skc_ushort;
+typedef ushort2     skc_ushort2;
+typedef ushort3     skc_ushort3;
+typedef ushort4     skc_ushort4;
+typedef ushort8     skc_ushort8;
+typedef ushort16    skc_ushort16;
+
+typedef int         skc_int;
+typedef int2        skc_int2;
+typedef int3        skc_int3;
+typedef int4        skc_int4;
+typedef int8        skc_int8;
+typedef int16       skc_int16;
+
+typedef uint        skc_uint;
+typedef uint2       skc_uint2;
+typedef uint3       skc_uint3;
+typedef uint4       skc_uint4;
+typedef uint8       skc_uint8;
+typedef uint16      skc_uint16;
+
+typedef ulong       skc_ulong;
+typedef ulong2      skc_ulong2;
+typedef ulong3      skc_ulong3;
+typedef ulong4      skc_ulong4;
+typedef ulong8      skc_ulong8;
+typedef ulong16     skc_ulong16;
+
+typedef long        skc_long;
+typedef long2       skc_long2;
+typedef long3       skc_long3;
+typedef long4       skc_long4;
+typedef long8       skc_long8;
+typedef long16      skc_long16;
+
+typedef float       skc_float;
+typedef float2      skc_float2;
+typedef float3      skc_float3;
+typedef float4      skc_float4;
+typedef float8      skc_float8;
+typedef float16     skc_float16;
+
+typedef half        skc_half;
+
+#if defined( __CL_HALF2__)
+typedef half2       skc_half2;
+#endif
+#if defined( __CL_HALF4__)
+typedef half4       skc_half4;
+#endif
+#if defined( __CL_HALF8__)
+typedef half8       skc_half8;
+#endif
+#if defined( __CL_HALF16__)
+typedef half16      skc_half16;
+#endif
+
+//
+//
+//
+
+#define SKC_AS_HELPER(t)              as_##t
+#define SKC_AS(t)                     SKC_AS_HELPER(t)
+
+#define SKC_CONVERT_HELPER(t)         convert_##t
+#define SKC_CONVERT(t)                SKC_CONVERT_HELPER(t)
+
+// mode is: sat, rte, rtz, rtp, rtn --or-- sat_rte, sat_rtz, etc.
+#define SKC_CONVERT_MODE_HELPER(t,m)  convert_##t##_##m
+#define SKC_CONVERT_MODE(t,m)         SKC_CONVERT_HELPER(t)
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
+
+#endif
+
+//
+//
+//
+
+#define SKC_UCHAR_MAX    0xFF
+
+#define SKC_SHORT_MAX    0x7FFF
+#define SKC_SHORT_MIN    (-SKC_SHORT_MAX - 1)
+#define SKC_USHORT_MAX   0xFFFF
+
+#define SKC_INT_MAX      0x7FFFFFFF
+#define SKC_INT_MIN      (-SKC_INT_MAX - 1)
+#define SKC_UINT_MAX     0xFFFFFFFF
+
+#define SKC_ULONG_MAX    0xFFFFFFFFFFFFFFFFL
+
+//
+//
+//
+
diff --git a/src/compute/skc/util.c b/src/compute/skc/util.c
new file mode 100644
index 0000000..fe36888
--- /dev/null
+++ b/src/compute/skc/util.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ */
+
+#include "util.h"
+
+//
+//
+//
+
+#include <intrin.h> 
+
+//
+//
+//
+
+skc_bool
+skc_is_pow2_uint(skc_uint n)
+{
+  return (n & (n-1)) == 0;
+}
+
+//
+// ASSUMES NON-ZERO
+//
+
+skc_uint
+skc_msb_idx_uint(skc_uint n)
+{
+
+#ifdef _MSC_VER
+
+  skc_uint index;
+
+  _BitScanReverse(&index,n);
+
+  return index;
+
+#elif defined(__GNUC__)
+
+#error "BUSTED msb_index()"
+  return 31 - __builtin_clz(mask);
+
+#else
+
+#error "No msb_index()"
+
+#endif
+
+}
+
+//
+//
+//
+
+skc_uint
+skc_pow2_rd_uint(skc_uint n)
+{
+  return 1u << skc_msb_idx_uint(n);
+}
+
+//
+//
+//
+
+skc_uint
+skc_pow2_ru_uint(skc_uint n)
+{
+  n--;
+  n |= n >> 1;
+  n |= n >> 2;
+  n |= n >> 4;
+  n |= n >> 8;
+  n |= n >> 16;
+  n++;
+
+  return n;
+}
+
+//
+//
+//
diff --git a/src/compute/skc/util.h b/src/compute/skc/util.h
new file mode 100644
index 0000000..f7f8d62
--- /dev/null
+++ b/src/compute/skc/util.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "types.h"
+
+//
+//
+//
+
+skc_bool skc_is_pow2_uint(skc_uint n);
+skc_uint skc_msb_idx_uint(skc_uint n); // 0-based bit position
+skc_uint skc_pow2_rd_uint(skc_uint n);
+skc_uint skc_pow2_ru_uint(skc_uint n);
+
+//
+//
+//
+
diff --git a/src/compute/skc/weakref.c b/src/compute/skc/weakref.c
new file mode 100644
index 0000000..e8a1d55
--- /dev/null
+++ b/src/compute/skc/weakref.c
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "skc.h"
+#include "weakref.h"
+#include "macros.h"
+
+//
+// WEAKREF
+//
+
+#define SKC_WEAKREF_INDEX_BITS   16 // max bits for a weakref index -- this could/should be 12 bits
+#define SKC_WEAKREF_INDEX_COUNT  (1u << SKC_WEAKREF_INDEX_BITS)
+
+#define SKC_WEAKREF_INDEX_MASK   SKC_BITS_TO_MASK(SKC_WEAKREF_INDEX_BITS)
+#define SKC_WEAKREF_EPOCH_MASK   SKC_BITS_TO_MASK_AT_64(64-SKC_WEAKREF_INDEX_BITS,SKC_WEAKREF_INDEX_BITS)
+
+#define SKC_WEAKREF_EPOCH_INIT   0ul
+#define SKC_WEAKREF_EPOCH_ONE    SKC_BITS_TO_MASK_AT_64(1,SKC_WEAKREF_INDEX_BITS)
+
+//
+// FIXME -- ASSUMES LITTLE-ENDIAN
+//
+
+union skc_weakref
+{
+  skc_weakref_t u64; // 64-bits containing refutation epoch and an index
+
+  struct {
+    skc_uint    index :      SKC_WEAKREF_INDEX_BITS;
+    skc_uint    na_lo : 32 - SKC_WEAKREF_INDEX_BITS;
+    skc_uint    na_hi;
+  };
+
+  struct {
+    skc_ulong         :      SKC_WEAKREF_INDEX_BITS;
+    skc_ulong   epoch : 64 - SKC_WEAKREF_INDEX_BITS;
+  };
+};
+
+SKC_STATIC_ASSERT(sizeof(skc_weakref_t)     == sizeof(skc_ulong));
+SKC_STATIC_ASSERT(sizeof(union skc_weakref) == sizeof(skc_ulong));
+
+//
+//
+//
+
+void 
+skc_weakref_epoch_init(skc_epoch_t * const epoch)
+{
+  *epoch = SKC_WEAKREF_EPOCH_INIT;
+}
+
+void 
+skc_weakref_epoch_inc(skc_epoch_t * const epoch)
+{
+  *epoch += SKC_WEAKREF_EPOCH_ONE;
+}
+
+void 
+skc_weakref_init(skc_weakref_t * const weakref, 
+                 skc_epoch_t   * const epoch,
+                 skc_uint        const index)
+{
+  *weakref = *epoch | (index & SKC_WEAKREF_INDEX_MASK);
+}
+
+bool 
+skc_weakref_is_invalid(skc_weakref_t const * const weakref,
+                       skc_epoch_t   const * const epoch)
+{
+  return ((*weakref ^ *epoch) & SKC_WEAKREF_EPOCH_MASK) != 0UL;
+}
+
+skc_uint
+skc_weakref_index(skc_weakref_t const * const weakref)
+{
+  // truncate to word and mask
+  return (skc_uint)*weakref & SKC_WEAKREF_INDEX_MASK;
+}
+
+//
+//
+//
diff --git a/src/compute/skc/weakref.h b/src/compute/skc/weakref.h
new file mode 100644
index 0000000..9d09f8e
--- /dev/null
+++ b/src/compute/skc/weakref.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "skc.h"
+#include "types.h"
+
+//
+//
+//
+
+typedef skc_ulong skc_epoch_t;
+
+//
+//
+//
+
+void 
+skc_weakref_epoch_init(skc_epoch_t * const epoch);
+
+void 
+skc_weakref_epoch_inc(skc_epoch_t * const epoch);
+
+void 
+skc_weakref_init(skc_weakref_t * const weakref, 
+                 skc_epoch_t   * const epoch,
+                 skc_uint        const index);
+
+bool 
+skc_weakref_is_invalid(skc_weakref_t const * const weakref,
+                       skc_epoch_t   const * const epoch); 
+
+skc_uint
+skc_weakref_index(skc_weakref_t const * const weakref);
+
+//
+//
+//
+
+
diff --git a/src/compute/ts/transform_stack.c b/src/compute/ts/transform_stack.c
new file mode 100644
index 0000000..42a5a1e
--- /dev/null
+++ b/src/compute/ts/transform_stack.c
@@ -0,0 +1,720 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#include <stdlib.h>
+#include <assert.h>
+#include <math.h>
+
+//
+//
+//
+
+#include "transform_stack.h"
+
+//
+//
+//
+
+#define SKC_TRANSFORM_SUFFIX_EVAL(a)      a
+
+#define SKC_TRANSFORM_SUFFIX_CONCAT(func)                               \
+  SKC_TRANSFORM_SUFFIX_EVAL(func)##SKC_TRANSFORM_SUFFIX_EVAL(SKC_TRANSFORM_FLOAT_SUFFIX)
+
+//
+//
+//
+
+#define SKC_TRANSFORM_SIN(x)  SKC_TRANSFORM_SUFFIX_CONCAT(sin)(x)
+#define SKC_TRANSFORM_COS(x)  SKC_TRANSFORM_SUFFIX_CONCAT(cos)(x)
+#define SKC_TRANSFORM_TAN(x)  SKC_TRANSFORM_SUFFIX_CONCAT(tan)(x)
+#define SKC_TRANSFORM_RCP(x)  (SKC_TRANSFORM_SUFFIX_CONCAT(1.0) / (x))
+
+//
+//
+//
+
+union skc_transform_stack_3x3_u
+{
+  skc_transform_float_t   a9[9];
+    
+  struct {
+    skc_transform_float_t sx;
+    skc_transform_float_t shx;
+    skc_transform_float_t tx;
+
+    skc_transform_float_t shy;
+    skc_transform_float_t sy;
+    skc_transform_float_t ty;
+
+    skc_transform_float_t w0;
+    skc_transform_float_t w1;
+    skc_transform_float_t w2;
+  };
+};
+
+
+struct skc_transform_stack
+{
+  uint32_t                          size;
+  uint32_t                          count;
+  
+  skc_transform_weakref_t         * weakrefs;
+  union skc_transform_stack_3x3_u * transforms;
+};
+
+//
+//
+//
+
+static
+void
+skc_transform_stack_3x3_u_copy(union skc_transform_stack_3x3_u       * const __restrict dst,
+                               union skc_transform_stack_3x3_u const * const __restrict src)
+{
+  for (int32_t ii=0; ii<9; ii++)
+    dst->a9[ii] = src->a9[ii];
+} 
+
+//
+// C = A * B
+//
+
+static
+void
+skc_transform_stack_3x3_u_multiply(union skc_transform_stack_3x3_u       * const __restrict C,
+                                   union skc_transform_stack_3x3_u const * const __restrict A,
+                                   union skc_transform_stack_3x3_u const * const __restrict B)
+{                             
+  C->sx  = A->sx  * B->sx   +  A->shx * B->shy  +  A->tx * B->w0;
+  C->shx = A->sx  * B->shx  +  A->shx * B->sy   +  A->tx * B->w1;
+  C->tx  = A->sx  * B->tx   +  A->shx * B->ty   +  A->tx * B->w2;
+
+  C->shy = A->shy * B->sx   +  A->sy  * B->shy  +  A->ty * B->w0;
+  C->sy  = A->shy * B->shx  +  A->sy  * B->sy   +  A->ty * B->w1;
+  C->ty  = A->shy * B->tx   +  A->sy  * B->ty   +  A->ty * B->w2;
+
+  C->w0  = A->w0  * B->sx   +  A->w1  * B->shy  +  A->w2 * B->w0;
+  C->w1  = A->w0  * B->shx  +  A->w1  * B->sy   +  A->w2 * B->w1;
+  C->w2  = A->w0  * B->tx   +  A->w1  * B->ty   +  A->w2 * B->w2;
+}
+
+//
+//
+//
+
+static
+void
+skc_transform_stack_resize(struct skc_transform_stack * const ts, uint32_t const size)
+{
+  ts->size       = size;
+  ts->weakrefs   = realloc(ts->weakrefs,  size * sizeof(*ts->weakrefs));
+  ts->transforms = realloc(ts->transforms,size * sizeof(*ts->transforms));
+}
+
+static
+void
+skc_transform_stack_ensure(struct skc_transform_stack * const ts)
+{
+  if (ts->count < ts->size)
+    return;
+
+  // increase by 50% and by at least 8
+  skc_transform_stack_resize(ts,ts->size + max(ts->size/2,8));
+}
+
+//
+//
+//
+
+struct skc_transform_stack *
+skc_transform_stack_create(uint32_t const size)
+{
+  struct skc_transform_stack * ts = malloc(sizeof(*ts));
+
+  ts->size       = size;
+  ts->count      = 0;
+
+  ts->transforms = NULL;
+  ts->weakrefs   = NULL;
+
+  skc_transform_stack_resize(ts,size);
+
+  return ts;
+}
+
+void
+skc_transform_stack_release(struct skc_transform_stack * const ts)
+{
+  free(ts->transforms);
+  free(ts->weakrefs);
+
+  free(ts);
+}
+
+//
+//
+//
+
+uint32_t
+skc_transform_stack_save(struct skc_transform_stack * const ts)
+{
+  return ts->count;
+}
+
+void
+skc_transform_stack_restore(struct skc_transform_stack * const ts, 
+                            uint32_t                     const restore)
+{
+  ts->count = restore;
+}
+
+//
+//
+//
+
+static 
+union skc_transform_stack_3x3_u *
+skc_transform_stack_tos(struct skc_transform_stack * const ts)
+{
+  return ts->transforms + ts->count - 1;
+}
+
+//
+//
+//
+
+#if 0
+
+void
+skc_transform_to_f32a8(float f32a8[8], skc_transform_float_t const a9[9])
+{
+  if (a9[8] == 1.0)
+    {
+      f32a8[0] = (float)a9[0];
+      f32a8[1] = (float)a9[1];
+      f32a8[2] = (float)a9[2];
+      f32a8[3] = (float)a9[3];
+      f32a8[4] = (float)a9[4];
+      f32a8[5] = (float)a9[5];
+      f32a8[6] = (float)a9[6];
+      f32a8[7] = (float)a9[7];
+    }
+  else
+    {
+      skc_transform_float_t const rcp = 1.0 / a9[8];
+
+      f32a8[0] = (float)(a9[0] * rcp);
+      f32a8[1] = (float)(a9[1] * rcp);
+      f32a8[2] = (float)(a9[2] * rcp);
+      f32a8[3] = (float)(a9[3] * rcp);
+      f32a8[4] = (float)(a9[4] * rcp);
+      f32a8[5] = (float)(a9[5] * rcp);
+      f32a8[6] = (float)(a9[6] * rcp);
+      f32a8[7] = (float)(a9[7] * rcp);
+    }
+}
+
+#endif
+
+//
+//
+//
+
+skc_transform_float_t *
+skc_transform_stack_top_transform(struct skc_transform_stack * const ts)
+{
+  return skc_transform_stack_tos(ts)->a9;
+}
+
+skc_weakref_t *
+skc_transform_stack_top_weakref(struct skc_transform_stack * const ts)
+{
+  return ts->weakrefs + ts->count - 1;
+}
+
+//
+//
+//
+
+void 
+skc_transform_stack_drop(struct skc_transform_stack * const ts)
+{
+  assert(ts->count >= 1);
+
+  ts->count -= 1;
+}
+
+void 
+skc_transform_stack_dup(struct skc_transform_stack * const ts)
+{
+  skc_transform_stack_ensure(ts);
+  
+  union skc_transform_stack_3x3_u * const tos = skc_transform_stack_tos(ts);
+
+  skc_transform_stack_3x3_u_copy(tos+1,tos);
+
+  ts->weakrefs[ts->count] = ts->weakrefs[ts->count-1];
+
+  ts->count += 1;
+}
+
+//
+//
+//
+
+void
+skc_transform_stack_push_matrix(struct skc_transform_stack * const ts,
+                                skc_transform_float_t        const sx, 
+                                skc_transform_float_t        const shx,
+                                skc_transform_float_t        const tx,
+                                skc_transform_float_t        const shy, 
+                                skc_transform_float_t        const sy, 
+                                skc_transform_float_t        const ty,
+                                skc_transform_float_t        const w0,  
+                                skc_transform_float_t        const w1, 
+                                skc_transform_float_t        const w2)
+{
+  skc_transform_stack_ensure(ts);
+  
+  union skc_transform_stack_3x3_u * t = ts->transforms + ts->count;
+
+  t->sx  = sx;
+  t->shx = shx;
+  t->tx  = tx;
+
+  t->shy = shy;
+  t->sy  = sy;
+  t->ty  = ty;
+
+  t->w0  = w0;
+  t->w1  = w1;
+  t->w2  = w2;
+
+  ts->weakrefs[ts->count++] = SKC_WEAKREF_INVALID;
+}
+
+void
+skc_transform_stack_push_identity(struct skc_transform_stack * const ts)
+{
+  skc_transform_stack_push_matrix(ts,
+                                  1.0, 0.0, 0.0,
+                                  0.0, 1.0, 0.0,
+                                  0.0, 0.0, 1.0);
+}
+
+void
+skc_transform_stack_push_affine(struct skc_transform_stack * const ts,
+                                skc_transform_float_t        const sx,
+                                skc_transform_float_t        const shx, 
+                                skc_transform_float_t        const tx,
+                                skc_transform_float_t        const shy, 
+                                skc_transform_float_t        const sy, 
+                                skc_transform_float_t        const ty)
+{
+  skc_transform_stack_push_matrix(ts,
+                                  sx,  shx, tx,
+                                  shy, sy,  ty,
+                                  0.0, 0.0, 1.0);
+}
+
+void
+skc_transform_stack_push_translate(struct skc_transform_stack * const ts,
+                                   skc_transform_float_t        const tx,
+                                   skc_transform_float_t        const ty)
+{
+  skc_transform_stack_push_matrix(ts,
+                                  1.0, 0.0, tx,
+                                  0.0, 1.0, ty,
+                                  0.0, 0.0, 1.0);  
+}
+
+void
+skc_transform_stack_push_scale(struct skc_transform_stack * const ts,
+                               skc_transform_float_t        const sx, 
+                               skc_transform_float_t        const sy)
+{
+  skc_transform_stack_push_matrix(ts,
+                                  sx,  0.0, 0.0,
+                                  0.0, sy,  0.0,
+                                  0.0, 0.0, 1.0);  
+}
+
+void
+skc_transform_stack_push_shear(struct skc_transform_stack * const ts,
+                               skc_transform_float_t        const shx, 
+                               skc_transform_float_t        const shy)
+{
+  skc_transform_stack_push_matrix(ts,
+                                  1.0, shx, 0.0,
+                                  shy, 1.0, 0.0,
+                                  0.0, 0.0, 1.0);
+}
+
+void
+skc_transform_stack_push_skew_x(struct skc_transform_stack * const ts,
+                                skc_transform_float_t        const theta)
+{
+  skc_transform_float_t        const tan_theta = SKC_TRANSFORM_TAN(theta); // replace with tanpi if available
+
+  skc_transform_stack_push_matrix(ts,
+                                  1.0, tan_theta,0.0,
+                                  0.0, 1.0,      0.0,
+                                  0.0, 0.0,      1.0);
+}
+
+void
+skc_transform_stack_push_skew_y(struct skc_transform_stack * const ts,
+                                skc_transform_float_t        const theta)
+{
+  skc_transform_float_t const tan_theta = SKC_TRANSFORM_TAN(theta); // replace with tanpi if available
+
+  skc_transform_stack_push_matrix(ts,
+                                  1.0,       0.0, 0.0,
+                                  tan_theta, 1.0, 0.0,
+                                  0.0,       0.0, 1.0);
+}
+
+void
+skc_transform_stack_push_rotate(struct skc_transform_stack * const ts,
+                                skc_transform_float_t        const theta)
+{
+  skc_transform_float_t const cos_theta = SKC_TRANSFORM_COS(theta); // replace with cospi if available
+  skc_transform_float_t const sin_theta = SKC_TRANSFORM_SIN(theta); // replace with sinpi if available
+
+  skc_transform_stack_push_matrix(ts,
+                                  cos_theta,-sin_theta, 0.0,
+                                  sin_theta, cos_theta, 0.0,
+                                  0.0,       0.0,       1.0);
+}
+
+void
+skc_transform_stack_push_rotate_xy2(struct skc_transform_stack * const ts,
+                                    skc_transform_float_t        const theta,
+                                    skc_transform_float_t        const cx,
+                                    skc_transform_float_t        const cy,
+                                    skc_transform_float_t        const tx,
+                                    skc_transform_float_t        const ty)
+{
+  skc_transform_float_t const cos_theta = SKC_TRANSFORM_COS(theta); // replace with cospi if available
+  skc_transform_float_t const sin_theta = SKC_TRANSFORM_SIN(theta); // replace with sinpi if available
+
+  skc_transform_stack_push_matrix(ts,
+                                  cos_theta,-sin_theta, tx - (cx * cos_theta) + (cy * sin_theta),
+                                  sin_theta, cos_theta, ty - (cx * sin_theta) - (cy * cos_theta),
+                                  0.0,       0.0,       1.0);
+}
+
+void
+skc_transform_stack_push_rotate_xy(struct skc_transform_stack * const ts,
+                                   skc_transform_float_t        const theta,
+                                   skc_transform_float_t        const cx, 
+                                   skc_transform_float_t        const cy)
+{
+  skc_transform_stack_push_rotate_xy2(ts,theta,cx,cy,cx,cy);
+}
+
+void
+skc_transform_stack_push_rotate_scale_xy(struct skc_transform_stack * const ts,
+                                         skc_transform_float_t        const theta,
+                                         skc_transform_float_t        const sx, 
+                                         skc_transform_float_t        const sy,
+                                         skc_transform_float_t        const cx,
+                                         skc_transform_float_t        const cy)
+{
+  skc_transform_float_t const cos_theta = SKC_TRANSFORM_COS(theta); // replace with cospi if available
+  skc_transform_float_t const sin_theta = SKC_TRANSFORM_SIN(theta); // replace with sinpi if available
+
+  skc_transform_stack_push_matrix(ts,
+                                  sx*cos_theta,-sx*sin_theta, cx - cx*sx*cos_theta + cy*sy*sin_theta,
+                                  sy*sin_theta, sy*cos_theta, cy - cy*sy*cos_theta - cx*sx*sin_theta,
+                                  0.0,          0.0,          1.0);
+}
+
+//
+// See: https://www.ldv.ei.tum.de/fileadmin/w00bfa/www/content_uploads/Vorlesung_3.2_SpatialTransformations.pdf
+//
+
+#define DET4(m,a,b,c,d) (m->a9[a] * m->a9[d] - m->a9[b] * m->a9[c])
+#define DET3(m,a,b,c)   (m->a9[a]            - m->a9[b] * m->a9[c])
+
+#define DIAG3(m,a,b,c)  (m->a9[a] * m->a9[b] * m->a9[c])
+#define DIAG2(m,a,b)    (m->a9[a] * m->a9[b])
+
+#define X(v,i)          v[i*2]
+#define Y(v,i)          v[i*2+1]
+
+//
+//
+//
+
+bool
+skc_transform_stack_push_quad_to_unit(struct skc_transform_stack * const ts,
+                                      const float quad_src[8])
+{
+  if (!skc_transform_stack_push_unit_to_quad(ts,quad_src))
+    return false;
+
+  union skc_transform_stack_3x3_u * const T = skc_transform_stack_tos(ts);
+
+#if 0
+  //
+  // dividing by the determinant (just w2?)
+  //
+  skc_transform_float_t const det = 
+    DIAG2(T,0,4)   +
+    DIAG3(T,3,7,2) +
+    DIAG3(T,6,1,5) -
+    DIAG3(T,6,4,2) -
+    DIAG2(T,3,1)   -
+    DIAG3(T,0,7,5);
+
+  if (det == 0.0)
+    return false;
+
+  skc_transform_float_t const rcp = 1.0 / det;
+
+  const union skc_transform_stack_3x3_u A = 
+    {
+      +DET3(T,4,5,7)   * rcp,
+      -DET3(T,1,2,7)   * rcp,
+      +DET4(T,1,2,4,5) * rcp,
+
+      -DET3(T,3,5,6)   * rcp,
+      +DET3(T,0,2,6)   * rcp,
+      -DET4(T,0,2,3,5) * rcp,
+
+      +DET4(T,3,4,6,7) * rcp,
+      -DET4(T,0,1,6,7) * rcp,
+      +DET4(T,0,1,3,4) * rcp
+    };
+
+#else // just the adjoint can result in large values
+
+  const union skc_transform_stack_3x3_u A = 
+    {
+      +DET3(T,4,5,7),
+      -DET3(T,1,2,7),
+      +DET4(T,1,2,4,5),
+
+      -DET3(T,3,5,6),
+      +DET3(T,0,2,6),
+      -DET4(T,0,2,3,5),
+
+      +DET4(T,3,4,6,7),
+      -DET4(T,0,1,6,7),
+      +DET4(T,0,1,3,4)
+    };
+
+#endif
+
+  skc_transform_stack_3x3_u_copy(T,&A);
+                                  
+  return true;
+}
+
+//
+//
+//
+
+bool
+skc_transform_stack_push_unit_to_quad(struct skc_transform_stack * const ts,
+                                      const float quad_dst[8])
+{
+  skc_transform_float_t const x0  = (skc_transform_float_t)X(quad_dst,0);
+  skc_transform_float_t const y0  = (skc_transform_float_t)Y(quad_dst,0);
+
+  skc_transform_float_t const x1  = (skc_transform_float_t)X(quad_dst,1);
+  skc_transform_float_t const y1  = (skc_transform_float_t)Y(quad_dst,1);
+
+  skc_transform_float_t const x2  = (skc_transform_float_t)X(quad_dst,2);
+  skc_transform_float_t const y2  = (skc_transform_float_t)Y(quad_dst,2);
+
+  skc_transform_float_t const x3  = (skc_transform_float_t)X(quad_dst,3);
+  skc_transform_float_t const y3  = (skc_transform_float_t)Y(quad_dst,3);
+  
+  skc_transform_float_t       sx  = x1 - x0;
+  skc_transform_float_t       shy = y1 - y0;
+
+  skc_transform_float_t const dx2 = x3 - x2;
+  skc_transform_float_t const dy2 = y3 - y2;
+
+  skc_transform_float_t const dx3 = -sx  - dx2;
+  skc_transform_float_t const dy3 = -shy - dy2;
+
+  // if both zero then quad_dst is a parallelogram and affine
+  if ((dx3 == 0.0) && (dy3 == 0.0)) 
+    {
+      skc_transform_float_t const shx = x2 - x1;
+      skc_transform_float_t const sy  = y2 - y1;
+
+      skc_transform_stack_push_matrix(ts,
+                                      sx,  shx, x0,
+                                      shy, sy,  y0,
+                                      0.0, 0.0, 1.0);
+    } 
+  else
+    {
+      skc_transform_float_t const dx1    = x1 - x2;
+      skc_transform_float_t const dy1    = y1 - y2;
+
+      skc_transform_float_t const wx_den = dx1 * dy2 - dx2 * dy1;
+
+      if (wx_den == 0.0)
+        return false;
+
+      skc_transform_float_t const w0_num = dx3 * dy2 - dx2 * dy3;
+      skc_transform_float_t const w1_num = dx1 * dy3 - dx3 * dy1;
+
+      skc_transform_float_t const w0     = w0_num / wx_den;
+      skc_transform_float_t const w1     = w1_num / wx_den;
+
+      sx                 += w0 * x1;
+      skc_transform_float_t const shx    = x3 - x0 + w1 * x3;
+
+      shy                += w0 * y1;
+      skc_transform_float_t const sy     = y3 - y0 + w1 * y3;
+
+      skc_transform_stack_push_matrix(ts,
+                                      sx,  shx, x0,
+                                      shy, sy,  y0,
+                                      w0,  w1,  1.0);
+    }
+
+  return true;
+}
+
+//
+//
+//
+
+bool
+skc_transform_stack_push_quad_to_quad(struct skc_transform_stack * const ts,
+                                      const float quad_src[8],
+                                      const float quad_dst[8])
+{
+  if (skc_transform_stack_push_quad_to_unit(ts,quad_src) == false)
+    return false;
+
+  if (skc_transform_stack_push_unit_to_quad(ts,quad_dst) == false)  
+    return false;
+
+  union skc_transform_stack_3x3_u * const U2Q = skc_transform_stack_tos(ts);
+  union skc_transform_stack_3x3_u * const Q2U = U2Q - 1;
+  union skc_transform_stack_3x3_u         Q2Q;
+
+  // pre-multiply
+  skc_transform_stack_3x3_u_multiply(&Q2Q,U2Q,Q2U);
+
+  // drop TOS
+  skc_transform_stack_drop(ts);
+
+  // overwrite TOS
+  skc_transform_stack_3x3_u_copy(Q2U,&Q2Q);
+
+  return true;
+}
+
+//
+//
+//
+
+bool
+skc_transform_stack_push_rect_to_quad(struct skc_transform_stack * const ts,
+                                      const float x0,
+                                      const float y0,
+                                      const float x1,
+                                      const float y1,
+                                      const float quad_dst[8])
+{
+  if (skc_transform_stack_push_unit_to_quad(ts,quad_dst) == false)  
+    return false;
+
+  const union skc_transform_stack_3x3_u R2U = 
+    {
+      SKC_TRANSFORM_RCP((skc_transform_float_t)(x1-x0)), 
+      0.0f,       
+      (skc_transform_float_t)-x0,
+
+      0.0f,   
+      SKC_TRANSFORM_RCP((skc_transform_float_t)(y1-y0)),
+      (skc_transform_float_t)-y0,
+
+      0.0f,  
+      0.0f,        
+      1.0,
+    };
+
+  union skc_transform_stack_3x3_u * const U2Q = skc_transform_stack_tos(ts);
+  union skc_transform_stack_3x3_u         Q2Q;
+
+  // pre-multiply
+  skc_transform_stack_3x3_u_multiply(&Q2Q,U2Q,&R2U);
+
+  // overwrite TOS
+  skc_transform_stack_3x3_u_copy(U2Q,&Q2Q);
+
+  return true;
+}
+
+//
+//
+//
+
+void
+skc_transform_stack_concat(struct skc_transform_stack * const ts)
+{
+  //
+  // Transformation stack matrices are _post-multiplied_ and the top
+  // of stack is replaced with the product:
+  //
+  //   TOS' = TOS[-1] * TOS
+  //
+  // -or-
+  //
+  //   C = A * B
+  //   B = C
+  //
+  if (ts->count <= 1)
+    return;
+
+  // get A and B 
+  union       skc_transform_stack_3x3_u * const B = skc_transform_stack_tos(ts);
+  const union skc_transform_stack_3x3_u * const A = B - 1;
+
+  union skc_transform_stack_3x3_u C;
+
+  // post multiply
+  skc_transform_stack_3x3_u_multiply(&C,A,B);
+
+  // overwrite TOS
+  skc_transform_stack_3x3_u_copy(B,&C);
+
+  // invalidate TOS
+  *skc_transform_stack_top_weakref(ts) = SKC_WEAKREF_INVALID;
+}
+
+//
+//
+//
+
+void 
+skc_transform_stack_transform_affine(struct skc_transform_stack * const ts,
+                                     skc_transform_float_t        const x_pre,
+                                     skc_transform_float_t        const y_pre,
+                                     skc_transform_float_t      * const x_post,
+                                     skc_transform_float_t      * const y_post)
+{
+  union skc_transform_stack_3x3_u const * const t = skc_transform_stack_tos(ts);
+
+  *x_post = x_pre * t->sx  + y_pre * t->shx + t->tx;
+  *y_post = x_pre * t->shy + y_pre * t->sy  + t->ty;
+}
+
+//
+//
+//
diff --git a/src/compute/ts/transform_stack.h b/src/compute/ts/transform_stack.h
new file mode 100644
index 0000000..275f529
--- /dev/null
+++ b/src/compute/ts/transform_stack.h
@@ -0,0 +1,208 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+//
+//
+//
+
+#pragma once
+
+//
+//
+//
+
+#include <skc/skc.h>
+
+//
+//
+//
+
+#if 1
+typedef float  skc_transform_float_t;
+#define SKC_TRANSFORM_FLOAT_SUFFIX f
+#else
+typedef double skc_transform_float_t;
+#define SKC_TRANSFORM_FLOAT_SUFFIX
+#endif
+
+//
+//
+//
+
+struct skc_transform_stack;
+
+//
+//
+//
+
+struct skc_transform_stack *
+skc_transform_stack_create(const uint32_t size);
+
+void
+skc_transform_stack_release(struct skc_transform_stack * const ts);
+
+//
+//
+//
+
+uint32_t
+skc_transform_stack_save(struct skc_transform_stack * const ts);
+
+void
+skc_transform_stack_restore(struct skc_transform_stack * const ts, uint32_t const restore);
+
+//
+//
+//
+
+skc_transform_float_t *
+skc_transform_stack_top_transform(struct skc_transform_stack * const ts);
+
+skc_transform_weakref_t *
+skc_transform_stack_top_weakref(struct skc_transform_stack * const ts);
+
+//
+//
+//
+
+void 
+skc_transform_stack_drop(struct skc_transform_stack * const ts);
+
+void 
+skc_transform_stack_dup(struct skc_transform_stack * const ts);
+
+//
+//
+//
+
+void 
+skc_transform_stack_transform_affine(struct skc_transform_stack * const ts,
+                                     skc_transform_float_t        const x_pre,  
+                                     skc_transform_float_t        const y_pre,
+                                     skc_transform_float_t      * const x_post, 
+                                     skc_transform_float_t      * const y_post);
+
+//
+//
+//
+
+void
+skc_transform_stack_push_matrix(struct skc_transform_stack * const ts,
+                                skc_transform_float_t        const sx, 
+                                skc_transform_float_t        const shx,
+                                skc_transform_float_t        const tx,
+                                skc_transform_float_t        const shy,
+                                skc_transform_float_t        const sy, 
+                                skc_transform_float_t        const ty,
+                                skc_transform_float_t        const w0, 
+                                skc_transform_float_t        const w1, 
+                                skc_transform_float_t        const w2);
+
+void
+skc_transform_stack_push_identity(struct skc_transform_stack * const ts);
+
+void
+skc_transform_stack_push_affine(struct skc_transform_stack * const ts,
+                                skc_transform_float_t        const sx,  
+                                skc_transform_float_t        const shx,
+                                skc_transform_float_t        const tx,
+                                skc_transform_float_t        const shy, 
+                                skc_transform_float_t        const sy,
+                                skc_transform_float_t        const ty);
+
+void
+skc_transform_stack_push_translate(struct skc_transform_stack * const ts,
+                                   skc_transform_float_t        const tx, 
+                                   skc_transform_float_t        const ty);
+
+void
+skc_transform_stack_push_scale(struct skc_transform_stack * const ts,
+                               skc_transform_float_t        const sx, 
+                               skc_transform_float_t        const sy);
+
+void
+skc_transform_stack_push_shear(struct skc_transform_stack * const ts,
+                               skc_transform_float_t        const shx, 
+                               skc_transform_float_t        const shy);
+
+
+void
+skc_transform_stack_push_skew_x(struct skc_transform_stack * const ts,
+                                skc_transform_float_t        const theta);
+
+void
+skc_transform_stack_push_skew_y(struct skc_transform_stack * const ts,
+                                skc_transform_float_t        const theta);
+
+void
+skc_transform_stack_push_rotate(struct skc_transform_stack * const ts,
+                                skc_transform_float_t        const theta);
+
+void
+skc_transform_stack_push_rotate_xy2(struct skc_transform_stack * const ts,
+                                    skc_transform_float_t        const theta,
+                                    skc_transform_float_t        const cx,
+                                    skc_transform_float_t        const cy,
+                                    skc_transform_float_t        const tx, 
+                                    skc_transform_float_t        const ty);
+
+void
+skc_transform_stack_push_rotate_xy(struct skc_transform_stack * const ts,
+                                   skc_transform_float_t        const theta,
+                                   skc_transform_float_t        const cx,
+                                   skc_transform_float_t        const cy);
+
+void
+skc_transform_stack_push_rotate_scale_xy(struct skc_transform_stack * const ts,
+                                         skc_transform_float_t        const theta,
+                                         skc_transform_float_t        const sx,
+                                         skc_transform_float_t        const sy,
+                                         skc_transform_float_t        const cx,
+                                         skc_transform_float_t        const cy);
+//
+// Quadrilateral coordinates are skc_transform_float_t2 structs:
+//
+//   float2[4] = { xy0, xy1, xy2, xy3 }
+//
+// -or-
+//
+//   float[8]  = { x0, y0, x1, y1, x2, y2, x3, y3 };
+//
+
+bool
+skc_transform_stack_push_quad_to_unit(struct skc_transform_stack * const ts,
+                                      float const quad_src[8]);
+
+bool
+skc_transform_stack_push_unit_to_quad(struct skc_transform_stack * const ts,
+                                      float const quad_dst[8]);
+
+bool
+skc_transform_stack_push_rect_to_quad(struct skc_transform_stack * const ts,
+                                      float const x0,
+                                      float const y0,
+                                      float const x1,
+                                      float const y1,
+                                      float const quad_dst[8]);
+
+bool
+skc_transform_stack_push_quad_to_quad(struct skc_transform_stack * const ts,
+                                      float const quad_src[8],
+                                      float const quad_dst[8]);
+
+//
+//
+//
+
+void
+skc_transform_stack_concat(struct skc_transform_stack * const ts);
+
+//
+//
+//
+