File nghttp2_1.41.0.patch of Package nodejs8.15384

commit 33e9a122417d727a6ccc93588334cdd5386633a7
Author: James M Snell <jasnell@gmail.com>
Date:   Tue May 5 15:27:53 2020 -0700

    deps: update nghttp2 to 1.41.0
    
    Fixes: https://hackerone.com/reports/446662
    CVE-ID: CVE-2020-11080
    PR-URL: https://github.com/nodejs-private/node-private/pull/204
    Backport-PR-URL: https://github.com/nodejs-private/node-private/pull/207
    Reviewed-By: Beth Griggs <Bethany.Griggs@uk.ibm.com>
    Reviewed-By: Sam Roberts <vieuxtech@gmail.com>

diff --git a/deps/nghttp2/lib/CMakeLists.txt b/deps/nghttp2/lib/CMakeLists.txt
deleted file mode 100644
index c27ee99bb7..0000000000
--- a/deps/nghttp2/lib/CMakeLists.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-add_subdirectory(includes)
-
-include_directories(
-  "${CMAKE_CURRENT_SOURCE_DIR}/includes"
-  "${CMAKE_CURRENT_BINARY_DIR}/includes"
-)
-
-add_definitions(-DBUILDING_NGHTTP2)
-
-set(NGHTTP2_SOURCES
-  nghttp2_pq.c nghttp2_map.c nghttp2_queue.c
-  nghttp2_frame.c
-  nghttp2_buf.c
-  nghttp2_stream.c nghttp2_outbound_item.c
-  nghttp2_session.c nghttp2_submit.c
-  nghttp2_helper.c
-  nghttp2_npn.c
-  nghttp2_hd.c nghttp2_hd_huffman.c nghttp2_hd_huffman_data.c
-  nghttp2_version.c
-  nghttp2_priority_spec.c
-  nghttp2_option.c
-  nghttp2_callbacks.c
-  nghttp2_mem.c
-  nghttp2_http.c
-  nghttp2_rcbuf.c
-  nghttp2_debug.c
-)
-
-set(NGHTTP2_RES "")
-
-if(WIN32)
-  configure_file(
-    version.rc.in
-    ${CMAKE_CURRENT_BINARY_DIR}/version.rc
-    @ONLY)
-
-  set(NGHTTP2_RES ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
-endif()
-
-# Public shared library
-if(ENABLE_SHARED_LIB)
-  add_library(nghttp2 SHARED ${NGHTTP2_SOURCES} ${NGHTTP2_RES})
-  set_target_properties(nghttp2 PROPERTIES
-    COMPILE_FLAGS "${WARNCFLAGS}"
-    VERSION ${LT_VERSION} SOVERSION ${LT_SOVERSION}
-    C_VISIBILITY_PRESET hidden
-  )
-  target_include_directories(nghttp2 INTERFACE
-    "${CMAKE_CURRENT_BINARY_DIR}/includes"
-    "${CMAKE_CURRENT_SOURCE_DIR}/includes"
-  )
-
-  install(TARGETS nghttp2
-    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-    RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
-endif()
-
-if(HAVE_CUNIT OR ENABLE_STATIC_LIB)
-  # Static library (for unittests because of symbol visibility)
-  add_library(nghttp2_static STATIC ${NGHTTP2_SOURCES})
-  set_target_properties(nghttp2_static PROPERTIES
-    COMPILE_FLAGS "${WARNCFLAGS}"
-    VERSION ${LT_VERSION} SOVERSION ${LT_SOVERSION}
-    ARCHIVE_OUTPUT_NAME nghttp2
-  )
-  target_compile_definitions(nghttp2_static PUBLIC "-DNGHTTP2_STATICLIB")
-  if(ENABLE_STATIC_LIB)
-    install(TARGETS nghttp2_static
-      DESTINATION "${CMAKE_INSTALL_LIBDIR}")
-  endif()
-endif()
-
-
-install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libnghttp2.pc"
-  DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
diff --git a/deps/nghttp2/lib/includes/nghttp2/nghttp2.h b/deps/nghttp2/lib/includes/nghttp2/nghttp2.h
index 313fb23daa..9be6eea5c0 100644
--- a/deps/nghttp2/lib/includes/nghttp2/nghttp2.h
+++ b/deps/nghttp2/lib/includes/nghttp2/nghttp2.h
@@ -211,40 +211,47 @@ typedef struct {
  *
  * The default header table size.
  */
 #define NGHTTP2_DEFAULT_HEADER_TABLE_SIZE (1 << 12)
 
 /**
  * @macro
  *
  * The client magic string, which is the first 24 bytes byte string of
  * client connection preface.
  */
 #define NGHTTP2_CLIENT_MAGIC "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
 
 /**
  * @macro
  *
  * The length of :macro:`NGHTTP2_CLIENT_MAGIC`.
  */
 #define NGHTTP2_CLIENT_MAGIC_LEN 24
 
+/**
+ * @macro
+ *
+ * The default max number of settings per SETTINGS frame
+ */
+#define NGHTTP2_DEFAULT_MAX_SETTINGS 32
+
 /**
  * @enum
  *
  * Error codes used in this library.  The code range is [-999, -500],
  * inclusive. The following values are defined:
  */
 typedef enum {
   /**
    * Invalid argument passed.
    */
   NGHTTP2_ERR_INVALID_ARGUMENT = -501,
   /**
    * Out of buffer space.
    */
   NGHTTP2_ERR_BUFFER_ERROR = -502,
   /**
    * The specified protocol version is not supported.
    */
   NGHTTP2_ERR_UNSUPPORTED_VERSION = -503,
   /**
@@ -381,40 +388,45 @@ typedef enum {
    * Violation in HTTP messaging rule.
    */
   NGHTTP2_ERR_HTTP_MESSAGING = -532,
   /**
    * Stream was refused.
    */
   NGHTTP2_ERR_REFUSED_STREAM = -533,
   /**
    * Unexpected internal error, but recovered.
    */
   NGHTTP2_ERR_INTERNAL = -534,
   /**
    * Indicates that a processing was canceled.
    */
   NGHTTP2_ERR_CANCEL = -535,
   /**
    * When a local endpoint expects to receive SETTINGS frame, it
    * receives an other type of frame.
    */
   NGHTTP2_ERR_SETTINGS_EXPECTED = -536,
+  /**
+   * When a local endpoint receives too many settings entries
+   * in a single SETTINGS frame.
+   */
+  NGHTTP2_ERR_TOO_MANY_SETTINGS = -537,
   /**
    * The errors < :enum:`NGHTTP2_ERR_FATAL` mean that the library is
    * under unexpected condition and processing was terminated (e.g.,
    * out of memory).  If application receives this error code, it must
    * stop using that :type:`nghttp2_session` object and only allowed
    * operation for that object is deallocate it using
    * `nghttp2_session_del()`.
    */
   NGHTTP2_ERR_FATAL = -900,
   /**
    * Out of memory.  This is a fatal error.
    */
   NGHTTP2_ERR_NOMEM = -901,
   /**
    * The user callback function failed.  This is a fatal error.
    */
   NGHTTP2_ERR_CALLBACK_FAILURE = -902,
   /**
    * Invalid client magic (see :macro:`NGHTTP2_CLIENT_MAGIC`) was
    * received and further processing is not possible.
@@ -2642,40 +2654,51 @@ nghttp2_option_set_max_deflate_dynamic_table_size(nghttp2_option *option,
  * @function
  *
  * This option prevents the library from retaining closed streams to
  * maintain the priority tree.  If this option is set to nonzero,
  * applications can discard closed stream completely to save memory.
  */
 NGHTTP2_EXTERN void nghttp2_option_set_no_closed_streams(nghttp2_option *option,
                                                          int val);
 
 /**
  * @function
  *
  * This function sets the maximum number of outgoing SETTINGS ACK and
  * PING ACK frames retained in :type:`nghttp2_session` object.  If
  * more than those frames are retained, the peer is considered to be
  * misbehaving and session will be closed.  The default value is 1000.
  */
 NGHTTP2_EXTERN void nghttp2_option_set_max_outbound_ack(nghttp2_option *option,
                                                         size_t val);
 
+/**
+ * @function
+ *
+ * This function sets the maximum number of SETTINGS entries per
+ * SETTINGS frame that will be accepted. If more than those entries
+ * are received, the peer is considered to be misbehaving and session
+ * will be closed. The default value is 32.
+ */
+NGHTTP2_EXTERN void nghttp2_option_set_max_settings(nghttp2_option *option,
+                                                    size_t val);
+
 /**
  * @function
  *
  * Initializes |*session_ptr| for client use.  The all members of
  * |callbacks| are copied to |*session_ptr|.  Therefore |*session_ptr|
  * does not store |callbacks|.  The |user_data| is an arbitrary user
  * supplied data, which will be passed to the callback functions.
  *
  * The :type:`nghttp2_send_callback` must be specified.  If the
  * application code uses `nghttp2_session_recv()`, the
  * :type:`nghttp2_recv_callback` must be specified.  The other members
  * of |callbacks| can be ``NULL``.
  *
  * If this function fails, |*session_ptr| is left untouched.
  *
  * This function returns 0 if it succeeds, or one of the following
  * negative error codes:
  *
  * :enum:`NGHTTP2_ERR_NOMEM`
  *     Out of memory.
@@ -4752,40 +4775,53 @@ NGHTTP2_EXTERN int nghttp2_is_fatal(int lib_error_code);
 /**
  * @function
  *
  * Returns nonzero if HTTP header field name |name| of length |len| is
  * valid according to http://tools.ietf.org/html/rfc7230#section-3.2
  *
  * Because this is a header field name in HTTP2, the upper cased alphabet
  * is treated as error.
  */
 NGHTTP2_EXTERN int nghttp2_check_header_name(const uint8_t *name, size_t len);
 
 /**
  * @function
  *
  * Returns nonzero if HTTP header field value |value| of length |len|
  * is valid according to
  * http://tools.ietf.org/html/rfc7230#section-3.2
  */
 NGHTTP2_EXTERN int nghttp2_check_header_value(const uint8_t *value, size_t len);
 
+/**
+ * @function
+ *
+ * Returns nonzero if the |value| which is supposed to the value of
+ * :authority or host header field is valid according to
+ * https://tools.ietf.org/html/rfc3986#section-3.2
+ *
+ * |value| is valid if it merely consists of the allowed characters.
+ * In particular, it does not check whether |value| follows the syntax
+ * of authority.
+ */
+NGHTTP2_EXTERN int nghttp2_check_authority(const uint8_t *value, size_t len);
+
 /* HPACK API */
 
 struct nghttp2_hd_deflater;
 
 /**
  * @struct
  *
  * HPACK deflater object.
  */
 typedef struct nghttp2_hd_deflater nghttp2_hd_deflater;
 
 /**
  * @function
  *
  * Initializes |*deflater_ptr| for deflating name/values pairs.
  *
  * The |max_deflate_dynamic_table_size| is the upper bound of header
  * table size the deflater will use.
  *
  * If this function fails, |*deflater_ptr| is left untouched.
diff --git a/deps/nghttp2/lib/includes/nghttp2/nghttp2ver.h b/deps/nghttp2/lib/includes/nghttp2/nghttp2ver.h
index 45bb0c9102..795a44c1e8 100644
--- a/deps/nghttp2/lib/includes/nghttp2/nghttp2ver.h
+++ b/deps/nghttp2/lib/includes/nghttp2/nghttp2ver.h
@@ -12,31 +12,31 @@
  * the following conditions:
  *
  * The above copyright notice and this permission notice shall be
  * included in all copies or substantial portions of the Software.
  *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 #ifndef NGHTTP2VER_H
 #define NGHTTP2VER_H
 
 /**
  * @macro
  * Version number of the nghttp2 library release
  */
-#define NGHTTP2_VERSION "1.39.2"
+#define NGHTTP2_VERSION "1.41.0"
 
 /**
  * @macro
  * Numerical representation of the version number of the nghttp2 library
  * release. This is a 24 bit number with 8 bits for major number, 8 bits
  * for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203.
  */
-#define NGHTTP2_VERSION_NUM 0x012702
+#define NGHTTP2_VERSION_NUM 0x012900
 
 #endif /* NGHTTP2VER_H */
diff --git a/deps/nghttp2/lib/nghttp2_hd.c b/deps/nghttp2/lib/nghttp2_hd.c
index 11ca3345f3..5e86931525 100644
--- a/deps/nghttp2/lib/nghttp2_hd.c
+++ b/deps/nghttp2/lib/nghttp2_hd.c
@@ -1677,40 +1677,45 @@ static ssize_t hd_inflate_read_len(nghttp2_hd_inflater *inflater, int *rfin,
  *   Out of memory
  * NGHTTP2_ERR_HEADER_COMP
  *   Huffman decoding failed
  */
 static ssize_t hd_inflate_read_huff(nghttp2_hd_inflater *inflater,
                                     nghttp2_buf *buf, const uint8_t *in,
                                     const uint8_t *last) {
   ssize_t readlen;
   int fin = 0;
   if ((size_t)(last - in) >= inflater->left) {
     last = in + inflater->left;
     fin = 1;
   }
   readlen = nghttp2_hd_huff_decode(&inflater->huff_decode_ctx, buf, in,
                                    (size_t)(last - in), fin);
 
   if (readlen < 0) {
     DEBUGF("inflatehd: huffman decoding failed\n");
     return readlen;
   }
+  if (nghttp2_hd_huff_decode_failure_state(&inflater->huff_decode_ctx)) {
+    DEBUGF("inflatehd: huffman decoding failed\n");
+    return NGHTTP2_ERR_HEADER_COMP;
+  }
+
   inflater->left -= (size_t)readlen;
   return readlen;
 }
 
 /*
  * Reads |inflater->left| bytes from the range [in, last) and copies
  * them into the |buffer|.
  *
  * This function returns the number of bytes read if it succeeds, or
  * one of the following negative error codes:
  *
  * NGHTTP2_ERR_NOMEM
  *   Out of memory
  * NGHTTP2_ERR_HEADER_COMP
  *   Header decompression failed
  */
 static ssize_t hd_inflate_read(nghttp2_hd_inflater *inflater, nghttp2_buf *buf,
                                const uint8_t *in, const uint8_t *last) {
   size_t len = nghttp2_min((size_t)(last - in), inflater->left);
 
diff --git a/deps/nghttp2/lib/nghttp2_hd.h b/deps/nghttp2/lib/nghttp2_hd.h
index 14ae980789..267402881f 100644
--- a/deps/nghttp2/lib/nghttp2_hd.h
+++ b/deps/nghttp2/lib/nghttp2_hd.h
@@ -413,21 +413,27 @@ void nghttp2_hd_huff_decode_context_init(nghttp2_hd_huff_decode_context *ctx);
  * will be written to |buf|.  This function assumes that |buf| has the
  * enough room to store the decoded byte string.
  *
  * The caller must set the |fin| to nonzero if the given input is the
  * final block.
  *
  * This function returns the number of read bytes from the |in|.
  *
  * If this function fails, it returns one of the following negative
  * return codes:
  *
  * NGHTTP2_ERR_NOMEM
  *     Out of memory.
  * NGHTTP2_ERR_HEADER_COMP
  *     Decoding process has failed.
  */
 ssize_t nghttp2_hd_huff_decode(nghttp2_hd_huff_decode_context *ctx,
                                nghttp2_buf *buf, const uint8_t *src,
                                size_t srclen, int fin);
 
+/*
+ * nghttp2_hd_huff_decode_failure_state returns nonzero if |ctx|
+ * indicates that huffman decoding context is in failure state.
+ */
+int nghttp2_hd_huff_decode_failure_state(nghttp2_hd_huff_decode_context *ctx);
+
 #endif /* NGHTTP2_HD_H */
diff --git a/deps/nghttp2/lib/nghttp2_hd_huffman.c b/deps/nghttp2/lib/nghttp2_hd_huffman.c
index 8881aacb2e..ac90f49c44 100644
--- a/deps/nghttp2/lib/nghttp2_hd_huffman.c
+++ b/deps/nghttp2/lib/nghttp2_hd_huffman.c
@@ -12,220 +12,133 @@
  * the following conditions:
  *
  * The above copyright notice and this permission notice shall be
  * included in all copies or substantial portions of the Software.
  *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 #include "nghttp2_hd_huffman.h"
 
 #include <string.h>
 #include <assert.h>
 #include <stdio.h>
 
 #include "nghttp2_hd.h"
-
-/*
- * Encodes huffman code |sym| into |*dest_ptr|, whose least |rembits|
- * bits are not filled yet.  The |rembits| must be in range [1, 8],
- * inclusive.  At the end of the process, the |*dest_ptr| is updated
- * and points where next output should be placed. The number of
- * unfilled bits in the pointed location is returned.
- */
-static ssize_t huff_encode_sym(nghttp2_bufs *bufs, size_t *avail_ptr,
-                               size_t rembits, const nghttp2_huff_sym *sym) {
-  int rv;
-  size_t nbits = sym->nbits;
-  uint32_t code = sym->code;
-
-  /* We assume that sym->nbits <= 32 */
-  if (rembits > nbits) {
-    nghttp2_bufs_fast_orb_hold(bufs, (uint8_t)(code << (rembits - nbits)));
-    return (ssize_t)(rembits - nbits);
-  }
-
-  if (rembits == nbits) {
-    nghttp2_bufs_fast_orb(bufs, (uint8_t)code);
-    --*avail_ptr;
-    return 8;
-  }
-
-  nghttp2_bufs_fast_orb(bufs, (uint8_t)(code >> (nbits - rembits)));
-  --*avail_ptr;
-
-  nbits -= rembits;
-  if (nbits & 0x7) {
-    /* align code to MSB byte boundary */
-    code <<= 8 - (nbits & 0x7);
-  }
-
-  if (*avail_ptr < (nbits + 7) / 8) {
-    /* slow path */
-    if (nbits > 24) {
-      rv = nghttp2_bufs_addb(bufs, (uint8_t)(code >> 24));
-      if (rv != 0) {
-        return rv;
-      }
-      nbits -= 8;
-    }
-    if (nbits > 16) {
-      rv = nghttp2_bufs_addb(bufs, (uint8_t)(code >> 16));
-      if (rv != 0) {
-        return rv;
-      }
-      nbits -= 8;
-    }
-    if (nbits > 8) {
-      rv = nghttp2_bufs_addb(bufs, (uint8_t)(code >> 8));
-      if (rv != 0) {
-        return rv;
-      }
-      nbits -= 8;
-    }
-    if (nbits == 8) {
-      rv = nghttp2_bufs_addb(bufs, (uint8_t)code);
-      if (rv != 0) {
-        return rv;
-      }
-      *avail_ptr = nghttp2_bufs_cur_avail(bufs);
-      return 8;
-    }
-
-    rv = nghttp2_bufs_addb_hold(bufs, (uint8_t)code);
-    if (rv != 0) {
-      return rv;
-    }
-    *avail_ptr = nghttp2_bufs_cur_avail(bufs);
-    return (ssize_t)(8 - nbits);
-  }
-
-  /* fast path, since most code is less than 8 */
-  if (nbits < 8) {
-    nghttp2_bufs_fast_addb_hold(bufs, (uint8_t)code);
-    *avail_ptr = nghttp2_bufs_cur_avail(bufs);
-    return (ssize_t)(8 - nbits);
-  }
-
-  /* handle longer code path */
-  if (nbits > 24) {
-    nghttp2_bufs_fast_addb(bufs, (uint8_t)(code >> 24));
-    nbits -= 8;
-  }
-
-  if (nbits > 16) {
-    nghttp2_bufs_fast_addb(bufs, (uint8_t)(code >> 16));
-    nbits -= 8;
-  }
-
-  if (nbits > 8) {
-    nghttp2_bufs_fast_addb(bufs, (uint8_t)(code >> 8));
-    nbits -= 8;
-  }
-
-  if (nbits == 8) {
-    nghttp2_bufs_fast_addb(bufs, (uint8_t)code);
-    *avail_ptr = nghttp2_bufs_cur_avail(bufs);
-    return 8;
-  }
-
-  nghttp2_bufs_fast_addb_hold(bufs, (uint8_t)code);
-  *avail_ptr = nghttp2_bufs_cur_avail(bufs);
-  return (ssize_t)(8 - nbits);
-}
+#include "nghttp2_net.h"
 
 size_t nghttp2_hd_huff_encode_count(const uint8_t *src, size_t len) {
   size_t i;
   size_t nbits = 0;
 
   for (i = 0; i < len; ++i) {
     nbits += huff_sym_table[src[i]].nbits;
   }
   /* pad the prefix of EOS (256) */
   return (nbits + 7) / 8;
 }
 
 int nghttp2_hd_huff_encode(nghttp2_bufs *bufs, const uint8_t *src,
                            size_t srclen) {
-  int rv;
-  ssize_t rembits = 8;
-  size_t i;
+  const nghttp2_huff_sym *sym;
+  const uint8_t *end = src + srclen;
+  uint64_t code = 0;
+  uint32_t x;
+  size_t nbits = 0;
   size_t avail;
+  int rv;
 
   avail = nghttp2_bufs_cur_avail(bufs);
 
-  for (i = 0; i < srclen; ++i) {
-    const nghttp2_huff_sym *sym = &huff_sym_table[src[i]];
-    if (rembits == 8) {
-      if (avail) {
-        nghttp2_bufs_fast_addb_hold(bufs, 0);
-      } else {
-        rv = nghttp2_bufs_addb_hold(bufs, 0);
-        if (rv != 0) {
-          return rv;
-        }
-        avail = nghttp2_bufs_cur_avail(bufs);
+  for (; src != end;) {
+    sym = &huff_sym_table[*src++];
+    code |= (uint64_t)sym->code << (32 - nbits);
+    nbits += sym->nbits;
+    if (nbits < 32) {
+      continue;
+    }
+    if (avail >= 4) {
+      x = htonl((uint32_t)(code >> 32));
+      memcpy(bufs->cur->buf.last, &x, 4);
+      bufs->cur->buf.last += 4;
+      avail -= 4;
+      code <<= 32;
+      nbits -= 32;
+      continue;
+    }
+
+    for (; nbits >= 8;) {
+      rv = nghttp2_bufs_addb(bufs, (uint8_t)(code >> 56));
+      if (rv != 0) {
+        return rv;
       }
+      code <<= 8;
+      nbits -= 8;
     }
-    rembits = huff_encode_sym(bufs, &avail, (size_t)rembits, sym);
-    if (rembits < 0) {
-      return (int)rembits;
+
+    avail = nghttp2_bufs_cur_avail(bufs);
+  }
+
+  for (; nbits >= 8;) {
+    rv = nghttp2_bufs_addb(bufs, (uint8_t)(code >> 56));
+    if (rv != 0) {
+      return rv;
     }
+    code <<= 8;
+    nbits -= 8;
   }
-  /* 256 is special terminal symbol, pad with its prefix */
-  if (rembits < 8) {
-    /* if rembits < 8, we should have at least 1 buffer space
-       available */
-    const nghttp2_huff_sym *sym = &huff_sym_table[256];
-    assert(avail);
-    /* Caution we no longer adjust avail here */
-    nghttp2_bufs_fast_orb(
-        bufs, (uint8_t)(sym->code >> (sym->nbits - (size_t)rembits)));
+
+  if (nbits) {
+    rv = nghttp2_bufs_addb(
+        bufs, (uint8_t)((uint8_t)(code >> 56) | ((1 << (8 - nbits)) - 1)));
+    if (rv != 0) {
+      return rv;
+    }
   }
 
   return 0;
 }
 
 void nghttp2_hd_huff_decode_context_init(nghttp2_hd_huff_decode_context *ctx) {
-  ctx->state = 0;
-  ctx->accept = 1;
+  ctx->fstate = NGHTTP2_HUFF_ACCEPTED;
 }
 
 ssize_t nghttp2_hd_huff_decode(nghttp2_hd_huff_decode_context *ctx,
                                nghttp2_buf *buf, const uint8_t *src,
                                size_t srclen, int final) {
-  size_t i;
+  const uint8_t *end = src + srclen;
+  nghttp2_huff_decode node = {ctx->fstate, 0};
+  const nghttp2_huff_decode *t = &node;
+  uint8_t c;
 
   /* We use the decoding algorithm described in
      http://graphics.ics.uci.edu/pub/Prefix.pdf */
-  for (i = 0; i < srclen; ++i) {
-    const nghttp2_huff_decode *t;
-
-    t = &huff_decode_table[ctx->state][src[i] >> 4];
-    if (t->flags & NGHTTP2_HUFF_FAIL) {
-      return NGHTTP2_ERR_HEADER_COMP;
-    }
-    if (t->flags & NGHTTP2_HUFF_SYM) {
+  for (; src != end;) {
+    c = *src++;
+    t = &huff_decode_table[t->fstate & 0x1ff][c >> 4];
+    if (t->fstate & NGHTTP2_HUFF_SYM) {
       *buf->last++ = t->sym;
     }
 
-    t = &huff_decode_table[t->state][src[i] & 0xf];
-    if (t->flags & NGHTTP2_HUFF_FAIL) {
-      return NGHTTP2_ERR_HEADER_COMP;
-    }
-    if (t->flags & NGHTTP2_HUFF_SYM) {
+    t = &huff_decode_table[t->fstate & 0x1ff][c & 0xf];
+    if (t->fstate & NGHTTP2_HUFF_SYM) {
       *buf->last++ = t->sym;
     }
-
-    ctx->state = t->state;
-    ctx->accept = (t->flags & NGHTTP2_HUFF_ACCEPTED) != 0;
   }
-  if (final && !ctx->accept) {
+
+  ctx->fstate = t->fstate;
+
+  if (final && !(ctx->fstate & NGHTTP2_HUFF_ACCEPTED)) {
     return NGHTTP2_ERR_HEADER_COMP;
   }
-  return (ssize_t)i;
+
+  return (ssize_t)srclen;
+}
+
+int nghttp2_hd_huff_decode_failure_state(nghttp2_hd_huff_decode_context *ctx) {
+  return ctx->fstate == 0x100;
 }
diff --git a/deps/nghttp2/lib/nghttp2_hd_huffman.h b/deps/nghttp2/lib/nghttp2_hd_huffman.h
index c6e3942e95..2bfd531816 100644
--- a/deps/nghttp2/lib/nghttp2_hd_huffman.h
+++ b/deps/nghttp2/lib/nghttp2_hd_huffman.h
@@ -17,61 +17,56 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 #ifndef NGHTTP2_HD_HUFFMAN_H
 #define NGHTTP2_HD_HUFFMAN_H
 
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif /* HAVE_CONFIG_H */
 
 #include <nghttp2/nghttp2.h>
 
 typedef enum {
   /* FSA accepts this state as the end of huffman encoding
      sequence. */
-  NGHTTP2_HUFF_ACCEPTED = 1,
+  NGHTTP2_HUFF_ACCEPTED = 1 << 14,
   /* This state emits symbol */
-  NGHTTP2_HUFF_SYM = (1 << 1),
-  /* If state machine reaches this state, decoding fails. */
-  NGHTTP2_HUFF_FAIL = (1 << 2)
+  NGHTTP2_HUFF_SYM = 1 << 15,
 } nghttp2_huff_decode_flag;
 
 typedef struct {
-  /* huffman decoding state, which is actually the node ID of internal
-     huffman tree.  We have 257 leaf nodes, but they are identical to
-     root node other than emitting a symbol, so we have 256 internal
-     nodes [1..255], inclusive. */
-  uint8_t state;
-  /* bitwise OR of zero or more of the nghttp2_huff_decode_flag */
-  uint8_t flags;
+  /* fstate is the current huffman decoding state, which is actually
+     the node ID of internal huffman tree with
+     nghttp2_huff_decode_flag OR-ed.  We have 257 leaf nodes, but they
+     are identical to root node other than emitting a symbol, so we
+     have 256 internal nodes [1..255], inclusive.  The node ID 256 is
+     a special node and it is a terminal state that means decoding
+     failed. */
+  uint16_t fstate;
   /* symbol if NGHTTP2_HUFF_SYM flag set */
   uint8_t sym;
 } nghttp2_huff_decode;
 
 typedef nghttp2_huff_decode huff_decode_table_type[16];
 
 typedef struct {
-  /* Current huffman decoding state. We stripped leaf nodes, so the
-     value range is [0..255], inclusive. */
-  uint8_t state;
-  /* nonzero if we can say that the decoding process succeeds at this
-     state */
-  uint8_t accept;
+  /* fstate is the current huffman decoding state. */
+  uint16_t fstate;
 } nghttp2_hd_huff_decode_context;
 
 typedef struct {
   /* The number of bits in this code */
   uint32_t nbits;
   /* Huffman code aligned to LSB */
   uint32_t code;
 } nghttp2_huff_sym;
 
 extern const nghttp2_huff_sym huff_sym_table[];
 extern const nghttp2_huff_decode huff_decode_table[][16];
 
 #endif /* NGHTTP2_HD_HUFFMAN_H */
diff --git a/deps/nghttp2/lib/nghttp2_hd_huffman_data.c b/deps/nghttp2/lib/nghttp2_hd_huffman_data.c
index 5ef4a956b9..2e2e13f7be 100644
--- a/deps/nghttp2/lib/nghttp2_hd_huffman_data.c
+++ b/deps/nghttp2/lib/nghttp2_hd_huffman_data.c
@@ -10,4952 +10,4971 @@
  * distribute, sublicense, and/or sell copies of the Software, and to
  * permit persons to whom the Software is furnished to do so, subject to
  * the following conditions:
  *
  * The above copyright notice and this permission notice shall be
  * included in all copies or substantial portions of the Software.
  *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 #include "nghttp2_hd_huffman.h"
 
 /* Generated by mkhufftbl.py */
 
 const nghttp2_huff_sym huff_sym_table[] = {
-    {13, 0x1ff8u},    {23, 0x7fffd8u},   {28, 0xfffffe2u},  {28, 0xfffffe3u},
-    {28, 0xfffffe4u}, {28, 0xfffffe5u},  {28, 0xfffffe6u},  {28, 0xfffffe7u},
-    {28, 0xfffffe8u}, {24, 0xffffeau},   {30, 0x3ffffffcu}, {28, 0xfffffe9u},
-    {28, 0xfffffeau}, {30, 0x3ffffffdu}, {28, 0xfffffebu},  {28, 0xfffffecu},
-    {28, 0xfffffedu}, {28, 0xfffffeeu},  {28, 0xfffffefu},  {28, 0xffffff0u},
-    {28, 0xffffff1u}, {28, 0xffffff2u},  {30, 0x3ffffffeu}, {28, 0xffffff3u},
-    {28, 0xffffff4u}, {28, 0xffffff5u},  {28, 0xffffff6u},  {28, 0xffffff7u},
-    {28, 0xffffff8u}, {28, 0xffffff9u},  {28, 0xffffffau},  {28, 0xffffffbu},
-    {6, 0x14u},       {10, 0x3f8u},      {10, 0x3f9u},      {12, 0xffau},
-    {13, 0x1ff9u},    {6, 0x15u},        {8, 0xf8u},        {11, 0x7fau},
-    {10, 0x3fau},     {10, 0x3fbu},      {8, 0xf9u},        {11, 0x7fbu},
-    {8, 0xfau},       {6, 0x16u},        {6, 0x17u},        {6, 0x18u},
-    {5, 0x0u},        {5, 0x1u},         {5, 0x2u},         {6, 0x19u},
-    {6, 0x1au},       {6, 0x1bu},        {6, 0x1cu},        {6, 0x1du},
-    {6, 0x1eu},       {6, 0x1fu},        {7, 0x5cu},        {8, 0xfbu},
-    {15, 0x7ffcu},    {6, 0x20u},        {12, 0xffbu},      {10, 0x3fcu},
-    {13, 0x1ffau},    {6, 0x21u},        {7, 0x5du},        {7, 0x5eu},
-    {7, 0x5fu},       {7, 0x60u},        {7, 0x61u},        {7, 0x62u},
-    {7, 0x63u},       {7, 0x64u},        {7, 0x65u},        {7, 0x66u},
-    {7, 0x67u},       {7, 0x68u},        {7, 0x69u},        {7, 0x6au},
-    {7, 0x6bu},       {7, 0x6cu},        {7, 0x6du},        {7, 0x6eu},
-    {7, 0x6fu},       {7, 0x70u},        {7, 0x71u},        {7, 0x72u},
-    {8, 0xfcu},       {7, 0x73u},        {8, 0xfdu},        {13, 0x1ffbu},
-    {19, 0x7fff0u},   {13, 0x1ffcu},     {14, 0x3ffcu},     {6, 0x22u},
-    {15, 0x7ffdu},    {5, 0x3u},         {6, 0x23u},        {5, 0x4u},
-    {6, 0x24u},       {5, 0x5u},         {6, 0x25u},        {6, 0x26u},
-    {6, 0x27u},       {5, 0x6u},         {7, 0x74u},        {7, 0x75u},
-    {6, 0x28u},       {6, 0x29u},        {6, 0x2au},        {5, 0x7u},
-    {6, 0x2bu},       {7, 0x76u},        {6, 0x2cu},        {5, 0x8u},
-    {5, 0x9u},        {6, 0x2du},        {7, 0x77u},        {7, 0x78u},
-    {7, 0x79u},       {7, 0x7au},        {7, 0x7bu},        {15, 0x7ffeu},
-    {11, 0x7fcu},     {14, 0x3ffdu},     {13, 0x1ffdu},     {28, 0xffffffcu},
-    {20, 0xfffe6u},   {22, 0x3fffd2u},   {20, 0xfffe7u},    {20, 0xfffe8u},
-    {22, 0x3fffd3u},  {22, 0x3fffd4u},   {22, 0x3fffd5u},   {23, 0x7fffd9u},
-    {22, 0x3fffd6u},  {23, 0x7fffdau},   {23, 0x7fffdbu},   {23, 0x7fffdcu},
-    {23, 0x7fffddu},  {23, 0x7fffdeu},   {24, 0xffffebu},   {23, 0x7fffdfu},
-    {24, 0xffffecu},  {24, 0xffffedu},   {22, 0x3fffd7u},   {23, 0x7fffe0u},
-    {24, 0xffffeeu},  {23, 0x7fffe1u},   {23, 0x7fffe2u},   {23, 0x7fffe3u},
-    {23, 0x7fffe4u},  {21, 0x1fffdcu},   {22, 0x3fffd8u},   {23, 0x7fffe5u},
-    {22, 0x3fffd9u},  {23, 0x7fffe6u},   {23, 0x7fffe7u},   {24, 0xffffefu},
-    {22, 0x3fffdau},  {21, 0x1fffddu},   {20, 0xfffe9u},    {22, 0x3fffdbu},
-    {22, 0x3fffdcu},  {23, 0x7fffe8u},   {23, 0x7fffe9u},   {21, 0x1fffdeu},
-    {23, 0x7fffeau},  {22, 0x3fffddu},   {22, 0x3fffdeu},   {24, 0xfffff0u},
-    {21, 0x1fffdfu},  {22, 0x3fffdfu},   {23, 0x7fffebu},   {23, 0x7fffecu},
-    {21, 0x1fffe0u},  {21, 0x1fffe1u},   {22, 0x3fffe0u},   {21, 0x1fffe2u},
-    {23, 0x7fffedu},  {22, 0x3fffe1u},   {23, 0x7fffeeu},   {23, 0x7fffefu},
-    {20, 0xfffeau},   {22, 0x3fffe2u},   {22, 0x3fffe3u},   {22, 0x3fffe4u},
-    {23, 0x7ffff0u},  {22, 0x3fffe5u},   {22, 0x3fffe6u},   {23, 0x7ffff1u},
-    {26, 0x3ffffe0u}, {26, 0x3ffffe1u},  {20, 0xfffebu},    {19, 0x7fff1u},
-    {22, 0x3fffe7u},  {23, 0x7ffff2u},   {22, 0x3fffe8u},   {25, 0x1ffffecu},
-    {26, 0x3ffffe2u}, {26, 0x3ffffe3u},  {26, 0x3ffffe4u},  {27, 0x7ffffdeu},
-    {27, 0x7ffffdfu}, {26, 0x3ffffe5u},  {24, 0xfffff1u},   {25, 0x1ffffedu},
-    {19, 0x7fff2u},   {21, 0x1fffe3u},   {26, 0x3ffffe6u},  {27, 0x7ffffe0u},
-    {27, 0x7ffffe1u}, {26, 0x3ffffe7u},  {27, 0x7ffffe2u},  {24, 0xfffff2u},
-    {21, 0x1fffe4u},  {21, 0x1fffe5u},   {26, 0x3ffffe8u},  {26, 0x3ffffe9u},
-    {28, 0xffffffdu}, {27, 0x7ffffe3u},  {27, 0x7ffffe4u},  {27, 0x7ffffe5u},
-    {20, 0xfffecu},   {24, 0xfffff3u},   {20, 0xfffedu},    {21, 0x1fffe6u},
-    {22, 0x3fffe9u},  {21, 0x1fffe7u},   {21, 0x1fffe8u},   {23, 0x7ffff3u},
-    {22, 0x3fffeau},  {22, 0x3fffebu},   {25, 0x1ffffeeu},  {25, 0x1ffffefu},
-    {24, 0xfffff4u},  {24, 0xfffff5u},   {26, 0x3ffffeau},  {23, 0x7ffff4u},
-    {26, 0x3ffffebu}, {27, 0x7ffffe6u},  {26, 0x3ffffecu},  {26, 0x3ffffedu},
-    {27, 0x7ffffe7u}, {27, 0x7ffffe8u},  {27, 0x7ffffe9u},  {27, 0x7ffffeau},
-    {27, 0x7ffffebu}, {28, 0xffffffeu},  {27, 0x7ffffecu},  {27, 0x7ffffedu},
-    {27, 0x7ffffeeu}, {27, 0x7ffffefu},  {27, 0x7fffff0u},  {26, 0x3ffffeeu},
-    {30, 0x3fffffffu}};
+    {13, 0xffc00000u}, {23, 0xffffb000u}, {28, 0xfffffe20u}, {28, 0xfffffe30u},
+    {28, 0xfffffe40u}, {28, 0xfffffe50u}, {28, 0xfffffe60u}, {28, 0xfffffe70u},
+    {28, 0xfffffe80u}, {24, 0xffffea00u}, {30, 0xfffffff0u}, {28, 0xfffffe90u},
+    {28, 0xfffffea0u}, {30, 0xfffffff4u}, {28, 0xfffffeb0u}, {28, 0xfffffec0u},
+    {28, 0xfffffed0u}, {28, 0xfffffee0u}, {28, 0xfffffef0u}, {28, 0xffffff00u},
+    {28, 0xffffff10u}, {28, 0xffffff20u}, {30, 0xfffffff8u}, {28, 0xffffff30u},
+    {28, 0xffffff40u}, {28, 0xffffff50u}, {28, 0xffffff60u}, {28, 0xffffff70u},
+    {28, 0xffffff80u}, {28, 0xffffff90u}, {28, 0xffffffa0u}, {28, 0xffffffb0u},
+    {6, 0x50000000u},  {10, 0xfe000000u}, {10, 0xfe400000u}, {12, 0xffa00000u},
+    {13, 0xffc80000u}, {6, 0x54000000u},  {8, 0xf8000000u},  {11, 0xff400000u},
+    {10, 0xfe800000u}, {10, 0xfec00000u}, {8, 0xf9000000u},  {11, 0xff600000u},
+    {8, 0xfa000000u},  {6, 0x58000000u},  {6, 0x5c000000u},  {6, 0x60000000u},
+    {5, 0x0u},         {5, 0x8000000u},   {5, 0x10000000u},  {6, 0x64000000u},
+    {6, 0x68000000u},  {6, 0x6c000000u},  {6, 0x70000000u},  {6, 0x74000000u},
+    {6, 0x78000000u},  {6, 0x7c000000u},  {7, 0xb8000000u},  {8, 0xfb000000u},
+    {15, 0xfff80000u}, {6, 0x80000000u},  {12, 0xffb00000u}, {10, 0xff000000u},
+    {13, 0xffd00000u}, {6, 0x84000000u},  {7, 0xba000000u},  {7, 0xbc000000u},
+    {7, 0xbe000000u},  {7, 0xc0000000u},  {7, 0xc2000000u},  {7, 0xc4000000u},
+    {7, 0xc6000000u},  {7, 0xc8000000u},  {7, 0xca000000u},  {7, 0xcc000000u},
+    {7, 0xce000000u},  {7, 0xd0000000u},  {7, 0xd2000000u},  {7, 0xd4000000u},
+    {7, 0xd6000000u},  {7, 0xd8000000u},  {7, 0xda000000u},  {7, 0xdc000000u},
+    {7, 0xde000000u},  {7, 0xe0000000u},  {7, 0xe2000000u},  {7, 0xe4000000u},
+    {8, 0xfc000000u},  {7, 0xe6000000u},  {8, 0xfd000000u},  {13, 0xffd80000u},
+    {19, 0xfffe0000u}, {13, 0xffe00000u}, {14, 0xfff00000u}, {6, 0x88000000u},
+    {15, 0xfffa0000u}, {5, 0x18000000u},  {6, 0x8c000000u},  {5, 0x20000000u},
+    {6, 0x90000000u},  {5, 0x28000000u},  {6, 0x94000000u},  {6, 0x98000000u},
+    {6, 0x9c000000u},  {5, 0x30000000u},  {7, 0xe8000000u},  {7, 0xea000000u},
+    {6, 0xa0000000u},  {6, 0xa4000000u},  {6, 0xa8000000u},  {5, 0x38000000u},
+    {6, 0xac000000u},  {7, 0xec000000u},  {6, 0xb0000000u},  {5, 0x40000000u},
+    {5, 0x48000000u},  {6, 0xb4000000u},  {7, 0xee000000u},  {7, 0xf0000000u},
+    {7, 0xf2000000u},  {7, 0xf4000000u},  {7, 0xf6000000u},  {15, 0xfffc0000u},
+    {11, 0xff800000u}, {14, 0xfff40000u}, {13, 0xffe80000u}, {28, 0xffffffc0u},
+    {20, 0xfffe6000u}, {22, 0xffff4800u}, {20, 0xfffe7000u}, {20, 0xfffe8000u},
+    {22, 0xffff4c00u}, {22, 0xffff5000u}, {22, 0xffff5400u}, {23, 0xffffb200u},
+    {22, 0xffff5800u}, {23, 0xffffb400u}, {23, 0xffffb600u}, {23, 0xffffb800u},
+    {23, 0xffffba00u}, {23, 0xffffbc00u}, {24, 0xffffeb00u}, {23, 0xffffbe00u},
+    {24, 0xffffec00u}, {24, 0xffffed00u}, {22, 0xffff5c00u}, {23, 0xffffc000u},
+    {24, 0xffffee00u}, {23, 0xffffc200u}, {23, 0xffffc400u}, {23, 0xffffc600u},
+    {23, 0xffffc800u}, {21, 0xfffee000u}, {22, 0xffff6000u}, {23, 0xffffca00u},
+    {22, 0xffff6400u}, {23, 0xffffcc00u}, {23, 0xffffce00u}, {24, 0xffffef00u},
+    {22, 0xffff6800u}, {21, 0xfffee800u}, {20, 0xfffe9000u}, {22, 0xffff6c00u},
+    {22, 0xffff7000u}, {23, 0xffffd000u}, {23, 0xffffd200u}, {21, 0xfffef000u},
+    {23, 0xffffd400u}, {22, 0xffff7400u}, {22, 0xffff7800u}, {24, 0xfffff000u},
+    {21, 0xfffef800u}, {22, 0xffff7c00u}, {23, 0xffffd600u}, {23, 0xffffd800u},
+    {21, 0xffff0000u}, {21, 0xffff0800u}, {22, 0xffff8000u}, {21, 0xffff1000u},
+    {23, 0xffffda00u}, {22, 0xffff8400u}, {23, 0xffffdc00u}, {23, 0xffffde00u},
+    {20, 0xfffea000u}, {22, 0xffff8800u}, {22, 0xffff8c00u}, {22, 0xffff9000u},
+    {23, 0xffffe000u}, {22, 0xffff9400u}, {22, 0xffff9800u}, {23, 0xffffe200u},
+    {26, 0xfffff800u}, {26, 0xfffff840u}, {20, 0xfffeb000u}, {19, 0xfffe2000u},
+    {22, 0xffff9c00u}, {23, 0xffffe400u}, {22, 0xffffa000u}, {25, 0xfffff600u},
+    {26, 0xfffff880u}, {26, 0xfffff8c0u}, {26, 0xfffff900u}, {27, 0xfffffbc0u},
+    {27, 0xfffffbe0u}, {26, 0xfffff940u}, {24, 0xfffff100u}, {25, 0xfffff680u},
+    {19, 0xfffe4000u}, {21, 0xffff1800u}, {26, 0xfffff980u}, {27, 0xfffffc00u},
+    {27, 0xfffffc20u}, {26, 0xfffff9c0u}, {27, 0xfffffc40u}, {24, 0xfffff200u},
+    {21, 0xffff2000u}, {21, 0xffff2800u}, {26, 0xfffffa00u}, {26, 0xfffffa40u},
+    {28, 0xffffffd0u}, {27, 0xfffffc60u}, {27, 0xfffffc80u}, {27, 0xfffffca0u},
+    {20, 0xfffec000u}, {24, 0xfffff300u}, {20, 0xfffed000u}, {21, 0xffff3000u},
+    {22, 0xffffa400u}, {21, 0xffff3800u}, {21, 0xffff4000u}, {23, 0xffffe600u},
+    {22, 0xffffa800u}, {22, 0xffffac00u}, {25, 0xfffff700u}, {25, 0xfffff780u},
+    {24, 0xfffff400u}, {24, 0xfffff500u}, {26, 0xfffffa80u}, {23, 0xffffe800u},
+    {26, 0xfffffac0u}, {27, 0xfffffcc0u}, {26, 0xfffffb00u}, {26, 0xfffffb40u},
+    {27, 0xfffffce0u}, {27, 0xfffffd00u}, {27, 0xfffffd20u}, {27, 0xfffffd40u},
+    {27, 0xfffffd60u}, {28, 0xffffffe0u}, {27, 0xfffffd80u}, {27, 0xfffffda0u},
+    {27, 0xfffffdc0u}, {27, 0xfffffde0u}, {27, 0xfffffe00u}, {26, 0xfffffb80u},
+    {30, 0xfffffffcu}};
 
 const nghttp2_huff_decode huff_decode_table[][16] = {
     /* 0 */
     {
-        {4, 0x00, 0},
-        {5, 0x00, 0},
-        {7, 0x00, 0},
-        {8, 0x00, 0},
-        {11, 0x00, 0},
-        {12, 0x00, 0},
-        {16, 0x00, 0},
-        {19, 0x00, 0},
-        {25, 0x00, 0},
-        {28, 0x00, 0},
-        {32, 0x00, 0},
-        {35, 0x00, 0},
-        {42, 0x00, 0},
-        {49, 0x00, 0},
-        {57, 0x00, 0},
-        {64, 0x01, 0},
+        {0x04, 0},
+        {0x05, 0},
+        {0x07, 0},
+        {0x08, 0},
+        {0x0b, 0},
+        {0x0c, 0},
+        {0x10, 0},
+        {0x13, 0},
+        {0x19, 0},
+        {0x1c, 0},
+        {0x20, 0},
+        {0x23, 0},
+        {0x2a, 0},
+        {0x31, 0},
+        {0x39, 0},
+        {0x4040, 0},
     },
     /* 1 */
     {
-        {0, 0x03, 48},
-        {0, 0x03, 49},
-        {0, 0x03, 50},
-        {0, 0x03, 97},
-        {0, 0x03, 99},
-        {0, 0x03, 101},
-        {0, 0x03, 105},
-        {0, 0x03, 111},
-        {0, 0x03, 115},
-        {0, 0x03, 116},
-        {13, 0x00, 0},
-        {14, 0x00, 0},
-        {17, 0x00, 0},
-        {18, 0x00, 0},
-        {20, 0x00, 0},
-        {21, 0x00, 0},
+        {0xc000, 48},
+        {0xc000, 49},
+        {0xc000, 50},
+        {0xc000, 97},
+        {0xc000, 99},
+        {0xc000, 101},
+        {0xc000, 105},
+        {0xc000, 111},
+        {0xc000, 115},
+        {0xc000, 116},
+        {0x0d, 0},
+        {0x0e, 0},
+        {0x11, 0},
+        {0x12, 0},
+        {0x14, 0},
+        {0x15, 0},
     },
     /* 2 */
     {
-        {1, 0x02, 48},
-        {22, 0x03, 48},
-        {1, 0x02, 49},
-        {22, 0x03, 49},
-        {1, 0x02, 50},
-        {22, 0x03, 50},
-        {1, 0x02, 97},
-        {22, 0x03, 97},
-        {1, 0x02, 99},
-        {22, 0x03, 99},
-        {1, 0x02, 101},
-        {22, 0x03, 101},
-        {1, 0x02, 105},
-        {22, 0x03, 105},
-        {1, 0x02, 111},
-        {22, 0x03, 111},
+        {0x8001, 48},
+        {0xc016, 48},
+        {0x8001, 49},
+        {0xc016, 49},
+        {0x8001, 50},
+        {0xc016, 50},
+        {0x8001, 97},
+        {0xc016, 97},
+        {0x8001, 99},
+        {0xc016, 99},
+        {0x8001, 101},
+        {0xc016, 101},
+        {0x8001, 105},
+        {0xc016, 105},
+        {0x8001, 111},
+        {0xc016, 111},
     },
     /* 3 */
     {
-        {2, 0x02, 48},
-        {9, 0x02, 48},
-        {23, 0x02, 48},
-        {40, 0x03, 48},
-        {2, 0x02, 49},
-        {9, 0x02, 49},
-        {23, 0x02, 49},
-        {40, 0x03, 49},
-        {2, 0x02, 50},
-        {9, 0x02, 50},
-        {23, 0x02, 50},
-        {40, 0x03, 50},
-        {2, 0x02, 97},
-        {9, 0x02, 97},
-        {23, 0x02, 97},
-        {40, 0x03, 97},
+        {0x8002, 48},
+        {0x8009, 48},
+        {0x8017, 48},
+        {0xc028, 48},
+        {0x8002, 49},
+        {0x8009, 49},
+        {0x8017, 49},
+        {0xc028, 49},
+        {0x8002, 50},
+        {0x8009, 50},
+        {0x8017, 50},
+        {0xc028, 50},
+        {0x8002, 97},
+        {0x8009, 97},
+        {0x8017, 97},
+        {0xc028, 97},
     },
     /* 4 */
     {
-        {3, 0x02, 48},
-        {6, 0x02, 48},
-        {10, 0x02, 48},
-        {15, 0x02, 48},
-        {24, 0x02, 48},
-        {31, 0x02, 48},
-        {41, 0x02, 48},
-        {56, 0x03, 48},
-        {3, 0x02, 49},
-        {6, 0x02, 49},
-        {10, 0x02, 49},
-        {15, 0x02, 49},
-        {24, 0x02, 49},
-        {31, 0x02, 49},
-        {41, 0x02, 49},
-        {56, 0x03, 49},
+        {0x8003, 48},
+        {0x8006, 48},
+        {0x800a, 48},
+        {0x800f, 48},
+        {0x8018, 48},
+        {0x801f, 48},
+        {0x8029, 48},
+        {0xc038, 48},
+        {0x8003, 49},
+        {0x8006, 49},
+        {0x800a, 49},
+        {0x800f, 49},
+        {0x8018, 49},
+        {0x801f, 49},
+        {0x8029, 49},
+        {0xc038, 49},
     },
     /* 5 */
     {
-        {3, 0x02, 50},
-        {6, 0x02, 50},
-        {10, 0x02, 50},
-        {15, 0x02, 50},
-        {24, 0x02, 50},
-        {31, 0x02, 50},
-        {41, 0x02, 50},
-        {56, 0x03, 50},
-        {3, 0x02, 97},
-        {6, 0x02, 97},
-        {10, 0x02, 97},
-        {15, 0x02, 97},
-        {24, 0x02, 97},
-        {31, 0x02, 97},
-        {41, 0x02, 97},
-        {56, 0x03, 97},
+        {0x8003, 50},
+        {0x8006, 50},
+        {0x800a, 50},
+        {0x800f, 50},
+        {0x8018, 50},
+        {0x801f, 50},
+        {0x8029, 50},
+        {0xc038, 50},
+        {0x8003, 97},
+        {0x8006, 97},
+        {0x800a, 97},
+        {0x800f, 97},
+        {0x8018, 97},
+        {0x801f, 97},
+        {0x8029, 97},
+        {0xc038, 97},
     },
     /* 6 */
     {
-        {2, 0x02, 99},
-        {9, 0x02, 99},
-        {23, 0x02, 99},
-        {40, 0x03, 99},
-        {2, 0x02, 101},
-        {9, 0x02, 101},
-        {23, 0x02, 101},
-        {40, 0x03, 101},
-        {2, 0x02, 105},
-        {9, 0x02, 105},
-        {23, 0x02, 105},
-        {40, 0x03, 105},
-        {2, 0x02, 111},
-        {9, 0x02, 111},
-        {23, 0x02, 111},
-        {40, 0x03, 111},
+        {0x8002, 99},
+        {0x8009, 99},
+        {0x8017, 99},
+        {0xc028, 99},
+        {0x8002, 101},
+        {0x8009, 101},
+        {0x8017, 101},
+        {0xc028, 101},
+        {0x8002, 105},
+        {0x8009, 105},
+        {0x8017, 105},
+        {0xc028, 105},
+        {0x8002, 111},
+        {0x8009, 111},
+        {0x8017, 111},
+        {0xc028, 111},
     },
     /* 7 */
     {
-        {3, 0x02, 99},
-        {6, 0x02, 99},
-        {10, 0x02, 99},
-        {15, 0x02, 99},
-        {24, 0x02, 99},
-        {31, 0x02, 99},
-        {41, 0x02, 99},
-        {56, 0x03, 99},
-        {3, 0x02, 101},
-        {6, 0x02, 101},
-        {10, 0x02, 101},
-        {15, 0x02, 101},
-        {24, 0x02, 101},
-        {31, 0x02, 101},
-        {41, 0x02, 101},
-        {56, 0x03, 101},
+        {0x8003, 99},
+        {0x8006, 99},
+        {0x800a, 99},
+        {0x800f, 99},
+        {0x8018, 99},
+        {0x801f, 99},
+        {0x8029, 99},
+        {0xc038, 99},
+        {0x8003, 101},
+        {0x8006, 101},
+        {0x800a, 101},
+        {0x800f, 101},
+        {0x8018, 101},
+        {0x801f, 101},
+        {0x8029, 101},
+        {0xc038, 101},
     },
     /* 8 */
     {
-        {3, 0x02, 105},
-        {6, 0x02, 105},
-        {10, 0x02, 105},
-        {15, 0x02, 105},
-        {24, 0x02, 105},
-        {31, 0x02, 105},
-        {41, 0x02, 105},
-        {56, 0x03, 105},
-        {3, 0x02, 111},
-        {6, 0x02, 111},
-        {10, 0x02, 111},
-        {15, 0x02, 111},
-        {24, 0x02, 111},
-        {31, 0x02, 111},
-        {41, 0x02, 111},
-        {56, 0x03, 111},
+        {0x8003, 105},
+        {0x8006, 105},
+        {0x800a, 105},
+        {0x800f, 105},
+        {0x8018, 105},
+        {0x801f, 105},
+        {0x8029, 105},
+        {0xc038, 105},
+        {0x8003, 111},
+        {0x8006, 111},
+        {0x800a, 111},
+        {0x800f, 111},
+        {0x8018, 111},
+        {0x801f, 111},
+        {0x8029, 111},
+        {0xc038, 111},
     },
     /* 9 */
     {
-        {1, 0x02, 115},
-        {22, 0x03, 115},
-        {1, 0x02, 116},
-        {22, 0x03, 116},
-        {0, 0x03, 32},
-        {0, 0x03, 37},
-        {0, 0x03, 45},
-        {0, 0x03, 46},
-        {0, 0x03, 47},
-        {0, 0x03, 51},
-        {0, 0x03, 52},
-        {0, 0x03, 53},
-        {0, 0x03, 54},
-        {0, 0x03, 55},
-        {0, 0x03, 56},
-        {0, 0x03, 57},
+        {0x8001, 115},
+        {0xc016, 115},
+        {0x8001, 116},
+        {0xc016, 116},
+        {0xc000, 32},
+        {0xc000, 37},
+        {0xc000, 45},
+        {0xc000, 46},
+        {0xc000, 47},
+        {0xc000, 51},
+        {0xc000, 52},
+        {0xc000, 53},
+        {0xc000, 54},
+        {0xc000, 55},
+        {0xc000, 56},
+        {0xc000, 57},
     },
     /* 10 */
     {
-        {2, 0x02, 115},
-        {9, 0x02, 115},
-        {23, 0x02, 115},
-        {40, 0x03, 115},
-        {2, 0x02, 116},
-        {9, 0x02, 116},
-        {23, 0x02, 116},
-        {40, 0x03, 116},
-        {1, 0x02, 32},
-        {22, 0x03, 32},
-        {1, 0x02, 37},
-        {22, 0x03, 37},
-        {1, 0x02, 45},
-        {22, 0x03, 45},
-        {1, 0x02, 46},
-        {22, 0x03, 46},
+        {0x8002, 115},
+        {0x8009, 115},
+        {0x8017, 115},
+        {0xc028, 115},
+        {0x8002, 116},
+        {0x8009, 116},
+        {0x8017, 116},
+        {0xc028, 116},
+        {0x8001, 32},
+        {0xc016, 32},
+        {0x8001, 37},
+        {0xc016, 37},
+        {0x8001, 45},
+        {0xc016, 45},
+        {0x8001, 46},
+        {0xc016, 46},
     },
     /* 11 */
     {
-        {3, 0x02, 115},
-        {6, 0x02, 115},
-        {10, 0x02, 115},
-        {15, 0x02, 115},
-        {24, 0x02, 115},
-        {31, 0x02, 115},
-        {41, 0x02, 115},
-        {56, 0x03, 115},
-        {3, 0x02, 116},
-        {6, 0x02, 116},
-        {10, 0x02, 116},
-        {15, 0x02, 116},
-        {24, 0x02, 116},
-        {31, 0x02, 116},
-        {41, 0x02, 116},
-        {56, 0x03, 116},
+        {0x8003, 115},
+        {0x8006, 115},
+        {0x800a, 115},
+        {0x800f, 115},
+        {0x8018, 115},
+        {0x801f, 115},
+        {0x8029, 115},
+        {0xc038, 115},
+        {0x8003, 116},
+        {0x8006, 116},
+        {0x800a, 116},
+        {0x800f, 116},
+        {0x8018, 116},
+        {0x801f, 116},
+        {0x8029, 116},
+        {0xc038, 116},
     },
     /* 12 */
     {
-        {2, 0x02, 32},
-        {9, 0x02, 32},
-        {23, 0x02, 32},
-        {40, 0x03, 32},
-        {2, 0x02, 37},
-        {9, 0x02, 37},
-        {23, 0x02, 37},
-        {40, 0x03, 37},
-        {2, 0x02, 45},
-        {9, 0x02, 45},
-        {23, 0x02, 45},
-        {40, 0x03, 45},
-        {2, 0x02, 46},
-        {9, 0x02, 46},
-        {23, 0x02, 46},
-        {40, 0x03, 46},
+        {0x8002, 32},
+        {0x8009, 32},
+        {0x8017, 32},
+        {0xc028, 32},
+        {0x8002, 37},
+        {0x8009, 37},
+        {0x8017, 37},
+        {0xc028, 37},
+        {0x8002, 45},
+        {0x8009, 45},
+        {0x8017, 45},
+        {0xc028, 45},
+        {0x8002, 46},
+        {0x8009, 46},
+        {0x8017, 46},
+        {0xc028, 46},
     },
     /* 13 */
     {
-        {3, 0x02, 32},
-        {6, 0x02, 32},
-        {10, 0x02, 32},
-        {15, 0x02, 32},
-        {24, 0x02, 32},
-        {31, 0x02, 32},
-        {41, 0x02, 32},
-        {56, 0x03, 32},
-        {3, 0x02, 37},
-        {6, 0x02, 37},
-        {10, 0x02, 37},
-        {15, 0x02, 37},
-        {24, 0x02, 37},
-        {31, 0x02, 37},
-        {41, 0x02, 37},
-        {56, 0x03, 37},
+        {0x8003, 32},
+        {0x8006, 32},
+        {0x800a, 32},
+        {0x800f, 32},
+        {0x8018, 32},
+        {0x801f, 32},
+        {0x8029, 32},
+        {0xc038, 32},
+        {0x8003, 37},
+        {0x8006, 37},
+        {0x800a, 37},
+        {0x800f, 37},
+        {0x8018, 37},
+        {0x801f, 37},
+        {0x8029, 37},
+        {0xc038, 37},
     },
     /* 14 */
     {
-        {3, 0x02, 45},
-        {6, 0x02, 45},
-        {10, 0x02, 45},
-        {15, 0x02, 45},
-        {24, 0x02, 45},
-        {31, 0x02, 45},
-        {41, 0x02, 45},
-        {56, 0x03, 45},
-        {3, 0x02, 46},
-        {6, 0x02, 46},
-        {10, 0x02, 46},
-        {15, 0x02, 46},
-        {24, 0x02, 46},
-        {31, 0x02, 46},
-        {41, 0x02, 46},
-        {56, 0x03, 46},
+        {0x8003, 45},
+        {0x8006, 45},
+        {0x800a, 45},
+        {0x800f, 45},
+        {0x8018, 45},
+        {0x801f, 45},
+        {0x8029, 45},
+        {0xc038, 45},
+        {0x8003, 46},
+        {0x8006, 46},
+        {0x800a, 46},
+        {0x800f, 46},
+        {0x8018, 46},
+        {0x801f, 46},
+        {0x8029, 46},
+        {0xc038, 46},
     },
     /* 15 */
     {
-        {1, 0x02, 47},
-        {22, 0x03, 47},
-        {1, 0x02, 51},
-        {22, 0x03, 51},
-        {1, 0x02, 52},
-        {22, 0x03, 52},
-        {1, 0x02, 53},
-        {22, 0x03, 53},
-        {1, 0x02, 54},
-        {22, 0x03, 54},
-        {1, 0x02, 55},
-        {22, 0x03, 55},
-        {1, 0x02, 56},
-        {22, 0x03, 56},
-        {1, 0x02, 57},
-        {22, 0x03, 57},
+        {0x8001, 47},
+        {0xc016, 47},
+        {0x8001, 51},
+        {0xc016, 51},
+        {0x8001, 52},
+        {0xc016, 52},
+        {0x8001, 53},
+        {0xc016, 53},
+        {0x8001, 54},
+        {0xc016, 54},
+        {0x8001, 55},
+        {0xc016, 55},
+        {0x8001, 56},
+        {0xc016, 56},
+        {0x8001, 57},
+        {0xc016, 57},
     },
     /* 16 */
     {
-        {2, 0x02, 47},
-        {9, 0x02, 47},
-        {23, 0x02, 47},
-        {40, 0x03, 47},
-        {2, 0x02, 51},
-        {9, 0x02, 51},
-        {23, 0x02, 51},
-        {40, 0x03, 51},
-        {2, 0x02, 52},
-        {9, 0x02, 52},
-        {23, 0x02, 52},
-        {40, 0x03, 52},
-        {2, 0x02, 53},
-        {9, 0x02, 53},
-        {23, 0x02, 53},
-        {40, 0x03, 53},
+        {0x8002, 47},
+        {0x8009, 47},
+        {0x8017, 47},
+        {0xc028, 47},
+        {0x8002, 51},
+        {0x8009, 51},
+        {0x8017, 51},
+        {0xc028, 51},
+        {0x8002, 52},
+        {0x8009, 52},
+        {0x8017, 52},
+        {0xc028, 52},
+        {0x8002, 53},
+        {0x8009, 53},
+        {0x8017, 53},
+        {0xc028, 53},
     },
     /* 17 */
     {
-        {3, 0x02, 47},
-        {6, 0x02, 47},
-        {10, 0x02, 47},
-        {15, 0x02, 47},
-        {24, 0x02, 47},
-        {31, 0x02, 47},
-        {41, 0x02, 47},
-        {56, 0x03, 47},
-        {3, 0x02, 51},
-        {6, 0x02, 51},
-        {10, 0x02, 51},
-        {15, 0x02, 51},
-        {24, 0x02, 51},
-        {31, 0x02, 51},
-        {41, 0x02, 51},
-        {56, 0x03, 51},
+        {0x8003, 47},
+        {0x8006, 47},
+        {0x800a, 47},
+        {0x800f, 47},
+        {0x8018, 47},
+        {0x801f, 47},
+        {0x8029, 47},
+        {0xc038, 47},
+        {0x8003, 51},
+        {0x8006, 51},
+        {0x800a, 51},
+        {0x800f, 51},
+        {0x8018, 51},
+        {0x801f, 51},
+        {0x8029, 51},
+        {0xc038, 51},
     },
     /* 18 */
     {
-        {3, 0x02, 52},
-        {6, 0x02, 52},
-        {10, 0x02, 52},
-        {15, 0x02, 52},
-        {24, 0x02, 52},
-        {31, 0x02, 52},
-        {41, 0x02, 52},
-        {56, 0x03, 52},
-        {3, 0x02, 53},
-        {6, 0x02, 53},
-        {10, 0x02, 53},
-        {15, 0x02, 53},
-        {24, 0x02, 53},
-        {31, 0x02, 53},
-        {41, 0x02, 53},
-        {56, 0x03, 53},
+        {0x8003, 52},
+        {0x8006, 52},
+        {0x800a, 52},
+        {0x800f, 52},
+        {0x8018, 52},
+        {0x801f, 52},
+        {0x8029, 52},
+        {0xc038, 52},
+        {0x8003, 53},
+        {0x8006, 53},
+        {0x800a, 53},
+        {0x800f, 53},
+        {0x8018, 53},
+        {0x801f, 53},
+        {0x8029, 53},
+        {0xc038, 53},
     },
     /* 19 */
     {
-        {2, 0x02, 54},
-        {9, 0x02, 54},
-        {23, 0x02, 54},
-        {40, 0x03, 54},
-        {2, 0x02, 55},
-        {9, 0x02, 55},
-        {23, 0x02, 55},
-        {40, 0x03, 55},
-        {2, 0x02, 56},
-        {9, 0x02, 56},
-        {23, 0x02, 56},
-        {40, 0x03, 56},
-        {2, 0x02, 57},
-        {9, 0x02, 57},
-        {23, 0x02, 57},
-        {40, 0x03, 57},
+        {0x8002, 54},
+        {0x8009, 54},
+        {0x8017, 54},
+        {0xc028, 54},
+        {0x8002, 55},
+        {0x8009, 55},
+        {0x8017, 55},
+        {0xc028, 55},
+        {0x8002, 56},
+        {0x8009, 56},
+        {0x8017, 56},
+        {0xc028, 56},
+        {0x8002, 57},
+        {0x8009, 57},
+        {0x8017, 57},
+        {0xc028, 57},
     },
     /* 20 */
     {
-        {3, 0x02, 54},
-        {6, 0x02, 54},
-        {10, 0x02, 54},
-        {15, 0x02, 54},
-        {24, 0x02, 54},
-        {31, 0x02, 54},
-        {41, 0x02, 54},
-        {56, 0x03, 54},
-        {3, 0x02, 55},
-        {6, 0x02, 55},
-        {10, 0x02, 55},
-        {15, 0x02, 55},
-        {24, 0x02, 55},
-        {31, 0x02, 55},
-        {41, 0x02, 55},
-        {56, 0x03, 55},
+        {0x8003, 54},
+        {0x8006, 54},
+        {0x800a, 54},
+        {0x800f, 54},
+        {0x8018, 54},
+        {0x801f, 54},
+        {0x8029, 54},
+        {0xc038, 54},
+        {0x8003, 55},
+        {0x8006, 55},
+        {0x800a, 55},
+        {0x800f, 55},
+        {0x8018, 55},
+        {0x801f, 55},
+        {0x8029, 55},
+        {0xc038, 55},
     },
     /* 21 */
     {
-        {3, 0x02, 56},
-        {6, 0x02, 56},
-        {10, 0x02, 56},
-        {15, 0x02, 56},
-        {24, 0x02, 56},
-        {31, 0x02, 56},
-        {41, 0x02, 56},
-        {56, 0x03, 56},
-        {3, 0x02, 57},
-        {6, 0x02, 57},
-        {10, 0x02, 57},
-        {15, 0x02, 57},
-        {24, 0x02, 57},
-        {31, 0x02, 57},
-        {41, 0x02, 57},
-        {56, 0x03, 57},
+        {0x8003, 56},
+        {0x8006, 56},
+        {0x800a, 56},
+        {0x800f, 56},
+        {0x8018, 56},
+        {0x801f, 56},
+        {0x8029, 56},
+        {0xc038, 56},
+        {0x8003, 57},
+        {0x8006, 57},
+        {0x800a, 57},
+        {0x800f, 57},
+        {0x8018, 57},
+        {0x801f, 57},
+        {0x8029, 57},
+        {0xc038, 57},
     },
     /* 22 */
     {
-        {26, 0x00, 0},
-        {27, 0x00, 0},
-        {29, 0x00, 0},
-        {30, 0x00, 0},
-        {33, 0x00, 0},
-        {34, 0x00, 0},
-        {36, 0x00, 0},
-        {37, 0x00, 0},
-        {43, 0x00, 0},
-        {46, 0x00, 0},
-        {50, 0x00, 0},
-        {53, 0x00, 0},
-        {58, 0x00, 0},
-        {61, 0x00, 0},
-        {65, 0x00, 0},
-        {68, 0x01, 0},
+        {0x1a, 0},
+        {0x1b, 0},
+        {0x1d, 0},
+        {0x1e, 0},
+        {0x21, 0},
+        {0x22, 0},
+        {0x24, 0},
+        {0x25, 0},
+        {0x2b, 0},
+        {0x2e, 0},
+        {0x32, 0},
+        {0x35, 0},
+        {0x3a, 0},
+        {0x3d, 0},
+        {0x41, 0},
+        {0x4044, 0},
     },
     /* 23 */
     {
-        {0, 0x03, 61},
-        {0, 0x03, 65},
-        {0, 0x03, 95},
-        {0, 0x03, 98},
-        {0, 0x03, 100},
-        {0, 0x03, 102},
-        {0, 0x03, 103},
-        {0, 0x03, 104},
-        {0, 0x03, 108},
-        {0, 0x03, 109},
-        {0, 0x03, 110},
-        {0, 0x03, 112},
-        {0, 0x03, 114},
-        {0, 0x03, 117},
-        {38, 0x00, 0},
-        {39, 0x00, 0},
+        {0xc000, 61},
+        {0xc000, 65},
+        {0xc000, 95},
+        {0xc000, 98},
+        {0xc000, 100},
+        {0xc000, 102},
+        {0xc000, 103},
+        {0xc000, 104},
+        {0xc000, 108},
+        {0xc000, 109},
+        {0xc000, 110},
+        {0xc000, 112},
+        {0xc000, 114},
+        {0xc000, 117},
+        {0x26, 0},
+        {0x27, 0},
     },
     /* 24 */
     {
-        {1, 0x02, 61},
-        {22, 0x03, 61},
-        {1, 0x02, 65},
-        {22, 0x03, 65},
-        {1, 0x02, 95},
-        {22, 0x03, 95},
-        {1, 0x02, 98},
-        {22, 0x03, 98},
-        {1, 0x02, 100},
-        {22, 0x03, 100},
-        {1, 0x02, 102},
-        {22, 0x03, 102},
-        {1, 0x02, 103},
-        {22, 0x03, 103},
-        {1, 0x02, 104},
-        {22, 0x03, 104},
+        {0x8001, 61},
+        {0xc016, 61},
+        {0x8001, 65},
+        {0xc016, 65},
+        {0x8001, 95},
+        {0xc016, 95},
+        {0x8001, 98},
+        {0xc016, 98},
+        {0x8001, 100},
+        {0xc016, 100},
+        {0x8001, 102},
+        {0xc016, 102},
+        {0x8001, 103},
+        {0xc016, 103},
+        {0x8001, 104},
+        {0xc016, 104},
     },
     /* 25 */
     {
-        {2, 0x02, 61},
-        {9, 0x02, 61},
-        {23, 0x02, 61},
-        {40, 0x03, 61},
-        {2, 0x02, 65},
-        {9, 0x02, 65},
-        {23, 0x02, 65},
-        {40, 0x03, 65},
-        {2, 0x02, 95},
-        {9, 0x02, 95},
-        {23, 0x02, 95},
-        {40, 0x03, 95},
-        {2, 0x02, 98},
-        {9, 0x02, 98},
-        {23, 0x02, 98},
-        {40, 0x03, 98},
+        {0x8002, 61},
+        {0x8009, 61},
+        {0x8017, 61},
+        {0xc028, 61},
+        {0x8002, 65},
+        {0x8009, 65},
+        {0x8017, 65},
+        {0xc028, 65},
+        {0x8002, 95},
+        {0x8009, 95},
+        {0x8017, 95},
+        {0xc028, 95},
+        {0x8002, 98},
+        {0x8009, 98},
+        {0x8017, 98},
+        {0xc028, 98},
     },
     /* 26 */
     {
-        {3, 0x02, 61},
-        {6, 0x02, 61},
-        {10, 0x02, 61},
-        {15, 0x02, 61},
-        {24, 0x02, 61},
-        {31, 0x02, 61},
-        {41, 0x02, 61},
-        {56, 0x03, 61},
-        {3, 0x02, 65},
-        {6, 0x02, 65},
-        {10, 0x02, 65},
-        {15, 0x02, 65},
-        {24, 0x02, 65},
-        {31, 0x02, 65},
-        {41, 0x02, 65},
-        {56, 0x03, 65},
+        {0x8003, 61},
+        {0x8006, 61},
+        {0x800a, 61},
+        {0x800f, 61},
+        {0x8018, 61},
+        {0x801f, 61},
+        {0x8029, 61},
+        {0xc038, 61},
+        {0x8003, 65},
+        {0x8006, 65},
+        {0x800a, 65},
+        {0x800f, 65},
+        {0x8018, 65},
+        {0x801f, 65},
+        {0x8029, 65},
+        {0xc038, 65},
     },
     /* 27 */
     {
-        {3, 0x02, 95},
-        {6, 0x02, 95},
-        {10, 0x02, 95},
-        {15, 0x02, 95},
-        {24, 0x02, 95},
-        {31, 0x02, 95},
-        {41, 0x02, 95},
-        {56, 0x03, 95},
-        {3, 0x02, 98},
-        {6, 0x02, 98},
-        {10, 0x02, 98},
-        {15, 0x02, 98},
-        {24, 0x02, 98},
-        {31, 0x02, 98},
-        {41, 0x02, 98},
-        {56, 0x03, 98},
+        {0x8003, 95},
+        {0x8006, 95},
+        {0x800a, 95},
+        {0x800f, 95},
+        {0x8018, 95},
+        {0x801f, 95},
+        {0x8029, 95},
+        {0xc038, 95},
+        {0x8003, 98},
+        {0x8006, 98},
+        {0x800a, 98},
+        {0x800f, 98},
+        {0x8018, 98},
+        {0x801f, 98},
+        {0x8029, 98},
+        {0xc038, 98},
     },
     /* 28 */
     {
-        {2, 0x02, 100},
-        {9, 0x02, 100},
-        {23, 0x02, 100},
-        {40, 0x03, 100},
-        {2, 0x02, 102},
-        {9, 0x02, 102},
-        {23, 0x02, 102},
-        {40, 0x03, 102},
-        {2, 0x02, 103},
-        {9, 0x02, 103},
-        {23, 0x02, 103},
-        {40, 0x03, 103},
-        {2, 0x02, 104},
-        {9, 0x02, 104},
-        {23, 0x02, 104},
-        {40, 0x03, 104},
+        {0x8002, 100},
+        {0x8009, 100},
+        {0x8017, 100},
+        {0xc028, 100},
+        {0x8002, 102},
+        {0x8009, 102},
+        {0x8017, 102},
+        {0xc028, 102},
+        {0x8002, 103},
+        {0x8009, 103},
+        {0x8017, 103},
+        {0xc028, 103},
+        {0x8002, 104},
+        {0x8009, 104},
+        {0x8017, 104},
+        {0xc028, 104},
     },
     /* 29 */
     {
-        {3, 0x02, 100},
-        {6, 0x02, 100},
-        {10, 0x02, 100},
-        {15, 0x02, 100},
-        {24, 0x02, 100},
-        {31, 0x02, 100},
-        {41, 0x02, 100},
-        {56, 0x03, 100},
-        {3, 0x02, 102},
-        {6, 0x02, 102},
-        {10, 0x02, 102},
-        {15, 0x02, 102},
-        {24, 0x02, 102},
-        {31, 0x02, 102},
-        {41, 0x02, 102},
-        {56, 0x03, 102},
+        {0x8003, 100},
+        {0x8006, 100},
+        {0x800a, 100},
+        {0x800f, 100},
+        {0x8018, 100},
+        {0x801f, 100},
+        {0x8029, 100},
+        {0xc038, 100},
+        {0x8003, 102},
+        {0x8006, 102},
+        {0x800a, 102},
+        {0x800f, 102},
+        {0x8018, 102},
+        {0x801f, 102},
+        {0x8029, 102},
+        {0xc038, 102},
     },
     /* 30 */
     {
-        {3, 0x02, 103},
-        {6, 0x02, 103},
-        {10, 0x02, 103},
-        {15, 0x02, 103},
-        {24, 0x02, 103},
-        {31, 0x02, 103},
-        {41, 0x02, 103},
-        {56, 0x03, 103},
-        {3, 0x02, 104},
-        {6, 0x02, 104},
-        {10, 0x02, 104},
-        {15, 0x02, 104},
-        {24, 0x02, 104},
-        {31, 0x02, 104},
-        {41, 0x02, 104},
-        {56, 0x03, 104},
+        {0x8003, 103},
+        {0x8006, 103},
+        {0x800a, 103},
+        {0x800f, 103},
+        {0x8018, 103},
+        {0x801f, 103},
+        {0x8029, 103},
+        {0xc038, 103},
+        {0x8003, 104},
+        {0x8006, 104},
+        {0x800a, 104},
+        {0x800f, 104},
+        {0x8018, 104},
+        {0x801f, 104},
+        {0x8029, 104},
+        {0xc038, 104},
     },
     /* 31 */
     {
-        {1, 0x02, 108},
-        {22, 0x03, 108},
-        {1, 0x02, 109},
-        {22, 0x03, 109},
-        {1, 0x02, 110},
-        {22, 0x03, 110},
-        {1, 0x02, 112},
-        {22, 0x03, 112},
-        {1, 0x02, 114},
-        {22, 0x03, 114},
-        {1, 0x02, 117},
-        {22, 0x03, 117},
-        {0, 0x03, 58},
-        {0, 0x03, 66},
-        {0, 0x03, 67},
-        {0, 0x03, 68},
+        {0x8001, 108},
+        {0xc016, 108},
+        {0x8001, 109},
+        {0xc016, 109},
+        {0x8001, 110},
+        {0xc016, 110},
+        {0x8001, 112},
+        {0xc016, 112},
+        {0x8001, 114},
+        {0xc016, 114},
+        {0x8001, 117},
+        {0xc016, 117},
+        {0xc000, 58},
+        {0xc000, 66},
+        {0xc000, 67},
+        {0xc000, 68},
     },
     /* 32 */
     {
-        {2, 0x02, 108},
-        {9, 0x02, 108},
-        {23, 0x02, 108},
-        {40, 0x03, 108},
-        {2, 0x02, 109},
-        {9, 0x02, 109},
-        {23, 0x02, 109},
-        {40, 0x03, 109},
-        {2, 0x02, 110},
-        {9, 0x02, 110},
-        {23, 0x02, 110},
-        {40, 0x03, 110},
-        {2, 0x02, 112},
-        {9, 0x02, 112},
-        {23, 0x02, 112},
-        {40, 0x03, 112},
+        {0x8002, 108},
+        {0x8009, 108},
+        {0x8017, 108},
+        {0xc028, 108},
+        {0x8002, 109},
+        {0x8009, 109},
+        {0x8017, 109},
+        {0xc028, 109},
+        {0x8002, 110},
+        {0x8009, 110},
+        {0x8017, 110},
+        {0xc028, 110},
+        {0x8002, 112},
+        {0x8009, 112},
+        {0x8017, 112},
+        {0xc028, 112},
     },
     /* 33 */
     {
-        {3, 0x02, 108},
-        {6, 0x02, 108},
-        {10, 0x02, 108},
-        {15, 0x02, 108},
-        {24, 0x02, 108},
-        {31, 0x02, 108},
-        {41, 0x02, 108},
-        {56, 0x03, 108},
-        {3, 0x02, 109},
-        {6, 0x02, 109},
-        {10, 0x02, 109},
-        {15, 0x02, 109},
-        {24, 0x02, 109},
-        {31, 0x02, 109},
-        {41, 0x02, 109},
-        {56, 0x03, 109},
+        {0x8003, 108},
+        {0x8006, 108},
+        {0x800a, 108},
+        {0x800f, 108},
+        {0x8018, 108},
+        {0x801f, 108},
+        {0x8029, 108},
+        {0xc038, 108},
+        {0x8003, 109},
+        {0x8006, 109},
+        {0x800a, 109},
+        {0x800f, 109},
+        {0x8018, 109},
+        {0x801f, 109},
+        {0x8029, 109},
+        {0xc038, 109},
     },
     /* 34 */
     {
-        {3, 0x02, 110},
-        {6, 0x02, 110},
-        {10, 0x02, 110},
-        {15, 0x02, 110},
-        {24, 0x02, 110},
-        {31, 0x02, 110},
-        {41, 0x02, 110},
-        {56, 0x03, 110},
-        {3, 0x02, 112},
-        {6, 0x02, 112},
-        {10, 0x02, 112},
-        {15, 0x02, 112},
-        {24, 0x02, 112},
-        {31, 0x02, 112},
-        {41, 0x02, 112},
-        {56, 0x03, 112},
+        {0x8003, 110},
+        {0x8006, 110},
+        {0x800a, 110},
+        {0x800f, 110},
+        {0x8018, 110},
+        {0x801f, 110},
+        {0x8029, 110},
+        {0xc038, 110},
+        {0x8003, 112},
+        {0x8006, 112},
+        {0x800a, 112},
+        {0x800f, 112},
+        {0x8018, 112},
+        {0x801f, 112},
+        {0x8029, 112},
+        {0xc038, 112},
     },
     /* 35 */
     {
-        {2, 0x02, 114},
-        {9, 0x02, 114},
-        {23, 0x02, 114},
-        {40, 0x03, 114},
-        {2, 0x02, 117},
-        {9, 0x02, 117},
-        {23, 0x02, 117},
-        {40, 0x03, 117},
-        {1, 0x02, 58},
-        {22, 0x03, 58},
-        {1, 0x02, 66},
-        {22, 0x03, 66},
-        {1, 0x02, 67},
-        {22, 0x03, 67},
-        {1, 0x02, 68},
-        {22, 0x03, 68},
+        {0x8002, 114},
+        {0x8009, 114},
+        {0x8017, 114},
+        {0xc028, 114},
+        {0x8002, 117},
+        {0x8009, 117},
+        {0x8017, 117},
+        {0xc028, 117},
+        {0x8001, 58},
+        {0xc016, 58},
+        {0x8001, 66},
+        {0xc016, 66},
+        {0x8001, 67},
+        {0xc016, 67},
+        {0x8001, 68},
+        {0xc016, 68},
     },
     /* 36 */
     {
-        {3, 0x02, 114},
-        {6, 0x02, 114},
-        {10, 0x02, 114},
-        {15, 0x02, 114},
-        {24, 0x02, 114},
-        {31, 0x02, 114},
-        {41, 0x02, 114},
-        {56, 0x03, 114},
-        {3, 0x02, 117},
-        {6, 0x02, 117},
-        {10, 0x02, 117},
-        {15, 0x02, 117},
-        {24, 0x02, 117},
-        {31, 0x02, 117},
-        {41, 0x02, 117},
-        {56, 0x03, 117},
+        {0x8003, 114},
+        {0x8006, 114},
+        {0x800a, 114},
+        {0x800f, 114},
+        {0x8018, 114},
+        {0x801f, 114},
+        {0x8029, 114},
+        {0xc038, 114},
+        {0x8003, 117},
+        {0x8006, 117},
+        {0x800a, 117},
+        {0x800f, 117},
+        {0x8018, 117},
+        {0x801f, 117},
+        {0x8029, 117},
+        {0xc038, 117},
     },
     /* 37 */
     {
-        {2, 0x02, 58},
-        {9, 0x02, 58},
-        {23, 0x02, 58},
-        {40, 0x03, 58},
-        {2, 0x02, 66},
-        {9, 0x02, 66},
-        {23, 0x02, 66},
-        {40, 0x03, 66},
-        {2, 0x02, 67},
-        {9, 0x02, 67},
-        {23, 0x02, 67},
-        {40, 0x03, 67},
-        {2, 0x02, 68},
-        {9, 0x02, 68},
-        {23, 0x02, 68},
-        {40, 0x03, 68},
+        {0x8002, 58},
+        {0x8009, 58},
+        {0x8017, 58},
+        {0xc028, 58},
+        {0x8002, 66},
+        {0x8009, 66},
+        {0x8017, 66},
+        {0xc028, 66},
+        {0x8002, 67},
+        {0x8009, 67},
+        {0x8017, 67},
+        {0xc028, 67},
+        {0x8002, 68},
+        {0x8009, 68},
+        {0x8017, 68},
+        {0xc028, 68},
     },
     /* 38 */
     {
-        {3, 0x02, 58},
-        {6, 0x02, 58},
-        {10, 0x02, 58},
-        {15, 0x02, 58},
-        {24, 0x02, 58},
-        {31, 0x02, 58},
-        {41, 0x02, 58},
-        {56, 0x03, 58},
-        {3, 0x02, 66},
-        {6, 0x02, 66},
-        {10, 0x02, 66},
-        {15, 0x02, 66},
-        {24, 0x02, 66},
-        {31, 0x02, 66},
-        {41, 0x02, 66},
-        {56, 0x03, 66},
+        {0x8003, 58},
+        {0x8006, 58},
+        {0x800a, 58},
+        {0x800f, 58},
+        {0x8018, 58},
+        {0x801f, 58},
+        {0x8029, 58},
+        {0xc038, 58},
+        {0x8003, 66},
+        {0x8006, 66},
+        {0x800a, 66},
+        {0x800f, 66},
+        {0x8018, 66},
+        {0x801f, 66},
+        {0x8029, 66},
+        {0xc038, 66},
     },
     /* 39 */
     {
-        {3, 0x02, 67},
-        {6, 0x02, 67},
-        {10, 0x02, 67},
-        {15, 0x02, 67},
-        {24, 0x02, 67},
-        {31, 0x02, 67},
-        {41, 0x02, 67},
-        {56, 0x03, 67},
-        {3, 0x02, 68},
-        {6, 0x02, 68},
-        {10, 0x02, 68},
-        {15, 0x02, 68},
-        {24, 0x02, 68},
-        {31, 0x02, 68},
-        {41, 0x02, 68},
-        {56, 0x03, 68},
+        {0x8003, 67},
+        {0x8006, 67},
+        {0x800a, 67},
+        {0x800f, 67},
+        {0x8018, 67},
+        {0x801f, 67},
+        {0x8029, 67},
+        {0xc038, 67},
+        {0x8003, 68},
+        {0x8006, 68},
+        {0x800a, 68},
+        {0x800f, 68},
+        {0x8018, 68},
+        {0x801f, 68},
+        {0x8029, 68},
+        {0xc038, 68},
     },
     /* 40 */
     {
-        {44, 0x00, 0},
-        {45, 0x00, 0},
-        {47, 0x00, 0},
-        {48, 0x00, 0},
-        {51, 0x00, 0},
-        {52, 0x00, 0},
-        {54, 0x00, 0},
-        {55, 0x00, 0},
-        {59, 0x00, 0},
-        {60, 0x00, 0},
-        {62, 0x00, 0},
-        {63, 0x00, 0},
-        {66, 0x00, 0},
-        {67, 0x00, 0},
-        {69, 0x00, 0},
-        {72, 0x01, 0},
+        {0x2c, 0},
+        {0x2d, 0},
+        {0x2f, 0},
+        {0x30, 0},
+        {0x33, 0},
+        {0x34, 0},
+        {0x36, 0},
+        {0x37, 0},
+        {0x3b, 0},
+        {0x3c, 0},
+        {0x3e, 0},
+        {0x3f, 0},
+        {0x42, 0},
+        {0x43, 0},
+        {0x45, 0},
+        {0x4048, 0},
     },
     /* 41 */
     {
-        {0, 0x03, 69},
-        {0, 0x03, 70},
-        {0, 0x03, 71},
-        {0, 0x03, 72},
-        {0, 0x03, 73},
-        {0, 0x03, 74},
-        {0, 0x03, 75},
-        {0, 0x03, 76},
-        {0, 0x03, 77},
-        {0, 0x03, 78},
-        {0, 0x03, 79},
-        {0, 0x03, 80},
-        {0, 0x03, 81},
-        {0, 0x03, 82},
-        {0, 0x03, 83},
-        {0, 0x03, 84},
+        {0xc000, 69},
+        {0xc000, 70},
+        {0xc000, 71},
+        {0xc000, 72},
+        {0xc000, 73},
+        {0xc000, 74},
+        {0xc000, 75},
+        {0xc000, 76},
+        {0xc000, 77},
+        {0xc000, 78},
+        {0xc000, 79},
+        {0xc000, 80},
+        {0xc000, 81},
+        {0xc000, 82},
+        {0xc000, 83},
+        {0xc000, 84},
     },
     /* 42 */
     {
-        {1, 0x02, 69},
-        {22, 0x03, 69},
-        {1, 0x02, 70},
-        {22, 0x03, 70},
-        {1, 0x02, 71},
-        {22, 0x03, 71},
-        {1, 0x02, 72},
-        {22, 0x03, 72},
-        {1, 0x02, 73},
-        {22, 0x03, 73},
-        {1, 0x02, 74},
-        {22, 0x03, 74},
-        {1, 0x02, 75},
-        {22, 0x03, 75},
-        {1, 0x02, 76},
-        {22, 0x03, 76},
+        {0x8001, 69},
+        {0xc016, 69},
+        {0x8001, 70},
+        {0xc016, 70},
+        {0x8001, 71},
+        {0xc016, 71},
+        {0x8001, 72},
+        {0xc016, 72},
+        {0x8001, 73},
+        {0xc016, 73},
+        {0x8001, 74},
+        {0xc016, 74},
+        {0x8001, 75},
+        {0xc016, 75},
+        {0x8001, 76},
+        {0xc016, 76},
     },
     /* 43 */
     {
-        {2, 0x02, 69},
-        {9, 0x02, 69},
-        {23, 0x02, 69},
-        {40, 0x03, 69},
-        {2, 0x02, 70},
-        {9, 0x02, 70},
-        {23, 0x02, 70},
-        {40, 0x03, 70},
-        {2, 0x02, 71},
-        {9, 0x02, 71},
-        {23, 0x02, 71},
-        {40, 0x03, 71},
-        {2, 0x02, 72},
-        {9, 0x02, 72},
-        {23, 0x02, 72},
-        {40, 0x03, 72},
+        {0x8002, 69},
+        {0x8009, 69},
+        {0x8017, 69},
+        {0xc028, 69},
+        {0x8002, 70},
+        {0x8009, 70},
+        {0x8017, 70},
+        {0xc028, 70},
+        {0x8002, 71},
+        {0x8009, 71},
+        {0x8017, 71},
+        {0xc028, 71},
+        {0x8002, 72},
+        {0x8009, 72},
+        {0x8017, 72},
+        {0xc028, 72},
     },
     /* 44 */
     {
-        {3, 0x02, 69},
-        {6, 0x02, 69},
-        {10, 0x02, 69},
-        {15, 0x02, 69},
-        {24, 0x02, 69},
-        {31, 0x02, 69},
-        {41, 0x02, 69},
-        {56, 0x03, 69},
-        {3, 0x02, 70},
-        {6, 0x02, 70},
-        {10, 0x02, 70},
-        {15, 0x02, 70},
-        {24, 0x02, 70},
-        {31, 0x02, 70},
-        {41, 0x02, 70},
-        {56, 0x03, 70},
+        {0x8003, 69},
+        {0x8006, 69},
+        {0x800a, 69},
+        {0x800f, 69},
+        {0x8018, 69},
+        {0x801f, 69},
+        {0x8029, 69},
+        {0xc038, 69},
+        {0x8003, 70},
+        {0x8006, 70},
+        {0x800a, 70},
+        {0x800f, 70},
+        {0x8018, 70},
+        {0x801f, 70},
+        {0x8029, 70},
+        {0xc038, 70},
     },
     /* 45 */
     {
-        {3, 0x02, 71},
-        {6, 0x02, 71},
-        {10, 0x02, 71},
-        {15, 0x02, 71},
-        {24, 0x02, 71},
-        {31, 0x02, 71},
-        {41, 0x02, 71},
-        {56, 0x03, 71},
-        {3, 0x02, 72},
-        {6, 0x02, 72},
-        {10, 0x02, 72},
-        {15, 0x02, 72},
-        {24, 0x02, 72},
-        {31, 0x02, 72},
-        {41, 0x02, 72},
-        {56, 0x03, 72},
+        {0x8003, 71},
+        {0x8006, 71},
+        {0x800a, 71},
+        {0x800f, 71},
+        {0x8018, 71},
+        {0x801f, 71},
+        {0x8029, 71},
+        {0xc038, 71},
+        {0x8003, 72},
+        {0x8006, 72},
+        {0x800a, 72},
+        {0x800f, 72},
+        {0x8018, 72},
+        {0x801f, 72},
+        {0x8029, 72},
+        {0xc038, 72},
     },
     /* 46 */
     {
-        {2, 0x02, 73},
-        {9, 0x02, 73},
-        {23, 0x02, 73},
-        {40, 0x03, 73},
-        {2, 0x02, 74},
-        {9, 0x02, 74},
-        {23, 0x02, 74},
-        {40, 0x03, 74},
-        {2, 0x02, 75},
-        {9, 0x02, 75},
-        {23, 0x02, 75},
-        {40, 0x03, 75},
-        {2, 0x02, 76},
-        {9, 0x02, 76},
-        {23, 0x02, 76},
-        {40, 0x03, 76},
+        {0x8002, 73},
+        {0x8009, 73},
+        {0x8017, 73},
+        {0xc028, 73},
+        {0x8002, 74},
+        {0x8009, 74},
+        {0x8017, 74},
+        {0xc028, 74},
+        {0x8002, 75},
+        {0x8009, 75},
+        {0x8017, 75},
+        {0xc028, 75},
+        {0x8002, 76},
+        {0x8009, 76},
+        {0x8017, 76},
+        {0xc028, 76},
     },
     /* 47 */
     {
-        {3, 0x02, 73},
-        {6, 0x02, 73},
-        {10, 0x02, 73},
-        {15, 0x02, 73},
-        {24, 0x02, 73},
-        {31, 0x02, 73},
-        {41, 0x02, 73},
-        {56, 0x03, 73},
-        {3, 0x02, 74},
-        {6, 0x02, 74},
-        {10, 0x02, 74},
-        {15, 0x02, 74},
-        {24, 0x02, 74},
-        {31, 0x02, 74},
-        {41, 0x02, 74},
-        {56, 0x03, 74},
+        {0x8003, 73},
+        {0x8006, 73},
+        {0x800a, 73},
+        {0x800f, 73},
+        {0x8018, 73},
+        {0x801f, 73},
+        {0x8029, 73},
+        {0xc038, 73},
+        {0x8003, 74},
+        {0x8006, 74},
+        {0x800a, 74},
+        {0x800f, 74},
+        {0x8018, 74},
+        {0x801f, 74},
+        {0x8029, 74},
+        {0xc038, 74},
     },
     /* 48 */
     {
-        {3, 0x02, 75},
-        {6, 0x02, 75},
-        {10, 0x02, 75},
-        {15, 0x02, 75},
-        {24, 0x02, 75},
-        {31, 0x02, 75},
-        {41, 0x02, 75},
-        {56, 0x03, 75},
-        {3, 0x02, 76},
-        {6, 0x02, 76},
-        {10, 0x02, 76},
-        {15, 0x02, 76},
-        {24, 0x02, 76},
-        {31, 0x02, 76},
-        {41, 0x02, 76},
-        {56, 0x03, 76},
+        {0x8003, 75},
+        {0x8006, 75},
+        {0x800a, 75},
+        {0x800f, 75},
+        {0x8018, 75},
+        {0x801f, 75},
+        {0x8029, 75},
+        {0xc038, 75},
+        {0x8003, 76},
+        {0x8006, 76},
+        {0x800a, 76},
+        {0x800f, 76},
+        {0x8018, 76},
+        {0x801f, 76},
+        {0x8029, 76},
+        {0xc038, 76},
     },
     /* 49 */
     {
-        {1, 0x02, 77},
-        {22, 0x03, 77},
-        {1, 0x02, 78},
-        {22, 0x03, 78},
-        {1, 0x02, 79},
-        {22, 0x03, 79},
-        {1, 0x02, 80},
-        {22, 0x03, 80},
-        {1, 0x02, 81},
-        {22, 0x03, 81},
-        {1, 0x02, 82},
-        {22, 0x03, 82},
-        {1, 0x02, 83},
-        {22, 0x03, 83},
-        {1, 0x02, 84},
-        {22, 0x03, 84},
+        {0x8001, 77},
+        {0xc016, 77},
+        {0x8001, 78},
+        {0xc016, 78},
+        {0x8001, 79},
+        {0xc016, 79},
+        {0x8001, 80},
+        {0xc016, 80},
+        {0x8001, 81},
+        {0xc016, 81},
+        {0x8001, 82},
+        {0xc016, 82},
+        {0x8001, 83},
+        {0xc016, 83},
+        {0x8001, 84},
+        {0xc016, 84},
     },
     /* 50 */
     {
-        {2, 0x02, 77},
-        {9, 0x02, 77},
-        {23, 0x02, 77},
-        {40, 0x03, 77},
-        {2, 0x02, 78},
-        {9, 0x02, 78},
-        {23, 0x02, 78},
-        {40, 0x03, 78},
-        {2, 0x02, 79},
-        {9, 0x02, 79},
-        {23, 0x02, 79},
-        {40, 0x03, 79},
-        {2, 0x02, 80},
-        {9, 0x02, 80},
-        {23, 0x02, 80},
-        {40, 0x03, 80},
+        {0x8002, 77},
+        {0x8009, 77},
+        {0x8017, 77},
+        {0xc028, 77},
+        {0x8002, 78},
+        {0x8009, 78},
+        {0x8017, 78},
+        {0xc028, 78},
+        {0x8002, 79},
+        {0x8009, 79},
+        {0x8017, 79},
+        {0xc028, 79},
+        {0x8002, 80},
+        {0x8009, 80},
+        {0x8017, 80},
+        {0xc028, 80},
     },
     /* 51 */
     {
-        {3, 0x02, 77},
-        {6, 0x02, 77},
-        {10, 0x02, 77},
-        {15, 0x02, 77},
-        {24, 0x02, 77},
-        {31, 0x02, 77},
-        {41, 0x02, 77},
-        {56, 0x03, 77},
-        {3, 0x02, 78},
-        {6, 0x02, 78},
-        {10, 0x02, 78},
-        {15, 0x02, 78},
-        {24, 0x02, 78},
-        {31, 0x02, 78},
-        {41, 0x02, 78},
-        {56, 0x03, 78},
+        {0x8003, 77},
+        {0x8006, 77},
+        {0x800a, 77},
+        {0x800f, 77},
+        {0x8018, 77},
+        {0x801f, 77},
+        {0x8029, 77},
+        {0xc038, 77},
+        {0x8003, 78},
+        {0x8006, 78},
+        {0x800a, 78},
+        {0x800f, 78},
+        {0x8018, 78},
+        {0x801f, 78},
+        {0x8029, 78},
+        {0xc038, 78},
     },
     /* 52 */
     {
-        {3, 0x02, 79},
-        {6, 0x02, 79},
-        {10, 0x02, 79},
-        {15, 0x02, 79},
-        {24, 0x02, 79},
-        {31, 0x02, 79},
-        {41, 0x02, 79},
-        {56, 0x03, 79},
-        {3, 0x02, 80},
-        {6, 0x02, 80},
-        {10, 0x02, 80},
-        {15, 0x02, 80},
-        {24, 0x02, 80},
-        {31, 0x02, 80},
-        {41, 0x02, 80},
-        {56, 0x03, 80},
+        {0x8003, 79},
+        {0x8006, 79},
+        {0x800a, 79},
+        {0x800f, 79},
+        {0x8018, 79},
+        {0x801f, 79},
+        {0x8029, 79},
+        {0xc038, 79},
+        {0x8003, 80},
+        {0x8006, 80},
+        {0x800a, 80},
+        {0x800f, 80},
+        {0x8018, 80},
+        {0x801f, 80},
+        {0x8029, 80},
+        {0xc038, 80},
     },
     /* 53 */
     {
-        {2, 0x02, 81},
-        {9, 0x02, 81},
-        {23, 0x02, 81},
-        {40, 0x03, 81},
-        {2, 0x02, 82},
-        {9, 0x02, 82},
-        {23, 0x02, 82},
-        {40, 0x03, 82},
-        {2, 0x02, 83},
-        {9, 0x02, 83},
-        {23, 0x02, 83},
-        {40, 0x03, 83},
-        {2, 0x02, 84},
-        {9, 0x02, 84},
-        {23, 0x02, 84},
-        {40, 0x03, 84},
+        {0x8002, 81},
+        {0x8009, 81},
+        {0x8017, 81},
+        {0xc028, 81},
+        {0x8002, 82},
+        {0x8009, 82},
+        {0x8017, 82},
+        {0xc028, 82},
+        {0x8002, 83},
+        {0x8009, 83},
+        {0x8017, 83},
+        {0xc028, 83},
+        {0x8002, 84},
+        {0x8009, 84},
+        {0x8017, 84},
+        {0xc028, 84},
     },
     /* 54 */
     {
-        {3, 0x02, 81},
-        {6, 0x02, 81},
-        {10, 0x02, 81},
-        {15, 0x02, 81},
-        {24, 0x02, 81},
-        {31, 0x02, 81},
-        {41, 0x02, 81},
-        {56, 0x03, 81},
-        {3, 0x02, 82},
-        {6, 0x02, 82},
-        {10, 0x02, 82},
-        {15, 0x02, 82},
-        {24, 0x02, 82},
-        {31, 0x02, 82},
-        {41, 0x02, 82},
-        {56, 0x03, 82},
+        {0x8003, 81},
+        {0x8006, 81},
+        {0x800a, 81},
+        {0x800f, 81},
+        {0x8018, 81},
+        {0x801f, 81},
+        {0x8029, 81},
+        {0xc038, 81},
+        {0x8003, 82},
+        {0x8006, 82},
+        {0x800a, 82},
+        {0x800f, 82},
+        {0x8018, 82},
+        {0x801f, 82},
+        {0x8029, 82},
+        {0xc038, 82},
     },
     /* 55 */
     {
-        {3, 0x02, 83},
-        {6, 0x02, 83},
-        {10, 0x02, 83},
-        {15, 0x02, 83},
-        {24, 0x02, 83},
-        {31, 0x02, 83},
-        {41, 0x02, 83},
-        {56, 0x03, 83},
-        {3, 0x02, 84},
-        {6, 0x02, 84},
-        {10, 0x02, 84},
-        {15, 0x02, 84},
-        {24, 0x02, 84},
-        {31, 0x02, 84},
-        {41, 0x02, 84},
-        {56, 0x03, 84},
+        {0x8003, 83},
+        {0x8006, 83},
+        {0x800a, 83},
+        {0x800f, 83},
+        {0x8018, 83},
+        {0x801f, 83},
+        {0x8029, 83},
+        {0xc038, 83},
+        {0x8003, 84},
+        {0x8006, 84},
+        {0x800a, 84},
+        {0x800f, 84},
+        {0x8018, 84},
+        {0x801f, 84},
+        {0x8029, 84},
+        {0xc038, 84},
     },
     /* 56 */
     {
-        {0, 0x03, 85},
-        {0, 0x03, 86},
-        {0, 0x03, 87},
-        {0, 0x03, 89},
-        {0, 0x03, 106},
-        {0, 0x03, 107},
-        {0, 0x03, 113},
-        {0, 0x03, 118},
-        {0, 0x03, 119},
-        {0, 0x03, 120},
-        {0, 0x03, 121},
-        {0, 0x03, 122},
-        {70, 0x00, 0},
-        {71, 0x00, 0},
-        {73, 0x00, 0},
-        {74, 0x01, 0},
+        {0xc000, 85},
+        {0xc000, 86},
+        {0xc000, 87},
+        {0xc000, 89},
+        {0xc000, 106},
+        {0xc000, 107},
+        {0xc000, 113},
+        {0xc000, 118},
+        {0xc000, 119},
+        {0xc000, 120},
+        {0xc000, 121},
+        {0xc000, 122},
+        {0x46, 0},
+        {0x47, 0},
+        {0x49, 0},
+        {0x404a, 0},
     },
     /* 57 */
     {
-        {1, 0x02, 85},
-        {22, 0x03, 85},
-        {1, 0x02, 86},
-        {22, 0x03, 86},
-        {1, 0x02, 87},
-        {22, 0x03, 87},
-        {1, 0x02, 89},
-        {22, 0x03, 89},
-        {1, 0x02, 106},
-        {22, 0x03, 106},
-        {1, 0x02, 107},
-        {22, 0x03, 107},
-        {1, 0x02, 113},
-        {22, 0x03, 113},
-        {1, 0x02, 118},
-        {22, 0x03, 118},
+        {0x8001, 85},
+        {0xc016, 85},
+        {0x8001, 86},
+        {0xc016, 86},
+        {0x8001, 87},
+        {0xc016, 87},
+        {0x8001, 89},
+        {0xc016, 89},
+        {0x8001, 106},
+        {0xc016, 106},
+        {0x8001, 107},
+        {0xc016, 107},
+        {0x8001, 113},
+        {0xc016, 113},
+        {0x8001, 118},
+        {0xc016, 118},
     },
     /* 58 */
     {
-        {2, 0x02, 85},
-        {9, 0x02, 85},
-        {23, 0x02, 85},
-        {40, 0x03, 85},
-        {2, 0x02, 86},
-        {9, 0x02, 86},
-        {23, 0x02, 86},
-        {40, 0x03, 86},
-        {2, 0x02, 87},
-        {9, 0x02, 87},
-        {23, 0x02, 87},
-        {40, 0x03, 87},
-        {2, 0x02, 89},
-        {9, 0x02, 89},
-        {23, 0x02, 89},
-        {40, 0x03, 89},
+        {0x8002, 85},
+        {0x8009, 85},
+        {0x8017, 85},
+        {0xc028, 85},
+        {0x8002, 86},
+        {0x8009, 86},
+        {0x8017, 86},
+        {0xc028, 86},
+        {0x8002, 87},
+        {0x8009, 87},
+        {0x8017, 87},
+        {0xc028, 87},
+        {0x8002, 89},
+        {0x8009, 89},
+        {0x8017, 89},
+        {0xc028, 89},
     },
     /* 59 */
     {
-        {3, 0x02, 85},
-        {6, 0x02, 85},
-        {10, 0x02, 85},
-        {15, 0x02, 85},
-        {24, 0x02, 85},
-        {31, 0x02, 85},
-        {41, 0x02, 85},
-        {56, 0x03, 85},
-        {3, 0x02, 86},
-        {6, 0x02, 86},
-        {10, 0x02, 86},
-        {15, 0x02, 86},
-        {24, 0x02, 86},
-        {31, 0x02, 86},
-        {41, 0x02, 86},
-        {56, 0x03, 86},
+        {0x8003, 85},
+        {0x8006, 85},
+        {0x800a, 85},
+        {0x800f, 85},
+        {0x8018, 85},
+        {0x801f, 85},
+        {0x8029, 85},
+        {0xc038, 85},
+        {0x8003, 86},
+        {0x8006, 86},
+        {0x800a, 86},
+        {0x800f, 86},
+        {0x8018, 86},
+        {0x801f, 86},
+        {0x8029, 86},
+        {0xc038, 86},
     },
     /* 60 */
     {
-        {3, 0x02, 87},
-        {6, 0x02, 87},
-        {10, 0x02, 87},
-        {15, 0x02, 87},
-        {24, 0x02, 87},
-        {31, 0x02, 87},
-        {41, 0x02, 87},
-        {56, 0x03, 87},
-        {3, 0x02, 89},
-        {6, 0x02, 89},
-        {10, 0x02, 89},
-        {15, 0x02, 89},
-        {24, 0x02, 89},
-        {31, 0x02, 89},
-        {41, 0x02, 89},
-        {56, 0x03, 89},
+        {0x8003, 87},
+        {0x8006, 87},
+        {0x800a, 87},
+        {0x800f, 87},
+        {0x8018, 87},
+        {0x801f, 87},
+        {0x8029, 87},
+        {0xc038, 87},
+        {0x8003, 89},
+        {0x8006, 89},
+        {0x800a, 89},
+        {0x800f, 89},
+        {0x8018, 89},
+        {0x801f, 89},
+        {0x8029, 89},
+        {0xc038, 89},
     },
     /* 61 */
     {
-        {2, 0x02, 106},
-        {9, 0x02, 106},
-        {23, 0x02, 106},
-        {40, 0x03, 106},
-        {2, 0x02, 107},
-        {9, 0x02, 107},
-        {23, 0x02, 107},
-        {40, 0x03, 107},
-        {2, 0x02, 113},
-        {9, 0x02, 113},
-        {23, 0x02, 113},
-        {40, 0x03, 113},
-        {2, 0x02, 118},
-        {9, 0x02, 118},
-        {23, 0x02, 118},
-        {40, 0x03, 118},
+        {0x8002, 106},
+        {0x8009, 106},
+        {0x8017, 106},
+        {0xc028, 106},
+        {0x8002, 107},
+        {0x8009, 107},
+        {0x8017, 107},
+        {0xc028, 107},
+        {0x8002, 113},
+        {0x8009, 113},
+        {0x8017, 113},
+        {0xc028, 113},
+        {0x8002, 118},
+        {0x8009, 118},
+        {0x8017, 118},
+        {0xc028, 118},
     },
     /* 62 */
     {
-        {3, 0x02, 106},
-        {6, 0x02, 106},
-        {10, 0x02, 106},
-        {15, 0x02, 106},
-        {24, 0x02, 106},
-        {31, 0x02, 106},
-        {41, 0x02, 106},
-        {56, 0x03, 106},
-        {3, 0x02, 107},
-        {6, 0x02, 107},
-        {10, 0x02, 107},
-        {15, 0x02, 107},
-        {24, 0x02, 107},
-        {31, 0x02, 107},
-        {41, 0x02, 107},
-        {56, 0x03, 107},
+        {0x8003, 106},
+        {0x8006, 106},
+        {0x800a, 106},
+        {0x800f, 106},
+        {0x8018, 106},
+        {0x801f, 106},
+        {0x8029, 106},
+        {0xc038, 106},
+        {0x8003, 107},
+        {0x8006, 107},
+        {0x800a, 107},
+        {0x800f, 107},
+        {0x8018, 107},
+        {0x801f, 107},
+        {0x8029, 107},
+        {0xc038, 107},
     },
     /* 63 */
     {
-        {3, 0x02, 113},
-        {6, 0x02, 113},
-        {10, 0x02, 113},
-        {15, 0x02, 113},
-        {24, 0x02, 113},
-        {31, 0x02, 113},
-        {41, 0x02, 113},
-        {56, 0x03, 113},
-        {3, 0x02, 118},
-        {6, 0x02, 118},
-        {10, 0x02, 118},
-        {15, 0x02, 118},
-        {24, 0x02, 118},
-        {31, 0x02, 118},
-        {41, 0x02, 118},
-        {56, 0x03, 118},
+        {0x8003, 113},
+        {0x8006, 113},
+        {0x800a, 113},
+        {0x800f, 113},
+        {0x8018, 113},
+        {0x801f, 113},
+        {0x8029, 113},
+        {0xc038, 113},
+        {0x8003, 118},
+        {0x8006, 118},
+        {0x800a, 118},
+        {0x800f, 118},
+        {0x8018, 118},
+        {0x801f, 118},
+        {0x8029, 118},
+        {0xc038, 118},
     },
     /* 64 */
     {
-        {1, 0x02, 119},
-        {22, 0x03, 119},
-        {1, 0x02, 120},
-        {22, 0x03, 120},
-        {1, 0x02, 121},
-        {22, 0x03, 121},
-        {1, 0x02, 122},
-        {22, 0x03, 122},
-        {0, 0x03, 38},
-        {0, 0x03, 42},
-        {0, 0x03, 44},
-        {0, 0x03, 59},
-        {0, 0x03, 88},
-        {0, 0x03, 90},
-        {75, 0x00, 0},
-        {78, 0x00, 0},
+        {0x8001, 119},
+        {0xc016, 119},
+        {0x8001, 120},
+        {0xc016, 120},
+        {0x8001, 121},
+        {0xc016, 121},
+        {0x8001, 122},
+        {0xc016, 122},
+        {0xc000, 38},
+        {0xc000, 42},
+        {0xc000, 44},
+        {0xc000, 59},
+        {0xc000, 88},
+        {0xc000, 90},
+        {0x4b, 0},
+        {0x4e, 0},
     },
     /* 65 */
     {
-        {2, 0x02, 119},
-        {9, 0x02, 119},
-        {23, 0x02, 119},
-        {40, 0x03, 119},
-        {2, 0x02, 120},
-        {9, 0x02, 120},
-        {23, 0x02, 120},
-        {40, 0x03, 120},
-        {2, 0x02, 121},
-        {9, 0x02, 121},
-        {23, 0x02, 121},
-        {40, 0x03, 121},
-        {2, 0x02, 122},
-        {9, 0x02, 122},
-        {23, 0x02, 122},
-        {40, 0x03, 122},
+        {0x8002, 119},
+        {0x8009, 119},
+        {0x8017, 119},
+        {0xc028, 119},
+        {0x8002, 120},
+        {0x8009, 120},
+        {0x8017, 120},
+        {0xc028, 120},
+        {0x8002, 121},
+        {0x8009, 121},
+        {0x8017, 121},
+        {0xc028, 121},
+        {0x8002, 122},
+        {0x8009, 122},
+        {0x8017, 122},
+        {0xc028, 122},
     },
     /* 66 */
     {
-        {3, 0x02, 119},
-        {6, 0x02, 119},
-        {10, 0x02, 119},
-        {15, 0x02, 119},
-        {24, 0x02, 119},
-        {31, 0x02, 119},
-        {41, 0x02, 119},
-        {56, 0x03, 119},
-        {3, 0x02, 120},
-        {6, 0x02, 120},
-        {10, 0x02, 120},
-        {15, 0x02, 120},
-        {24, 0x02, 120},
-        {31, 0x02, 120},
-        {41, 0x02, 120},
-        {56, 0x03, 120},
+        {0x8003, 119},
+        {0x8006, 119},
+        {0x800a, 119},
+        {0x800f, 119},
+        {0x8018, 119},
+        {0x801f, 119},
+        {0x8029, 119},
+        {0xc038, 119},
+        {0x8003, 120},
+        {0x8006, 120},
+        {0x800a, 120},
+        {0x800f, 120},
+        {0x8018, 120},
+        {0x801f, 120},
+        {0x8029, 120},
+        {0xc038, 120},
     },
     /* 67 */
     {
-        {3, 0x02, 121},
-        {6, 0x02, 121},
-        {10, 0x02, 121},
-        {15, 0x02, 121},
-        {24, 0x02, 121},
-        {31, 0x02, 121},
-        {41, 0x02, 121},
-        {56, 0x03, 121},
-        {3, 0x02, 122},
-        {6, 0x02, 122},
-        {10, 0x02, 122},
-        {15, 0x02, 122},
-        {24, 0x02, 122},
-        {31, 0x02, 122},
-        {41, 0x02, 122},
-        {56, 0x03, 122},
+        {0x8003, 121},
+        {0x8006, 121},
+        {0x800a, 121},
+        {0x800f, 121},
+        {0x8018, 121},
+        {0x801f, 121},
+        {0x8029, 121},
+        {0xc038, 121},
+        {0x8003, 122},
+        {0x8006, 122},
+        {0x800a, 122},
+        {0x800f, 122},
+        {0x8018, 122},
+        {0x801f, 122},
+        {0x8029, 122},
+        {0xc038, 122},
     },
     /* 68 */
     {
-        {1, 0x02, 38},
-        {22, 0x03, 38},
-        {1, 0x02, 42},
-        {22, 0x03, 42},
-        {1, 0x02, 44},
-        {22, 0x03, 44},
-        {1, 0x02, 59},
-        {22, 0x03, 59},
-        {1, 0x02, 88},
-        {22, 0x03, 88},
-        {1, 0x02, 90},
-        {22, 0x03, 90},
-        {76, 0x00, 0},
-        {77, 0x00, 0},
-        {79, 0x00, 0},
-        {81, 0x00, 0},
+        {0x8001, 38},
+        {0xc016, 38},
+        {0x8001, 42},
+        {0xc016, 42},
+        {0x8001, 44},
+        {0xc016, 44},
+        {0x8001, 59},
+        {0xc016, 59},
+        {0x8001, 88},
+        {0xc016, 88},
+        {0x8001, 90},
+        {0xc016, 90},
+        {0x4c, 0},
+        {0x4d, 0},
+        {0x4f, 0},
+        {0x51, 0},
     },
     /* 69 */
     {
-        {2, 0x02, 38},
-        {9, 0x02, 38},
-        {23, 0x02, 38},
-        {40, 0x03, 38},
-        {2, 0x02, 42},
-        {9, 0x02, 42},
-        {23, 0x02, 42},
-        {40, 0x03, 42},
-        {2, 0x02, 44},
-        {9, 0x02, 44},
-        {23, 0x02, 44},
-        {40, 0x03, 44},
-        {2, 0x02, 59},
-        {9, 0x02, 59},
-        {23, 0x02, 59},
-        {40, 0x03, 59},
+        {0x8002, 38},
+        {0x8009, 38},
+        {0x8017, 38},
+        {0xc028, 38},
+        {0x8002, 42},
+        {0x8009, 42},
+        {0x8017, 42},
+        {0xc028, 42},
+        {0x8002, 44},
+        {0x8009, 44},
+        {0x8017, 44},
+        {0xc028, 44},
+        {0x8002, 59},
+        {0x8009, 59},
+        {0x8017, 59},
+        {0xc028, 59},
     },
     /* 70 */
     {
-        {3, 0x02, 38},
-        {6, 0x02, 38},
-        {10, 0x02, 38},
-        {15, 0x02, 38},
-        {24, 0x02, 38},
-        {31, 0x02, 38},
-        {41, 0x02, 38},
-        {56, 0x03, 38},
-        {3, 0x02, 42},
-        {6, 0x02, 42},
-        {10, 0x02, 42},
-        {15, 0x02, 42},
-        {24, 0x02, 42},
-        {31, 0x02, 42},
-        {41, 0x02, 42},
-        {56, 0x03, 42},
+        {0x8003, 38},
+        {0x8006, 38},
+        {0x800a, 38},
+        {0x800f, 38},
+        {0x8018, 38},
+        {0x801f, 38},
+        {0x8029, 38},
+        {0xc038, 38},
+        {0x8003, 42},
+        {0x8006, 42},
+        {0x800a, 42},
+        {0x800f, 42},
+        {0x8018, 42},
+        {0x801f, 42},
+        {0x8029, 42},
+        {0xc038, 42},
     },
     /* 71 */
     {
-        {3, 0x02, 44},
-        {6, 0x02, 44},
-        {10, 0x02, 44},
-        {15, 0x02, 44},
-        {24, 0x02, 44},
-        {31, 0x02, 44},
-        {41, 0x02, 44},
-        {56, 0x03, 44},
-        {3, 0x02, 59},
-        {6, 0x02, 59},
-        {10, 0x02, 59},
-        {15, 0x02, 59},
-        {24, 0x02, 59},
-        {31, 0x02, 59},
-        {41, 0x02, 59},
-        {56, 0x03, 59},
+        {0x8003, 44},
+        {0x8006, 44},
+        {0x800a, 44},
+        {0x800f, 44},
+        {0x8018, 44},
+        {0x801f, 44},
+        {0x8029, 44},
+        {0xc038, 44},
+        {0x8003, 59},
+        {0x8006, 59},
+        {0x800a, 59},
+        {0x800f, 59},
+        {0x8018, 59},
+        {0x801f, 59},
+        {0x8029, 59},
+        {0xc038, 59},
     },
     /* 72 */
     {
-        {2, 0x02, 88},
-        {9, 0x02, 88},
-        {23, 0x02, 88},
-        {40, 0x03, 88},
-        {2, 0x02, 90},
-        {9, 0x02, 90},
-        {23, 0x02, 90},
-        {40, 0x03, 90},
-        {0, 0x03, 33},
-        {0, 0x03, 34},
-        {0, 0x03, 40},
-        {0, 0x03, 41},
-        {0, 0x03, 63},
-        {80, 0x00, 0},
-        {82, 0x00, 0},
-        {84, 0x00, 0},
+        {0x8002, 88},
+        {0x8009, 88},
+        {0x8017, 88},
+        {0xc028, 88},
+        {0x8002, 90},
+        {0x8009, 90},
+        {0x8017, 90},
+        {0xc028, 90},
+        {0xc000, 33},
+        {0xc000, 34},
+        {0xc000, 40},
+        {0xc000, 41},
+        {0xc000, 63},
+        {0x50, 0},
+        {0x52, 0},
+        {0x54, 0},
     },
     /* 73 */
     {
-        {3, 0x02, 88},
-        {6, 0x02, 88},
-        {10, 0x02, 88},
-        {15, 0x02, 88},
-        {24, 0x02, 88},
-        {31, 0x02, 88},
-        {41, 0x02, 88},
-        {56, 0x03, 88},
-        {3, 0x02, 90},
-        {6, 0x02, 90},
-        {10, 0x02, 90},
-        {15, 0x02, 90},
-        {24, 0x02, 90},
-        {31, 0x02, 90},
-        {41, 0x02, 90},
-        {56, 0x03, 90},
+        {0x8003, 88},
+        {0x8006, 88},
+        {0x800a, 88},
+        {0x800f, 88},
+        {0x8018, 88},
+        {0x801f, 88},
+        {0x8029, 88},
+        {0xc038, 88},
+        {0x8003, 90},
+        {0x8006, 90},
+        {0x800a, 90},
+        {0x800f, 90},
+        {0x8018, 90},
+        {0x801f, 90},
+        {0x8029, 90},
+        {0xc038, 90},
     },
     /* 74 */
     {
-        {1, 0x02, 33},
-        {22, 0x03, 33},
-        {1, 0x02, 34},
-        {22, 0x03, 34},
-        {1, 0x02, 40},
-        {22, 0x03, 40},
-        {1, 0x02, 41},
-        {22, 0x03, 41},
-        {1, 0x02, 63},
-        {22, 0x03, 63},
-        {0, 0x03, 39},
-        {0, 0x03, 43},
-        {0, 0x03, 124},
-        {83, 0x00, 0},
-        {85, 0x00, 0},
-        {88, 0x00, 0},
+        {0x8001, 33},
+        {0xc016, 33},
+        {0x8001, 34},
+        {0xc016, 34},
+        {0x8001, 40},
+        {0xc016, 40},
+        {0x8001, 41},
+        {0xc016, 41},
+        {0x8001, 63},
+        {0xc016, 63},
+        {0xc000, 39},
+        {0xc000, 43},
+        {0xc000, 124},
+        {0x53, 0},
+        {0x55, 0},
+        {0x58, 0},
     },
     /* 75 */
     {
-        {2, 0x02, 33},
-        {9, 0x02, 33},
-        {23, 0x02, 33},
-        {40, 0x03, 33},
-        {2, 0x02, 34},
-        {9, 0x02, 34},
-        {23, 0x02, 34},
-        {40, 0x03, 34},
-        {2, 0x02, 40},
-        {9, 0x02, 40},
-        {23, 0x02, 40},
-        {40, 0x03, 40},
-        {2, 0x02, 41},
-        {9, 0x02, 41},
-        {23, 0x02, 41},
-        {40, 0x03, 41},
+        {0x8002, 33},
+        {0x8009, 33},
+        {0x8017, 33},
+        {0xc028, 33},
+        {0x8002, 34},
+        {0x8009, 34},
+        {0x8017, 34},
+        {0xc028, 34},
+        {0x8002, 40},
+        {0x8009, 40},
+        {0x8017, 40},
+        {0xc028, 40},
+        {0x8002, 41},
+        {0x8009, 41},
+        {0x8017, 41},
+        {0xc028, 41},
     },
     /* 76 */
     {
-        {3, 0x02, 33},
-        {6, 0x02, 33},
-        {10, 0x02, 33},
-        {15, 0x02, 33},
-        {24, 0x02, 33},
-        {31, 0x02, 33},
-        {41, 0x02, 33},
-        {56, 0x03, 33},
-        {3, 0x02, 34},
-        {6, 0x02, 34},
-        {10, 0x02, 34},
-        {15, 0x02, 34},
-        {24, 0x02, 34},
-        {31, 0x02, 34},
-        {41, 0x02, 34},
-        {56, 0x03, 34},
+        {0x8003, 33},
+        {0x8006, 33},
+        {0x800a, 33},
+        {0x800f, 33},
+        {0x8018, 33},
+        {0x801f, 33},
+        {0x8029, 33},
+        {0xc038, 33},
+        {0x8003, 34},
+        {0x8006, 34},
+        {0x800a, 34},
+        {0x800f, 34},
+        {0x8018, 34},
+        {0x801f, 34},
+        {0x8029, 34},
+        {0xc038, 34},
     },
     /* 77 */
     {
-        {3, 0x02, 40},
-        {6, 0x02, 40},
-        {10, 0x02, 40},
-        {15, 0x02, 40},
-        {24, 0x02, 40},
-        {31, 0x02, 40},
-        {41, 0x02, 40},
-        {56, 0x03, 40},
-        {3, 0x02, 41},
-        {6, 0x02, 41},
-        {10, 0x02, 41},
-        {15, 0x02, 41},
-        {24, 0x02, 41},
-        {31, 0x02, 41},
-        {41, 0x02, 41},
-        {56, 0x03, 41},
+        {0x8003, 40},
+        {0x8006, 40},
+        {0x800a, 40},
+        {0x800f, 40},
+        {0x8018, 40},
+        {0x801f, 40},
+        {0x8029, 40},
+        {0xc038, 40},
+        {0x8003, 41},
+        {0x8006, 41},
+        {0x800a, 41},
+        {0x800f, 41},
+        {0x8018, 41},
+        {0x801f, 41},
+        {0x8029, 41},
+        {0xc038, 41},
     },
     /* 78 */
     {
-        {2, 0x02, 63},
-        {9, 0x02, 63},
-        {23, 0x02, 63},
-        {40, 0x03, 63},
-        {1, 0x02, 39},
-        {22, 0x03, 39},
-        {1, 0x02, 43},
-        {22, 0x03, 43},
-        {1, 0x02, 124},
-        {22, 0x03, 124},
-        {0, 0x03, 35},
-        {0, 0x03, 62},
-        {86, 0x00, 0},
-        {87, 0x00, 0},
-        {89, 0x00, 0},
-        {90, 0x00, 0},
+        {0x8002, 63},
+        {0x8009, 63},
+        {0x8017, 63},
+        {0xc028, 63},
+        {0x8001, 39},
+        {0xc016, 39},
+        {0x8001, 43},
+        {0xc016, 43},
+        {0x8001, 124},
+        {0xc016, 124},
+        {0xc000, 35},
+        {0xc000, 62},
+        {0x56, 0},
+        {0x57, 0},
+        {0x59, 0},
+        {0x5a, 0},
     },
     /* 79 */
     {
-        {3, 0x02, 63},
-        {6, 0x02, 63},
-        {10, 0x02, 63},
-        {15, 0x02, 63},
-        {24, 0x02, 63},
-        {31, 0x02, 63},
-        {41, 0x02, 63},
-        {56, 0x03, 63},
-        {2, 0x02, 39},
-        {9, 0x02, 39},
-        {23, 0x02, 39},
-        {40, 0x03, 39},
-        {2, 0x02, 43},
-        {9, 0x02, 43},
-        {23, 0x02, 43},
-        {40, 0x03, 43},
+        {0x8003, 63},
+        {0x8006, 63},
+        {0x800a, 63},
+        {0x800f, 63},
+        {0x8018, 63},
+        {0x801f, 63},
+        {0x8029, 63},
+        {0xc038, 63},
+        {0x8002, 39},
+        {0x8009, 39},
+        {0x8017, 39},
+        {0xc028, 39},
+        {0x8002, 43},
+        {0x8009, 43},
+        {0x8017, 43},
+        {0xc028, 43},
     },
     /* 80 */
     {
-        {3, 0x02, 39},
-        {6, 0x02, 39},
-        {10, 0x02, 39},
-        {15, 0x02, 39},
-        {24, 0x02, 39},
-        {31, 0x02, 39},
-        {41, 0x02, 39},
-        {56, 0x03, 39},
-        {3, 0x02, 43},
-        {6, 0x02, 43},
-        {10, 0x02, 43},
-        {15, 0x02, 43},
-        {24, 0x02, 43},
-        {31, 0x02, 43},
-        {41, 0x02, 43},
-        {56, 0x03, 43},
+        {0x8003, 39},
+        {0x8006, 39},
+        {0x800a, 39},
+        {0x800f, 39},
+        {0x8018, 39},
+        {0x801f, 39},
+        {0x8029, 39},
+        {0xc038, 39},
+        {0x8003, 43},
+        {0x8006, 43},
+        {0x800a, 43},
+        {0x800f, 43},
+        {0x8018, 43},
+        {0x801f, 43},
+        {0x8029, 43},
+        {0xc038, 43},
     },
     /* 81 */
     {
-        {2, 0x02, 124},
-        {9, 0x02, 124},
-        {23, 0x02, 124},
-        {40, 0x03, 124},
-        {1, 0x02, 35},
-        {22, 0x03, 35},
-        {1, 0x02, 62},
-        {22, 0x03, 62},
-        {0, 0x03, 0},
-        {0, 0x03, 36},
-        {0, 0x03, 64},
-        {0, 0x03, 91},
-        {0, 0x03, 93},
-        {0, 0x03, 126},
-        {91, 0x00, 0},
-        {92, 0x00, 0},
+        {0x8002, 124},
+        {0x8009, 124},
+        {0x8017, 124},
+        {0xc028, 124},
+        {0x8001, 35},
+        {0xc016, 35},
+        {0x8001, 62},
+        {0xc016, 62},
+        {0xc000, 0},
+        {0xc000, 36},
+        {0xc000, 64},
+        {0xc000, 91},
+        {0xc000, 93},
+        {0xc000, 126},
+        {0x5b, 0},
+        {0x5c, 0},
     },
     /* 82 */
     {
-        {3, 0x02, 124},
-        {6, 0x02, 124},
-        {10, 0x02, 124},
-        {15, 0x02, 124},
-        {24, 0x02, 124},
-        {31, 0x02, 124},
-        {41, 0x02, 124},
-        {56, 0x03, 124},
-        {2, 0x02, 35},
-        {9, 0x02, 35},
-        {23, 0x02, 35},
-        {40, 0x03, 35},
-        {2, 0x02, 62},
-        {9, 0x02, 62},
-        {23, 0x02, 62},
-        {40, 0x03, 62},
+        {0x8003, 124},
+        {0x8006, 124},
+        {0x800a, 124},
+        {0x800f, 124},
+        {0x8018, 124},
+        {0x801f, 124},
+        {0x8029, 124},
+        {0xc038, 124},
+        {0x8002, 35},
+        {0x8009, 35},
+        {0x8017, 35},
+        {0xc028, 35},
+        {0x8002, 62},
+        {0x8009, 62},
+        {0x8017, 62},
+        {0xc028, 62},
     },
     /* 83 */
     {
-        {3, 0x02, 35},
-        {6, 0x02, 35},
-        {10, 0x02, 35},
-        {15, 0x02, 35},
-        {24, 0x02, 35},
-        {31, 0x02, 35},
-        {41, 0x02, 35},
-        {56, 0x03, 35},
-        {3, 0x02, 62},
-        {6, 0x02, 62},
-        {10, 0x02, 62},
-        {15, 0x02, 62},
-        {24, 0x02, 62},
-        {31, 0x02, 62},
-        {41, 0x02, 62},
-        {56, 0x03, 62},
+        {0x8003, 35},
+        {0x8006, 35},
+        {0x800a, 35},
+        {0x800f, 35},
+        {0x8018, 35},
+        {0x801f, 35},
+        {0x8029, 35},
+        {0xc038, 35},
+        {0x8003, 62},
+        {0x8006, 62},
+        {0x800a, 62},
+        {0x800f, 62},
+        {0x8018, 62},
+        {0x801f, 62},
+        {0x8029, 62},
+        {0xc038, 62},
     },
     /* 84 */
     {
-        {1, 0x02, 0},
-        {22, 0x03, 0},
-        {1, 0x02, 36},
-        {22, 0x03, 36},
-        {1, 0x02, 64},
-        {22, 0x03, 64},
-        {1, 0x02, 91},
-        {22, 0x03, 91},
-        {1, 0x02, 93},
-        {22, 0x03, 93},
-        {1, 0x02, 126},
-        {22, 0x03, 126},
-        {0, 0x03, 94},
-        {0, 0x03, 125},
-        {93, 0x00, 0},
-        {94, 0x00, 0},
+        {0x8001, 0},
+        {0xc016, 0},
+        {0x8001, 36},
+        {0xc016, 36},
+        {0x8001, 64},
+        {0xc016, 64},
+        {0x8001, 91},
+        {0xc016, 91},
+        {0x8001, 93},
+        {0xc016, 93},
+        {0x8001, 126},
+        {0xc016, 126},
+        {0xc000, 94},
+        {0xc000, 125},
+        {0x5d, 0},
+        {0x5e, 0},
     },
     /* 85 */
     {
-        {2, 0x02, 0},
-        {9, 0x02, 0},
-        {23, 0x02, 0},
-        {40, 0x03, 0},
-        {2, 0x02, 36},
-        {9, 0x02, 36},
-        {23, 0x02, 36},
-        {40, 0x03, 36},
-        {2, 0x02, 64},
-        {9, 0x02, 64},
-        {23, 0x02, 64},
-        {40, 0x03, 64},
-        {2, 0x02, 91},
-        {9, 0x02, 91},
-        {23, 0x02, 91},
-        {40, 0x03, 91},
+        {0x8002, 0},
+        {0x8009, 0},
+        {0x8017, 0},
+        {0xc028, 0},
+        {0x8002, 36},
+        {0x8009, 36},
+        {0x8017, 36},
+        {0xc028, 36},
+        {0x8002, 64},
+        {0x8009, 64},
+        {0x8017, 64},
+        {0xc028, 64},
+        {0x8002, 91},
+        {0x8009, 91},
+        {0x8017, 91},
+        {0xc028, 91},
     },
     /* 86 */
     {
-        {3, 0x02, 0},
-        {6, 0x02, 0},
-        {10, 0x02, 0},
-        {15, 0x02, 0},
-        {24, 0x02, 0},
-        {31, 0x02, 0},
-        {41, 0x02, 0},
-        {56, 0x03, 0},
-        {3, 0x02, 36},
-        {6, 0x02, 36},
-        {10, 0x02, 36},
-        {15, 0x02, 36},
-        {24, 0x02, 36},
-        {31, 0x02, 36},
-        {41, 0x02, 36},
-        {56, 0x03, 36},
+        {0x8003, 0},
+        {0x8006, 0},
+        {0x800a, 0},
+        {0x800f, 0},
+        {0x8018, 0},
+        {0x801f, 0},
+        {0x8029, 0},
+        {0xc038, 0},
+        {0x8003, 36},
+        {0x8006, 36},
+        {0x800a, 36},
+        {0x800f, 36},
+        {0x8018, 36},
+        {0x801f, 36},
+        {0x8029, 36},
+        {0xc038, 36},
     },
     /* 87 */
     {
-        {3, 0x02, 64},
-        {6, 0x02, 64},
-        {10, 0x02, 64},
-        {15, 0x02, 64},
-        {24, 0x02, 64},
-        {31, 0x02, 64},
-        {41, 0x02, 64},
-        {56, 0x03, 64},
-        {3, 0x02, 91},
-        {6, 0x02, 91},
-        {10, 0x02, 91},
-        {15, 0x02, 91},
-        {24, 0x02, 91},
-        {31, 0x02, 91},
-        {41, 0x02, 91},
-        {56, 0x03, 91},
+        {0x8003, 64},
+        {0x8006, 64},
+        {0x800a, 64},
+        {0x800f, 64},
+        {0x8018, 64},
+        {0x801f, 64},
+        {0x8029, 64},
+        {0xc038, 64},
+        {0x8003, 91},
+        {0x8006, 91},
+        {0x800a, 91},
+        {0x800f, 91},
+        {0x8018, 91},
+        {0x801f, 91},
+        {0x8029, 91},
+        {0xc038, 91},
     },
     /* 88 */
     {
-        {2, 0x02, 93},
-        {9, 0x02, 93},
-        {23, 0x02, 93},
-        {40, 0x03, 93},
-        {2, 0x02, 126},
-        {9, 0x02, 126},
-        {23, 0x02, 126},
-        {40, 0x03, 126},
-        {1, 0x02, 94},
-        {22, 0x03, 94},
-        {1, 0x02, 125},
-        {22, 0x03, 125},
-        {0, 0x03, 60},
-        {0, 0x03, 96},
-        {0, 0x03, 123},
-        {95, 0x00, 0},
+        {0x8002, 93},
+        {0x8009, 93},
+        {0x8017, 93},
+        {0xc028, 93},
+        {0x8002, 126},
+        {0x8009, 126},
+        {0x8017, 126},
+        {0xc028, 126},
+        {0x8001, 94},
+        {0xc016, 94},
+        {0x8001, 125},
+        {0xc016, 125},
+        {0xc000, 60},
+        {0xc000, 96},
+        {0xc000, 123},
+        {0x5f, 0},
     },
     /* 89 */
     {
-        {3, 0x02, 93},
-        {6, 0x02, 93},
-        {10, 0x02, 93},
-        {15, 0x02, 93},
-        {24, 0x02, 93},
-        {31, 0x02, 93},
-        {41, 0x02, 93},
-        {56, 0x03, 93},
-        {3, 0x02, 126},
-        {6, 0x02, 126},
-        {10, 0x02, 126},
-        {15, 0x02, 126},
-        {24, 0x02, 126},
-        {31, 0x02, 126},
-        {41, 0x02, 126},
-        {56, 0x03, 126},
+        {0x8003, 93},
+        {0x8006, 93},
+        {0x800a, 93},
+        {0x800f, 93},
+        {0x8018, 93},
+        {0x801f, 93},
+        {0x8029, 93},
+        {0xc038, 93},
+        {0x8003, 126},
+        {0x8006, 126},
+        {0x800a, 126},
+        {0x800f, 126},
+        {0x8018, 126},
+        {0x801f, 126},
+        {0x8029, 126},
+        {0xc038, 126},
     },
     /* 90 */
     {
-        {2, 0x02, 94},
-        {9, 0x02, 94},
-        {23, 0x02, 94},
-        {40, 0x03, 94},
-        {2, 0x02, 125},
-        {9, 0x02, 125},
-        {23, 0x02, 125},
-        {40, 0x03, 125},
-        {1, 0x02, 60},
-        {22, 0x03, 60},
-        {1, 0x02, 96},
-        {22, 0x03, 96},
-        {1, 0x02, 123},
-        {22, 0x03, 123},
-        {96, 0x00, 0},
-        {110, 0x00, 0},
+        {0x8002, 94},
+        {0x8009, 94},
+        {0x8017, 94},
+        {0xc028, 94},
+        {0x8002, 125},
+        {0x8009, 125},
+        {0x8017, 125},
+        {0xc028, 125},
+        {0x8001, 60},
+        {0xc016, 60},
+        {0x8001, 96},
+        {0xc016, 96},
+        {0x8001, 123},
+        {0xc016, 123},
+        {0x60, 0},
+        {0x6e, 0},
     },
     /* 91 */
     {
-        {3, 0x02, 94},
-        {6, 0x02, 94},
-        {10, 0x02, 94},
-        {15, 0x02, 94},
-        {24, 0x02, 94},
-        {31, 0x02, 94},
-        {41, 0x02, 94},
-        {56, 0x03, 94},
-        {3, 0x02, 125},
-        {6, 0x02, 125},
-        {10, 0x02, 125},
-        {15, 0x02, 125},
-        {24, 0x02, 125},
-        {31, 0x02, 125},
-        {41, 0x02, 125},
-        {56, 0x03, 125},
+        {0x8003, 94},
+        {0x8006, 94},
+        {0x800a, 94},
+        {0x800f, 94},
+        {0x8018, 94},
+        {0x801f, 94},
+        {0x8029, 94},
+        {0xc038, 94},
+        {0x8003, 125},
+        {0x8006, 125},
+        {0x800a, 125},
+        {0x800f, 125},
+        {0x8018, 125},
+        {0x801f, 125},
+        {0x8029, 125},
+        {0xc038, 125},
     },
     /* 92 */
     {
-        {2, 0x02, 60},
-        {9, 0x02, 60},
-        {23, 0x02, 60},
-        {40, 0x03, 60},
-        {2, 0x02, 96},
-        {9, 0x02, 96},
-        {23, 0x02, 96},
-        {40, 0x03, 96},
-        {2, 0x02, 123},
-        {9, 0x02, 123},
-        {23, 0x02, 123},
-        {40, 0x03, 123},
-        {97, 0x00, 0},
-        {101, 0x00, 0},
-        {111, 0x00, 0},
-        {133, 0x00, 0},
+        {0x8002, 60},
+        {0x8009, 60},
+        {0x8017, 60},
+        {0xc028, 60},
+        {0x8002, 96},
+        {0x8009, 96},
+        {0x8017, 96},
+        {0xc028, 96},
+        {0x8002, 123},
+        {0x8009, 123},
+        {0x8017, 123},
+        {0xc028, 123},
+        {0x61, 0},
+        {0x65, 0},
+        {0x6f, 0},
+        {0x85, 0},
     },
     /* 93 */
     {
-        {3, 0x02, 60},
-        {6, 0x02, 60},
-        {10, 0x02, 60},
-        {15, 0x02, 60},
-        {24, 0x02, 60},
-        {31, 0x02, 60},
-        {41, 0x02, 60},
-        {56, 0x03, 60},
-        {3, 0x02, 96},
-        {6, 0x02, 96},
-        {10, 0x02, 96},
-        {15, 0x02, 96},
-        {24, 0x02, 96},
-        {31, 0x02, 96},
-        {41, 0x02, 96},
-        {56, 0x03, 96},
+        {0x8003, 60},
+        {0x8006, 60},
+        {0x800a, 60},
+        {0x800f, 60},
+        {0x8018, 60},
+        {0x801f, 60},
+        {0x8029, 60},
+        {0xc038, 60},
+        {0x8003, 96},
+        {0x8006, 96},
+        {0x800a, 96},
+        {0x800f, 96},
+        {0x8018, 96},
+        {0x801f, 96},
+        {0x8029, 96},
+        {0xc038, 96},
     },
     /* 94 */
     {
-        {3, 0x02, 123},
-        {6, 0x02, 123},
-        {10, 0x02, 123},
-        {15, 0x02, 123},
-        {24, 0x02, 123},
-        {31, 0x02, 123},
-        {41, 0x02, 123},
-        {56, 0x03, 123},
-        {98, 0x00, 0},
-        {99, 0x00, 0},
-        {102, 0x00, 0},
-        {105, 0x00, 0},
-        {112, 0x00, 0},
-        {119, 0x00, 0},
-        {134, 0x00, 0},
-        {153, 0x00, 0},
+        {0x8003, 123},
+        {0x8006, 123},
+        {0x800a, 123},
+        {0x800f, 123},
+        {0x8018, 123},
+        {0x801f, 123},
+        {0x8029, 123},
+        {0xc038, 123},
+        {0x62, 0},
+        {0x63, 0},
+        {0x66, 0},
+        {0x69, 0},
+        {0x70, 0},
+        {0x77, 0},
+        {0x86, 0},
+        {0x99, 0},
     },
     /* 95 */
     {
-        {0, 0x03, 92},
-        {0, 0x03, 195},
-        {0, 0x03, 208},
-        {100, 0x00, 0},
-        {103, 0x00, 0},
-        {104, 0x00, 0},
-        {106, 0x00, 0},
-        {107, 0x00, 0},
-        {113, 0x00, 0},
-        {116, 0x00, 0},
-        {120, 0x00, 0},
-        {126, 0x00, 0},
-        {135, 0x00, 0},
-        {142, 0x00, 0},
-        {154, 0x00, 0},
-        {169, 0x00, 0},
+        {0xc000, 92},
+        {0xc000, 195},
+        {0xc000, 208},
+        {0x64, 0},
+        {0x67, 0},
+        {0x68, 0},
+        {0x6a, 0},
+        {0x6b, 0},
+        {0x71, 0},
+        {0x74, 0},
+        {0x78, 0},
+        {0x7e, 0},
+        {0x87, 0},
+        {0x8e, 0},
+        {0x9a, 0},
+        {0xa9, 0},
     },
     /* 96 */
     {
-        {1, 0x02, 92},
-        {22, 0x03, 92},
-        {1, 0x02, 195},
-        {22, 0x03, 195},
-        {1, 0x02, 208},
-        {22, 0x03, 208},
-        {0, 0x03, 128},
-        {0, 0x03, 130},
-        {0, 0x03, 131},
-        {0, 0x03, 162},
-        {0, 0x03, 184},
-        {0, 0x03, 194},
-        {0, 0x03, 224},
-        {0, 0x03, 226},
-        {108, 0x00, 0},
-        {109, 0x00, 0},
+        {0x8001, 92},
+        {0xc016, 92},
+        {0x8001, 195},
+        {0xc016, 195},
+        {0x8001, 208},
+        {0xc016, 208},
+        {0xc000, 128},
+        {0xc000, 130},
+        {0xc000, 131},
+        {0xc000, 162},
+        {0xc000, 184},
+        {0xc000, 194},
+        {0xc000, 224},
+        {0xc000, 226},
+        {0x6c, 0},
+        {0x6d, 0},
     },
     /* 97 */
     {
-        {2, 0x02, 92},
-        {9, 0x02, 92},
-        {23, 0x02, 92},
-        {40, 0x03, 92},
-        {2, 0x02, 195},
-        {9, 0x02, 195},
-        {23, 0x02, 195},
-        {40, 0x03, 195},
-        {2, 0x02, 208},
-        {9, 0x02, 208},
-        {23, 0x02, 208},
-        {40, 0x03, 208},
-        {1, 0x02, 128},
-        {22, 0x03, 128},
-        {1, 0x02, 130},
-        {22, 0x03, 130},
+        {0x8002, 92},
+        {0x8009, 92},
+        {0x8017, 92},
+        {0xc028, 92},
+        {0x8002, 195},
+        {0x8009, 195},
+        {0x8017, 195},
+        {0xc028, 195},
+        {0x8002, 208},
+        {0x8009, 208},
+        {0x8017, 208},
+        {0xc028, 208},
+        {0x8001, 128},
+        {0xc016, 128},
+        {0x8001, 130},
+        {0xc016, 130},
     },
     /* 98 */
     {
-        {3, 0x02, 92},
-        {6, 0x02, 92},
-        {10, 0x02, 92},
-        {15, 0x02, 92},
-        {24, 0x02, 92},
-        {31, 0x02, 92},
-        {41, 0x02, 92},
-        {56, 0x03, 92},
-        {3, 0x02, 195},
-        {6, 0x02, 195},
-        {10, 0x02, 195},
-        {15, 0x02, 195},
-        {24, 0x02, 195},
-        {31, 0x02, 195},
-        {41, 0x02, 195},
-        {56, 0x03, 195},
+        {0x8003, 92},
+        {0x8006, 92},
+        {0x800a, 92},
+        {0x800f, 92},
+        {0x8018, 92},
+        {0x801f, 92},
+        {0x8029, 92},
+        {0xc038, 92},
+        {0x8003, 195},
+        {0x8006, 195},
+        {0x800a, 195},
+        {0x800f, 195},
+        {0x8018, 195},
+        {0x801f, 195},
+        {0x8029, 195},
+        {0xc038, 195},
     },
     /* 99 */
     {
-        {3, 0x02, 208},
-        {6, 0x02, 208},
-        {10, 0x02, 208},
-        {15, 0x02, 208},
-        {24, 0x02, 208},
-        {31, 0x02, 208},
-        {41, 0x02, 208},
-        {56, 0x03, 208},
-        {2, 0x02, 128},
-        {9, 0x02, 128},
-        {23, 0x02, 128},
-        {40, 0x03, 128},
-        {2, 0x02, 130},
-        {9, 0x02, 130},
-        {23, 0x02, 130},
-        {40, 0x03, 130},
+        {0x8003, 208},
+        {0x8006, 208},
+        {0x800a, 208},
+        {0x800f, 208},
+        {0x8018, 208},
+        {0x801f, 208},
+        {0x8029, 208},
+        {0xc038, 208},
+        {0x8002, 128},
+        {0x8009, 128},
+        {0x8017, 128},
+        {0xc028, 128},
+        {0x8002, 130},
+        {0x8009, 130},
+        {0x8017, 130},
+        {0xc028, 130},
     },
     /* 100 */
     {
-        {3, 0x02, 128},
-        {6, 0x02, 128},
-        {10, 0x02, 128},
-        {15, 0x02, 128},
-        {24, 0x02, 128},
-        {31, 0x02, 128},
-        {41, 0x02, 128},
-        {56, 0x03, 128},
-        {3, 0x02, 130},
-        {6, 0x02, 130},
-        {10, 0x02, 130},
-        {15, 0x02, 130},
-        {24, 0x02, 130},
-        {31, 0x02, 130},
-        {41, 0x02, 130},
-        {56, 0x03, 130},
+        {0x8003, 128},
+        {0x8006, 128},
+        {0x800a, 128},
+        {0x800f, 128},
+        {0x8018, 128},
+        {0x801f, 128},
+        {0x8029, 128},
+        {0xc038, 128},
+        {0x8003, 130},
+        {0x8006, 130},
+        {0x800a, 130},
+        {0x800f, 130},
+        {0x8018, 130},
+        {0x801f, 130},
+        {0x8029, 130},
+        {0xc038, 130},
     },
     /* 101 */
     {
-        {1, 0x02, 131},
-        {22, 0x03, 131},
-        {1, 0x02, 162},
-        {22, 0x03, 162},
-        {1, 0x02, 184},
-        {22, 0x03, 184},
-        {1, 0x02, 194},
-        {22, 0x03, 194},
-        {1, 0x02, 224},
-        {22, 0x03, 224},
-        {1, 0x02, 226},
-        {22, 0x03, 226},
-        {0, 0x03, 153},
-        {0, 0x03, 161},
-        {0, 0x03, 167},
-        {0, 0x03, 172},
+        {0x8001, 131},
+        {0xc016, 131},
+        {0x8001, 162},
+        {0xc016, 162},
+        {0x8001, 184},
+        {0xc016, 184},
+        {0x8001, 194},
+        {0xc016, 194},
+        {0x8001, 224},
+        {0xc016, 224},
+        {0x8001, 226},
+        {0xc016, 226},
+        {0xc000, 153},
+        {0xc000, 161},
+        {0xc000, 167},
+        {0xc000, 172},
     },
     /* 102 */
     {
-        {2, 0x02, 131},
-        {9, 0x02, 131},
-        {23, 0x02, 131},
-        {40, 0x03, 131},
-        {2, 0x02, 162},
-        {9, 0x02, 162},
-        {23, 0x02, 162},
-        {40, 0x03, 162},
-        {2, 0x02, 184},
-        {9, 0x02, 184},
-        {23, 0x02, 184},
-        {40, 0x03, 184},
-        {2, 0x02, 194},
-        {9, 0x02, 194},
-        {23, 0x02, 194},
-        {40, 0x03, 194},
+        {0x8002, 131},
+        {0x8009, 131},
+        {0x8017, 131},
+        {0xc028, 131},
+        {0x8002, 162},
+        {0x8009, 162},
+        {0x8017, 162},
+        {0xc028, 162},
+        {0x8002, 184},
+        {0x8009, 184},
+        {0x8017, 184},
+        {0xc028, 184},
+        {0x8002, 194},
+        {0x8009, 194},
+        {0x8017, 194},
+        {0xc028, 194},
     },
     /* 103 */
     {
-        {3, 0x02, 131},
-        {6, 0x02, 131},
-        {10, 0x02, 131},
-        {15, 0x02, 131},
-        {24, 0x02, 131},
-        {31, 0x02, 131},
-        {41, 0x02, 131},
-        {56, 0x03, 131},
-        {3, 0x02, 162},
-        {6, 0x02, 162},
-        {10, 0x02, 162},
-        {15, 0x02, 162},
-        {24, 0x02, 162},
-        {31, 0x02, 162},
-        {41, 0x02, 162},
-        {56, 0x03, 162},
+        {0x8003, 131},
+        {0x8006, 131},
+        {0x800a, 131},
+        {0x800f, 131},
+        {0x8018, 131},
+        {0x801f, 131},
+        {0x8029, 131},
+        {0xc038, 131},
+        {0x8003, 162},
+        {0x8006, 162},
+        {0x800a, 162},
+        {0x800f, 162},
+        {0x8018, 162},
+        {0x801f, 162},
+        {0x8029, 162},
+        {0xc038, 162},
     },
     /* 104 */
     {
-        {3, 0x02, 184},
-        {6, 0x02, 184},
-        {10, 0x02, 184},
-        {15, 0x02, 184},
-        {24, 0x02, 184},
-        {31, 0x02, 184},
-        {41, 0x02, 184},
-        {56, 0x03, 184},
-        {3, 0x02, 194},
-        {6, 0x02, 194},
-        {10, 0x02, 194},
-        {15, 0x02, 194},
-        {24, 0x02, 194},
-        {31, 0x02, 194},
-        {41, 0x02, 194},
-        {56, 0x03, 194},
+        {0x8003, 184},
+        {0x8006, 184},
+        {0x800a, 184},
+        {0x800f, 184},
+        {0x8018, 184},
+        {0x801f, 184},
+        {0x8029, 184},
+        {0xc038, 184},
+        {0x8003, 194},
+        {0x8006, 194},
+        {0x800a, 194},
+        {0x800f, 194},
+        {0x8018, 194},
+        {0x801f, 194},
+        {0x8029, 194},
+        {0xc038, 194},
     },
     /* 105 */
     {
-        {2, 0x02, 224},
-        {9, 0x02, 224},
-        {23, 0x02, 224},
-        {40, 0x03, 224},
-        {2, 0x02, 226},
-        {9, 0x02, 226},
-        {23, 0x02, 226},
-        {40, 0x03, 226},
-        {1, 0x02, 153},
-        {22, 0x03, 153},
-        {1, 0x02, 161},
-        {22, 0x03, 161},
-        {1, 0x02, 167},
-        {22, 0x03, 167},
-        {1, 0x02, 172},
-        {22, 0x03, 172},
+        {0x8002, 224},
+        {0x8009, 224},
+        {0x8017, 224},
+        {0xc028, 224},
+        {0x8002, 226},
+        {0x8009, 226},
+        {0x8017, 226},
+        {0xc028, 226},
+        {0x8001, 153},
+        {0xc016, 153},
+        {0x8001, 161},
+        {0xc016, 161},
+        {0x8001, 167},
+        {0xc016, 167},
+        {0x8001, 172},
+        {0xc016, 172},
     },
     /* 106 */
     {
-        {3, 0x02, 224},
-        {6, 0x02, 224},
-        {10, 0x02, 224},
-        {15, 0x02, 224},
-        {24, 0x02, 224},
-        {31, 0x02, 224},
-        {41, 0x02, 224},
-        {56, 0x03, 224},
-        {3, 0x02, 226},
-        {6, 0x02, 226},
-        {10, 0x02, 226},
-        {15, 0x02, 226},
-        {24, 0x02, 226},
-        {31, 0x02, 226},
-        {41, 0x02, 226},
-        {56, 0x03, 226},
+        {0x8003, 224},
+        {0x8006, 224},
+        {0x800a, 224},
+        {0x800f, 224},
+        {0x8018, 224},
+        {0x801f, 224},
+        {0x8029, 224},
+        {0xc038, 224},
+        {0x8003, 226},
+        {0x8006, 226},
+        {0x800a, 226},
+        {0x800f, 226},
+        {0x8018, 226},
+        {0x801f, 226},
+        {0x8029, 226},
+        {0xc038, 226},
     },
     /* 107 */
     {
-        {2, 0x02, 153},
-        {9, 0x02, 153},
-        {23, 0x02, 153},
-        {40, 0x03, 153},
-        {2, 0x02, 161},
-        {9, 0x02, 161},
-        {23, 0x02, 161},
-        {40, 0x03, 161},
-        {2, 0x02, 167},
-        {9, 0x02, 167},
-        {23, 0x02, 167},
-        {40, 0x03, 167},
-        {2, 0x02, 172},
-        {9, 0x02, 172},
-        {23, 0x02, 172},
-        {40, 0x03, 172},
+        {0x8002, 153},
+        {0x8009, 153},
+        {0x8017, 153},
+        {0xc028, 153},
+        {0x8002, 161},
+        {0x8009, 161},
+        {0x8017, 161},
+        {0xc028, 161},
+        {0x8002, 167},
+        {0x8009, 167},
+        {0x8017, 167},
+        {0xc028, 167},
+        {0x8002, 172},
+        {0x8009, 172},
+        {0x8017, 172},
+        {0xc028, 172},
     },
     /* 108 */
     {
-        {3, 0x02, 153},
-        {6, 0x02, 153},
-        {10, 0x02, 153},
-        {15, 0x02, 153},
-        {24, 0x02, 153},
-        {31, 0x02, 153},
-        {41, 0x02, 153},
-        {56, 0x03, 153},
-        {3, 0x02, 161},
-        {6, 0x02, 161},
-        {10, 0x02, 161},
-        {15, 0x02, 161},
-        {24, 0x02, 161},
-        {31, 0x02, 161},
-        {41, 0x02, 161},
-        {56, 0x03, 161},
+        {0x8003, 153},
+        {0x8006, 153},
+        {0x800a, 153},
+        {0x800f, 153},
+        {0x8018, 153},
+        {0x801f, 153},
+        {0x8029, 153},
+        {0xc038, 153},
+        {0x8003, 161},
+        {0x8006, 161},
+        {0x800a, 161},
+        {0x800f, 161},
+        {0x8018, 161},
+        {0x801f, 161},
+        {0x8029, 161},
+        {0xc038, 161},
     },
     /* 109 */
     {
-        {3, 0x02, 167},
-        {6, 0x02, 167},
-        {10, 0x02, 167},
-        {15, 0x02, 167},
-        {24, 0x02, 167},
-        {31, 0x02, 167},
-        {41, 0x02, 167},
-        {56, 0x03, 167},
-        {3, 0x02, 172},
-        {6, 0x02, 172},
-        {10, 0x02, 172},
-        {15, 0x02, 172},
-        {24, 0x02, 172},
-        {31, 0x02, 172},
-        {41, 0x02, 172},
-        {56, 0x03, 172},
+        {0x8003, 167},
+        {0x8006, 167},
+        {0x800a, 167},
+        {0x800f, 167},
+        {0x8018, 167},
+        {0x801f, 167},
+        {0x8029, 167},
+        {0xc038, 167},
+        {0x8003, 172},
+        {0x8006, 172},
+        {0x800a, 172},
+        {0x800f, 172},
+        {0x8018, 172},
+        {0x801f, 172},
+        {0x8029, 172},
+        {0xc038, 172},
     },
     /* 110 */
     {
-        {114, 0x00, 0},
-        {115, 0x00, 0},
-        {117, 0x00, 0},
-        {118, 0x00, 0},
-        {121, 0x00, 0},
-        {123, 0x00, 0},
-        {127, 0x00, 0},
-        {130, 0x00, 0},
-        {136, 0x00, 0},
-        {139, 0x00, 0},
-        {143, 0x00, 0},
-        {146, 0x00, 0},
-        {155, 0x00, 0},
-        {162, 0x00, 0},
-        {170, 0x00, 0},
-        {180, 0x00, 0},
+        {0x72, 0},
+        {0x73, 0},
+        {0x75, 0},
+        {0x76, 0},
+        {0x79, 0},
+        {0x7b, 0},
+        {0x7f, 0},
+        {0x82, 0},
+        {0x88, 0},
+        {0x8b, 0},
+        {0x8f, 0},
+        {0x92, 0},
+        {0x9b, 0},
+        {0xa2, 0},
+        {0xaa, 0},
+        {0xb4, 0},
     },
     /* 111 */
     {
-        {0, 0x03, 176},
-        {0, 0x03, 177},
-        {0, 0x03, 179},
-        {0, 0x03, 209},
-        {0, 0x03, 216},
-        {0, 0x03, 217},
-        {0, 0x03, 227},
-        {0, 0x03, 229},
-        {0, 0x03, 230},
-        {122, 0x00, 0},
-        {124, 0x00, 0},
-        {125, 0x00, 0},
-        {128, 0x00, 0},
-        {129, 0x00, 0},
-        {131, 0x00, 0},
-        {132, 0x00, 0},
+        {0xc000, 176},
+        {0xc000, 177},
+        {0xc000, 179},
+        {0xc000, 209},
+        {0xc000, 216},
+        {0xc000, 217},
+        {0xc000, 227},
+        {0xc000, 229},
+        {0xc000, 230},
+        {0x7a, 0},
+        {0x7c, 0},
+        {0x7d, 0},
+        {0x80, 0},
+        {0x81, 0},
+        {0x83, 0},
+        {0x84, 0},
     },
     /* 112 */
     {
-        {1, 0x02, 176},
-        {22, 0x03, 176},
-        {1, 0x02, 177},
-        {22, 0x03, 177},
-        {1, 0x02, 179},
-        {22, 0x03, 179},
-        {1, 0x02, 209},
-        {22, 0x03, 209},
-        {1, 0x02, 216},
-        {22, 0x03, 216},
-        {1, 0x02, 217},
-        {22, 0x03, 217},
-        {1, 0x02, 227},
-        {22, 0x03, 227},
-        {1, 0x02, 229},
-        {22, 0x03, 229},
+        {0x8001, 176},
+        {0xc016, 176},
+        {0x8001, 177},
+        {0xc016, 177},
+        {0x8001, 179},
+        {0xc016, 179},
+        {0x8001, 209},
+        {0xc016, 209},
+        {0x8001, 216},
+        {0xc016, 216},
+        {0x8001, 217},
+        {0xc016, 217},
+        {0x8001, 227},
+        {0xc016, 227},
+        {0x8001, 229},
+        {0xc016, 229},
     },
     /* 113 */
     {
-        {2, 0x02, 176},
-        {9, 0x02, 176},
-        {23, 0x02, 176},
-        {40, 0x03, 176},
-        {2, 0x02, 177},
-        {9, 0x02, 177},
-        {23, 0x02, 177},
-        {40, 0x03, 177},
-        {2, 0x02, 179},
-        {9, 0x02, 179},
-        {23, 0x02, 179},
-        {40, 0x03, 179},
-        {2, 0x02, 209},
-        {9, 0x02, 209},
-        {23, 0x02, 209},
-        {40, 0x03, 209},
+        {0x8002, 176},
+        {0x8009, 176},
+        {0x8017, 176},
+        {0xc028, 176},
+        {0x8002, 177},
+        {0x8009, 177},
+        {0x8017, 177},
+        {0xc028, 177},
+        {0x8002, 179},
+        {0x8009, 179},
+        {0x8017, 179},
+        {0xc028, 179},
+        {0x8002, 209},
+        {0x8009, 209},
+        {0x8017, 209},
+        {0xc028, 209},
     },
     /* 114 */
     {
-        {3, 0x02, 176},
-        {6, 0x02, 176},
-        {10, 0x02, 176},
-        {15, 0x02, 176},
-        {24, 0x02, 176},
-        {31, 0x02, 176},
-        {41, 0x02, 176},
-        {56, 0x03, 176},
-        {3, 0x02, 177},
-        {6, 0x02, 177},
-        {10, 0x02, 177},
-        {15, 0x02, 177},
-        {24, 0x02, 177},
-        {31, 0x02, 177},
-        {41, 0x02, 177},
-        {56, 0x03, 177},
+        {0x8003, 176},
+        {0x8006, 176},
+        {0x800a, 176},
+        {0x800f, 176},
+        {0x8018, 176},
+        {0x801f, 176},
+        {0x8029, 176},
+        {0xc038, 176},
+        {0x8003, 177},
+        {0x8006, 177},
+        {0x800a, 177},
+        {0x800f, 177},
+        {0x8018, 177},
+        {0x801f, 177},
+        {0x8029, 177},
+        {0xc038, 177},
     },
     /* 115 */
     {
-        {3, 0x02, 179},
-        {6, 0x02, 179},
-        {10, 0x02, 179},
-        {15, 0x02, 179},
-        {24, 0x02, 179},
-        {31, 0x02, 179},
-        {41, 0x02, 179},
-        {56, 0x03, 179},
-        {3, 0x02, 209},
-        {6, 0x02, 209},
-        {10, 0x02, 209},
-        {15, 0x02, 209},
-        {24, 0x02, 209},
-        {31, 0x02, 209},
-        {41, 0x02, 209},
-        {56, 0x03, 209},
+        {0x8003, 179},
+        {0x8006, 179},
+        {0x800a, 179},
+        {0x800f, 179},
+        {0x8018, 179},
+        {0x801f, 179},
+        {0x8029, 179},
+        {0xc038, 179},
+        {0x8003, 209},
+        {0x8006, 209},
+        {0x800a, 209},
+        {0x800f, 209},
+        {0x8018, 209},
+        {0x801f, 209},
+        {0x8029, 209},
+        {0xc038, 209},
     },
     /* 116 */
     {
-        {2, 0x02, 216},
-        {9, 0x02, 216},
-        {23, 0x02, 216},
-        {40, 0x03, 216},
-        {2, 0x02, 217},
-        {9, 0x02, 217},
-        {23, 0x02, 217},
-        {40, 0x03, 217},
-        {2, 0x02, 227},
-        {9, 0x02, 227},
-        {23, 0x02, 227},
-        {40, 0x03, 227},
-        {2, 0x02, 229},
-        {9, 0x02, 229},
-        {23, 0x02, 229},
-        {40, 0x03, 229},
+        {0x8002, 216},
+        {0x8009, 216},
+        {0x8017, 216},
+        {0xc028, 216},
+        {0x8002, 217},
+        {0x8009, 217},
+        {0x8017, 217},
+        {0xc028, 217},
+        {0x8002, 227},
+        {0x8009, 227},
+        {0x8017, 227},
+        {0xc028, 227},
+        {0x8002, 229},
+        {0x8009, 229},
+        {0x8017, 229},
+        {0xc028, 229},
     },
     /* 117 */
     {
-        {3, 0x02, 216},
-        {6, 0x02, 216},
-        {10, 0x02, 216},
-        {15, 0x02, 216},
-        {24, 0x02, 216},
-        {31, 0x02, 216},
-        {41, 0x02, 216},
-        {56, 0x03, 216},
-        {3, 0x02, 217},
-        {6, 0x02, 217},
-        {10, 0x02, 217},
-        {15, 0x02, 217},
-        {24, 0x02, 217},
-        {31, 0x02, 217},
-        {41, 0x02, 217},
-        {56, 0x03, 217},
+        {0x8003, 216},
+        {0x8006, 216},
+        {0x800a, 216},
+        {0x800f, 216},
+        {0x8018, 216},
+        {0x801f, 216},
+        {0x8029, 216},
+        {0xc038, 216},
+        {0x8003, 217},
+        {0x8006, 217},
+        {0x800a, 217},
+        {0x800f, 217},
+        {0x8018, 217},
+        {0x801f, 217},
+        {0x8029, 217},
+        {0xc038, 217},
     },
     /* 118 */
     {
-        {3, 0x02, 227},
-        {6, 0x02, 227},
-        {10, 0x02, 227},
-        {15, 0x02, 227},
-        {24, 0x02, 227},
-        {31, 0x02, 227},
-        {41, 0x02, 227},
-        {56, 0x03, 227},
-        {3, 0x02, 229},
-        {6, 0x02, 229},
-        {10, 0x02, 229},
-        {15, 0x02, 229},
-        {24, 0x02, 229},
-        {31, 0x02, 229},
-        {41, 0x02, 229},
-        {56, 0x03, 229},
+        {0x8003, 227},
+        {0x8006, 227},
+        {0x800a, 227},
+        {0x800f, 227},
+        {0x8018, 227},
+        {0x801f, 227},
+        {0x8029, 227},
+        {0xc038, 227},
+        {0x8003, 229},
+        {0x8006, 229},
+        {0x800a, 229},
+        {0x800f, 229},
+        {0x8018, 229},
+        {0x801f, 229},
+        {0x8029, 229},
+        {0xc038, 229},
     },
     /* 119 */
     {
-        {1, 0x02, 230},
-        {22, 0x03, 230},
-        {0, 0x03, 129},
-        {0, 0x03, 132},
-        {0, 0x03, 133},
-        {0, 0x03, 134},
-        {0, 0x03, 136},
-        {0, 0x03, 146},
-        {0, 0x03, 154},
-        {0, 0x03, 156},
-        {0, 0x03, 160},
-        {0, 0x03, 163},
-        {0, 0x03, 164},
-        {0, 0x03, 169},
-        {0, 0x03, 170},
-        {0, 0x03, 173},
+        {0x8001, 230},
+        {0xc016, 230},
+        {0xc000, 129},
+        {0xc000, 132},
+        {0xc000, 133},
+        {0xc000, 134},
+        {0xc000, 136},
+        {0xc000, 146},
+        {0xc000, 154},
+        {0xc000, 156},
+        {0xc000, 160},
+        {0xc000, 163},
+        {0xc000, 164},
+        {0xc000, 169},
+        {0xc000, 170},
+        {0xc000, 173},
     },
     /* 120 */
     {
-        {2, 0x02, 230},
-        {9, 0x02, 230},
-        {23, 0x02, 230},
-        {40, 0x03, 230},
-        {1, 0x02, 129},
-        {22, 0x03, 129},
-        {1, 0x02, 132},
-        {22, 0x03, 132},
-        {1, 0x02, 133},
-        {22, 0x03, 133},
-        {1, 0x02, 134},
-        {22, 0x03, 134},
-        {1, 0x02, 136},
-        {22, 0x03, 136},
-        {1, 0x02, 146},
-        {22, 0x03, 146},
+        {0x8002, 230},
+        {0x8009, 230},
+        {0x8017, 230},
+        {0xc028, 230},
+        {0x8001, 129},
+        {0xc016, 129},
+        {0x8001, 132},
+        {0xc016, 132},
+        {0x8001, 133},
+        {0xc016, 133},
+        {0x8001, 134},
+        {0xc016, 134},
+        {0x8001, 136},
+        {0xc016, 136},
+        {0x8001, 146},
+        {0xc016, 146},
     },
     /* 121 */
     {
-        {3, 0x02, 230},
-        {6, 0x02, 230},
-        {10, 0x02, 230},
-        {15, 0x02, 230},
-        {24, 0x02, 230},
-        {31, 0x02, 230},
-        {41, 0x02, 230},
-        {56, 0x03, 230},
-        {2, 0x02, 129},
-        {9, 0x02, 129},
-        {23, 0x02, 129},
-        {40, 0x03, 129},
-        {2, 0x02, 132},
-        {9, 0x02, 132},
-        {23, 0x02, 132},
-        {40, 0x03, 132},
+        {0x8003, 230},
+        {0x8006, 230},
+        {0x800a, 230},
+        {0x800f, 230},
+        {0x8018, 230},
+        {0x801f, 230},
+        {0x8029, 230},
+        {0xc038, 230},
+        {0x8002, 129},
+        {0x8009, 129},
+        {0x8017, 129},
+        {0xc028, 129},
+        {0x8002, 132},
+        {0x8009, 132},
+        {0x8017, 132},
+        {0xc028, 132},
     },
     /* 122 */
     {
-        {3, 0x02, 129},
-        {6, 0x02, 129},
-        {10, 0x02, 129},
-        {15, 0x02, 129},
-        {24, 0x02, 129},
-        {31, 0x02, 129},
-        {41, 0x02, 129},
-        {56, 0x03, 129},
-        {3, 0x02, 132},
-        {6, 0x02, 132},
-        {10, 0x02, 132},
-        {15, 0x02, 132},
-        {24, 0x02, 132},
-        {31, 0x02, 132},
-        {41, 0x02, 132},
-        {56, 0x03, 132},
+        {0x8003, 129},
+        {0x8006, 129},
+        {0x800a, 129},
+        {0x800f, 129},
+        {0x8018, 129},
+        {0x801f, 129},
+        {0x8029, 129},
+        {0xc038, 129},
+        {0x8003, 132},
+        {0x8006, 132},
+        {0x800a, 132},
+        {0x800f, 132},
+        {0x8018, 132},
+        {0x801f, 132},
+        {0x8029, 132},
+        {0xc038, 132},
     },
     /* 123 */
     {
-        {2, 0x02, 133},
-        {9, 0x02, 133},
-        {23, 0x02, 133},
-        {40, 0x03, 133},
-        {2, 0x02, 134},
-        {9, 0x02, 134},
-        {23, 0x02, 134},
-        {40, 0x03, 134},
-        {2, 0x02, 136},
-        {9, 0x02, 136},
-        {23, 0x02, 136},
-        {40, 0x03, 136},
-        {2, 0x02, 146},
-        {9, 0x02, 146},
-        {23, 0x02, 146},
-        {40, 0x03, 146},
+        {0x8002, 133},
+        {0x8009, 133},
+        {0x8017, 133},
+        {0xc028, 133},
+        {0x8002, 134},
+        {0x8009, 134},
+        {0x8017, 134},
+        {0xc028, 134},
+        {0x8002, 136},
+        {0x8009, 136},
+        {0x8017, 136},
+        {0xc028, 136},
+        {0x8002, 146},
+        {0x8009, 146},
+        {0x8017, 146},
+        {0xc028, 146},
     },
     /* 124 */
     {
-        {3, 0x02, 133},
-        {6, 0x02, 133},
-        {10, 0x02, 133},
-        {15, 0x02, 133},
-        {24, 0x02, 133},
-        {31, 0x02, 133},
-        {41, 0x02, 133},
-        {56, 0x03, 133},
-        {3, 0x02, 134},
-        {6, 0x02, 134},
-        {10, 0x02, 134},
-        {15, 0x02, 134},
-        {24, 0x02, 134},
-        {31, 0x02, 134},
-        {41, 0x02, 134},
-        {56, 0x03, 134},
+        {0x8003, 133},
+        {0x8006, 133},
+        {0x800a, 133},
+        {0x800f, 133},
+        {0x8018, 133},
+        {0x801f, 133},
+        {0x8029, 133},
+        {0xc038, 133},
+        {0x8003, 134},
+        {0x8006, 134},
+        {0x800a, 134},
+        {0x800f, 134},
+        {0x8018, 134},
+        {0x801f, 134},
+        {0x8029, 134},
+        {0xc038, 134},
     },
     /* 125 */
     {
-        {3, 0x02, 136},
-        {6, 0x02, 136},
-        {10, 0x02, 136},
-        {15, 0x02, 136},
-        {24, 0x02, 136},
-        {31, 0x02, 136},
-        {41, 0x02, 136},
-        {56, 0x03, 136},
-        {3, 0x02, 146},
-        {6, 0x02, 146},
-        {10, 0x02, 146},
-        {15, 0x02, 146},
-        {24, 0x02, 146},
-        {31, 0x02, 146},
-        {41, 0x02, 146},
-        {56, 0x03, 146},
+        {0x8003, 136},
+        {0x8006, 136},
+        {0x800a, 136},
+        {0x800f, 136},
+        {0x8018, 136},
+        {0x801f, 136},
+        {0x8029, 136},
+        {0xc038, 136},
+        {0x8003, 146},
+        {0x8006, 146},
+        {0x800a, 146},
+        {0x800f, 146},
+        {0x8018, 146},
+        {0x801f, 146},
+        {0x8029, 146},
+        {0xc038, 146},
     },
     /* 126 */
     {
-        {1, 0x02, 154},
-        {22, 0x03, 154},
-        {1, 0x02, 156},
-        {22, 0x03, 156},
-        {1, 0x02, 160},
-        {22, 0x03, 160},
-        {1, 0x02, 163},
-        {22, 0x03, 163},
-        {1, 0x02, 164},
-        {22, 0x03, 164},
-        {1, 0x02, 169},
-        {22, 0x03, 169},
-        {1, 0x02, 170},
-        {22, 0x03, 170},
-        {1, 0x02, 173},
-        {22, 0x03, 173},
+        {0x8001, 154},
+        {0xc016, 154},
+        {0x8001, 156},
+        {0xc016, 156},
+        {0x8001, 160},
+        {0xc016, 160},
+        {0x8001, 163},
+        {0xc016, 163},
+        {0x8001, 164},
+        {0xc016, 164},
+        {0x8001, 169},
+        {0xc016, 169},
+        {0x8001, 170},
+        {0xc016, 170},
+        {0x8001, 173},
+        {0xc016, 173},
     },
     /* 127 */
     {
-        {2, 0x02, 154},
-        {9, 0x02, 154},
-        {23, 0x02, 154},
-        {40, 0x03, 154},
-        {2, 0x02, 156},
-        {9, 0x02, 156},
-        {23, 0x02, 156},
-        {40, 0x03, 156},
-        {2, 0x02, 160},
-        {9, 0x02, 160},
-        {23, 0x02, 160},
-        {40, 0x03, 160},
-        {2, 0x02, 163},
-        {9, 0x02, 163},
-        {23, 0x02, 163},
-        {40, 0x03, 163},
+        {0x8002, 154},
+        {0x8009, 154},
+        {0x8017, 154},
+        {0xc028, 154},
+        {0x8002, 156},
+        {0x8009, 156},
+        {0x8017, 156},
+        {0xc028, 156},
+        {0x8002, 160},
+        {0x8009, 160},
+        {0x8017, 160},
+        {0xc028, 160},
+        {0x8002, 163},
+        {0x8009, 163},
+        {0x8017, 163},
+        {0xc028, 163},
     },
     /* 128 */
     {
-        {3, 0x02, 154},
-        {6, 0x02, 154},
-        {10, 0x02, 154},
-        {15, 0x02, 154},
-        {24, 0x02, 154},
-        {31, 0x02, 154},
-        {41, 0x02, 154},
-        {56, 0x03, 154},
-        {3, 0x02, 156},
-        {6, 0x02, 156},
-        {10, 0x02, 156},
-        {15, 0x02, 156},
-        {24, 0x02, 156},
-        {31, 0x02, 156},
-        {41, 0x02, 156},
-        {56, 0x03, 156},
+        {0x8003, 154},
+        {0x8006, 154},
+        {0x800a, 154},
+        {0x800f, 154},
+        {0x8018, 154},
+        {0x801f, 154},
+        {0x8029, 154},
+        {0xc038, 154},
+        {0x8003, 156},
+        {0x8006, 156},
+        {0x800a, 156},
+        {0x800f, 156},
+        {0x8018, 156},
+        {0x801f, 156},
+        {0x8029, 156},
+        {0xc038, 156},
     },
     /* 129 */
     {
-        {3, 0x02, 160},
-        {6, 0x02, 160},
-        {10, 0x02, 160},
-        {15, 0x02, 160},
-        {24, 0x02, 160},
-        {31, 0x02, 160},
-        {41, 0x02, 160},
-        {56, 0x03, 160},
-        {3, 0x02, 163},
-        {6, 0x02, 163},
-        {10, 0x02, 163},
-        {15, 0x02, 163},
-        {24, 0x02, 163},
-        {31, 0x02, 163},
-        {41, 0x02, 163},
-        {56, 0x03, 163},
+        {0x8003, 160},
+        {0x8006, 160},
+        {0x800a, 160},
+        {0x800f, 160},
+        {0x8018, 160},
+        {0x801f, 160},
+        {0x8029, 160},
+        {0xc038, 160},
+        {0x8003, 163},
+        {0x8006, 163},
+        {0x800a, 163},
+        {0x800f, 163},
+        {0x8018, 163},
+        {0x801f, 163},
+        {0x8029, 163},
+        {0xc038, 163},
     },
     /* 130 */
     {
-        {2, 0x02, 164},
-        {9, 0x02, 164},
-        {23, 0x02, 164},
-        {40, 0x03, 164},
-        {2, 0x02, 169},
-        {9, 0x02, 169},
-        {23, 0x02, 169},
-        {40, 0x03, 169},
-        {2, 0x02, 170},
-        {9, 0x02, 170},
-        {23, 0x02, 170},
-        {40, 0x03, 170},
-        {2, 0x02, 173},
-        {9, 0x02, 173},
-        {23, 0x02, 173},
-        {40, 0x03, 173},
+        {0x8002, 164},
+        {0x8009, 164},
+        {0x8017, 164},
+        {0xc028, 164},
+        {0x8002, 169},
+        {0x8009, 169},
+        {0x8017, 169},
+        {0xc028, 169},
+        {0x8002, 170},
+        {0x8009, 170},
+        {0x8017, 170},
+        {0xc028, 170},
+        {0x8002, 173},
+        {0x8009, 173},
+        {0x8017, 173},
+        {0xc028, 173},
     },
     /* 131 */
     {
-        {3, 0x02, 164},
-        {6, 0x02, 164},
-        {10, 0x02, 164},
-        {15, 0x02, 164},
-        {24, 0x02, 164},
-        {31, 0x02, 164},
-        {41, 0x02, 164},
-        {56, 0x03, 164},
-        {3, 0x02, 169},
-        {6, 0x02, 169},
-        {10, 0x02, 169},
-        {15, 0x02, 169},
-        {24, 0x02, 169},
-        {31, 0x02, 169},
-        {41, 0x02, 169},
-        {56, 0x03, 169},
+        {0x8003, 164},
+        {0x8006, 164},
+        {0x800a, 164},
+        {0x800f, 164},
+        {0x8018, 164},
+        {0x801f, 164},
+        {0x8029, 164},
+        {0xc038, 164},
+        {0x8003, 169},
+        {0x8006, 169},
+        {0x800a, 169},
+        {0x800f, 169},
+        {0x8018, 169},
+        {0x801f, 169},
+        {0x8029, 169},
+        {0xc038, 169},
     },
     /* 132 */
     {
-        {3, 0x02, 170},
-        {6, 0x02, 170},
-        {10, 0x02, 170},
-        {15, 0x02, 170},
-        {24, 0x02, 170},
-        {31, 0x02, 170},
-        {41, 0x02, 170},
-        {56, 0x03, 170},
-        {3, 0x02, 173},
-        {6, 0x02, 173},
-        {10, 0x02, 173},
-        {15, 0x02, 173},
-        {24, 0x02, 173},
-        {31, 0x02, 173},
-        {41, 0x02, 173},
-        {56, 0x03, 173},
+        {0x8003, 170},
+        {0x8006, 170},
+        {0x800a, 170},
+        {0x800f, 170},
+        {0x8018, 170},
+        {0x801f, 170},
+        {0x8029, 170},
+        {0xc038, 170},
+        {0x8003, 173},
+        {0x8006, 173},
+        {0x800a, 173},
+        {0x800f, 173},
+        {0x8018, 173},
+        {0x801f, 173},
+        {0x8029, 173},
+        {0xc038, 173},
     },
     /* 133 */
     {
-        {137, 0x00, 0},
-        {138, 0x00, 0},
-        {140, 0x00, 0},
-        {141, 0x00, 0},
-        {144, 0x00, 0},
-        {145, 0x00, 0},
-        {147, 0x00, 0},
-        {150, 0x00, 0},
-        {156, 0x00, 0},
-        {159, 0x00, 0},
-        {163, 0x00, 0},
-        {166, 0x00, 0},
-        {171, 0x00, 0},
-        {174, 0x00, 0},
-        {181, 0x00, 0},
-        {190, 0x00, 0},
+        {0x89, 0},
+        {0x8a, 0},
+        {0x8c, 0},
+        {0x8d, 0},
+        {0x90, 0},
+        {0x91, 0},
+        {0x93, 0},
+        {0x96, 0},
+        {0x9c, 0},
+        {0x9f, 0},
+        {0xa3, 0},
+        {0xa6, 0},
+        {0xab, 0},
+        {0xae, 0},
+        {0xb5, 0},
+        {0xbe, 0},
     },
     /* 134 */
     {
-        {0, 0x03, 178},
-        {0, 0x03, 181},
-        {0, 0x03, 185},
-        {0, 0x03, 186},
-        {0, 0x03, 187},
-        {0, 0x03, 189},
-        {0, 0x03, 190},
-        {0, 0x03, 196},
-        {0, 0x03, 198},
-        {0, 0x03, 228},
-        {0, 0x03, 232},
-        {0, 0x03, 233},
-        {148, 0x00, 0},
-        {149, 0x00, 0},
-        {151, 0x00, 0},
-        {152, 0x00, 0},
+        {0xc000, 178},
+        {0xc000, 181},
+        {0xc000, 185},
+        {0xc000, 186},
+        {0xc000, 187},
+        {0xc000, 189},
+        {0xc000, 190},
+        {0xc000, 196},
+        {0xc000, 198},
+        {0xc000, 228},
+        {0xc000, 232},
+        {0xc000, 233},
+        {0x94, 0},
+        {0x95, 0},
+        {0x97, 0},
+        {0x98, 0},
     },
     /* 135 */
     {
-        {1, 0x02, 178},
-        {22, 0x03, 178},
-        {1, 0x02, 181},
-        {22, 0x03, 181},
-        {1, 0x02, 185},
-        {22, 0x03, 185},
-        {1, 0x02, 186},
-        {22, 0x03, 186},
-        {1, 0x02, 187},
-        {22, 0x03, 187},
-        {1, 0x02, 189},
-        {22, 0x03, 189},
-        {1, 0x02, 190},
-        {22, 0x03, 190},
-        {1, 0x02, 196},
-        {22, 0x03, 196},
+        {0x8001, 178},
+        {0xc016, 178},
+        {0x8001, 181},
+        {0xc016, 181},
+        {0x8001, 185},
+        {0xc016, 185},
+        {0x8001, 186},
+        {0xc016, 186},
+        {0x8001, 187},
+        {0xc016, 187},
+        {0x8001, 189},
+        {0xc016, 189},
+        {0x8001, 190},
+        {0xc016, 190},
+        {0x8001, 196},
+        {0xc016, 196},
     },
     /* 136 */
     {
-        {2, 0x02, 178},
-        {9, 0x02, 178},
-        {23, 0x02, 178},
-        {40, 0x03, 178},
-        {2, 0x02, 181},
-        {9, 0x02, 181},
-        {23, 0x02, 181},
-        {40, 0x03, 181},
-        {2, 0x02, 185},
-        {9, 0x02, 185},
-        {23, 0x02, 185},
-        {40, 0x03, 185},
-        {2, 0x02, 186},
-        {9, 0x02, 186},
-        {23, 0x02, 186},
-        {40, 0x03, 186},
+        {0x8002, 178},
+        {0x8009, 178},
+        {0x8017, 178},
+        {0xc028, 178},
+        {0x8002, 181},
+        {0x8009, 181},
+        {0x8017, 181},
+        {0xc028, 181},
+        {0x8002, 185},
+        {0x8009, 185},
+        {0x8017, 185},
+        {0xc028, 185},
+        {0x8002, 186},
+        {0x8009, 186},
+        {0x8017, 186},
+        {0xc028, 186},
     },
     /* 137 */
     {
-        {3, 0x02, 178},
-        {6, 0x02, 178},
-        {10, 0x02, 178},
-        {15, 0x02, 178},
-        {24, 0x02, 178},
-        {31, 0x02, 178},
-        {41, 0x02, 178},
-        {56, 0x03, 178},
-        {3, 0x02, 181},
-        {6, 0x02, 181},
-        {10, 0x02, 181},
-        {15, 0x02, 181},
-        {24, 0x02, 181},
-        {31, 0x02, 181},
-        {41, 0x02, 181},
-        {56, 0x03, 181},
+        {0x8003, 178},
+        {0x8006, 178},
+        {0x800a, 178},
+        {0x800f, 178},
+        {0x8018, 178},
+        {0x801f, 178},
+        {0x8029, 178},
+        {0xc038, 178},
+        {0x8003, 181},
+        {0x8006, 181},
+        {0x800a, 181},
+        {0x800f, 181},
+        {0x8018, 181},
+        {0x801f, 181},
+        {0x8029, 181},
+        {0xc038, 181},
     },
     /* 138 */
     {
-        {3, 0x02, 185},
-        {6, 0x02, 185},
-        {10, 0x02, 185},
-        {15, 0x02, 185},
-        {24, 0x02, 185},
-        {31, 0x02, 185},
-        {41, 0x02, 185},
-        {56, 0x03, 185},
-        {3, 0x02, 186},
-        {6, 0x02, 186},
-        {10, 0x02, 186},
-        {15, 0x02, 186},
-        {24, 0x02, 186},
-        {31, 0x02, 186},
-        {41, 0x02, 186},
-        {56, 0x03, 186},
+        {0x8003, 185},
+        {0x8006, 185},
+        {0x800a, 185},
+        {0x800f, 185},
+        {0x8018, 185},
+        {0x801f, 185},
+        {0x8029, 185},
+        {0xc038, 185},
+        {0x8003, 186},
+        {0x8006, 186},
+        {0x800a, 186},
+        {0x800f, 186},
+        {0x8018, 186},
+        {0x801f, 186},
+        {0x8029, 186},
+        {0xc038, 186},
     },
     /* 139 */
     {
-        {2, 0x02, 187},
-        {9, 0x02, 187},
-        {23, 0x02, 187},
-        {40, 0x03, 187},
-        {2, 0x02, 189},
-        {9, 0x02, 189},
-        {23, 0x02, 189},
-        {40, 0x03, 189},
-        {2, 0x02, 190},
-        {9, 0x02, 190},
-        {23, 0x02, 190},
-        {40, 0x03, 190},
-        {2, 0x02, 196},
-        {9, 0x02, 196},
-        {23, 0x02, 196},
-        {40, 0x03, 196},
+        {0x8002, 187},
+        {0x8009, 187},
+        {0x8017, 187},
+        {0xc028, 187},
+        {0x8002, 189},
+        {0x8009, 189},
+        {0x8017, 189},
+        {0xc028, 189},
+        {0x8002, 190},
+        {0x8009, 190},
+        {0x8017, 190},
+        {0xc028, 190},
+        {0x8002, 196},
+        {0x8009, 196},
+        {0x8017, 196},
+        {0xc028, 196},
     },
     /* 140 */
     {
-        {3, 0x02, 187},
-        {6, 0x02, 187},
-        {10, 0x02, 187},
-        {15, 0x02, 187},
-        {24, 0x02, 187},
-        {31, 0x02, 187},
-        {41, 0x02, 187},
-        {56, 0x03, 187},
-        {3, 0x02, 189},
-        {6, 0x02, 189},
-        {10, 0x02, 189},
-        {15, 0x02, 189},
-        {24, 0x02, 189},
-        {31, 0x02, 189},
-        {41, 0x02, 189},
-        {56, 0x03, 189},
+        {0x8003, 187},
+        {0x8006, 187},
+        {0x800a, 187},
+        {0x800f, 187},
+        {0x8018, 187},
+        {0x801f, 187},
+        {0x8029, 187},
+        {0xc038, 187},
+        {0x8003, 189},
+        {0x8006, 189},
+        {0x800a, 189},
+        {0x800f, 189},
+        {0x8018, 189},
+        {0x801f, 189},
+        {0x8029, 189},
+        {0xc038, 189},
     },
     /* 141 */
     {
-        {3, 0x02, 190},
-        {6, 0x02, 190},
-        {10, 0x02, 190},
-        {15, 0x02, 190},
-        {24, 0x02, 190},
-        {31, 0x02, 190},
-        {41, 0x02, 190},
-        {56, 0x03, 190},
-        {3, 0x02, 196},
-        {6, 0x02, 196},
-        {10, 0x02, 196},
-        {15, 0x02, 196},
-        {24, 0x02, 196},
-        {31, 0x02, 196},
-        {41, 0x02, 196},
-        {56, 0x03, 196},
+        {0x8003, 190},
+        {0x8006, 190},
+        {0x800a, 190},
+        {0x800f, 190},
+        {0x8018, 190},
+        {0x801f, 190},
+        {0x8029, 190},
+        {0xc038, 190},
+        {0x8003, 196},
+        {0x8006, 196},
+        {0x800a, 196},
+        {0x800f, 196},
+        {0x8018, 196},
+        {0x801f, 196},
+        {0x8029, 196},
+        {0xc038, 196},
     },
     /* 142 */
     {
-        {1, 0x02, 198},
-        {22, 0x03, 198},
-        {1, 0x02, 228},
-        {22, 0x03, 228},
-        {1, 0x02, 232},
-        {22, 0x03, 232},
-        {1, 0x02, 233},
-        {22, 0x03, 233},
-        {0, 0x03, 1},
-        {0, 0x03, 135},
-        {0, 0x03, 137},
-        {0, 0x03, 138},
-        {0, 0x03, 139},
-        {0, 0x03, 140},
-        {0, 0x03, 141},
-        {0, 0x03, 143},
+        {0x8001, 198},
+        {0xc016, 198},
+        {0x8001, 228},
+        {0xc016, 228},
+        {0x8001, 232},
+        {0xc016, 232},
+        {0x8001, 233},
+        {0xc016, 233},
+        {0xc000, 1},
+        {0xc000, 135},
+        {0xc000, 137},
+        {0xc000, 138},
+        {0xc000, 139},
+        {0xc000, 140},
+        {0xc000, 141},
+        {0xc000, 143},
     },
     /* 143 */
     {
-        {2, 0x02, 198},
-        {9, 0x02, 198},
-        {23, 0x02, 198},
-        {40, 0x03, 198},
-        {2, 0x02, 228},
-        {9, 0x02, 228},
-        {23, 0x02, 228},
-        {40, 0x03, 228},
-        {2, 0x02, 232},
-        {9, 0x02, 232},
-        {23, 0x02, 232},
-        {40, 0x03, 232},
-        {2, 0x02, 233},
-        {9, 0x02, 233},
-        {23, 0x02, 233},
-        {40, 0x03, 233},
+        {0x8002, 198},
+        {0x8009, 198},
+        {0x8017, 198},
+        {0xc028, 198},
+        {0x8002, 228},
+        {0x8009, 228},
+        {0x8017, 228},
+        {0xc028, 228},
+        {0x8002, 232},
+        {0x8009, 232},
+        {0x8017, 232},
+        {0xc028, 232},
+        {0x8002, 233},
+        {0x8009, 233},
+        {0x8017, 233},
+        {0xc028, 233},
     },
     /* 144 */
     {
-        {3, 0x02, 198},
-        {6, 0x02, 198},
-        {10, 0x02, 198},
-        {15, 0x02, 198},
-        {24, 0x02, 198},
-        {31, 0x02, 198},
-        {41, 0x02, 198},
-        {56, 0x03, 198},
-        {3, 0x02, 228},
-        {6, 0x02, 228},
-        {10, 0x02, 228},
-        {15, 0x02, 228},
-        {24, 0x02, 228},
-        {31, 0x02, 228},
-        {41, 0x02, 228},
-        {56, 0x03, 228},
+        {0x8003, 198},
+        {0x8006, 198},
+        {0x800a, 198},
+        {0x800f, 198},
+        {0x8018, 198},
+        {0x801f, 198},
+        {0x8029, 198},
+        {0xc038, 198},
+        {0x8003, 228},
+        {0x8006, 228},
+        {0x800a, 228},
+        {0x800f, 228},
+        {0x8018, 228},
+        {0x801f, 228},
+        {0x8029, 228},
+        {0xc038, 228},
     },
     /* 145 */
     {
-        {3, 0x02, 232},
-        {6, 0x02, 232},
-        {10, 0x02, 232},
-        {15, 0x02, 232},
-        {24, 0x02, 232},
-        {31, 0x02, 232},
-        {41, 0x02, 232},
-        {56, 0x03, 232},
-        {3, 0x02, 233},
-        {6, 0x02, 233},
-        {10, 0x02, 233},
-        {15, 0x02, 233},
-        {24, 0x02, 233},
-        {31, 0x02, 233},
-        {41, 0x02, 233},
-        {56, 0x03, 233},
+        {0x8003, 232},
+        {0x8006, 232},
+        {0x800a, 232},
+        {0x800f, 232},
+        {0x8018, 232},
+        {0x801f, 232},
+        {0x8029, 232},
+        {0xc038, 232},
+        {0x8003, 233},
+        {0x8006, 233},
+        {0x800a, 233},
+        {0x800f, 233},
+        {0x8018, 233},
+        {0x801f, 233},
+        {0x8029, 233},
+        {0xc038, 233},
     },
     /* 146 */
     {
-        {1, 0x02, 1},
-        {22, 0x03, 1},
-        {1, 0x02, 135},
-        {22, 0x03, 135},
-        {1, 0x02, 137},
-        {22, 0x03, 137},
-        {1, 0x02, 138},
-        {22, 0x03, 138},
-        {1, 0x02, 139},
-        {22, 0x03, 139},
-        {1, 0x02, 140},
-        {22, 0x03, 140},
-        {1, 0x02, 141},
-        {22, 0x03, 141},
-        {1, 0x02, 143},
-        {22, 0x03, 143},
+        {0x8001, 1},
+        {0xc016, 1},
+        {0x8001, 135},
+        {0xc016, 135},
+        {0x8001, 137},
+        {0xc016, 137},
+        {0x8001, 138},
+        {0xc016, 138},
+        {0x8001, 139},
+        {0xc016, 139},
+        {0x8001, 140},
+        {0xc016, 140},
+        {0x8001, 141},
+        {0xc016, 141},
+        {0x8001, 143},
+        {0xc016, 143},
     },
     /* 147 */
     {
-        {2, 0x02, 1},
-        {9, 0x02, 1},
-        {23, 0x02, 1},
-        {40, 0x03, 1},
-        {2, 0x02, 135},
-        {9, 0x02, 135},
-        {23, 0x02, 135},
-        {40, 0x03, 135},
-        {2, 0x02, 137},
-        {9, 0x02, 137},
-        {23, 0x02, 137},
-        {40, 0x03, 137},
-        {2, 0x02, 138},
-        {9, 0x02, 138},
-        {23, 0x02, 138},
-        {40, 0x03, 138},
+        {0x8002, 1},
+        {0x8009, 1},
+        {0x8017, 1},
+        {0xc028, 1},
+        {0x8002, 135},
+        {0x8009, 135},
+        {0x8017, 135},
+        {0xc028, 135},
+        {0x8002, 137},
+        {0x8009, 137},
+        {0x8017, 137},
+        {0xc028, 137},
+        {0x8002, 138},
+        {0x8009, 138},
+        {0x8017, 138},
+        {0xc028, 138},
     },
     /* 148 */
     {
-        {3, 0x02, 1},
-        {6, 0x02, 1},
-        {10, 0x02, 1},
-        {15, 0x02, 1},
-        {24, 0x02, 1},
-        {31, 0x02, 1},
-        {41, 0x02, 1},
-        {56, 0x03, 1},
-        {3, 0x02, 135},
-        {6, 0x02, 135},
-        {10, 0x02, 135},
-        {15, 0x02, 135},
-        {24, 0x02, 135},
-        {31, 0x02, 135},
-        {41, 0x02, 135},
-        {56, 0x03, 135},
+        {0x8003, 1},
+        {0x8006, 1},
+        {0x800a, 1},
+        {0x800f, 1},
+        {0x8018, 1},
+        {0x801f, 1},
+        {0x8029, 1},
+        {0xc038, 1},
+        {0x8003, 135},
+        {0x8006, 135},
+        {0x800a, 135},
+        {0x800f, 135},
+        {0x8018, 135},
+        {0x801f, 135},
+        {0x8029, 135},
+        {0xc038, 135},
     },
     /* 149 */
     {
-        {3, 0x02, 137},
-        {6, 0x02, 137},
-        {10, 0x02, 137},
-        {15, 0x02, 137},
-        {24, 0x02, 137},
-        {31, 0x02, 137},
-        {41, 0x02, 137},
-        {56, 0x03, 137},
-        {3, 0x02, 138},
-        {6, 0x02, 138},
-        {10, 0x02, 138},
-        {15, 0x02, 138},
-        {24, 0x02, 138},
-        {31, 0x02, 138},
-        {41, 0x02, 138},
-        {56, 0x03, 138},
+        {0x8003, 137},
+        {0x8006, 137},
+        {0x800a, 137},
+        {0x800f, 137},
+        {0x8018, 137},
+        {0x801f, 137},
+        {0x8029, 137},
+        {0xc038, 137},
+        {0x8003, 138},
+        {0x8006, 138},
+        {0x800a, 138},
+        {0x800f, 138},
+        {0x8018, 138},
+        {0x801f, 138},
+        {0x8029, 138},
+        {0xc038, 138},
     },
     /* 150 */
     {
-        {2, 0x02, 139},
-        {9, 0x02, 139},
-        {23, 0x02, 139},
-        {40, 0x03, 139},
-        {2, 0x02, 140},
-        {9, 0x02, 140},
-        {23, 0x02, 140},
-        {40, 0x03, 140},
-        {2, 0x02, 141},
-        {9, 0x02, 141},
-        {23, 0x02, 141},
-        {40, 0x03, 141},
-        {2, 0x02, 143},
-        {9, 0x02, 143},
-        {23, 0x02, 143},
-        {40, 0x03, 143},
+        {0x8002, 139},
+        {0x8009, 139},
+        {0x8017, 139},
+        {0xc028, 139},
+        {0x8002, 140},
+        {0x8009, 140},
+        {0x8017, 140},
+        {0xc028, 140},
+        {0x8002, 141},
+        {0x8009, 141},
+        {0x8017, 141},
+        {0xc028, 141},
+        {0x8002, 143},
+        {0x8009, 143},
+        {0x8017, 143},
+        {0xc028, 143},
     },
     /* 151 */
     {
-        {3, 0x02, 139},
-        {6, 0x02, 139},
-        {10, 0x02, 139},
-        {15, 0x02, 139},
-        {24, 0x02, 139},
-        {31, 0x02, 139},
-        {41, 0x02, 139},
-        {56, 0x03, 139},
-        {3, 0x02, 140},
-        {6, 0x02, 140},
-        {10, 0x02, 140},
-        {15, 0x02, 140},
-        {24, 0x02, 140},
-        {31, 0x02, 140},
-        {41, 0x02, 140},
-        {56, 0x03, 140},
+        {0x8003, 139},
+        {0x8006, 139},
+        {0x800a, 139},
+        {0x800f, 139},
+        {0x8018, 139},
+        {0x801f, 139},
+        {0x8029, 139},
+        {0xc038, 139},
+        {0x8003, 140},
+        {0x8006, 140},
+        {0x800a, 140},
+        {0x800f, 140},
+        {0x8018, 140},
+        {0x801f, 140},
+        {0x8029, 140},
+        {0xc038, 140},
     },
     /* 152 */
     {
-        {3, 0x02, 141},
-        {6, 0x02, 141},
-        {10, 0x02, 141},
-        {15, 0x02, 141},
-        {24, 0x02, 141},
-        {31, 0x02, 141},
-        {41, 0x02, 141},
-        {56, 0x03, 141},
-        {3, 0x02, 143},
-        {6, 0x02, 143},
-        {10, 0x02, 143},
-        {15, 0x02, 143},
-        {24, 0x02, 143},
-        {31, 0x02, 143},
-        {41, 0x02, 143},
-        {56, 0x03, 143},
+        {0x8003, 141},
+        {0x8006, 141},
+        {0x800a, 141},
+        {0x800f, 141},
+        {0x8018, 141},
+        {0x801f, 141},
+        {0x8029, 141},
+        {0xc038, 141},
+        {0x8003, 143},
+        {0x8006, 143},
+        {0x800a, 143},
+        {0x800f, 143},
+        {0x8018, 143},
+        {0x801f, 143},
+        {0x8029, 143},
+        {0xc038, 143},
     },
     /* 153 */
     {
-        {157, 0x00, 0},
-        {158, 0x00, 0},
-        {160, 0x00, 0},
-        {161, 0x00, 0},
-        {164, 0x00, 0},
-        {165, 0x00, 0},
-        {167, 0x00, 0},
-        {168, 0x00, 0},
-        {172, 0x00, 0},
-        {173, 0x00, 0},
-        {175, 0x00, 0},
-        {177, 0x00, 0},
-        {182, 0x00, 0},
-        {185, 0x00, 0},
-        {191, 0x00, 0},
-        {207, 0x00, 0},
+        {0x9d, 0},
+        {0x9e, 0},
+        {0xa0, 0},
+        {0xa1, 0},
+        {0xa4, 0},
+        {0xa5, 0},
+        {0xa7, 0},
+        {0xa8, 0},
+        {0xac, 0},
+        {0xad, 0},
+        {0xaf, 0},
+        {0xb1, 0},
+        {0xb6, 0},
+        {0xb9, 0},
+        {0xbf, 0},
+        {0xcf, 0},
     },
     /* 154 */
     {
-        {0, 0x03, 147},
-        {0, 0x03, 149},
-        {0, 0x03, 150},
-        {0, 0x03, 151},
-        {0, 0x03, 152},
-        {0, 0x03, 155},
-        {0, 0x03, 157},
-        {0, 0x03, 158},
-        {0, 0x03, 165},
-        {0, 0x03, 166},
-        {0, 0x03, 168},
-        {0, 0x03, 174},
-        {0, 0x03, 175},
-        {0, 0x03, 180},
-        {0, 0x03, 182},
-        {0, 0x03, 183},
+        {0xc000, 147},
+        {0xc000, 149},
+        {0xc000, 150},
+        {0xc000, 151},
+        {0xc000, 152},
+        {0xc000, 155},
+        {0xc000, 157},
+        {0xc000, 158},
+        {0xc000, 165},
+        {0xc000, 166},
+        {0xc000, 168},
+        {0xc000, 174},
+        {0xc000, 175},
+        {0xc000, 180},
+        {0xc000, 182},
+        {0xc000, 183},
     },
     /* 155 */
     {
-        {1, 0x02, 147},
-        {22, 0x03, 147},
-        {1, 0x02, 149},
-        {22, 0x03, 149},
-        {1, 0x02, 150},
-        {22, 0x03, 150},
-        {1, 0x02, 151},
-        {22, 0x03, 151},
-        {1, 0x02, 152},
-        {22, 0x03, 152},
-        {1, 0x02, 155},
-        {22, 0x03, 155},
-        {1, 0x02, 157},
-        {22, 0x03, 157},
-        {1, 0x02, 158},
-        {22, 0x03, 158},
+        {0x8001, 147},
+        {0xc016, 147},
+        {0x8001, 149},
+        {0xc016, 149},
+        {0x8001, 150},
+        {0xc016, 150},
+        {0x8001, 151},
+        {0xc016, 151},
+        {0x8001, 152},
+        {0xc016, 152},
+        {0x8001, 155},
+        {0xc016, 155},
+        {0x8001, 157},
+        {0xc016, 157},
+        {0x8001, 158},
+        {0xc016, 158},
     },
     /* 156 */
     {
-        {2, 0x02, 147},
-        {9, 0x02, 147},
-        {23, 0x02, 147},
-        {40, 0x03, 147},
-        {2, 0x02, 149},
-        {9, 0x02, 149},
-        {23, 0x02, 149},
-        {40, 0x03, 149},
-        {2, 0x02, 150},
-        {9, 0x02, 150},
-        {23, 0x02, 150},
-        {40, 0x03, 150},
-        {2, 0x02, 151},
-        {9, 0x02, 151},
-        {23, 0x02, 151},
-        {40, 0x03, 151},
+        {0x8002, 147},
+        {0x8009, 147},
+        {0x8017, 147},
+        {0xc028, 147},
+        {0x8002, 149},
+        {0x8009, 149},
+        {0x8017, 149},
+        {0xc028, 149},
+        {0x8002, 150},
+        {0x8009, 150},
+        {0x8017, 150},
+        {0xc028, 150},
+        {0x8002, 151},
+        {0x8009, 151},
+        {0x8017, 151},
+        {0xc028, 151},
     },
     /* 157 */
     {
-        {3, 0x02, 147},
-        {6, 0x02, 147},
-        {10, 0x02, 147},
-        {15, 0x02, 147},
-        {24, 0x02, 147},
-        {31, 0x02, 147},
-        {41, 0x02, 147},
-        {56, 0x03, 147},
-        {3, 0x02, 149},
-        {6, 0x02, 149},
-        {10, 0x02, 149},
-        {15, 0x02, 149},
-        {24, 0x02, 149},
-        {31, 0x02, 149},
-        {41, 0x02, 149},
-        {56, 0x03, 149},
+        {0x8003, 147},
+        {0x8006, 147},
+        {0x800a, 147},
+        {0x800f, 147},
+        {0x8018, 147},
+        {0x801f, 147},
+        {0x8029, 147},
+        {0xc038, 147},
+        {0x8003, 149},
+        {0x8006, 149},
+        {0x800a, 149},
+        {0x800f, 149},
+        {0x8018, 149},
+        {0x801f, 149},
+        {0x8029, 149},
+        {0xc038, 149},
     },
     /* 158 */
     {
-        {3, 0x02, 150},
-        {6, 0x02, 150},
-        {10, 0x02, 150},
-        {15, 0x02, 150},
-        {24, 0x02, 150},
-        {31, 0x02, 150},
-        {41, 0x02, 150},
-        {56, 0x03, 150},
-        {3, 0x02, 151},
-        {6, 0x02, 151},
-        {10, 0x02, 151},
-        {15, 0x02, 151},
-        {24, 0x02, 151},
-        {31, 0x02, 151},
-        {41, 0x02, 151},
-        {56, 0x03, 151},
+        {0x8003, 150},
+        {0x8006, 150},
+        {0x800a, 150},
+        {0x800f, 150},
+        {0x8018, 150},
+        {0x801f, 150},
+        {0x8029, 150},
+        {0xc038, 150},
+        {0x8003, 151},
+        {0x8006, 151},
+        {0x800a, 151},
+        {0x800f, 151},
+        {0x8018, 151},
+        {0x801f, 151},
+        {0x8029, 151},
+        {0xc038, 151},
     },
     /* 159 */
     {
-        {2, 0x02, 152},
-        {9, 0x02, 152},
-        {23, 0x02, 152},
-        {40, 0x03, 152},
-        {2, 0x02, 155},
-        {9, 0x02, 155},
-        {23, 0x02, 155},
-        {40, 0x03, 155},
-        {2, 0x02, 157},
-        {9, 0x02, 157},
-        {23, 0x02, 157},
-        {40, 0x03, 157},
-        {2, 0x02, 158},
-        {9, 0x02, 158},
-        {23, 0x02, 158},
-        {40, 0x03, 158},
+        {0x8002, 152},
+        {0x8009, 152},
+        {0x8017, 152},
+        {0xc028, 152},
+        {0x8002, 155},
+        {0x8009, 155},
+        {0x8017, 155},
+        {0xc028, 155},
+        {0x8002, 157},
+        {0x8009, 157},
+        {0x8017, 157},
+        {0xc028, 157},
+        {0x8002, 158},
+        {0x8009, 158},
+        {0x8017, 158},
+        {0xc028, 158},
     },
     /* 160 */
     {
-        {3, 0x02, 152},
-        {6, 0x02, 152},
-        {10, 0x02, 152},
-        {15, 0x02, 152},
-        {24, 0x02, 152},
-        {31, 0x02, 152},
-        {41, 0x02, 152},
-        {56, 0x03, 152},
-        {3, 0x02, 155},
-        {6, 0x02, 155},
-        {10, 0x02, 155},
-        {15, 0x02, 155},
-        {24, 0x02, 155},
-        {31, 0x02, 155},
-        {41, 0x02, 155},
-        {56, 0x03, 155},
+        {0x8003, 152},
+        {0x8006, 152},
+        {0x800a, 152},
+        {0x800f, 152},
+        {0x8018, 152},
+        {0x801f, 152},
+        {0x8029, 152},
+        {0xc038, 152},
+        {0x8003, 155},
+        {0x8006, 155},
+        {0x800a, 155},
+        {0x800f, 155},
+        {0x8018, 155},
+        {0x801f, 155},
+        {0x8029, 155},
+        {0xc038, 155},
     },
     /* 161 */
     {
-        {3, 0x02, 157},
-        {6, 0x02, 157},
-        {10, 0x02, 157},
-        {15, 0x02, 157},
-        {24, 0x02, 157},
-        {31, 0x02, 157},
-        {41, 0x02, 157},
-        {56, 0x03, 157},
-        {3, 0x02, 158},
-        {6, 0x02, 158},
-        {10, 0x02, 158},
-        {15, 0x02, 158},
-        {24, 0x02, 158},
-        {31, 0x02, 158},
-        {41, 0x02, 158},
-        {56, 0x03, 158},
+        {0x8003, 157},
+        {0x8006, 157},
+        {0x800a, 157},
+        {0x800f, 157},
+        {0x8018, 157},
+        {0x801f, 157},
+        {0x8029, 157},
+        {0xc038, 157},
+        {0x8003, 158},
+        {0x8006, 158},
+        {0x800a, 158},
+        {0x800f, 158},
+        {0x8018, 158},
+        {0x801f, 158},
+        {0x8029, 158},
+        {0xc038, 158},
     },
     /* 162 */
     {
-        {1, 0x02, 165},
-        {22, 0x03, 165},
-        {1, 0x02, 166},
-        {22, 0x03, 166},
-        {1, 0x02, 168},
-        {22, 0x03, 168},
-        {1, 0x02, 174},
-        {22, 0x03, 174},
-        {1, 0x02, 175},
-        {22, 0x03, 175},
-        {1, 0x02, 180},
-        {22, 0x03, 180},
-        {1, 0x02, 182},
-        {22, 0x03, 182},
-        {1, 0x02, 183},
-        {22, 0x03, 183},
+        {0x8001, 165},
+        {0xc016, 165},
+        {0x8001, 166},
+        {0xc016, 166},
+        {0x8001, 168},
+        {0xc016, 168},
+        {0x8001, 174},
+        {0xc016, 174},
+        {0x8001, 175},
+        {0xc016, 175},
+        {0x8001, 180},
+        {0xc016, 180},
+        {0x8001, 182},
+        {0xc016, 182},
+        {0x8001, 183},
+        {0xc016, 183},
     },
     /* 163 */
     {
-        {2, 0x02, 165},
-        {9, 0x02, 165},
-        {23, 0x02, 165},
-        {40, 0x03, 165},
-        {2, 0x02, 166},
-        {9, 0x02, 166},
-        {23, 0x02, 166},
-        {40, 0x03, 166},
-        {2, 0x02, 168},
-        {9, 0x02, 168},
-        {23, 0x02, 168},
-        {40, 0x03, 168},
-        {2, 0x02, 174},
-        {9, 0x02, 174},
-        {23, 0x02, 174},
-        {40, 0x03, 174},
+        {0x8002, 165},
+        {0x8009, 165},
+        {0x8017, 165},
+        {0xc028, 165},
+        {0x8002, 166},
+        {0x8009, 166},
+        {0x8017, 166},
+        {0xc028, 166},
+        {0x8002, 168},
+        {0x8009, 168},
+        {0x8017, 168},
+        {0xc028, 168},
+        {0x8002, 174},
+        {0x8009, 174},
+        {0x8017, 174},
+        {0xc028, 174},
     },
     /* 164 */
     {
-        {3, 0x02, 165},
-        {6, 0x02, 165},
-        {10, 0x02, 165},
-        {15, 0x02, 165},
-        {24, 0x02, 165},
-        {31, 0x02, 165},
-        {41, 0x02, 165},
-        {56, 0x03, 165},
-        {3, 0x02, 166},
-        {6, 0x02, 166},
-        {10, 0x02, 166},
-        {15, 0x02, 166},
-        {24, 0x02, 166},
-        {31, 0x02, 166},
-        {41, 0x02, 166},
-        {56, 0x03, 166},
+        {0x8003, 165},
+        {0x8006, 165},
+        {0x800a, 165},
+        {0x800f, 165},
+        {0x8018, 165},
+        {0x801f, 165},
+        {0x8029, 165},
+        {0xc038, 165},
+        {0x8003, 166},
+        {0x8006, 166},
+        {0x800a, 166},
+        {0x800f, 166},
+        {0x8018, 166},
+        {0x801f, 166},
+        {0x8029, 166},
+        {0xc038, 166},
     },
     /* 165 */
     {
-        {3, 0x02, 168},
-        {6, 0x02, 168},
-        {10, 0x02, 168},
-        {15, 0x02, 168},
-        {24, 0x02, 168},
-        {31, 0x02, 168},
-        {41, 0x02, 168},
-        {56, 0x03, 168},
-        {3, 0x02, 174},
-        {6, 0x02, 174},
-        {10, 0x02, 174},
-        {15, 0x02, 174},
-        {24, 0x02, 174},
-        {31, 0x02, 174},
-        {41, 0x02, 174},
-        {56, 0x03, 174},
+        {0x8003, 168},
+        {0x8006, 168},
+        {0x800a, 168},
+        {0x800f, 168},
+        {0x8018, 168},
+        {0x801f, 168},
+        {0x8029, 168},
+        {0xc038, 168},
+        {0x8003, 174},
+        {0x8006, 174},
+        {0x800a, 174},
+        {0x800f, 174},
+        {0x8018, 174},
+        {0x801f, 174},
+        {0x8029, 174},
+        {0xc038, 174},
     },
     /* 166 */
     {
-        {2, 0x02, 175},
-        {9, 0x02, 175},
-        {23, 0x02, 175},
-        {40, 0x03, 175},
-        {2, 0x02, 180},
-        {9, 0x02, 180},
-        {23, 0x02, 180},
-        {40, 0x03, 180},
-        {2, 0x02, 182},
-        {9, 0x02, 182},
-        {23, 0x02, 182},
-        {40, 0x03, 182},
-        {2, 0x02, 183},
-        {9, 0x02, 183},
-        {23, 0x02, 183},
-        {40, 0x03, 183},
+        {0x8002, 175},
+        {0x8009, 175},
+        {0x8017, 175},
+        {0xc028, 175},
+        {0x8002, 180},
+        {0x8009, 180},
+        {0x8017, 180},
+        {0xc028, 180},
+        {0x8002, 182},
+        {0x8009, 182},
+        {0x8017, 182},
+        {0xc028, 182},
+        {0x8002, 183},
+        {0x8009, 183},
+        {0x8017, 183},
+        {0xc028, 183},
     },
     /* 167 */
     {
-        {3, 0x02, 175},
-        {6, 0x02, 175},
-        {10, 0x02, 175},
-        {15, 0x02, 175},
-        {24, 0x02, 175},
-        {31, 0x02, 175},
-        {41, 0x02, 175},
-        {56, 0x03, 175},
-        {3, 0x02, 180},
-        {6, 0x02, 180},
-        {10, 0x02, 180},
-        {15, 0x02, 180},
-        {24, 0x02, 180},
-        {31, 0x02, 180},
-        {41, 0x02, 180},
-        {56, 0x03, 180},
+        {0x8003, 175},
+        {0x8006, 175},
+        {0x800a, 175},
+        {0x800f, 175},
+        {0x8018, 175},
+        {0x801f, 175},
+        {0x8029, 175},
+        {0xc038, 175},
+        {0x8003, 180},
+        {0x8006, 180},
+        {0x800a, 180},
+        {0x800f, 180},
+        {0x8018, 180},
+        {0x801f, 180},
+        {0x8029, 180},
+        {0xc038, 180},
     },
     /* 168 */
     {
-        {3, 0x02, 182},
-        {6, 0x02, 182},
-        {10, 0x02, 182},
-        {15, 0x02, 182},
-        {24, 0x02, 182},
-        {31, 0x02, 182},
-        {41, 0x02, 182},
-        {56, 0x03, 182},
-        {3, 0x02, 183},
-        {6, 0x02, 183},
-        {10, 0x02, 183},
-        {15, 0x02, 183},
-        {24, 0x02, 183},
-        {31, 0x02, 183},
-        {41, 0x02, 183},
-        {56, 0x03, 183},
+        {0x8003, 182},
+        {0x8006, 182},
+        {0x800a, 182},
+        {0x800f, 182},
+        {0x8018, 182},
+        {0x801f, 182},
+        {0x8029, 182},
+        {0xc038, 182},
+        {0x8003, 183},
+        {0x8006, 183},
+        {0x800a, 183},
+        {0x800f, 183},
+        {0x8018, 183},
+        {0x801f, 183},
+        {0x8029, 183},
+        {0xc038, 183},
     },
     /* 169 */
     {
-        {0, 0x03, 188},
-        {0, 0x03, 191},
-        {0, 0x03, 197},
-        {0, 0x03, 231},
-        {0, 0x03, 239},
-        {176, 0x00, 0},
-        {178, 0x00, 0},
-        {179, 0x00, 0},
-        {183, 0x00, 0},
-        {184, 0x00, 0},
-        {186, 0x00, 0},
-        {187, 0x00, 0},
-        {192, 0x00, 0},
-        {199, 0x00, 0},
-        {208, 0x00, 0},
-        {223, 0x00, 0},
+        {0xc000, 188},
+        {0xc000, 191},
+        {0xc000, 197},
+        {0xc000, 231},
+        {0xc000, 239},
+        {0xb0, 0},
+        {0xb2, 0},
+        {0xb3, 0},
+        {0xb7, 0},
+        {0xb8, 0},
+        {0xba, 0},
+        {0xbb, 0},
+        {0xc0, 0},
+        {0xc7, 0},
+        {0xd0, 0},
+        {0xdf, 0},
     },
     /* 170 */
     {
-        {1, 0x02, 188},
-        {22, 0x03, 188},
-        {1, 0x02, 191},
-        {22, 0x03, 191},
-        {1, 0x02, 197},
-        {22, 0x03, 197},
-        {1, 0x02, 231},
-        {22, 0x03, 231},
-        {1, 0x02, 239},
-        {22, 0x03, 239},
-        {0, 0x03, 9},
-        {0, 0x03, 142},
-        {0, 0x03, 144},
-        {0, 0x03, 145},
-        {0, 0x03, 148},
-        {0, 0x03, 159},
+        {0x8001, 188},
+        {0xc016, 188},
+        {0x8001, 191},
+        {0xc016, 191},
+        {0x8001, 197},
+        {0xc016, 197},
+        {0x8001, 231},
+        {0xc016, 231},
+        {0x8001, 239},
+        {0xc016, 239},
+        {0xc000, 9},
+        {0xc000, 142},
+        {0xc000, 144},
+        {0xc000, 145},
+        {0xc000, 148},
+        {0xc000, 159},
     },
     /* 171 */
     {
-        {2, 0x02, 188},
-        {9, 0x02, 188},
-        {23, 0x02, 188},
-        {40, 0x03, 188},
-        {2, 0x02, 191},
-        {9, 0x02, 191},
-        {23, 0x02, 191},
-        {40, 0x03, 191},
-        {2, 0x02, 197},
-        {9, 0x02, 197},
-        {23, 0x02, 197},
-        {40, 0x03, 197},
-        {2, 0x02, 231},
-        {9, 0x02, 231},
-        {23, 0x02, 231},
-        {40, 0x03, 231},
+        {0x8002, 188},
+        {0x8009, 188},
+        {0x8017, 188},
+        {0xc028, 188},
+        {0x8002, 191},
+        {0x8009, 191},
+        {0x8017, 191},
+        {0xc028, 191},
+        {0x8002, 197},
+        {0x8009, 197},
+        {0x8017, 197},
+        {0xc028, 197},
+        {0x8002, 231},
+        {0x8009, 231},
+        {0x8017, 231},
+        {0xc028, 231},
     },
     /* 172 */
     {
-        {3, 0x02, 188},
-        {6, 0x02, 188},
-        {10, 0x02, 188},
-        {15, 0x02, 188},
-        {24, 0x02, 188},
-        {31, 0x02, 188},
-        {41, 0x02, 188},
-        {56, 0x03, 188},
-        {3, 0x02, 191},
-        {6, 0x02, 191},
-        {10, 0x02, 191},
-        {15, 0x02, 191},
-        {24, 0x02, 191},
-        {31, 0x02, 191},
-        {41, 0x02, 191},
-        {56, 0x03, 191},
+        {0x8003, 188},
+        {0x8006, 188},
+        {0x800a, 188},
+        {0x800f, 188},
+        {0x8018, 188},
+        {0x801f, 188},
+        {0x8029, 188},
+        {0xc038, 188},
+        {0x8003, 191},
+        {0x8006, 191},
+        {0x800a, 191},
+        {0x800f, 191},
+        {0x8018, 191},
+        {0x801f, 191},
+        {0x8029, 191},
+        {0xc038, 191},
     },
     /* 173 */
     {
-        {3, 0x02, 197},
-        {6, 0x02, 197},
-        {10, 0x02, 197},
-        {15, 0x02, 197},
-        {24, 0x02, 197},
-        {31, 0x02, 197},
-        {41, 0x02, 197},
-        {56, 0x03, 197},
-        {3, 0x02, 231},
-        {6, 0x02, 231},
-        {10, 0x02, 231},
-        {15, 0x02, 231},
-        {24, 0x02, 231},
-        {31, 0x02, 231},
-        {41, 0x02, 231},
-        {56, 0x03, 231},
+        {0x8003, 197},
+        {0x8006, 197},
+        {0x800a, 197},
+        {0x800f, 197},
+        {0x8018, 197},
+        {0x801f, 197},
+        {0x8029, 197},
+        {0xc038, 197},
+        {0x8003, 231},
+        {0x8006, 231},
+        {0x800a, 231},
+        {0x800f, 231},
+        {0x8018, 231},
+        {0x801f, 231},
+        {0x8029, 231},
+        {0xc038, 231},
     },
     /* 174 */
     {
-        {2, 0x02, 239},
-        {9, 0x02, 239},
-        {23, 0x02, 239},
-        {40, 0x03, 239},
-        {1, 0x02, 9},
-        {22, 0x03, 9},
-        {1, 0x02, 142},
-        {22, 0x03, 142},
-        {1, 0x02, 144},
-        {22, 0x03, 144},
-        {1, 0x02, 145},
-        {22, 0x03, 145},
-        {1, 0x02, 148},
-        {22, 0x03, 148},
-        {1, 0x02, 159},
-        {22, 0x03, 159},
+        {0x8002, 239},
+        {0x8009, 239},
+        {0x8017, 239},
+        {0xc028, 239},
+        {0x8001, 9},
+        {0xc016, 9},
+        {0x8001, 142},
+        {0xc016, 142},
+        {0x8001, 144},
+        {0xc016, 144},
+        {0x8001, 145},
+        {0xc016, 145},
+        {0x8001, 148},
+        {0xc016, 148},
+        {0x8001, 159},
+        {0xc016, 159},
     },
     /* 175 */
     {
-        {3, 0x02, 239},
-        {6, 0x02, 239},
-        {10, 0x02, 239},
-        {15, 0x02, 239},
-        {24, 0x02, 239},
-        {31, 0x02, 239},
-        {41, 0x02, 239},
-        {56, 0x03, 239},
-        {2, 0x02, 9},
-        {9, 0x02, 9},
-        {23, 0x02, 9},
-        {40, 0x03, 9},
-        {2, 0x02, 142},
-        {9, 0x02, 142},
-        {23, 0x02, 142},
-        {40, 0x03, 142},
+        {0x8003, 239},
+        {0x8006, 239},
+        {0x800a, 239},
+        {0x800f, 239},
+        {0x8018, 239},
+        {0x801f, 239},
+        {0x8029, 239},
+        {0xc038, 239},
+        {0x8002, 9},
+        {0x8009, 9},
+        {0x8017, 9},
+        {0xc028, 9},
+        {0x8002, 142},
+        {0x8009, 142},
+        {0x8017, 142},
+        {0xc028, 142},
     },
     /* 176 */
     {
-        {3, 0x02, 9},
-        {6, 0x02, 9},
-        {10, 0x02, 9},
-        {15, 0x02, 9},
-        {24, 0x02, 9},
-        {31, 0x02, 9},
-        {41, 0x02, 9},
-        {56, 0x03, 9},
-        {3, 0x02, 142},
-        {6, 0x02, 142},
-        {10, 0x02, 142},
-        {15, 0x02, 142},
-        {24, 0x02, 142},
-        {31, 0x02, 142},
-        {41, 0x02, 142},
-        {56, 0x03, 142},
+        {0x8003, 9},
+        {0x8006, 9},
+        {0x800a, 9},
+        {0x800f, 9},
+        {0x8018, 9},
+        {0x801f, 9},
+        {0x8029, 9},
+        {0xc038, 9},
+        {0x8003, 142},
+        {0x8006, 142},
+        {0x800a, 142},
+        {0x800f, 142},
+        {0x8018, 142},
+        {0x801f, 142},
+        {0x8029, 142},
+        {0xc038, 142},
     },
     /* 177 */
     {
-        {2, 0x02, 144},
-        {9, 0x02, 144},
-        {23, 0x02, 144},
-        {40, 0x03, 144},
-        {2, 0x02, 145},
-        {9, 0x02, 145},
-        {23, 0x02, 145},
-        {40, 0x03, 145},
-        {2, 0x02, 148},
-        {9, 0x02, 148},
-        {23, 0x02, 148},
-        {40, 0x03, 148},
-        {2, 0x02, 159},
-        {9, 0x02, 159},
-        {23, 0x02, 159},
-        {40, 0x03, 159},
+        {0x8002, 144},
+        {0x8009, 144},
+        {0x8017, 144},
+        {0xc028, 144},
+        {0x8002, 145},
+        {0x8009, 145},
+        {0x8017, 145},
+        {0xc028, 145},
+        {0x8002, 148},
+        {0x8009, 148},
+        {0x8017, 148},
+        {0xc028, 148},
+        {0x8002, 159},
+        {0x8009, 159},
+        {0x8017, 159},
+        {0xc028, 159},
     },
     /* 178 */
     {
-        {3, 0x02, 144},
-        {6, 0x02, 144},
-        {10, 0x02, 144},
-        {15, 0x02, 144},
-        {24, 0x02, 144},
-        {31, 0x02, 144},
-        {41, 0x02, 144},
-        {56, 0x03, 144},
-        {3, 0x02, 145},
-        {6, 0x02, 145},
-        {10, 0x02, 145},
-        {15, 0x02, 145},
-        {24, 0x02, 145},
-        {31, 0x02, 145},
-        {41, 0x02, 145},
-        {56, 0x03, 145},
+        {0x8003, 144},
+        {0x8006, 144},
+        {0x800a, 144},
+        {0x800f, 144},
+        {0x8018, 144},
+        {0x801f, 144},
+        {0x8029, 144},
+        {0xc038, 144},
+        {0x8003, 145},
+        {0x8006, 145},
+        {0x800a, 145},
+        {0x800f, 145},
+        {0x8018, 145},
+        {0x801f, 145},
+        {0x8029, 145},
+        {0xc038, 145},
     },
     /* 179 */
     {
-        {3, 0x02, 148},
-        {6, 0x02, 148},
-        {10, 0x02, 148},
-        {15, 0x02, 148},
-        {24, 0x02, 148},
-        {31, 0x02, 148},
-        {41, 0x02, 148},
-        {56, 0x03, 148},
-        {3, 0x02, 159},
-        {6, 0x02, 159},
-        {10, 0x02, 159},
-        {15, 0x02, 159},
-        {24, 0x02, 159},
-        {31, 0x02, 159},
-        {41, 0x02, 159},
-        {56, 0x03, 159},
+        {0x8003, 148},
+        {0x8006, 148},
+        {0x800a, 148},
+        {0x800f, 148},
+        {0x8018, 148},
+        {0x801f, 148},
+        {0x8029, 148},
+        {0xc038, 148},
+        {0x8003, 159},
+        {0x8006, 159},
+        {0x800a, 159},
+        {0x800f, 159},
+        {0x8018, 159},
+        {0x801f, 159},
+        {0x8029, 159},
+        {0xc038, 159},
     },
     /* 180 */
     {
-        {0, 0x03, 171},
-        {0, 0x03, 206},
-        {0, 0x03, 215},
-        {0, 0x03, 225},
-        {0, 0x03, 236},
-        {0, 0x03, 237},
-        {188, 0x00, 0},
-        {189, 0x00, 0},
-        {193, 0x00, 0},
-        {196, 0x00, 0},
-        {200, 0x00, 0},
-        {203, 0x00, 0},
-        {209, 0x00, 0},
-        {216, 0x00, 0},
-        {224, 0x00, 0},
-        {238, 0x00, 0},
+        {0xc000, 171},
+        {0xc000, 206},
+        {0xc000, 215},
+        {0xc000, 225},
+        {0xc000, 236},
+        {0xc000, 237},
+        {0xbc, 0},
+        {0xbd, 0},
+        {0xc1, 0},
+        {0xc4, 0},
+        {0xc8, 0},
+        {0xcb, 0},
+        {0xd1, 0},
+        {0xd8, 0},
+        {0xe0, 0},
+        {0xee, 0},
     },
     /* 181 */
     {
-        {1, 0x02, 171},
-        {22, 0x03, 171},
-        {1, 0x02, 206},
-        {22, 0x03, 206},
-        {1, 0x02, 215},
-        {22, 0x03, 215},
-        {1, 0x02, 225},
-        {22, 0x03, 225},
-        {1, 0x02, 236},
-        {22, 0x03, 236},
-        {1, 0x02, 237},
-        {22, 0x03, 237},
-        {0, 0x03, 199},
-        {0, 0x03, 207},
-        {0, 0x03, 234},
-        {0, 0x03, 235},
+        {0x8001, 171},
+        {0xc016, 171},
+        {0x8001, 206},
+        {0xc016, 206},
+        {0x8001, 215},
+        {0xc016, 215},
+        {0x8001, 225},
+        {0xc016, 225},
+        {0x8001, 236},
+        {0xc016, 236},
+        {0x8001, 237},
+        {0xc016, 237},
+        {0xc000, 199},
+        {0xc000, 207},
+        {0xc000, 234},
+        {0xc000, 235},
     },
     /* 182 */
     {
-        {2, 0x02, 171},
-        {9, 0x02, 171},
-        {23, 0x02, 171},
-        {40, 0x03, 171},
-        {2, 0x02, 206},
-        {9, 0x02, 206},
-        {23, 0x02, 206},
-        {40, 0x03, 206},
-        {2, 0x02, 215},
-        {9, 0x02, 215},
-        {23, 0x02, 215},
-        {40, 0x03, 215},
-        {2, 0x02, 225},
-        {9, 0x02, 225},
-        {23, 0x02, 225},
-        {40, 0x03, 225},
+        {0x8002, 171},
+        {0x8009, 171},
+        {0x8017, 171},
+        {0xc028, 171},
+        {0x8002, 206},
+        {0x8009, 206},
+        {0x8017, 206},
+        {0xc028, 206},
+        {0x8002, 215},
+        {0x8009, 215},
+        {0x8017, 215},
+        {0xc028, 215},
+        {0x8002, 225},
+        {0x8009, 225},
+        {0x8017, 225},
+        {0xc028, 225},
     },
     /* 183 */
     {
-        {3, 0x02, 171},
-        {6, 0x02, 171},
-        {10, 0x02, 171},
-        {15, 0x02, 171},
-        {24, 0x02, 171},
-        {31, 0x02, 171},
-        {41, 0x02, 171},
-        {56, 0x03, 171},
-        {3, 0x02, 206},
-        {6, 0x02, 206},
-        {10, 0x02, 206},
-        {15, 0x02, 206},
-        {24, 0x02, 206},
-        {31, 0x02, 206},
-        {41, 0x02, 206},
-        {56, 0x03, 206},
+        {0x8003, 171},
+        {0x8006, 171},
+        {0x800a, 171},
+        {0x800f, 171},
+        {0x8018, 171},
+        {0x801f, 171},
+        {0x8029, 171},
+        {0xc038, 171},
+        {0x8003, 206},
+        {0x8006, 206},
+        {0x800a, 206},
+        {0x800f, 206},
+        {0x8018, 206},
+        {0x801f, 206},
+        {0x8029, 206},
+        {0xc038, 206},
     },
     /* 184 */
     {
-        {3, 0x02, 215},
-        {6, 0x02, 215},
-        {10, 0x02, 215},
-        {15, 0x02, 215},
-        {24, 0x02, 215},
-        {31, 0x02, 215},
-        {41, 0x02, 215},
-        {56, 0x03, 215},
-        {3, 0x02, 225},
-        {6, 0x02, 225},
-        {10, 0x02, 225},
-        {15, 0x02, 225},
-        {24, 0x02, 225},
-        {31, 0x02, 225},
-        {41, 0x02, 225},
-        {56, 0x03, 225},
+        {0x8003, 215},
+        {0x8006, 215},
+        {0x800a, 215},
+        {0x800f, 215},
+        {0x8018, 215},
+        {0x801f, 215},
+        {0x8029, 215},
+        {0xc038, 215},
+        {0x8003, 225},
+        {0x8006, 225},
+        {0x800a, 225},
+        {0x800f, 225},
+        {0x8018, 225},
+        {0x801f, 225},
+        {0x8029, 225},
+        {0xc038, 225},
     },
     /* 185 */
     {
-        {2, 0x02, 236},
-        {9, 0x02, 236},
-        {23, 0x02, 236},
-        {40, 0x03, 236},
-        {2, 0x02, 237},
-        {9, 0x02, 237},
-        {23, 0x02, 237},
-        {40, 0x03, 237},
-        {1, 0x02, 199},
-        {22, 0x03, 199},
-        {1, 0x02, 207},
-        {22, 0x03, 207},
-        {1, 0x02, 234},
-        {22, 0x03, 234},
-        {1, 0x02, 235},
-        {22, 0x03, 235},
+        {0x8002, 236},
+        {0x8009, 236},
+        {0x8017, 236},
+        {0xc028, 236},
+        {0x8002, 237},
+        {0x8009, 237},
+        {0x8017, 237},
+        {0xc028, 237},
+        {0x8001, 199},
+        {0xc016, 199},
+        {0x8001, 207},
+        {0xc016, 207},
+        {0x8001, 234},
+        {0xc016, 234},
+        {0x8001, 235},
+        {0xc016, 235},
     },
     /* 186 */
     {
-        {3, 0x02, 236},
-        {6, 0x02, 236},
-        {10, 0x02, 236},
-        {15, 0x02, 236},
-        {24, 0x02, 236},
-        {31, 0x02, 236},
-        {41, 0x02, 236},
-        {56, 0x03, 236},
-        {3, 0x02, 237},
-        {6, 0x02, 237},
-        {10, 0x02, 237},
-        {15, 0x02, 237},
-        {24, 0x02, 237},
-        {31, 0x02, 237},
-        {41, 0x02, 237},
-        {56, 0x03, 237},
+        {0x8003, 236},
+        {0x8006, 236},
+        {0x800a, 236},
+        {0x800f, 236},
+        {0x8018, 236},
+        {0x801f, 236},
+        {0x8029, 236},
+        {0xc038, 236},
+        {0x8003, 237},
+        {0x8006, 237},
+        {0x800a, 237},
+        {0x800f, 237},
+        {0x8018, 237},
+        {0x801f, 237},
+        {0x8029, 237},
+        {0xc038, 237},
     },
     /* 187 */
     {
-        {2, 0x02, 199},
-        {9, 0x02, 199},
-        {23, 0x02, 199},
-        {40, 0x03, 199},
-        {2, 0x02, 207},
-        {9, 0x02, 207},
-        {23, 0x02, 207},
-        {40, 0x03, 207},
-        {2, 0x02, 234},
-        {9, 0x02, 234},
-        {23, 0x02, 234},
-        {40, 0x03, 234},
-        {2, 0x02, 235},
-        {9, 0x02, 235},
-        {23, 0x02, 235},
-        {40, 0x03, 235},
+        {0x8002, 199},
+        {0x8009, 199},
+        {0x8017, 199},
+        {0xc028, 199},
+        {0x8002, 207},
+        {0x8009, 207},
+        {0x8017, 207},
+        {0xc028, 207},
+        {0x8002, 234},
+        {0x8009, 234},
+        {0x8017, 234},
+        {0xc028, 234},
+        {0x8002, 235},
+        {0x8009, 235},
+        {0x8017, 235},
+        {0xc028, 235},
     },
     /* 188 */
     {
-        {3, 0x02, 199},
-        {6, 0x02, 199},
-        {10, 0x02, 199},
-        {15, 0x02, 199},
-        {24, 0x02, 199},
-        {31, 0x02, 199},
-        {41, 0x02, 199},
-        {56, 0x03, 199},
-        {3, 0x02, 207},
-        {6, 0x02, 207},
-        {10, 0x02, 207},
-        {15, 0x02, 207},
-        {24, 0x02, 207},
-        {31, 0x02, 207},
-        {41, 0x02, 207},
-        {56, 0x03, 207},
+        {0x8003, 199},
+        {0x8006, 199},
+        {0x800a, 199},
+        {0x800f, 199},
+        {0x8018, 199},
+        {0x801f, 199},
+        {0x8029, 199},
+        {0xc038, 199},
+        {0x8003, 207},
+        {0x8006, 207},
+        {0x800a, 207},
+        {0x800f, 207},
+        {0x8018, 207},
+        {0x801f, 207},
+        {0x8029, 207},
+        {0xc038, 207},
     },
     /* 189 */
     {
-        {3, 0x02, 234},
-        {6, 0x02, 234},
-        {10, 0x02, 234},
-        {15, 0x02, 234},
-        {24, 0x02, 234},
-        {31, 0x02, 234},
-        {41, 0x02, 234},
-        {56, 0x03, 234},
-        {3, 0x02, 235},
-        {6, 0x02, 235},
-        {10, 0x02, 235},
-        {15, 0x02, 235},
-        {24, 0x02, 235},
-        {31, 0x02, 235},
-        {41, 0x02, 235},
-        {56, 0x03, 235},
+        {0x8003, 234},
+        {0x8006, 234},
+        {0x800a, 234},
+        {0x800f, 234},
+        {0x8018, 234},
+        {0x801f, 234},
+        {0x8029, 234},
+        {0xc038, 234},
+        {0x8003, 235},
+        {0x8006, 235},
+        {0x800a, 235},
+        {0x800f, 235},
+        {0x8018, 235},
+        {0x801f, 235},
+        {0x8029, 235},
+        {0xc038, 235},
     },
     /* 190 */
     {
-        {194, 0x00, 0},
-        {195, 0x00, 0},
-        {197, 0x00, 0},
-        {198, 0x00, 0},
-        {201, 0x00, 0},
-        {202, 0x00, 0},
-        {204, 0x00, 0},
-        {205, 0x00, 0},
-        {210, 0x00, 0},
-        {213, 0x00, 0},
-        {217, 0x00, 0},
-        {220, 0x00, 0},
-        {225, 0x00, 0},
-        {231, 0x00, 0},
-        {239, 0x00, 0},
-        {246, 0x00, 0},
+        {0xc2, 0},
+        {0xc3, 0},
+        {0xc5, 0},
+        {0xc6, 0},
+        {0xc9, 0},
+        {0xca, 0},
+        {0xcc, 0},
+        {0xcd, 0},
+        {0xd2, 0},
+        {0xd5, 0},
+        {0xd9, 0},
+        {0xdc, 0},
+        {0xe1, 0},
+        {0xe7, 0},
+        {0xef, 0},
+        {0xf6, 0},
     },
     /* 191 */
     {
-        {0, 0x03, 192},
-        {0, 0x03, 193},
-        {0, 0x03, 200},
-        {0, 0x03, 201},
-        {0, 0x03, 202},
-        {0, 0x03, 205},
-        {0, 0x03, 210},
-        {0, 0x03, 213},
-        {0, 0x03, 218},
-        {0, 0x03, 219},
-        {0, 0x03, 238},
-        {0, 0x03, 240},
-        {0, 0x03, 242},
-        {0, 0x03, 243},
-        {0, 0x03, 255},
-        {206, 0x00, 0},
+        {0xc000, 192},
+        {0xc000, 193},
+        {0xc000, 200},
+        {0xc000, 201},
+        {0xc000, 202},
+        {0xc000, 205},
+        {0xc000, 210},
+        {0xc000, 213},
+        {0xc000, 218},
+        {0xc000, 219},
+        {0xc000, 238},
+        {0xc000, 240},
+        {0xc000, 242},
+        {0xc000, 243},
+        {0xc000, 255},
+        {0xce, 0},
     },
     /* 192 */
     {
-        {1, 0x02, 192},
-        {22, 0x03, 192},
-        {1, 0x02, 193},
-        {22, 0x03, 193},
-        {1, 0x02, 200},
-        {22, 0x03, 200},
-        {1, 0x02, 201},
-        {22, 0x03, 201},
-        {1, 0x02, 202},
-        {22, 0x03, 202},
-        {1, 0x02, 205},
-        {22, 0x03, 205},
-        {1, 0x02, 210},
-        {22, 0x03, 210},
-        {1, 0x02, 213},
-        {22, 0x03, 213},
+        {0x8001, 192},
+        {0xc016, 192},
+        {0x8001, 193},
+        {0xc016, 193},
+        {0x8001, 200},
+        {0xc016, 200},
+        {0x8001, 201},
+        {0xc016, 201},
+        {0x8001, 202},
+        {0xc016, 202},
+        {0x8001, 205},
+        {0xc016, 205},
+        {0x8001, 210},
+        {0xc016, 210},
+        {0x8001, 213},
+        {0xc016, 213},
     },
     /* 193 */
     {
-        {2, 0x02, 192},
-        {9, 0x02, 192},
-        {23, 0x02, 192},
-        {40, 0x03, 192},
-        {2, 0x02, 193},
-        {9, 0x02, 193},
-        {23, 0x02, 193},
-        {40, 0x03, 193},
-        {2, 0x02, 200},
-        {9, 0x02, 200},
-        {23, 0x02, 200},
-        {40, 0x03, 200},
-        {2, 0x02, 201},
-        {9, 0x02, 201},
-        {23, 0x02, 201},
-        {40, 0x03, 201},
+        {0x8002, 192},
+        {0x8009, 192},
+        {0x8017, 192},
+        {0xc028, 192},
+        {0x8002, 193},
+        {0x8009, 193},
+        {0x8017, 193},
+        {0xc028, 193},
+        {0x8002, 200},
+        {0x8009, 200},
+        {0x8017, 200},
+        {0xc028, 200},
+        {0x8002, 201},
+        {0x8009, 201},
+        {0x8017, 201},
+        {0xc028, 201},
     },
     /* 194 */
     {
-        {3, 0x02, 192},
-        {6, 0x02, 192},
-        {10, 0x02, 192},
-        {15, 0x02, 192},
-        {24, 0x02, 192},
-        {31, 0x02, 192},
-        {41, 0x02, 192},
-        {56, 0x03, 192},
-        {3, 0x02, 193},
-        {6, 0x02, 193},
-        {10, 0x02, 193},
-        {15, 0x02, 193},
-        {24, 0x02, 193},
-        {31, 0x02, 193},
-        {41, 0x02, 193},
-        {56, 0x03, 193},
+        {0x8003, 192},
+        {0x8006, 192},
+        {0x800a, 192},
+        {0x800f, 192},
+        {0x8018, 192},
+        {0x801f, 192},
+        {0x8029, 192},
+        {0xc038, 192},
+        {0x8003, 193},
+        {0x8006, 193},
+        {0x800a, 193},
+        {0x800f, 193},
+        {0x8018, 193},
+        {0x801f, 193},
+        {0x8029, 193},
+        {0xc038, 193},
     },
     /* 195 */
     {
-        {3, 0x02, 200},
-        {6, 0x02, 200},
-        {10, 0x02, 200},
-        {15, 0x02, 200},
-        {24, 0x02, 200},
-        {31, 0x02, 200},
-        {41, 0x02, 200},
-        {56, 0x03, 200},
-        {3, 0x02, 201},
-        {6, 0x02, 201},
-        {10, 0x02, 201},
-        {15, 0x02, 201},
-        {24, 0x02, 201},
-        {31, 0x02, 201},
-        {41, 0x02, 201},
-        {56, 0x03, 201},
+        {0x8003, 200},
+        {0x8006, 200},
+        {0x800a, 200},
+        {0x800f, 200},
+        {0x8018, 200},
+        {0x801f, 200},
+        {0x8029, 200},
+        {0xc038, 200},
+        {0x8003, 201},
+        {0x8006, 201},
+        {0x800a, 201},
+        {0x800f, 201},
+        {0x8018, 201},
+        {0x801f, 201},
+        {0x8029, 201},
+        {0xc038, 201},
     },
     /* 196 */
     {
-        {2, 0x02, 202},
-        {9, 0x02, 202},
-        {23, 0x02, 202},
-        {40, 0x03, 202},
-        {2, 0x02, 205},
-        {9, 0x02, 205},
-        {23, 0x02, 205},
-        {40, 0x03, 205},
-        {2, 0x02, 210},
-        {9, 0x02, 210},
-        {23, 0x02, 210},
-        {40, 0x03, 210},
-        {2, 0x02, 213},
-        {9, 0x02, 213},
-        {23, 0x02, 213},
-        {40, 0x03, 213},
+        {0x8002, 202},
+        {0x8009, 202},
+        {0x8017, 202},
+        {0xc028, 202},
+        {0x8002, 205},
+        {0x8009, 205},
+        {0x8017, 205},
+        {0xc028, 205},
+        {0x8002, 210},
+        {0x8009, 210},
+        {0x8017, 210},
+        {0xc028, 210},
+        {0x8002, 213},
+        {0x8009, 213},
+        {0x8017, 213},
+        {0xc028, 213},
     },
     /* 197 */
     {
-        {3, 0x02, 202},
-        {6, 0x02, 202},
-        {10, 0x02, 202},
-        {15, 0x02, 202},
-        {24, 0x02, 202},
-        {31, 0x02, 202},
-        {41, 0x02, 202},
-        {56, 0x03, 202},
-        {3, 0x02, 205},
-        {6, 0x02, 205},
-        {10, 0x02, 205},
-        {15, 0x02, 205},
-        {24, 0x02, 205},
-        {31, 0x02, 205},
-        {41, 0x02, 205},
-        {56, 0x03, 205},
+        {0x8003, 202},
+        {0x8006, 202},
+        {0x800a, 202},
+        {0x800f, 202},
+        {0x8018, 202},
+        {0x801f, 202},
+        {0x8029, 202},
+        {0xc038, 202},
+        {0x8003, 205},
+        {0x8006, 205},
+        {0x800a, 205},
+        {0x800f, 205},
+        {0x8018, 205},
+        {0x801f, 205},
+        {0x8029, 205},
+        {0xc038, 205},
     },
     /* 198 */
     {
-        {3, 0x02, 210},
-        {6, 0x02, 210},
-        {10, 0x02, 210},
-        {15, 0x02, 210},
-        {24, 0x02, 210},
-        {31, 0x02, 210},
-        {41, 0x02, 210},
-        {56, 0x03, 210},
-        {3, 0x02, 213},
-        {6, 0x02, 213},
-        {10, 0x02, 213},
-        {15, 0x02, 213},
-        {24, 0x02, 213},
-        {31, 0x02, 213},
-        {41, 0x02, 213},
-        {56, 0x03, 213},
+        {0x8003, 210},
+        {0x8006, 210},
+        {0x800a, 210},
+        {0x800f, 210},
+        {0x8018, 210},
+        {0x801f, 210},
+        {0x8029, 210},
+        {0xc038, 210},
+        {0x8003, 213},
+        {0x8006, 213},
+        {0x800a, 213},
+        {0x800f, 213},
+        {0x8018, 213},
+        {0x801f, 213},
+        {0x8029, 213},
+        {0xc038, 213},
     },
     /* 199 */
     {
-        {1, 0x02, 218},
-        {22, 0x03, 218},
-        {1, 0x02, 219},
-        {22, 0x03, 219},
-        {1, 0x02, 238},
-        {22, 0x03, 238},
-        {1, 0x02, 240},
-        {22, 0x03, 240},
-        {1, 0x02, 242},
-        {22, 0x03, 242},
-        {1, 0x02, 243},
-        {22, 0x03, 243},
-        {1, 0x02, 255},
-        {22, 0x03, 255},
-        {0, 0x03, 203},
-        {0, 0x03, 204},
+        {0x8001, 218},
+        {0xc016, 218},
+        {0x8001, 219},
+        {0xc016, 219},
+        {0x8001, 238},
+        {0xc016, 238},
+        {0x8001, 240},
+        {0xc016, 240},
+        {0x8001, 242},
+        {0xc016, 242},
+        {0x8001, 243},
+        {0xc016, 243},
+        {0x8001, 255},
+        {0xc016, 255},
+        {0xc000, 203},
+        {0xc000, 204},
     },
     /* 200 */
     {
-        {2, 0x02, 218},
-        {9, 0x02, 218},
-        {23, 0x02, 218},
-        {40, 0x03, 218},
-        {2, 0x02, 219},
-        {9, 0x02, 219},
-        {23, 0x02, 219},
-        {40, 0x03, 219},
-        {2, 0x02, 238},
-        {9, 0x02, 238},
-        {23, 0x02, 238},
-        {40, 0x03, 238},
-        {2, 0x02, 240},
-        {9, 0x02, 240},
-        {23, 0x02, 240},
-        {40, 0x03, 240},
+        {0x8002, 218},
+        {0x8009, 218},
+        {0x8017, 218},
+        {0xc028, 218},
+        {0x8002, 219},
+        {0x8009, 219},
+        {0x8017, 219},
+        {0xc028, 219},
+        {0x8002, 238},
+        {0x8009, 238},
+        {0x8017, 238},
+        {0xc028, 238},
+        {0x8002, 240},
+        {0x8009, 240},
+        {0x8017, 240},
+        {0xc028, 240},
     },
     /* 201 */
     {
-        {3, 0x02, 218},
-        {6, 0x02, 218},
-        {10, 0x02, 218},
-        {15, 0x02, 218},
-        {24, 0x02, 218},
-        {31, 0x02, 218},
-        {41, 0x02, 218},
-        {56, 0x03, 218},
-        {3, 0x02, 219},
-        {6, 0x02, 219},
-        {10, 0x02, 219},
-        {15, 0x02, 219},
-        {24, 0x02, 219},
-        {31, 0x02, 219},
-        {41, 0x02, 219},
-        {56, 0x03, 219},
+        {0x8003, 218},
+        {0x8006, 218},
+        {0x800a, 218},
+        {0x800f, 218},
+        {0x8018, 218},
+        {0x801f, 218},
+        {0x8029, 218},
+        {0xc038, 218},
+        {0x8003, 219},
+        {0x8006, 219},
+        {0x800a, 219},
+        {0x800f, 219},
+        {0x8018, 219},
+        {0x801f, 219},
+        {0x8029, 219},
+        {0xc038, 219},
     },
     /* 202 */
     {
-        {3, 0x02, 238},
-        {6, 0x02, 238},
-        {10, 0x02, 238},
-        {15, 0x02, 238},
-        {24, 0x02, 238},
-        {31, 0x02, 238},
-        {41, 0x02, 238},
-        {56, 0x03, 238},
-        {3, 0x02, 240},
-        {6, 0x02, 240},
-        {10, 0x02, 240},
-        {15, 0x02, 240},
-        {24, 0x02, 240},
-        {31, 0x02, 240},
-        {41, 0x02, 240},
-        {56, 0x03, 240},
+        {0x8003, 238},
+        {0x8006, 238},
+        {0x800a, 238},
+        {0x800f, 238},
+        {0x8018, 238},
+        {0x801f, 238},
+        {0x8029, 238},
+        {0xc038, 238},
+        {0x8003, 240},
+        {0x8006, 240},
+        {0x800a, 240},
+        {0x800f, 240},
+        {0x8018, 240},
+        {0x801f, 240},
+        {0x8029, 240},
+        {0xc038, 240},
     },
     /* 203 */
     {
-        {2, 0x02, 242},
-        {9, 0x02, 242},
-        {23, 0x02, 242},
-        {40, 0x03, 242},
-        {2, 0x02, 243},
-        {9, 0x02, 243},
-        {23, 0x02, 243},
-        {40, 0x03, 243},
-        {2, 0x02, 255},
-        {9, 0x02, 255},
-        {23, 0x02, 255},
-        {40, 0x03, 255},
-        {1, 0x02, 203},
-        {22, 0x03, 203},
-        {1, 0x02, 204},
-        {22, 0x03, 204},
+        {0x8002, 242},
+        {0x8009, 242},
+        {0x8017, 242},
+        {0xc028, 242},
+        {0x8002, 243},
+        {0x8009, 243},
+        {0x8017, 243},
+        {0xc028, 243},
+        {0x8002, 255},
+        {0x8009, 255},
+        {0x8017, 255},
+        {0xc028, 255},
+        {0x8001, 203},
+        {0xc016, 203},
+        {0x8001, 204},
+        {0xc016, 204},
     },
     /* 204 */
     {
-        {3, 0x02, 242},
-        {6, 0x02, 242},
-        {10, 0x02, 242},
-        {15, 0x02, 242},
-        {24, 0x02, 242},
-        {31, 0x02, 242},
-        {41, 0x02, 242},
-        {56, 0x03, 242},
-        {3, 0x02, 243},
-        {6, 0x02, 243},
-        {10, 0x02, 243},
-        {15, 0x02, 243},
-        {24, 0x02, 243},
-        {31, 0x02, 243},
-        {41, 0x02, 243},
-        {56, 0x03, 243},
+        {0x8003, 242},
+        {0x8006, 242},
+        {0x800a, 242},
+        {0x800f, 242},
+        {0x8018, 242},
+        {0x801f, 242},
+        {0x8029, 242},
+        {0xc038, 242},
+        {0x8003, 243},
+        {0x8006, 243},
+        {0x800a, 243},
+        {0x800f, 243},
+        {0x8018, 243},
+        {0x801f, 243},
+        {0x8029, 243},
+        {0xc038, 243},
     },
     /* 205 */
     {
-        {3, 0x02, 255},
-        {6, 0x02, 255},
-        {10, 0x02, 255},
-        {15, 0x02, 255},
-        {24, 0x02, 255},
-        {31, 0x02, 255},
-        {41, 0x02, 255},
-        {56, 0x03, 255},
-        {2, 0x02, 203},
-        {9, 0x02, 203},
-        {23, 0x02, 203},
-        {40, 0x03, 203},
-        {2, 0x02, 204},
-        {9, 0x02, 204},
-        {23, 0x02, 204},
-        {40, 0x03, 204},
+        {0x8003, 255},
+        {0x8006, 255},
+        {0x800a, 255},
+        {0x800f, 255},
+        {0x8018, 255},
+        {0x801f, 255},
+        {0x8029, 255},
+        {0xc038, 255},
+        {0x8002, 203},
+        {0x8009, 203},
+        {0x8017, 203},
+        {0xc028, 203},
+        {0x8002, 204},
+        {0x8009, 204},
+        {0x8017, 204},
+        {0xc028, 204},
     },
     /* 206 */
     {
-        {3, 0x02, 203},
-        {6, 0x02, 203},
-        {10, 0x02, 203},
-        {15, 0x02, 203},
-        {24, 0x02, 203},
-        {31, 0x02, 203},
-        {41, 0x02, 203},
-        {56, 0x03, 203},
-        {3, 0x02, 204},
-        {6, 0x02, 204},
-        {10, 0x02, 204},
-        {15, 0x02, 204},
-        {24, 0x02, 204},
-        {31, 0x02, 204},
-        {41, 0x02, 204},
-        {56, 0x03, 204},
+        {0x8003, 203},
+        {0x8006, 203},
+        {0x800a, 203},
+        {0x800f, 203},
+        {0x8018, 203},
+        {0x801f, 203},
+        {0x8029, 203},
+        {0xc038, 203},
+        {0x8003, 204},
+        {0x8006, 204},
+        {0x800a, 204},
+        {0x800f, 204},
+        {0x8018, 204},
+        {0x801f, 204},
+        {0x8029, 204},
+        {0xc038, 204},
     },
     /* 207 */
     {
-        {211, 0x00, 0},
-        {212, 0x00, 0},
-        {214, 0x00, 0},
-        {215, 0x00, 0},
-        {218, 0x00, 0},
-        {219, 0x00, 0},
-        {221, 0x00, 0},
-        {222, 0x00, 0},
-        {226, 0x00, 0},
-        {228, 0x00, 0},
-        {232, 0x00, 0},
-        {235, 0x00, 0},
-        {240, 0x00, 0},
-        {243, 0x00, 0},
-        {247, 0x00, 0},
-        {250, 0x00, 0},
+        {0xd3, 0},
+        {0xd4, 0},
+        {0xd6, 0},
+        {0xd7, 0},
+        {0xda, 0},
+        {0xdb, 0},
+        {0xdd, 0},
+        {0xde, 0},
+        {0xe2, 0},
+        {0xe4, 0},
+        {0xe8, 0},
+        {0xeb, 0},
+        {0xf0, 0},
+        {0xf3, 0},
+        {0xf7, 0},
+        {0xfa, 0},
     },
     /* 208 */
     {
-        {0, 0x03, 211},
-        {0, 0x03, 212},
-        {0, 0x03, 214},
-        {0, 0x03, 221},
-        {0, 0x03, 222},
-        {0, 0x03, 223},
-        {0, 0x03, 241},
-        {0, 0x03, 244},
-        {0, 0x03, 245},
-        {0, 0x03, 246},
-        {0, 0x03, 247},
-        {0, 0x03, 248},
-        {0, 0x03, 250},
-        {0, 0x03, 251},
-        {0, 0x03, 252},
-        {0, 0x03, 253},
+        {0xc000, 211},
+        {0xc000, 212},
+        {0xc000, 214},
+        {0xc000, 221},
+        {0xc000, 222},
+        {0xc000, 223},
+        {0xc000, 241},
+        {0xc000, 244},
+        {0xc000, 245},
+        {0xc000, 246},
+        {0xc000, 247},
+        {0xc000, 248},
+        {0xc000, 250},
+        {0xc000, 251},
+        {0xc000, 252},
+        {0xc000, 253},
     },
     /* 209 */
     {
-        {1, 0x02, 211},
-        {22, 0x03, 211},
-        {1, 0x02, 212},
-        {22, 0x03, 212},
-        {1, 0x02, 214},
-        {22, 0x03, 214},
-        {1, 0x02, 221},
-        {22, 0x03, 221},
-        {1, 0x02, 222},
-        {22, 0x03, 222},
-        {1, 0x02, 223},
-        {22, 0x03, 223},
-        {1, 0x02, 241},
-        {22, 0x03, 241},
-        {1, 0x02, 244},
-        {22, 0x03, 244},
+        {0x8001, 211},
+        {0xc016, 211},
+        {0x8001, 212},
+        {0xc016, 212},
+        {0x8001, 214},
+        {0xc016, 214},
+        {0x8001, 221},
+        {0xc016, 221},
+        {0x8001, 222},
+        {0xc016, 222},
+        {0x8001, 223},
+        {0xc016, 223},
+        {0x8001, 241},
+        {0xc016, 241},
+        {0x8001, 244},
+        {0xc016, 244},
     },
     /* 210 */
     {
-        {2, 0x02, 211},
-        {9, 0x02, 211},
-        {23, 0x02, 211},
-        {40, 0x03, 211},
-        {2, 0x02, 212},
-        {9, 0x02, 212},
-        {23, 0x02, 212},
-        {40, 0x03, 212},
-        {2, 0x02, 214},
-        {9, 0x02, 214},
-        {23, 0x02, 214},
-        {40, 0x03, 214},
-        {2, 0x02, 221},
-        {9, 0x02, 221},
-        {23, 0x02, 221},
-        {40, 0x03, 221},
+        {0x8002, 211},
+        {0x8009, 211},
+        {0x8017, 211},
+        {0xc028, 211},
+        {0x8002, 212},
+        {0x8009, 212},
+        {0x8017, 212},
+        {0xc028, 212},
+        {0x8002, 214},
+        {0x8009, 214},
+        {0x8017, 214},
+        {0xc028, 214},
+        {0x8002, 221},
+        {0x8009, 221},
+        {0x8017, 221},
+        {0xc028, 221},
     },
     /* 211 */
     {
-        {3, 0x02, 211},
-        {6, 0x02, 211},
-        {10, 0x02, 211},
-        {15, 0x02, 211},
-        {24, 0x02, 211},
-        {31, 0x02, 211},
-        {41, 0x02, 211},
-        {56, 0x03, 211},
-        {3, 0x02, 212},
-        {6, 0x02, 212},
-        {10, 0x02, 212},
-        {15, 0x02, 212},
-        {24, 0x02, 212},
-        {31, 0x02, 212},
-        {41, 0x02, 212},
-        {56, 0x03, 212},
+        {0x8003, 211},
+        {0x8006, 211},
+        {0x800a, 211},
+        {0x800f, 211},
+        {0x8018, 211},
+        {0x801f, 211},
+        {0x8029, 211},
+        {0xc038, 211},
+        {0x8003, 212},
+        {0x8006, 212},
+        {0x800a, 212},
+        {0x800f, 212},
+        {0x8018, 212},
+        {0x801f, 212},
+        {0x8029, 212},
+        {0xc038, 212},
     },
     /* 212 */
     {
-        {3, 0x02, 214},
-        {6, 0x02, 214},
-        {10, 0x02, 214},
-        {15, 0x02, 214},
-        {24, 0x02, 214},
-        {31, 0x02, 214},
-        {41, 0x02, 214},
-        {56, 0x03, 214},
-        {3, 0x02, 221},
-        {6, 0x02, 221},
-        {10, 0x02, 221},
-        {15, 0x02, 221},
-        {24, 0x02, 221},
-        {31, 0x02, 221},
-        {41, 0x02, 221},
-        {56, 0x03, 221},
+        {0x8003, 214},
+        {0x8006, 214},
+        {0x800a, 214},
+        {0x800f, 214},
+        {0x8018, 214},
+        {0x801f, 214},
+        {0x8029, 214},
+        {0xc038, 214},
+        {0x8003, 221},
+        {0x8006, 221},
+        {0x800a, 221},
+        {0x800f, 221},
+        {0x8018, 221},
+        {0x801f, 221},
+        {0x8029, 221},
+        {0xc038, 221},
     },
     /* 213 */
     {
-        {2, 0x02, 222},
-        {9, 0x02, 222},
-        {23, 0x02, 222},
-        {40, 0x03, 222},
-        {2, 0x02, 223},
-        {9, 0x02, 223},
-        {23, 0x02, 223},
-        {40, 0x03, 223},
-        {2, 0x02, 241},
-        {9, 0x02, 241},
-        {23, 0x02, 241},
-        {40, 0x03, 241},
-        {2, 0x02, 244},
-        {9, 0x02, 244},
-        {23, 0x02, 244},
-        {40, 0x03, 244},
+        {0x8002, 222},
+        {0x8009, 222},
+        {0x8017, 222},
+        {0xc028, 222},
+        {0x8002, 223},
+        {0x8009, 223},
+        {0x8017, 223},
+        {0xc028, 223},
+        {0x8002, 241},
+        {0x8009, 241},
+        {0x8017, 241},
+        {0xc028, 241},
+        {0x8002, 244},
+        {0x8009, 244},
+        {0x8017, 244},
+        {0xc028, 244},
     },
     /* 214 */
     {
-        {3, 0x02, 222},
-        {6, 0x02, 222},
-        {10, 0x02, 222},
-        {15, 0x02, 222},
-        {24, 0x02, 222},
-        {31, 0x02, 222},
-        {41, 0x02, 222},
-        {56, 0x03, 222},
-        {3, 0x02, 223},
-        {6, 0x02, 223},
-        {10, 0x02, 223},
-        {15, 0x02, 223},
-        {24, 0x02, 223},
-        {31, 0x02, 223},
-        {41, 0x02, 223},
-        {56, 0x03, 223},
+        {0x8003, 222},
+        {0x8006, 222},
+        {0x800a, 222},
+        {0x800f, 222},
+        {0x8018, 222},
+        {0x801f, 222},
+        {0x8029, 222},
+        {0xc038, 222},
+        {0x8003, 223},
+        {0x8006, 223},
+        {0x800a, 223},
+        {0x800f, 223},
+        {0x8018, 223},
+        {0x801f, 223},
+        {0x8029, 223},
+        {0xc038, 223},
     },
     /* 215 */
     {
-        {3, 0x02, 241},
-        {6, 0x02, 241},
-        {10, 0x02, 241},
-        {15, 0x02, 241},
-        {24, 0x02, 241},
-        {31, 0x02, 241},
-        {41, 0x02, 241},
-        {56, 0x03, 241},
-        {3, 0x02, 244},
-        {6, 0x02, 244},
-        {10, 0x02, 244},
-        {15, 0x02, 244},
-        {24, 0x02, 244},
-        {31, 0x02, 244},
-        {41, 0x02, 244},
-        {56, 0x03, 244},
+        {0x8003, 241},
+        {0x8006, 241},
+        {0x800a, 241},
+        {0x800f, 241},
+        {0x8018, 241},
+        {0x801f, 241},
+        {0x8029, 241},
+        {0xc038, 241},
+        {0x8003, 244},
+        {0x8006, 244},
+        {0x800a, 244},
+        {0x800f, 244},
+        {0x8018, 244},
+        {0x801f, 244},
+        {0x8029, 244},
+        {0xc038, 244},
     },
     /* 216 */
     {
-        {1, 0x02, 245},
-        {22, 0x03, 245},
-        {1, 0x02, 246},
-        {22, 0x03, 246},
-        {1, 0x02, 247},
-        {22, 0x03, 247},
-        {1, 0x02, 248},
-        {22, 0x03, 248},
-        {1, 0x02, 250},
-        {22, 0x03, 250},
-        {1, 0x02, 251},
-        {22, 0x03, 251},
-        {1, 0x02, 252},
-        {22, 0x03, 252},
-        {1, 0x02, 253},
-        {22, 0x03, 253},
+        {0x8001, 245},
+        {0xc016, 245},
+        {0x8001, 246},
+        {0xc016, 246},
+        {0x8001, 247},
+        {0xc016, 247},
+        {0x8001, 248},
+        {0xc016, 248},
+        {0x8001, 250},
+        {0xc016, 250},
+        {0x8001, 251},
+        {0xc016, 251},
+        {0x8001, 252},
+        {0xc016, 252},
+        {0x8001, 253},
+        {0xc016, 253},
     },
     /* 217 */
     {
-        {2, 0x02, 245},
-        {9, 0x02, 245},
-        {23, 0x02, 245},
-        {40, 0x03, 245},
-        {2, 0x02, 246},
-        {9, 0x02, 246},
-        {23, 0x02, 246},
-        {40, 0x03, 246},
-        {2, 0x02, 247},
-        {9, 0x02, 247},
-        {23, 0x02, 247},
-        {40, 0x03, 247},
-        {2, 0x02, 248},
-        {9, 0x02, 248},
-        {23, 0x02, 248},
-        {40, 0x03, 248},
+        {0x8002, 245},
+        {0x8009, 245},
+        {0x8017, 245},
+        {0xc028, 245},
+        {0x8002, 246},
+        {0x8009, 246},
+        {0x8017, 246},
+        {0xc028, 246},
+        {0x8002, 247},
+        {0x8009, 247},
+        {0x8017, 247},
+        {0xc028, 247},
+        {0x8002, 248},
+        {0x8009, 248},
+        {0x8017, 248},
+        {0xc028, 248},
     },
     /* 218 */
     {
-        {3, 0x02, 245},
-        {6, 0x02, 245},
-        {10, 0x02, 245},
-        {15, 0x02, 245},
-        {24, 0x02, 245},
-        {31, 0x02, 245},
-        {41, 0x02, 245},
-        {56, 0x03, 245},
-        {3, 0x02, 246},
-        {6, 0x02, 246},
-        {10, 0x02, 246},
-        {15, 0x02, 246},
-        {24, 0x02, 246},
-        {31, 0x02, 246},
-        {41, 0x02, 246},
-        {56, 0x03, 246},
+        {0x8003, 245},
+        {0x8006, 245},
+        {0x800a, 245},
+        {0x800f, 245},
+        {0x8018, 245},
+        {0x801f, 245},
+        {0x8029, 245},
+        {0xc038, 245},
+        {0x8003, 246},
+        {0x8006, 246},
+        {0x800a, 246},
+        {0x800f, 246},
+        {0x8018, 246},
+        {0x801f, 246},
+        {0x8029, 246},
+        {0xc038, 246},
     },
     /* 219 */
     {
-        {3, 0x02, 247},
-        {6, 0x02, 247},
-        {10, 0x02, 247},
-        {15, 0x02, 247},
-        {24, 0x02, 247},
-        {31, 0x02, 247},
-        {41, 0x02, 247},
-        {56, 0x03, 247},
-        {3, 0x02, 248},
-        {6, 0x02, 248},
-        {10, 0x02, 248},
-        {15, 0x02, 248},
-        {24, 0x02, 248},
-        {31, 0x02, 248},
-        {41, 0x02, 248},
-        {56, 0x03, 248},
+        {0x8003, 247},
+        {0x8006, 247},
+        {0x800a, 247},
+        {0x800f, 247},
+        {0x8018, 247},
+        {0x801f, 247},
+        {0x8029, 247},
+        {0xc038, 247},
+        {0x8003, 248},
+        {0x8006, 248},
+        {0x800a, 248},
+        {0x800f, 248},
+        {0x8018, 248},
+        {0x801f, 248},
+        {0x8029, 248},
+        {0xc038, 248},
     },
     /* 220 */
     {
-        {2, 0x02, 250},
-        {9, 0x02, 250},
-        {23, 0x02, 250},
-        {40, 0x03, 250},
-        {2, 0x02, 251},
-        {9, 0x02, 251},
-        {23, 0x02, 251},
-        {40, 0x03, 251},
-        {2, 0x02, 252},
-        {9, 0x02, 252},
-        {23, 0x02, 252},
-        {40, 0x03, 252},
-        {2, 0x02, 253},
-        {9, 0x02, 253},
-        {23, 0x02, 253},
-        {40, 0x03, 253},
+        {0x8002, 250},
+        {0x8009, 250},
+        {0x8017, 250},
+        {0xc028, 250},
+        {0x8002, 251},
+        {0x8009, 251},
+        {0x8017, 251},
+        {0xc028, 251},
+        {0x8002, 252},
+        {0x8009, 252},
+        {0x8017, 252},
+        {0xc028, 252},
+        {0x8002, 253},
+        {0x8009, 253},
+        {0x8017, 253},
+        {0xc028, 253},
     },
     /* 221 */
     {
-        {3, 0x02, 250},
-        {6, 0x02, 250},
-        {10, 0x02, 250},
-        {15, 0x02, 250},
-        {24, 0x02, 250},
-        {31, 0x02, 250},
-        {41, 0x02, 250},
-        {56, 0x03, 250},
-        {3, 0x02, 251},
-        {6, 0x02, 251},
-        {10, 0x02, 251},
-        {15, 0x02, 251},
-        {24, 0x02, 251},
-        {31, 0x02, 251},
-        {41, 0x02, 251},
-        {56, 0x03, 251},
+        {0x8003, 250},
+        {0x8006, 250},
+        {0x800a, 250},
+        {0x800f, 250},
+        {0x8018, 250},
+        {0x801f, 250},
+        {0x8029, 250},
+        {0xc038, 250},
+        {0x8003, 251},
+        {0x8006, 251},
+        {0x800a, 251},
+        {0x800f, 251},
+        {0x8018, 251},
+        {0x801f, 251},
+        {0x8029, 251},
+        {0xc038, 251},
     },
     /* 222 */
     {
-        {3, 0x02, 252},
-        {6, 0x02, 252},
-        {10, 0x02, 252},
-        {15, 0x02, 252},
-        {24, 0x02, 252},
-        {31, 0x02, 252},
-        {41, 0x02, 252},
-        {56, 0x03, 252},
-        {3, 0x02, 253},
-        {6, 0x02, 253},
-        {10, 0x02, 253},
-        {15, 0x02, 253},
-        {24, 0x02, 253},
-        {31, 0x02, 253},
-        {41, 0x02, 253},
-        {56, 0x03, 253},
+        {0x8003, 252},
+        {0x8006, 252},
+        {0x800a, 252},
+        {0x800f, 252},
+        {0x8018, 252},
+        {0x801f, 252},
+        {0x8029, 252},
+        {0xc038, 252},
+        {0x8003, 253},
+        {0x8006, 253},
+        {0x800a, 253},
+        {0x800f, 253},
+        {0x8018, 253},
+        {0x801f, 253},
+        {0x8029, 253},
+        {0xc038, 253},
     },
     /* 223 */
     {
-        {0, 0x03, 254},
-        {227, 0x00, 0},
-        {229, 0x00, 0},
-        {230, 0x00, 0},
-        {233, 0x00, 0},
-        {234, 0x00, 0},
-        {236, 0x00, 0},
-        {237, 0x00, 0},
-        {241, 0x00, 0},
-        {242, 0x00, 0},
-        {244, 0x00, 0},
-        {245, 0x00, 0},
-        {248, 0x00, 0},
-        {249, 0x00, 0},
-        {251, 0x00, 0},
-        {252, 0x00, 0},
+        {0xc000, 254},
+        {0xe3, 0},
+        {0xe5, 0},
+        {0xe6, 0},
+        {0xe9, 0},
+        {0xea, 0},
+        {0xec, 0},
+        {0xed, 0},
+        {0xf1, 0},
+        {0xf2, 0},
+        {0xf4, 0},
+        {0xf5, 0},
+        {0xf8, 0},
+        {0xf9, 0},
+        {0xfb, 0},
+        {0xfc, 0},
     },
     /* 224 */
     {
-        {1, 0x02, 254},
-        {22, 0x03, 254},
-        {0, 0x03, 2},
-        {0, 0x03, 3},
-        {0, 0x03, 4},
-        {0, 0x03, 5},
-        {0, 0x03, 6},
-        {0, 0x03, 7},
-        {0, 0x03, 8},
-        {0, 0x03, 11},
-        {0, 0x03, 12},
-        {0, 0x03, 14},
-        {0, 0x03, 15},
-        {0, 0x03, 16},
-        {0, 0x03, 17},
-        {0, 0x03, 18},
+        {0x8001, 254},
+        {0xc016, 254},
+        {0xc000, 2},
+        {0xc000, 3},
+        {0xc000, 4},
+        {0xc000, 5},
+        {0xc000, 6},
+        {0xc000, 7},
+        {0xc000, 8},
+        {0xc000, 11},
+        {0xc000, 12},
+        {0xc000, 14},
+        {0xc000, 15},
+        {0xc000, 16},
+        {0xc000, 17},
+        {0xc000, 18},
     },
     /* 225 */
     {
-        {2, 0x02, 254},
-        {9, 0x02, 254},
-        {23, 0x02, 254},
-        {40, 0x03, 254},
-        {1, 0x02, 2},
-        {22, 0x03, 2},
-        {1, 0x02, 3},
-        {22, 0x03, 3},
-        {1, 0x02, 4},
-        {22, 0x03, 4},
-        {1, 0x02, 5},
-        {22, 0x03, 5},
-        {1, 0x02, 6},
-        {22, 0x03, 6},
-        {1, 0x02, 7},
-        {22, 0x03, 7},
+        {0x8002, 254},
+        {0x8009, 254},
+        {0x8017, 254},
+        {0xc028, 254},
+        {0x8001, 2},
+        {0xc016, 2},
+        {0x8001, 3},
+        {0xc016, 3},
+        {0x8001, 4},
+        {0xc016, 4},
+        {0x8001, 5},
+        {0xc016, 5},
+        {0x8001, 6},
+        {0xc016, 6},
+        {0x8001, 7},
+        {0xc016, 7},
     },
     /* 226 */
     {
-        {3, 0x02, 254},
-        {6, 0x02, 254},
-        {10, 0x02, 254},
-        {15, 0x02, 254},
-        {24, 0x02, 254},
-        {31, 0x02, 254},
-        {41, 0x02, 254},
-        {56, 0x03, 254},
-        {2, 0x02, 2},
-        {9, 0x02, 2},
-        {23, 0x02, 2},
-        {40, 0x03, 2},
-        {2, 0x02, 3},
-        {9, 0x02, 3},
-        {23, 0x02, 3},
-        {40, 0x03, 3},
+        {0x8003, 254},
+        {0x8006, 254},
+        {0x800a, 254},
+        {0x800f, 254},
+        {0x8018, 254},
+        {0x801f, 254},
+        {0x8029, 254},
+        {0xc038, 254},
+        {0x8002, 2},
+        {0x8009, 2},
+        {0x8017, 2},
+        {0xc028, 2},
+        {0x8002, 3},
+        {0x8009, 3},
+        {0x8017, 3},
+        {0xc028, 3},
     },
     /* 227 */
     {
-        {3, 0x02, 2},
-        {6, 0x02, 2},
-        {10, 0x02, 2},
-        {15, 0x02, 2},
-        {24, 0x02, 2},
-        {31, 0x02, 2},
-        {41, 0x02, 2},
-        {56, 0x03, 2},
-        {3, 0x02, 3},
-        {6, 0x02, 3},
-        {10, 0x02, 3},
-        {15, 0x02, 3},
-        {24, 0x02, 3},
-        {31, 0x02, 3},
-        {41, 0x02, 3},
-        {56, 0x03, 3},
+        {0x8003, 2},
+        {0x8006, 2},
+        {0x800a, 2},
+        {0x800f, 2},
+        {0x8018, 2},
+        {0x801f, 2},
+        {0x8029, 2},
+        {0xc038, 2},
+        {0x8003, 3},
+        {0x8006, 3},
+        {0x800a, 3},
+        {0x800f, 3},
+        {0x8018, 3},
+        {0x801f, 3},
+        {0x8029, 3},
+        {0xc038, 3},
     },
     /* 228 */
     {
-        {2, 0x02, 4},
-        {9, 0x02, 4},
-        {23, 0x02, 4},
-        {40, 0x03, 4},
-        {2, 0x02, 5},
-        {9, 0x02, 5},
-        {23, 0x02, 5},
-        {40, 0x03, 5},
-        {2, 0x02, 6},
-        {9, 0x02, 6},
-        {23, 0x02, 6},
-        {40, 0x03, 6},
-        {2, 0x02, 7},
-        {9, 0x02, 7},
-        {23, 0x02, 7},
-        {40, 0x03, 7},
+        {0x8002, 4},
+        {0x8009, 4},
+        {0x8017, 4},
+        {0xc028, 4},
+        {0x8002, 5},
+        {0x8009, 5},
+        {0x8017, 5},
+        {0xc028, 5},
+        {0x8002, 6},
+        {0x8009, 6},
+        {0x8017, 6},
+        {0xc028, 6},
+        {0x8002, 7},
+        {0x8009, 7},
+        {0x8017, 7},
+        {0xc028, 7},
     },
     /* 229 */
     {
-        {3, 0x02, 4},
-        {6, 0x02, 4},
-        {10, 0x02, 4},
-        {15, 0x02, 4},
-        {24, 0x02, 4},
-        {31, 0x02, 4},
-        {41, 0x02, 4},
-        {56, 0x03, 4},
-        {3, 0x02, 5},
-        {6, 0x02, 5},
-        {10, 0x02, 5},
-        {15, 0x02, 5},
-        {24, 0x02, 5},
-        {31, 0x02, 5},
-        {41, 0x02, 5},
-        {56, 0x03, 5},
+        {0x8003, 4},
+        {0x8006, 4},
+        {0x800a, 4},
+        {0x800f, 4},
+        {0x8018, 4},
+        {0x801f, 4},
+        {0x8029, 4},
+        {0xc038, 4},
+        {0x8003, 5},
+        {0x8006, 5},
+        {0x800a, 5},
+        {0x800f, 5},
+        {0x8018, 5},
+        {0x801f, 5},
+        {0x8029, 5},
+        {0xc038, 5},
     },
     /* 230 */
     {
-        {3, 0x02, 6},
-        {6, 0x02, 6},
-        {10, 0x02, 6},
-        {15, 0x02, 6},
-        {24, 0x02, 6},
-        {31, 0x02, 6},
-        {41, 0x02, 6},
-        {56, 0x03, 6},
-        {3, 0x02, 7},
-        {6, 0x02, 7},
-        {10, 0x02, 7},
-        {15, 0x02, 7},
-        {24, 0x02, 7},
-        {31, 0x02, 7},
-        {41, 0x02, 7},
-        {56, 0x03, 7},
+        {0x8003, 6},
+        {0x8006, 6},
+        {0x800a, 6},
+        {0x800f, 6},
+        {0x8018, 6},
+        {0x801f, 6},
+        {0x8029, 6},
+        {0xc038, 6},
+        {0x8003, 7},
+        {0x8006, 7},
+        {0x800a, 7},
+        {0x800f, 7},
+        {0x8018, 7},
+        {0x801f, 7},
+        {0x8029, 7},
+        {0xc038, 7},
     },
     /* 231 */
     {
-        {1, 0x02, 8},
-        {22, 0x03, 8},
-        {1, 0x02, 11},
-        {22, 0x03, 11},
-        {1, 0x02, 12},
-        {22, 0x03, 12},
-        {1, 0x02, 14},
-        {22, 0x03, 14},
-        {1, 0x02, 15},
-        {22, 0x03, 15},
-        {1, 0x02, 16},
-        {22, 0x03, 16},
-        {1, 0x02, 17},
-        {22, 0x03, 17},
-        {1, 0x02, 18},
-        {22, 0x03, 18},
+        {0x8001, 8},
+        {0xc016, 8},
+        {0x8001, 11},
+        {0xc016, 11},
+        {0x8001, 12},
+        {0xc016, 12},
+        {0x8001, 14},
+        {0xc016, 14},
+        {0x8001, 15},
+        {0xc016, 15},
+        {0x8001, 16},
+        {0xc016, 16},
+        {0x8001, 17},
+        {0xc016, 17},
+        {0x8001, 18},
+        {0xc016, 18},
     },
     /* 232 */
     {
-        {2, 0x02, 8},
-        {9, 0x02, 8},
-        {23, 0x02, 8},
-        {40, 0x03, 8},
-        {2, 0x02, 11},
-        {9, 0x02, 11},
-        {23, 0x02, 11},
-        {40, 0x03, 11},
-        {2, 0x02, 12},
-        {9, 0x02, 12},
-        {23, 0x02, 12},
-        {40, 0x03, 12},
-        {2, 0x02, 14},
-        {9, 0x02, 14},
-        {23, 0x02, 14},
-        {40, 0x03, 14},
+        {0x8002, 8},
+        {0x8009, 8},
+        {0x8017, 8},
+        {0xc028, 8},
+        {0x8002, 11},
+        {0x8009, 11},
+        {0x8017, 11},
+        {0xc028, 11},
+        {0x8002, 12},
+        {0x8009, 12},
+        {0x8017, 12},
+        {0xc028, 12},
+        {0x8002, 14},
+        {0x8009, 14},
+        {0x8017, 14},
+        {0xc028, 14},
     },
     /* 233 */
     {
-        {3, 0x02, 8},
-        {6, 0x02, 8},
-        {10, 0x02, 8},
-        {15, 0x02, 8},
-        {24, 0x02, 8},
-        {31, 0x02, 8},
-        {41, 0x02, 8},
-        {56, 0x03, 8},
-        {3, 0x02, 11},
-        {6, 0x02, 11},
-        {10, 0x02, 11},
-        {15, 0x02, 11},
-        {24, 0x02, 11},
-        {31, 0x02, 11},
-        {41, 0x02, 11},
-        {56, 0x03, 11},
+        {0x8003, 8},
+        {0x8006, 8},
+        {0x800a, 8},
+        {0x800f, 8},
+        {0x8018, 8},
+        {0x801f, 8},
+        {0x8029, 8},
+        {0xc038, 8},
+        {0x8003, 11},
+        {0x8006, 11},
+        {0x800a, 11},
+        {0x800f, 11},
+        {0x8018, 11},
+        {0x801f, 11},
+        {0x8029, 11},
+        {0xc038, 11},
     },
     /* 234 */
     {
-        {3, 0x02, 12},
-        {6, 0x02, 12},
-        {10, 0x02, 12},
-        {15, 0x02, 12},
-        {24, 0x02, 12},
-        {31, 0x02, 12},
-        {41, 0x02, 12},
-        {56, 0x03, 12},
-        {3, 0x02, 14},
-        {6, 0x02, 14},
-        {10, 0x02, 14},
-        {15, 0x02, 14},
-        {24, 0x02, 14},
-        {31, 0x02, 14},
-        {41, 0x02, 14},
-        {56, 0x03, 14},
+        {0x8003, 12},
+        {0x8006, 12},
+        {0x800a, 12},
+        {0x800f, 12},
+        {0x8018, 12},
+        {0x801f, 12},
+        {0x8029, 12},
+        {0xc038, 12},
+        {0x8003, 14},
+        {0x8006, 14},
+        {0x800a, 14},
+        {0x800f, 14},
+        {0x8018, 14},
+        {0x801f, 14},
+        {0x8029, 14},
+        {0xc038, 14},
     },
     /* 235 */
     {
-        {2, 0x02, 15},
-        {9, 0x02, 15},
-        {23, 0x02, 15},
-        {40, 0x03, 15},
-        {2, 0x02, 16},
-        {9, 0x02, 16},
-        {23, 0x02, 16},
-        {40, 0x03, 16},
-        {2, 0x02, 17},
-        {9, 0x02, 17},
-        {23, 0x02, 17},
-        {40, 0x03, 17},
-        {2, 0x02, 18},
-        {9, 0x02, 18},
-        {23, 0x02, 18},
-        {40, 0x03, 18},
+        {0x8002, 15},
+        {0x8009, 15},
+        {0x8017, 15},
+        {0xc028, 15},
+        {0x8002, 16},
+        {0x8009, 16},
+        {0x8017, 16},
+        {0xc028, 16},
+        {0x8002, 17},
+        {0x8009, 17},
+        {0x8017, 17},
+        {0xc028, 17},
+        {0x8002, 18},
+        {0x8009, 18},
+        {0x8017, 18},
+        {0xc028, 18},
     },
     /* 236 */
     {
-        {3, 0x02, 15},
-        {6, 0x02, 15},
-        {10, 0x02, 15},
-        {15, 0x02, 15},
-        {24, 0x02, 15},
-        {31, 0x02, 15},
-        {41, 0x02, 15},
-        {56, 0x03, 15},
-        {3, 0x02, 16},
-        {6, 0x02, 16},
-        {10, 0x02, 16},
-        {15, 0x02, 16},
-        {24, 0x02, 16},
-        {31, 0x02, 16},
-        {41, 0x02, 16},
-        {56, 0x03, 16},
+        {0x8003, 15},
+        {0x8006, 15},
+        {0x800a, 15},
+        {0x800f, 15},
+        {0x8018, 15},
+        {0x801f, 15},
+        {0x8029, 15},
+        {0xc038, 15},
+        {0x8003, 16},
+        {0x8006, 16},
+        {0x800a, 16},
+        {0x800f, 16},
+        {0x8018, 16},
+        {0x801f, 16},
+        {0x8029, 16},
+        {0xc038, 16},
     },
     /* 237 */
     {
-        {3, 0x02, 17},
-        {6, 0x02, 17},
-        {10, 0x02, 17},
-        {15, 0x02, 17},
-        {24, 0x02, 17},
-        {31, 0x02, 17},
-        {41, 0x02, 17},
-        {56, 0x03, 17},
-        {3, 0x02, 18},
-        {6, 0x02, 18},
-        {10, 0x02, 18},
-        {15, 0x02, 18},
-        {24, 0x02, 18},
-        {31, 0x02, 18},
-        {41, 0x02, 18},
-        {56, 0x03, 18},
+        {0x8003, 17},
+        {0x8006, 17},
+        {0x800a, 17},
+        {0x800f, 17},
+        {0x8018, 17},
+        {0x801f, 17},
+        {0x8029, 17},
+        {0xc038, 17},
+        {0x8003, 18},
+        {0x8006, 18},
+        {0x800a, 18},
+        {0x800f, 18},
+        {0x8018, 18},
+        {0x801f, 18},
+        {0x8029, 18},
+        {0xc038, 18},
     },
     /* 238 */
     {
-        {0, 0x03, 19},
-        {0, 0x03, 20},
-        {0, 0x03, 21},
-        {0, 0x03, 23},
-        {0, 0x03, 24},
-        {0, 0x03, 25},
-        {0, 0x03, 26},
-        {0, 0x03, 27},
-        {0, 0x03, 28},
-        {0, 0x03, 29},
-        {0, 0x03, 30},
-        {0, 0x03, 31},
-        {0, 0x03, 127},
-        {0, 0x03, 220},
-        {0, 0x03, 249},
-        {253, 0x00, 0},
+        {0xc000, 19},
+        {0xc000, 20},
+        {0xc000, 21},
+        {0xc000, 23},
+        {0xc000, 24},
+        {0xc000, 25},
+        {0xc000, 26},
+        {0xc000, 27},
+        {0xc000, 28},
+        {0xc000, 29},
+        {0xc000, 30},
+        {0xc000, 31},
+        {0xc000, 127},
+        {0xc000, 220},
+        {0xc000, 249},
+        {0xfd, 0},
     },
     /* 239 */
     {
-        {1, 0x02, 19},
-        {22, 0x03, 19},
-        {1, 0x02, 20},
-        {22, 0x03, 20},
-        {1, 0x02, 21},
-        {22, 0x03, 21},
-        {1, 0x02, 23},
-        {22, 0x03, 23},
-        {1, 0x02, 24},
-        {22, 0x03, 24},
-        {1, 0x02, 25},
-        {22, 0x03, 25},
-        {1, 0x02, 26},
-        {22, 0x03, 26},
-        {1, 0x02, 27},
-        {22, 0x03, 27},
+        {0x8001, 19},
+        {0xc016, 19},
+        {0x8001, 20},
+        {0xc016, 20},
+        {0x8001, 21},
+        {0xc016, 21},
+        {0x8001, 23},
+        {0xc016, 23},
+        {0x8001, 24},
+        {0xc016, 24},
+        {0x8001, 25},
+        {0xc016, 25},
+        {0x8001, 26},
+        {0xc016, 26},
+        {0x8001, 27},
+        {0xc016, 27},
     },
     /* 240 */
     {
-        {2, 0x02, 19},
-        {9, 0x02, 19},
-        {23, 0x02, 19},
-        {40, 0x03, 19},
-        {2, 0x02, 20},
-        {9, 0x02, 20},
-        {23, 0x02, 20},
-        {40, 0x03, 20},
-        {2, 0x02, 21},
-        {9, 0x02, 21},
-        {23, 0x02, 21},
-        {40, 0x03, 21},
-        {2, 0x02, 23},
-        {9, 0x02, 23},
-        {23, 0x02, 23},
-        {40, 0x03, 23},
+        {0x8002, 19},
+        {0x8009, 19},
+        {0x8017, 19},
+        {0xc028, 19},
+        {0x8002, 20},
+        {0x8009, 20},
+        {0x8017, 20},
+        {0xc028, 20},
+        {0x8002, 21},
+        {0x8009, 21},
+        {0x8017, 21},
+        {0xc028, 21},
+        {0x8002, 23},
+        {0x8009, 23},
+        {0x8017, 23},
+        {0xc028, 23},
     },
     /* 241 */
     {
-        {3, 0x02, 19},
-        {6, 0x02, 19},
-        {10, 0x02, 19},
-        {15, 0x02, 19},
-        {24, 0x02, 19},
-        {31, 0x02, 19},
-        {41, 0x02, 19},
-        {56, 0x03, 19},
-        {3, 0x02, 20},
-        {6, 0x02, 20},
-        {10, 0x02, 20},
-        {15, 0x02, 20},
-        {24, 0x02, 20},
-        {31, 0x02, 20},
-        {41, 0x02, 20},
-        {56, 0x03, 20},
+        {0x8003, 19},
+        {0x8006, 19},
+        {0x800a, 19},
+        {0x800f, 19},
+        {0x8018, 19},
+        {0x801f, 19},
+        {0x8029, 19},
+        {0xc038, 19},
+        {0x8003, 20},
+        {0x8006, 20},
+        {0x800a, 20},
+        {0x800f, 20},
+        {0x8018, 20},
+        {0x801f, 20},
+        {0x8029, 20},
+        {0xc038, 20},
     },
     /* 242 */
     {
-        {3, 0x02, 21},
-        {6, 0x02, 21},
-        {10, 0x02, 21},
-        {15, 0x02, 21},
-        {24, 0x02, 21},
-        {31, 0x02, 21},
-        {41, 0x02, 21},
-        {56, 0x03, 21},
-        {3, 0x02, 23},
-        {6, 0x02, 23},
-        {10, 0x02, 23},
-        {15, 0x02, 23},
-        {24, 0x02, 23},
-        {31, 0x02, 23},
-        {41, 0x02, 23},
-        {56, 0x03, 23},
+        {0x8003, 21},
+        {0x8006, 21},
+        {0x800a, 21},
+        {0x800f, 21},
+        {0x8018, 21},
+        {0x801f, 21},
+        {0x8029, 21},
+        {0xc038, 21},
+        {0x8003, 23},
+        {0x8006, 23},
+        {0x800a, 23},
+        {0x800f, 23},
+        {0x8018, 23},
+        {0x801f, 23},
+        {0x8029, 23},
+        {0xc038, 23},
     },
     /* 243 */
     {
-        {2, 0x02, 24},
-        {9, 0x02, 24},
-        {23, 0x02, 24},
-        {40, 0x03, 24},
-        {2, 0x02, 25},
-        {9, 0x02, 25},
-        {23, 0x02, 25},
-        {40, 0x03, 25},
-        {2, 0x02, 26},
-        {9, 0x02, 26},
-        {23, 0x02, 26},
-        {40, 0x03, 26},
-        {2, 0x02, 27},
-        {9, 0x02, 27},
-        {23, 0x02, 27},
-        {40, 0x03, 27},
+        {0x8002, 24},
+        {0x8009, 24},
+        {0x8017, 24},
+        {0xc028, 24},
+        {0x8002, 25},
+        {0x8009, 25},
+        {0x8017, 25},
+        {0xc028, 25},
+        {0x8002, 26},
+        {0x8009, 26},
+        {0x8017, 26},
+        {0xc028, 26},
+        {0x8002, 27},
+        {0x8009, 27},
+        {0x8017, 27},
+        {0xc028, 27},
     },
     /* 244 */
     {
-        {3, 0x02, 24},
-        {6, 0x02, 24},
-        {10, 0x02, 24},
-        {15, 0x02, 24},
-        {24, 0x02, 24},
-        {31, 0x02, 24},
-        {41, 0x02, 24},
-        {56, 0x03, 24},
-        {3, 0x02, 25},
-        {6, 0x02, 25},
-        {10, 0x02, 25},
-        {15, 0x02, 25},
-        {24, 0x02, 25},
-        {31, 0x02, 25},
-        {41, 0x02, 25},
-        {56, 0x03, 25},
+        {0x8003, 24},
+        {0x8006, 24},
+        {0x800a, 24},
+        {0x800f, 24},
+        {0x8018, 24},
+        {0x801f, 24},
+        {0x8029, 24},
+        {0xc038, 24},
+        {0x8003, 25},
+        {0x8006, 25},
+        {0x800a, 25},
+        {0x800f, 25},
+        {0x8018, 25},
+        {0x801f, 25},
+        {0x8029, 25},
+        {0xc038, 25},
     },
     /* 245 */
     {
-        {3, 0x02, 26},
-        {6, 0x02, 26},
-        {10, 0x02, 26},
-        {15, 0x02, 26},
-        {24, 0x02, 26},
-        {31, 0x02, 26},
-        {41, 0x02, 26},
-        {56, 0x03, 26},
-        {3, 0x02, 27},
-        {6, 0x02, 27},
-        {10, 0x02, 27},
-        {15, 0x02, 27},
-        {24, 0x02, 27},
-        {31, 0x02, 27},
-        {41, 0x02, 27},
-        {56, 0x03, 27},
+        {0x8003, 26},
+        {0x8006, 26},
+        {0x800a, 26},
+        {0x800f, 26},
+        {0x8018, 26},
+        {0x801f, 26},
+        {0x8029, 26},
+        {0xc038, 26},
+        {0x8003, 27},
+        {0x8006, 27},
+        {0x800a, 27},
+        {0x800f, 27},
+        {0x8018, 27},
+        {0x801f, 27},
+        {0x8029, 27},
+        {0xc038, 27},
     },
     /* 246 */
     {
-        {1, 0x02, 28},
-        {22, 0x03, 28},
-        {1, 0x02, 29},
-        {22, 0x03, 29},
-        {1, 0x02, 30},
-        {22, 0x03, 30},
-        {1, 0x02, 31},
-        {22, 0x03, 31},
-        {1, 0x02, 127},
-        {22, 0x03, 127},
-        {1, 0x02, 220},
-        {22, 0x03, 220},
-        {1, 0x02, 249},
-        {22, 0x03, 249},
-        {254, 0x00, 0},
-        {255, 0x00, 0},
+        {0x8001, 28},
+        {0xc016, 28},
+        {0x8001, 29},
+        {0xc016, 29},
+        {0x8001, 30},
+        {0xc016, 30},
+        {0x8001, 31},
+        {0xc016, 31},
+        {0x8001, 127},
+        {0xc016, 127},
+        {0x8001, 220},
+        {0xc016, 220},
+        {0x8001, 249},
+        {0xc016, 249},
+        {0xfe, 0},
+        {0xff, 0},
     },
     /* 247 */
     {
-        {2, 0x02, 28},
-        {9, 0x02, 28},
-        {23, 0x02, 28},
-        {40, 0x03, 28},
-        {2, 0x02, 29},
-        {9, 0x02, 29},
-        {23, 0x02, 29},
-        {40, 0x03, 29},
-        {2, 0x02, 30},
-        {9, 0x02, 30},
-        {23, 0x02, 30},
-        {40, 0x03, 30},
-        {2, 0x02, 31},
-        {9, 0x02, 31},
-        {23, 0x02, 31},
-        {40, 0x03, 31},
+        {0x8002, 28},
+        {0x8009, 28},
+        {0x8017, 28},
+        {0xc028, 28},
+        {0x8002, 29},
+        {0x8009, 29},
+        {0x8017, 29},
+        {0xc028, 29},
+        {0x8002, 30},
+        {0x8009, 30},
+        {0x8017, 30},
+        {0xc028, 30},
+        {0x8002, 31},
+        {0x8009, 31},
+        {0x8017, 31},
+        {0xc028, 31},
     },
     /* 248 */
     {
-        {3, 0x02, 28},
-        {6, 0x02, 28},
-        {10, 0x02, 28},
-        {15, 0x02, 28},
-        {24, 0x02, 28},
-        {31, 0x02, 28},
-        {41, 0x02, 28},
-        {56, 0x03, 28},
-        {3, 0x02, 29},
-        {6, 0x02, 29},
-        {10, 0x02, 29},
-        {15, 0x02, 29},
-        {24, 0x02, 29},
-        {31, 0x02, 29},
-        {41, 0x02, 29},
-        {56, 0x03, 29},
+        {0x8003, 28},
+        {0x8006, 28},
+        {0x800a, 28},
+        {0x800f, 28},
+        {0x8018, 28},
+        {0x801f, 28},
+        {0x8029, 28},
+        {0xc038, 28},
+        {0x8003, 29},
+        {0x8006, 29},
+        {0x800a, 29},
+        {0x800f, 29},
+        {0x8018, 29},
+        {0x801f, 29},
+        {0x8029, 29},
+        {0xc038, 29},
     },
     /* 249 */
     {
-        {3, 0x02, 30},
-        {6, 0x02, 30},
-        {10, 0x02, 30},
-        {15, 0x02, 30},
-        {24, 0x02, 30},
-        {31, 0x02, 30},
-        {41, 0x02, 30},
-        {56, 0x03, 30},
-        {3, 0x02, 31},
-        {6, 0x02, 31},
-        {10, 0x02, 31},
-        {15, 0x02, 31},
-        {24, 0x02, 31},
-        {31, 0x02, 31},
-        {41, 0x02, 31},
-        {56, 0x03, 31},
+        {0x8003, 30},
+        {0x8006, 30},
+        {0x800a, 30},
+        {0x800f, 30},
+        {0x8018, 30},
+        {0x801f, 30},
+        {0x8029, 30},
+        {0xc038, 30},
+        {0x8003, 31},
+        {0x8006, 31},
+        {0x800a, 31},
+        {0x800f, 31},
+        {0x8018, 31},
+        {0x801f, 31},
+        {0x8029, 31},
+        {0xc038, 31},
     },
     /* 250 */
     {
-        {2, 0x02, 127},
-        {9, 0x02, 127},
-        {23, 0x02, 127},
-        {40, 0x03, 127},
-        {2, 0x02, 220},
-        {9, 0x02, 220},
-        {23, 0x02, 220},
-        {40, 0x03, 220},
-        {2, 0x02, 249},
-        {9, 0x02, 249},
-        {23, 0x02, 249},
-        {40, 0x03, 249},
-        {0, 0x03, 10},
-        {0, 0x03, 13},
-        {0, 0x03, 22},
-        {0, 0x04, 0},
+        {0x8002, 127},
+        {0x8009, 127},
+        {0x8017, 127},
+        {0xc028, 127},
+        {0x8002, 220},
+        {0x8009, 220},
+        {0x8017, 220},
+        {0xc028, 220},
+        {0x8002, 249},
+        {0x8009, 249},
+        {0x8017, 249},
+        {0xc028, 249},
+        {0xc000, 10},
+        {0xc000, 13},
+        {0xc000, 22},
+        {0x100, 0},
     },
     /* 251 */
     {
-        {3, 0x02, 127},
-        {6, 0x02, 127},
-        {10, 0x02, 127},
-        {15, 0x02, 127},
-        {24, 0x02, 127},
-        {31, 0x02, 127},
-        {41, 0x02, 127},
-        {56, 0x03, 127},
-        {3, 0x02, 220},
-        {6, 0x02, 220},
-        {10, 0x02, 220},
-        {15, 0x02, 220},
-        {24, 0x02, 220},
-        {31, 0x02, 220},
-        {41, 0x02, 220},
-        {56, 0x03, 220},
+        {0x8003, 127},
+        {0x8006, 127},
+        {0x800a, 127},
+        {0x800f, 127},
+        {0x8018, 127},
+        {0x801f, 127},
+        {0x8029, 127},
+        {0xc038, 127},
+        {0x8003, 220},
+        {0x8006, 220},
+        {0x800a, 220},
+        {0x800f, 220},
+        {0x8018, 220},
+        {0x801f, 220},
+        {0x8029, 220},
+        {0xc038, 220},
     },
     /* 252 */
     {
-        {3, 0x02, 249},
-        {6, 0x02, 249},
-        {10, 0x02, 249},
-        {15, 0x02, 249},
-        {24, 0x02, 249},
-        {31, 0x02, 249},
-        {41, 0x02, 249},
-        {56, 0x03, 249},
-        {1, 0x02, 10},
-        {22, 0x03, 10},
-        {1, 0x02, 13},
-        {22, 0x03, 13},
-        {1, 0x02, 22},
-        {22, 0x03, 22},
-        {0, 0x04, 0},
-        {0, 0x04, 0},
+        {0x8003, 249},
+        {0x8006, 249},
+        {0x800a, 249},
+        {0x800f, 249},
+        {0x8018, 249},
+        {0x801f, 249},
+        {0x8029, 249},
+        {0xc038, 249},
+        {0x8001, 10},
+        {0xc016, 10},
+        {0x8001, 13},
+        {0xc016, 13},
+        {0x8001, 22},
+        {0xc016, 22},
+        {0x100, 0},
+        {0x100, 0},
     },
     /* 253 */
     {
-        {2, 0x02, 10},
-        {9, 0x02, 10},
-        {23, 0x02, 10},
-        {40, 0x03, 10},
-        {2, 0x02, 13},
-        {9, 0x02, 13},
-        {23, 0x02, 13},
-        {40, 0x03, 13},
-        {2, 0x02, 22},
-        {9, 0x02, 22},
-        {23, 0x02, 22},
-        {40, 0x03, 22},
-        {0, 0x04, 0},
-        {0, 0x04, 0},
-        {0, 0x04, 0},
-        {0, 0x04, 0},
+        {0x8002, 10},
+        {0x8009, 10},
+        {0x8017, 10},
+        {0xc028, 10},
+        {0x8002, 13},
+        {0x8009, 13},
+        {0x8017, 13},
+        {0xc028, 13},
+        {0x8002, 22},
+        {0x8009, 22},
+        {0x8017, 22},
+        {0xc028, 22},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
     },
     /* 254 */
     {
-        {3, 0x02, 10},
-        {6, 0x02, 10},
-        {10, 0x02, 10},
-        {15, 0x02, 10},
-        {24, 0x02, 10},
-        {31, 0x02, 10},
-        {41, 0x02, 10},
-        {56, 0x03, 10},
-        {3, 0x02, 13},
-        {6, 0x02, 13},
-        {10, 0x02, 13},
-        {15, 0x02, 13},
-        {24, 0x02, 13},
-        {31, 0x02, 13},
-        {41, 0x02, 13},
-        {56, 0x03, 13},
+        {0x8003, 10},
+        {0x8006, 10},
+        {0x800a, 10},
+        {0x800f, 10},
+        {0x8018, 10},
+        {0x801f, 10},
+        {0x8029, 10},
+        {0xc038, 10},
+        {0x8003, 13},
+        {0x8006, 13},
+        {0x800a, 13},
+        {0x800f, 13},
+        {0x8018, 13},
+        {0x801f, 13},
+        {0x8029, 13},
+        {0xc038, 13},
     },
     /* 255 */
     {
-        {3, 0x02, 22},
-        {6, 0x02, 22},
-        {10, 0x02, 22},
-        {15, 0x02, 22},
-        {24, 0x02, 22},
-        {31, 0x02, 22},
-        {41, 0x02, 22},
-        {56, 0x03, 22},
-        {0, 0x04, 0},
-        {0, 0x04, 0},
-        {0, 0x04, 0},
-        {0, 0x04, 0},
-        {0, 0x04, 0},
-        {0, 0x04, 0},
-        {0, 0x04, 0},
-        {0, 0x04, 0},
+        {0x8003, 22},
+        {0x8006, 22},
+        {0x800a, 22},
+        {0x800f, 22},
+        {0x8018, 22},
+        {0x801f, 22},
+        {0x8029, 22},
+        {0xc038, 22},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+    },
+    /* 256 */
+    {
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
+        {0x100, 0},
     },
 };
diff --git a/deps/nghttp2/lib/nghttp2_helper.c b/deps/nghttp2/lib/nghttp2_helper.c
index 81a8a0cf99..0bd5414723 100644
--- a/deps/nghttp2/lib/nghttp2_helper.c
+++ b/deps/nghttp2/lib/nghttp2_helper.c
@@ -317,40 +317,42 @@ const char *nghttp2_strerror(int error_code) {
   case NGHTTP2_ERR_HTTP_MESSAGING:
     return "Violation in HTTP messaging rule";
   case NGHTTP2_ERR_REFUSED_STREAM:
     return "Stream was refused";
   case NGHTTP2_ERR_INTERNAL:
     return "Internal error";
   case NGHTTP2_ERR_CANCEL:
     return "Cancel";
   case NGHTTP2_ERR_SETTINGS_EXPECTED:
     return "When a local endpoint expects to receive SETTINGS frame, it "
            "receives an other type of frame";
   case NGHTTP2_ERR_NOMEM:
     return "Out of memory";
   case NGHTTP2_ERR_CALLBACK_FAILURE:
     return "The user callback function failed";
   case NGHTTP2_ERR_BAD_CLIENT_MAGIC:
     return "Received bad client magic byte string";
   case NGHTTP2_ERR_FLOODED:
     return "Flooding was detected in this HTTP/2 session, and it must be "
            "closed";
+  case NGHTTP2_ERR_TOO_MANY_SETTINGS:
+    return "SETTINGS frame contained more than the maximum allowed entries";
   default:
     return "Unknown error code";
   }
 }
 
 /* Generated by gennmchartbl.py */
 static const int VALID_HD_NAME_CHARS[] = {
     0 /* NUL  */, 0 /* SOH  */, 0 /* STX  */, 0 /* ETX  */,
     0 /* EOT  */, 0 /* ENQ  */, 0 /* ACK  */, 0 /* BEL  */,
     0 /* BS   */, 0 /* HT   */, 0 /* LF   */, 0 /* VT   */,
     0 /* FF   */, 0 /* CR   */, 0 /* SO   */, 0 /* SI   */,
     0 /* DLE  */, 0 /* DC1  */, 0 /* DC2  */, 0 /* DC3  */,
     0 /* DC4  */, 0 /* NAK  */, 0 /* SYN  */, 0 /* ETB  */,
     0 /* CAN  */, 0 /* EM   */, 0 /* SUB  */, 0 /* ESC  */,
     0 /* FS   */, 0 /* GS   */, 0 /* RS   */, 0 /* US   */,
     0 /* SPC  */, 1 /* !    */, 0 /* "    */, 1 /* #    */,
     1 /* $    */, 1 /* %    */, 1 /* &    */, 1 /* '    */,
     0 /* (    */, 0 /* )    */, 1 /* *    */, 1 /* +    */,
     0 /* ,    */, 1 /* -    */, 1 /* .    */, 0 /* /    */,
     1 /* 0    */, 1 /* 1    */, 1 /* 2    */, 1 /* 3    */,
@@ -488,40 +490,118 @@ static const int VALID_HD_VALUE_CHARS[] = {
     1 /* 0xe0 */, 1 /* 0xe1 */, 1 /* 0xe2 */, 1 /* 0xe3 */,
     1 /* 0xe4 */, 1 /* 0xe5 */, 1 /* 0xe6 */, 1 /* 0xe7 */,
     1 /* 0xe8 */, 1 /* 0xe9 */, 1 /* 0xea */, 1 /* 0xeb */,
     1 /* 0xec */, 1 /* 0xed */, 1 /* 0xee */, 1 /* 0xef */,
     1 /* 0xf0 */, 1 /* 0xf1 */, 1 /* 0xf2 */, 1 /* 0xf3 */,
     1 /* 0xf4 */, 1 /* 0xf5 */, 1 /* 0xf6 */, 1 /* 0xf7 */,
     1 /* 0xf8 */, 1 /* 0xf9 */, 1 /* 0xfa */, 1 /* 0xfb */,
     1 /* 0xfc */, 1 /* 0xfd */, 1 /* 0xfe */, 1 /* 0xff */
 };
 
 int nghttp2_check_header_value(const uint8_t *value, size_t len) {
   const uint8_t *last;
   for (last = value + len; value != last; ++value) {
     if (!VALID_HD_VALUE_CHARS[*value]) {
       return 0;
     }
   }
   return 1;
 }
 
+/* Generated by genauthroitychartbl.py */
+static char VALID_AUTHORITY_CHARS[] = {
+    0 /* NUL  */, 0 /* SOH  */, 0 /* STX  */, 0 /* ETX  */,
+    0 /* EOT  */, 0 /* ENQ  */, 0 /* ACK  */, 0 /* BEL  */,
+    0 /* BS   */, 0 /* HT   */, 0 /* LF   */, 0 /* VT   */,
+    0 /* FF   */, 0 /* CR   */, 0 /* SO   */, 0 /* SI   */,
+    0 /* DLE  */, 0 /* DC1  */, 0 /* DC2  */, 0 /* DC3  */,
+    0 /* DC4  */, 0 /* NAK  */, 0 /* SYN  */, 0 /* ETB  */,
+    0 /* CAN  */, 0 /* EM   */, 0 /* SUB  */, 0 /* ESC  */,
+    0 /* FS   */, 0 /* GS   */, 0 /* RS   */, 0 /* US   */,
+    0 /* SPC  */, 1 /* !    */, 0 /* "    */, 0 /* #    */,
+    1 /* $    */, 1 /* %    */, 1 /* &    */, 1 /* '    */,
+    1 /* (    */, 1 /* )    */, 1 /* *    */, 1 /* +    */,
+    1 /* ,    */, 1 /* -    */, 1 /* .    */, 0 /* /    */,
+    1 /* 0    */, 1 /* 1    */, 1 /* 2    */, 1 /* 3    */,
+    1 /* 4    */, 1 /* 5    */, 1 /* 6    */, 1 /* 7    */,
+    1 /* 8    */, 1 /* 9    */, 1 /* :    */, 1 /* ;    */,
+    0 /* <    */, 1 /* =    */, 0 /* >    */, 0 /* ?    */,
+    1 /* @    */, 1 /* A    */, 1 /* B    */, 1 /* C    */,
+    1 /* D    */, 1 /* E    */, 1 /* F    */, 1 /* G    */,
+    1 /* H    */, 1 /* I    */, 1 /* J    */, 1 /* K    */,
+    1 /* L    */, 1 /* M    */, 1 /* N    */, 1 /* O    */,
+    1 /* P    */, 1 /* Q    */, 1 /* R    */, 1 /* S    */,
+    1 /* T    */, 1 /* U    */, 1 /* V    */, 1 /* W    */,
+    1 /* X    */, 1 /* Y    */, 1 /* Z    */, 1 /* [    */,
+    0 /* \    */, 1 /* ]    */, 0 /* ^    */, 1 /* _    */,
+    0 /* `    */, 1 /* a    */, 1 /* b    */, 1 /* c    */,
+    1 /* d    */, 1 /* e    */, 1 /* f    */, 1 /* g    */,
+    1 /* h    */, 1 /* i    */, 1 /* j    */, 1 /* k    */,
+    1 /* l    */, 1 /* m    */, 1 /* n    */, 1 /* o    */,
+    1 /* p    */, 1 /* q    */, 1 /* r    */, 1 /* s    */,
+    1 /* t    */, 1 /* u    */, 1 /* v    */, 1 /* w    */,
+    1 /* x    */, 1 /* y    */, 1 /* z    */, 0 /* {    */,
+    0 /* |    */, 0 /* }    */, 1 /* ~    */, 0 /* DEL  */,
+    0 /* 0x80 */, 0 /* 0x81 */, 0 /* 0x82 */, 0 /* 0x83 */,
+    0 /* 0x84 */, 0 /* 0x85 */, 0 /* 0x86 */, 0 /* 0x87 */,
+    0 /* 0x88 */, 0 /* 0x89 */, 0 /* 0x8a */, 0 /* 0x8b */,
+    0 /* 0x8c */, 0 /* 0x8d */, 0 /* 0x8e */, 0 /* 0x8f */,
+    0 /* 0x90 */, 0 /* 0x91 */, 0 /* 0x92 */, 0 /* 0x93 */,
+    0 /* 0x94 */, 0 /* 0x95 */, 0 /* 0x96 */, 0 /* 0x97 */,
+    0 /* 0x98 */, 0 /* 0x99 */, 0 /* 0x9a */, 0 /* 0x9b */,
+    0 /* 0x9c */, 0 /* 0x9d */, 0 /* 0x9e */, 0 /* 0x9f */,
+    0 /* 0xa0 */, 0 /* 0xa1 */, 0 /* 0xa2 */, 0 /* 0xa3 */,
+    0 /* 0xa4 */, 0 /* 0xa5 */, 0 /* 0xa6 */, 0 /* 0xa7 */,
+    0 /* 0xa8 */, 0 /* 0xa9 */, 0 /* 0xaa */, 0 /* 0xab */,
+    0 /* 0xac */, 0 /* 0xad */, 0 /* 0xae */, 0 /* 0xaf */,
+    0 /* 0xb0 */, 0 /* 0xb1 */, 0 /* 0xb2 */, 0 /* 0xb3 */,
+    0 /* 0xb4 */, 0 /* 0xb5 */, 0 /* 0xb6 */, 0 /* 0xb7 */,
+    0 /* 0xb8 */, 0 /* 0xb9 */, 0 /* 0xba */, 0 /* 0xbb */,
+    0 /* 0xbc */, 0 /* 0xbd */, 0 /* 0xbe */, 0 /* 0xbf */,
+    0 /* 0xc0 */, 0 /* 0xc1 */, 0 /* 0xc2 */, 0 /* 0xc3 */,
+    0 /* 0xc4 */, 0 /* 0xc5 */, 0 /* 0xc6 */, 0 /* 0xc7 */,
+    0 /* 0xc8 */, 0 /* 0xc9 */, 0 /* 0xca */, 0 /* 0xcb */,
+    0 /* 0xcc */, 0 /* 0xcd */, 0 /* 0xce */, 0 /* 0xcf */,
+    0 /* 0xd0 */, 0 /* 0xd1 */, 0 /* 0xd2 */, 0 /* 0xd3 */,
+    0 /* 0xd4 */, 0 /* 0xd5 */, 0 /* 0xd6 */, 0 /* 0xd7 */,
+    0 /* 0xd8 */, 0 /* 0xd9 */, 0 /* 0xda */, 0 /* 0xdb */,
+    0 /* 0xdc */, 0 /* 0xdd */, 0 /* 0xde */, 0 /* 0xdf */,
+    0 /* 0xe0 */, 0 /* 0xe1 */, 0 /* 0xe2 */, 0 /* 0xe3 */,
+    0 /* 0xe4 */, 0 /* 0xe5 */, 0 /* 0xe6 */, 0 /* 0xe7 */,
+    0 /* 0xe8 */, 0 /* 0xe9 */, 0 /* 0xea */, 0 /* 0xeb */,
+    0 /* 0xec */, 0 /* 0xed */, 0 /* 0xee */, 0 /* 0xef */,
+    0 /* 0xf0 */, 0 /* 0xf1 */, 0 /* 0xf2 */, 0 /* 0xf3 */,
+    0 /* 0xf4 */, 0 /* 0xf5 */, 0 /* 0xf6 */, 0 /* 0xf7 */,
+    0 /* 0xf8 */, 0 /* 0xf9 */, 0 /* 0xfa */, 0 /* 0xfb */,
+    0 /* 0xfc */, 0 /* 0xfd */, 0 /* 0xfe */, 0 /* 0xff */
+};
+
+int nghttp2_check_authority(const uint8_t *value, size_t len) {
+  const uint8_t *last;
+  for (last = value + len; value != last; ++value) {
+    if (!VALID_AUTHORITY_CHARS[*value]) {
+      return 0;
+    }
+  }
+  return 1;
+}
+
 uint8_t *nghttp2_cpymem(uint8_t *dest, const void *src, size_t len) {
   if (len == 0) {
     return dest;
   }
 
   memcpy(dest, src, len);
 
   return dest + len;
 }
 
 const char *nghttp2_http2_strerror(uint32_t error_code) {
   switch (error_code) {
   case NGHTTP2_NO_ERROR:
     return "NO_ERROR";
   case NGHTTP2_PROTOCOL_ERROR:
     return "PROTOCOL_ERROR";
   case NGHTTP2_INTERNAL_ERROR:
     return "INTERNAL_ERROR";
   case NGHTTP2_FLOW_CONTROL_ERROR:
     return "FLOW_CONTROL_ERROR";
diff --git a/deps/nghttp2/lib/nghttp2_http.c b/deps/nghttp2/lib/nghttp2_http.c
index 8d99029983..62f57b6aec 100644
--- a/deps/nghttp2/lib/nghttp2_http.c
+++ b/deps/nghttp2/lib/nghttp2_http.c
@@ -288,118 +288,40 @@ static int http_response_on_header(nghttp2_stream *stream, nghttp2_hd_nv *nv,
   case NGHTTP2_TOKEN_UPGRADE:
     return NGHTTP2_ERR_HTTP_HEADER;
   case NGHTTP2_TOKEN_TE:
     if (!lstrieq("trailers", nv->value->base, nv->value->len)) {
       return NGHTTP2_ERR_HTTP_HEADER;
     }
     break;
   default:
     if (nv->name->base[0] == ':') {
       return NGHTTP2_ERR_HTTP_HEADER;
     }
   }
 
   if (nv->name->base[0] != ':') {
     stream->http_flags |= NGHTTP2_HTTP_FLAG_PSEUDO_HEADER_DISALLOWED;
   }
 
   return 0;
 }
 
-/* Generated by genauthroitychartbl.py */
-static char VALID_AUTHORITY_CHARS[] = {
-    0 /* NUL  */, 0 /* SOH  */, 0 /* STX  */, 0 /* ETX  */,
-    0 /* EOT  */, 0 /* ENQ  */, 0 /* ACK  */, 0 /* BEL  */,
-    0 /* BS   */, 0 /* HT   */, 0 /* LF   */, 0 /* VT   */,
-    0 /* FF   */, 0 /* CR   */, 0 /* SO   */, 0 /* SI   */,
-    0 /* DLE  */, 0 /* DC1  */, 0 /* DC2  */, 0 /* DC3  */,
-    0 /* DC4  */, 0 /* NAK  */, 0 /* SYN  */, 0 /* ETB  */,
-    0 /* CAN  */, 0 /* EM   */, 0 /* SUB  */, 0 /* ESC  */,
-    0 /* FS   */, 0 /* GS   */, 0 /* RS   */, 0 /* US   */,
-    0 /* SPC  */, 1 /* !    */, 0 /* "    */, 0 /* #    */,
-    1 /* $    */, 1 /* %    */, 1 /* &    */, 1 /* '    */,
-    1 /* (    */, 1 /* )    */, 1 /* *    */, 1 /* +    */,
-    1 /* ,    */, 1 /* -    */, 1 /* .    */, 0 /* /    */,
-    1 /* 0    */, 1 /* 1    */, 1 /* 2    */, 1 /* 3    */,
-    1 /* 4    */, 1 /* 5    */, 1 /* 6    */, 1 /* 7    */,
-    1 /* 8    */, 1 /* 9    */, 1 /* :    */, 1 /* ;    */,
-    0 /* <    */, 1 /* =    */, 0 /* >    */, 0 /* ?    */,
-    1 /* @    */, 1 /* A    */, 1 /* B    */, 1 /* C    */,
-    1 /* D    */, 1 /* E    */, 1 /* F    */, 1 /* G    */,
-    1 /* H    */, 1 /* I    */, 1 /* J    */, 1 /* K    */,
-    1 /* L    */, 1 /* M    */, 1 /* N    */, 1 /* O    */,
-    1 /* P    */, 1 /* Q    */, 1 /* R    */, 1 /* S    */,
-    1 /* T    */, 1 /* U    */, 1 /* V    */, 1 /* W    */,
-    1 /* X    */, 1 /* Y    */, 1 /* Z    */, 1 /* [    */,
-    0 /* \    */, 1 /* ]    */, 0 /* ^    */, 1 /* _    */,
-    0 /* `    */, 1 /* a    */, 1 /* b    */, 1 /* c    */,
-    1 /* d    */, 1 /* e    */, 1 /* f    */, 1 /* g    */,
-    1 /* h    */, 1 /* i    */, 1 /* j    */, 1 /* k    */,
-    1 /* l    */, 1 /* m    */, 1 /* n    */, 1 /* o    */,
-    1 /* p    */, 1 /* q    */, 1 /* r    */, 1 /* s    */,
-    1 /* t    */, 1 /* u    */, 1 /* v    */, 1 /* w    */,
-    1 /* x    */, 1 /* y    */, 1 /* z    */, 0 /* {    */,
-    0 /* |    */, 0 /* }    */, 1 /* ~    */, 0 /* DEL  */,
-    0 /* 0x80 */, 0 /* 0x81 */, 0 /* 0x82 */, 0 /* 0x83 */,
-    0 /* 0x84 */, 0 /* 0x85 */, 0 /* 0x86 */, 0 /* 0x87 */,
-    0 /* 0x88 */, 0 /* 0x89 */, 0 /* 0x8a */, 0 /* 0x8b */,
-    0 /* 0x8c */, 0 /* 0x8d */, 0 /* 0x8e */, 0 /* 0x8f */,
-    0 /* 0x90 */, 0 /* 0x91 */, 0 /* 0x92 */, 0 /* 0x93 */,
-    0 /* 0x94 */, 0 /* 0x95 */, 0 /* 0x96 */, 0 /* 0x97 */,
-    0 /* 0x98 */, 0 /* 0x99 */, 0 /* 0x9a */, 0 /* 0x9b */,
-    0 /* 0x9c */, 0 /* 0x9d */, 0 /* 0x9e */, 0 /* 0x9f */,
-    0 /* 0xa0 */, 0 /* 0xa1 */, 0 /* 0xa2 */, 0 /* 0xa3 */,
-    0 /* 0xa4 */, 0 /* 0xa5 */, 0 /* 0xa6 */, 0 /* 0xa7 */,
-    0 /* 0xa8 */, 0 /* 0xa9 */, 0 /* 0xaa */, 0 /* 0xab */,
-    0 /* 0xac */, 0 /* 0xad */, 0 /* 0xae */, 0 /* 0xaf */,
-    0 /* 0xb0 */, 0 /* 0xb1 */, 0 /* 0xb2 */, 0 /* 0xb3 */,
-    0 /* 0xb4 */, 0 /* 0xb5 */, 0 /* 0xb6 */, 0 /* 0xb7 */,
-    0 /* 0xb8 */, 0 /* 0xb9 */, 0 /* 0xba */, 0 /* 0xbb */,
-    0 /* 0xbc */, 0 /* 0xbd */, 0 /* 0xbe */, 0 /* 0xbf */,
-    0 /* 0xc0 */, 0 /* 0xc1 */, 0 /* 0xc2 */, 0 /* 0xc3 */,
-    0 /* 0xc4 */, 0 /* 0xc5 */, 0 /* 0xc6 */, 0 /* 0xc7 */,
-    0 /* 0xc8 */, 0 /* 0xc9 */, 0 /* 0xca */, 0 /* 0xcb */,
-    0 /* 0xcc */, 0 /* 0xcd */, 0 /* 0xce */, 0 /* 0xcf */,
-    0 /* 0xd0 */, 0 /* 0xd1 */, 0 /* 0xd2 */, 0 /* 0xd3 */,
-    0 /* 0xd4 */, 0 /* 0xd5 */, 0 /* 0xd6 */, 0 /* 0xd7 */,
-    0 /* 0xd8 */, 0 /* 0xd9 */, 0 /* 0xda */, 0 /* 0xdb */,
-    0 /* 0xdc */, 0 /* 0xdd */, 0 /* 0xde */, 0 /* 0xdf */,
-    0 /* 0xe0 */, 0 /* 0xe1 */, 0 /* 0xe2 */, 0 /* 0xe3 */,
-    0 /* 0xe4 */, 0 /* 0xe5 */, 0 /* 0xe6 */, 0 /* 0xe7 */,
-    0 /* 0xe8 */, 0 /* 0xe9 */, 0 /* 0xea */, 0 /* 0xeb */,
-    0 /* 0xec */, 0 /* 0xed */, 0 /* 0xee */, 0 /* 0xef */,
-    0 /* 0xf0 */, 0 /* 0xf1 */, 0 /* 0xf2 */, 0 /* 0xf3 */,
-    0 /* 0xf4 */, 0 /* 0xf5 */, 0 /* 0xf6 */, 0 /* 0xf7 */,
-    0 /* 0xf8 */, 0 /* 0xf9 */, 0 /* 0xfa */, 0 /* 0xfb */,
-    0 /* 0xfc */, 0 /* 0xfd */, 0 /* 0xfe */, 0 /* 0xff */
-};
-
-static int check_authority(const uint8_t *value, size_t len) {
-  const uint8_t *last;
-  for (last = value + len; value != last; ++value) {
-    if (!VALID_AUTHORITY_CHARS[*value]) {
-      return 0;
-    }
-  }
-  return 1;
-}
-
 static int check_scheme(const uint8_t *value, size_t len) {
   const uint8_t *last;
   if (len == 0) {
     return 0;
   }
 
   if (!(('A' <= *value && *value <= 'Z') || ('a' <= *value && *value <= 'z'))) {
     return 0;
   }
 
   last = value + len;
   ++value;
 
   for (; value != last; ++value) {
     if (!(('A' <= *value && *value <= 'Z') ||
           ('a' <= *value && *value <= 'z') ||
           ('0' <= *value && *value <= '9') || *value == '+' || *value == '-' ||
           *value == '.')) {
       return 0;
     }
@@ -423,41 +345,41 @@ int nghttp2_http_on_header(nghttp2_session *session, nghttp2_stream *stream,
     size_t i;
     if (nv->name->len > 0 && nv->name->base[0] == ':') {
       return NGHTTP2_ERR_HTTP_HEADER;
     }
     /* header field name must be lower-cased without exception */
     for (i = 0; i < nv->name->len; ++i) {
       uint8_t c = nv->name->base[i];
       if ('A' <= c && c <= 'Z') {
         return NGHTTP2_ERR_HTTP_HEADER;
       }
     }
     /* When ignoring regular headers, we set this flag so that we
        still enforce header field ordering rule for pseudo header
        fields. */
     stream->http_flags |= NGHTTP2_HTTP_FLAG_PSEUDO_HEADER_DISALLOWED;
     return NGHTTP2_ERR_IGN_HTTP_HEADER;
   }
 
   if (nv->token == NGHTTP2_TOKEN__AUTHORITY ||
       nv->token == NGHTTP2_TOKEN_HOST) {
-    rv = check_authority(nv->value->base, nv->value->len);
+    rv = nghttp2_check_authority(nv->value->base, nv->value->len);
   } else if (nv->token == NGHTTP2_TOKEN__SCHEME) {
     rv = check_scheme(nv->value->base, nv->value->len);
   } else {
     rv = nghttp2_check_header_value(nv->value->base, nv->value->len);
   }
 
   if (rv == 0) {
     assert(nv->name->len > 0);
     if (nv->name->base[0] == ':') {
       return NGHTTP2_ERR_HTTP_HEADER;
     }
     /* When ignoring regular headers, we set this flag so that we
        still enforce header field ordering rule for pseudo header
        fields. */
     stream->http_flags |= NGHTTP2_HTTP_FLAG_PSEUDO_HEADER_DISALLOWED;
     return NGHTTP2_ERR_IGN_HTTP_HEADER;
   }
 
   if (session->server || frame->hd.type == NGHTTP2_PUSH_PROMISE) {
     return http_request_on_header(stream, nv, trailer,
diff --git a/deps/nghttp2/lib/nghttp2_option.c b/deps/nghttp2/lib/nghttp2_option.c
index e53f22d367..34348e6606 100644
--- a/deps/nghttp2/lib/nghttp2_option.c
+++ b/deps/nghttp2/lib/nghttp2_option.c
@@ -104,20 +104,25 @@ void nghttp2_option_set_max_send_header_block_length(nghttp2_option *option,
                                                      size_t val) {
   option->opt_set_mask |= NGHTTP2_OPT_MAX_SEND_HEADER_BLOCK_LENGTH;
   option->max_send_header_block_length = val;
 }
 
 void nghttp2_option_set_max_deflate_dynamic_table_size(nghttp2_option *option,
                                                        size_t val) {
   option->opt_set_mask |= NGHTTP2_OPT_MAX_DEFLATE_DYNAMIC_TABLE_SIZE;
   option->max_deflate_dynamic_table_size = val;
 }
 
 void nghttp2_option_set_no_closed_streams(nghttp2_option *option, int val) {
   option->opt_set_mask |= NGHTTP2_OPT_NO_CLOSED_STREAMS;
   option->no_closed_streams = val;
 }
 
 void nghttp2_option_set_max_outbound_ack(nghttp2_option *option, size_t val) {
   option->opt_set_mask |= NGHTTP2_OPT_MAX_OUTBOUND_ACK;
   option->max_outbound_ack = val;
 }
+
+void nghttp2_option_set_max_settings(nghttp2_option *option, size_t val) {
+  option->opt_set_mask |= NGHTTP2_OPT_MAX_SETTINGS;
+  option->max_settings = val;
+}
diff --git a/deps/nghttp2/lib/nghttp2_option.h b/deps/nghttp2/lib/nghttp2_option.h
index 1f740aaa6e..939729fdcd 100644
--- a/deps/nghttp2/lib/nghttp2_option.h
+++ b/deps/nghttp2/lib/nghttp2_option.h
@@ -50,58 +50,63 @@ typedef enum {
    * SETTINGS_MAX_CONCURRENT_STREAMS in SETTINGS frame from remote
    * endpoint, SETTINGS_MAX_CONCURRENT_STREAMS is unlimited. This may
    * cause problem if local endpoint submits lots of requests
    * initially and sending them at once to the remote peer may lead to
    * the rejection of some requests. Specifying this option to the
    * sensible value, say 100, may avoid this kind of issue. This value
    * will be overwritten if the local endpoint receives
    * SETTINGS_MAX_CONCURRENT_STREAMS from the remote endpoint.
    */
   NGHTTP2_OPT_PEER_MAX_CONCURRENT_STREAMS = 1 << 1,
   NGHTTP2_OPT_NO_RECV_CLIENT_MAGIC = 1 << 2,
   NGHTTP2_OPT_NO_HTTP_MESSAGING = 1 << 3,
   NGHTTP2_OPT_MAX_RESERVED_REMOTE_STREAMS = 1 << 4,
   NGHTTP2_OPT_USER_RECV_EXT_TYPES = 1 << 5,
   NGHTTP2_OPT_NO_AUTO_PING_ACK = 1 << 6,
   NGHTTP2_OPT_BUILTIN_RECV_EXT_TYPES = 1 << 7,
   NGHTTP2_OPT_MAX_SEND_HEADER_BLOCK_LENGTH = 1 << 8,
   NGHTTP2_OPT_MAX_DEFLATE_DYNAMIC_TABLE_SIZE = 1 << 9,
   NGHTTP2_OPT_NO_CLOSED_STREAMS = 1 << 10,
   NGHTTP2_OPT_MAX_OUTBOUND_ACK = 1 << 11,
+  NGHTTP2_OPT_MAX_SETTINGS = 1 << 12,
 } nghttp2_option_flag;
 
 /**
  * Struct to store option values for nghttp2_session.
  */
 struct nghttp2_option {
   /**
    * NGHTTP2_OPT_MAX_SEND_HEADER_BLOCK_LENGTH
    */
   size_t max_send_header_block_length;
   /**
    * NGHTTP2_OPT_MAX_DEFLATE_DYNAMIC_TABLE_SIZE
    */
   size_t max_deflate_dynamic_table_size;
   /**
    * NGHTTP2_OPT_MAX_OUTBOUND_ACK
    */
   size_t max_outbound_ack;
+  /**
+   * NGHTTP2_OPT_MAX_SETTINGS
+   */
+  size_t max_settings;
   /**
    * Bitwise OR of nghttp2_option_flag to determine that which fields
    * are specified.
    */
   uint32_t opt_set_mask;
   /**
    * NGHTTP2_OPT_PEER_MAX_CONCURRENT_STREAMS
    */
   uint32_t peer_max_concurrent_streams;
   /**
    * NGHTTP2_OPT_MAX_RESERVED_REMOTE_STREAMS
    */
   uint32_t max_reserved_remote_streams;
   /**
    * NGHTTP2_OPT_BUILTIN_RECV_EXT_TYPES
    */
   uint32_t builtin_recv_ext_types;
   /**
    * NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE
    */
diff --git a/deps/nghttp2/lib/nghttp2_session.c b/deps/nghttp2/lib/nghttp2_session.c
index 3420cfa2f1..39f81f498c 100644
--- a/deps/nghttp2/lib/nghttp2_session.c
+++ b/deps/nghttp2/lib/nghttp2_session.c
@@ -441,40 +441,41 @@ static int session_new(nghttp2_session **session_ptr,
 
   (*session_ptr)->pending_local_max_concurrent_stream =
       NGHTTP2_DEFAULT_MAX_CONCURRENT_STREAMS;
   (*session_ptr)->pending_enable_push = 1;
 
   if (server) {
     (*session_ptr)->server = 1;
   }
 
   init_settings(&(*session_ptr)->remote_settings);
   init_settings(&(*session_ptr)->local_settings);
 
   (*session_ptr)->max_incoming_reserved_streams =
       NGHTTP2_MAX_INCOMING_RESERVED_STREAMS;
 
   /* Limit max outgoing concurrent streams to sensible value */
   (*session_ptr)->remote_settings.max_concurrent_streams = 100;
 
   (*session_ptr)->max_send_header_block_length = NGHTTP2_MAX_HEADERSLEN;
   (*session_ptr)->max_outbound_ack = NGHTTP2_DEFAULT_MAX_OBQ_FLOOD_ITEM;
+  (*session_ptr)->max_settings = NGHTTP2_DEFAULT_MAX_SETTINGS;
 
   if (option) {
     if ((option->opt_set_mask & NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE) &&
         option->no_auto_window_update) {
 
       (*session_ptr)->opt_flags |= NGHTTP2_OPTMASK_NO_AUTO_WINDOW_UPDATE;
     }
 
     if (option->opt_set_mask & NGHTTP2_OPT_PEER_MAX_CONCURRENT_STREAMS) {
 
       (*session_ptr)->remote_settings.max_concurrent_streams =
           option->peer_max_concurrent_streams;
     }
 
     if (option->opt_set_mask & NGHTTP2_OPT_MAX_RESERVED_REMOTE_STREAMS) {
 
       (*session_ptr)->max_incoming_reserved_streams =
           option->max_reserved_remote_streams;
     }
 
@@ -504,40 +505,45 @@ static int session_new(nghttp2_session **session_ptr,
       (*session_ptr)->opt_flags |= NGHTTP2_OPTMASK_NO_AUTO_PING_ACK;
     }
 
     if (option->opt_set_mask & NGHTTP2_OPT_MAX_SEND_HEADER_BLOCK_LENGTH) {
       (*session_ptr)->max_send_header_block_length =
           option->max_send_header_block_length;
     }
 
     if (option->opt_set_mask & NGHTTP2_OPT_MAX_DEFLATE_DYNAMIC_TABLE_SIZE) {
       max_deflate_dynamic_table_size = option->max_deflate_dynamic_table_size;
     }
 
     if ((option->opt_set_mask & NGHTTP2_OPT_NO_CLOSED_STREAMS) &&
         option->no_closed_streams) {
       (*session_ptr)->opt_flags |= NGHTTP2_OPTMASK_NO_CLOSED_STREAMS;
     }
 
     if (option->opt_set_mask & NGHTTP2_OPT_MAX_OUTBOUND_ACK) {
       (*session_ptr)->max_outbound_ack = option->max_outbound_ack;
     }
+
+    if ((option->opt_set_mask & NGHTTP2_OPT_MAX_SETTINGS) &&
+        option->max_settings) {
+      (*session_ptr)->max_settings = option->max_settings;
+    }
   }
 
   rv = nghttp2_hd_deflate_init2(&(*session_ptr)->hd_deflater,
                                 max_deflate_dynamic_table_size, mem);
   if (rv != 0) {
     goto fail_hd_deflater;
   }
   rv = nghttp2_hd_inflate_init(&(*session_ptr)->hd_inflater, mem);
   if (rv != 0) {
     goto fail_hd_inflater;
   }
   rv = nghttp2_map_init(&(*session_ptr)->streams, mem);
   if (rv != 0) {
     goto fail_map;
   }
 
   nbuffer = ((*session_ptr)->max_send_header_block_length +
              NGHTTP2_FRAMEBUF_CHUNKLEN - 1) /
             NGHTTP2_FRAMEBUF_CHUNKLEN;
 
@@ -2477,48 +2483,40 @@ static int session_close_stream_on_goaway(nghttp2_session *session,
       return rv;
     }
   }
 
   return 0;
 }
 
 static void reschedule_stream(nghttp2_stream *stream) {
   stream->last_writelen = stream->item->frame.hd.length;
 
   nghttp2_stream_reschedule(stream);
 }
 
 static int session_update_stream_consumed_size(nghttp2_session *session,
                                                nghttp2_stream *stream,
                                                size_t delta_size);
 
 static int session_update_connection_consumed_size(nghttp2_session *session,
                                                    size_t delta_size);
 
-static int session_update_recv_connection_window_size(nghttp2_session *session,
-                                                      size_t delta_size);
-
-static int session_update_recv_stream_window_size(nghttp2_session *session,
-                                                  nghttp2_stream *stream,
-                                                  size_t delta_size,
-                                                  int send_window_update);
-
 /*
  * Called after a frame is sent.  This function runs
  * on_frame_send_callback and handles stream closure upon END_STREAM
  * or RST_STREAM.  This function does not reset session->aob.  It is a
  * responsibility of session_after_frame_sent2.
  *
  * This function returns 0 if it succeeds, or one of the following
  * negative error codes:
  *
  * NGHTTP2_ERR_NOMEM
  *     Out of memory.
  * NGHTTP2_ERR_CALLBACK_FAILURE
  *     The callback function failed.
  */
 static int session_after_frame_sent1(nghttp2_session *session) {
   int rv;
   nghttp2_active_outbound_item *aob = &session->aob;
   nghttp2_outbound_item *item = aob->item;
   nghttp2_bufs *framebufs = &aob->framebufs;
   nghttp2_frame *frame;
@@ -2718,67 +2716,68 @@ static int session_after_frame_sent1(nghttp2_session *session) {
       }
 
       session->goaway_flags |= NGHTTP2_GOAWAY_SENT;
 
       rv = session_close_stream_on_goaway(session, frame->goaway.last_stream_id,
                                           1);
 
       if (nghttp2_is_fatal(rv)) {
         return rv;
       }
     }
 
     return 0;
   }
   case NGHTTP2_WINDOW_UPDATE:
     if (frame->hd.stream_id == 0) {
       session->window_update_queued = 0;
       if (session->opt_flags & NGHTTP2_OPTMASK_NO_AUTO_WINDOW_UPDATE) {
         rv = session_update_connection_consumed_size(session, 0);
       } else {
-        rv = session_update_recv_connection_window_size(session, 0);
+        rv = nghttp2_session_update_recv_connection_window_size(session, 0);
       }
 
       if (nghttp2_is_fatal(rv)) {
         return rv;
       }
 
       return 0;
     }
 
     stream = nghttp2_session_get_stream(session, frame->hd.stream_id);
     if (!stream) {
       return 0;
     }
 
     stream->window_update_queued = 0;
 
     /* We don't have to send WINDOW_UPDATE if END_STREAM from peer
        is seen. */
     if (stream->shut_flags & NGHTTP2_SHUT_RD) {
       return 0;
     }
 
     if (session->opt_flags & NGHTTP2_OPTMASK_NO_AUTO_WINDOW_UPDATE) {
       rv = session_update_stream_consumed_size(session, stream, 0);
     } else {
-      rv = session_update_recv_stream_window_size(session, stream, 0, 1);
+      rv =
+          nghttp2_session_update_recv_stream_window_size(session, stream, 0, 1);
     }
 
     if (nghttp2_is_fatal(rv)) {
       return rv;
     }
 
     return 0;
   default:
     return 0;
   }
 }
 
 /*
  * Called after a frame is sent and session_after_frame_sent1.  This
  * function is responsible to reset session->aob.
  *
  * This function returns 0 if it succeeds, or one of the following
  * negative error codes:
  *
  * NGHTTP2_ERR_NOMEM
@@ -3718,41 +3717,40 @@ static int inflate_header_block(nghttp2_session *session, nghttp2_frame *frame,
  */
 static int session_end_stream_headers_received(nghttp2_session *session,
                                                nghttp2_frame *frame,
                                                nghttp2_stream *stream) {
   int rv;
   if ((frame->hd.flags & NGHTTP2_FLAG_END_STREAM) == 0) {
     return 0;
   }
 
   nghttp2_stream_shutdown(stream, NGHTTP2_SHUT_RD);
   rv = nghttp2_session_close_stream_if_shut_rdwr(session, stream);
   if (nghttp2_is_fatal(rv)) {
     return rv;
   }
 
   return 0;
 }
 
 static int session_after_header_block_received(nghttp2_session *session) {
   int rv = 0;
-  int call_cb = 1;
   nghttp2_frame *frame = &session->iframe.frame;
   nghttp2_stream *stream;
 
   /* We don't call on_frame_recv_callback if stream has been closed
      already or being closed. */
   stream = nghttp2_session_get_stream(session, frame->hd.stream_id);
   if (!stream || stream->state == NGHTTP2_STREAM_CLOSING) {
     return 0;
   }
 
   if (session_enforce_http_messaging(session)) {
     if (frame->hd.type == NGHTTP2_PUSH_PROMISE) {
       nghttp2_stream *subject_stream;
 
       subject_stream = nghttp2_session_get_stream(
           session, frame->push_promise.promised_stream_id);
       if (subject_stream) {
         rv = nghttp2_http_on_request_headers(subject_stream, frame);
       }
     } else {
@@ -3772,55 +3770,59 @@ static int session_after_header_block_received(nghttp2_session *session) {
         } else {
           rv = nghttp2_http_on_trailer_headers(stream, frame);
         }
         break;
       default:
         assert(0);
       }
       if (rv == 0 && (frame->hd.flags & NGHTTP2_FLAG_END_STREAM)) {
         rv = nghttp2_http_on_remote_end_stream(stream);
       }
     }
     if (rv != 0) {
       int32_t stream_id;
 
       if (frame->hd.type == NGHTTP2_PUSH_PROMISE) {
         stream_id = frame->push_promise.promised_stream_id;
       } else {
         stream_id = frame->hd.stream_id;
       }
 
-      call_cb = 0;
-
       rv = session_handle_invalid_stream2(session, stream_id, frame,
                                           NGHTTP2_ERR_HTTP_MESSAGING);
       if (nghttp2_is_fatal(rv)) {
         return rv;
       }
+
+      if (frame->hd.type == NGHTTP2_HEADERS &&
+          (frame->hd.flags & NGHTTP2_FLAG_END_STREAM)) {
+        nghttp2_stream_shutdown(stream, NGHTTP2_SHUT_RD);
+        /* Don't call nghttp2_session_close_stream_if_shut_rdwr
+           because RST_STREAM has been submitted. */
+      }
+      return 0;
     }
   }
 
-  if (call_cb) {
-    rv = session_call_on_frame_received(session, frame);
-    if (nghttp2_is_fatal(rv)) {
-      return rv;
-    }
+  rv = session_call_on_frame_received(session, frame);
+  if (nghttp2_is_fatal(rv)) {
+    return rv;
   }
 
   if (frame->hd.type != NGHTTP2_HEADERS) {
     return 0;
   }
 
   return session_end_stream_headers_received(session, frame, stream);
 }
 
 int nghttp2_session_on_request_headers_received(nghttp2_session *session,
                                                 nghttp2_frame *frame) {
   int rv = 0;
   nghttp2_stream *stream;
   if (frame->hd.stream_id == 0) {
     return session_inflate_handle_invalid_connection(
         session, frame, NGHTTP2_ERR_PROTO, "request HEADERS: stream_id == 0");
   }
 
   /* If client receives idle stream from server, it is invalid
      regardless stream ID is even or odd.  This is because client is
@@ -4925,70 +4927,71 @@ static int session_process_extension_frame(nghttp2_session *session) {
   int rv;
   nghttp2_inbound_frame *iframe = &session->iframe;
   nghttp2_frame *frame = &iframe->frame;
 
   rv = session_call_unpack_extension_callback(session);
   if (nghttp2_is_fatal(rv)) {
     return rv;
   }
 
   /* This handles the case where rv == NGHTTP2_ERR_CANCEL as well */
   if (rv != 0) {
     return 0;
   }
 
   return session_call_on_frame_received(session, frame);
 }
 
 int nghttp2_session_on_data_received(nghttp2_session *session,
                                      nghttp2_frame *frame) {
   int rv = 0;
-  int call_cb = 1;
   nghttp2_stream *stream;
 
   /* We don't call on_frame_recv_callback if stream has been closed
      already or being closed. */
   stream = nghttp2_session_get_stream(session, frame->hd.stream_id);
   if (!stream || stream->state == NGHTTP2_STREAM_CLOSING) {
     /* This should be treated as stream error, but it results in lots
        of RST_STREAM. So just ignore frame against nonexistent stream
        for now. */
     return 0;
   }
 
   if (session_enforce_http_messaging(session) &&
       (frame->hd.flags & NGHTTP2_FLAG_END_STREAM)) {
     if (nghttp2_http_on_remote_end_stream(stream) != 0) {
-      call_cb = 0;
       rv = nghttp2_session_add_rst_stream(session, stream->stream_id,
                                           NGHTTP2_PROTOCOL_ERROR);
       if (nghttp2_is_fatal(rv)) {
         return rv;
       }
+
+      nghttp2_stream_shutdown(stream, NGHTTP2_SHUT_RD);
+      /* Don't call nghttp2_session_close_stream_if_shut_rdwr because
+         RST_STREAM has been submitted. */
+      return 0;
     }
   }
 
-  if (call_cb) {
-    rv = session_call_on_frame_received(session, frame);
-    if (nghttp2_is_fatal(rv)) {
-      return rv;
-    }
+  rv = session_call_on_frame_received(session, frame);
+  if (nghttp2_is_fatal(rv)) {
+    return rv;
   }
 
   if (frame->hd.flags & NGHTTP2_FLAG_END_STREAM) {
     nghttp2_stream_shutdown(stream, NGHTTP2_SHUT_RD);
     rv = nghttp2_session_close_stream_if_shut_rdwr(session, stream);
     if (nghttp2_is_fatal(rv)) {
       return rv;
     }
   }
   return 0;
 }
 
 /* For errors, this function only returns FATAL error. */
 static int session_process_data_frame(nghttp2_session *session) {
   int rv;
   nghttp2_frame *public_data_frame = &session->iframe.frame;
   rv = nghttp2_session_on_data_received(session, public_data_frame);
   if (nghttp2_is_fatal(rv)) {
     return rv;
   }
@@ -4998,98 +5001,74 @@ static int session_process_data_frame(nghttp2_session *session) {
 /*
  * Now we have SETTINGS synchronization, flow control error can be
  * detected strictly. If DATA frame is received with length > 0 and
  * current received window size + delta length is strictly larger than
  * local window size, it is subject to FLOW_CONTROL_ERROR, so return
  * -1. Note that local_window_size is calculated after SETTINGS ACK is
  * received from peer, so peer must honor this limit. If the resulting
  * recv_window_size is strictly larger than NGHTTP2_MAX_WINDOW_SIZE,
  * return -1 too.
  */
 static int adjust_recv_window_size(int32_t *recv_window_size_ptr, size_t delta,
                                    int32_t local_window_size) {
   if (*recv_window_size_ptr > local_window_size - (int32_t)delta ||
       *recv_window_size_ptr > NGHTTP2_MAX_WINDOW_SIZE - (int32_t)delta) {
     return -1;
   }
   *recv_window_size_ptr += (int32_t)delta;
   return 0;
 }
 
-/*
- * Accumulates received bytes |delta_size| for stream-level flow
- * control and decides whether to send WINDOW_UPDATE to that stream.
- * If NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE is set, WINDOW_UPDATE will not
- * be sent.
- *
- * This function returns 0 if it succeeds, or one of the following
- * negative error codes:
- *
- * NGHTTP2_ERR_NOMEM
- *     Out of memory.
- */
-static int session_update_recv_stream_window_size(nghttp2_session *session,
-                                                  nghttp2_stream *stream,
-                                                  size_t delta_size,
-                                                  int send_window_update) {
+int nghttp2_session_update_recv_stream_window_size(nghttp2_session *session,
+                                                   nghttp2_stream *stream,
+                                                   size_t delta_size,
+                                                   int send_window_update) {
   int rv;
   rv = adjust_recv_window_size(&stream->recv_window_size, delta_size,
                                stream->local_window_size);
   if (rv != 0) {
     return nghttp2_session_add_rst_stream(session, stream->stream_id,
                                           NGHTTP2_FLOW_CONTROL_ERROR);
   }
   /* We don't have to send WINDOW_UPDATE if the data received is the
      last chunk in the incoming stream. */
   /* We have to use local_settings here because it is the constraint
      the remote endpoint should honor. */
   if (send_window_update &&
       !(session->opt_flags & NGHTTP2_OPTMASK_NO_AUTO_WINDOW_UPDATE) &&
       stream->window_update_queued == 0 &&
       nghttp2_should_send_window_update(stream->local_window_size,
                                         stream->recv_window_size)) {
     rv = nghttp2_session_add_window_update(session, NGHTTP2_FLAG_NONE,
                                            stream->stream_id,
                                            stream->recv_window_size);
     if (rv != 0) {
       return rv;
     }
 
     stream->recv_window_size = 0;
   }
   return 0;
 }
 
-/*
- * Accumulates received bytes |delta_size| for connection-level flow
- * control and decides whether to send WINDOW_UPDATE to the
- * connection.  If NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE is set,
- * WINDOW_UPDATE will not be sent.
- *
- * This function returns 0 if it succeeds, or one of the following
- * negative error codes:
- *
- * NGHTTP2_ERR_NOMEM
- *     Out of memory.
- */
-static int session_update_recv_connection_window_size(nghttp2_session *session,
-                                                      size_t delta_size) {
+int nghttp2_session_update_recv_connection_window_size(nghttp2_session *session,
+                                                       size_t delta_size) {
   int rv;
   rv = adjust_recv_window_size(&session->recv_window_size, delta_size,
                                session->local_window_size);
   if (rv != 0) {
     return nghttp2_session_terminate_session(session,
                                              NGHTTP2_FLOW_CONTROL_ERROR);
   }
   if (!(session->opt_flags & NGHTTP2_OPTMASK_NO_AUTO_WINDOW_UPDATE) &&
       session->window_update_queued == 0 &&
       nghttp2_should_send_window_update(session->local_window_size,
                                         session->recv_window_size)) {
     /* Use stream ID 0 to update connection-level flow control
        window */
     rv = nghttp2_session_add_window_update(session, NGHTTP2_FLAG_NONE, 0,
                                            session->recv_window_size);
     if (rv != 0) {
       return rv;
     }
 
     session->recv_window_size = 0;
@@ -5392,42 +5371,42 @@ ssize_t nghttp2_session_mem_recv(nghttp2_session *session, const uint8_t *in,
 
   mem = &session->mem;
 
   /* We may have idle streams more than we expect (e.g.,
      nghttp2_session_change_stream_priority() or
      nghttp2_session_create_idle_stream()).  Adjust them here. */
   rv = nghttp2_session_adjust_idle_stream(session);
   if (nghttp2_is_fatal(rv)) {
     return rv;
   }
 
   if (!nghttp2_session_want_read(session)) {
     return (ssize_t)inlen;
   }
 
   for (;;) {
     switch (iframe->state) {
     case NGHTTP2_IB_READ_CLIENT_MAGIC:
       readlen = nghttp2_min(inlen, iframe->payloadleft);
 
-      if (memcmp(NGHTTP2_CLIENT_MAGIC + NGHTTP2_CLIENT_MAGIC_LEN -
-                     iframe->payloadleft,
+      if (memcmp(&NGHTTP2_CLIENT_MAGIC[NGHTTP2_CLIENT_MAGIC_LEN -
+                                       iframe->payloadleft],
                  in, readlen) != 0) {
         return NGHTTP2_ERR_BAD_CLIENT_MAGIC;
       }
 
       iframe->payloadleft -= readlen;
       in += readlen;
 
       if (iframe->payloadleft == 0) {
         session_inbound_frame_reset(session);
         iframe->state = NGHTTP2_IB_READ_FIRST_SETTINGS;
       }
 
       break;
     case NGHTTP2_IB_READ_FIRST_SETTINGS:
       DEBUGF("recv: [IB_READ_FIRST_SETTINGS]\n");
 
       readlen = inbound_frame_buf_read(iframe, in, last);
       in += readlen;
 
       if (nghttp2_buf_mark_avail(&iframe->sbuf)) {
@@ -5657,50 +5636,66 @@ ssize_t nghttp2_session_mem_recv(nghttp2_session *session, const uint8_t *in,
         }
 
         iframe->state = NGHTTP2_IB_READ_NBYTE;
 
         inbound_frame_set_mark(iframe, 4);
 
         break;
       case NGHTTP2_SETTINGS:
         DEBUGF("recv: SETTINGS\n");
 
         iframe->frame.hd.flags &= NGHTTP2_FLAG_ACK;
 
         if ((iframe->frame.hd.length % NGHTTP2_FRAME_SETTINGS_ENTRY_LENGTH) ||
             ((iframe->frame.hd.flags & NGHTTP2_FLAG_ACK) &&
              iframe->payloadleft > 0)) {
           busy = 1;
           iframe->state = NGHTTP2_IB_FRAME_SIZE_ERROR;
           break;
         }
 
+        /* Check the settings flood counter early to be safe */
+        if (session->obq_flood_counter_ >= session->max_outbound_ack &&
+            !(iframe->frame.hd.flags & NGHTTP2_FLAG_ACK)) {
+          return NGHTTP2_ERR_FLOODED;
+        }
+
         iframe->state = NGHTTP2_IB_READ_SETTINGS;
 
         if (iframe->payloadleft) {
           nghttp2_settings_entry *min_header_table_size_entry;
 
           /* We allocate iv with additional one entry, to store the
              minimum header table size. */
           iframe->max_niv =
               iframe->frame.hd.length / NGHTTP2_FRAME_SETTINGS_ENTRY_LENGTH + 1;
 
+          if (iframe->max_niv - 1 > session->max_settings) {
+            rv = nghttp2_session_terminate_session_with_reason(
+                session, NGHTTP2_ENHANCE_YOUR_CALM,
+                "SETTINGS: too many setting entries");
+            if (nghttp2_is_fatal(rv)) {
+              return rv;
+            }
+            return (ssize_t)inlen;
+          }
+
           iframe->iv = nghttp2_mem_malloc(mem, sizeof(nghttp2_settings_entry) *
                                                    iframe->max_niv);
 
           if (!iframe->iv) {
             return NGHTTP2_ERR_NOMEM;
           }
 
           min_header_table_size_entry = &iframe->iv[iframe->max_niv - 1];
           min_header_table_size_entry->settings_id =
               NGHTTP2_SETTINGS_HEADER_TABLE_SIZE;
           min_header_table_size_entry->value = UINT32_MAX;
 
           inbound_frame_set_mark(iframe, NGHTTP2_FRAME_SETTINGS_ENTRY_LENGTH);
           break;
         }
 
         busy = 1;
 
         inbound_frame_set_mark(iframe, 0);
 
@@ -6433,64 +6428,64 @@ ssize_t nghttp2_session_mem_recv(nghttp2_session *session, const uint8_t *in,
       } else {
         iframe->state = NGHTTP2_IB_IGN_HEADER_BLOCK;
       }
 
       break;
     case NGHTTP2_IB_READ_PAD_DATA:
       DEBUGF("recv: [IB_READ_PAD_DATA]\n");
 
       readlen = inbound_frame_buf_read(iframe, in, last);
       in += readlen;
       iframe->payloadleft -= readlen;
 
       DEBUGF("recv: readlen=%zu, payloadleft=%zu, left=%zu\n", readlen,
              iframe->payloadleft, nghttp2_buf_mark_avail(&iframe->sbuf));
 
       if (nghttp2_buf_mark_avail(&iframe->sbuf)) {
         return in - first;
       }
 
       /* Pad Length field is subject to flow control */
-      rv = session_update_recv_connection_window_size(session, readlen);
+      rv = nghttp2_session_update_recv_connection_window_size(session, readlen);
       if (nghttp2_is_fatal(rv)) {
         return rv;
       }
 
       if (iframe->state == NGHTTP2_IB_IGN_ALL) {
         return (ssize_t)inlen;
       }
 
       /* Pad Length field is consumed immediately */
       rv =
           nghttp2_session_consume(session, iframe->frame.hd.stream_id, readlen);
 
       if (nghttp2_is_fatal(rv)) {
         return rv;
       }
 
       if (iframe->state == NGHTTP2_IB_IGN_ALL) {
         return (ssize_t)inlen;
       }
 
       stream = nghttp2_session_get_stream(session, iframe->frame.hd.stream_id);
       if (stream) {
-        rv = session_update_recv_stream_window_size(
+        rv = nghttp2_session_update_recv_stream_window_size(
             session, stream, readlen,
             iframe->payloadleft ||
                 (iframe->frame.hd.flags & NGHTTP2_FLAG_END_STREAM) == 0);
         if (nghttp2_is_fatal(rv)) {
           return rv;
         }
       }
 
       busy = 1;
 
       padlen = inbound_frame_compute_pad(iframe);
       if (padlen < 0) {
         rv = nghttp2_session_terminate_session_with_reason(
             session, NGHTTP2_PROTOCOL_ERROR, "DATA: invalid padding");
         if (nghttp2_is_fatal(rv)) {
           return rv;
         }
         return (ssize_t)inlen;
       }
 
@@ -6503,50 +6498,51 @@ ssize_t nghttp2_session_mem_recv(nghttp2_session *session, const uint8_t *in,
       stream = nghttp2_session_get_stream(session, iframe->frame.hd.stream_id);
 
       if (!stream) {
         busy = 1;
         iframe->state = NGHTTP2_IB_IGN_DATA;
         break;
       }
 
       DEBUGF("recv: [IB_READ_DATA]\n");
 
       readlen = inbound_frame_payload_readlen(iframe, in, last);
       iframe->payloadleft -= readlen;
       in += readlen;
 
       DEBUGF("recv: readlen=%zu, payloadleft=%zu\n", readlen,
              iframe->payloadleft);
 
       if (readlen > 0) {
         ssize_t data_readlen;
 
-        rv = session_update_recv_connection_window_size(session, readlen);
+        rv = nghttp2_session_update_recv_connection_window_size(session,
+                                                                readlen);
         if (nghttp2_is_fatal(rv)) {
           return rv;
         }
 
         if (iframe->state == NGHTTP2_IB_IGN_ALL) {
           return (ssize_t)inlen;
         }
 
-        rv = session_update_recv_stream_window_size(
+        rv = nghttp2_session_update_recv_stream_window_size(
             session, stream, readlen,
             iframe->payloadleft ||
                 (iframe->frame.hd.flags & NGHTTP2_FLAG_END_STREAM) == 0);
         if (nghttp2_is_fatal(rv)) {
           return rv;
         }
 
         data_readlen = inbound_frame_effective_readlen(
             iframe, iframe->payloadleft, readlen);
 
         if (data_readlen == -1) {
           /* everything is padding */
           data_readlen = 0;
         }
 
         padlen = (ssize_t)readlen - data_readlen;
 
         if (padlen > 0) {
           /* Padding is considered as "consumed" immediately */
           rv = nghttp2_session_consume(session, iframe->frame.hd.stream_id,
@@ -6613,41 +6609,42 @@ ssize_t nghttp2_session_mem_recv(nghttp2_session *session, const uint8_t *in,
       if (nghttp2_is_fatal(rv)) {
         return rv;
       }
 
       session_inbound_frame_reset(session);
 
       break;
     case NGHTTP2_IB_IGN_DATA:
       DEBUGF("recv: [IB_IGN_DATA]\n");
 
       readlen = inbound_frame_payload_readlen(iframe, in, last);
       iframe->payloadleft -= readlen;
       in += readlen;
 
       DEBUGF("recv: readlen=%zu, payloadleft=%zu\n", readlen,
              iframe->payloadleft);
 
       if (readlen > 0) {
         /* Update connection-level flow control window for ignored
            DATA frame too */
-        rv = session_update_recv_connection_window_size(session, readlen);
+        rv = nghttp2_session_update_recv_connection_window_size(session,
+                                                                readlen);
         if (nghttp2_is_fatal(rv)) {
           return rv;
         }
 
         if (iframe->state == NGHTTP2_IB_IGN_ALL) {
           return (ssize_t)inlen;
         }
 
         if (session->opt_flags & NGHTTP2_OPTMASK_NO_AUTO_WINDOW_UPDATE) {
 
           /* Ignored DATA is considered as "consumed" immediately. */
           rv = session_update_connection_consumed_size(session, readlen);
 
           if (nghttp2_is_fatal(rv)) {
             return rv;
           }
 
           if (iframe->state == NGHTTP2_IB_IGN_ALL) {
             return (ssize_t)inlen;
           }
@@ -7433,40 +7430,45 @@ static int nghttp2_session_upgrade_internal(nghttp2_session *session,
                                             const uint8_t *settings_payload,
                                             size_t settings_payloadlen,
                                             void *stream_user_data) {
   nghttp2_stream *stream;
   nghttp2_frame frame;
   nghttp2_settings_entry *iv;
   size_t niv;
   int rv;
   nghttp2_priority_spec pri_spec;
   nghttp2_mem *mem;
 
   mem = &session->mem;
 
   if ((!session->server && session->next_stream_id != 1) ||
       (session->server && session->last_recv_stream_id >= 1)) {
     return NGHTTP2_ERR_PROTO;
   }
   if (settings_payloadlen % NGHTTP2_FRAME_SETTINGS_ENTRY_LENGTH) {
     return NGHTTP2_ERR_INVALID_ARGUMENT;
   }
+  /* SETTINGS frame contains too many settings */
+  if (settings_payloadlen / NGHTTP2_FRAME_SETTINGS_ENTRY_LENGTH
+        > session->max_settings) {
+    return NGHTTP2_ERR_TOO_MANY_SETTINGS;
+  }
   rv = nghttp2_frame_unpack_settings_payload2(&iv, &niv, settings_payload,
                                               settings_payloadlen, mem);
   if (rv != 0) {
     return rv;
   }
 
   if (session->server) {
     nghttp2_frame_hd_init(&frame.hd, settings_payloadlen, NGHTTP2_SETTINGS,
                           NGHTTP2_FLAG_NONE, 0);
     frame.settings.iv = iv;
     frame.settings.niv = niv;
     rv = nghttp2_session_on_settings_received(session, &frame, 1 /* No ACK */);
   } else {
     rv = nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, iv, niv);
   }
   nghttp2_mem_free(mem, iv);
   if (rv != 0) {
     return rv;
   }
 
diff --git a/deps/nghttp2/lib/nghttp2_session.h b/deps/nghttp2/lib/nghttp2_session.h
index 90ead9c039..07bfbb6c90 100644
--- a/deps/nghttp2/lib/nghttp2_session.h
+++ b/deps/nghttp2/lib/nghttp2_session.h
@@ -250,40 +250,42 @@ struct nghttp2_session {
      closed streams can be accessed through single linked list
      |closed_stream_head|.  The current implementation only keeps
      incoming streams and session is initialized as server. */
   size_t num_closed_streams;
   /* The number of idle streams kept in |streams| hash.  The idle
      streams can be accessed through doubly linked list
      |idle_stream_head|.  The current implementation only keeps idle
      streams if session is initialized as server. */
   size_t num_idle_streams;
   /* The number of bytes allocated for nvbuf */
   size_t nvbuflen;
   /* Counter for detecting flooding in outbound queue.  If it exceeds
      max_outbound_ack, session will be closed. */
   size_t obq_flood_counter_;
   /* The maximum number of outgoing SETTINGS ACK and PING ACK in
      outbound queue. */
   size_t max_outbound_ack;
   /* The maximum length of header block to send.  Calculated by the
      same way as nghttp2_hd_deflate_bound() does. */
   size_t max_send_header_block_length;
+  /* The maximum number of settings accepted per SETTINGS frame. */
+  size_t max_settings;
   /* Next Stream ID. Made unsigned int to detect >= (1 << 31). */
   uint32_t next_stream_id;
   /* The last stream ID this session initiated.  For client session,
      this is the last stream ID it has sent.  For server session, it
      is the last promised stream ID sent in PUSH_PROMISE. */
   int32_t last_sent_stream_id;
   /* The largest stream ID received so far */
   int32_t last_recv_stream_id;
   /* The largest stream ID which has been processed in some way. This
      value will be used as last-stream-id when sending GOAWAY
      frame. */
   int32_t last_proc_stream_id;
   /* Counter of unique ID of PING. Wraps when it exceeds
      NGHTTP2_MAX_UNIQUE_ID */
   uint32_t next_unique_id;
   /* This is the last-stream-ID we have sent in GOAWAY */
   int32_t local_last_stream_id;
   /* This is the value in GOAWAY frame received from remote endpoint. */
   int32_t remote_last_stream_id;
   /* Current sender window size. This value is computed against the
@@ -881,21 +883,53 @@ int nghttp2_session_update_local_settings(nghttp2_session *session,
 int nghttp2_session_reprioritize_stream(nghttp2_session *session,
                                         nghttp2_stream *stream,
                                         const nghttp2_priority_spec *pri_spec);
 
 /*
  * Terminates current |session| with the |error_code|.  The |reason|
  * is NULL-terminated debug string.
  *
  * This function returns 0 if it succeeds, or one of the following
  * negative error codes:
  *
  * NGHTTP2_ERR_NOMEM
  *     Out of memory.
  * NGHTTP2_ERR_INVALID_ARGUMENT
  *     The |reason| is too long.
  */
 int nghttp2_session_terminate_session_with_reason(nghttp2_session *session,
                                                   uint32_t error_code,
                                                   const char *reason);
 
+/*
+ * Accumulates received bytes |delta_size| for connection-level flow
+ * control and decides whether to send WINDOW_UPDATE to the
+ * connection.  If NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE is set,
+ * WINDOW_UPDATE will not be sent.
+ *
+ * This function returns 0 if it succeeds, or one of the following
+ * negative error codes:
+ *
+ * NGHTTP2_ERR_NOMEM
+ *     Out of memory.
+ */
+int nghttp2_session_update_recv_connection_window_size(nghttp2_session *session,
+                                                       size_t delta_size);
+
+/*
+ * Accumulates received bytes |delta_size| for stream-level flow
+ * control and decides whether to send WINDOW_UPDATE to that stream.
+ * If NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE is set, WINDOW_UPDATE will not
+ * be sent.
+ *
+ * This function returns 0 if it succeeds, or one of the following
+ * negative error codes:
+ *
+ * NGHTTP2_ERR_NOMEM
+ *     Out of memory.
+ */
+int nghttp2_session_update_recv_stream_window_size(nghttp2_session *session,
+                                                   nghttp2_stream *stream,
+                                                   size_t delta_size,
+                                                   int send_window_update);
+
 #endif /* NGHTTP2_SESSION_H */
diff --git a/deps/nghttp2/lib/nghttp2_submit.c b/deps/nghttp2/lib/nghttp2_submit.c
index f604eff5c9..744a49cf60 100644
--- a/deps/nghttp2/lib/nghttp2_submit.c
+++ b/deps/nghttp2/lib/nghttp2_submit.c
@@ -433,71 +433,81 @@ int nghttp2_session_set_local_window_size(nghttp2_session *session,
   if (stream_id == 0) {
     window_size_increment = window_size - session->local_window_size;
 
     if (window_size_increment == 0) {
       return 0;
     }
 
     if (window_size_increment < 0) {
       return nghttp2_adjust_local_window_size(
           &session->local_window_size, &session->recv_window_size,
           &session->recv_reduction, &window_size_increment);
     }
 
     rv = nghttp2_increase_local_window_size(
         &session->local_window_size, &session->recv_window_size,
         &session->recv_reduction, &window_size_increment);
 
     if (rv != 0) {
       return rv;
     }
+
+    if (window_size_increment > 0) {
+      return nghttp2_session_add_window_update(session, 0, stream_id,
+                                               window_size_increment);
+    }
+
+    return nghttp2_session_update_recv_connection_window_size(session, 0);
   } else {
     stream = nghttp2_session_get_stream(session, stream_id);
 
     if (stream == NULL) {
       return 0;
     }
 
     window_size_increment = window_size - stream->local_window_size;
 
     if (window_size_increment == 0) {
       return 0;
     }
 
     if (window_size_increment < 0) {
       return nghttp2_adjust_local_window_size(
           &stream->local_window_size, &stream->recv_window_size,
           &stream->recv_reduction, &window_size_increment);
     }
 
     rv = nghttp2_increase_local_window_size(
         &stream->local_window_size, &stream->recv_window_size,
         &stream->recv_reduction, &window_size_increment);
 
     if (rv != 0) {
       return rv;
     }
-  }
 
-  if (window_size_increment > 0) {
-    return nghttp2_session_add_window_update(session, 0, stream_id,
-                                             window_size_increment);
+    if (window_size_increment > 0) {
+      return nghttp2_session_add_window_update(session, 0, stream_id,
+                                               window_size_increment);
+    }
+
+    return nghttp2_session_update_recv_stream_window_size(session, stream, 0,
+                                                          1);
   }
 
   return 0;
 }
 
 int nghttp2_submit_altsvc(nghttp2_session *session, uint8_t flags,
                           int32_t stream_id, const uint8_t *origin,
                           size_t origin_len, const uint8_t *field_value,
                           size_t field_value_len) {
   nghttp2_mem *mem;
   uint8_t *buf, *p;
   uint8_t *origin_copy;
   uint8_t *field_value_copy;
   nghttp2_outbound_item *item;
   nghttp2_frame *frame;
   nghttp2_ext_altsvc *altsvc;
   int rv;
   (void)flags;
 
   mem = &session->mem;