widl: Update to Wine 6.1.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
diff --git a/mingw-w64-tools/widl/VERSION b/mingw-w64-tools/widl/VERSION
index 7bf8bb6..255f35b 100644
--- a/mingw-w64-tools/widl/VERSION
+++ b/mingw-w64-tools/widl/VERSION
@@ -1 +1 @@
-WIDL version 6.0-rc3
+WIDL version 6.1
diff --git a/mingw-w64-tools/widl/configure b/mingw-w64-tools/widl/configure
index 5e3e8ac..4697774 100755
--- a/mingw-w64-tools/widl/configure
+++ b/mingw-w64-tools/widl/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for widl 6.0-rc3.
+# Generated by GNU Autoconf 2.69 for widl 6.1.
 #
 # Report bugs to <mingw-w64-public@lists.sourceforge.net>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='widl'
 PACKAGE_TARNAME='widl'
-PACKAGE_VERSION='6.0-rc3'
-PACKAGE_STRING='widl 6.0-rc3'
+PACKAGE_VERSION='6.1'
+PACKAGE_STRING='widl 6.1'
 PACKAGE_BUGREPORT='mingw-w64-public@lists.sourceforge.net'
 PACKAGE_URL=''
 
@@ -1296,7 +1296,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures widl 6.0-rc3 to adapt to many kinds of systems.
+\`configure' configures widl 6.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1368,7 +1368,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of widl 6.0-rc3:";;
+     short | recursive ) echo "Configuration of widl 6.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1470,7 +1470,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-widl configure 6.0-rc3
+widl configure 6.1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2023,7 +2023,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by widl $as_me 6.0-rc3, which was
+It was created by widl $as_me 6.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2997,7 +2997,7 @@
 
 # Define the identity of the package.
  PACKAGE='widl'
- VERSION='6.0-rc3'
+ VERSION='6.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -5461,7 +5461,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by widl $as_me 6.0-rc3, which was
+This file was extended by widl $as_me 6.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -5527,7 +5527,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-widl config.status 6.0-rc3
+widl config.status 6.1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/mingw-w64-tools/widl/include/winbase.h b/mingw-w64-tools/widl/include/winbase.h
index dc8aa08..0262e50 100644
--- a/mingw-w64-tools/widl/include/winbase.h
+++ b/mingw-w64-tools/widl/include/winbase.h
@@ -2919,138 +2919,6 @@
 extern WCHAR * CDECL wine_get_dos_file_name( LPCSTR str );
 
 
-/* Interlocked functions */
-
-#ifdef _MSC_VER
-
-#pragma intrinsic(_InterlockedCompareExchange)
-#pragma intrinsic(_InterlockedCompareExchange64)
-#pragma intrinsic(_InterlockedExchange)
-#pragma intrinsic(_InterlockedExchangeAdd)
-#pragma intrinsic(_InterlockedIncrement)
-#pragma intrinsic(_InterlockedDecrement)
-
-long      _InterlockedCompareExchange(long volatile*,long,long);
-long long _InterlockedCompareExchange64(long long volatile*,long long,long long);
-long      _InterlockedDecrement(long volatile*);
-long      _InterlockedExchange(long volatile*,long);
-long      _InterlockedExchangeAdd(long volatile*,long);
-long      _InterlockedIncrement(long volatile*);
-
-static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
-{
-    return _InterlockedCompareExchange( (long volatile *)dest, xchg, compare );
-}
-
-static FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )
-{
-    return _InterlockedCompareExchange64( (long long volatile *)dest, compare, xchg );
-}
-
-static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
-{
-    return _InterlockedExchange( (long volatile *)dest, val );
-}
-
-static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
-{
-    return _InterlockedExchangeAdd( (long volatile *)dest, incr );
-}
-
-static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
-{
-    return _InterlockedIncrement( (long volatile *)dest );
-}
-
-static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
-{
-    return _InterlockedDecrement( (long volatile *)dest );
-}
-
-#ifndef __i386__
-
-#pragma intrinsic(_InterlockedCompareExchangePointer)
-#pragma intrinsic(_InterlockedExchangePointer)
-
-#define InterlockedCompareExchangePointer    _InterlockedCompareExchangePointer
-#define InterlockedExchangePointer           _InterlockedExchangePointer
-
-void *InterlockedCompareExchangePointer(void *volatile*,void*,void*);
-void *InterlockedExchangePointer(void *volatile*,void*);
-
-#else
-
-static FORCEINLINE void *WINAPI InterlockedCompareExchangePointer( void *volatile *dest, void *xchg, void *compare )
-{
-    return (void *)_InterlockedCompareExchange( (long volatile*)dest, (long)xchg, (long)compare );
-}
-
-static FORCEINLINE void *WINAPI InterlockedExchangePointer( void *volatile *dest, void *val )
-{
-    return (void *)_InterlockedExchange( (long volatile*)dest, (long)val );
-}
-
-#endif
-
-#elif defined(__GNUC__)
-
-static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
-{
-    return __sync_val_compare_and_swap( dest, compare, xchg );
-}
-
-static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
-{
-    return __sync_val_compare_and_swap( dest, compare, xchg );
-}
-
-static FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )
-{
-    return __sync_val_compare_and_swap( dest, compare, xchg );
-}
-
-static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
-{
-    LONG ret;
-#if defined(__i386__) || defined(__x86_64__)
-    __asm__ __volatile__( "lock; xchgl %0,(%1)"
-                          : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
-#else
-    do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));
-#endif
-    return ret;
-}
-
-static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
-{
-    return __sync_fetch_and_add( dest, incr );
-}
-
-static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
-{
-    return __sync_add_and_fetch( dest, 1 );
-}
-
-static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
-{
-    return __sync_add_and_fetch( dest, -1 );
-}
-
-static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
-{
-    PVOID ret;
-#ifdef __x86_64__
-    __asm__ __volatile__( "lock; xchgq %0,(%1)" : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
-#elif defined(__i386__)
-    __asm__ __volatile__( "lock; xchgl %0,(%1)" : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
-#else
-    do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));
-#endif
-    return ret;
-}
-
-#endif  /* __GNUC__ */
-
 #ifdef __WINESRC__
 
 static FORCEINLINE HANDLE WINAPI GetCurrentProcess(void)
diff --git a/mingw-w64-tools/widl/include/windef.h b/mingw-w64-tools/widl/include/windef.h
index 5351afe..ac2ec61 100644
--- a/mingw-w64-tools/widl/include/windef.h
+++ b/mingw-w64-tools/widl/include/windef.h
@@ -72,7 +72,7 @@
 #  else
 #   define __stdcall __attribute__((ms_abi))
 #  endif
-# elif defined(__arm__) && defined (__GNUC__) && !defined(__SOFTFP__)
+# elif defined(__arm__) && defined (__GNUC__) && !defined(__SOFTFP__) && !defined(_WIN32)
 #   define __stdcall __attribute__((pcs("aapcs-vfp")))
 # elif defined(__aarch64__) && defined (__GNUC__) && __has_attribute(ms_abi)
 #  define __stdcall __attribute__((ms_abi))
@@ -120,7 +120,7 @@
 # endif
 #endif
 
-#if defined(__arm__) && defined (__GNUC__) && !defined(__SOFTFP__)
+#if defined(__arm__) && defined (__GNUC__) && !defined(__SOFTFP__) && !defined(_WIN32)
 # define WINAPIV __attribute__((pcs("aapcs")))
 #else
 # define WINAPIV __cdecl
diff --git a/mingw-w64-tools/widl/include/winnls.h b/mingw-w64-tools/widl/include/winnls.h
index e90b6f5..07a31cf 100644
--- a/mingw-w64-tools/widl/include/winnls.h
+++ b/mingw-w64-tools/widl/include/winnls.h
@@ -394,17 +394,18 @@
 /* String mapping flags */
 #define LCMAP_LOWERCASE  0x00000100	/* Make lower-case */
 #define LCMAP_UPPERCASE  0x00000200	/* Make upper-case */
+#define LCMAP_TITLECASE  0x00000300	/* Make title-case */
 #define LCMAP_SORTKEY    0x00000400	/* Create a sort key */
 #define LCMAP_BYTEREV    0x00000800	/* Reverse the result */
-
+#define LCMAP_HASH       0x00040000
 #define LCMAP_HIRAGANA   0x00100000	/* Transform Japanese katakana into hiragana */
 #define LCMAP_KATAKANA   0x00200000	/* Transform Japanese hiragana into katakana */
 #define LCMAP_HALFWIDTH  0x00400000	/* Use single byte chars in output */
 #define LCMAP_FULLWIDTH  0x00800000	/* Use double byte chars in output */
-
 #define LCMAP_LINGUISTIC_CASING   0x01000000 /* Change case by using language context */
 #define LCMAP_SIMPLIFIED_CHINESE  0x02000000 /* Transform Chinese traditional into simplified */
 #define LCMAP_TRADITIONAL_CHINESE 0x04000000 /* Transform Chinese simplified into traditional */
+#define LCMAP_SORTHANDLE 0x20000000
 
 /* Date and time formatting flags */
 #define DATE_SHORTDATE          0x01  /* Short date format */
diff --git a/mingw-w64-tools/widl/include/winnt.h b/mingw-w64-tools/widl/include/winnt.h
index 83fcc67..5b3efe6 100644
--- a/mingw-w64-tools/widl/include/winnt.h
+++ b/mingw-w64-tools/widl/include/winnt.h
@@ -2801,7 +2801,7 @@
 {
     return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB, Self));
 }
-#elif defined(__arm__) && defined(__MINGW32__)
+#elif defined(__arm__) && defined(__GNUC__)
 static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
 {
     struct _TEB *teb;
@@ -3135,13 +3135,16 @@
 #define	IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION	16
 
 /* DLL Characteristics */
+#define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA       0x0020
 #define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE          0x0040
 #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY       0x0080
 #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT             0x0100
 #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION          0x0200
 #define IMAGE_DLLCHARACTERISTICS_NO_SEH                0x0400
 #define IMAGE_DLLCHARACTERISTICS_NO_BIND               0x0800
+#define IMAGE_DLLCHARACTERISTICS_APPCONTAINER          0x1000
 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER            0x2000
+#define IMAGE_DLLCHARACTERISTICS_GUARD_CF              0x4000
 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
 
 typedef struct _IMAGE_FILE_HEADER {
@@ -6892,18 +6895,189 @@
 
 #endif
 
+/* Interlocked functions */
+
+#ifdef _MSC_VER
+
+#pragma intrinsic(_InterlockedAnd)
+#pragma intrinsic(_InterlockedCompareExchange)
+#pragma intrinsic(_InterlockedCompareExchange64)
 #ifdef _WIN64
-
-#if defined(_MSC_VER)
-
-#define InterlockedCompareExchange128 _InterlockedCompareExchange128
-unsigned char _InterlockedCompareExchange128(volatile __int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare);
 #pragma intrinsic(_InterlockedCompareExchange128)
+#endif
+#pragma intrinsic(_InterlockedExchange)
+#pragma intrinsic(_InterlockedExchangeAdd)
+#pragma intrinsic(_InterlockedIncrement)
+#pragma intrinsic(_InterlockedIncrement16)
+#pragma intrinsic(_InterlockedDecrement)
+#pragma intrinsic(_InterlockedDecrement16)
+#pragma intrinsic(_InterlockedOr)
+
+long      _InterlockedAnd(long volatile *,long);
+long      _InterlockedCompareExchange(long volatile*,long,long);
+long long _InterlockedCompareExchange64(long long volatile*,long long,long long);
+#ifdef _WIN64
+unsigned char _InterlockedCompareExchange128(volatile __int64 *, __int64, __int64, __int64 *);
+#endif
+long      _InterlockedDecrement(long volatile*);
+short     _InterlockedDecrement16(short volatile*);
+long      _InterlockedExchange(long volatile*,long);
+long      _InterlockedExchangeAdd(long volatile*,long);
+long      _InterlockedIncrement(long volatile*);
+short     _InterlockedIncrement16(short volatile*);
+long      _InterlockedOr(long volatile *,long);
+
+static FORCEINLINE LONG WINAPI InterlockedAnd( LONG volatile *dest, LONG val )
+{
+    return _InterlockedAnd( (long volatile *)dest, val );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
+{
+    return _InterlockedCompareExchange( (long volatile *)dest, xchg, compare );
+}
+
+static FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )
+{
+    return _InterlockedCompareExchange64( (long long volatile *)dest, compare, xchg );
+}
+
+#ifdef _WIN64
+static FORCEINLINE unsigned char WINAPI InterlockedCompareExchange128( volatile __int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare )
+{
+    return _InterlockedCompareExchange128( dest, xchg_high, xchg_low, compare );
+}
+#endif
+
+static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
+{
+    return _InterlockedExchange( (long volatile *)dest, val );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
+{
+    return _InterlockedExchangeAdd( (long volatile *)dest, incr );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
+{
+    return _InterlockedIncrement( (long volatile *)dest );
+}
+
+static FORCEINLINE short WINAPI InterlockedIncrement16( short volatile *dest )
+{
+    return _InterlockedIncrement16( dest );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
+{
+    return _InterlockedDecrement( (long volatile *)dest );
+}
+
+static FORCEINLINE short WINAPI InterlockedDecrement16( short volatile *dest )
+{
+    return _InterlockedDecrement16( dest );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedOr( LONG volatile *dest, LONG val )
+{
+    return _InterlockedOr( (long volatile *)dest, val );
+}
+
+#ifndef __i386__
+
+#pragma intrinsic(_InterlockedCompareExchangePointer)
+#pragma intrinsic(_InterlockedExchangePointer)
+
+#define InterlockedCompareExchangePointer    _InterlockedCompareExchangePointer
+#define InterlockedExchangePointer           _InterlockedExchangePointer
+
+void *InterlockedCompareExchangePointer(void *volatile*,void*,void*);
+void *InterlockedExchangePointer(void *volatile*,void*);
+
+#else
+
+static FORCEINLINE void * WINAPI InterlockedCompareExchangePointer( void *volatile *dest, void *xchg, void *compare )
+{
+    return (void *)_InterlockedCompareExchange( (long volatile*)dest, (long)xchg, (long)compare );
+}
+
+static FORCEINLINE void * WINAPI InterlockedExchangePointer( void *volatile *dest, void *val )
+{
+    return (void *)_InterlockedExchange( (long volatile*)dest, (long)val );
+}
+
+#endif /* __i386__ */
+
+#ifdef __i386__
+
+static FORCEINLINE void MemoryBarrier(void)
+{
+    LONG dummy;
+    InterlockedOr(&dummy, 0);
+}
 
 #elif defined(__x86_64__)
 
-static inline unsigned char InterlockedCompareExchange128(__int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare)
+#pragma intrinsic(__faststorefence)
+
+void __faststorefence(void);
+
+static FORCEINLINE void MemoryBarrier(void)
 {
+    __faststorefence();
+}
+
+#elif defined(__arm__)
+
+#pragma intrinsic(__dmb)
+
+void __dmb(void);
+
+static FORCEINLINE void MemoryBarrier(void)
+{
+    __dmb(_ARM_BARRIER_SY);
+}
+
+#elif defined(__aarch64__)
+
+#pragma intrinsic(__dmb)
+
+void __dmb(void);
+
+static FORCEINLINE void MemoryBarrier(void)
+{
+    __dmb(_ARM64_BARRIER_SY);
+}
+
+#endif /* __i386__ */
+
+#elif defined(__GNUC__)
+
+static FORCEINLINE LONG WINAPI InterlockedAnd( LONG volatile *dest, LONG val )
+{
+    return __sync_fetch_and_and( dest, val );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
+{
+    return __sync_val_compare_and_swap( dest, compare, xchg );
+}
+
+static FORCEINLINE void * WINAPI InterlockedCompareExchangePointer( void *volatile *dest, void *xchg, void *compare )
+{
+    return __sync_val_compare_and_swap( dest, compare, xchg );
+}
+
+static FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )
+{
+    return __sync_val_compare_and_swap( dest, compare, xchg );
+}
+
+#ifdef _WIN64
+static FORCEINLINE unsigned char InterlockedCompareExchange128( volatile __int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare )
+{
+#ifdef __x86_64__
     unsigned char ret;
     __asm__ __volatile__( "lock cmpxchg16b %0; setz %b2"
                           : "=m" (dest[0]), "=m" (dest[1]), "=r" (ret),
@@ -6911,18 +7085,90 @@
                           : "m" (dest[0]), "m" (dest[1]), "3" (compare[0]), "4" (compare[1]),
                             "c" (xchg_high), "b" (xchg_low) );
     return ret;
-}
-
-#elif defined(__GNUC__)
-
-static inline unsigned char InterlockedCompareExchange128(__int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare)
-{
+#else
     return __sync_bool_compare_and_swap( (__int128 *)dest, *(__int128 *)compare, ((__int128)xchg_high << 64) | xchg_low );
+#endif
 }
-
 #endif
 
-#endif /* _WIN64 */
+static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
+{
+    LONG ret;
+#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))
+    ret = __atomic_exchange_n( dest, val, __ATOMIC_SEQ_CST );
+#elif defined(__i386__) || defined(__x86_64__)
+    __asm__ __volatile__( "lock; xchgl %0,(%1)"
+                          : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
+#else
+    do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));
+#endif
+    return ret;
+}
+
+static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
+{
+    return __sync_fetch_and_add( dest, incr );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
+{
+    return __sync_add_and_fetch( dest, 1 );
+}
+
+static FORCEINLINE short WINAPI InterlockedIncrement16( short volatile *dest )
+{
+    return __sync_add_and_fetch( dest, 1 );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
+{
+    return __sync_add_and_fetch( dest, -1 );
+}
+
+static FORCEINLINE short WINAPI InterlockedDecrement16( short volatile *dest )
+{
+    return __sync_add_and_fetch( dest, -1 );
+}
+
+static FORCEINLINE void * WINAPI InterlockedExchangePointer( void *volatile *dest, void *val )
+{
+    void *ret;
+#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))
+    ret = __atomic_exchange_n( dest, val, __ATOMIC_SEQ_CST );
+#elif defined(__x86_64__)
+    __asm__ __volatile__( "lock; xchgq %0,(%1)" : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
+#elif defined(__i386__)
+    __asm__ __volatile__( "lock; xchgl %0,(%1)" : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
+#else
+    do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));
+#endif
+    return ret;
+}
+
+static FORCEINLINE LONG WINAPI InterlockedOr( LONG volatile *dest, LONG val )
+{
+    return __sync_fetch_and_or( dest, val );
+}
+
+static FORCEINLINE void MemoryBarrier(void)
+{
+    __sync_synchronize();
+}
+
+#endif  /* __GNUC__ */
+
+static FORCEINLINE void YieldProcessor(void)
+{
+#ifdef __GNUC__
+#if defined(__i386__) || defined(__x86_64__)
+    __asm__ __volatile__( "rep; nop" : : : "memory" );
+#elif defined(__arm__) || defined(__aarch64__)
+    __asm__ __volatile__( "dmb ishst\n\tyield" : : : "memory" );
+#else
+    __asm__ __volatile__( "" : : : "memory" );
+#endif
+#endif
+}
 
 #ifdef __cplusplus
 }
diff --git a/mingw-w64-tools/widl/src/expr.c b/mingw-w64-tools/widl/src/expr.c
index be8311c..13bd5a8 100644
--- a/mingw-w64-tools/widl/src/expr.c
+++ b/mingw-w64-tools/widl/src/expr.c
@@ -463,6 +463,7 @@
         case TYPE_ARRAY:
         case TYPE_BITFIELD:
         case TYPE_APICONTRACT:
+        case TYPE_RUNTIMECLASS:
             /* nothing to do */
             break;
         case TYPE_ALIAS:
diff --git a/mingw-w64-tools/widl/src/header.c b/mingw-w64-tools/widl/src/header.c
index 223ab5c..ad205df 100644
--- a/mingw-w64-tools/widl/src/header.c
+++ b/mingw-w64-tools/widl/src/header.c
@@ -45,8 +45,6 @@
 
 static void write_type_v(FILE *f, const decl_spec_t *t, int is_field, int declonly, const char *name, enum name_type name_type);
 
-static void write_winrt_type_comments(FILE *header, const type_t *type);
-
 static void write_apicontract_guard_start(FILE *header, const expr_t *expr);
 static void write_apicontract_guard_end(FILE *header, const expr_t *expr);
 
@@ -465,6 +463,9 @@
       case TYPE_COCLASS:
         fprintf(h, "%s", name);
         break;
+      case TYPE_RUNTIMECLASS:
+        fprintf(h, "%s", type_get_name(type_runtimeclass_get_default_iface(t), name_type));
+        break;
       case TYPE_VOID:
         fprintf(h, "void");
         break;
@@ -547,6 +548,7 @@
   case TYPE_MODULE:
   case TYPE_COCLASS:
   case TYPE_INTERFACE:
+  case TYPE_RUNTIMECLASS:
     break;
   case TYPE_APICONTRACT:
     /* not supposed to be here */
@@ -1033,7 +1035,8 @@
 {
   enum type_type type = type_get_type(type_function_get_rettype(func->declspec.type));
   return type == TYPE_STRUCT || type == TYPE_UNION ||
-         type == TYPE_COCLASS || type == TYPE_INTERFACE;
+         type == TYPE_COCLASS || type == TYPE_INTERFACE ||
+         type == TYPE_RUNTIMECLASS;
 }
 
 static char *get_vtbl_entry_name(const type_t *iface, const var_t *func)
@@ -1482,20 +1485,6 @@
     return name;
 }
 
-static void write_winrt_type_comments(FILE *header, const type_t *type)
-{
-    expr_t *contract = get_attrp(type->attrs, ATTR_CONTRACT);
-    fprintf(header, " *\n");
-    if (contract)
-    {
-        const type_t *type = contract->u.tref.type;
-        char *name = format_namespace(type->namespace, "", ".", type->name, NULL);
-        int ver = contract->ref->u.lval;
-        fprintf(header, " * Introduced to %s in version %d.%d\n *\n", name, (ver >> 16) & 0xffff, ver & 0xffff);
-        free(name);
-    }
-}
-
 static void write_apicontract_guard_start(FILE *header, const expr_t *expr)
 {
     const type_t *type;
@@ -1528,7 +1517,6 @@
   expr_t *contract = get_attrp(iface->attrs, ATTR_CONTRACT);
   fprintf(header, "/*****************************************************************************\n");
   fprintf(header, " * %s %sinterface\n", iface->name, dispinterface ? "disp" : "");
-  if (winrt_mode) write_winrt_type_comments(header, iface);
   fprintf(header, " */\n");
   if (contract) write_apicontract_guard_start(header, contract);
   fprintf(header,"#ifndef __%s_%sINTERFACE_DEFINED__\n", iface->c_name, dispinterface ? "DISP" : "");
@@ -1630,7 +1618,6 @@
 
   fprintf(header, "/*****************************************************************************\n");
   fprintf(header, " * %s interface (v%d.%d)\n", iface->name, MAJORVERSION(ver), MINORVERSION(ver));
-  if (winrt_mode) write_winrt_type_comments(header, iface);
   fprintf(header, " */\n");
   if (contract) write_apicontract_guard_start(header, contract);
   fprintf(header,"#ifndef __%s_INTERFACE_DEFINED__\n", iface->name);
@@ -1707,6 +1694,39 @@
     free(name);
 }
 
+static void write_runtimeclass(FILE *header, type_t *runtimeclass)
+{
+    expr_t *contract = get_attrp(runtimeclass->attrs, ATTR_CONTRACT);
+    char *name, *c_name;
+    name = format_namespace(runtimeclass->namespace, "", ".", runtimeclass->name, NULL);
+    c_name = format_namespace(runtimeclass->namespace, "", "_", runtimeclass->name, NULL);
+    fprintf(header, "/*\n");
+    fprintf(header, " * Class %s\n", name);
+    fprintf(header, " */\n");
+    if (contract) write_apicontract_guard_start(header, contract);
+    fprintf(header, "#ifndef RUNTIMECLASS_%s_DEFINED\n", c_name);
+    fprintf(header, "#define RUNTIMECLASS_%s_DEFINED\n", c_name);
+    fprintf(header, "#endif /* RUNTIMECLASS_%s_DEFINED */\n", c_name);
+    free(c_name);
+    free(name);
+    if (contract) write_apicontract_guard_end(header, contract);
+    fprintf(header, "\n");
+}
+
+static void write_runtimeclass_forward(FILE *header, type_t *runtimeclass)
+{
+    fprintf(header, "#ifndef __%s_FWD_DEFINED__\n", runtimeclass->c_name);
+    fprintf(header, "#define __%s_FWD_DEFINED__\n", runtimeclass->c_name);
+    fprintf(header, "#ifdef __cplusplus\n");
+    write_namespace_start(header, runtimeclass->namespace);
+    write_line(header, 0, "class %s;", runtimeclass->name);
+    write_namespace_end(header, runtimeclass->namespace);
+    fprintf(header, "#else\n");
+    fprintf(header, "typedef struct %s %s;\n", runtimeclass->c_name, runtimeclass->c_name);
+    fprintf(header, "#endif /* defined __cplusplus */\n");
+    fprintf(header, "#endif /* defined __%s_FWD_DEFINED__ */\n\n", runtimeclass->c_name);
+}
+
 static void write_import(FILE *header, const char *fname)
 {
   char *hname, *p;
@@ -1771,6 +1791,8 @@
         }
         else if (type_get_type(stmt->u.type) == TYPE_COCLASS)
           write_coclass_forward(header, stmt->u.type);
+        else if (type_get_type(stmt->u.type) == TYPE_RUNTIMECLASS)
+          write_runtimeclass_forward(header, stmt->u.type);
         break;
       case STMT_TYPEREF:
       case STMT_IMPORTLIB:
@@ -1827,6 +1849,8 @@
           write_coclass(header, stmt->u.type);
         else if (type_get_type(stmt->u.type) == TYPE_APICONTRACT)
           write_apicontract(header, stmt->u.type);
+        else if (type_get_type(stmt->u.type) == TYPE_RUNTIMECLASS)
+          write_runtimeclass(header, stmt->u.type);
         else
         {
           write_type_definition(header, stmt->u.type, stmt->declonly);
diff --git a/mingw-w64-tools/widl/src/header.h b/mingw-w64-tools/widl/src/header.h
index d14e310..f949d1e 100644
--- a/mingw-w64-tools/widl/src/header.h
+++ b/mingw-w64-tools/widl/src/header.h
@@ -25,7 +25,6 @@
 
 extern int is_ptrchain_attr(const var_t *var, enum attr_type t);
 extern int is_aliaschain_attr(const type_t *var, enum attr_type t);
-extern int is_attr(const attr_list_t *list, enum attr_type t);
 extern void *get_attrp(const attr_list_t *list, enum attr_type t);
 extern unsigned int get_attrv(const attr_list_t *list, enum attr_type t);
 extern const char* get_name(const var_t *v);
diff --git a/mingw-w64-tools/widl/src/parser.l b/mingw-w64-tools/widl/src/parser.l
index 9dce035..6bbfed5 100644
--- a/mingw-w64-tools/widl/src/parser.l
+++ b/mingw-w64-tools/widl/src/parser.l
@@ -298,6 +298,7 @@
 	{"pascal",          tPASCAL,         0},
 	{"properties",      tPROPERTIES,     0},
 	{"register",        tREGISTER,       0},
+	{"runtimeclass",    tRUNTIMECLASS,   1},
 	{"short",           tSHORT,          0},
 	{"signed",          tSIGNED,         0},
 	{"sizeof",          tSIZEOF,         0},
@@ -320,6 +321,7 @@
 static const struct keyword attr_keywords[] =
 {
 	{"aggregatable",                tAGGREGATABLE,              0},
+	{"agile",                       tAGILE,                     1},
 	{"all_nodes",                   tALLNODES,                  0},
 	{"allocate",                    tALLOCATE,                  0},
 	{"annotation",                  tANNOTATION,                0},
@@ -357,6 +359,7 @@
 	{"encode",                      tENCODE,                    0},
 	{"endpoint",                    tENDPOINT,                  0},
 	{"entry",                       tENTRY,                     0},
+	{"exclusiveto",                 tEXCLUSIVETO,               1},
 	{"explicit_handle",             tEXPLICITHANDLE,            0},
 	{"fault_status",                tFAULTSTATUS,               0},
 	{"force_allocate",              tFORCEALLOCATE,             0},
@@ -381,12 +384,15 @@
 	{"length_is",                   tLENGTHIS,                  0},
 	{"licensed",                    tLICENSED,                  0},
 	{"local",                       tLOCAL,                     0},
+	{"marshaling_behavior",         tMARSHALINGBEHAVIOR,        1},
 	{"maybe",                       tMAYBE,                     0},
 	{"message",                     tMESSAGE,                   0},
+	{"mta" ,                        tMTA,                       0},
 	{"neutral",                     tNEUTRAL,                   0},
 	{"nocode",                      tNOCODE,                    0},
 	{"nonbrowsable",                tNONBROWSABLE,              0},
 	{"noncreatable",                tNONCREATABLE,              0},
+	{"none",                        tNONE,                      1},
 	{"nonextensible",               tNONEXTENSIBLE,             0},
 	{"notify",                      tNOTIFY,                    0},
 	{"notify_flag",                 tNOTIFYFLAG,                0},
@@ -416,6 +422,7 @@
 	{"single_node",                 tSINGLENODE,                0},
 	{"size_is",                     tSIZEIS,                    0},
 	{"source",                      tSOURCE,                    0},
+	{"standard",                    tSTANDARD,                  1},
 	{"strict_context_handle",       tSTRICTCONTEXTHANDLE,       0},
 	{"string",                      tSTRING,                    0},
 	{"switch_is",                   tSWITCHIS,                  0},
diff --git a/mingw-w64-tools/widl/src/parser.tab.c b/mingw-w64-tools/widl/src/parser.tab.c
index ca23de0..def57b8 100644
--- a/mingw-w64-tools/widl/src/parser.tab.c
+++ b/mingw-w64-tools/widl/src/parser.tab.c
@@ -177,6 +177,7 @@
 static attr_list_t *check_dispiface_attrs(const char *name, attr_list_t *attrs);
 static attr_list_t *check_module_attrs(const char *name, attr_list_t *attrs);
 static attr_list_t *check_coclass_attrs(const char *name, attr_list_t *attrs);
+static attr_list_t *check_runtimeclass_attrs(const char *name, attr_list_t *attrs);
 static attr_list_t *check_apicontract_attrs(const char *name, attr_list_t *attrs);
 const char *get_attr_display_name(enum attr_type type);
 static void add_explicit_handle_if_necessary(const type_t *iface, var_t *func);
@@ -209,7 +210,7 @@
 static typelib_t *current_typelib;
 
 
-#line 213 "tools/widl/parser.tab.c"
+#line 214 "tools/widl/parser.tab.c"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -274,176 +275,183 @@
     LOGICALAND = 279,              /* LOGICALAND  */
     ELLIPSIS = 280,                /* ELLIPSIS  */
     tAGGREGATABLE = 281,           /* tAGGREGATABLE  */
-    tALLNODES = 282,               /* tALLNODES  */
-    tALLOCATE = 283,               /* tALLOCATE  */
-    tANNOTATION = 284,             /* tANNOTATION  */
-    tAPICONTRACT = 285,            /* tAPICONTRACT  */
-    tAPPOBJECT = 286,              /* tAPPOBJECT  */
-    tASYNC = 287,                  /* tASYNC  */
-    tASYNCUUID = 288,              /* tASYNCUUID  */
-    tAUTOHANDLE = 289,             /* tAUTOHANDLE  */
-    tBINDABLE = 290,               /* tBINDABLE  */
-    tBOOLEAN = 291,                /* tBOOLEAN  */
-    tBROADCAST = 292,              /* tBROADCAST  */
-    tBYTE = 293,                   /* tBYTE  */
-    tBYTECOUNT = 294,              /* tBYTECOUNT  */
-    tCALLAS = 295,                 /* tCALLAS  */
-    tCALLBACK = 296,               /* tCALLBACK  */
-    tCASE = 297,                   /* tCASE  */
-    tCDECL = 298,                  /* tCDECL  */
-    tCHAR = 299,                   /* tCHAR  */
-    tCOCLASS = 300,                /* tCOCLASS  */
-    tCODE = 301,                   /* tCODE  */
-    tCOMMSTATUS = 302,             /* tCOMMSTATUS  */
-    tCONST = 303,                  /* tCONST  */
-    tCONTEXTHANDLE = 304,          /* tCONTEXTHANDLE  */
-    tCONTEXTHANDLENOSERIALIZE = 305, /* tCONTEXTHANDLENOSERIALIZE  */
-    tCONTEXTHANDLESERIALIZE = 306, /* tCONTEXTHANDLESERIALIZE  */
-    tCONTRACT = 307,               /* tCONTRACT  */
-    tCONTRACTVERSION = 308,        /* tCONTRACTVERSION  */
-    tCONTROL = 309,                /* tCONTROL  */
-    tCPPQUOTE = 310,               /* tCPPQUOTE  */
-    tCUSTOM = 311,                 /* tCUSTOM  */
-    tDECODE = 312,                 /* tDECODE  */
-    tDEFAULT = 313,                /* tDEFAULT  */
-    tDEFAULTBIND = 314,            /* tDEFAULTBIND  */
-    tDEFAULTCOLLELEM = 315,        /* tDEFAULTCOLLELEM  */
-    tDEFAULTVALUE = 316,           /* tDEFAULTVALUE  */
-    tDEFAULTVTABLE = 317,          /* tDEFAULTVTABLE  */
-    tDISABLECONSISTENCYCHECK = 318, /* tDISABLECONSISTENCYCHECK  */
-    tDISPLAYBIND = 319,            /* tDISPLAYBIND  */
-    tDISPINTERFACE = 320,          /* tDISPINTERFACE  */
-    tDLLNAME = 321,                /* tDLLNAME  */
-    tDONTFREE = 322,               /* tDONTFREE  */
-    tDOUBLE = 323,                 /* tDOUBLE  */
-    tDUAL = 324,                   /* tDUAL  */
-    tENABLEALLOCATE = 325,         /* tENABLEALLOCATE  */
-    tENCODE = 326,                 /* tENCODE  */
-    tENDPOINT = 327,               /* tENDPOINT  */
-    tENTRY = 328,                  /* tENTRY  */
-    tENUM = 329,                   /* tENUM  */
-    tERRORSTATUST = 330,           /* tERRORSTATUST  */
-    tEXPLICITHANDLE = 331,         /* tEXPLICITHANDLE  */
-    tEXTERN = 332,                 /* tEXTERN  */
-    tFALSE = 333,                  /* tFALSE  */
-    tFASTCALL = 334,               /* tFASTCALL  */
-    tFAULTSTATUS = 335,            /* tFAULTSTATUS  */
-    tFLOAT = 336,                  /* tFLOAT  */
-    tFORCEALLOCATE = 337,          /* tFORCEALLOCATE  */
-    tHANDLE = 338,                 /* tHANDLE  */
-    tHANDLET = 339,                /* tHANDLET  */
-    tHELPCONTEXT = 340,            /* tHELPCONTEXT  */
-    tHELPFILE = 341,               /* tHELPFILE  */
-    tHELPSTRING = 342,             /* tHELPSTRING  */
-    tHELPSTRINGCONTEXT = 343,      /* tHELPSTRINGCONTEXT  */
-    tHELPSTRINGDLL = 344,          /* tHELPSTRINGDLL  */
-    tHIDDEN = 345,                 /* tHIDDEN  */
-    tHYPER = 346,                  /* tHYPER  */
-    tID = 347,                     /* tID  */
-    tIDEMPOTENT = 348,             /* tIDEMPOTENT  */
-    tIGNORE = 349,                 /* tIGNORE  */
-    tIIDIS = 350,                  /* tIIDIS  */
-    tIMMEDIATEBIND = 351,          /* tIMMEDIATEBIND  */
-    tIMPLICITHANDLE = 352,         /* tIMPLICITHANDLE  */
-    tIMPORT = 353,                 /* tIMPORT  */
-    tIMPORTLIB = 354,              /* tIMPORTLIB  */
-    tIN = 355,                     /* tIN  */
-    tIN_LINE = 356,                /* tIN_LINE  */
-    tINLINE = 357,                 /* tINLINE  */
-    tINPUTSYNC = 358,              /* tINPUTSYNC  */
-    tINT = 359,                    /* tINT  */
-    tINT32 = 360,                  /* tINT32  */
-    tINT3264 = 361,                /* tINT3264  */
-    tINT64 = 362,                  /* tINT64  */
-    tINTERFACE = 363,              /* tINTERFACE  */
-    tLCID = 364,                   /* tLCID  */
-    tLENGTHIS = 365,               /* tLENGTHIS  */
-    tLIBRARY = 366,                /* tLIBRARY  */
-    tLICENSED = 367,               /* tLICENSED  */
-    tLOCAL = 368,                  /* tLOCAL  */
-    tLONG = 369,                   /* tLONG  */
-    tMAYBE = 370,                  /* tMAYBE  */
-    tMESSAGE = 371,                /* tMESSAGE  */
-    tMETHODS = 372,                /* tMETHODS  */
-    tMODULE = 373,                 /* tMODULE  */
-    tNAMESPACE = 374,              /* tNAMESPACE  */
-    tNOCODE = 375,                 /* tNOCODE  */
-    tNONBROWSABLE = 376,           /* tNONBROWSABLE  */
-    tNONCREATABLE = 377,           /* tNONCREATABLE  */
-    tNONEXTENSIBLE = 378,          /* tNONEXTENSIBLE  */
-    tNOTIFY = 379,                 /* tNOTIFY  */
-    tNOTIFYFLAG = 380,             /* tNOTIFYFLAG  */
-    tNULL = 381,                   /* tNULL  */
-    tOBJECT = 382,                 /* tOBJECT  */
-    tODL = 383,                    /* tODL  */
-    tOLEAUTOMATION = 384,          /* tOLEAUTOMATION  */
-    tOPTIMIZE = 385,               /* tOPTIMIZE  */
-    tOPTIONAL = 386,               /* tOPTIONAL  */
-    tOUT = 387,                    /* tOUT  */
-    tPARTIALIGNORE = 388,          /* tPARTIALIGNORE  */
-    tPASCAL = 389,                 /* tPASCAL  */
-    tPOINTERDEFAULT = 390,         /* tPOINTERDEFAULT  */
-    tPRAGMA_WARNING = 391,         /* tPRAGMA_WARNING  */
-    tPROGID = 392,                 /* tPROGID  */
-    tPROPERTIES = 393,             /* tPROPERTIES  */
-    tPROPGET = 394,                /* tPROPGET  */
-    tPROPPUT = 395,                /* tPROPPUT  */
-    tPROPPUTREF = 396,             /* tPROPPUTREF  */
-    tPROXY = 397,                  /* tPROXY  */
-    tPTR = 398,                    /* tPTR  */
-    tPUBLIC = 399,                 /* tPUBLIC  */
-    tRANGE = 400,                  /* tRANGE  */
-    tREADONLY = 401,               /* tREADONLY  */
-    tREF = 402,                    /* tREF  */
-    tREGISTER = 403,               /* tREGISTER  */
-    tREPRESENTAS = 404,            /* tREPRESENTAS  */
-    tREQUESTEDIT = 405,            /* tREQUESTEDIT  */
-    tRESTRICTED = 406,             /* tRESTRICTED  */
-    tRETVAL = 407,                 /* tRETVAL  */
-    tSAFEARRAY = 408,              /* tSAFEARRAY  */
-    tSHORT = 409,                  /* tSHORT  */
-    tSIGNED = 410,                 /* tSIGNED  */
-    tSINGLENODE = 411,             /* tSINGLENODE  */
-    tSIZEIS = 412,                 /* tSIZEIS  */
-    tSIZEOF = 413,                 /* tSIZEOF  */
-    tSMALL = 414,                  /* tSMALL  */
-    tSOURCE = 415,                 /* tSOURCE  */
-    tSTATIC = 416,                 /* tSTATIC  */
-    tSTDCALL = 417,                /* tSTDCALL  */
-    tSTRICTCONTEXTHANDLE = 418,    /* tSTRICTCONTEXTHANDLE  */
-    tSTRING = 419,                 /* tSTRING  */
-    tSTRUCT = 420,                 /* tSTRUCT  */
-    tSWITCH = 421,                 /* tSWITCH  */
-    tSWITCHIS = 422,               /* tSWITCHIS  */
-    tSWITCHTYPE = 423,             /* tSWITCHTYPE  */
-    tTHREADING = 424,              /* tTHREADING  */
-    tTRANSMITAS = 425,             /* tTRANSMITAS  */
-    tTRUE = 426,                   /* tTRUE  */
-    tTYPEDEF = 427,                /* tTYPEDEF  */
-    tUIDEFAULT = 428,              /* tUIDEFAULT  */
-    tUNION = 429,                  /* tUNION  */
-    tUNIQUE = 430,                 /* tUNIQUE  */
-    tUNSIGNED = 431,               /* tUNSIGNED  */
-    tUSESGETLASTERROR = 432,       /* tUSESGETLASTERROR  */
-    tUSERMARSHAL = 433,            /* tUSERMARSHAL  */
-    tUUID = 434,                   /* tUUID  */
-    tV1ENUM = 435,                 /* tV1ENUM  */
-    tVARARG = 436,                 /* tVARARG  */
-    tVERSION = 437,                /* tVERSION  */
-    tVIPROGID = 438,               /* tVIPROGID  */
-    tVOID = 439,                   /* tVOID  */
-    tWCHAR = 440,                  /* tWCHAR  */
-    tWIREMARSHAL = 441,            /* tWIREMARSHAL  */
-    tAPARTMENT = 442,              /* tAPARTMENT  */
-    tNEUTRAL = 443,                /* tNEUTRAL  */
-    tSINGLE = 444,                 /* tSINGLE  */
-    tFREE = 445,                   /* tFREE  */
-    tBOTH = 446,                   /* tBOTH  */
-    CAST = 447,                    /* CAST  */
-    PPTR = 448,                    /* PPTR  */
-    POS = 449,                     /* POS  */
-    NEG = 450,                     /* NEG  */
-    ADDRESSOF = 451                /* ADDRESSOF  */
+    tAGILE = 282,                  /* tAGILE  */
+    tALLNODES = 283,               /* tALLNODES  */
+    tALLOCATE = 284,               /* tALLOCATE  */
+    tANNOTATION = 285,             /* tANNOTATION  */
+    tAPICONTRACT = 286,            /* tAPICONTRACT  */
+    tAPPOBJECT = 287,              /* tAPPOBJECT  */
+    tASYNC = 288,                  /* tASYNC  */
+    tASYNCUUID = 289,              /* tASYNCUUID  */
+    tAUTOHANDLE = 290,             /* tAUTOHANDLE  */
+    tBINDABLE = 291,               /* tBINDABLE  */
+    tBOOLEAN = 292,                /* tBOOLEAN  */
+    tBROADCAST = 293,              /* tBROADCAST  */
+    tBYTE = 294,                   /* tBYTE  */
+    tBYTECOUNT = 295,              /* tBYTECOUNT  */
+    tCALLAS = 296,                 /* tCALLAS  */
+    tCALLBACK = 297,               /* tCALLBACK  */
+    tCASE = 298,                   /* tCASE  */
+    tCDECL = 299,                  /* tCDECL  */
+    tCHAR = 300,                   /* tCHAR  */
+    tCOCLASS = 301,                /* tCOCLASS  */
+    tCODE = 302,                   /* tCODE  */
+    tCOMMSTATUS = 303,             /* tCOMMSTATUS  */
+    tCONST = 304,                  /* tCONST  */
+    tCONTEXTHANDLE = 305,          /* tCONTEXTHANDLE  */
+    tCONTEXTHANDLENOSERIALIZE = 306, /* tCONTEXTHANDLENOSERIALIZE  */
+    tCONTEXTHANDLESERIALIZE = 307, /* tCONTEXTHANDLESERIALIZE  */
+    tCONTRACT = 308,               /* tCONTRACT  */
+    tCONTRACTVERSION = 309,        /* tCONTRACTVERSION  */
+    tCONTROL = 310,                /* tCONTROL  */
+    tCPPQUOTE = 311,               /* tCPPQUOTE  */
+    tCUSTOM = 312,                 /* tCUSTOM  */
+    tDECODE = 313,                 /* tDECODE  */
+    tDEFAULT = 314,                /* tDEFAULT  */
+    tDEFAULTBIND = 315,            /* tDEFAULTBIND  */
+    tDEFAULTCOLLELEM = 316,        /* tDEFAULTCOLLELEM  */
+    tDEFAULTVALUE = 317,           /* tDEFAULTVALUE  */
+    tDEFAULTVTABLE = 318,          /* tDEFAULTVTABLE  */
+    tDISABLECONSISTENCYCHECK = 319, /* tDISABLECONSISTENCYCHECK  */
+    tDISPLAYBIND = 320,            /* tDISPLAYBIND  */
+    tDISPINTERFACE = 321,          /* tDISPINTERFACE  */
+    tDLLNAME = 322,                /* tDLLNAME  */
+    tDONTFREE = 323,               /* tDONTFREE  */
+    tDOUBLE = 324,                 /* tDOUBLE  */
+    tDUAL = 325,                   /* tDUAL  */
+    tENABLEALLOCATE = 326,         /* tENABLEALLOCATE  */
+    tENCODE = 327,                 /* tENCODE  */
+    tENDPOINT = 328,               /* tENDPOINT  */
+    tENTRY = 329,                  /* tENTRY  */
+    tENUM = 330,                   /* tENUM  */
+    tERRORSTATUST = 331,           /* tERRORSTATUST  */
+    tEXCLUSIVETO = 332,            /* tEXCLUSIVETO  */
+    tEXPLICITHANDLE = 333,         /* tEXPLICITHANDLE  */
+    tEXTERN = 334,                 /* tEXTERN  */
+    tFALSE = 335,                  /* tFALSE  */
+    tFASTCALL = 336,               /* tFASTCALL  */
+    tFAULTSTATUS = 337,            /* tFAULTSTATUS  */
+    tFLOAT = 338,                  /* tFLOAT  */
+    tFORCEALLOCATE = 339,          /* tFORCEALLOCATE  */
+    tHANDLE = 340,                 /* tHANDLE  */
+    tHANDLET = 341,                /* tHANDLET  */
+    tHELPCONTEXT = 342,            /* tHELPCONTEXT  */
+    tHELPFILE = 343,               /* tHELPFILE  */
+    tHELPSTRING = 344,             /* tHELPSTRING  */
+    tHELPSTRINGCONTEXT = 345,      /* tHELPSTRINGCONTEXT  */
+    tHELPSTRINGDLL = 346,          /* tHELPSTRINGDLL  */
+    tHIDDEN = 347,                 /* tHIDDEN  */
+    tHYPER = 348,                  /* tHYPER  */
+    tID = 349,                     /* tID  */
+    tIDEMPOTENT = 350,             /* tIDEMPOTENT  */
+    tIGNORE = 351,                 /* tIGNORE  */
+    tIIDIS = 352,                  /* tIIDIS  */
+    tIMMEDIATEBIND = 353,          /* tIMMEDIATEBIND  */
+    tIMPLICITHANDLE = 354,         /* tIMPLICITHANDLE  */
+    tIMPORT = 355,                 /* tIMPORT  */
+    tIMPORTLIB = 356,              /* tIMPORTLIB  */
+    tIN = 357,                     /* tIN  */
+    tIN_LINE = 358,                /* tIN_LINE  */
+    tINLINE = 359,                 /* tINLINE  */
+    tINPUTSYNC = 360,              /* tINPUTSYNC  */
+    tINT = 361,                    /* tINT  */
+    tINT32 = 362,                  /* tINT32  */
+    tINT3264 = 363,                /* tINT3264  */
+    tINT64 = 364,                  /* tINT64  */
+    tINTERFACE = 365,              /* tINTERFACE  */
+    tLCID = 366,                   /* tLCID  */
+    tLENGTHIS = 367,               /* tLENGTHIS  */
+    tLIBRARY = 368,                /* tLIBRARY  */
+    tLICENSED = 369,               /* tLICENSED  */
+    tLOCAL = 370,                  /* tLOCAL  */
+    tLONG = 371,                   /* tLONG  */
+    tMARSHALINGBEHAVIOR = 372,     /* tMARSHALINGBEHAVIOR  */
+    tMAYBE = 373,                  /* tMAYBE  */
+    tMESSAGE = 374,                /* tMESSAGE  */
+    tMETHODS = 375,                /* tMETHODS  */
+    tMODULE = 376,                 /* tMODULE  */
+    tMTA = 377,                    /* tMTA  */
+    tNAMESPACE = 378,              /* tNAMESPACE  */
+    tNOCODE = 379,                 /* tNOCODE  */
+    tNONBROWSABLE = 380,           /* tNONBROWSABLE  */
+    tNONCREATABLE = 381,           /* tNONCREATABLE  */
+    tNONE = 382,                   /* tNONE  */
+    tNONEXTENSIBLE = 383,          /* tNONEXTENSIBLE  */
+    tNOTIFY = 384,                 /* tNOTIFY  */
+    tNOTIFYFLAG = 385,             /* tNOTIFYFLAG  */
+    tNULL = 386,                   /* tNULL  */
+    tOBJECT = 387,                 /* tOBJECT  */
+    tODL = 388,                    /* tODL  */
+    tOLEAUTOMATION = 389,          /* tOLEAUTOMATION  */
+    tOPTIMIZE = 390,               /* tOPTIMIZE  */
+    tOPTIONAL = 391,               /* tOPTIONAL  */
+    tOUT = 392,                    /* tOUT  */
+    tPARTIALIGNORE = 393,          /* tPARTIALIGNORE  */
+    tPASCAL = 394,                 /* tPASCAL  */
+    tPOINTERDEFAULT = 395,         /* tPOINTERDEFAULT  */
+    tPRAGMA_WARNING = 396,         /* tPRAGMA_WARNING  */
+    tPROGID = 397,                 /* tPROGID  */
+    tPROPERTIES = 398,             /* tPROPERTIES  */
+    tPROPGET = 399,                /* tPROPGET  */
+    tPROPPUT = 400,                /* tPROPPUT  */
+    tPROPPUTREF = 401,             /* tPROPPUTREF  */
+    tPROXY = 402,                  /* tPROXY  */
+    tPTR = 403,                    /* tPTR  */
+    tPUBLIC = 404,                 /* tPUBLIC  */
+    tRANGE = 405,                  /* tRANGE  */
+    tREADONLY = 406,               /* tREADONLY  */
+    tREF = 407,                    /* tREF  */
+    tREGISTER = 408,               /* tREGISTER  */
+    tREPRESENTAS = 409,            /* tREPRESENTAS  */
+    tREQUESTEDIT = 410,            /* tREQUESTEDIT  */
+    tRESTRICTED = 411,             /* tRESTRICTED  */
+    tRETVAL = 412,                 /* tRETVAL  */
+    tRUNTIMECLASS = 413,           /* tRUNTIMECLASS  */
+    tSAFEARRAY = 414,              /* tSAFEARRAY  */
+    tSHORT = 415,                  /* tSHORT  */
+    tSIGNED = 416,                 /* tSIGNED  */
+    tSINGLENODE = 417,             /* tSINGLENODE  */
+    tSIZEIS = 418,                 /* tSIZEIS  */
+    tSIZEOF = 419,                 /* tSIZEOF  */
+    tSMALL = 420,                  /* tSMALL  */
+    tSOURCE = 421,                 /* tSOURCE  */
+    tSTANDARD = 422,               /* tSTANDARD  */
+    tSTATIC = 423,                 /* tSTATIC  */
+    tSTDCALL = 424,                /* tSTDCALL  */
+    tSTRICTCONTEXTHANDLE = 425,    /* tSTRICTCONTEXTHANDLE  */
+    tSTRING = 426,                 /* tSTRING  */
+    tSTRUCT = 427,                 /* tSTRUCT  */
+    tSWITCH = 428,                 /* tSWITCH  */
+    tSWITCHIS = 429,               /* tSWITCHIS  */
+    tSWITCHTYPE = 430,             /* tSWITCHTYPE  */
+    tTHREADING = 431,              /* tTHREADING  */
+    tTRANSMITAS = 432,             /* tTRANSMITAS  */
+    tTRUE = 433,                   /* tTRUE  */
+    tTYPEDEF = 434,                /* tTYPEDEF  */
+    tUIDEFAULT = 435,              /* tUIDEFAULT  */
+    tUNION = 436,                  /* tUNION  */
+    tUNIQUE = 437,                 /* tUNIQUE  */
+    tUNSIGNED = 438,               /* tUNSIGNED  */
+    tUSESGETLASTERROR = 439,       /* tUSESGETLASTERROR  */
+    tUSERMARSHAL = 440,            /* tUSERMARSHAL  */
+    tUUID = 441,                   /* tUUID  */
+    tV1ENUM = 442,                 /* tV1ENUM  */
+    tVARARG = 443,                 /* tVARARG  */
+    tVERSION = 444,                /* tVERSION  */
+    tVIPROGID = 445,               /* tVIPROGID  */
+    tVOID = 446,                   /* tVOID  */
+    tWCHAR = 447,                  /* tWCHAR  */
+    tWIREMARSHAL = 448,            /* tWIREMARSHAL  */
+    tAPARTMENT = 449,              /* tAPARTMENT  */
+    tNEUTRAL = 450,                /* tNEUTRAL  */
+    tSINGLE = 451,                 /* tSINGLE  */
+    tFREE = 452,                   /* tFREE  */
+    tBOTH = 453,                   /* tBOTH  */
+    CAST = 454,                    /* CAST  */
+    PPTR = 455,                    /* PPTR  */
+    POS = 456,                     /* POS  */
+    NEG = 457,                     /* NEG  */
+    ADDRESSOF = 458                /* ADDRESSOF  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -452,7 +460,7 @@
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 135 "tools/widl/parser.y"
+#line 136 "tools/widl/parser.y"
 
 	attr_t *attr;
 	attr_list_t *attr_list;
@@ -481,7 +489,7 @@
 	enum type_qualifier type_qualifier;
 	enum function_specifier function_specifier;
 
-#line 485 "tools/widl/parser.tab.c"
+#line 493 "tools/widl/parser.tab.c"
 
 };
 typedef union YYSTYPE YYSTYPE;
@@ -526,323 +534,334 @@
   YYSYMBOL_LOGICALAND = 24,                /* LOGICALAND  */
   YYSYMBOL_ELLIPSIS = 25,                  /* ELLIPSIS  */
   YYSYMBOL_tAGGREGATABLE = 26,             /* tAGGREGATABLE  */
-  YYSYMBOL_tALLNODES = 27,                 /* tALLNODES  */
-  YYSYMBOL_tALLOCATE = 28,                 /* tALLOCATE  */
-  YYSYMBOL_tANNOTATION = 29,               /* tANNOTATION  */
-  YYSYMBOL_tAPICONTRACT = 30,              /* tAPICONTRACT  */
-  YYSYMBOL_tAPPOBJECT = 31,                /* tAPPOBJECT  */
-  YYSYMBOL_tASYNC = 32,                    /* tASYNC  */
-  YYSYMBOL_tASYNCUUID = 33,                /* tASYNCUUID  */
-  YYSYMBOL_tAUTOHANDLE = 34,               /* tAUTOHANDLE  */
-  YYSYMBOL_tBINDABLE = 35,                 /* tBINDABLE  */
-  YYSYMBOL_tBOOLEAN = 36,                  /* tBOOLEAN  */
-  YYSYMBOL_tBROADCAST = 37,                /* tBROADCAST  */
-  YYSYMBOL_tBYTE = 38,                     /* tBYTE  */
-  YYSYMBOL_tBYTECOUNT = 39,                /* tBYTECOUNT  */
-  YYSYMBOL_tCALLAS = 40,                   /* tCALLAS  */
-  YYSYMBOL_tCALLBACK = 41,                 /* tCALLBACK  */
-  YYSYMBOL_tCASE = 42,                     /* tCASE  */
-  YYSYMBOL_tCDECL = 43,                    /* tCDECL  */
-  YYSYMBOL_tCHAR = 44,                     /* tCHAR  */
-  YYSYMBOL_tCOCLASS = 45,                  /* tCOCLASS  */
-  YYSYMBOL_tCODE = 46,                     /* tCODE  */
-  YYSYMBOL_tCOMMSTATUS = 47,               /* tCOMMSTATUS  */
-  YYSYMBOL_tCONST = 48,                    /* tCONST  */
-  YYSYMBOL_tCONTEXTHANDLE = 49,            /* tCONTEXTHANDLE  */
-  YYSYMBOL_tCONTEXTHANDLENOSERIALIZE = 50, /* tCONTEXTHANDLENOSERIALIZE  */
-  YYSYMBOL_tCONTEXTHANDLESERIALIZE = 51,   /* tCONTEXTHANDLESERIALIZE  */
-  YYSYMBOL_tCONTRACT = 52,                 /* tCONTRACT  */
-  YYSYMBOL_tCONTRACTVERSION = 53,          /* tCONTRACTVERSION  */
-  YYSYMBOL_tCONTROL = 54,                  /* tCONTROL  */
-  YYSYMBOL_tCPPQUOTE = 55,                 /* tCPPQUOTE  */
-  YYSYMBOL_tCUSTOM = 56,                   /* tCUSTOM  */
-  YYSYMBOL_tDECODE = 57,                   /* tDECODE  */
-  YYSYMBOL_tDEFAULT = 58,                  /* tDEFAULT  */
-  YYSYMBOL_tDEFAULTBIND = 59,              /* tDEFAULTBIND  */
-  YYSYMBOL_tDEFAULTCOLLELEM = 60,          /* tDEFAULTCOLLELEM  */
-  YYSYMBOL_tDEFAULTVALUE = 61,             /* tDEFAULTVALUE  */
-  YYSYMBOL_tDEFAULTVTABLE = 62,            /* tDEFAULTVTABLE  */
-  YYSYMBOL_tDISABLECONSISTENCYCHECK = 63,  /* tDISABLECONSISTENCYCHECK  */
-  YYSYMBOL_tDISPLAYBIND = 64,              /* tDISPLAYBIND  */
-  YYSYMBOL_tDISPINTERFACE = 65,            /* tDISPINTERFACE  */
-  YYSYMBOL_tDLLNAME = 66,                  /* tDLLNAME  */
-  YYSYMBOL_tDONTFREE = 67,                 /* tDONTFREE  */
-  YYSYMBOL_tDOUBLE = 68,                   /* tDOUBLE  */
-  YYSYMBOL_tDUAL = 69,                     /* tDUAL  */
-  YYSYMBOL_tENABLEALLOCATE = 70,           /* tENABLEALLOCATE  */
-  YYSYMBOL_tENCODE = 71,                   /* tENCODE  */
-  YYSYMBOL_tENDPOINT = 72,                 /* tENDPOINT  */
-  YYSYMBOL_tENTRY = 73,                    /* tENTRY  */
-  YYSYMBOL_tENUM = 74,                     /* tENUM  */
-  YYSYMBOL_tERRORSTATUST = 75,             /* tERRORSTATUST  */
-  YYSYMBOL_tEXPLICITHANDLE = 76,           /* tEXPLICITHANDLE  */
-  YYSYMBOL_tEXTERN = 77,                   /* tEXTERN  */
-  YYSYMBOL_tFALSE = 78,                    /* tFALSE  */
-  YYSYMBOL_tFASTCALL = 79,                 /* tFASTCALL  */
-  YYSYMBOL_tFAULTSTATUS = 80,              /* tFAULTSTATUS  */
-  YYSYMBOL_tFLOAT = 81,                    /* tFLOAT  */
-  YYSYMBOL_tFORCEALLOCATE = 82,            /* tFORCEALLOCATE  */
-  YYSYMBOL_tHANDLE = 83,                   /* tHANDLE  */
-  YYSYMBOL_tHANDLET = 84,                  /* tHANDLET  */
-  YYSYMBOL_tHELPCONTEXT = 85,              /* tHELPCONTEXT  */
-  YYSYMBOL_tHELPFILE = 86,                 /* tHELPFILE  */
-  YYSYMBOL_tHELPSTRING = 87,               /* tHELPSTRING  */
-  YYSYMBOL_tHELPSTRINGCONTEXT = 88,        /* tHELPSTRINGCONTEXT  */
-  YYSYMBOL_tHELPSTRINGDLL = 89,            /* tHELPSTRINGDLL  */
-  YYSYMBOL_tHIDDEN = 90,                   /* tHIDDEN  */
-  YYSYMBOL_tHYPER = 91,                    /* tHYPER  */
-  YYSYMBOL_tID = 92,                       /* tID  */
-  YYSYMBOL_tIDEMPOTENT = 93,               /* tIDEMPOTENT  */
-  YYSYMBOL_tIGNORE = 94,                   /* tIGNORE  */
-  YYSYMBOL_tIIDIS = 95,                    /* tIIDIS  */
-  YYSYMBOL_tIMMEDIATEBIND = 96,            /* tIMMEDIATEBIND  */
-  YYSYMBOL_tIMPLICITHANDLE = 97,           /* tIMPLICITHANDLE  */
-  YYSYMBOL_tIMPORT = 98,                   /* tIMPORT  */
-  YYSYMBOL_tIMPORTLIB = 99,                /* tIMPORTLIB  */
-  YYSYMBOL_tIN = 100,                      /* tIN  */
-  YYSYMBOL_tIN_LINE = 101,                 /* tIN_LINE  */
-  YYSYMBOL_tINLINE = 102,                  /* tINLINE  */
-  YYSYMBOL_tINPUTSYNC = 103,               /* tINPUTSYNC  */
-  YYSYMBOL_tINT = 104,                     /* tINT  */
-  YYSYMBOL_tINT32 = 105,                   /* tINT32  */
-  YYSYMBOL_tINT3264 = 106,                 /* tINT3264  */
-  YYSYMBOL_tINT64 = 107,                   /* tINT64  */
-  YYSYMBOL_tINTERFACE = 108,               /* tINTERFACE  */
-  YYSYMBOL_tLCID = 109,                    /* tLCID  */
-  YYSYMBOL_tLENGTHIS = 110,                /* tLENGTHIS  */
-  YYSYMBOL_tLIBRARY = 111,                 /* tLIBRARY  */
-  YYSYMBOL_tLICENSED = 112,                /* tLICENSED  */
-  YYSYMBOL_tLOCAL = 113,                   /* tLOCAL  */
-  YYSYMBOL_tLONG = 114,                    /* tLONG  */
-  YYSYMBOL_tMAYBE = 115,                   /* tMAYBE  */
-  YYSYMBOL_tMESSAGE = 116,                 /* tMESSAGE  */
-  YYSYMBOL_tMETHODS = 117,                 /* tMETHODS  */
-  YYSYMBOL_tMODULE = 118,                  /* tMODULE  */
-  YYSYMBOL_tNAMESPACE = 119,               /* tNAMESPACE  */
-  YYSYMBOL_tNOCODE = 120,                  /* tNOCODE  */
-  YYSYMBOL_tNONBROWSABLE = 121,            /* tNONBROWSABLE  */
-  YYSYMBOL_tNONCREATABLE = 122,            /* tNONCREATABLE  */
-  YYSYMBOL_tNONEXTENSIBLE = 123,           /* tNONEXTENSIBLE  */
-  YYSYMBOL_tNOTIFY = 124,                  /* tNOTIFY  */
-  YYSYMBOL_tNOTIFYFLAG = 125,              /* tNOTIFYFLAG  */
-  YYSYMBOL_tNULL = 126,                    /* tNULL  */
-  YYSYMBOL_tOBJECT = 127,                  /* tOBJECT  */
-  YYSYMBOL_tODL = 128,                     /* tODL  */
-  YYSYMBOL_tOLEAUTOMATION = 129,           /* tOLEAUTOMATION  */
-  YYSYMBOL_tOPTIMIZE = 130,                /* tOPTIMIZE  */
-  YYSYMBOL_tOPTIONAL = 131,                /* tOPTIONAL  */
-  YYSYMBOL_tOUT = 132,                     /* tOUT  */
-  YYSYMBOL_tPARTIALIGNORE = 133,           /* tPARTIALIGNORE  */
-  YYSYMBOL_tPASCAL = 134,                  /* tPASCAL  */
-  YYSYMBOL_tPOINTERDEFAULT = 135,          /* tPOINTERDEFAULT  */
-  YYSYMBOL_tPRAGMA_WARNING = 136,          /* tPRAGMA_WARNING  */
-  YYSYMBOL_tPROGID = 137,                  /* tPROGID  */
-  YYSYMBOL_tPROPERTIES = 138,              /* tPROPERTIES  */
-  YYSYMBOL_tPROPGET = 139,                 /* tPROPGET  */
-  YYSYMBOL_tPROPPUT = 140,                 /* tPROPPUT  */
-  YYSYMBOL_tPROPPUTREF = 141,              /* tPROPPUTREF  */
-  YYSYMBOL_tPROXY = 142,                   /* tPROXY  */
-  YYSYMBOL_tPTR = 143,                     /* tPTR  */
-  YYSYMBOL_tPUBLIC = 144,                  /* tPUBLIC  */
-  YYSYMBOL_tRANGE = 145,                   /* tRANGE  */
-  YYSYMBOL_tREADONLY = 146,                /* tREADONLY  */
-  YYSYMBOL_tREF = 147,                     /* tREF  */
-  YYSYMBOL_tREGISTER = 148,                /* tREGISTER  */
-  YYSYMBOL_tREPRESENTAS = 149,             /* tREPRESENTAS  */
-  YYSYMBOL_tREQUESTEDIT = 150,             /* tREQUESTEDIT  */
-  YYSYMBOL_tRESTRICTED = 151,              /* tRESTRICTED  */
-  YYSYMBOL_tRETVAL = 152,                  /* tRETVAL  */
-  YYSYMBOL_tSAFEARRAY = 153,               /* tSAFEARRAY  */
-  YYSYMBOL_tSHORT = 154,                   /* tSHORT  */
-  YYSYMBOL_tSIGNED = 155,                  /* tSIGNED  */
-  YYSYMBOL_tSINGLENODE = 156,              /* tSINGLENODE  */
-  YYSYMBOL_tSIZEIS = 157,                  /* tSIZEIS  */
-  YYSYMBOL_tSIZEOF = 158,                  /* tSIZEOF  */
-  YYSYMBOL_tSMALL = 159,                   /* tSMALL  */
-  YYSYMBOL_tSOURCE = 160,                  /* tSOURCE  */
-  YYSYMBOL_tSTATIC = 161,                  /* tSTATIC  */
-  YYSYMBOL_tSTDCALL = 162,                 /* tSTDCALL  */
-  YYSYMBOL_tSTRICTCONTEXTHANDLE = 163,     /* tSTRICTCONTEXTHANDLE  */
-  YYSYMBOL_tSTRING = 164,                  /* tSTRING  */
-  YYSYMBOL_tSTRUCT = 165,                  /* tSTRUCT  */
-  YYSYMBOL_tSWITCH = 166,                  /* tSWITCH  */
-  YYSYMBOL_tSWITCHIS = 167,                /* tSWITCHIS  */
-  YYSYMBOL_tSWITCHTYPE = 168,              /* tSWITCHTYPE  */
-  YYSYMBOL_tTHREADING = 169,               /* tTHREADING  */
-  YYSYMBOL_tTRANSMITAS = 170,              /* tTRANSMITAS  */
-  YYSYMBOL_tTRUE = 171,                    /* tTRUE  */
-  YYSYMBOL_tTYPEDEF = 172,                 /* tTYPEDEF  */
-  YYSYMBOL_tUIDEFAULT = 173,               /* tUIDEFAULT  */
-  YYSYMBOL_tUNION = 174,                   /* tUNION  */
-  YYSYMBOL_tUNIQUE = 175,                  /* tUNIQUE  */
-  YYSYMBOL_tUNSIGNED = 176,                /* tUNSIGNED  */
-  YYSYMBOL_tUSESGETLASTERROR = 177,        /* tUSESGETLASTERROR  */
-  YYSYMBOL_tUSERMARSHAL = 178,             /* tUSERMARSHAL  */
-  YYSYMBOL_tUUID = 179,                    /* tUUID  */
-  YYSYMBOL_tV1ENUM = 180,                  /* tV1ENUM  */
-  YYSYMBOL_tVARARG = 181,                  /* tVARARG  */
-  YYSYMBOL_tVERSION = 182,                 /* tVERSION  */
-  YYSYMBOL_tVIPROGID = 183,                /* tVIPROGID  */
-  YYSYMBOL_tVOID = 184,                    /* tVOID  */
-  YYSYMBOL_tWCHAR = 185,                   /* tWCHAR  */
-  YYSYMBOL_tWIREMARSHAL = 186,             /* tWIREMARSHAL  */
-  YYSYMBOL_tAPARTMENT = 187,               /* tAPARTMENT  */
-  YYSYMBOL_tNEUTRAL = 188,                 /* tNEUTRAL  */
-  YYSYMBOL_tSINGLE = 189,                  /* tSINGLE  */
-  YYSYMBOL_tFREE = 190,                    /* tFREE  */
-  YYSYMBOL_tBOTH = 191,                    /* tBOTH  */
-  YYSYMBOL_192_ = 192,                     /* ','  */
-  YYSYMBOL_193_ = 193,                     /* '?'  */
-  YYSYMBOL_194_ = 194,                     /* ':'  */
-  YYSYMBOL_195_ = 195,                     /* '|'  */
-  YYSYMBOL_196_ = 196,                     /* '^'  */
-  YYSYMBOL_197_ = 197,                     /* '&'  */
-  YYSYMBOL_198_ = 198,                     /* '<'  */
-  YYSYMBOL_199_ = 199,                     /* '>'  */
-  YYSYMBOL_200_ = 200,                     /* '-'  */
-  YYSYMBOL_201_ = 201,                     /* '+'  */
-  YYSYMBOL_202_ = 202,                     /* '*'  */
-  YYSYMBOL_203_ = 203,                     /* '/'  */
-  YYSYMBOL_204_ = 204,                     /* '%'  */
-  YYSYMBOL_205_ = 205,                     /* '!'  */
-  YYSYMBOL_206_ = 206,                     /* '~'  */
-  YYSYMBOL_CAST = 207,                     /* CAST  */
-  YYSYMBOL_PPTR = 208,                     /* PPTR  */
-  YYSYMBOL_POS = 209,                      /* POS  */
-  YYSYMBOL_NEG = 210,                      /* NEG  */
-  YYSYMBOL_ADDRESSOF = 211,                /* ADDRESSOF  */
-  YYSYMBOL_212_ = 212,                     /* '.'  */
-  YYSYMBOL_213_ = 213,                     /* '['  */
-  YYSYMBOL_214_ = 214,                     /* ']'  */
-  YYSYMBOL_215_ = 215,                     /* '{'  */
-  YYSYMBOL_216_ = 216,                     /* '}'  */
-  YYSYMBOL_217_ = 217,                     /* ';'  */
-  YYSYMBOL_218_ = 218,                     /* '('  */
-  YYSYMBOL_219_ = 219,                     /* ')'  */
-  YYSYMBOL_220_ = 220,                     /* '='  */
-  YYSYMBOL_YYACCEPT = 221,                 /* $accept  */
-  YYSYMBOL_input = 222,                    /* input  */
-  YYSYMBOL_m_acf = 223,                    /* m_acf  */
-  YYSYMBOL_gbl_statements = 224,           /* gbl_statements  */
-  YYSYMBOL_225_1 = 225,                    /* $@1  */
-  YYSYMBOL_imp_statements = 226,           /* imp_statements  */
-  YYSYMBOL_227_2 = 227,                    /* $@2  */
-  YYSYMBOL_int_statements = 228,           /* int_statements  */
-  YYSYMBOL_semicolon_opt = 229,            /* semicolon_opt  */
-  YYSYMBOL_statement = 230,                /* statement  */
-  YYSYMBOL_pragma_warning = 231,           /* pragma_warning  */
-  YYSYMBOL_warnings = 232,                 /* warnings  */
-  YYSYMBOL_typedecl = 233,                 /* typedecl  */
-  YYSYMBOL_cppquote = 234,                 /* cppquote  */
-  YYSYMBOL_import_start = 235,             /* import_start  */
-  YYSYMBOL_import = 236,                   /* import  */
-  YYSYMBOL_importlib = 237,                /* importlib  */
-  YYSYMBOL_libraryhdr = 238,               /* libraryhdr  */
-  YYSYMBOL_library_start = 239,            /* library_start  */
-  YYSYMBOL_librarydef = 240,               /* librarydef  */
-  YYSYMBOL_m_args = 241,                   /* m_args  */
-  YYSYMBOL_arg_list = 242,                 /* arg_list  */
-  YYSYMBOL_args = 243,                     /* args  */
-  YYSYMBOL_arg = 244,                      /* arg  */
-  YYSYMBOL_array = 245,                    /* array  */
-  YYSYMBOL_m_attributes = 246,             /* m_attributes  */
-  YYSYMBOL_attributes = 247,               /* attributes  */
-  YYSYMBOL_attrib_list = 248,              /* attrib_list  */
-  YYSYMBOL_str_list = 249,                 /* str_list  */
-  YYSYMBOL_contract_ver = 250,             /* contract_ver  */
-  YYSYMBOL_contract_req = 251,             /* contract_req  */
-  YYSYMBOL_attribute = 252,                /* attribute  */
-  YYSYMBOL_uuid_string = 253,              /* uuid_string  */
-  YYSYMBOL_callconv = 254,                 /* callconv  */
-  YYSYMBOL_cases = 255,                    /* cases  */
-  YYSYMBOL_case = 256,                     /* case  */
-  YYSYMBOL_enums = 257,                    /* enums  */
-  YYSYMBOL_enum_list = 258,                /* enum_list  */
-  YYSYMBOL_enum_member = 259,              /* enum_member  */
-  YYSYMBOL_enum = 260,                     /* enum  */
-  YYSYMBOL_enumdef = 261,                  /* enumdef  */
-  YYSYMBOL_m_exprs = 262,                  /* m_exprs  */
-  YYSYMBOL_m_expr = 263,                   /* m_expr  */
-  YYSYMBOL_expr = 264,                     /* expr  */
-  YYSYMBOL_expr_list_int_const = 265,      /* expr_list_int_const  */
-  YYSYMBOL_expr_int_const = 266,           /* expr_int_const  */
-  YYSYMBOL_expr_const = 267,               /* expr_const  */
-  YYSYMBOL_fields = 268,                   /* fields  */
-  YYSYMBOL_field = 269,                    /* field  */
-  YYSYMBOL_ne_union_field = 270,           /* ne_union_field  */
-  YYSYMBOL_ne_union_fields = 271,          /* ne_union_fields  */
-  YYSYMBOL_union_field = 272,              /* union_field  */
-  YYSYMBOL_s_field = 273,                  /* s_field  */
-  YYSYMBOL_funcdef = 274,                  /* funcdef  */
-  YYSYMBOL_declaration = 275,              /* declaration  */
-  YYSYMBOL_m_ident = 276,                  /* m_ident  */
-  YYSYMBOL_t_ident = 277,                  /* t_ident  */
-  YYSYMBOL_ident = 278,                    /* ident  */
-  YYSYMBOL_base_type = 279,                /* base_type  */
-  YYSYMBOL_m_int = 280,                    /* m_int  */
-  YYSYMBOL_int_std = 281,                  /* int_std  */
-  YYSYMBOL_qualified_seq = 282,            /* qualified_seq  */
-  YYSYMBOL_283_3 = 283,                    /* $@3  */
-  YYSYMBOL_qualified_type = 284,           /* qualified_type  */
-  YYSYMBOL_285_4 = 285,                    /* $@4  */
-  YYSYMBOL_coclass = 286,                  /* coclass  */
-  YYSYMBOL_coclasshdr = 287,               /* coclasshdr  */
-  YYSYMBOL_coclassdef = 288,               /* coclassdef  */
-  YYSYMBOL_apicontract = 289,              /* apicontract  */
-  YYSYMBOL_namespacedef = 290,             /* namespacedef  */
-  YYSYMBOL_coclass_ints = 291,             /* coclass_ints  */
-  YYSYMBOL_coclass_int = 292,              /* coclass_int  */
-  YYSYMBOL_dispinterface = 293,            /* dispinterface  */
-  YYSYMBOL_dispinterfacehdr = 294,         /* dispinterfacehdr  */
-  YYSYMBOL_dispint_props = 295,            /* dispint_props  */
-  YYSYMBOL_dispint_meths = 296,            /* dispint_meths  */
-  YYSYMBOL_dispinterfacedef = 297,         /* dispinterfacedef  */
-  YYSYMBOL_inherit = 298,                  /* inherit  */
-  YYSYMBOL_interface = 299,                /* interface  */
-  YYSYMBOL_interfacehdr = 300,             /* interfacehdr  */
-  YYSYMBOL_interfacedef = 301,             /* interfacedef  */
-  YYSYMBOL_interfacedec = 302,             /* interfacedec  */
-  YYSYMBOL_module = 303,                   /* module  */
-  YYSYMBOL_modulehdr = 304,                /* modulehdr  */
-  YYSYMBOL_moduledef = 305,                /* moduledef  */
-  YYSYMBOL_storage_cls_spec = 306,         /* storage_cls_spec  */
-  YYSYMBOL_function_specifier = 307,       /* function_specifier  */
-  YYSYMBOL_type_qualifier = 308,           /* type_qualifier  */
-  YYSYMBOL_m_type_qual_list = 309,         /* m_type_qual_list  */
-  YYSYMBOL_decl_spec = 310,                /* decl_spec  */
-  YYSYMBOL_m_decl_spec_no_type = 311,      /* m_decl_spec_no_type  */
-  YYSYMBOL_decl_spec_no_type = 312,        /* decl_spec_no_type  */
-  YYSYMBOL_declarator = 313,               /* declarator  */
-  YYSYMBOL_direct_declarator = 314,        /* direct_declarator  */
-  YYSYMBOL_abstract_declarator = 315,      /* abstract_declarator  */
-  YYSYMBOL_abstract_declarator_no_direct = 316, /* abstract_declarator_no_direct  */
-  YYSYMBOL_m_abstract_declarator = 317,    /* m_abstract_declarator  */
-  YYSYMBOL_abstract_direct_declarator = 318, /* abstract_direct_declarator  */
-  YYSYMBOL_any_declarator = 319,           /* any_declarator  */
-  YYSYMBOL_any_declarator_no_direct = 320, /* any_declarator_no_direct  */
-  YYSYMBOL_m_any_declarator = 321,         /* m_any_declarator  */
-  YYSYMBOL_any_direct_declarator = 322,    /* any_direct_declarator  */
-  YYSYMBOL_declarator_list = 323,          /* declarator_list  */
-  YYSYMBOL_m_bitfield = 324,               /* m_bitfield  */
-  YYSYMBOL_struct_declarator = 325,        /* struct_declarator  */
-  YYSYMBOL_struct_declarator_list = 326,   /* struct_declarator_list  */
-  YYSYMBOL_init_declarator = 327,          /* init_declarator  */
-  YYSYMBOL_threading_type = 328,           /* threading_type  */
-  YYSYMBOL_pointer_type = 329,             /* pointer_type  */
-  YYSYMBOL_structdef = 330,                /* structdef  */
-  YYSYMBOL_type = 331,                     /* type  */
-  YYSYMBOL_typedef = 332,                  /* typedef  */
-  YYSYMBOL_uniondef = 333,                 /* uniondef  */
-  YYSYMBOL_version = 334,                  /* version  */
-  YYSYMBOL_acf_statements = 335,           /* acf_statements  */
-  YYSYMBOL_acf_int_statements = 336,       /* acf_int_statements  */
-  YYSYMBOL_acf_int_statement = 337,        /* acf_int_statement  */
-  YYSYMBOL_acf_interface = 338,            /* acf_interface  */
-  YYSYMBOL_acf_attributes = 339,           /* acf_attributes  */
-  YYSYMBOL_acf_attribute_list = 340,       /* acf_attribute_list  */
-  YYSYMBOL_acf_attribute = 341,            /* acf_attribute  */
-  YYSYMBOL_allocate_option_list = 342,     /* allocate_option_list  */
-  YYSYMBOL_allocate_option = 343           /* allocate_option  */
+  YYSYMBOL_tAGILE = 27,                    /* tAGILE  */
+  YYSYMBOL_tALLNODES = 28,                 /* tALLNODES  */
+  YYSYMBOL_tALLOCATE = 29,                 /* tALLOCATE  */
+  YYSYMBOL_tANNOTATION = 30,               /* tANNOTATION  */
+  YYSYMBOL_tAPICONTRACT = 31,              /* tAPICONTRACT  */
+  YYSYMBOL_tAPPOBJECT = 32,                /* tAPPOBJECT  */
+  YYSYMBOL_tASYNC = 33,                    /* tASYNC  */
+  YYSYMBOL_tASYNCUUID = 34,                /* tASYNCUUID  */
+  YYSYMBOL_tAUTOHANDLE = 35,               /* tAUTOHANDLE  */
+  YYSYMBOL_tBINDABLE = 36,                 /* tBINDABLE  */
+  YYSYMBOL_tBOOLEAN = 37,                  /* tBOOLEAN  */
+  YYSYMBOL_tBROADCAST = 38,                /* tBROADCAST  */
+  YYSYMBOL_tBYTE = 39,                     /* tBYTE  */
+  YYSYMBOL_tBYTECOUNT = 40,                /* tBYTECOUNT  */
+  YYSYMBOL_tCALLAS = 41,                   /* tCALLAS  */
+  YYSYMBOL_tCALLBACK = 42,                 /* tCALLBACK  */
+  YYSYMBOL_tCASE = 43,                     /* tCASE  */
+  YYSYMBOL_tCDECL = 44,                    /* tCDECL  */
+  YYSYMBOL_tCHAR = 45,                     /* tCHAR  */
+  YYSYMBOL_tCOCLASS = 46,                  /* tCOCLASS  */
+  YYSYMBOL_tCODE = 47,                     /* tCODE  */
+  YYSYMBOL_tCOMMSTATUS = 48,               /* tCOMMSTATUS  */
+  YYSYMBOL_tCONST = 49,                    /* tCONST  */
+  YYSYMBOL_tCONTEXTHANDLE = 50,            /* tCONTEXTHANDLE  */
+  YYSYMBOL_tCONTEXTHANDLENOSERIALIZE = 51, /* tCONTEXTHANDLENOSERIALIZE  */
+  YYSYMBOL_tCONTEXTHANDLESERIALIZE = 52,   /* tCONTEXTHANDLESERIALIZE  */
+  YYSYMBOL_tCONTRACT = 53,                 /* tCONTRACT  */
+  YYSYMBOL_tCONTRACTVERSION = 54,          /* tCONTRACTVERSION  */
+  YYSYMBOL_tCONTROL = 55,                  /* tCONTROL  */
+  YYSYMBOL_tCPPQUOTE = 56,                 /* tCPPQUOTE  */
+  YYSYMBOL_tCUSTOM = 57,                   /* tCUSTOM  */
+  YYSYMBOL_tDECODE = 58,                   /* tDECODE  */
+  YYSYMBOL_tDEFAULT = 59,                  /* tDEFAULT  */
+  YYSYMBOL_tDEFAULTBIND = 60,              /* tDEFAULTBIND  */
+  YYSYMBOL_tDEFAULTCOLLELEM = 61,          /* tDEFAULTCOLLELEM  */
+  YYSYMBOL_tDEFAULTVALUE = 62,             /* tDEFAULTVALUE  */
+  YYSYMBOL_tDEFAULTVTABLE = 63,            /* tDEFAULTVTABLE  */
+  YYSYMBOL_tDISABLECONSISTENCYCHECK = 64,  /* tDISABLECONSISTENCYCHECK  */
+  YYSYMBOL_tDISPLAYBIND = 65,              /* tDISPLAYBIND  */
+  YYSYMBOL_tDISPINTERFACE = 66,            /* tDISPINTERFACE  */
+  YYSYMBOL_tDLLNAME = 67,                  /* tDLLNAME  */
+  YYSYMBOL_tDONTFREE = 68,                 /* tDONTFREE  */
+  YYSYMBOL_tDOUBLE = 69,                   /* tDOUBLE  */
+  YYSYMBOL_tDUAL = 70,                     /* tDUAL  */
+  YYSYMBOL_tENABLEALLOCATE = 71,           /* tENABLEALLOCATE  */
+  YYSYMBOL_tENCODE = 72,                   /* tENCODE  */
+  YYSYMBOL_tENDPOINT = 73,                 /* tENDPOINT  */
+  YYSYMBOL_tENTRY = 74,                    /* tENTRY  */
+  YYSYMBOL_tENUM = 75,                     /* tENUM  */
+  YYSYMBOL_tERRORSTATUST = 76,             /* tERRORSTATUST  */
+  YYSYMBOL_tEXCLUSIVETO = 77,              /* tEXCLUSIVETO  */
+  YYSYMBOL_tEXPLICITHANDLE = 78,           /* tEXPLICITHANDLE  */
+  YYSYMBOL_tEXTERN = 79,                   /* tEXTERN  */
+  YYSYMBOL_tFALSE = 80,                    /* tFALSE  */
+  YYSYMBOL_tFASTCALL = 81,                 /* tFASTCALL  */
+  YYSYMBOL_tFAULTSTATUS = 82,              /* tFAULTSTATUS  */
+  YYSYMBOL_tFLOAT = 83,                    /* tFLOAT  */
+  YYSYMBOL_tFORCEALLOCATE = 84,            /* tFORCEALLOCATE  */
+  YYSYMBOL_tHANDLE = 85,                   /* tHANDLE  */
+  YYSYMBOL_tHANDLET = 86,                  /* tHANDLET  */
+  YYSYMBOL_tHELPCONTEXT = 87,              /* tHELPCONTEXT  */
+  YYSYMBOL_tHELPFILE = 88,                 /* tHELPFILE  */
+  YYSYMBOL_tHELPSTRING = 89,               /* tHELPSTRING  */
+  YYSYMBOL_tHELPSTRINGCONTEXT = 90,        /* tHELPSTRINGCONTEXT  */
+  YYSYMBOL_tHELPSTRINGDLL = 91,            /* tHELPSTRINGDLL  */
+  YYSYMBOL_tHIDDEN = 92,                   /* tHIDDEN  */
+  YYSYMBOL_tHYPER = 93,                    /* tHYPER  */
+  YYSYMBOL_tID = 94,                       /* tID  */
+  YYSYMBOL_tIDEMPOTENT = 95,               /* tIDEMPOTENT  */
+  YYSYMBOL_tIGNORE = 96,                   /* tIGNORE  */
+  YYSYMBOL_tIIDIS = 97,                    /* tIIDIS  */
+  YYSYMBOL_tIMMEDIATEBIND = 98,            /* tIMMEDIATEBIND  */
+  YYSYMBOL_tIMPLICITHANDLE = 99,           /* tIMPLICITHANDLE  */
+  YYSYMBOL_tIMPORT = 100,                  /* tIMPORT  */
+  YYSYMBOL_tIMPORTLIB = 101,               /* tIMPORTLIB  */
+  YYSYMBOL_tIN = 102,                      /* tIN  */
+  YYSYMBOL_tIN_LINE = 103,                 /* tIN_LINE  */
+  YYSYMBOL_tINLINE = 104,                  /* tINLINE  */
+  YYSYMBOL_tINPUTSYNC = 105,               /* tINPUTSYNC  */
+  YYSYMBOL_tINT = 106,                     /* tINT  */
+  YYSYMBOL_tINT32 = 107,                   /* tINT32  */
+  YYSYMBOL_tINT3264 = 108,                 /* tINT3264  */
+  YYSYMBOL_tINT64 = 109,                   /* tINT64  */
+  YYSYMBOL_tINTERFACE = 110,               /* tINTERFACE  */
+  YYSYMBOL_tLCID = 111,                    /* tLCID  */
+  YYSYMBOL_tLENGTHIS = 112,                /* tLENGTHIS  */
+  YYSYMBOL_tLIBRARY = 113,                 /* tLIBRARY  */
+  YYSYMBOL_tLICENSED = 114,                /* tLICENSED  */
+  YYSYMBOL_tLOCAL = 115,                   /* tLOCAL  */
+  YYSYMBOL_tLONG = 116,                    /* tLONG  */
+  YYSYMBOL_tMARSHALINGBEHAVIOR = 117,      /* tMARSHALINGBEHAVIOR  */
+  YYSYMBOL_tMAYBE = 118,                   /* tMAYBE  */
+  YYSYMBOL_tMESSAGE = 119,                 /* tMESSAGE  */
+  YYSYMBOL_tMETHODS = 120,                 /* tMETHODS  */
+  YYSYMBOL_tMODULE = 121,                  /* tMODULE  */
+  YYSYMBOL_tMTA = 122,                     /* tMTA  */
+  YYSYMBOL_tNAMESPACE = 123,               /* tNAMESPACE  */
+  YYSYMBOL_tNOCODE = 124,                  /* tNOCODE  */
+  YYSYMBOL_tNONBROWSABLE = 125,            /* tNONBROWSABLE  */
+  YYSYMBOL_tNONCREATABLE = 126,            /* tNONCREATABLE  */
+  YYSYMBOL_tNONE = 127,                    /* tNONE  */
+  YYSYMBOL_tNONEXTENSIBLE = 128,           /* tNONEXTENSIBLE  */
+  YYSYMBOL_tNOTIFY = 129,                  /* tNOTIFY  */
+  YYSYMBOL_tNOTIFYFLAG = 130,              /* tNOTIFYFLAG  */
+  YYSYMBOL_tNULL = 131,                    /* tNULL  */
+  YYSYMBOL_tOBJECT = 132,                  /* tOBJECT  */
+  YYSYMBOL_tODL = 133,                     /* tODL  */
+  YYSYMBOL_tOLEAUTOMATION = 134,           /* tOLEAUTOMATION  */
+  YYSYMBOL_tOPTIMIZE = 135,                /* tOPTIMIZE  */
+  YYSYMBOL_tOPTIONAL = 136,                /* tOPTIONAL  */
+  YYSYMBOL_tOUT = 137,                     /* tOUT  */
+  YYSYMBOL_tPARTIALIGNORE = 138,           /* tPARTIALIGNORE  */
+  YYSYMBOL_tPASCAL = 139,                  /* tPASCAL  */
+  YYSYMBOL_tPOINTERDEFAULT = 140,          /* tPOINTERDEFAULT  */
+  YYSYMBOL_tPRAGMA_WARNING = 141,          /* tPRAGMA_WARNING  */
+  YYSYMBOL_tPROGID = 142,                  /* tPROGID  */
+  YYSYMBOL_tPROPERTIES = 143,              /* tPROPERTIES  */
+  YYSYMBOL_tPROPGET = 144,                 /* tPROPGET  */
+  YYSYMBOL_tPROPPUT = 145,                 /* tPROPPUT  */
+  YYSYMBOL_tPROPPUTREF = 146,              /* tPROPPUTREF  */
+  YYSYMBOL_tPROXY = 147,                   /* tPROXY  */
+  YYSYMBOL_tPTR = 148,                     /* tPTR  */
+  YYSYMBOL_tPUBLIC = 149,                  /* tPUBLIC  */
+  YYSYMBOL_tRANGE = 150,                   /* tRANGE  */
+  YYSYMBOL_tREADONLY = 151,                /* tREADONLY  */
+  YYSYMBOL_tREF = 152,                     /* tREF  */
+  YYSYMBOL_tREGISTER = 153,                /* tREGISTER  */
+  YYSYMBOL_tREPRESENTAS = 154,             /* tREPRESENTAS  */
+  YYSYMBOL_tREQUESTEDIT = 155,             /* tREQUESTEDIT  */
+  YYSYMBOL_tRESTRICTED = 156,              /* tRESTRICTED  */
+  YYSYMBOL_tRETVAL = 157,                  /* tRETVAL  */
+  YYSYMBOL_tRUNTIMECLASS = 158,            /* tRUNTIMECLASS  */
+  YYSYMBOL_tSAFEARRAY = 159,               /* tSAFEARRAY  */
+  YYSYMBOL_tSHORT = 160,                   /* tSHORT  */
+  YYSYMBOL_tSIGNED = 161,                  /* tSIGNED  */
+  YYSYMBOL_tSINGLENODE = 162,              /* tSINGLENODE  */
+  YYSYMBOL_tSIZEIS = 163,                  /* tSIZEIS  */
+  YYSYMBOL_tSIZEOF = 164,                  /* tSIZEOF  */
+  YYSYMBOL_tSMALL = 165,                   /* tSMALL  */
+  YYSYMBOL_tSOURCE = 166,                  /* tSOURCE  */
+  YYSYMBOL_tSTANDARD = 167,                /* tSTANDARD  */
+  YYSYMBOL_tSTATIC = 168,                  /* tSTATIC  */
+  YYSYMBOL_tSTDCALL = 169,                 /* tSTDCALL  */
+  YYSYMBOL_tSTRICTCONTEXTHANDLE = 170,     /* tSTRICTCONTEXTHANDLE  */
+  YYSYMBOL_tSTRING = 171,                  /* tSTRING  */
+  YYSYMBOL_tSTRUCT = 172,                  /* tSTRUCT  */
+  YYSYMBOL_tSWITCH = 173,                  /* tSWITCH  */
+  YYSYMBOL_tSWITCHIS = 174,                /* tSWITCHIS  */
+  YYSYMBOL_tSWITCHTYPE = 175,              /* tSWITCHTYPE  */
+  YYSYMBOL_tTHREADING = 176,               /* tTHREADING  */
+  YYSYMBOL_tTRANSMITAS = 177,              /* tTRANSMITAS  */
+  YYSYMBOL_tTRUE = 178,                    /* tTRUE  */
+  YYSYMBOL_tTYPEDEF = 179,                 /* tTYPEDEF  */
+  YYSYMBOL_tUIDEFAULT = 180,               /* tUIDEFAULT  */
+  YYSYMBOL_tUNION = 181,                   /* tUNION  */
+  YYSYMBOL_tUNIQUE = 182,                  /* tUNIQUE  */
+  YYSYMBOL_tUNSIGNED = 183,                /* tUNSIGNED  */
+  YYSYMBOL_tUSESGETLASTERROR = 184,        /* tUSESGETLASTERROR  */
+  YYSYMBOL_tUSERMARSHAL = 185,             /* tUSERMARSHAL  */
+  YYSYMBOL_tUUID = 186,                    /* tUUID  */
+  YYSYMBOL_tV1ENUM = 187,                  /* tV1ENUM  */
+  YYSYMBOL_tVARARG = 188,                  /* tVARARG  */
+  YYSYMBOL_tVERSION = 189,                 /* tVERSION  */
+  YYSYMBOL_tVIPROGID = 190,                /* tVIPROGID  */
+  YYSYMBOL_tVOID = 191,                    /* tVOID  */
+  YYSYMBOL_tWCHAR = 192,                   /* tWCHAR  */
+  YYSYMBOL_tWIREMARSHAL = 193,             /* tWIREMARSHAL  */
+  YYSYMBOL_tAPARTMENT = 194,               /* tAPARTMENT  */
+  YYSYMBOL_tNEUTRAL = 195,                 /* tNEUTRAL  */
+  YYSYMBOL_tSINGLE = 196,                  /* tSINGLE  */
+  YYSYMBOL_tFREE = 197,                    /* tFREE  */
+  YYSYMBOL_tBOTH = 198,                    /* tBOTH  */
+  YYSYMBOL_199_ = 199,                     /* ','  */
+  YYSYMBOL_200_ = 200,                     /* '?'  */
+  YYSYMBOL_201_ = 201,                     /* ':'  */
+  YYSYMBOL_202_ = 202,                     /* '|'  */
+  YYSYMBOL_203_ = 203,                     /* '^'  */
+  YYSYMBOL_204_ = 204,                     /* '&'  */
+  YYSYMBOL_205_ = 205,                     /* '<'  */
+  YYSYMBOL_206_ = 206,                     /* '>'  */
+  YYSYMBOL_207_ = 207,                     /* '-'  */
+  YYSYMBOL_208_ = 208,                     /* '+'  */
+  YYSYMBOL_209_ = 209,                     /* '*'  */
+  YYSYMBOL_210_ = 210,                     /* '/'  */
+  YYSYMBOL_211_ = 211,                     /* '%'  */
+  YYSYMBOL_212_ = 212,                     /* '!'  */
+  YYSYMBOL_213_ = 213,                     /* '~'  */
+  YYSYMBOL_CAST = 214,                     /* CAST  */
+  YYSYMBOL_PPTR = 215,                     /* PPTR  */
+  YYSYMBOL_POS = 216,                      /* POS  */
+  YYSYMBOL_NEG = 217,                      /* NEG  */
+  YYSYMBOL_ADDRESSOF = 218,                /* ADDRESSOF  */
+  YYSYMBOL_219_ = 219,                     /* '.'  */
+  YYSYMBOL_220_ = 220,                     /* '['  */
+  YYSYMBOL_221_ = 221,                     /* ']'  */
+  YYSYMBOL_222_ = 222,                     /* '{'  */
+  YYSYMBOL_223_ = 223,                     /* '}'  */
+  YYSYMBOL_224_ = 224,                     /* ';'  */
+  YYSYMBOL_225_ = 225,                     /* '('  */
+  YYSYMBOL_226_ = 226,                     /* ')'  */
+  YYSYMBOL_227_ = 227,                     /* '='  */
+  YYSYMBOL_YYACCEPT = 228,                 /* $accept  */
+  YYSYMBOL_input = 229,                    /* input  */
+  YYSYMBOL_m_acf = 230,                    /* m_acf  */
+  YYSYMBOL_gbl_statements = 231,           /* gbl_statements  */
+  YYSYMBOL_232_1 = 232,                    /* $@1  */
+  YYSYMBOL_imp_statements = 233,           /* imp_statements  */
+  YYSYMBOL_234_2 = 234,                    /* $@2  */
+  YYSYMBOL_int_statements = 235,           /* int_statements  */
+  YYSYMBOL_semicolon_opt = 236,            /* semicolon_opt  */
+  YYSYMBOL_statement = 237,                /* statement  */
+  YYSYMBOL_pragma_warning = 238,           /* pragma_warning  */
+  YYSYMBOL_warnings = 239,                 /* warnings  */
+  YYSYMBOL_typedecl = 240,                 /* typedecl  */
+  YYSYMBOL_cppquote = 241,                 /* cppquote  */
+  YYSYMBOL_import_start = 242,             /* import_start  */
+  YYSYMBOL_import = 243,                   /* import  */
+  YYSYMBOL_importlib = 244,                /* importlib  */
+  YYSYMBOL_libraryhdr = 245,               /* libraryhdr  */
+  YYSYMBOL_library_start = 246,            /* library_start  */
+  YYSYMBOL_librarydef = 247,               /* librarydef  */
+  YYSYMBOL_m_args = 248,                   /* m_args  */
+  YYSYMBOL_arg_list = 249,                 /* arg_list  */
+  YYSYMBOL_args = 250,                     /* args  */
+  YYSYMBOL_arg = 251,                      /* arg  */
+  YYSYMBOL_array = 252,                    /* array  */
+  YYSYMBOL_m_attributes = 253,             /* m_attributes  */
+  YYSYMBOL_attributes = 254,               /* attributes  */
+  YYSYMBOL_attrib_list = 255,              /* attrib_list  */
+  YYSYMBOL_str_list = 256,                 /* str_list  */
+  YYSYMBOL_marshaling_behavior = 257,      /* marshaling_behavior  */
+  YYSYMBOL_contract_ver = 258,             /* contract_ver  */
+  YYSYMBOL_contract_req = 259,             /* contract_req  */
+  YYSYMBOL_attribute = 260,                /* attribute  */
+  YYSYMBOL_uuid_string = 261,              /* uuid_string  */
+  YYSYMBOL_callconv = 262,                 /* callconv  */
+  YYSYMBOL_cases = 263,                    /* cases  */
+  YYSYMBOL_case = 264,                     /* case  */
+  YYSYMBOL_enums = 265,                    /* enums  */
+  YYSYMBOL_enum_list = 266,                /* enum_list  */
+  YYSYMBOL_enum_member = 267,              /* enum_member  */
+  YYSYMBOL_enum = 268,                     /* enum  */
+  YYSYMBOL_enumdef = 269,                  /* enumdef  */
+  YYSYMBOL_m_exprs = 270,                  /* m_exprs  */
+  YYSYMBOL_m_expr = 271,                   /* m_expr  */
+  YYSYMBOL_expr = 272,                     /* expr  */
+  YYSYMBOL_expr_list_int_const = 273,      /* expr_list_int_const  */
+  YYSYMBOL_expr_int_const = 274,           /* expr_int_const  */
+  YYSYMBOL_expr_const = 275,               /* expr_const  */
+  YYSYMBOL_fields = 276,                   /* fields  */
+  YYSYMBOL_field = 277,                    /* field  */
+  YYSYMBOL_ne_union_field = 278,           /* ne_union_field  */
+  YYSYMBOL_ne_union_fields = 279,          /* ne_union_fields  */
+  YYSYMBOL_union_field = 280,              /* union_field  */
+  YYSYMBOL_s_field = 281,                  /* s_field  */
+  YYSYMBOL_funcdef = 282,                  /* funcdef  */
+  YYSYMBOL_declaration = 283,              /* declaration  */
+  YYSYMBOL_m_ident = 284,                  /* m_ident  */
+  YYSYMBOL_t_ident = 285,                  /* t_ident  */
+  YYSYMBOL_ident = 286,                    /* ident  */
+  YYSYMBOL_base_type = 287,                /* base_type  */
+  YYSYMBOL_m_int = 288,                    /* m_int  */
+  YYSYMBOL_int_std = 289,                  /* int_std  */
+  YYSYMBOL_qualified_seq = 290,            /* qualified_seq  */
+  YYSYMBOL_291_3 = 291,                    /* $@3  */
+  YYSYMBOL_qualified_type = 292,           /* qualified_type  */
+  YYSYMBOL_293_4 = 293,                    /* $@4  */
+  YYSYMBOL_coclass = 294,                  /* coclass  */
+  YYSYMBOL_coclasshdr = 295,               /* coclasshdr  */
+  YYSYMBOL_coclassdef = 296,               /* coclassdef  */
+  YYSYMBOL_runtimeclass = 297,             /* runtimeclass  */
+  YYSYMBOL_runtimeclass_hdr = 298,         /* runtimeclass_hdr  */
+  YYSYMBOL_runtimeclass_def = 299,         /* runtimeclass_def  */
+  YYSYMBOL_apicontract = 300,              /* apicontract  */
+  YYSYMBOL_namespacedef = 301,             /* namespacedef  */
+  YYSYMBOL_class_interfaces = 302,         /* class_interfaces  */
+  YYSYMBOL_class_interface = 303,          /* class_interface  */
+  YYSYMBOL_dispinterface = 304,            /* dispinterface  */
+  YYSYMBOL_dispinterfacehdr = 305,         /* dispinterfacehdr  */
+  YYSYMBOL_dispint_props = 306,            /* dispint_props  */
+  YYSYMBOL_dispint_meths = 307,            /* dispint_meths  */
+  YYSYMBOL_dispinterfacedef = 308,         /* dispinterfacedef  */
+  YYSYMBOL_inherit = 309,                  /* inherit  */
+  YYSYMBOL_interface = 310,                /* interface  */
+  YYSYMBOL_interfacehdr = 311,             /* interfacehdr  */
+  YYSYMBOL_interfacedef = 312,             /* interfacedef  */
+  YYSYMBOL_interfacedec = 313,             /* interfacedec  */
+  YYSYMBOL_module = 314,                   /* module  */
+  YYSYMBOL_modulehdr = 315,                /* modulehdr  */
+  YYSYMBOL_moduledef = 316,                /* moduledef  */
+  YYSYMBOL_storage_cls_spec = 317,         /* storage_cls_spec  */
+  YYSYMBOL_function_specifier = 318,       /* function_specifier  */
+  YYSYMBOL_type_qualifier = 319,           /* type_qualifier  */
+  YYSYMBOL_m_type_qual_list = 320,         /* m_type_qual_list  */
+  YYSYMBOL_decl_spec = 321,                /* decl_spec  */
+  YYSYMBOL_m_decl_spec_no_type = 322,      /* m_decl_spec_no_type  */
+  YYSYMBOL_decl_spec_no_type = 323,        /* decl_spec_no_type  */
+  YYSYMBOL_declarator = 324,               /* declarator  */
+  YYSYMBOL_direct_declarator = 325,        /* direct_declarator  */
+  YYSYMBOL_abstract_declarator = 326,      /* abstract_declarator  */
+  YYSYMBOL_abstract_declarator_no_direct = 327, /* abstract_declarator_no_direct  */
+  YYSYMBOL_m_abstract_declarator = 328,    /* m_abstract_declarator  */
+  YYSYMBOL_abstract_direct_declarator = 329, /* abstract_direct_declarator  */
+  YYSYMBOL_any_declarator = 330,           /* any_declarator  */
+  YYSYMBOL_any_declarator_no_direct = 331, /* any_declarator_no_direct  */
+  YYSYMBOL_m_any_declarator = 332,         /* m_any_declarator  */
+  YYSYMBOL_any_direct_declarator = 333,    /* any_direct_declarator  */
+  YYSYMBOL_declarator_list = 334,          /* declarator_list  */
+  YYSYMBOL_m_bitfield = 335,               /* m_bitfield  */
+  YYSYMBOL_struct_declarator = 336,        /* struct_declarator  */
+  YYSYMBOL_struct_declarator_list = 337,   /* struct_declarator_list  */
+  YYSYMBOL_init_declarator = 338,          /* init_declarator  */
+  YYSYMBOL_threading_type = 339,           /* threading_type  */
+  YYSYMBOL_pointer_type = 340,             /* pointer_type  */
+  YYSYMBOL_structdef = 341,                /* structdef  */
+  YYSYMBOL_type = 342,                     /* type  */
+  YYSYMBOL_typedef = 343,                  /* typedef  */
+  YYSYMBOL_uniondef = 344,                 /* uniondef  */
+  YYSYMBOL_version = 345,                  /* version  */
+  YYSYMBOL_acf_statements = 346,           /* acf_statements  */
+  YYSYMBOL_acf_int_statements = 347,       /* acf_int_statements  */
+  YYSYMBOL_acf_int_statement = 348,        /* acf_int_statement  */
+  YYSYMBOL_acf_interface = 349,            /* acf_interface  */
+  YYSYMBOL_acf_attributes = 350,           /* acf_attributes  */
+  YYSYMBOL_acf_attribute_list = 351,       /* acf_attribute_list  */
+  YYSYMBOL_acf_attribute = 352,            /* acf_attribute  */
+  YYSYMBOL_allocate_option_list = 353,     /* allocate_option_list  */
+  YYSYMBOL_allocate_option = 354           /* allocate_option  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -1152,19 +1171,19 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3046
+#define YYLAST   3307
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  221
+#define YYNTOKENS  228
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  123
+#define YYNNTS  127
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  434
+#define YYNRULES  448
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  770
+#define YYNSTATES  797
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   451
+#define YYMAXUTOK   458
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -1181,16 +1200,16 @@
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   205,     2,     2,     2,   204,   197,     2,
-     218,   219,   202,   201,   192,   200,   212,   203,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   194,   217,
-     198,   220,   199,   193,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   212,     2,     2,     2,   211,   204,     2,
+     225,   226,   209,   208,   199,   207,   219,   210,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   201,   224,
+     205,   227,   206,   200,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   213,     2,   214,   196,     2,     2,     2,     2,     2,
+       2,   220,     2,   221,   203,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   215,   195,   216,   206,     2,     2,     2,
+       2,     2,     2,   222,   202,   223,   213,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1222,58 +1241,59 @@
      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
      175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   207,   208,   209,
-     210,   211
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   214,   215,   216,   217,   218
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   331,   331,   345,   345,   347,   348,   348,   350,   351,
-     352,   355,   358,   360,   361,   362,   365,   366,   367,   367,
-     369,   370,   371,   374,   376,   377,   378,   379,   382,   383,
-     386,   387,   391,   392,   393,   394,   395,   396,   397,   400,
-     411,   412,   416,   417,   418,   419,   420,   421,   422,   423,
-     424,   427,   429,   437,   443,   447,   448,   450,   454,   458,
-     459,   462,   463,   466,   467,   471,   476,   483,   487,   488,
-     491,   492,   496,   499,   500,   501,   504,   505,   509,   510,
-     513,   519,   520,   521,   522,   523,   524,   525,   526,   527,
-     528,   529,   530,   531,   532,   533,   534,   535,   536,   537,
-     538,   539,   540,   541,   542,   543,   544,   545,   546,   547,
-     548,   549,   550,   551,   552,   553,   554,   555,   556,   557,
-     558,   559,   560,   561,   562,   563,   564,   565,   566,   567,
-     568,   569,   570,   571,   572,   573,   574,   575,   576,   577,
-     578,   579,   580,   581,   582,   583,   584,   585,   586,   587,
-     588,   589,   590,   591,   592,   593,   594,   595,   596,   597,
-     601,   602,   603,   604,   605,   606,   607,   608,   609,   610,
-     611,   612,   613,   614,   615,   616,   617,   618,   619,   620,
-     621,   622,   623,   624,   628,   629,   634,   635,   636,   637,
-     640,   641,   644,   648,   654,   655,   656,   659,   663,   675,
-     680,   684,   689,   692,   693,   696,   697,   700,   701,   702,
-     703,   704,   705,   706,   707,   708,   709,   710,   711,   712,
-     713,   714,   715,   716,   717,   718,   719,   720,   721,   722,
-     723,   724,   725,   726,   727,   728,   729,   730,   731,   732,
-     733,   734,   735,   736,   737,   739,   741,   742,   745,   746,
-     749,   755,   761,   762,   765,   770,   777,   778,   781,   782,
-     786,   787,   790,   794,   800,   808,   812,   817,   818,   821,
-     822,   823,   826,   828,   831,   832,   833,   834,   835,   836,
-     837,   838,   839,   840,   841,   844,   845,   848,   849,   850,
-     851,   852,   853,   854,   855,   856,   860,   861,   861,   865,
-     866,   866,   869,   870,   878,   884,   888,   895,   896,   899,
-     900,   904,   907,   908,   911,   920,   921,   924,   925,   928,
-     934,   940,   941,   944,   945,   948,   955,   964,   969,   973,
-     974,   977,   978,   981,   986,   993,   994,   995,   999,  1003,
-    1006,  1007,  1010,  1011,  1015,  1016,  1020,  1021,  1022,  1026,
-    1028,  1029,  1033,  1034,  1035,  1036,  1041,  1043,  1044,  1049,
-    1051,  1055,  1056,  1061,  1062,  1063,  1064,  1068,  1076,  1078,
-    1079,  1084,  1086,  1090,  1091,  1098,  1099,  1100,  1101,  1102,
-    1106,  1113,  1114,  1117,  1118,  1121,  1128,  1129,  1134,  1135,
-    1139,  1140,  1141,  1142,  1143,  1147,  1148,  1149,  1152,  1155,
-    1156,  1157,  1158,  1159,  1160,  1161,  1162,  1163,  1164,  1167,
-    1174,  1176,  1182,  1183,  1184,  1188,  1189,  1193,  1194,  1198,
-    1205,  1214,  1215,  1219,  1220,  1224,  1226,  1227,  1228,  1232,
-    1233,  1238,  1239,  1240,  1241
+       0,   341,   341,   355,   355,   357,   358,   358,   360,   361,
+     362,   365,   368,   370,   371,   373,   374,   375,   378,   379,
+     380,   380,   382,   383,   384,   387,   389,   390,   392,   393,
+     394,   395,   398,   399,   402,   403,   407,   408,   409,   410,
+     411,   412,   413,   416,   427,   428,   432,   433,   434,   435,
+     436,   437,   438,   439,   440,   443,   445,   453,   459,   463,
+     464,   466,   470,   474,   475,   478,   479,   482,   483,   487,
+     492,   499,   503,   504,   507,   508,   512,   515,   516,   517,
+     520,   521,   525,   526,   527,   531,   532,   535,   541,   542,
+     543,   544,   545,   546,   547,   548,   549,   550,   551,   552,
+     553,   554,   555,   556,   557,   558,   559,   560,   561,   562,
+     563,   564,   565,   566,   567,   568,   569,   570,   571,   572,
+     573,   574,   577,   578,   579,   580,   581,   582,   583,   584,
+     585,   586,   587,   588,   589,   590,   591,   592,   593,   594,
+     595,   596,   597,   598,   599,   600,   602,   603,   604,   605,
+     606,   607,   608,   609,   610,   611,   612,   613,   614,   615,
+     616,   617,   618,   619,   620,   621,   622,   623,   624,   628,
+     629,   630,   631,   632,   633,   634,   635,   636,   637,   638,
+     639,   640,   641,   642,   643,   644,   645,   646,   647,   648,
+     649,   650,   651,   655,   656,   661,   662,   663,   664,   667,
+     668,   671,   675,   681,   682,   683,   686,   690,   702,   707,
+     711,   716,   719,   720,   723,   724,   727,   728,   729,   730,
+     731,   732,   733,   734,   735,   736,   737,   738,   739,   740,
+     741,   742,   743,   744,   745,   746,   747,   748,   749,   750,
+     751,   752,   753,   754,   755,   756,   757,   758,   759,   760,
+     761,   762,   763,   764,   766,   768,   769,   772,   773,   776,
+     782,   788,   789,   792,   797,   804,   805,   808,   809,   813,
+     814,   817,   821,   827,   835,   839,   844,   845,   848,   849,
+     850,   853,   855,   858,   859,   860,   861,   862,   863,   864,
+     865,   866,   867,   868,   871,   872,   875,   876,   877,   878,
+     879,   880,   881,   882,   883,   887,   888,   888,   892,   893,
+     893,   896,   897,   905,   911,   916,   917,   924,   930,   934,
+     941,   942,   945,   946,   950,   953,   954,   957,   966,   967,
+     970,   971,   974,   980,   986,   987,   990,   991,   994,  1001,
+    1010,  1015,  1019,  1020,  1023,  1024,  1027,  1032,  1039,  1040,
+    1041,  1045,  1049,  1052,  1053,  1056,  1057,  1061,  1062,  1066,
+    1067,  1068,  1072,  1074,  1075,  1079,  1080,  1081,  1082,  1087,
+    1089,  1090,  1095,  1097,  1101,  1102,  1107,  1108,  1109,  1110,
+    1114,  1122,  1124,  1125,  1130,  1132,  1136,  1137,  1144,  1145,
+    1146,  1147,  1148,  1152,  1159,  1160,  1163,  1164,  1167,  1174,
+    1175,  1180,  1181,  1185,  1186,  1187,  1188,  1189,  1190,  1194,
+    1195,  1196,  1199,  1202,  1203,  1204,  1205,  1206,  1207,  1208,
+    1209,  1210,  1211,  1214,  1221,  1223,  1229,  1230,  1231,  1235,
+    1236,  1240,  1241,  1245,  1252,  1261,  1262,  1266,  1267,  1271,
+    1273,  1274,  1275,  1279,  1280,  1285,  1286,  1287,  1288
 };
 #endif
 
@@ -1294,35 +1314,37 @@
   "aSTRING", "aWSTRING", "aSQSTRING", "aUUID", "aEOF", "aACF", "SHL",
   "SHR", "MEMBERPTR", "EQUALITY", "INEQUALITY", "GREATEREQUAL",
   "LESSEQUAL", "LOGICALOR", "LOGICALAND", "ELLIPSIS", "tAGGREGATABLE",
-  "tALLNODES", "tALLOCATE", "tANNOTATION", "tAPICONTRACT", "tAPPOBJECT",
-  "tASYNC", "tASYNCUUID", "tAUTOHANDLE", "tBINDABLE", "tBOOLEAN",
-  "tBROADCAST", "tBYTE", "tBYTECOUNT", "tCALLAS", "tCALLBACK", "tCASE",
-  "tCDECL", "tCHAR", "tCOCLASS", "tCODE", "tCOMMSTATUS", "tCONST",
+  "tAGILE", "tALLNODES", "tALLOCATE", "tANNOTATION", "tAPICONTRACT",
+  "tAPPOBJECT", "tASYNC", "tASYNCUUID", "tAUTOHANDLE", "tBINDABLE",
+  "tBOOLEAN", "tBROADCAST", "tBYTE", "tBYTECOUNT", "tCALLAS", "tCALLBACK",
+  "tCASE", "tCDECL", "tCHAR", "tCOCLASS", "tCODE", "tCOMMSTATUS", "tCONST",
   "tCONTEXTHANDLE", "tCONTEXTHANDLENOSERIALIZE", "tCONTEXTHANDLESERIALIZE",
   "tCONTRACT", "tCONTRACTVERSION", "tCONTROL", "tCPPQUOTE", "tCUSTOM",
   "tDECODE", "tDEFAULT", "tDEFAULTBIND", "tDEFAULTCOLLELEM",
   "tDEFAULTVALUE", "tDEFAULTVTABLE", "tDISABLECONSISTENCYCHECK",
   "tDISPLAYBIND", "tDISPINTERFACE", "tDLLNAME", "tDONTFREE", "tDOUBLE",
   "tDUAL", "tENABLEALLOCATE", "tENCODE", "tENDPOINT", "tENTRY", "tENUM",
-  "tERRORSTATUST", "tEXPLICITHANDLE", "tEXTERN", "tFALSE", "tFASTCALL",
-  "tFAULTSTATUS", "tFLOAT", "tFORCEALLOCATE", "tHANDLE", "tHANDLET",
-  "tHELPCONTEXT", "tHELPFILE", "tHELPSTRING", "tHELPSTRINGCONTEXT",
-  "tHELPSTRINGDLL", "tHIDDEN", "tHYPER", "tID", "tIDEMPOTENT", "tIGNORE",
-  "tIIDIS", "tIMMEDIATEBIND", "tIMPLICITHANDLE", "tIMPORT", "tIMPORTLIB",
-  "tIN", "tIN_LINE", "tINLINE", "tINPUTSYNC", "tINT", "tINT32", "tINT3264",
-  "tINT64", "tINTERFACE", "tLCID", "tLENGTHIS", "tLIBRARY", "tLICENSED",
-  "tLOCAL", "tLONG", "tMAYBE", "tMESSAGE", "tMETHODS", "tMODULE",
-  "tNAMESPACE", "tNOCODE", "tNONBROWSABLE", "tNONCREATABLE",
-  "tNONEXTENSIBLE", "tNOTIFY", "tNOTIFYFLAG", "tNULL", "tOBJECT", "tODL",
-  "tOLEAUTOMATION", "tOPTIMIZE", "tOPTIONAL", "tOUT", "tPARTIALIGNORE",
-  "tPASCAL", "tPOINTERDEFAULT", "tPRAGMA_WARNING", "tPROGID",
-  "tPROPERTIES", "tPROPGET", "tPROPPUT", "tPROPPUTREF", "tPROXY", "tPTR",
-  "tPUBLIC", "tRANGE", "tREADONLY", "tREF", "tREGISTER", "tREPRESENTAS",
-  "tREQUESTEDIT", "tRESTRICTED", "tRETVAL", "tSAFEARRAY", "tSHORT",
-  "tSIGNED", "tSINGLENODE", "tSIZEIS", "tSIZEOF", "tSMALL", "tSOURCE",
-  "tSTATIC", "tSTDCALL", "tSTRICTCONTEXTHANDLE", "tSTRING", "tSTRUCT",
-  "tSWITCH", "tSWITCHIS", "tSWITCHTYPE", "tTHREADING", "tTRANSMITAS",
-  "tTRUE", "tTYPEDEF", "tUIDEFAULT", "tUNION", "tUNIQUE", "tUNSIGNED",
+  "tERRORSTATUST", "tEXCLUSIVETO", "tEXPLICITHANDLE", "tEXTERN", "tFALSE",
+  "tFASTCALL", "tFAULTSTATUS", "tFLOAT", "tFORCEALLOCATE", "tHANDLE",
+  "tHANDLET", "tHELPCONTEXT", "tHELPFILE", "tHELPSTRING",
+  "tHELPSTRINGCONTEXT", "tHELPSTRINGDLL", "tHIDDEN", "tHYPER", "tID",
+  "tIDEMPOTENT", "tIGNORE", "tIIDIS", "tIMMEDIATEBIND", "tIMPLICITHANDLE",
+  "tIMPORT", "tIMPORTLIB", "tIN", "tIN_LINE", "tINLINE", "tINPUTSYNC",
+  "tINT", "tINT32", "tINT3264", "tINT64", "tINTERFACE", "tLCID",
+  "tLENGTHIS", "tLIBRARY", "tLICENSED", "tLOCAL", "tLONG",
+  "tMARSHALINGBEHAVIOR", "tMAYBE", "tMESSAGE", "tMETHODS", "tMODULE",
+  "tMTA", "tNAMESPACE", "tNOCODE", "tNONBROWSABLE", "tNONCREATABLE",
+  "tNONE", "tNONEXTENSIBLE", "tNOTIFY", "tNOTIFYFLAG", "tNULL", "tOBJECT",
+  "tODL", "tOLEAUTOMATION", "tOPTIMIZE", "tOPTIONAL", "tOUT",
+  "tPARTIALIGNORE", "tPASCAL", "tPOINTERDEFAULT", "tPRAGMA_WARNING",
+  "tPROGID", "tPROPERTIES", "tPROPGET", "tPROPPUT", "tPROPPUTREF",
+  "tPROXY", "tPTR", "tPUBLIC", "tRANGE", "tREADONLY", "tREF", "tREGISTER",
+  "tREPRESENTAS", "tREQUESTEDIT", "tRESTRICTED", "tRETVAL",
+  "tRUNTIMECLASS", "tSAFEARRAY", "tSHORT", "tSIGNED", "tSINGLENODE",
+  "tSIZEIS", "tSIZEOF", "tSMALL", "tSOURCE", "tSTANDARD", "tSTATIC",
+  "tSTDCALL", "tSTRICTCONTEXTHANDLE", "tSTRING", "tSTRUCT", "tSWITCH",
+  "tSWITCHIS", "tSWITCHTYPE", "tTHREADING", "tTRANSMITAS", "tTRUE",
+  "tTYPEDEF", "tUIDEFAULT", "tUNION", "tUNIQUE", "tUNSIGNED",
   "tUSESGETLASTERROR", "tUSERMARSHAL", "tUUID", "tV1ENUM", "tVARARG",
   "tVERSION", "tVIPROGID", "tVOID", "tWCHAR", "tWIREMARSHAL", "tAPARTMENT",
   "tNEUTRAL", "tSINGLE", "tFREE", "tBOTH", "','", "'?'", "':'", "'|'",
@@ -1334,18 +1356,19 @@
   "cppquote", "import_start", "import", "importlib", "libraryhdr",
   "library_start", "librarydef", "m_args", "arg_list", "args", "arg",
   "array", "m_attributes", "attributes", "attrib_list", "str_list",
-  "contract_ver", "contract_req", "attribute", "uuid_string", "callconv",
-  "cases", "case", "enums", "enum_list", "enum_member", "enum", "enumdef",
-  "m_exprs", "m_expr", "expr", "expr_list_int_const", "expr_int_const",
-  "expr_const", "fields", "field", "ne_union_field", "ne_union_fields",
-  "union_field", "s_field", "funcdef", "declaration", "m_ident", "t_ident",
-  "ident", "base_type", "m_int", "int_std", "qualified_seq", "$@3",
-  "qualified_type", "$@4", "coclass", "coclasshdr", "coclassdef",
-  "apicontract", "namespacedef", "coclass_ints", "coclass_int",
-  "dispinterface", "dispinterfacehdr", "dispint_props", "dispint_meths",
-  "dispinterfacedef", "inherit", "interface", "interfacehdr",
-  "interfacedef", "interfacedec", "module", "modulehdr", "moduledef",
-  "storage_cls_spec", "function_specifier", "type_qualifier",
+  "marshaling_behavior", "contract_ver", "contract_req", "attribute",
+  "uuid_string", "callconv", "cases", "case", "enums", "enum_list",
+  "enum_member", "enum", "enumdef", "m_exprs", "m_expr", "expr",
+  "expr_list_int_const", "expr_int_const", "expr_const", "fields", "field",
+  "ne_union_field", "ne_union_fields", "union_field", "s_field", "funcdef",
+  "declaration", "m_ident", "t_ident", "ident", "base_type", "m_int",
+  "int_std", "qualified_seq", "$@3", "qualified_type", "$@4", "coclass",
+  "coclasshdr", "coclassdef", "runtimeclass", "runtimeclass_hdr",
+  "runtimeclass_def", "apicontract", "namespacedef", "class_interfaces",
+  "class_interface", "dispinterface", "dispinterfacehdr", "dispint_props",
+  "dispint_meths", "dispinterfacedef", "inherit", "interface",
+  "interfacehdr", "interfacedef", "interfacedec", "module", "modulehdr",
+  "moduledef", "storage_cls_spec", "function_specifier", "type_qualifier",
   "m_type_qual_list", "decl_spec", "m_decl_spec_no_type",
   "decl_spec_no_type", "declarator", "direct_declarator",
   "abstract_declarator", "abstract_declarator_no_direct",
@@ -1390,19 +1413,19 @@
      415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
      425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
      435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
-     445,   446,    44,    63,    58,   124,    94,    38,    60,    62,
-      45,    43,    42,    47,    37,    33,   126,   447,   448,   449,
-     450,   451,    46,    91,    93,   123,   125,    59,    40,    41,
-      61
+     445,   446,   447,   448,   449,   450,   451,   452,   453,    44,
+      63,    58,   124,    94,    38,    60,    62,    45,    43,    42,
+      47,    37,    33,   126,   454,   455,   456,   457,   458,    46,
+      91,    93,   123,   125,    59,    40,    41,    61
 };
 #endif
 
-#define YYPACT_NINF (-598)
+#define YYPACT_NINF (-618)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF (-422)
+#define YYTABLE_NINF (-436)
 
 #define yytable_value_is_error(Yyn) \
   0
@@ -1411,83 +1434,86 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    -598,    80,  1572,  -598,  -598,  -598,  -112,   -69,  -598,  -598,
-    -598,   175,  -598,   -79,   236,  -598,   244,  -598,  -598,  -598,
-    -598,    48,   150,  -598,  -598,  -598,  -598,  -598,   283,    48,
-     125,   -44,  -598,    -6,    48,   359,  -598,  -598,   294,   309,
-     359,  -598,  -598,  2860,  -598,  -598,  -598,   -23,  -598,  -598,
-    -598,  -598,  -598,    44,  2590,     8,     9,  -598,  -598,  -598,
-      18,    33,  -598,    46,    56,    55,    83,    62,    66,    97,
-    -598,  -598,    86,  -598,   356,   356,   356,    76,  2714,    85,
-     356,    94,    99,  -598,    21,  -598,   -69,   211,  -598,  -598,
-     310,  -598,  -598,   136,  -598,   137,  -598,  -598,   140,  -598,
-    -598,  -598,  -598,  -598,   361,  2714,  -598,  -598,   144,   152,
-    -113,   -97,  -598,  -598,   153,  -598,  -598,   154,  -598,  -598,
-    -598,   164,   165,  -598,  -598,  -598,  -598,  -598,   169,   173,
-    -598,   176,  -598,  -598,  -598,  -598,   184,  -598,  -598,  -598,
-     188,  -598,  -598,  -598,   191,   194,  -598,  -598,  -598,  -598,
-     195,   209,   210,   221,   224,  -598,   231,  -598,  -598,   233,
-    -598,   237,  -598,  -598,   238,   249,  -598,  -598,  -598,  -598,
-    -598,  -598,  -598,  -598,  -598,  -598,  -598,  -598,  -598,   251,
-    -598,  -598,  -598,   253,   258,  -598,  -598,  -598,  -598,  -598,
-    -598,   281,  -598,  -598,   282,  -598,  -598,  -598,   284,  -598,
-    -598,  -598,   285,   287,   291,   293,  -598,  -598,  -598,   296,
-     297,  -598,  -598,   298,   303,   304,   -66,  -598,  -598,  -598,
-    1705,   867,   155,   374,   373,   385,   392,   395,   402,   232,
-     245,  -598,  -598,  -598,  -598,    76,   295,   311,  -598,  -598,
-    -598,  -598,  -598,  -598,   -45,  -598,  -598,  -598,   181,   286,
-    -598,  -598,  -598,  -598,  -598,  -598,  -598,  -598,  -598,  -598,
-    -598,  -598,    76,    76,  -598,   234,  -147,  -598,  -598,  -598,
-     356,  -598,  -598,  -598,   420,   308,  -598,  -598,  -598,   -55,
-    -598,  -598,   522,   312,   -81,  -598,   335,   313,  -598,   315,
-    -598,   520,   178,   440,   728,  2625,   527,   178,   728,   525,
-     526,   728,   728,   528,   530,   728,   531,   728,   728,  2123,
-     728,   728,   533,   -48,   534,   728,  2714,   728,   728,  2714,
-     247,  2714,  2714,   178,   159,   535,  2714,  2860,   324,  -598,
-     328,  -598,  -598,  -598,   332,  -598,   333,   336,  -598,  -598,
-    -598,    62,  2625,  -598,   337,   338,  -598,  -598,  -598,  -598,
-     338,   -92,  -598,  -598,    -8,  -598,   360,   -59,   339,   340,
-    -598,  -598,  1204,    42,   341,  -598,   728,   103,  2123,  -598,
-    -598,   345,  -598,  -598,    27,    21,  -598,   344,  -598,   440,
-     346,   369,   347,  -598,   557,  -598,    -7,   155,    24,   349,
-    -598,  -598,   350,   351,  -598,  -598,  -598,  -598,  -598,  -598,
-    -598,  -598,  -598,   353,  -598,   728,   728,   728,   728,   728,
-     728,   643,  2381,  -133,  -598,   357,   386,   376,   370,   399,
-    2381,   371,   384,  -598,  -116,   387,   388,   389,   390,   393,
-     401,   404,   563,   408,  2625,   208,   409,   -83,  -598,  2381,
-     410,   411,   412,   426,   414,   -76,  2156,   415,  -598,  -598,
-    -598,  -598,  -598,   416,   417,   418,   419,   427,  -598,   421,
-     423,   425,  -598,  2860,   555,  -598,  -598,  -598,  -598,    76,
-     405,    62,    -3,  -598,  1115,  -598,   451,  2625,   430,  1448,
-     441,   506,  1239,    62,  -598,  2625,  -598,  -598,  -598,  -598,
-     663,  -598,  2293,   437,   466,  -598,  -598,  -598,  -598,  -598,
-    -598,  -598,   -68,  -598,  -598,   433,  -598,  -598,    68,   728,
-    -598,    26,  -598,  2625,  -598,   442,  -598,   443,  -598,   445,
-    -598,  -598,  -598,  2625,     2,     2,     2,     2,     2,     2,
-    2222,   239,   728,   728,   656,   728,   728,   728,   728,   728,
-     728,   728,   728,   728,   728,   728,   728,   728,   728,   728,
-     728,   728,   660,   728,   728,  -598,  -598,   527,   657,  -598,
-     728,  -598,  -598,   658,  -598,  -598,  -598,  -598,  -598,  -598,
-    -598,  -598,  -598,  -598,   208,  -598,  1794,  -598,   208,  -598,
-    -598,  -598,  -141,  -598,   728,  -598,  -598,  -598,  -598,   728,
-    -598,  -598,  -598,  -598,  -598,  -598,  -598,  -598,   662,  -598,
-    -598,  -598,  -598,   448,  -598,  -598,   484,  -598,  -598,  -598,
-    -598,  -598,    76,   229,  -598,  -598,  2625,   460,  -598,  -598,
-    -598,    62,  -598,  -598,  -598,  -598,  2034,   420,    27,  -598,
-     465,   464,   433,  -598,  -598,  -598,  -598,   208,   467,   440,
-    -598,  -598,   239,  -598,  -598,  1914,  -598,   239,  -598,   463,
-     -71,    64,    64,  -598,  1833,  1833,   413,   413,   398,  2247,
-    2360,  2411,  1564,  1893,   413,   413,   143,   143,     2,     2,
-       2,  -598,  2321,  -598,  -598,  -598,   469,  -598,  -598,    41,
-    -598,   471,   208,   475,  -598,  2123,  -598,  -598,   478,  -598,
-      62,   991,    76,  -598,  -598,  1328,  -598,  -598,  -598,  -598,
-    -598,   680,  -598,  -598,   492,  -598,   -67,  -598,   485,  -598,
-     480,   306,  -598,   482,   208,   486,  -598,   728,  2123,  -598,
-     728,  -598,  -598,  -598,    41,  -598,  -598,  -598,   487,  -598,
-    -598,  -598,  -598,    62,   490,   728,  -598,   208,  -598,  -598,
-    -598,  -598,    41,  -598,  -598,  -598,     2,   491,  2381,  -598,
-    -598,  -598,  -598,  -598,  -598,    15,  -598,  -598,   728,   509,
-    -598,  -598,   515,  -130,  -130,  -598,  -598,   495,  -598,  -598
+    -618,    71,  1776,  -618,  -618,  -618,  -136,   -68,  -618,  -618,
+    -618,   185,  -618,  -121,   229,  -618,   263,  -618,  -618,  -618,
+    -618,    35,   117,  -618,  -618,  -618,  -618,  -618,   299,    35,
+     164,   -51,  -618,   306,   -47,    35,   325,  -618,  -618,   315,
+     318,   325,  -618,  -618,  3114,  -618,  -618,  -618,   -35,  -618,
+    -618,  -618,  -618,  -618,   -23,  2774,   -26,   -11,  -618,  -618,
+    -618,     4,   -45,  -618,    15,    -3,  -618,    51,    36,    55,
+      54,    58,    70,    37,  -618,  -618,    88,  -618,    -5,    -5,
+      -5,    81,  2962,    90,    -5,    98,   104,  -618,    40,  -618,
+     -68,   195,  -618,  -618,   322,  -618,  -618,   105,  -618,   115,
+    -618,  -618,   114,  -618,  -618,  -618,  -618,  -618,   360,  -618,
+    -618,  2962,  -618,  -618,   109,   153,  -107,  -101,  -618,  -618,
+     158,  -618,  -618,   159,  -618,  -618,  -618,   170,   174,  -618,
+    -618,  -618,  -618,  -618,   175,   180,  -618,   197,  -618,  -618,
+    -618,  -618,   202,  -618,  -618,  -618,   210,  -618,  -618,  -618,
+     211,   212,   213,  -618,  -618,  -618,  -618,   215,   217,   225,
+     235,   236,  -618,   237,  -618,  -618,   239,  -618,   240,  -618,
+    -618,   241,   243,  -618,  -618,   244,  -618,  -618,  -618,  -618,
+    -618,  -618,  -618,  -618,  -618,  -618,  -618,   245,  -618,  -618,
+    -618,   246,   247,  -618,  -618,  -618,  -618,  -618,  -618,   248,
+    -618,  -618,   252,  -618,  -618,  -618,   253,  -618,  -618,  -618,
+     255,   256,   257,   259,  -618,  -618,  -618,   261,   264,  -618,
+    -618,   266,   267,   268,   -53,  -618,  -618,  -618,  1926,   887,
+     274,   480,   356,   359,   363,   366,   369,   273,   301,  -618,
+    -618,  -618,  -618,  -618,    81,   302,   304,  -618,  -618,  -618,
+    -618,  -618,  -618,  -618,  -618,   -58,  -618,  -618,  -618,   194,
+     307,  -618,  -618,  -618,  -618,  -618,  -618,  -618,  -618,  -618,
+    -618,  -618,  -618,    81,    81,  -618,   305,  -150,  -618,  -618,
+    -618,    -5,  -618,  -618,  -618,   384,   308,  -618,  -618,  -618,
+     -46,  -618,  -618,   483,   309,    -9,  -618,   330,   310,  -618,
+     312,  -618,   524,   230,   385,   742,  2868,   531,   230,   742,
+     529,   530,   742,  2868,   742,   532,   533,   742,   536,   742,
+     742,  2381,   742,   742,    12,   537,   -59,   538,   742,  2962,
+     742,   742,  2962,   258,  2962,  2962,   230,    83,   539,  2962,
+    3114,   321,  -618,   327,  -618,  -618,  -618,   326,  -618,   329,
+    -618,   331,   332,  -618,  -618,  -618,    58,  2868,  -618,   334,
+     335,  -618,  -618,  -618,  -618,   335,   -93,  -618,  -618,    32,
+      34,  -618,   357,   -94,   336,   339,  -618,  -618,  1304,    56,
+     337,  -618,   742,   616,  2381,  -618,  -618,   343,  -618,  -618,
+      91,    40,  -618,   342,  -618,   385,   344,   367,   338,  -618,
+     562,  -618,    66,   274,    72,   347,  -618,  -618,   348,   349,
+    -618,  -618,  -618,  -618,  -618,  -618,  -618,  -618,  -618,   345,
+    -618,   742,   742,   742,   742,   742,   742,   605,  2626,   -88,
+    -618,   350,   378,   361,   352,   380,  2626,   355,   358,  -618,
+     -83,   362,   364,   365,   370,   371,   372,   374,   375,  1347,
+     376,  2868,    76,   379,   -57,  -618,  2626,  -618,  -618,  -618,
+     381,   383,   392,   394,   386,   395,   -54,  2388,   414,  -618,
+    -618,  -618,  -618,  -618,  -618,   415,   417,   419,   423,   368,
+    -618,   426,   429,   430,  -618,  3114,   573,  -618,  -618,  -618,
+    -618,  -618,    81,   434,    58,    21,  -618,    58,  1165,  -618,
+     403,  2868,   382,  1658,   436,   486,  1422,    58,  -618,  2868,
+    -618,  -618,  -618,  -618,   696,  -618,  2482,   435,   454,  -618,
+    -618,  -618,  -618,  -618,  -618,  -618,   -39,  -618,  -618,   481,
+    -618,  -618,    80,   742,  -618,    18,  -618,  2868,  -618,   446,
+    -618,   449,  -618,   451,  -618,  -618,  -618,  2868,    27,    27,
+      27,    27,    27,    27,  2415,   254,   742,   742,   673,   742,
+     742,   742,   742,   742,   742,   742,   742,   742,   742,   742,
+     742,   742,   742,   742,   742,   742,   674,   742,   742,  -618,
+    -618,   531,   671,  -618,   742,  -618,  -618,   669,  -618,  -618,
+    -618,  -618,  -618,  -618,  -618,  -618,  -618,  -618,  -618,    76,
+    -618,  2051,  -618,    76,  -618,  -618,  -618,   -85,  -618,   742,
+    -618,  -618,  -618,  -618,  -618,   742,  -618,  -618,  -618,  -618,
+    -618,  -618,  -618,  -618,   675,  -618,  -618,  -618,  -618,   457,
+    -618,  -618,   487,  -618,  -618,  -618,  -618,  -618,  -618,    81,
+     204,  -618,  -618,  2868,   463,  -618,  -618,  -618,    58,  -618,
+    -618,  -618,  -618,  2287,   384,    91,  -618,   469,   467,   481,
+    -618,  -618,  -618,  -618,    76,   468,   385,  -618,  -618,   254,
+    -618,  -618,  2169,  -618,   254,  -618,   471,   -24,   206,   206,
+    -618,   880,   880,   200,   200,   647,   427,  2558,  1780,  2094,
+    1017,   200,   200,   106,   106,    27,    27,    27,  -618,  2504,
+    -618,  -618,  -618,   474,  -618,  -618,    52,  -618,   475,    76,
+     476,  -618,  2381,  -618,  -618,   489,  -618,    58,  1026,    81,
+    -618,  -618,  1540,  -618,  -618,  -618,  -618,  -618,   688,  -618,
+    -618,   493,  -618,   -69,  -618,   495,  -618,   492,    53,  -618,
+     498,    76,   500,  -618,   742,  2381,  -618,   742,  -618,  -618,
+    -618,    52,  -618,  -618,  -618,   501,  -618,  -618,  -618,  -618,
+      58,   504,   742,  -618,    76,  -618,  -618,  -618,  -618,    52,
+    -618,  -618,  -618,    27,   506,  2626,  -618,  -618,  -618,  -618,
+    -618,  -618,     8,  -618,  -618,   742,   540,  -618,  -618,   541,
+     -92,   -92,  -618,  -618,   509,  -618,  -618
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1495,119 +1521,122 @@
      means the default is an error.  */
 static const yytype_int16 yydefact[] =
 {
-       5,     0,     3,     1,    37,   299,     0,   415,   282,   274,
-     293,     0,   339,     0,     0,   281,   269,   283,   335,   280,
-     284,   285,     0,   338,   287,   294,   295,   292,     0,   285,
-       0,     0,   337,     0,   285,     0,   289,   336,   269,   269,
-     279,   399,   275,    81,     2,    15,    38,     0,    32,    16,
-      35,    16,    14,     0,    71,   402,     0,   401,   276,   400,
-       0,     0,    11,     0,     0,     0,     0,    30,     0,   321,
-       9,     8,     0,    13,   344,   344,   344,     0,     0,   404,
-     344,     0,   406,   300,     0,     4,   415,     0,   302,   303,
-       0,   312,   313,   403,   271,     0,   286,   291,     0,   323,
-     324,   290,   307,   308,     0,     0,   288,   277,   405,     0,
-     407,     0,   278,    82,     0,    84,    85,     0,    86,    87,
-      88,     0,     0,    91,    92,    93,    94,    95,     0,     0,
-      98,     0,   100,   101,   102,   103,     0,   105,   106,   107,
-       0,   109,   110,   111,     0,     0,   114,   115,   116,   117,
-       0,     0,     0,     0,     0,   123,     0,   125,   126,     0,
-     128,     0,   130,   131,   134,     0,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,     0,
-     149,   150,   151,     0,     0,   154,   155,   156,   157,   397,
-     158,     0,   160,   395,     0,   162,   163,   164,     0,   166,
-     167,   168,     0,     0,     0,     0,   173,   396,   174,     0,
-       0,   178,   179,     0,     0,     0,     0,    73,   183,    33,
-      70,    70,    70,     0,   269,     0,     0,   269,   269,     0,
-     402,   304,   314,   325,   333,     0,   404,   406,    34,    10,
-     309,    12,     6,   330,     0,    31,   328,   329,     0,     0,
-      28,   348,   345,   347,   346,   272,   273,   186,   187,   188,
-     189,   340,     0,     0,   352,   388,   351,   266,   402,   404,
-     344,   406,   342,    36,     0,     0,   427,   426,   428,     0,
-     423,   416,     0,     0,    70,    52,     0,     0,   252,     0,
-     258,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       5,     0,     3,     1,    41,   308,     0,   429,   291,   283,
+     302,     0,   352,     0,     0,   290,   278,   292,   348,   289,
+     293,   294,     0,   351,   296,   303,   304,   301,     0,   294,
+       0,     0,   350,     0,     0,   294,     0,   298,   349,   278,
+     278,   288,   413,   284,    88,     2,    17,    42,     0,    36,
+      18,    39,    18,    16,     0,    75,   416,     0,   415,   285,
+     414,     0,     0,    11,     0,     0,    14,     0,     0,     0,
+       0,    34,     0,   334,     9,     8,     0,    15,   357,   357,
+     357,     0,     0,   418,   357,     0,   420,   309,     0,     4,
+     429,     0,   311,   312,     0,   325,   326,   417,   280,     0,
+     295,   300,     0,   336,   337,   299,   320,   321,     0,   315,
+     316,     0,   297,   286,   419,     0,   421,     0,   287,    89,
+       0,    91,    92,     0,    93,    94,    95,     0,     0,    98,
+      99,   100,   101,   102,     0,     0,   105,     0,   107,   108,
+     109,   110,     0,   112,   113,   114,     0,   116,   117,   118,
+       0,     0,     0,   122,   123,   124,   125,     0,     0,     0,
+       0,     0,   131,     0,   133,   134,     0,   136,     0,   138,
+     139,   142,     0,   143,   144,     0,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,     0,   158,   159,
+     160,     0,     0,   163,   164,   165,   166,   411,   167,     0,
+     169,   409,     0,   171,   172,   173,     0,   175,   176,   177,
+       0,     0,     0,     0,   182,   410,   183,     0,     0,   187,
+     188,     0,     0,     0,     0,    77,   192,    37,    74,    74,
+      74,     0,   278,     0,     0,   278,   278,     0,   416,   313,
+     317,   327,   338,   346,     0,   418,   420,    38,    10,   322,
+      13,   322,    12,     6,   343,     0,    35,   341,   342,     0,
+       0,    32,   361,   358,   360,   359,   281,   282,   195,   196,
+     197,   198,   353,     0,     0,   365,   401,   364,   275,   416,
+     418,   357,   420,   355,    40,     0,     0,   441,   440,   442,
+       0,   437,   430,     0,     0,    74,    56,     0,     0,   261,
+       0,   267,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   205,     0,     0,     0,     0,     0,   205,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    81,    72,    53,
-       0,    25,    26,    27,     0,    22,     0,     0,    20,    17,
-      24,    30,     0,    71,     0,   403,    55,    56,   331,   332,
-     405,   407,    57,   265,    70,     5,     0,    70,     0,     0,
-     322,    28,    70,     0,     0,   350,     0,     0,    59,   354,
-     343,     0,   296,   301,     0,     0,   422,     0,    51,     0,
-       0,   196,   201,   197,     0,   408,    70,    70,    70,     0,
-     185,   184,     0,     0,   216,   207,   208,   209,   213,   214,
-     215,   210,   211,     0,   212,     0,     0,     0,     0,     0,
-       0,     0,   250,     0,   248,     0,     0,    78,     0,     0,
-     251,     0,     0,    76,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   373,     0,     0,   203,   206,
-       0,     0,     0,     0,     0,     0,     0,     0,   390,   391,
-     392,   393,   394,     0,     0,     0,     0,   412,   414,     0,
-       0,     0,    74,    81,     0,    21,    23,    18,    58,     0,
-       0,    30,     0,   310,    70,   315,     0,     0,     0,     0,
-       0,     0,    70,    30,    29,    71,   341,   349,   353,   389,
-       0,    69,     0,     0,    63,    60,    61,   297,   433,   431,
-     434,   432,     0,   429,   424,   417,   199,   202,    70,     0,
-      40,     0,   398,     0,   253,     0,   410,    71,   259,     0,
-      83,   177,    89,     0,   240,   239,   238,   241,   236,   237,
-       0,   361,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   214,     0,     0,     0,     0,     0,     0,
+     214,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      88,    76,    57,     0,    29,    30,    31,     0,    24,     0,
+      27,     0,     0,    22,    19,    28,    34,     0,    75,     0,
+     417,    59,    60,   344,   345,   419,   421,    61,   274,    74,
+      74,     5,     0,    74,     0,     0,   335,    32,    74,     0,
+       0,   363,     0,     0,    63,   367,   356,     0,   305,   310,
+       0,     0,   436,     0,    55,     0,     0,   205,   210,   206,
+       0,   422,    74,    74,    74,     0,   194,   193,     0,     0,
+     225,   216,   217,   218,   222,   223,   224,   219,   220,     0,
+     221,     0,     0,     0,     0,     0,     0,     0,   259,     0,
+     257,     0,     0,    85,     0,     0,   260,     0,     0,    80,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    90,    96,     0,     0,    97,
-       0,   104,   108,     0,   112,   113,   118,   119,   120,   121,
-     122,   124,   127,   129,   373,   340,    59,   378,   373,   375,
-     374,    66,   370,   133,   205,   132,   148,   152,   153,     0,
-     161,   165,   169,   170,   172,   171,   175,   176,     0,   180,
-     181,   182,    75,     0,    16,   381,   409,   306,   305,   311,
-       7,   317,     0,   404,   316,   319,     0,     0,   264,   320,
-      28,    30,   334,    68,    67,   355,     0,     0,     0,   425,
-     421,     0,   417,   198,   200,    41,    39,     0,   406,   267,
-     257,   256,   361,   247,   340,    59,   365,   361,   362,     0,
-     358,   229,   230,   242,   223,   224,   227,   228,   218,   219,
-       0,   220,   221,   222,   226,   225,   232,   231,   234,   235,
-     233,   243,     0,   249,    80,    79,     0,    77,    65,   373,
-     340,     0,   373,     0,   369,    59,   377,   204,     0,   413,
-      30,    70,     0,   262,   318,    70,   326,    64,    62,   298,
-     430,     0,   420,   418,   383,   386,     0,   255,     0,   268,
-       0,   361,   340,     0,   373,     0,   357,     0,    59,   364,
-       0,   246,    99,   368,   373,   379,   372,   376,     0,   159,
-      54,    19,   382,    30,     0,     0,   385,     0,   254,   190,
-     245,   356,   373,   366,   360,   363,   244,     0,   217,   371,
-     380,   327,   419,   384,   387,     0,   359,   367,     0,     0,
-     411,   191,     0,    70,    70,   261,   193,     0,   192,   260
+       0,     0,   386,     0,     0,   212,   215,    82,    83,    84,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   408,
+     403,   404,   405,   406,   407,     0,     0,     0,     0,   426,
+     428,     0,     0,     0,    78,    88,     0,    23,    26,    25,
+      20,    62,     0,     0,    34,     0,   323,    34,    74,   328,
+       0,     0,     0,     0,     0,     0,    74,    34,    33,    75,
+     354,   362,   366,   402,     0,    73,     0,     0,    67,    64,
+      65,   306,   447,   445,   448,   446,     0,   443,   438,   431,
+     208,   211,    74,     0,    44,     0,   412,     0,   262,     0,
+     424,    75,   268,     0,    90,   186,    96,     0,   249,   248,
+     247,   250,   245,   246,     0,   374,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    97,
+     103,     0,     0,   104,     0,   111,   115,     0,   119,   120,
+     121,   126,   127,   128,   129,   130,   132,   135,   137,   386,
+     353,    63,   391,   386,   388,   387,    70,   383,   141,   214,
+     140,   145,   157,   161,   162,     0,   170,   174,   178,   179,
+     181,   180,   184,   185,     0,   189,   190,   191,    79,     0,
+      18,   394,   423,   319,   314,   324,   318,     7,   330,     0,
+     418,   329,   332,     0,     0,   273,   333,    32,    34,   347,
+      72,    71,   368,     0,     0,     0,   439,   435,     0,   431,
+     207,   209,    45,    43,     0,   420,   276,   266,   265,   374,
+     256,   353,    63,   378,   374,   375,     0,   371,   238,   239,
+     251,   232,   233,   236,   237,   227,   228,     0,   229,   230,
+     231,   235,   234,   241,   240,   243,   244,   242,   252,     0,
+     258,    87,    86,     0,    81,    69,   386,   353,     0,   386,
+       0,   382,    63,   390,   213,     0,   427,    34,    74,     0,
+     271,   331,    74,   339,    68,    66,   307,   444,     0,   434,
+     432,   396,   399,     0,   264,     0,   277,     0,   374,   353,
+       0,   386,     0,   370,     0,    63,   377,     0,   255,   106,
+     381,   386,   392,   385,   389,     0,   168,    58,    21,   395,
+      34,     0,     0,   398,     0,   263,   199,   254,   369,   386,
+     379,   373,   376,   253,     0,   226,   384,   393,   340,   433,
+     397,   400,     0,   372,   380,     0,     0,   425,   200,     0,
+      74,    74,   270,   202,     0,   201,   269
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -598,  -598,  -598,   358,  -598,   -46,  -598,  -350,  -325,     0,
-    -598,  -598,  -598,  -598,  -598,   241,  -598,  -598,  -598,    11,
-    -516,  -598,  -598,  -282,  -258,  -216,    -2,  -598,  -598,   157,
-    -598,  -284,  -201,   -70,  -598,  -598,  -598,  -598,  -598,   207,
-      13,   406,   135,  -210,  -598,  -279,  -291,  -598,  -598,  -598,
-    -598,   -39,  -224,  -598,   250,  -598,    -4,   -73,  -598,   139,
-     142,   101,  -598,   494,  -598,    10,  -598,    17,    19,    20,
-    -598,  -598,   672,  -598,  -598,  -598,  -598,  -598,   -37,  -598,
-      22,    16,  -598,  -598,    23,  -598,  -598,  -331,  -527,   -53,
-     -38,   -24,  -233,  -598,  -598,  -598,  -577,  -598,  -597,  -598,
-    -429,  -598,  -598,  -598,    -5,  -598,   498,  -598,   431,     1,
-     -64,  -598,     7,  -598,   644,   111,  -598,  -598,   116,  -598,
-     377,  -598,   123
+    -618,  -618,  -618,   373,  -618,   -48,  -618,  -364,  -336,     0,
+    -618,  -618,  -618,  -618,  -618,   232,  -618,  -618,  -618,    16,
+    -563,  -618,  -618,  -288,  -271,  -219,    -2,  -618,  -618,  -618,
+     149,  -618,  -299,  -226,   -80,  -618,  -618,  -618,  -618,  -618,
+     207,    13,   404,   129,  -217,  -618,  -285,  -304,  -618,  -618,
+    -618,  -618,   -43,  -296,  -618,   260,  -618,    24,   -71,  -618,
+      59,   140,    86,  -618,   496,  -618,     5,  -618,    17,    10,
+    -618,    19,    20,    22,   505,  -618,   691,  -618,  -618,  -618,
+    -618,  -618,   -32,  -618,    25,    14,  -618,  -618,    26,  -618,
+    -618,  -365,  -527,   -50,   -44,   -30,  -243,  -618,  -618,  -618,
+    -616,  -618,  -617,  -618,  -312,  -618,  -618,  -618,    -7,  -618,
+     515,  -618,   441,     1,   -65,  -618,     7,  -618,   670,   102,
+    -618,  -618,   111,  -618,   387,  -618,   107
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,    44,     2,   355,   220,   604,   362,   246,   331,
-      46,   511,    47,    48,    49,    50,   332,   229,    51,   333,
-     493,   494,   495,   496,   577,    53,   343,   216,   424,   418,
-     415,   217,   392,   578,   755,   761,   380,   381,   382,   383,
-     268,   437,   438,   412,   413,   414,   421,   386,   514,   518,
-     388,   766,   767,   617,    56,   708,    95,   579,    57,    97,
-      58,   373,   627,    59,   274,   334,    61,   335,   336,   337,
-     354,   473,    65,    66,   357,   479,    67,   249,    68,    69,
-     338,   339,   234,    72,   340,    74,    75,    76,   363,    77,
-     251,    78,   265,   266,   648,   715,   649,   650,   580,   683,
-     581,   582,   606,   736,   705,   706,   267,   453,   218,   269,
-      80,    81,   271,   459,    85,   631,   632,    86,    87,   279,
-     280,   502,   503
+      -1,     1,    45,     2,   371,   228,   630,   378,   257,   344,
+      47,   535,    48,    49,    50,    51,   345,   237,    52,   346,
+     517,   518,   519,   520,   602,    54,   358,   224,   440,   460,
+     434,   431,   225,   408,   603,   782,   788,   396,   397,   398,
+     399,   279,   454,   455,   428,   429,   430,   437,   402,   538,
+     542,   404,   793,   794,   644,    57,   735,    99,   604,    58,
+     101,    59,   389,   654,    60,   285,   347,    62,   348,   349,
+      65,   350,   351,   352,   369,   496,    69,    70,   373,   503,
+      71,   260,    72,    73,   353,   354,   243,    76,   355,    78,
+      79,    80,   379,    81,   262,    82,   276,   277,   675,   742,
+     676,   677,   605,   710,   606,   607,   632,   763,   732,   733,
+     278,   475,   226,   280,    84,    85,   282,   481,    89,   658,
+     659,    90,    91,   290,   291,   526,   527
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1615,801 +1644,858 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      54,   235,    45,    79,   264,   221,   342,   263,   369,    82,
-     425,   482,    60,    52,   270,    55,   468,   233,    71,    62,
-     534,    63,    64,   426,    70,    73,   429,   433,   431,   364,
-     365,   436,   486,   635,   109,   111,   443,   253,   254,  -421,
-     704,   287,   272,   462,   255,   255,   256,   256,   679,   275,
-     252,   252,   252,  -270,   498,   236,   252,   758,   476,   554,
-     681,   237,    14,    28,   231,   710,   367,   230,   379,   289,
-     716,   368,   367,   759,  -270,   489,   563,   685,   276,   255,
-       3,   256,   534,    43,   257,   257,   555,   765,   420,    12,
-      12,   420,   277,   356,   499,   189,   419,   278,   432,   193,
-      83,   439,  -270,   564,   -47,    28,   394,   439,   446,   584,
-     395,   396,   397,   398,   399,   400,   584,   711,   290,   257,
-     258,   258,   456,  -270,   628,   737,   327,   207,   102,   713,
-     487,   103,    43,   478,   741,  -194,   585,   375,   472,    90,
-     704,   477,   367,   591,    84,   678,   608,   718,   328,   684,
-     738,   629,    96,   724,    43,   258,   420,   492,   622,   376,
-      98,   534,   264,   515,   519,   263,   457,   458,   101,   728,
-     513,   477,   477,   106,   104,   259,   259,   107,    88,   602,
-      89,   401,   112,   500,   359,   742,     5,     6,   390,   264,
-     264,   391,   263,   263,   219,   524,   525,   526,   527,   528,
-     529,   530,   747,   260,   260,    43,    43,   358,   471,   512,
-     259,   255,   105,   256,   552,   553,   222,   501,    54,    54,
-     393,    79,    79,   109,   111,   -42,   238,    82,    82,   402,
-     634,   760,   370,    55,    55,   239,   605,    43,   260,    91,
-     516,    92,   416,   575,   261,   636,   252,    93,   240,    94,
-     723,   257,   444,   726,   367,   447,   435,   454,   455,   576,
-     262,   403,   461,   241,   547,   548,   549,   550,   551,   676,
-     695,   242,   243,   646,   404,   673,   552,   553,   261,   245,
-     527,    43,   257,   247,  -195,   744,    99,   258,   100,   469,
-     264,   248,   379,   263,   262,   749,   696,   108,   244,    94,
-     405,   250,   -44,   406,   407,   490,   506,   434,   409,   410,
-     688,   273,   110,   756,    94,   435,   -46,   491,   258,   282,
-     283,   411,   651,   652,   686,   654,   655,   656,   657,   658,
-     659,   660,   661,   662,   663,   664,   665,   666,   667,   668,
-     669,   670,   259,   672,   698,   549,   550,   551,   486,   257,
-     420,  -270,   284,   -43,    12,   552,   553,   285,   531,  -270,
-     485,   -45,   484,    79,   286,   730,   434,   288,    43,    82,
-     260,   291,   292,   259,   439,    55,   345,   344,    94,   693,
-     486,   574,   293,   294,   646,   258,   517,   295,   346,   646,
-     347,   296,   719,   486,   297,   348,   264,   349,   350,   263,
-      94,   260,   298,    10,    12,   351,   299,    94,   751,   300,
-     575,   486,   301,   302,   532,   533,   534,   535,   536,   537,
-     538,   367,   540,   371,   612,   372,   576,   303,   304,   532,
-     533,   534,   235,    18,   448,   449,   450,   451,   452,   305,
-     259,   644,   306,   255,   753,   256,  -263,   352,  -263,   307,
-      21,   308,   367,   646,   366,   309,   310,   645,    23,   732,
-     637,   647,   -48,    24,    25,    26,    27,   311,   260,   312,
-     642,   313,    54,    29,    45,    79,   314,   616,   613,   762,
-     485,    82,   484,    79,    60,    52,   236,    55,   609,    82,
-      71,    62,   237,    63,    64,    55,    70,    73,   230,   315,
-     316,   361,   317,   318,    32,   319,   682,   746,   644,   320,
-     748,   321,   -49,    34,   322,   323,   324,    37,    36,   367,
-     638,   325,   326,   435,   645,   420,   374,   377,   -50,   384,
-     389,   378,   385,   387,   417,   422,   423,   463,   427,   264,
-     428,   430,   263,   440,   442,   460,   464,   477,   477,   465,
-     466,   467,   470,  -270,   475,   481,   480,   497,   691,   505,
-     488,   508,   507,   235,   510,   603,   709,   509,   520,   521,
-     522,   523,   647,   435,   434,   714,   556,   647,   557,   532,
-     533,   534,   535,   536,   537,   538,   539,   540,   558,   559,
-     561,   560,   435,   542,   543,   544,   545,   546,   547,   548,
-     549,   550,   551,   562,    22,   630,   565,   566,   567,   568,
-     552,   553,   569,   547,   548,   549,   550,   551,   589,   264,
-     570,   607,   263,   571,   434,   552,   553,   573,   583,   586,
-     587,   588,   435,   590,   593,   594,   595,   596,   597,   598,
-     599,   647,   600,   434,   601,   611,   394,   614,     5,     6,
-     395,   396,   397,   398,   399,   400,   625,   619,   626,   653,
-     640,   639,   641,   671,   675,   435,   394,   690,   677,   689,
-     395,   396,   397,   398,   399,   400,   692,   694,    84,     8,
-     702,     9,   717,   434,   707,   734,   735,    10,   722,    54,
-     725,    12,    79,   485,   727,   484,    79,   729,    82,   740,
-     739,   743,    82,   763,    55,   745,   750,   752,    55,   764,
-     757,    15,   769,   474,   674,   633,   434,   224,    17,   687,
-      18,   401,   620,   445,    19,   768,   232,    20,   699,   618,
-     281,   394,   754,   353,    21,   395,   396,   397,   398,   399,
-     400,   401,   360,   703,   441,    23,   701,    24,    25,    26,
-      27,   700,   504,     0,     0,     0,   541,    29,   542,   543,
-     544,   545,   546,   547,   548,   549,   550,   551,     0,   402,
-       0,     0,     0,     0,     0,   552,   553,     0,     0,     0,
-       0,     0,   572,     0,     0,     0,     0,     0,     0,   402,
-       0,    32,     0,     0,     0,     0,    33,    34,    35,     0,
-       0,   403,    36,     0,    37,     0,   401,     0,   227,     0,
-       0,     0,     0,     0,   404,     0,     0,   228,     0,    40,
-       0,   403,     0,     0,     0,     0,     0,    41,    42,     0,
-       0,     0,     0,     0,   404,     0,     0,     0,     0,     0,
-     405,     0,     0,   406,   407,   408,     0,     0,   409,   410,
-       0,     0,     0,     0,   402,     0,     0,     0,     0,     0,
-     405,   411,     0,   406,   407,   408,     0,     0,   409,   410,
-       0,     4,     5,     6,     0,     0,     0,   623,     0,     0,
-       0,   411,     0,     0,     0,     0,   403,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   404,
-       0,     0,     0,     8,     0,     9,     0,     0,     0,     0,
-       0,    10,    11,     0,     0,    12,     0,     0,     0,     0,
-       0,     0,    13,     0,     0,   405,     0,     0,   406,   407,
-     408,     0,    14,   409,   410,    15,     0,     0,     0,     0,
-       0,    16,    17,     0,    18,     0,   411,     0,    19,     0,
-       0,    20,     0,     0,     0,     0,     0,     0,    21,     0,
-       0,     0,     0,     0,     0,    22,   330,     0,     0,    23,
-       0,    24,    25,    26,    27,    28,     0,     0,     0,     0,
-       0,    29,     0,     0,     0,     0,    30,     0,     0,     0,
-       0,     0,     0,     0,     0,     4,     5,     6,     0,     0,
-       0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
-      33,    34,    35,     0,     0,     0,    36,     8,    37,     9,
-       0,     0,    38,     0,     0,    10,    11,     0,     0,    12,
-       0,    39,     0,    40,     0,     0,    13,     0,     0,     0,
-       0,    41,    42,     0,     0,     0,    14,     0,     0,    15,
-       0,     0,     0,     0,     0,    16,    17,     0,    18,     0,
-       0,     0,    19,     0,     0,    20,     0,     0,     0,     0,
-      43,     0,    21,   341,     0,     0,     0,     0,     0,    22,
-     330,     0,     0,    23,     0,    24,    25,    26,    27,    28,
-       0,     0,     0,     0,     0,    29,     0,     0,     0,     0,
-      30,     0,     0,     0,     0,     0,     0,     0,     0,     4,
-       5,     6,     0,     0,     0,     0,     0,    31,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    32,
-       0,     0,     0,     0,    33,    34,    35,     0,     0,     0,
-      36,     8,    37,     9,     0,     0,    38,     0,     0,    10,
-      11,     0,     0,    12,     0,    39,     0,    40,     0,     0,
-      13,     0,     0,     0,     0,    41,    42,     0,     0,     0,
-      14,     0,     0,    15,     0,     0,     0,     0,     0,    16,
-      17,     0,    18,     0,     0,     0,    19,     0,     0,    20,
-       0,     0,     0,     0,    43,     0,    21,   731,     4,     5,
-       6,     0,     0,    22,     0,     0,     0,    23,     0,    24,
-      25,    26,    27,    28,     0,     0,     0,     0,     0,    29,
-       0,     0,     0,     0,    30,     0,     0,     0,     0,     0,
-       8,     0,     9,     4,     5,     6,     0,     0,    10,     0,
-       0,    31,    12,     0,     0,     0,     0,     0,     0,    13,
-       0,     0,     0,    32,     0,     0,     0,     0,    33,    34,
-      35,     0,    15,     0,    36,     8,    37,     9,    16,    17,
-      38,    18,     0,    10,     0,    19,     0,    12,    20,    39,
-       0,    40,     0,     0,    13,    21,     0,     0,     0,    41,
-      42,     0,    22,     0,     0,     0,    23,    15,    24,    25,
-      26,    27,     0,    16,    17,     0,    18,     0,    29,     0,
-      19,     0,     0,    20,     0,     0,     0,     0,    43,     0,
-      21,   610,     4,     5,     6,     0,     0,    22,     0,     0,
-      31,    23,     0,    24,    25,    26,    27,     0,     0,     0,
-       0,     0,    32,    29,     0,     0,     0,    33,    34,    35,
-       0,     0,     0,    36,     8,    37,     9,     0,     0,    38,
-       0,     0,    10,     0,     0,    31,    12,     0,    39,     0,
-      40,     0,     0,    13,     0,     0,     0,    32,    41,    42,
-       0,     0,    33,    34,    35,     0,    15,     0,    36,     0,
-      37,     0,    16,    17,    38,    18,     0,     0,     0,    19,
-       0,     0,    20,    39,     0,    40,     0,    43,     0,    21,
-     483,     0,     0,    41,    42,     0,    22,     0,     0,     0,
-      23,     0,    24,    25,    26,    27,     0,     0,     0,     0,
-       0,     0,    29,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    43,     5,     6,   621,     0,     0,     0,     0,
-       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
-       0,    33,    34,    35,     8,     0,     9,    36,     0,    37,
-       0,     0,    10,    38,     0,     0,    12,     0,     0,     0,
-       0,     0,    39,     0,    40,     0,     0,     0,     0,     0,
-       0,     0,    41,    42,     0,     0,    15,     0,     0,     0,
-       0,     0,   224,    17,     0,    18,     0,     0,     0,    19,
-       0,     0,    20,     0,     0,     0,     0,     0,     0,    21,
-       0,    43,     0,     0,   733,     0,     0,     0,     0,     0,
-      23,     0,    24,    25,    26,    27,     0,     0,     0,     0,
-       0,     0,    29,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     4,     5,     6,     0,
-     532,   533,   534,   535,   536,   537,   538,     7,     0,     0,
-       0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
-       0,    33,    34,    35,     0,     0,     0,    36,     8,    37,
-       9,     0,     0,   227,     0,     0,    10,    11,     0,     0,
-      12,     0,   228,     0,    40,     0,     0,    13,     0,     0,
-       0,     0,    41,    42,     0,     0,     0,    14,     0,     0,
-      15,     0,     0,     0,     0,     0,    16,    17,     0,    18,
-       0,     0,     0,    19,     0,     0,    20,     0,     0,     0,
-       0,    43,     0,    21,   615,     0,     0,     0,     0,     0,
-      22,     0,     0,     0,    23,     0,    24,    25,    26,    27,
-      28,     0,     0,     0,     0,     0,    29,     0,     0,     0,
-       0,    30,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    31,     4,
-       5,     6,     0,     0,     0,     0,     0,     0,     0,   329,
-      32,     0,     0,     0,     0,    33,    34,    35,     0,     0,
-       0,    36,     0,    37,     0,     0,     0,    38,     0,     0,
-       0,     8,     0,     9,   -70,     0,    39,     0,    40,    10,
-      11,     0,     0,    12,     0,     0,    41,    42,     0,     0,
-      13,   544,   545,   546,   547,   548,   549,   550,   551,     0,
-      14,     0,     0,    15,     0,     0,   552,   553,     0,    16,
-      17,     0,    18,     0,     0,    43,    19,     0,     0,    20,
-       0,     0,     0,     0,     0,     0,    21,     0,     0,     5,
-       6,     0,     0,    22,   330,     0,     0,    23,     0,    24,
-      25,    26,    27,    28,     0,     0,     0,     0,     0,    29,
-       0,     0,     0,     0,    30,     0,     0,     0,     0,     0,
-       8,     0,     9,     0,     0,     0,     0,   257,    10,     0,
-       0,    31,    12,     0,     0,     0,     0,     0,     0,   532,
-     533,   534,     0,    32,   537,   538,     0,     0,    33,    34,
-      35,     0,    15,     0,    36,     0,    37,     0,   224,    17,
-      38,    18,     0,   258,     0,    19,     0,     0,    20,    39,
-       0,    40,     0,     0,     0,    21,     0,     0,     0,    41,
-      42,     0,     0,     0,     0,     0,    23,     0,    24,    25,
-      26,    27,     0,     0,     0,     0,     0,     0,    29,   532,
-     533,   534,   535,   536,   537,   538,     0,     0,    43,     5,
-       6,     0,     0,     0,     0,     0,     0,     0,   259,     0,
+      55,   274,    46,    83,   229,   244,   385,    61,   441,    86,
+     275,   357,    64,   506,   510,    56,    75,   281,    53,    63,
+     491,    66,    67,   242,    68,   662,   500,    74,    77,   443,
+     380,   381,   446,   450,   448,   264,   265,   453,   708,   457,
+     283,   484,  -435,   464,    12,   558,   298,   731,   263,   263,
+     263,   785,    28,   737,   263,   266,   245,   267,   743,   266,
+     239,   267,   246,   115,   117,   240,  -279,   786,   238,   286,
+     383,     3,   300,   706,    18,   384,   395,   502,   513,   266,
+    -279,   267,   435,    87,   266,   372,   267,    14,   105,   197,
+     479,   480,   436,   201,   112,   436,   268,   268,   287,    23,
+     268,    12,    12,   449,    94,    12,   456,   539,   543,   740,
+     478,   578,   288,   456,   467,  -279,   587,   -51,   289,   522,
+     268,   301,   768,   215,   558,   268,    44,   102,    44,  -279,
+     764,    28,   792,   269,   269,   383,   511,   269,   579,   458,
+     712,   100,   609,   588,   738,   609,   340,   731,    32,   755,
+     495,   495,    88,   391,   501,   765,   230,   269,   634,   523,
+     655,   636,   269,    38,   274,   436,   516,   106,   341,   610,
+     107,   649,   617,   275,   108,   392,   113,   249,   111,   459,
+     751,   118,   774,   537,   501,   501,   628,   656,    92,   227,
+      93,   270,   270,   274,   274,   270,   383,   375,   -46,     5,
+       6,   745,   275,   275,   548,   549,   550,   551,   552,   553,
+     554,    44,   769,   247,  -203,   270,   556,   557,   558,   251,
+     270,   271,   271,   374,   558,   271,    55,    55,   248,    83,
+      83,   787,    95,   409,    96,    86,    86,   386,   259,   250,
+     406,    56,    56,   407,   663,   271,   576,   577,   661,   631,
+     271,   263,    44,   524,    44,   494,   432,   497,   253,   115,
+     117,   600,   671,   442,   465,   272,    97,   468,    98,   476,
+     477,   452,   383,   383,   483,   252,   255,   601,   672,   254,
+     703,   273,   256,   722,   673,   600,    44,   705,   525,   536,
+     272,   711,    44,   700,   258,   540,   383,   551,   268,   274,
+      44,   601,   103,  -204,   104,   293,   273,   492,   275,   109,
+     261,   110,   723,   395,   -48,   573,   574,   575,   114,   451,
+      98,   116,   284,    98,   530,   576,   577,  -279,   -50,   -47,
+     715,  -279,   294,   -49,   452,   269,   713,   295,   296,   678,
+     679,   510,   681,   682,   683,   684,   685,   686,   687,   688,
+     689,   690,   691,   692,   693,   694,   695,   696,   697,   360,
+     699,    98,   361,   297,   362,   725,   363,   436,   364,   365,
+      10,    98,   366,   510,    98,   299,   509,   555,   508,    83,
+     469,   757,   451,   302,   303,    86,   510,   387,   266,   388,
+     267,    56,   456,   270,   750,   304,   720,   753,   673,   305,
+     306,   599,   541,   673,   510,   307,   746,   571,   572,   573,
+     574,   575,   274,   571,   572,   573,   574,   575,    21,   576,
+     577,   275,   308,   271,   778,   576,   577,   309,  -272,   771,
+    -272,    24,    25,    26,    27,   310,   311,   312,   313,   776,
+     314,    29,   315,   556,   557,   558,   559,   560,   561,   562,
+     316,   639,   470,   471,   472,   473,   474,   783,   780,   244,
+     317,   318,   319,   671,   320,   321,   322,   673,   323,   324,
+     325,   326,   327,   328,   383,   674,   759,   329,   330,   672,
+     331,   332,   333,   359,   334,    35,   335,   664,   393,   336,
+      37,   337,   338,   339,    44,   367,    55,   669,    46,    83,
+     789,   643,   640,    61,   509,    86,   508,    83,    64,   635,
+     245,    56,    75,    86,    53,    63,   246,    66,    67,    56,
+      68,   709,   238,    74,    77,   -52,   -53,   773,   -54,   377,
+     775,   400,   382,   390,   405,   394,   401,   403,   433,   438,
+     439,   485,   444,   445,   665,   436,   447,   461,   463,   482,
+     487,   452,   486,   488,   490,   489,   493,  -279,   499,   274,
+     504,   505,   521,   512,   529,   533,   532,   531,   275,   534,
+     547,   501,   501,   544,   545,   546,   580,   581,   583,   584,
+     582,   585,   718,   629,   586,   615,    22,   624,   589,   674,
+     590,   591,   741,   244,   674,   736,   592,   593,   594,   451,
+     595,   596,   598,   452,   638,   608,   641,   611,   410,   612,
+       5,     6,   411,   412,   413,   414,   415,   416,   613,   410,
+     614,   616,   452,   411,   412,   413,   414,   415,   416,   566,
+     567,   568,   569,   570,   571,   572,   573,   574,   575,   274,
+     619,   620,     8,   621,     9,   622,   576,   577,   275,   623,
+      10,   451,   625,   653,    12,   626,   627,   633,   674,   646,
+     657,   652,   452,   556,   557,   558,   559,   560,   561,   562,
+     451,   564,   666,   667,    15,   668,   680,   698,   702,   704,
+     232,    17,   716,   717,    18,   417,   719,   721,    19,    88,
+     729,    20,   734,   761,   762,   452,   417,   744,    21,   410,
+     749,   752,   754,   411,   412,   413,   414,   415,   416,    23,
+     451,    24,    25,    26,    27,   756,    55,   766,   767,    83,
+     509,    29,   508,    83,   770,    86,   772,   777,   779,    86,
+     701,    56,   784,   796,   466,    56,   418,   647,   714,   660,
+     726,   790,   791,   451,   498,   410,   241,   418,   795,   411,
+     412,   413,   414,   415,   416,   376,   370,   781,    32,   368,
+     292,   730,   727,   645,    34,    35,    36,   462,   728,   419,
+      37,     0,     0,    38,     0,     0,   417,   235,   528,     0,
+     419,     0,     0,   420,     0,     0,   236,     0,    41,     0,
+       0,     0,     0,     0,   420,     0,    42,    43,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   421,
+       0,     0,   422,   423,   424,     0,     0,   425,   426,     0,
+     421,     0,   417,   422,   423,   514,     0,   418,   425,   426,
+     427,     0,     0,     0,     0,     0,     0,   515,     0,     0,
+       0,   427,     0,     0,     0,     0,     0,     0,     0,   566,
+     567,   568,   569,   570,   571,   572,   573,   574,   575,     0,
+     419,     0,     0,     0,     0,     0,   576,   577,     0,     0,
+       0,     0,     0,   418,   420,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    32,     0,     0,     0,     0,    33,    34,    35,
-       8,     0,     9,    36,     0,    37,   260,   257,    10,   227,
-       0,     0,    12,     0,     0,     0,     0,     0,   228,     0,
-      40,     0,     0,     0,     0,     0,     0,     0,    41,    42,
-       0,     0,    15,     0,     0,     0,     0,     0,   224,    17,
-       0,    18,     0,   258,     0,    19,   680,     0,    20,     0,
-       0,     0,     0,     0,     0,    21,     0,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,    23,     0,    24,    25,
+       0,     4,     5,     6,     0,     0,   556,   557,   558,     0,
+     421,   561,   562,   422,   423,   424,   419,     0,   425,   426,
+       0,     0,     0,     0,     0,     0,     0,   650,     0,     0,
+     420,   427,     0,     0,     8,     0,     9,     0,     0,     0,
+       0,     0,    10,    11,     0,     0,    12,     0,     0,     0,
+       0,     0,     0,    13,     0,     0,   421,     0,     0,   422,
+     423,   424,     0,    14,   425,   426,    15,     0,     0,     0,
+       0,     0,    16,    17,     0,     0,    18,   427,     0,     0,
+      19,     0,     0,    20,     0,     0,     0,     0,     0,     0,
+      21,     0,     0,     0,     0,     0,     0,    22,   343,     0,
+       0,    23,     0,    24,    25,    26,    27,    28,     0,     0,
+       0,     0,     0,    29,     0,     0,     0,     0,     0,     0,
+      30,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
+       4,     5,     6,   556,   557,   558,   559,   560,   561,   562,
+      32,     0,     0,     0,     0,    33,    34,    35,    36,     0,
+       0,     0,    37,     0,     0,    38,     0,     0,     0,    39,
+       0,     0,     0,     8,     0,     9,     0,     0,    40,     0,
+      41,    10,    11,     0,     0,    12,     0,     0,    42,    43,
+       0,     0,    13,     0,     0,   569,   570,   571,   572,   573,
+     574,   575,    14,     0,     0,    15,     0,     0,     0,   576,
+     577,    16,    17,     0,     0,    18,     0,    44,     0,    19,
+     356,     0,    20,     0,     0,     0,     0,     0,     0,    21,
+       0,     0,     0,     0,     0,     0,    22,   343,     0,     0,
+      23,     0,    24,    25,    26,    27,    28,     0,     0,     0,
+       0,     0,    29,     0,     0,     0,     0,     0,     0,    30,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    31,     0,     4,
+       5,     6,     0,     0,     0,     0,     0,     0,     0,    32,
+       0,     0,     0,     0,    33,    34,    35,    36,     0,     0,
+       0,    37,     0,     0,    38,     0,     0,     0,    39,     0,
+       0,     0,     8,     0,     9,     0,     0,    40,     0,    41,
+      10,    11,     0,     0,    12,     0,     0,    42,    43,     0,
+       0,    13,   569,   570,   571,   572,   573,   574,   575,     0,
+       0,    14,     0,     0,    15,     0,   576,   577,     0,     0,
+      16,    17,     0,     0,    18,     0,    44,     0,    19,   758,
+       0,    20,     0,     0,     0,     0,     0,     0,    21,     0,
+       0,     0,     0,     0,     0,    22,     0,     0,     0,    23,
+       0,    24,    25,    26,    27,    28,     0,     0,     0,     0,
+       0,    29,     0,     0,     0,     0,     0,     0,    30,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    31,     0,     4,     5,
+       6,     0,     0,     0,     0,     0,     0,     0,    32,     0,
+       0,     0,     0,    33,    34,    35,    36,     0,     0,     0,
+      37,     0,     0,    38,     0,     0,     0,    39,     0,     0,
+       0,     8,     0,     9,     0,     0,    40,     0,    41,    10,
+       0,     0,     0,    12,     0,     0,    42,    43,     0,     0,
+      13,     0,     0,   556,   557,   558,   559,   560,   561,   562,
+     563,   564,     0,    15,     0,     0,     0,     0,     0,    16,
+      17,     0,     0,    18,     0,    44,     0,    19,   637,     0,
+      20,     0,     0,     0,     0,     0,     0,    21,     0,     0,
+       0,     0,     0,     0,    22,     0,     0,     0,    23,     0,
+      24,    25,    26,    27,     0,     0,     0,     0,     0,     0,
+      29,     0,     0,     0,     0,     0,     4,     5,     6,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    31,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    32,     0,     8,
+       0,     9,     0,    34,    35,    36,     0,    10,     0,    37,
+       0,    12,    38,     0,     0,     0,    39,     0,    13,     0,
+       0,     0,     0,     0,     0,    40,     0,    41,     0,     0,
+       0,    15,     0,     0,     0,    42,    43,    16,    17,     0,
+       0,    18,     0,     0,     0,    19,     0,     0,    20,     0,
+       0,     0,     0,     0,     0,    21,     0,     0,     0,     0,
+       0,     0,    22,     0,    44,     0,    23,   507,    24,    25,
       26,    27,     0,     0,     0,     0,     0,     0,    29,     0,
-       0,   545,   546,   547,   548,   549,   550,   551,     0,     5,
-       6,     0,     0,     0,     0,   552,   553,     0,   259,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   697,
-       0,     0,    32,     0,     0,     0,     0,    33,    34,    35,
-       8,     0,     9,    36,     0,    37,   260,     0,    10,   227,
-       0,     0,    12,     0,     0,     0,     0,     0,   228,     0,
-      40,   545,   546,   547,   548,   549,   550,   551,    41,    42,
-       0,     0,    15,     0,     0,   552,   553,     0,   224,    17,
-       0,    18,     0,     0,     0,    19,   712,     0,    20,     0,
-       0,     0,     0,     0,     0,    21,     0,    43,     5,     6,
-       0,     0,     0,     0,     0,     0,    23,     0,    24,    25,
-      26,    27,     0,     0,     0,     0,     0,     0,    29,     0,
+       0,     0,     0,     0,     4,     5,     6,   565,     0,   566,
+     567,   568,   569,   570,   571,   572,   573,   574,   575,     0,
+       0,     0,     0,    31,     0,     0,   576,   577,     0,     0,
+       0,     0,     0,   597,     0,    32,     0,     8,     0,     9,
+       0,    34,    35,    36,     0,    10,     0,    37,     0,    12,
+      38,     0,     0,     0,    39,     0,    13,     0,     0,     0,
+       0,     0,     0,    40,     0,    41,     0,     0,     0,    15,
+       0,     0,     0,    42,    43,    16,    17,     0,     0,    18,
+       0,     0,     0,    19,     0,     0,    20,     0,     0,     0,
+       0,     0,     0,    21,     0,     0,     0,     0,     0,     0,
+      22,     0,    44,     0,    23,   648,    24,    25,    26,    27,
+       0,     0,     0,     0,     0,     0,    29,     0,     0,     0,
+       0,     0,     0,     5,     6,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    31,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    32,     0,     8,     0,     9,     0,    34,
+      35,    36,     0,    10,     0,    37,     0,    12,    38,     0,
+       0,     0,    39,     0,     0,     0,     0,     0,     0,     0,
+       0,    40,     0,    41,     0,     0,     0,    15,     0,     0,
+       0,    42,    43,   232,    17,     0,     0,    18,     0,     0,
+       0,    19,     0,     0,    20,     0,     0,     0,     0,     0,
+       0,    21,     0,     0,     0,     0,     0,     0,     0,     0,
+      44,     0,    23,   760,    24,    25,    26,    27,     0,     0,
+       0,     0,     0,     0,    29,     0,     0,     0,     0,     0,
+       4,     5,     6,     0,     0,     0,     0,     0,     0,     0,
+       0,     7,     0,     0,     0,     0,   556,   557,   558,   559,
+     560,   561,   562,     0,     0,     0,     0,     0,     0,     0,
+       0,    32,     0,     8,     0,     9,     0,    34,    35,    36,
+       0,    10,    11,    37,     0,    12,    38,     0,     0,     0,
+     235,     0,    13,     0,     0,     0,     0,     0,     0,   236,
+       0,    41,    14,     0,     0,    15,     0,     0,     0,    42,
+      43,    16,    17,     0,     0,    18,     0,     0,     0,    19,
+       0,     0,    20,     0,     0,     0,     0,     0,     0,    21,
+       0,     0,     0,     0,     0,     0,    22,     0,    44,     0,
+      23,   642,    24,    25,    26,    27,    28,     0,     0,     0,
+       0,     0,    29,     0,     0,     0,     0,     0,     0,    30,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    31,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    32,
+       4,     5,     6,     0,    33,    34,    35,    36,     0,     0,
+     342,    37,     0,     0,    38,     0,     0,     0,    39,     0,
+       0,     0,     0,     0,     0,   -74,     0,    40,     0,    41,
+       0,     0,     0,     8,     0,     9,     0,    42,    43,     0,
+       0,    10,    11,     0,     0,    12,     0,     0,     0,     0,
+       0,     0,    13,   567,   568,   569,   570,   571,   572,   573,
+     574,   575,    14,     0,     0,    15,    44,     0,     0,   576,
+     577,    16,    17,     0,     0,    18,     0,     0,     0,    19,
+       0,     0,    20,     0,     0,     0,     0,     0,     0,    21,
+       0,     0,     0,     0,     0,     0,    22,   343,     0,     0,
+      23,     0,    24,    25,    26,    27,    28,     0,     0,     0,
+       0,     0,    29,     0,     0,     0,     0,     0,     0,    30,
+       0,     0,     0,     0,     0,     0,     5,     6,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    31,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    32,
+       0,     0,     0,     0,    33,    34,    35,    36,     8,     0,
+       9,    37,     0,     0,    38,   268,    10,     0,    39,     0,
+      12,     0,     0,     0,     0,     0,     0,    40,     0,    41,
+     556,   557,   558,   559,   560,   561,   562,    42,    43,     0,
+      15,     0,     0,     0,     0,     0,   232,    17,     0,     0,
+      18,     0,   269,     0,    19,     0,     0,    20,     0,     0,
+       0,     0,     0,     0,    21,     0,    44,     0,     0,     0,
+       0,     0,     0,     0,     0,    23,     0,    24,    25,    26,
+      27,     0,     0,     0,     0,     0,     0,    29,     0,     0,
+       0,     0,     0,     0,     5,     6,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     270,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    32,     0,     8,     0,     9,     0,
+      34,    35,    36,   268,    10,     0,    37,     0,    12,    38,
+     271,     0,     0,   235,     0,     0,     0,     0,     0,     0,
+       0,     0,   236,     0,    41,     0,     0,     0,    15,     0,
+       0,     0,    42,    43,   232,    17,     0,     0,    18,     0,
+     269,     0,    19,     0,     0,    20,     0,     0,     0,     0,
+     707,     0,    21,     0,     0,     0,     0,     0,     0,     0,
+       0,    44,     0,    23,     0,    24,    25,    26,    27,     0,
+       0,     0,     0,     0,     0,    29,     0,     0,     0,     0,
+       0,     0,     5,     6,     0,     0,     0,     0,   568,   569,
+     570,   571,   572,   573,   574,   575,     0,     0,   270,     0,
+       0,     0,   724,   576,   577,     0,     0,     0,     0,     0,
+       0,     0,    32,     0,     8,     0,     9,     0,    34,    35,
+      36,     0,    10,     0,    37,     0,    12,    38,   271,     0,
+       0,   235,     0,     0,     0,     0,     0,     0,     0,     0,
+     236,     0,    41,     0,     0,     0,    15,     0,     0,     0,
+      42,    43,   232,    17,     0,     0,    18,     0,     0,     0,
+      19,     0,     0,    20,     0,     0,     0,     0,   739,     0,
+      21,     0,     0,     0,     0,     0,     5,     6,     0,    44,
+       0,    23,     0,    24,    25,    26,    27,     0,     0,     0,
+       0,     0,     0,    29,   556,   557,   558,   559,   560,   561,
+     562,   563,   564,     0,     0,     0,     0,     0,     8,     0,
+       9,     0,     0,     0,     0,     0,    10,     0,     0,     0,
+      12,   556,   557,   558,   559,   560,   561,   562,   563,   564,
+      32,     0,     0,     0,     0,     0,    34,    35,    36,     0,
+      15,     0,    37,     0,     0,    38,   232,    17,     0,   235,
+      18,     0,     0,     0,    19,     0,     0,    20,   236,     0,
+      41,     0,     0,     0,    21,     0,     0,     0,    42,    43,
+       0,     0,     0,     0,     0,    23,     0,    24,    25,    26,
+      27,     0,     0,     0,     0,     0,     0,    29,   556,   557,
+     558,   559,   560,   561,   562,   563,   564,    44,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     556,   557,   558,   559,   560,   561,   562,   563,   564,     0,
+       0,     0,     0,     0,    32,     0,     0,     0,     0,     0,
+      34,    35,    36,     0,     0,     0,    37,     0,     0,    38,
+       0,     0,     0,   235,     0,     0,     0,     0,     0,     0,
+       0,     0,   236,     0,    41,     0,     0,     0,     0,     0,
+       0,     0,    42,    43,   556,   557,   558,   559,   560,   561,
+     562,   563,   564,     0,     0,     0,     0,     0,   565,     0,
+     566,   567,   568,   569,   570,   571,   572,   573,   574,   575,
+       0,    44,     0,     0,     0,     0,     0,   576,   577,     0,
+       0,     0,     0,     0,   618,   565,     0,   566,   567,   568,
+     569,   570,   571,   572,   573,   574,   575,     0,     0,     0,
+       0,     0,     0,     0,   576,   577,     0,     0,     0,     0,
+       0,   670,   556,   557,   558,   559,   560,   561,   562,   563,
+     564,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   565,     0,   566,   567,   568,   569,   570,   571,
+     572,   573,   574,   575,     0,     0,     0,     0,     0,     0,
+       0,   576,   577,   651,   565,     0,   566,   567,   568,   569,
+     570,   571,   572,   573,   574,   575,     0,     0,     0,     0,
+       0,     0,     0,   576,   577,   748,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   565,   747,
+     566,   567,   568,   569,   570,   571,   572,   573,   574,   575,
+       0,     0,     0,     0,     0,     0,     0,   576,   577,     5,
+       6,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   231,     0,     0,     0,     0,
+       0,     8,     0,     9,     0,     0,     0,     0,     0,    10,
+      11,     0,     0,    12,     0,     0,   565,     0,   566,   567,
+     568,   569,   570,   571,   572,   573,   574,   575,     0,     0,
+      14,     0,     0,    15,     0,   576,   577,     0,     0,   232,
+      17,     0,     0,    18,     0,     0,     0,    19,     0,     0,
+      20,     0,     0,     0,     0,     0,     0,    21,     0,     0,
+       0,     0,     0,     5,     6,     0,     0,     0,    23,     0,
+      24,    25,    26,    27,    28,     0,     0,   233,     0,     0,
+      29,     0,     0,     0,     0,   234,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     8,     0,     9,     0,     0,
+       0,     0,     0,    10,     0,     0,     0,    12,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    32,     0,     0,
+       0,     0,    33,    34,    35,    36,     0,    15,     0,    37,
+       0,     0,    38,   232,    17,     0,   235,    18,     0,     0,
+       0,    19,     0,     0,    20,   236,     0,    41,     0,     0,
+       0,    21,     0,     0,     0,    42,    43,     5,     6,     0,
+       0,     0,    23,     0,    24,    25,    26,    27,     0,     0,
+       0,     0,     0,     0,    29,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     8,
        0,     9,     0,     0,     0,     0,     0,    10,     0,     0,
-       0,    12,   532,   533,   534,   535,   536,   537,   538,   539,
-     540,     0,    32,     0,     0,     0,     0,    33,    34,    35,
-       0,    15,     0,    36,     0,    37,     0,   224,    17,   227,
-      18,     0,     0,     0,    19,     0,     0,    20,   228,     0,
-      40,     0,     0,     0,    21,     0,     0,     0,    41,    42,
-       0,     0,     0,     0,     0,    23,     0,    24,    25,    26,
-      27,     0,     0,     0,     0,     0,     0,    29,   532,   533,
-     534,   535,   536,   537,   538,   539,   540,    43,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   532,   533,   534,   535,   536,   537,   538,
-       0,    32,     0,     0,     0,     0,    33,    34,    35,     0,
-       0,     0,    36,     0,    37,     0,     0,     0,   227,     0,
-       0,     0,     0,     0,     0,     0,     0,   228,     0,    40,
-       0,     0,     0,     0,     0,     0,     0,    41,    42,   532,
-     533,   534,   535,   536,   537,   538,   539,   540,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    43,   532,   533,   534,
-     535,   536,   537,   538,   539,   540,     0,     0,     0,   541,
-       0,   542,   543,   544,   545,   546,   547,   548,   549,   550,
-     551,     0,     0,     0,     0,     0,     0,     0,   552,   553,
-       0,     0,     0,     0,     0,   592,   532,   533,   534,   535,
-     536,   537,   538,   539,   540,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   532,   533,   534,
-     535,   536,   537,   538,   539,   540,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   541,     0,   542,   543,   544,
-     545,   546,   547,   548,   549,   550,   551,   532,   533,   534,
-     535,   536,   537,   538,   552,   553,     0,     0,     0,     0,
-       0,   643,   542,   543,   544,   545,   546,   547,   548,   549,
-     550,   551,     0,     0,     0,     0,     0,     0,     0,   552,
-     553,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   541,     0,   542,   543,
-     544,   545,   546,   547,   548,   549,   550,   551,     0,     0,
-       0,     0,     0,     0,     0,   552,   553,   624,     0,     0,
-       0,     0,     0,     0,   541,     0,   542,   543,   544,   545,
-     546,   547,   548,   549,   550,   551,     0,     0,     0,     0,
-       0,     0,     0,   552,   553,   721,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   541,   720,   542,   543,   544,   545,   546,
-     547,   548,   549,   550,   551,     0,     0,     0,     0,     0,
-       0,     0,   552,   553,   541,     0,   542,   543,   544,   545,
-     546,   547,   548,   549,   550,   551,     0,     0,     0,     0,
-       0,     0,     0,   552,   553,     5,     6,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   543,   544,   545,
-     546,   547,   548,   549,   550,   551,     0,     0,     0,     0,
-     223,     0,     0,   552,   553,     0,     8,     0,     9,     0,
-       5,     6,     0,     0,    10,    11,     0,     0,    12,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    14,     0,     0,    15,     0,
-       0,     8,     0,     9,   224,    17,     0,    18,     0,    10,
-       0,    19,     0,    12,    20,     0,     0,     0,     0,     0,
-       0,    21,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    23,    15,    24,    25,    26,    27,    28,   224,
-      17,   225,    18,     0,    29,     0,    19,     0,   226,    20,
-       0,     0,     0,     0,     0,     0,    21,     0,     0,     5,
-       6,     0,     0,     0,     0,     0,     0,    23,     0,    24,
-      25,    26,    27,     0,     0,     0,     0,     0,    32,    29,
-       0,     0,     0,    33,    34,    35,     0,     0,     0,    36,
-       8,    37,     9,     0,     0,   227,     0,     0,    10,     0,
-       0,     0,     0,     0,   228,     0,    40,     0,     0,     0,
-       0,     0,     0,    32,    41,    42,     0,     0,    33,    34,
-      35,     0,    15,     0,    36,     0,    37,     0,   224,    17,
-     227,     0,     0,     0,     0,    19,     0,     0,    20,   228,
-       0,    40,     0,     0,     0,    21,     0,     0,     0,    41,
-      42,     0,     0,     0,     0,     0,     0,     0,    24,    25,
+       0,    32,     0,     0,     0,     0,     0,    34,    35,    36,
+       0,    15,     0,    37,     0,     0,    38,   232,    17,     0,
+     235,     0,     0,     0,     0,    19,     0,     0,    20,   236,
+       0,    41,     0,     0,     0,    21,     0,     0,     0,    42,
+      43,     0,     0,     0,     0,     0,     0,     0,    24,    25,
       26,    27,     0,     0,     0,     0,     0,     0,    29,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    33,    34,    35,
-       0,     0,     0,    36,     0,     0,     0,     0,     0,   227,
-       0,     0,     0,     0,     0,     0,   113,     0,   228,   114,
-      40,   115,   116,   117,   118,   119,     0,   120,    41,    42,
-     121,     0,   122,     0,     0,     0,   123,   124,     0,   125,
-     126,   127,   128,   129,   130,     0,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,     0,   140,     0,     0,   141,
-     142,   143,   144,   145,     0,     0,   146,     0,     0,     0,
-     147,     0,   148,   149,     0,   150,   151,   152,   153,   154,
-     155,     0,   156,   157,   158,   159,   160,   161,     0,     0,
-     162,     0,     0,   163,     0,     0,     0,     0,     0,   164,
-     165,     0,   166,   167,     0,   168,   169,     0,     0,     0,
-     170,   171,   172,   173,   174,   175,     0,   176,   177,   178,
-     179,   180,   181,   182,     0,   183,     0,   184,     0,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,     0,   194,
-     195,   196,   197,     0,     0,     0,     0,   198,     0,     0,
-     199,     0,     0,   200,   201,     0,     0,   202,   203,   204,
-     205,     0,     0,   206,     0,   207,     0,   208,   209,   210,
-     211,   212,   213,   214,     0,     0,   215
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,    35,    36,     0,     0,     0,    37,     0,     0,
+       0,     0,     0,     0,   235,     0,     0,     0,     0,     0,
+     119,     0,     0,   236,   120,    41,   121,   122,   123,   124,
+     125,     0,   126,    42,    43,   127,     0,   128,     0,     0,
+       0,   129,   130,     0,   131,   132,   133,   134,   135,   136,
+       0,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+       0,   146,     0,     0,   147,   148,   149,   150,   151,     0,
+       0,   152,   153,     0,     0,     0,   154,     0,   155,   156,
+       0,   157,   158,   159,   160,   161,   162,     0,   163,   164,
+     165,   166,   167,   168,     0,     0,   169,     0,     0,   170,
+       0,     0,     0,     0,     0,   171,   172,     0,   173,   174,
+       0,   175,   176,   177,     0,     0,     0,     0,   178,   179,
+     180,     0,   181,   182,   183,     0,   184,   185,   186,   187,
+     188,   189,   190,     0,   191,     0,   192,     0,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,     0,   202,   203,
+     204,   205,     0,     0,     0,     0,     0,   206,     0,     0,
+     207,     0,     0,     0,   208,   209,     0,     0,   210,   211,
+     212,   213,     0,     0,   214,     0,   215,     0,   216,   217,
+     218,   219,   220,   221,   222,     0,     0,   223
 };
 
 static const yytype_int16 yycheck[] =
 {
-       2,    54,     2,     2,    77,    51,   222,    77,   266,     2,
-     301,   361,     2,     2,    78,     2,   341,    54,     2,     2,
-      18,     2,     2,   302,     2,     2,   305,   309,   307,   262,
-     263,   310,   363,     7,    38,    39,   315,    75,    76,   108,
-     637,   105,    80,   327,     3,     3,     5,     5,   575,    28,
-      74,    75,    76,   166,    27,    54,    80,    42,   117,   192,
-     576,    54,    65,   108,    54,   642,   213,    54,   284,   166,
-     647,   218,   213,    58,   166,   366,   192,   218,    57,     3,
-       0,     5,    18,   213,    43,    43,   219,   217,   298,    48,
-      48,   301,    71,   138,    67,   143,   297,    76,   308,   147,
-     212,   311,   215,   219,   217,   108,     3,   317,   318,   192,
-       7,     8,     9,    10,    11,    12,   192,   644,   215,    43,
-      79,    79,   323,   215,   192,   192,   192,   175,     3,   645,
-     363,     6,   213,   357,   711,   216,   219,   192,   354,   218,
-     737,   357,   213,   219,   213,   574,   471,   218,   214,   578,
-     217,   219,   104,   680,   213,    79,   366,   367,   483,   214,
-      10,    18,   235,   387,   388,   235,     7,     8,    29,   685,
-     386,   387,   388,    34,   218,   134,   134,    35,     3,   463,
-       5,    78,    40,   156,     3,   712,     5,     6,    10,   262,
-     263,    13,   262,   263,   217,   405,   406,   407,   408,   409,
-     410,   411,   718,   162,   162,   213,   213,   244,   216,   216,
-     134,     3,   218,     5,   212,   213,   172,   190,   220,   221,
-     293,   220,   221,   227,   228,   217,   217,   220,   221,   126,
-     509,   216,   270,   220,   221,   217,   469,   213,   162,     3,
-     216,     5,   295,   202,   202,   219,   270,     3,   215,     5,
-     679,    43,   316,   682,   213,   319,   309,   321,   322,   218,
-     218,   158,   326,   217,   200,   201,   202,   203,   204,   560,
-     620,   215,   217,   531,   171,   554,   212,   213,   202,   217,
-     490,   213,    43,   217,   216,   714,     3,    79,     5,   342,
-     363,   194,   508,   363,   218,   724,   621,     3,   215,     5,
-     197,   215,   217,   200,   201,   202,   379,   309,   205,   206,
-     589,   217,     3,   742,     5,   368,   217,   214,    79,   108,
-      10,   218,   532,   533,   582,   535,   536,   537,   538,   539,
-     540,   541,   542,   543,   544,   545,   546,   547,   548,   549,
-     550,   551,   134,   553,   626,   202,   203,   204,   679,    43,
-     560,   215,   215,   217,    48,   212,   213,   217,   411,   215,
-     362,   217,   362,   362,     3,   690,   368,   215,   213,   362,
-     162,   218,   218,   134,   584,   362,     3,     3,     5,   612,
-     711,   434,   218,   218,   642,    79,   388,   218,     3,   647,
-       5,   218,   650,   724,   218,     3,   469,     5,     3,   469,
-       5,   162,   218,    44,    48,     3,   218,     5,   733,   218,
-     202,   742,   218,   218,    16,    17,    18,    19,    20,    21,
-      22,   213,    24,     3,   477,     5,   218,   218,   218,    16,
-      17,    18,   485,    77,   187,   188,   189,   190,   191,   218,
-     134,   202,   218,     3,   735,     5,   217,   215,   219,   218,
-      91,   218,   213,   711,   220,   218,   218,   218,   102,   692,
-     513,   531,   217,   104,   105,   106,   107,   218,   162,   218,
-     523,   218,   474,   114,   474,   474,   218,   479,   477,   758,
-     482,   474,   482,   482,   474,   474,   485,   474,   472,   482,
-     474,   474,   485,   474,   474,   482,   474,   474,   485,   218,
-     218,   215,   218,   218,   148,   218,   576,   717,   202,   218,
-     720,   218,   217,   154,   218,   218,   218,   161,   159,   213,
-     513,   218,   218,   576,   218,   735,   218,     5,   217,   194,
-      10,   219,   219,   218,     7,    10,    10,   213,    10,   612,
-      10,    10,   612,    10,    10,    10,   218,   763,   764,   217,
-     217,   215,   215,   215,   194,   215,   217,   212,   604,   215,
-     219,   192,   216,   616,     7,    10,   639,   220,   219,   219,
-     219,   218,   642,   626,   576,   645,   219,   647,   192,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,   212,   219,
-     219,   192,   645,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   219,    98,   172,   219,   219,   219,   219,
-     212,   213,   219,   200,   201,   202,   203,   204,   192,   692,
-     219,   216,   692,   219,   626,   212,   213,   219,   219,   219,
-     219,   219,   685,   219,   219,   219,   219,   219,   219,   212,
-     219,   711,   219,   645,   219,   194,     3,   217,     5,     6,
-       7,     8,     9,    10,    11,    12,   219,   216,   192,     3,
-     217,   219,   217,     3,     7,   718,     3,   219,    10,     7,
-       7,     8,     9,    10,    11,    12,   192,   217,   213,    36,
-     216,    38,   219,   685,   217,     5,   194,    44,   219,   691,
-     219,    48,   691,   695,   219,   695,   695,   219,   691,   219,
-     215,   219,   695,   194,   691,   219,   219,   217,   695,   194,
-     219,    68,   217,   355,   557,   508,   718,    74,    75,   584,
-      77,    78,   481,   317,    81,   764,    54,    84,   627,   479,
-      86,     3,   737,   235,    91,     7,     8,     9,    10,    11,
-      12,    78,   248,   632,   313,   102,   630,   104,   105,   106,
-     107,   628,   375,    -1,    -1,    -1,   193,   114,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,    -1,   126,
-      -1,    -1,    -1,    -1,    -1,   212,   213,    -1,    -1,    -1,
-      -1,    -1,   219,    -1,    -1,    -1,    -1,    -1,    -1,   126,
-      -1,   148,    -1,    -1,    -1,    -1,   153,   154,   155,    -1,
-      -1,   158,   159,    -1,   161,    -1,    78,    -1,   165,    -1,
-      -1,    -1,    -1,    -1,   171,    -1,    -1,   174,    -1,   176,
-      -1,   158,    -1,    -1,    -1,    -1,    -1,   184,   185,    -1,
-      -1,    -1,    -1,    -1,   171,    -1,    -1,    -1,    -1,    -1,
-     197,    -1,    -1,   200,   201,   202,    -1,    -1,   205,   206,
-      -1,    -1,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,
-     197,   218,    -1,   200,   201,   202,    -1,    -1,   205,   206,
-      -1,     4,     5,     6,    -1,    -1,    -1,   214,    -1,    -1,
-      -1,   218,    -1,    -1,    -1,    -1,   158,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   171,
-      -1,    -1,    -1,    36,    -1,    38,    -1,    -1,    -1,    -1,
-      -1,    44,    45,    -1,    -1,    48,    -1,    -1,    -1,    -1,
-      -1,    -1,    55,    -1,    -1,   197,    -1,    -1,   200,   201,
-     202,    -1,    65,   205,   206,    68,    -1,    -1,    -1,    -1,
-      -1,    74,    75,    -1,    77,    -1,   218,    -1,    81,    -1,
-      -1,    84,    -1,    -1,    -1,    -1,    -1,    -1,    91,    -1,
-      -1,    -1,    -1,    -1,    -1,    98,    99,    -1,    -1,   102,
-      -1,   104,   105,   106,   107,   108,    -1,    -1,    -1,    -1,
-      -1,   114,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     4,     5,     6,    -1,    -1,
-      -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   148,    -1,    -1,    -1,    -1,
-     153,   154,   155,    -1,    -1,    -1,   159,    36,   161,    38,
-      -1,    -1,   165,    -1,    -1,    44,    45,    -1,    -1,    48,
-      -1,   174,    -1,   176,    -1,    -1,    55,    -1,    -1,    -1,
-      -1,   184,   185,    -1,    -1,    -1,    65,    -1,    -1,    68,
-      -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    77,    -1,
-      -1,    -1,    81,    -1,    -1,    84,    -1,    -1,    -1,    -1,
-     213,    -1,    91,   216,    -1,    -1,    -1,    -1,    -1,    98,
-      99,    -1,    -1,   102,    -1,   104,   105,   106,   107,   108,
-      -1,    -1,    -1,    -1,    -1,   114,    -1,    -1,    -1,    -1,
-     119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     4,
-       5,     6,    -1,    -1,    -1,    -1,    -1,   136,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   148,
-      -1,    -1,    -1,    -1,   153,   154,   155,    -1,    -1,    -1,
-     159,    36,   161,    38,    -1,    -1,   165,    -1,    -1,    44,
-      45,    -1,    -1,    48,    -1,   174,    -1,   176,    -1,    -1,
-      55,    -1,    -1,    -1,    -1,   184,   185,    -1,    -1,    -1,
-      65,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    74,
-      75,    -1,    77,    -1,    -1,    -1,    81,    -1,    -1,    84,
-      -1,    -1,    -1,    -1,   213,    -1,    91,   216,     4,     5,
-       6,    -1,    -1,    98,    -1,    -1,    -1,   102,    -1,   104,
-     105,   106,   107,   108,    -1,    -1,    -1,    -1,    -1,   114,
-      -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
-      36,    -1,    38,     4,     5,     6,    -1,    -1,    44,    -1,
-      -1,   136,    48,    -1,    -1,    -1,    -1,    -1,    -1,    55,
-      -1,    -1,    -1,   148,    -1,    -1,    -1,    -1,   153,   154,
-     155,    -1,    68,    -1,   159,    36,   161,    38,    74,    75,
-     165,    77,    -1,    44,    -1,    81,    -1,    48,    84,   174,
-      -1,   176,    -1,    -1,    55,    91,    -1,    -1,    -1,   184,
-     185,    -1,    98,    -1,    -1,    -1,   102,    68,   104,   105,
-     106,   107,    -1,    74,    75,    -1,    77,    -1,   114,    -1,
-      81,    -1,    -1,    84,    -1,    -1,    -1,    -1,   213,    -1,
-      91,   216,     4,     5,     6,    -1,    -1,    98,    -1,    -1,
-     136,   102,    -1,   104,   105,   106,   107,    -1,    -1,    -1,
-      -1,    -1,   148,   114,    -1,    -1,    -1,   153,   154,   155,
-      -1,    -1,    -1,   159,    36,   161,    38,    -1,    -1,   165,
-      -1,    -1,    44,    -1,    -1,   136,    48,    -1,   174,    -1,
-     176,    -1,    -1,    55,    -1,    -1,    -1,   148,   184,   185,
-      -1,    -1,   153,   154,   155,    -1,    68,    -1,   159,    -1,
-     161,    -1,    74,    75,   165,    77,    -1,    -1,    -1,    81,
-      -1,    -1,    84,   174,    -1,   176,    -1,   213,    -1,    91,
-     216,    -1,    -1,   184,   185,    -1,    98,    -1,    -1,    -1,
-     102,    -1,   104,   105,   106,   107,    -1,    -1,    -1,    -1,
-      -1,    -1,   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   213,     5,     6,   216,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   148,    -1,    -1,    -1,
-      -1,   153,   154,   155,    36,    -1,    38,   159,    -1,   161,
-      -1,    -1,    44,   165,    -1,    -1,    48,    -1,    -1,    -1,
-      -1,    -1,   174,    -1,   176,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   184,   185,    -1,    -1,    68,    -1,    -1,    -1,
-      -1,    -1,    74,    75,    -1,    77,    -1,    -1,    -1,    81,
-      -1,    -1,    84,    -1,    -1,    -1,    -1,    -1,    -1,    91,
-      -1,   213,    -1,    -1,   216,    -1,    -1,    -1,    -1,    -1,
-     102,    -1,   104,   105,   106,   107,    -1,    -1,    -1,    -1,
-      -1,    -1,   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,    -1,
-      16,    17,    18,    19,    20,    21,    22,    15,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   148,    -1,    -1,    -1,
-      -1,   153,   154,   155,    -1,    -1,    -1,   159,    36,   161,
-      38,    -1,    -1,   165,    -1,    -1,    44,    45,    -1,    -1,
-      48,    -1,   174,    -1,   176,    -1,    -1,    55,    -1,    -1,
-      -1,    -1,   184,   185,    -1,    -1,    -1,    65,    -1,    -1,
-      68,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    77,
-      -1,    -1,    -1,    81,    -1,    -1,    84,    -1,    -1,    -1,
-      -1,   213,    -1,    91,   216,    -1,    -1,    -1,    -1,    -1,
-      98,    -1,    -1,    -1,   102,    -1,   104,   105,   106,   107,
-     108,    -1,    -1,    -1,    -1,    -1,   114,    -1,    -1,    -1,
-      -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   136,     4,
-       5,     6,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    14,
-     148,    -1,    -1,    -1,    -1,   153,   154,   155,    -1,    -1,
-      -1,   159,    -1,   161,    -1,    -1,    -1,   165,    -1,    -1,
-      -1,    36,    -1,    38,   172,    -1,   174,    -1,   176,    44,
-      45,    -1,    -1,    48,    -1,    -1,   184,   185,    -1,    -1,
-      55,   197,   198,   199,   200,   201,   202,   203,   204,    -1,
-      65,    -1,    -1,    68,    -1,    -1,   212,   213,    -1,    74,
-      75,    -1,    77,    -1,    -1,   213,    81,    -1,    -1,    84,
-      -1,    -1,    -1,    -1,    -1,    -1,    91,    -1,    -1,     5,
-       6,    -1,    -1,    98,    99,    -1,    -1,   102,    -1,   104,
-     105,   106,   107,   108,    -1,    -1,    -1,    -1,    -1,   114,
-      -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
-      36,    -1,    38,    -1,    -1,    -1,    -1,    43,    44,    -1,
-      -1,   136,    48,    -1,    -1,    -1,    -1,    -1,    -1,    16,
-      17,    18,    -1,   148,    21,    22,    -1,    -1,   153,   154,
-     155,    -1,    68,    -1,   159,    -1,   161,    -1,    74,    75,
-     165,    77,    -1,    79,    -1,    81,    -1,    -1,    84,   174,
-      -1,   176,    -1,    -1,    -1,    91,    -1,    -1,    -1,   184,
-     185,    -1,    -1,    -1,    -1,    -1,   102,    -1,   104,   105,
-     106,   107,    -1,    -1,    -1,    -1,    -1,    -1,   114,    16,
-      17,    18,    19,    20,    21,    22,    -1,    -1,   213,     5,
-       6,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   134,    -1,
+       2,    81,     2,     2,    52,    55,   277,     2,   312,     2,
+      81,   230,     2,   377,   379,     2,     2,    82,     2,     2,
+     356,     2,     2,    55,     2,     7,   120,     2,     2,   314,
+     273,   274,   317,   321,   319,    79,    80,   322,   601,    27,
+      84,   340,   110,   328,    49,    18,   111,   664,    78,    79,
+      80,    43,   110,   669,    84,     3,    55,     5,   674,     3,
+      55,     5,    55,    39,    40,    55,   173,    59,    55,    29,
+     220,     0,   173,   600,    79,   225,   295,   373,   382,     3,
+     173,     5,   308,   219,     3,   143,     5,    66,    29,   148,
+       7,     8,   309,   152,    35,   312,    44,    44,    58,   104,
+      44,    49,    49,   320,   225,    49,   323,   403,   404,   672,
+     336,   199,    72,   330,   331,   222,   199,   224,    78,    28,
+      44,   222,   738,   182,    18,    44,   220,    10,   220,   222,
+     199,   110,   224,    81,    81,   220,   379,    81,   226,   127,
+     225,   106,   199,   226,   671,   199,   199,   764,   153,   712,
+     369,   370,   220,   199,   373,   224,   179,    81,   494,    68,
+     199,   497,    81,   168,   244,   382,   383,     3,   221,   226,
+       6,   507,   226,   244,   225,   221,    36,   222,   225,   167,
+     707,    41,   745,   402,   403,   404,   485,   226,     3,   224,
+       5,   139,   139,   273,   274,   139,   220,     3,   224,     5,
+       6,   225,   273,   274,   421,   422,   423,   424,   425,   426,
+     427,   220,   739,   224,   223,   139,    16,    17,    18,   222,
+     139,   169,   169,   255,    18,   169,   228,   229,   224,   228,
+     229,   223,     3,   304,     5,   228,   229,   281,   201,   224,
+      10,   228,   229,    13,   226,   169,   219,   220,   533,   492,
+     169,   281,   220,   162,   220,   223,   306,   223,   222,   235,
+     236,   209,   209,   313,   329,   209,     3,   332,     5,   334,
+     335,   321,   220,   220,   339,   224,   222,   225,   225,   224,
+     584,   225,   224,   647,   555,   209,   220,   599,   197,   223,
+     209,   603,   220,   578,   224,   223,   220,   514,    44,   379,
+     220,   225,     3,   223,     5,   110,   225,   357,   379,     3,
+     222,     5,   648,   532,   224,   209,   210,   211,     3,   321,
+       5,     3,   224,     5,   395,   219,   220,   222,   224,   224,
+     615,   222,    10,   224,   384,    81,   607,   222,   224,   556,
+     557,   706,   559,   560,   561,   562,   563,   564,   565,   566,
+     567,   568,   569,   570,   571,   572,   573,   574,   575,     3,
+     577,     5,     3,     3,     5,   653,     3,   584,     5,     3,
+      45,     5,     3,   738,     5,   222,   378,   427,   378,   378,
+     122,   717,   384,   225,   225,   378,   751,     3,     3,     5,
+       5,   378,   609,   139,   706,   225,   639,   709,   669,   225,
+     225,   451,   404,   674,   769,   225,   677,   207,   208,   209,
+     210,   211,   492,   207,   208,   209,   210,   211,    93,   219,
+     220,   492,   225,   169,   760,   219,   220,   225,   224,   741,
+     226,   106,   107,   108,   109,   225,   225,   225,   225,   751,
+     225,   116,   225,    16,    17,    18,    19,    20,    21,    22,
+     225,   501,   194,   195,   196,   197,   198,   769,   762,   509,
+     225,   225,   225,   209,   225,   225,   225,   738,   225,   225,
+     225,   225,   225,   225,   220,   555,   719,   225,   225,   225,
+     225,   225,   225,     3,   225,   160,   225,   537,     5,   225,
+     165,   225,   225,   225,   220,   222,   498,   547,   498,   498,
+     785,   503,   501,   498,   506,   498,   506,   506,   498,   495,
+     509,   498,   498,   506,   498,   498,   509,   498,   498,   506,
+     498,   601,   509,   498,   498,   224,   224,   744,   224,   222,
+     747,   201,   227,   225,    10,   226,   226,   225,     7,    10,
+      10,   220,    10,    10,   537,   762,    10,    10,    10,    10,
+     224,   601,   225,   224,   222,   224,   222,   222,   201,   639,
+     224,   222,   219,   226,   222,   227,   199,   223,   639,     7,
+     225,   790,   791,   226,   226,   226,   226,   199,   226,   199,
+     219,   226,   630,    10,   226,   199,   100,   219,   226,   669,
+     226,   226,   672,   643,   674,   666,   226,   226,   226,   601,
+     226,   226,   226,   653,   201,   226,   224,   226,     3,   226,
+       5,     6,     7,     8,     9,    10,    11,    12,   226,     3,
+     226,   226,   672,     7,     8,     9,    10,    11,    12,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   719,
+     226,   226,    37,   226,    39,   226,   219,   220,   719,   226,
+      45,   653,   226,   199,    49,   226,   226,   223,   738,   223,
+     179,   226,   712,    16,    17,    18,    19,    20,    21,    22,
+     672,    24,   226,   224,    69,   224,     3,     3,     7,    10,
+      75,    76,     7,   226,    79,    80,   199,   224,    83,   220,
+     223,    86,   224,     5,   201,   745,    80,   226,    93,     3,
+     226,   226,   226,     7,     8,     9,    10,    11,    12,   104,
+     712,   106,   107,   108,   109,   226,   718,   222,   226,   718,
+     722,   116,   722,   722,   226,   718,   226,   226,   224,   722,
+     581,   718,   226,   224,   330,   722,   131,   505,   609,   532,
+     654,   201,   201,   745,   371,     3,    55,   131,   791,     7,
+       8,     9,    10,    11,    12,   259,   251,   764,   153,   244,
+      90,   659,   655,   503,   159,   160,   161,   326,   657,   164,
+     165,    -1,    -1,   168,    -1,    -1,    80,   172,   391,    -1,
+     164,    -1,    -1,   178,    -1,    -1,   181,    -1,   183,    -1,
+      -1,    -1,    -1,    -1,   178,    -1,   191,   192,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   204,
+      -1,    -1,   207,   208,   209,    -1,    -1,   212,   213,    -1,
+     204,    -1,    80,   207,   208,   209,    -1,   131,   212,   213,
+     225,    -1,    -1,    -1,    -1,    -1,    -1,   221,    -1,    -1,
+      -1,   225,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,    -1,
+     164,    -1,    -1,    -1,    -1,    -1,   219,   220,    -1,    -1,
+      -1,    -1,    -1,   131,   178,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   148,    -1,    -1,    -1,    -1,   153,   154,   155,
-      36,    -1,    38,   159,    -1,   161,   162,    43,    44,   165,
-      -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,   174,    -1,
-     176,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   184,   185,
-      -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      -1,    77,    -1,    79,    -1,    81,   202,    -1,    84,    -1,
-      -1,    -1,    -1,    -1,    -1,    91,    -1,   213,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   102,    -1,   104,   105,
-     106,   107,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
-      -1,   198,   199,   200,   201,   202,   203,   204,    -1,     5,
-       6,    -1,    -1,    -1,    -1,   212,   213,    -1,   134,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
-      -1,    -1,   148,    -1,    -1,    -1,    -1,   153,   154,   155,
-      36,    -1,    38,   159,    -1,   161,   162,    -1,    44,   165,
-      -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,   174,    -1,
-     176,   198,   199,   200,   201,   202,   203,   204,   184,   185,
-      -1,    -1,    68,    -1,    -1,   212,   213,    -1,    74,    75,
-      -1,    77,    -1,    -1,    -1,    81,   202,    -1,    84,    -1,
-      -1,    -1,    -1,    -1,    -1,    91,    -1,   213,     5,     6,
-      -1,    -1,    -1,    -1,    -1,    -1,   102,    -1,   104,   105,
-     106,   107,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,
-      -1,    38,    -1,    -1,    -1,    -1,    -1,    44,    -1,    -1,
-      -1,    48,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    -1,   148,    -1,    -1,    -1,    -1,   153,   154,   155,
-      -1,    68,    -1,   159,    -1,   161,    -1,    74,    75,   165,
-      77,    -1,    -1,    -1,    81,    -1,    -1,    84,   174,    -1,
-     176,    -1,    -1,    -1,    91,    -1,    -1,    -1,   184,   185,
-      -1,    -1,    -1,    -1,    -1,   102,    -1,   104,   105,   106,
-     107,    -1,    -1,    -1,    -1,    -1,    -1,   114,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,   213,    -1,    -1,
+      -1,     4,     5,     6,    -1,    -1,    16,    17,    18,    -1,
+     204,    21,    22,   207,   208,   209,   164,    -1,   212,   213,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   221,    -1,    -1,
+     178,   225,    -1,    -1,    37,    -1,    39,    -1,    -1,    -1,
+      -1,    -1,    45,    46,    -1,    -1,    49,    -1,    -1,    -1,
+      -1,    -1,    -1,    56,    -1,    -1,   204,    -1,    -1,   207,
+     208,   209,    -1,    66,   212,   213,    69,    -1,    -1,    -1,
+      -1,    -1,    75,    76,    -1,    -1,    79,   225,    -1,    -1,
+      83,    -1,    -1,    86,    -1,    -1,    -1,    -1,    -1,    -1,
+      93,    -1,    -1,    -1,    -1,    -1,    -1,   100,   101,    -1,
+      -1,   104,    -1,   106,   107,   108,   109,   110,    -1,    -1,
+      -1,    -1,    -1,   116,    -1,    -1,    -1,    -1,    -1,    -1,
+     123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,    -1,
+       4,     5,     6,    16,    17,    18,    19,    20,    21,    22,
+     153,    -1,    -1,    -1,    -1,   158,   159,   160,   161,    -1,
+      -1,    -1,   165,    -1,    -1,   168,    -1,    -1,    -1,   172,
+      -1,    -1,    -1,    37,    -1,    39,    -1,    -1,   181,    -1,
+     183,    45,    46,    -1,    -1,    49,    -1,    -1,   191,   192,
+      -1,    -1,    56,    -1,    -1,   205,   206,   207,   208,   209,
+     210,   211,    66,    -1,    -1,    69,    -1,    -1,    -1,   219,
+     220,    75,    76,    -1,    -1,    79,    -1,   220,    -1,    83,
+     223,    -1,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,
+      -1,    -1,    -1,    -1,    -1,    -1,   100,   101,    -1,    -1,
+     104,    -1,   106,   107,   108,   109,   110,    -1,    -1,    -1,
+      -1,    -1,   116,    -1,    -1,    -1,    -1,    -1,    -1,   123,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    16,    17,    18,    19,    20,    21,    22,
-      -1,   148,    -1,    -1,    -1,    -1,   153,   154,   155,    -1,
-      -1,    -1,   159,    -1,   161,    -1,    -1,    -1,   165,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   174,    -1,   176,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   184,   185,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,    -1,     4,
+       5,     6,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   153,
+      -1,    -1,    -1,    -1,   158,   159,   160,   161,    -1,    -1,
+      -1,   165,    -1,    -1,   168,    -1,    -1,    -1,   172,    -1,
+      -1,    -1,    37,    -1,    39,    -1,    -1,   181,    -1,   183,
+      45,    46,    -1,    -1,    49,    -1,    -1,   191,   192,    -1,
+      -1,    56,   205,   206,   207,   208,   209,   210,   211,    -1,
+      -1,    66,    -1,    -1,    69,    -1,   219,   220,    -1,    -1,
+      75,    76,    -1,    -1,    79,    -1,   220,    -1,    83,   223,
+      -1,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
+      -1,    -1,    -1,    -1,    -1,   100,    -1,    -1,    -1,   104,
+      -1,   106,   107,   108,   109,   110,    -1,    -1,    -1,    -1,
+      -1,   116,    -1,    -1,    -1,    -1,    -1,    -1,   123,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   213,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    -1,    -1,    -1,   193,
-      -1,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   212,   213,
-      -1,    -1,    -1,    -1,    -1,   219,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   193,    -1,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,    16,    17,    18,
-      19,    20,    21,    22,   212,   213,    -1,    -1,    -1,    -1,
-      -1,   219,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   212,
-     213,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   141,    -1,     4,     5,
+       6,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   153,    -1,
+      -1,    -1,    -1,   158,   159,   160,   161,    -1,    -1,    -1,
+     165,    -1,    -1,   168,    -1,    -1,    -1,   172,    -1,    -1,
+      -1,    37,    -1,    39,    -1,    -1,   181,    -1,   183,    45,
+      -1,    -1,    -1,    49,    -1,    -1,   191,   192,    -1,    -1,
+      56,    -1,    -1,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    -1,    69,    -1,    -1,    -1,    -1,    -1,    75,
+      76,    -1,    -1,    79,    -1,   220,    -1,    83,   223,    -1,
+      86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
+      -1,    -1,    -1,    -1,   100,    -1,    -1,    -1,   104,    -1,
+     106,   107,   108,   109,    -1,    -1,    -1,    -1,    -1,    -1,
+     116,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   193,    -1,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   212,   213,   214,    -1,    -1,
-      -1,    -1,    -1,    -1,   193,    -1,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   212,   213,   214,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   141,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   153,    -1,    37,
+      -1,    39,    -1,   159,   160,   161,    -1,    45,    -1,   165,
+      -1,    49,   168,    -1,    -1,    -1,   172,    -1,    56,    -1,
+      -1,    -1,    -1,    -1,    -1,   181,    -1,   183,    -1,    -1,
+      -1,    69,    -1,    -1,    -1,   191,   192,    75,    76,    -1,
+      -1,    79,    -1,    -1,    -1,    83,    -1,    -1,    86,    -1,
+      -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,
+      -1,    -1,   100,    -1,   220,    -1,   104,   223,   106,   107,
+     108,   109,    -1,    -1,    -1,    -1,    -1,    -1,   116,    -1,
+      -1,    -1,    -1,    -1,     4,     5,     6,   200,    -1,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,    -1,
+      -1,    -1,    -1,   141,    -1,    -1,   219,   220,    -1,    -1,
+      -1,    -1,    -1,   226,    -1,   153,    -1,    37,    -1,    39,
+      -1,   159,   160,   161,    -1,    45,    -1,   165,    -1,    49,
+     168,    -1,    -1,    -1,   172,    -1,    56,    -1,    -1,    -1,
+      -1,    -1,    -1,   181,    -1,   183,    -1,    -1,    -1,    69,
+      -1,    -1,    -1,   191,   192,    75,    76,    -1,    -1,    79,
+      -1,    -1,    -1,    83,    -1,    -1,    86,    -1,    -1,    -1,
+      -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,
+     100,    -1,   220,    -1,   104,   223,   106,   107,   108,   109,
+      -1,    -1,    -1,    -1,    -1,    -1,   116,    -1,    -1,    -1,
+      -1,    -1,    -1,     5,     6,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   212,   213,   193,    -1,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   212,   213,     5,     6,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,    -1,    -1,    -1,    -1,
-      30,    -1,    -1,   212,   213,    -1,    36,    -1,    38,    -1,
-       5,     6,    -1,    -1,    44,    45,    -1,    -1,    48,    -1,
+      -1,   141,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   153,    -1,    37,    -1,    39,    -1,   159,
+     160,   161,    -1,    45,    -1,   165,    -1,    49,   168,    -1,
+      -1,    -1,   172,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   181,    -1,   183,    -1,    -1,    -1,    69,    -1,    -1,
+      -1,   191,   192,    75,    76,    -1,    -1,    79,    -1,    -1,
+      -1,    83,    -1,    -1,    86,    -1,    -1,    -1,    -1,    -1,
+      -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     220,    -1,   104,   223,   106,   107,   108,   109,    -1,    -1,
+      -1,    -1,    -1,    -1,   116,    -1,    -1,    -1,    -1,    -1,
+       4,     5,     6,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    15,    -1,    -1,    -1,    -1,    16,    17,    18,    19,
+      20,    21,    22,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   153,    -1,    37,    -1,    39,    -1,   159,   160,   161,
+      -1,    45,    46,   165,    -1,    49,   168,    -1,    -1,    -1,
+     172,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,   181,
+      -1,   183,    66,    -1,    -1,    69,    -1,    -1,    -1,   191,
+     192,    75,    76,    -1,    -1,    79,    -1,    -1,    -1,    83,
+      -1,    -1,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,
+      -1,    -1,    -1,    -1,    -1,    -1,   100,    -1,   220,    -1,
+     104,   223,   106,   107,   108,   109,   110,    -1,    -1,    -1,
+      -1,    -1,   116,    -1,    -1,    -1,    -1,    -1,    -1,   123,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    68,    -1,
-      -1,    36,    -1,    38,    74,    75,    -1,    77,    -1,    44,
-      -1,    81,    -1,    48,    84,    -1,    -1,    -1,    -1,    -1,
-      -1,    91,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   102,    68,   104,   105,   106,   107,   108,    74,
-      75,   111,    77,    -1,   114,    -1,    81,    -1,   118,    84,
-      -1,    -1,    -1,    -1,    -1,    -1,    91,    -1,    -1,     5,
-       6,    -1,    -1,    -1,    -1,    -1,    -1,   102,    -1,   104,
-     105,   106,   107,    -1,    -1,    -1,    -1,    -1,   148,   114,
-      -1,    -1,    -1,   153,   154,   155,    -1,    -1,    -1,   159,
-      36,   161,    38,    -1,    -1,   165,    -1,    -1,    44,    -1,
-      -1,    -1,    -1,    -1,   174,    -1,   176,    -1,    -1,    -1,
-      -1,    -1,    -1,   148,   184,   185,    -1,    -1,   153,   154,
-     155,    -1,    68,    -1,   159,    -1,   161,    -1,    74,    75,
-     165,    -1,    -1,    -1,    -1,    81,    -1,    -1,    84,   174,
-      -1,   176,    -1,    -1,    -1,    91,    -1,    -1,    -1,   184,
-     185,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,
-     106,   107,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   153,
+       4,     5,     6,    -1,   158,   159,   160,   161,    -1,    -1,
+      14,   165,    -1,    -1,   168,    -1,    -1,    -1,   172,    -1,
+      -1,    -1,    -1,    -1,    -1,   179,    -1,   181,    -1,   183,
+      -1,    -1,    -1,    37,    -1,    39,    -1,   191,   192,    -1,
+      -1,    45,    46,    -1,    -1,    49,    -1,    -1,    -1,    -1,
+      -1,    -1,    56,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,    66,    -1,    -1,    69,   220,    -1,    -1,   219,
+     220,    75,    76,    -1,    -1,    79,    -1,    -1,    -1,    83,
+      -1,    -1,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,
+      -1,    -1,    -1,    -1,    -1,    -1,   100,   101,    -1,    -1,
+     104,    -1,   106,   107,   108,   109,   110,    -1,    -1,    -1,
+      -1,    -1,   116,    -1,    -1,    -1,    -1,    -1,    -1,   123,
+      -1,    -1,    -1,    -1,    -1,    -1,     5,     6,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   153,
+      -1,    -1,    -1,    -1,   158,   159,   160,   161,    37,    -1,
+      39,   165,    -1,    -1,   168,    44,    45,    -1,   172,    -1,
+      49,    -1,    -1,    -1,    -1,    -1,    -1,   181,    -1,   183,
+      16,    17,    18,    19,    20,    21,    22,   191,   192,    -1,
+      69,    -1,    -1,    -1,    -1,    -1,    75,    76,    -1,    -1,
+      79,    -1,    81,    -1,    83,    -1,    -1,    86,    -1,    -1,
+      -1,    -1,    -1,    -1,    93,    -1,   220,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   104,    -1,   106,   107,   108,
+     109,    -1,    -1,    -1,    -1,    -1,    -1,   116,    -1,    -1,
+      -1,    -1,    -1,    -1,     5,     6,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     139,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   153,    -1,    37,    -1,    39,    -1,
+     159,   160,   161,    44,    45,    -1,   165,    -1,    49,   168,
+     169,    -1,    -1,   172,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   181,    -1,   183,    -1,    -1,    -1,    69,    -1,
+      -1,    -1,   191,   192,    75,    76,    -1,    -1,    79,    -1,
+      81,    -1,    83,    -1,    -1,    86,    -1,    -1,    -1,    -1,
+     209,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   220,    -1,   104,    -1,   106,   107,   108,   109,    -1,
+      -1,    -1,    -1,    -1,    -1,   116,    -1,    -1,    -1,    -1,
+      -1,    -1,     5,     6,    -1,    -1,    -1,    -1,   204,   205,
+     206,   207,   208,   209,   210,   211,    -1,    -1,   139,    -1,
+      -1,    -1,    25,   219,   220,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   153,    -1,    37,    -1,    39,    -1,   159,   160,
+     161,    -1,    45,    -1,   165,    -1,    49,   168,   169,    -1,
+      -1,   172,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     181,    -1,   183,    -1,    -1,    -1,    69,    -1,    -1,    -1,
+     191,   192,    75,    76,    -1,    -1,    79,    -1,    -1,    -1,
+      83,    -1,    -1,    86,    -1,    -1,    -1,    -1,   209,    -1,
+      93,    -1,    -1,    -1,    -1,    -1,     5,     6,    -1,   220,
+      -1,   104,    -1,   106,   107,   108,   109,    -1,    -1,    -1,
+      -1,    -1,    -1,   116,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    -1,    -1,    -1,    -1,    -1,    37,    -1,
+      39,    -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,
+      49,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+     153,    -1,    -1,    -1,    -1,    -1,   159,   160,   161,    -1,
+      69,    -1,   165,    -1,    -1,   168,    75,    76,    -1,   172,
+      79,    -1,    -1,    -1,    83,    -1,    -1,    86,   181,    -1,
+     183,    -1,    -1,    -1,    93,    -1,    -1,    -1,   191,   192,
+      -1,    -1,    -1,    -1,    -1,   104,    -1,   106,   107,   108,
+     109,    -1,    -1,    -1,    -1,    -1,    -1,   116,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,   220,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    -1,
+      -1,    -1,    -1,    -1,   153,    -1,    -1,    -1,    -1,    -1,
+     159,   160,   161,    -1,    -1,    -1,   165,    -1,    -1,   168,
+      -1,    -1,    -1,   172,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   181,    -1,   183,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   191,   192,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    -1,    -1,    -1,    -1,    -1,   200,    -1,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+      -1,   220,    -1,    -1,    -1,    -1,    -1,   219,   220,    -1,
+      -1,    -1,    -1,    -1,   226,   200,    -1,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   219,   220,    -1,    -1,    -1,    -1,
+      -1,   226,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   200,    -1,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   219,   220,   221,   200,    -1,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   219,   220,   221,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   219,   220,     5,
+       6,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    31,    -1,    -1,    -1,    -1,
+      -1,    37,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
+      46,    -1,    -1,    49,    -1,    -1,   200,    -1,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,    -1,    -1,
+      66,    -1,    -1,    69,    -1,   219,   220,    -1,    -1,    75,
+      76,    -1,    -1,    79,    -1,    -1,    -1,    83,    -1,    -1,
+      86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
+      -1,    -1,    -1,     5,     6,    -1,    -1,    -1,   104,    -1,
+     106,   107,   108,   109,   110,    -1,    -1,   113,    -1,    -1,
+     116,    -1,    -1,    -1,    -1,   121,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    37,    -1,    39,    -1,    -1,
+      -1,    -1,    -1,    45,    -1,    -1,    -1,    49,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   153,    -1,    -1,
+      -1,    -1,   158,   159,   160,   161,    -1,    69,    -1,   165,
+      -1,    -1,   168,    75,    76,    -1,   172,    79,    -1,    -1,
+      -1,    83,    -1,    -1,    86,   181,    -1,   183,    -1,    -1,
+      -1,    93,    -1,    -1,    -1,   191,   192,     5,     6,    -1,
+      -1,    -1,   104,    -1,   106,   107,   108,   109,    -1,    -1,
+      -1,    -1,    -1,    -1,   116,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,
+      -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   153,    -1,    -1,    -1,    -1,    -1,   159,   160,   161,
+      -1,    69,    -1,   165,    -1,    -1,   168,    75,    76,    -1,
+     172,    -1,    -1,    -1,    -1,    83,    -1,    -1,    86,   181,
+      -1,   183,    -1,    -1,    -1,    93,    -1,    -1,    -1,   191,
+     192,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   106,   107,
+     108,   109,    -1,    -1,    -1,    -1,    -1,    -1,   116,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   153,   154,   155,
-      -1,    -1,    -1,   159,    -1,    -1,    -1,    -1,    -1,   165,
-      -1,    -1,    -1,    -1,    -1,    -1,    26,    -1,   174,    29,
-     176,    31,    32,    33,    34,    35,    -1,    37,   184,   185,
-      40,    -1,    42,    -1,    -1,    -1,    46,    47,    -1,    49,
-      50,    51,    52,    53,    54,    -1,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    -1,    66,    -1,    -1,    69,
-      70,    71,    72,    73,    -1,    -1,    76,    -1,    -1,    -1,
-      80,    -1,    82,    83,    -1,    85,    86,    87,    88,    89,
-      90,    -1,    92,    93,    94,    95,    96,    97,    -1,    -1,
-     100,    -1,    -1,   103,    -1,    -1,    -1,    -1,    -1,   109,
-     110,    -1,   112,   113,    -1,   115,   116,    -1,    -1,    -1,
-     120,   121,   122,   123,   124,   125,    -1,   127,   128,   129,
-     130,   131,   132,   133,    -1,   135,    -1,   137,    -1,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,    -1,   149,
-     150,   151,   152,    -1,    -1,    -1,    -1,   157,    -1,    -1,
-     160,    -1,    -1,   163,   164,    -1,    -1,   167,   168,   169,
-     170,    -1,    -1,   173,    -1,   175,    -1,   177,   178,   179,
-     180,   181,   182,   183,    -1,    -1,   186
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   159,   160,   161,    -1,    -1,    -1,   165,    -1,    -1,
+      -1,    -1,    -1,    -1,   172,    -1,    -1,    -1,    -1,    -1,
+      26,    -1,    -1,   181,    30,   183,    32,    33,    34,    35,
+      36,    -1,    38,   191,   192,    41,    -1,    43,    -1,    -1,
+      -1,    47,    48,    -1,    50,    51,    52,    53,    54,    55,
+      -1,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      -1,    67,    -1,    -1,    70,    71,    72,    73,    74,    -1,
+      -1,    77,    78,    -1,    -1,    -1,    82,    -1,    84,    85,
+      -1,    87,    88,    89,    90,    91,    92,    -1,    94,    95,
+      96,    97,    98,    99,    -1,    -1,   102,    -1,    -1,   105,
+      -1,    -1,    -1,    -1,    -1,   111,   112,    -1,   114,   115,
+      -1,   117,   118,   119,    -1,    -1,    -1,    -1,   124,   125,
+     126,    -1,   128,   129,   130,    -1,   132,   133,   134,   135,
+     136,   137,   138,    -1,   140,    -1,   142,    -1,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,    -1,   154,   155,
+     156,   157,    -1,    -1,    -1,    -1,    -1,   163,    -1,    -1,
+     166,    -1,    -1,    -1,   170,   171,    -1,    -1,   174,   175,
+     176,   177,    -1,    -1,   180,    -1,   182,    -1,   184,   185,
+     186,   187,   188,   189,   190,    -1,    -1,   193
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_int16 yystos[] =
 {
-       0,   222,   224,     0,     4,     5,     6,    15,    36,    38,
-      44,    45,    48,    55,    65,    68,    74,    75,    77,    81,
-      84,    91,    98,   102,   104,   105,   106,   107,   108,   114,
-     119,   136,   148,   153,   154,   155,   159,   161,   165,   174,
-     176,   184,   185,   213,   223,   230,   231,   233,   234,   235,
-     236,   239,   240,   246,   247,   261,   275,   279,   281,   284,
-     286,   287,   288,   289,   290,   293,   294,   297,   299,   300,
-     301,   302,   304,   305,   306,   307,   308,   310,   312,   330,
-     331,   332,   333,   212,   213,   335,   338,   339,     3,     5,
-     218,     3,     5,     3,     5,   277,   104,   280,    10,     3,
-       5,   280,     3,     6,   218,   218,   280,   281,     3,   277,
-       3,   277,   281,    26,    29,    31,    32,    33,    34,    35,
-      37,    40,    42,    46,    47,    49,    50,    51,    52,    53,
-      54,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      66,    69,    70,    71,    72,    73,    76,    80,    82,    83,
-      85,    86,    87,    88,    89,    90,    92,    93,    94,    95,
-      96,    97,   100,   103,   109,   110,   112,   113,   115,   116,
-     120,   121,   122,   123,   124,   125,   127,   128,   129,   130,
-     131,   132,   133,   135,   137,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   149,   150,   151,   152,   157,   160,
-     163,   164,   167,   168,   169,   170,   173,   175,   177,   178,
-     179,   180,   181,   182,   183,   186,   248,   252,   329,   217,
-     226,   226,   172,    30,    74,   111,   118,   165,   174,   238,
-     261,   286,   293,   299,   303,   310,   330,   333,   217,   217,
-     215,   217,   215,   217,   215,   217,   229,   217,   194,   298,
-     215,   311,   312,   311,   311,     3,     5,    43,    79,   134,
-     162,   202,   218,   254,   278,   313,   314,   327,   261,   330,
-     331,   333,   311,   217,   285,    28,    57,    71,    76,   340,
-     341,   335,   108,    10,   215,   217,     3,   331,   215,   166,
-     215,   218,   218,   218,   218,   218,   218,   218,   218,   218,
-     218,   218,   218,   218,   218,   218,   218,   218,   218,   218,
-     218,   218,   218,   218,   218,   218,   218,   218,   218,   218,
-     218,   218,   218,   218,   218,   218,   218,   192,   214,    14,
-      99,   230,   237,   240,   286,   288,   289,   290,   301,   302,
-     305,   216,   246,   247,     3,     3,     3,     5,     3,     5,
-       3,     3,   215,   327,   291,   225,   138,   295,   299,     3,
-     284,   215,   228,   309,   313,   313,   220,   213,   218,   245,
-     311,     3,     5,   282,   218,   192,   214,     5,   219,   246,
-     257,   258,   259,   260,   194,   219,   268,   218,   271,    10,
-      10,    13,   253,   278,     3,     7,     8,     9,    10,    11,
-      12,    78,   126,   158,   171,   197,   200,   201,   202,   205,
-     206,   218,   264,   265,   266,   251,   310,     7,   250,   253,
-     264,   267,    10,    10,   249,   267,   266,    10,    10,   266,
-      10,   266,   264,   244,   247,   310,   266,   262,   263,   264,
-      10,   329,    10,   266,   331,   262,   264,   331,   187,   188,
-     189,   190,   191,   328,   331,   331,   253,     7,     8,   334,
-      10,   331,   252,   213,   218,   217,   217,   215,   229,   310,
-     215,   216,   246,   292,   224,   194,   117,   246,   273,   296,
-     217,   215,   228,   216,   230,   247,   308,   313,   219,   267,
-     202,   214,   264,   241,   242,   243,   244,   212,    27,    67,
-     156,   190,   342,   343,   341,   215,   278,   216,   192,   220,
-       7,   232,   216,   246,   269,   273,   216,   247,   270,   273,
-     219,   219,   219,   218,   264,   264,   264,   264,   264,   264,
-     264,   310,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,   193,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   212,   213,   192,   219,   219,   192,   212,   219,
-     192,   219,   219,   192,   219,   219,   219,   219,   219,   219,
-     219,   219,   219,   219,   310,   202,   218,   245,   254,   278,
-     319,   321,   322,   219,   192,   219,   219,   219,   219,   192,
-     219,   219,   219,   219,   219,   219,   219,   219,   212,   219,
-     219,   219,   252,    10,   227,   313,   323,   216,   229,   302,
-     216,   194,   310,   330,   217,   216,   247,   274,   275,   216,
-     236,   216,   229,   214,   214,   219,   192,   283,   192,   219,
-     172,   336,   337,   260,   266,     7,   219,   310,   333,   219,
-     217,   217,   310,   219,   202,   218,   245,   254,   315,   317,
-     318,   264,   264,     3,   264,   264,   264,   264,   264,   264,
-     264,   264,   264,   264,   264,   264,   264,   264,   264,   264,
-     264,     3,   264,   266,   250,     7,   267,    10,   321,   309,
-     202,   241,   254,   320,   321,   218,   245,   263,   266,     7,
-     219,   226,   192,   313,   217,   228,   229,    25,   244,   282,
-     343,   339,   216,   336,   319,   325,   326,   217,   276,   278,
-     317,   309,   202,   241,   254,   316,   317,   219,   218,   245,
-     194,   214,   219,   321,   309,   219,   321,   219,   241,   219,
-     229,   216,   313,   216,     5,   194,   324,   192,   217,   215,
-     219,   317,   309,   219,   321,   219,   264,   241,   264,   321,
-     219,   229,   217,   267,   325,   255,   321,   219,    42,    58,
-     216,   256,   266,   194,   194,   217,   272,   273,   272,   217
+       0,   229,   231,     0,     4,     5,     6,    15,    37,    39,
+      45,    46,    49,    56,    66,    69,    75,    76,    79,    83,
+      86,    93,   100,   104,   106,   107,   108,   109,   110,   116,
+     123,   141,   153,   158,   159,   160,   161,   165,   168,   172,
+     181,   183,   191,   192,   220,   230,   237,   238,   240,   241,
+     242,   243,   246,   247,   253,   254,   269,   283,   287,   289,
+     292,   294,   295,   296,   297,   298,   299,   300,   301,   304,
+     305,   308,   310,   311,   312,   313,   315,   316,   317,   318,
+     319,   321,   323,   341,   342,   343,   344,   219,   220,   346,
+     349,   350,     3,     5,   225,     3,     5,     3,     5,   285,
+     106,   288,    10,     3,     5,   288,     3,     6,   225,     3,
+       5,   225,   288,   289,     3,   285,     3,   285,   289,    26,
+      30,    32,    33,    34,    35,    36,    38,    41,    43,    47,
+      48,    50,    51,    52,    53,    54,    55,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    67,    70,    71,    72,
+      73,    74,    77,    78,    82,    84,    85,    87,    88,    89,
+      90,    91,    92,    94,    95,    96,    97,    98,    99,   102,
+     105,   111,   112,   114,   115,   117,   118,   119,   124,   125,
+     126,   128,   129,   130,   132,   133,   134,   135,   136,   137,
+     138,   140,   142,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   154,   155,   156,   157,   163,   166,   170,   171,
+     174,   175,   176,   177,   180,   182,   184,   185,   186,   187,
+     188,   189,   190,   193,   255,   260,   340,   224,   233,   233,
+     179,    31,    75,   113,   121,   172,   181,   245,   269,   294,
+     297,   304,   310,   314,   321,   341,   344,   224,   224,   222,
+     224,   222,   224,   222,   224,   222,   224,   236,   224,   201,
+     309,   222,   322,   323,   322,   322,     3,     5,    44,    81,
+     139,   169,   209,   225,   262,   286,   324,   325,   338,   269,
+     341,   342,   344,   322,   224,   293,    29,    58,    72,    78,
+     351,   352,   346,   110,    10,   222,   224,     3,   342,   222,
+     173,   222,   225,   225,   225,   225,   225,   225,   225,   225,
+     225,   225,   225,   225,   225,   225,   225,   225,   225,   225,
+     225,   225,   225,   225,   225,   225,   225,   225,   225,   225,
+     225,   225,   225,   225,   225,   225,   225,   225,   225,   225,
+     199,   221,    14,   101,   237,   244,   247,   294,   296,   297,
+     299,   300,   301,   312,   313,   316,   223,   253,   254,     3,
+       3,     3,     5,     3,     5,     3,     3,   222,   338,   302,
+     302,   232,   143,   306,   310,     3,   292,   222,   235,   320,
+     324,   324,   227,   220,   225,   252,   322,     3,     5,   290,
+     225,   199,   221,     5,   226,   253,   265,   266,   267,   268,
+     201,   226,   276,   225,   279,    10,    10,    13,   261,   286,
+       3,     7,     8,     9,    10,    11,    12,    80,   131,   164,
+     178,   204,   207,   208,   209,   212,   213,   225,   272,   273,
+     274,   259,   321,     7,   258,   261,   272,   275,    10,    10,
+     256,   275,   321,   274,    10,    10,   274,    10,   274,   272,
+     251,   254,   321,   274,   270,   271,   272,    27,   127,   167,
+     257,    10,   340,    10,   274,   342,   270,   272,   342,   122,
+     194,   195,   196,   197,   198,   339,   342,   342,   261,     7,
+       8,   345,    10,   342,   260,   220,   225,   224,   224,   224,
+     222,   236,   321,   222,   223,   253,   303,   223,   231,   201,
+     120,   253,   281,   307,   224,   222,   235,   223,   237,   254,
+     319,   324,   226,   275,   209,   221,   272,   248,   249,   250,
+     251,   219,    28,    68,   162,   197,   353,   354,   352,   222,
+     286,   223,   199,   227,     7,   239,   223,   253,   277,   281,
+     223,   254,   278,   281,   226,   226,   226,   225,   272,   272,
+     272,   272,   272,   272,   272,   321,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,   200,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   219,   220,   199,   226,
+     226,   199,   219,   226,   199,   226,   226,   199,   226,   226,
+     226,   226,   226,   226,   226,   226,   226,   226,   226,   321,
+     209,   225,   252,   262,   286,   330,   332,   333,   226,   199,
+     226,   226,   226,   226,   226,   199,   226,   226,   226,   226,
+     226,   226,   226,   226,   219,   226,   226,   226,   260,    10,
+     234,   324,   334,   223,   236,   313,   236,   223,   201,   321,
+     341,   224,   223,   254,   282,   283,   223,   243,   223,   236,
+     221,   221,   226,   199,   291,   199,   226,   179,   347,   348,
+     268,   274,     7,   226,   321,   344,   226,   224,   224,   321,
+     226,   209,   225,   252,   262,   326,   328,   329,   272,   272,
+       3,   272,   272,   272,   272,   272,   272,   272,   272,   272,
+     272,   272,   272,   272,   272,   272,   272,   272,     3,   272,
+     274,   258,     7,   275,    10,   332,   320,   209,   248,   262,
+     331,   332,   225,   252,   271,   274,     7,   226,   233,   199,
+     324,   224,   235,   236,    25,   251,   290,   354,   350,   223,
+     347,   330,   336,   337,   224,   284,   286,   328,   320,   209,
+     248,   262,   327,   328,   226,   225,   252,   201,   221,   226,
+     332,   320,   226,   332,   226,   248,   226,   236,   223,   324,
+     223,     5,   201,   335,   199,   224,   222,   226,   328,   320,
+     226,   332,   226,   272,   248,   272,   332,   226,   236,   224,
+     275,   336,   263,   332,   226,    43,    59,   223,   264,   274,
+     201,   201,   224,   280,   281,   280,   224
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_int16 yyr1[] =
 {
-       0,   221,   222,   223,   223,   224,   225,   224,   224,   224,
-     224,   224,   224,   224,   224,   224,   226,   226,   227,   226,
-     226,   226,   226,   226,   226,   226,   226,   226,   228,   228,
-     229,   229,   230,   230,   230,   230,   230,   230,   230,   231,
-     232,   232,   233,   233,   233,   233,   233,   233,   233,   233,
-     233,   234,   235,   236,   237,   238,   238,   239,   240,   241,
-     241,   242,   242,   243,   243,   244,   244,   245,   245,   245,
-     246,   246,   247,   248,   248,   248,   249,   249,   250,   250,
-     251,   252,   252,   252,   252,   252,   252,   252,   252,   252,
-     252,   252,   252,   252,   252,   252,   252,   252,   252,   252,
-     252,   252,   252,   252,   252,   252,   252,   252,   252,   252,
-     252,   252,   252,   252,   252,   252,   252,   252,   252,   252,
-     252,   252,   252,   252,   252,   252,   252,   252,   252,   252,
-     252,   252,   252,   252,   252,   252,   252,   252,   252,   252,
-     252,   252,   252,   252,   252,   252,   252,   252,   252,   252,
-     252,   252,   252,   252,   252,   252,   252,   252,   252,   252,
-     252,   252,   252,   252,   252,   252,   252,   252,   252,   252,
-     252,   252,   252,   252,   252,   252,   252,   252,   252,   252,
-     252,   252,   252,   252,   253,   253,   254,   254,   254,   254,
-     255,   255,   256,   256,   257,   257,   257,   258,   258,   259,
-     260,   260,   261,   262,   262,   263,   263,   264,   264,   264,
-     264,   264,   264,   264,   264,   264,   264,   264,   264,   264,
-     264,   264,   264,   264,   264,   264,   264,   264,   264,   264,
-     264,   264,   264,   264,   264,   264,   264,   264,   264,   264,
-     264,   264,   264,   264,   264,   264,   264,   264,   265,   265,
-     266,   267,   268,   268,   269,   269,   270,   270,   271,   271,
-     272,   272,   273,   273,   274,   275,   275,   276,   276,   277,
-     277,   277,   278,   278,   279,   279,   279,   279,   279,   279,
-     279,   279,   279,   279,   279,   280,   280,   281,   281,   281,
-     281,   281,   281,   281,   281,   281,   282,   283,   282,   284,
-     285,   284,   286,   286,   287,   288,   289,   290,   290,   291,
-     291,   292,   293,   293,   294,   295,   295,   296,   296,   297,
-     297,   298,   298,   299,   299,   300,   301,   301,   301,   302,
-     302,   303,   303,   304,   305,   306,   306,   306,   307,   308,
-     309,   309,   310,   310,   311,   311,   312,   312,   312,   313,
-     313,   313,   314,   314,   314,   314,   315,   315,   315,   316,
-     316,   317,   317,   318,   318,   318,   318,   318,   319,   319,
-     319,   320,   320,   321,   321,   322,   322,   322,   322,   322,
-     322,   323,   323,   324,   324,   325,   326,   326,   327,   327,
-     328,   328,   328,   328,   328,   329,   329,   329,   330,   331,
-     331,   331,   331,   331,   331,   331,   331,   331,   331,   332,
-     333,   333,   334,   334,   334,   335,   335,   336,   336,   337,
-     338,   339,   339,   340,   340,   341,   341,   341,   341,   342,
-     342,   343,   343,   343,   343
+       0,   228,   229,   230,   230,   231,   232,   231,   231,   231,
+     231,   231,   231,   231,   231,   231,   231,   231,   233,   233,
+     234,   233,   233,   233,   233,   233,   233,   233,   233,   233,
+     233,   233,   235,   235,   236,   236,   237,   237,   237,   237,
+     237,   237,   237,   238,   239,   239,   240,   240,   240,   240,
+     240,   240,   240,   240,   240,   241,   242,   243,   244,   245,
+     245,   246,   247,   248,   248,   249,   249,   250,   250,   251,
+     251,   252,   252,   252,   253,   253,   254,   255,   255,   255,
+     256,   256,   257,   257,   257,   258,   258,   259,   260,   260,
+     260,   260,   260,   260,   260,   260,   260,   260,   260,   260,
+     260,   260,   260,   260,   260,   260,   260,   260,   260,   260,
+     260,   260,   260,   260,   260,   260,   260,   260,   260,   260,
+     260,   260,   260,   260,   260,   260,   260,   260,   260,   260,
+     260,   260,   260,   260,   260,   260,   260,   260,   260,   260,
+     260,   260,   260,   260,   260,   260,   260,   260,   260,   260,
+     260,   260,   260,   260,   260,   260,   260,   260,   260,   260,
+     260,   260,   260,   260,   260,   260,   260,   260,   260,   260,
+     260,   260,   260,   260,   260,   260,   260,   260,   260,   260,
+     260,   260,   260,   260,   260,   260,   260,   260,   260,   260,
+     260,   260,   260,   261,   261,   262,   262,   262,   262,   263,
+     263,   264,   264,   265,   265,   265,   266,   266,   267,   268,
+     268,   269,   270,   270,   271,   271,   272,   272,   272,   272,
+     272,   272,   272,   272,   272,   272,   272,   272,   272,   272,
+     272,   272,   272,   272,   272,   272,   272,   272,   272,   272,
+     272,   272,   272,   272,   272,   272,   272,   272,   272,   272,
+     272,   272,   272,   272,   272,   272,   272,   273,   273,   274,
+     275,   276,   276,   277,   277,   278,   278,   279,   279,   280,
+     280,   281,   281,   282,   283,   283,   284,   284,   285,   285,
+     285,   286,   286,   287,   287,   287,   287,   287,   287,   287,
+     287,   287,   287,   287,   288,   288,   289,   289,   289,   289,
+     289,   289,   289,   289,   289,   290,   291,   290,   292,   293,
+     292,   294,   294,   295,   296,   297,   297,   298,   299,   300,
+     301,   301,   302,   302,   303,   304,   304,   305,   306,   306,
+     307,   307,   308,   308,   309,   309,   310,   310,   311,   312,
+     312,   312,   313,   313,   314,   314,   315,   316,   317,   317,
+     317,   318,   319,   320,   320,   321,   321,   322,   322,   323,
+     323,   323,   324,   324,   324,   325,   325,   325,   325,   326,
+     326,   326,   327,   327,   328,   328,   329,   329,   329,   329,
+     329,   330,   330,   330,   331,   331,   332,   332,   333,   333,
+     333,   333,   333,   333,   334,   334,   335,   335,   336,   337,
+     337,   338,   338,   339,   339,   339,   339,   339,   339,   340,
+     340,   340,   341,   342,   342,   342,   342,   342,   342,   342,
+     342,   342,   342,   343,   344,   344,   345,   345,   345,   346,
+     346,   347,   347,   348,   349,   350,   350,   351,   351,   352,
+     352,   352,   352,   353,   353,   354,   354,   354,   354
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_int8 yyr2[] =
 {
        0,     2,     2,     0,     2,     0,     0,     6,     2,     2,
-       3,     2,     3,     2,     2,     2,     0,     2,     0,     6,
-       2,     3,     2,     3,     2,     2,     2,     2,     0,     2,
-       0,     1,     1,     2,     2,     1,     2,     1,     1,     6,
-       1,     2,     1,     2,     1,     2,     1,     2,     2,     2,
-       2,     4,     3,     3,     5,     2,     2,     3,     4,     0,
-       1,     1,     3,     1,     3,     3,     2,     3,     3,     2,
-       0,     1,     3,     1,     3,     4,     1,     3,     1,     3,
-       3,     0,     1,     4,     1,     1,     1,     1,     1,     4,
-       4,     1,     1,     1,     1,     1,     4,     4,     1,     6,
-       1,     1,     1,     1,     4,     1,     1,     1,     4,     1,
-       1,     1,     4,     4,     1,     1,     1,     1,     4,     4,
-       4,     4,     4,     1,     4,     1,     1,     4,     1,     4,
-       1,     1,     4,     4,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     4,     1,
-       1,     1,     4,     4,     1,     1,     1,     1,     1,     6,
+       3,     2,     3,     3,     2,     2,     2,     2,     0,     2,
+       0,     6,     2,     3,     2,     3,     3,     2,     2,     2,
+       2,     2,     0,     2,     0,     1,     1,     2,     2,     1,
+       2,     1,     1,     6,     1,     2,     1,     2,     1,     2,
+       1,     2,     2,     2,     2,     4,     3,     3,     5,     2,
+       2,     3,     4,     0,     1,     1,     3,     1,     3,     3,
+       2,     3,     3,     2,     0,     1,     3,     1,     3,     4,
+       1,     3,     1,     1,     1,     1,     3,     3,     0,     1,
+       4,     1,     1,     1,     1,     1,     4,     4,     1,     1,
+       1,     1,     1,     4,     4,     1,     6,     1,     1,     1,
        1,     4,     1,     1,     1,     4,     1,     1,     1,     4,
-       4,     4,     4,     1,     1,     4,     4,     4,     1,     1,
-       4,     4,     4,     1,     1,     1,     1,     1,     1,     1,
-       0,     2,     4,     3,     0,     2,     1,     1,     3,     2,
-       3,     1,     5,     1,     3,     0,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     5,     3,     3,
+       4,     4,     1,     1,     1,     1,     4,     4,     4,     4,
+       4,     1,     4,     1,     1,     4,     1,     4,     1,     1,
+       4,     4,     1,     1,     1,     4,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     4,     1,     1,
+       1,     4,     4,     1,     1,     1,     1,     1,     6,     1,
+       4,     1,     1,     1,     4,     1,     1,     1,     4,     4,
+       4,     4,     1,     1,     4,     4,     4,     1,     1,     4,
+       4,     4,     1,     1,     1,     1,     1,     1,     1,     0,
+       2,     4,     3,     0,     2,     1,     1,     3,     2,     3,
+       1,     5,     1,     3,     0,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     5,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     2,     2,     2,     2,
-       2,     2,     3,     3,     5,     5,     4,     3,     1,     3,
-       1,     1,     0,     2,     4,     3,     2,     2,     0,     2,
-       2,     1,     3,     2,     1,     3,     2,     0,     1,     0,
-       1,     1,     1,     1,     1,     1,     1,     2,     2,     1,
-       1,     1,     1,     1,     1,     0,     1,     1,     2,     1,
-       2,     2,     1,     1,     1,     1,     1,     0,     4,     1,
-       0,     4,     2,     2,     2,     5,     5,     2,     2,     0,
-       2,     2,     2,     2,     2,     2,     3,     2,     3,     5,
-       5,     0,     2,     2,     2,     2,     6,     8,     2,     2,
-       2,     2,     2,     2,     5,     1,     1,     1,     1,     1,
-       0,     2,     2,     3,     0,     1,     2,     2,     2,     3,
-       2,     1,     1,     3,     2,     4,     3,     2,     1,     3,
-       2,     0,     1,     3,     2,     1,     3,     4,     3,     2,
-       1,     3,     2,     0,     1,     1,     3,     2,     1,     3,
-       4,     1,     3,     0,     2,     2,     1,     3,     1,     3,
-       1,     1,     1,     1,     1,     1,     1,     1,     5,     1,
-       1,     1,     1,     2,     1,     2,     1,     2,     4,     5,
-       5,    10,     1,     3,     1,     0,     2,     0,     2,     4,
-       6,     0,     3,     1,     3,     4,     1,     1,     1,     1,
-       3,     1,     1,     1,     1
+       3,     3,     3,     3,     3,     2,     2,     2,     2,     2,
+       2,     3,     3,     5,     5,     4,     3,     1,     3,     1,
+       1,     0,     2,     4,     3,     2,     2,     0,     2,     2,
+       1,     3,     2,     1,     3,     2,     0,     1,     0,     1,
+       1,     1,     1,     1,     1,     1,     2,     2,     1,     1,
+       1,     1,     1,     1,     0,     1,     1,     2,     1,     2,
+       2,     1,     1,     1,     1,     1,     0,     4,     1,     0,
+       4,     2,     2,     2,     5,     2,     2,     2,     5,     5,
+       2,     2,     0,     2,     2,     2,     2,     2,     2,     3,
+       2,     3,     5,     5,     0,     2,     2,     2,     2,     6,
+       8,     2,     2,     2,     2,     2,     2,     5,     1,     1,
+       1,     1,     1,     0,     2,     2,     3,     0,     1,     2,
+       2,     2,     3,     2,     1,     1,     3,     2,     4,     3,
+       2,     1,     3,     2,     0,     1,     3,     2,     1,     3,
+       4,     3,     2,     1,     3,     2,     0,     1,     1,     3,
+       2,     1,     3,     4,     1,     3,     0,     2,     2,     1,
+       3,     1,     3,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     5,     1,     1,     1,     1,     2,     1,     2,
+       1,     2,     4,     5,     5,    10,     1,     3,     1,     0,
+       2,     0,     2,     4,     6,     0,     3,     1,     3,     4,
+       1,     1,     1,     1,     3,     1,     1,     1,     1
 };
 
 
@@ -3147,7 +3233,7 @@
   switch (yyn)
     {
   case 2: /* input: gbl_statements m_acf  */
-#line 331 "tools/widl/parser.y"
+#line 341 "tools/widl/parser.y"
                                                 { check_statements((yyvsp[-1].stmt_list), FALSE);
 						  check_all_user_types((yyvsp[-1].stmt_list));
 						  write_header((yyvsp[-1].stmt_list));
@@ -3160,211 +3246,237 @@
 						  write_dlldata((yyvsp[-1].stmt_list));
 						  write_local_stubs((yyvsp[-1].stmt_list));
 						}
-#line 3164 "tools/widl/parser.tab.c"
+#line 3250 "tools/widl/parser.tab.c"
     break;
 
   case 5: /* gbl_statements: %empty  */
-#line 347 "tools/widl/parser.y"
+#line 357 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = NULL; }
-#line 3170 "tools/widl/parser.tab.c"
+#line 3256 "tools/widl/parser.tab.c"
     break;
 
   case 6: /* $@1: %empty  */
-#line 348 "tools/widl/parser.y"
+#line 358 "tools/widl/parser.y"
                                           { push_namespace((yyvsp[-1].str)); }
-#line 3176 "tools/widl/parser.tab.c"
+#line 3262 "tools/widl/parser.tab.c"
     break;
 
   case 7: /* gbl_statements: gbl_statements namespacedef '{' $@1 gbl_statements '}'  */
-#line 349 "tools/widl/parser.y"
+#line 359 "tools/widl/parser.y"
                                                 { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
-#line 3182 "tools/widl/parser.tab.c"
+#line 3268 "tools/widl/parser.tab.c"
     break;
 
   case 8: /* gbl_statements: gbl_statements interfacedec  */
-#line 350 "tools/widl/parser.y"
+#line 360 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_reference((yyvsp[0].type))); }
-#line 3188 "tools/widl/parser.tab.c"
+#line 3274 "tools/widl/parser.tab.c"
     break;
 
   case 9: /* gbl_statements: gbl_statements interfacedef  */
-#line 351 "tools/widl/parser.y"
+#line 361 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 3194 "tools/widl/parser.tab.c"
+#line 3280 "tools/widl/parser.tab.c"
     break;
 
   case 10: /* gbl_statements: gbl_statements coclass ';'  */
-#line 352 "tools/widl/parser.y"
+#line 362 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list);
 						  reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0);
 						}
-#line 3202 "tools/widl/parser.tab.c"
+#line 3288 "tools/widl/parser.tab.c"
     break;
 
   case 11: /* gbl_statements: gbl_statements coclassdef  */
-#line 355 "tools/widl/parser.y"
+#line 365 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
 						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0);
 						}
-#line 3210 "tools/widl/parser.tab.c"
+#line 3296 "tools/widl/parser.tab.c"
     break;
 
   case 12: /* gbl_statements: gbl_statements apicontract ';'  */
-#line 358 "tools/widl/parser.y"
+#line 368 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_type_decl((yyvsp[-1].type)));
 	                                          reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3217 "tools/widl/parser.tab.c"
+#line 3303 "tools/widl/parser.tab.c"
     break;
 
-  case 13: /* gbl_statements: gbl_statements moduledef  */
-#line 360 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
-#line 3223 "tools/widl/parser.tab.c"
-    break;
-
-  case 14: /* gbl_statements: gbl_statements librarydef  */
-#line 361 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
-#line 3229 "tools/widl/parser.tab.c"
-    break;
-
-  case 15: /* gbl_statements: gbl_statements statement  */
-#line 362 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 3235 "tools/widl/parser.tab.c"
-    break;
-
-  case 16: /* imp_statements: %empty  */
-#line 365 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = NULL; }
-#line 3241 "tools/widl/parser.tab.c"
-    break;
-
-  case 17: /* imp_statements: imp_statements interfacedec  */
-#line 366 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_reference((yyvsp[0].type))); }
-#line 3247 "tools/widl/parser.tab.c"
-    break;
-
-  case 18: /* $@2: %empty  */
-#line 367 "tools/widl/parser.y"
-                                          { push_namespace((yyvsp[-1].str)); }
-#line 3253 "tools/widl/parser.tab.c"
-    break;
-
-  case 19: /* imp_statements: imp_statements namespacedef '{' $@2 imp_statements '}'  */
-#line 368 "tools/widl/parser.y"
-                                                { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
-#line 3259 "tools/widl/parser.tab.c"
-    break;
-
-  case 20: /* imp_statements: imp_statements interfacedef  */
-#line 369 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
-#line 3265 "tools/widl/parser.tab.c"
-    break;
-
-  case 21: /* imp_statements: imp_statements coclass ';'  */
+  case 13: /* gbl_statements: gbl_statements runtimeclass ';'  */
 #line 370 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3271 "tools/widl/parser.tab.c"
+#line 3309 "tools/widl/parser.tab.c"
     break;
 
-  case 22: /* imp_statements: imp_statements coclassdef  */
+  case 14: /* gbl_statements: gbl_statements runtimeclass_def  */
 #line 371 "tools/widl/parser.y"
                                                 { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
-						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0);
-						}
-#line 3279 "tools/widl/parser.tab.c"
-    break;
-
-  case 23: /* imp_statements: imp_statements apicontract ';'  */
-#line 374 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_type_decl((yyvsp[-1].type)));
-	                                          reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
-#line 3286 "tools/widl/parser.tab.c"
-    break;
-
-  case 24: /* imp_statements: imp_statements moduledef  */
-#line 376 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
-#line 3292 "tools/widl/parser.tab.c"
-    break;
-
-  case 25: /* imp_statements: imp_statements statement  */
-#line 377 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
-#line 3298 "tools/widl/parser.tab.c"
-    break;
-
-  case 26: /* imp_statements: imp_statements importlib  */
-#line 378 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_importlib((yyvsp[0].str))); }
-#line 3304 "tools/widl/parser.tab.c"
-    break;
-
-  case 27: /* imp_statements: imp_statements librarydef  */
-#line 379 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
-#line 3310 "tools/widl/parser.tab.c"
-    break;
-
-  case 28: /* int_statements: %empty  */
-#line 382 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = NULL; }
+	                                          reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); }
 #line 3316 "tools/widl/parser.tab.c"
     break;
 
-  case 29: /* int_statements: int_statements statement  */
-#line 383 "tools/widl/parser.y"
-                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
+  case 15: /* gbl_statements: gbl_statements moduledef  */
+#line 373 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
 #line 3322 "tools/widl/parser.tab.c"
     break;
 
-  case 32: /* statement: cppquote  */
-#line 391 "tools/widl/parser.y"
-                                                { (yyval.statement) = make_statement_cppquote((yyvsp[0].str)); }
+  case 16: /* gbl_statements: gbl_statements librarydef  */
+#line 374 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
 #line 3328 "tools/widl/parser.tab.c"
     break;
 
-  case 33: /* statement: typedecl ';'  */
-#line 392 "tools/widl/parser.y"
-                                                { (yyval.statement) = make_statement_type_decl((yyvsp[-1].type)); }
+  case 17: /* gbl_statements: gbl_statements statement  */
+#line 375 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
 #line 3334 "tools/widl/parser.tab.c"
     break;
 
-  case 34: /* statement: declaration ';'  */
-#line 393 "tools/widl/parser.y"
-                                                { (yyval.statement) = make_statement_declaration((yyvsp[-1].var)); }
+  case 18: /* imp_statements: %empty  */
+#line 378 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = NULL; }
 #line 3340 "tools/widl/parser.tab.c"
     break;
 
-  case 35: /* statement: import  */
-#line 394 "tools/widl/parser.y"
-                                                { (yyval.statement) = make_statement_import((yyvsp[0].str)); }
+  case 19: /* imp_statements: imp_statements interfacedec  */
+#line 379 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_reference((yyvsp[0].type))); }
 #line 3346 "tools/widl/parser.tab.c"
     break;
 
-  case 36: /* statement: typedef ';'  */
-#line 395 "tools/widl/parser.y"
-                                                { (yyval.statement) = (yyvsp[-1].statement); }
+  case 20: /* $@2: %empty  */
+#line 380 "tools/widl/parser.y"
+                                          { push_namespace((yyvsp[-1].str)); }
 #line 3352 "tools/widl/parser.tab.c"
     break;
 
-  case 37: /* statement: aPRAGMA  */
-#line 396 "tools/widl/parser.y"
-                                                { (yyval.statement) = make_statement_pragma((yyvsp[0].str)); }
+  case 21: /* imp_statements: imp_statements namespacedef '{' $@2 imp_statements '}'  */
+#line 381 "tools/widl/parser.y"
+                                                { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
 #line 3358 "tools/widl/parser.tab.c"
     break;
 
-  case 38: /* statement: pragma_warning  */
-#line 397 "tools/widl/parser.y"
-                         { (yyval.statement) = NULL; }
+  case 22: /* imp_statements: imp_statements interfacedef  */
+#line 382 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
 #line 3364 "tools/widl/parser.tab.c"
     break;
 
-  case 39: /* pragma_warning: tPRAGMA_WARNING '(' aIDENTIFIER ':' warnings ')'  */
-#line 401 "tools/widl/parser.y"
+  case 23: /* imp_statements: imp_statements coclass ';'  */
+#line 383 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
+#line 3370 "tools/widl/parser.tab.c"
+    break;
+
+  case 24: /* imp_statements: imp_statements coclassdef  */
+#line 384 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
+						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0);
+						}
+#line 3378 "tools/widl/parser.tab.c"
+    break;
+
+  case 25: /* imp_statements: imp_statements apicontract ';'  */
+#line 387 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_type_decl((yyvsp[-1].type)));
+	                                          reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
+#line 3385 "tools/widl/parser.tab.c"
+    break;
+
+  case 26: /* imp_statements: imp_statements runtimeclass ';'  */
+#line 389 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
+#line 3391 "tools/widl/parser.tab.c"
+    break;
+
+  case 27: /* imp_statements: imp_statements runtimeclass_def  */
+#line 390 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
+	                                          reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); }
+#line 3398 "tools/widl/parser.tab.c"
+    break;
+
+  case 28: /* imp_statements: imp_statements moduledef  */
+#line 392 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
+#line 3404 "tools/widl/parser.tab.c"
+    break;
+
+  case 29: /* imp_statements: imp_statements statement  */
+#line 393 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
+#line 3410 "tools/widl/parser.tab.c"
+    break;
+
+  case 30: /* imp_statements: imp_statements importlib  */
+#line 394 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_importlib((yyvsp[0].str))); }
+#line 3416 "tools/widl/parser.tab.c"
+    break;
+
+  case 31: /* imp_statements: imp_statements librarydef  */
+#line 395 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
+#line 3422 "tools/widl/parser.tab.c"
+    break;
+
+  case 32: /* int_statements: %empty  */
+#line 398 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = NULL; }
+#line 3428 "tools/widl/parser.tab.c"
+    break;
+
+  case 33: /* int_statements: int_statements statement  */
+#line 399 "tools/widl/parser.y"
+                                                { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
+#line 3434 "tools/widl/parser.tab.c"
+    break;
+
+  case 36: /* statement: cppquote  */
+#line 407 "tools/widl/parser.y"
+                                                { (yyval.statement) = make_statement_cppquote((yyvsp[0].str)); }
+#line 3440 "tools/widl/parser.tab.c"
+    break;
+
+  case 37: /* statement: typedecl ';'  */
+#line 408 "tools/widl/parser.y"
+                                                { (yyval.statement) = make_statement_type_decl((yyvsp[-1].type)); }
+#line 3446 "tools/widl/parser.tab.c"
+    break;
+
+  case 38: /* statement: declaration ';'  */
+#line 409 "tools/widl/parser.y"
+                                                { (yyval.statement) = make_statement_declaration((yyvsp[-1].var)); }
+#line 3452 "tools/widl/parser.tab.c"
+    break;
+
+  case 39: /* statement: import  */
+#line 410 "tools/widl/parser.y"
+                                                { (yyval.statement) = make_statement_import((yyvsp[0].str)); }
+#line 3458 "tools/widl/parser.tab.c"
+    break;
+
+  case 40: /* statement: typedef ';'  */
+#line 411 "tools/widl/parser.y"
+                                                { (yyval.statement) = (yyvsp[-1].statement); }
+#line 3464 "tools/widl/parser.tab.c"
+    break;
+
+  case 41: /* statement: aPRAGMA  */
+#line 412 "tools/widl/parser.y"
+                                                { (yyval.statement) = make_statement_pragma((yyvsp[0].str)); }
+#line 3470 "tools/widl/parser.tab.c"
+    break;
+
+  case 42: /* statement: pragma_warning  */
+#line 413 "tools/widl/parser.y"
+                         { (yyval.statement) = NULL; }
+#line 3476 "tools/widl/parser.tab.c"
+    break;
+
+  case 43: /* pragma_warning: tPRAGMA_WARNING '(' aIDENTIFIER ':' warnings ')'  */
+#line 417 "tools/widl/parser.y"
                   {
                       int result;
                       (yyval.statement) = NULL;
@@ -3372,949 +3484,981 @@
                       if(!result)
                           error_loc("expected \"disable\" or \"enable\"\n");
                   }
-#line 3376 "tools/widl/parser.tab.c"
+#line 3488 "tools/widl/parser.tab.c"
     break;
 
-  case 40: /* warnings: aNUM  */
-#line 411 "tools/widl/parser.y"
-               { (yyval.warning_list) = append_warning(NULL, (yyvsp[0].num)); }
-#line 3382 "tools/widl/parser.tab.c"
-    break;
-
-  case 41: /* warnings: warnings aNUM  */
-#line 412 "tools/widl/parser.y"
-                        { (yyval.warning_list) = append_warning((yyvsp[-1].warning_list), (yyvsp[0].num)); }
-#line 3388 "tools/widl/parser.tab.c"
-    break;
-
-  case 43: /* typedecl: tENUM aIDENTIFIER  */
-#line 417 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 3394 "tools/widl/parser.tab.c"
-    break;
-
-  case 45: /* typedecl: tSTRUCT aIDENTIFIER  */
-#line 419 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 3400 "tools/widl/parser.tab.c"
-    break;
-
-  case 47: /* typedecl: tUNION aIDENTIFIER  */
-#line 421 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
-#line 3406 "tools/widl/parser.tab.c"
-    break;
-
-  case 48: /* typedecl: attributes enumdef  */
-#line 422 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_enum_attrs((yyvsp[-1].attr_list)); }
-#line 3412 "tools/widl/parser.tab.c"
-    break;
-
-  case 49: /* typedecl: attributes structdef  */
-#line 423 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_struct_attrs((yyvsp[-1].attr_list)); }
-#line 3418 "tools/widl/parser.tab.c"
-    break;
-
-  case 50: /* typedecl: attributes uniondef  */
-#line 424 "tools/widl/parser.y"
-                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_union_attrs((yyvsp[-1].attr_list)); }
-#line 3424 "tools/widl/parser.tab.c"
-    break;
-
-  case 51: /* cppquote: tCPPQUOTE '(' aSTRING ')'  */
+  case 44: /* warnings: aNUM  */
 #line 427 "tools/widl/parser.y"
-                                                { (yyval.str) = (yyvsp[-1].str); }
-#line 3430 "tools/widl/parser.tab.c"
+               { (yyval.warning_list) = append_warning(NULL, (yyvsp[0].num)); }
+#line 3494 "tools/widl/parser.tab.c"
     break;
 
-  case 52: /* import_start: tIMPORT aSTRING ';'  */
-#line 429 "tools/widl/parser.y"
+  case 45: /* warnings: warnings aNUM  */
+#line 428 "tools/widl/parser.y"
+                        { (yyval.warning_list) = append_warning((yyvsp[-1].warning_list), (yyvsp[0].num)); }
+#line 3500 "tools/widl/parser.tab.c"
+    break;
+
+  case 47: /* typedecl: tENUM aIDENTIFIER  */
+#line 433 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
+#line 3506 "tools/widl/parser.tab.c"
+    break;
+
+  case 49: /* typedecl: tSTRUCT aIDENTIFIER  */
+#line 435 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
+#line 3512 "tools/widl/parser.tab.c"
+    break;
+
+  case 51: /* typedecl: tUNION aIDENTIFIER  */
+#line 437 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
+#line 3518 "tools/widl/parser.tab.c"
+    break;
+
+  case 52: /* typedecl: attributes enumdef  */
+#line 438 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_enum_attrs((yyvsp[-1].attr_list)); }
+#line 3524 "tools/widl/parser.tab.c"
+    break;
+
+  case 53: /* typedecl: attributes structdef  */
+#line 439 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_struct_attrs((yyvsp[-1].attr_list)); }
+#line 3530 "tools/widl/parser.tab.c"
+    break;
+
+  case 54: /* typedecl: attributes uniondef  */
+#line 440 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_union_attrs((yyvsp[-1].attr_list)); }
+#line 3536 "tools/widl/parser.tab.c"
+    break;
+
+  case 55: /* cppquote: tCPPQUOTE '(' aSTRING ')'  */
+#line 443 "tools/widl/parser.y"
+                                                { (yyval.str) = (yyvsp[-1].str); }
+#line 3542 "tools/widl/parser.tab.c"
+    break;
+
+  case 56: /* import_start: tIMPORT aSTRING ';'  */
+#line 445 "tools/widl/parser.y"
                                                 { assert(yychar == YYEMPTY);
 						  (yyval.import) = xmalloc(sizeof(struct _import_t));
 						  (yyval.import)->name = (yyvsp[-1].str);
 						  (yyval.import)->import_performed = do_import((yyvsp[-1].str));
 						  if (!(yyval.import)->import_performed) yychar = aEOF;
 						}
-#line 3441 "tools/widl/parser.tab.c"
+#line 3553 "tools/widl/parser.tab.c"
     break;
 
-  case 53: /* import: import_start imp_statements aEOF  */
-#line 437 "tools/widl/parser.y"
+  case 57: /* import: import_start imp_statements aEOF  */
+#line 453 "tools/widl/parser.y"
                                                 { (yyval.str) = (yyvsp[-2].import)->name;
 						  if ((yyvsp[-2].import)->import_performed) pop_import();
 						  free((yyvsp[-2].import));
 						}
-#line 3450 "tools/widl/parser.tab.c"
+#line 3562 "tools/widl/parser.tab.c"
     break;
 
-  case 54: /* importlib: tIMPORTLIB '(' aSTRING ')' semicolon_opt  */
-#line 444 "tools/widl/parser.y"
+  case 58: /* importlib: tIMPORTLIB '(' aSTRING ')' semicolon_opt  */
+#line 460 "tools/widl/parser.y"
                                                 { (yyval.str) = (yyvsp[-2].str); if(!parse_only) add_importlib((yyvsp[-2].str), current_typelib); }
-#line 3456 "tools/widl/parser.tab.c"
+#line 3568 "tools/widl/parser.tab.c"
     break;
 
-  case 55: /* libraryhdr: tLIBRARY aIDENTIFIER  */
-#line 447 "tools/widl/parser.y"
+  case 59: /* libraryhdr: tLIBRARY aIDENTIFIER  */
+#line 463 "tools/widl/parser.y"
                                                 { (yyval.str) = (yyvsp[0].str); }
-#line 3462 "tools/widl/parser.tab.c"
+#line 3574 "tools/widl/parser.tab.c"
     break;
 
-  case 56: /* libraryhdr: tLIBRARY aKNOWNTYPE  */
-#line 448 "tools/widl/parser.y"
+  case 60: /* libraryhdr: tLIBRARY aKNOWNTYPE  */
+#line 464 "tools/widl/parser.y"
                                                 { (yyval.str) = (yyvsp[0].str); }
-#line 3468 "tools/widl/parser.tab.c"
+#line 3580 "tools/widl/parser.tab.c"
     break;
 
-  case 57: /* library_start: attributes libraryhdr '{'  */
-#line 450 "tools/widl/parser.y"
+  case 61: /* library_start: attributes libraryhdr '{'  */
+#line 466 "tools/widl/parser.y"
                                                 { (yyval.typelib) = make_library((yyvsp[-1].str), check_library_attrs((yyvsp[-1].str), (yyvsp[-2].attr_list)));
 						  if (!parse_only && do_typelib) current_typelib = (yyval.typelib);
 						}
-#line 3476 "tools/widl/parser.tab.c"
+#line 3588 "tools/widl/parser.tab.c"
     break;
 
-  case 58: /* librarydef: library_start imp_statements '}' semicolon_opt  */
-#line 455 "tools/widl/parser.y"
-                                                { (yyval.typelib) = (yyvsp[-3].typelib); (yyval.typelib)->stmts = (yyvsp[-2].stmt_list); }
-#line 3482 "tools/widl/parser.tab.c"
-    break;
-
-  case 59: /* m_args: %empty  */
-#line 458 "tools/widl/parser.y"
-                                                { (yyval.var_list) = NULL; }
-#line 3488 "tools/widl/parser.tab.c"
-    break;
-
-  case 61: /* arg_list: arg  */
-#line 462 "tools/widl/parser.y"
-                                                { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); }
-#line 3494 "tools/widl/parser.tab.c"
-    break;
-
-  case 62: /* arg_list: arg_list ',' arg  */
-#line 463 "tools/widl/parser.y"
-                                                { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) ); }
-#line 3500 "tools/widl/parser.tab.c"
-    break;
-
-  case 64: /* args: arg_list ',' ELLIPSIS  */
-#line 467 "tools/widl/parser.y"
-                                                { (yyval.var_list) = append_var( (yyvsp[-2].var_list), make_var(strdup("...")) ); }
-#line 3506 "tools/widl/parser.tab.c"
-    break;
-
-  case 65: /* arg: attributes decl_spec m_any_declarator  */
+  case 62: /* librarydef: library_start imp_statements '}' semicolon_opt  */
 #line 471 "tools/widl/parser.y"
+                                                { (yyval.typelib) = (yyvsp[-3].typelib); (yyval.typelib)->stmts = (yyvsp[-2].stmt_list); }
+#line 3594 "tools/widl/parser.tab.c"
+    break;
+
+  case 63: /* m_args: %empty  */
+#line 474 "tools/widl/parser.y"
+                                                { (yyval.var_list) = NULL; }
+#line 3600 "tools/widl/parser.tab.c"
+    break;
+
+  case 65: /* arg_list: arg  */
+#line 478 "tools/widl/parser.y"
+                                                { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); }
+#line 3606 "tools/widl/parser.tab.c"
+    break;
+
+  case 66: /* arg_list: arg_list ',' arg  */
+#line 479 "tools/widl/parser.y"
+                                                { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) ); }
+#line 3612 "tools/widl/parser.tab.c"
+    break;
+
+  case 68: /* args: arg_list ',' ELLIPSIS  */
+#line 483 "tools/widl/parser.y"
+                                                { (yyval.var_list) = append_var( (yyvsp[-2].var_list), make_var(strdup("...")) ); }
+#line 3618 "tools/widl/parser.tab.c"
+    break;
+
+  case 69: /* arg: attributes decl_spec m_any_declarator  */
+#line 487 "tools/widl/parser.y"
                                                 { if ((yyvsp[-1].declspec)->stgclass != STG_NONE && (yyvsp[-1].declspec)->stgclass != STG_REGISTER)
 						    error_loc("invalid storage class for function parameter\n");
 						  (yyval.var) = declare_var((yyvsp[-2].attr_list), (yyvsp[-1].declspec), (yyvsp[0].declarator), TRUE);
 						  free((yyvsp[-1].declspec)); free((yyvsp[0].declarator));
 						}
-#line 3516 "tools/widl/parser.tab.c"
+#line 3628 "tools/widl/parser.tab.c"
     break;
 
-  case 66: /* arg: decl_spec m_any_declarator  */
-#line 476 "tools/widl/parser.y"
+  case 70: /* arg: decl_spec m_any_declarator  */
+#line 492 "tools/widl/parser.y"
                                                 { if ((yyvsp[-1].declspec)->stgclass != STG_NONE && (yyvsp[-1].declspec)->stgclass != STG_REGISTER)
 						    error_loc("invalid storage class for function parameter\n");
 						  (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), TRUE);
 						  free((yyvsp[-1].declspec)); free((yyvsp[0].declarator));
 						}
-#line 3526 "tools/widl/parser.tab.c"
+#line 3638 "tools/widl/parser.tab.c"
     break;
 
-  case 67: /* array: '[' expr ']'  */
-#line 483 "tools/widl/parser.y"
+  case 71: /* array: '[' expr ']'  */
+#line 499 "tools/widl/parser.y"
                                                 { (yyval.expr) = (yyvsp[-1].expr);
 						  if (!(yyval.expr)->is_const || (yyval.expr)->cval <= 0)
 						      error_loc("array dimension is not a positive integer constant\n");
 						}
-#line 3535 "tools/widl/parser.tab.c"
+#line 3647 "tools/widl/parser.tab.c"
     break;
 
-  case 68: /* array: '[' '*' ']'  */
-#line 487 "tools/widl/parser.y"
+  case 72: /* array: '[' '*' ']'  */
+#line 503 "tools/widl/parser.y"
                                                 { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 3541 "tools/widl/parser.tab.c"
+#line 3653 "tools/widl/parser.tab.c"
     break;
 
-  case 69: /* array: '[' ']'  */
-#line 488 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 3547 "tools/widl/parser.tab.c"
-    break;
-
-  case 70: /* m_attributes: %empty  */
-#line 491 "tools/widl/parser.y"
-                                                { (yyval.attr_list) = NULL; }
-#line 3553 "tools/widl/parser.tab.c"
-    break;
-
-  case 72: /* attributes: '[' attrib_list ']'  */
-#line 496 "tools/widl/parser.y"
-                                                { (yyval.attr_list) = (yyvsp[-1].attr_list); }
-#line 3559 "tools/widl/parser.tab.c"
-    break;
-
-  case 73: /* attrib_list: attribute  */
-#line 499 "tools/widl/parser.y"
-                                                { (yyval.attr_list) = append_attr( NULL, (yyvsp[0].attr) ); }
-#line 3565 "tools/widl/parser.tab.c"
-    break;
-
-  case 74: /* attrib_list: attrib_list ',' attribute  */
-#line 500 "tools/widl/parser.y"
-                                                { (yyval.attr_list) = append_attr( (yyvsp[-2].attr_list), (yyvsp[0].attr) ); }
-#line 3571 "tools/widl/parser.tab.c"
-    break;
-
-  case 75: /* attrib_list: attrib_list ']' '[' attribute  */
-#line 501 "tools/widl/parser.y"
-                                                { (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); }
-#line 3577 "tools/widl/parser.tab.c"
-    break;
-
-  case 76: /* str_list: aSTRING  */
+  case 73: /* array: '[' ']'  */
 #line 504 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr(EXPR_VOID); }
+#line 3659 "tools/widl/parser.tab.c"
+    break;
+
+  case 74: /* m_attributes: %empty  */
+#line 507 "tools/widl/parser.y"
+                                                { (yyval.attr_list) = NULL; }
+#line 3665 "tools/widl/parser.tab.c"
+    break;
+
+  case 76: /* attributes: '[' attrib_list ']'  */
+#line 512 "tools/widl/parser.y"
+                                                { (yyval.attr_list) = (yyvsp[-1].attr_list); }
+#line 3671 "tools/widl/parser.tab.c"
+    break;
+
+  case 77: /* attrib_list: attribute  */
+#line 515 "tools/widl/parser.y"
+                                                { (yyval.attr_list) = append_attr( NULL, (yyvsp[0].attr) ); }
+#line 3677 "tools/widl/parser.tab.c"
+    break;
+
+  case 78: /* attrib_list: attrib_list ',' attribute  */
+#line 516 "tools/widl/parser.y"
+                                                { (yyval.attr_list) = append_attr( (yyvsp[-2].attr_list), (yyvsp[0].attr) ); }
+#line 3683 "tools/widl/parser.tab.c"
+    break;
+
+  case 79: /* attrib_list: attrib_list ']' '[' attribute  */
+#line 517 "tools/widl/parser.y"
+                                                { (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); }
+#line 3689 "tools/widl/parser.tab.c"
+    break;
+
+  case 80: /* str_list: aSTRING  */
+#line 520 "tools/widl/parser.y"
                                                 { (yyval.str_list) = append_str( NULL, (yyvsp[0].str) ); }
-#line 3583 "tools/widl/parser.tab.c"
+#line 3695 "tools/widl/parser.tab.c"
     break;
 
-  case 77: /* str_list: str_list ',' aSTRING  */
-#line 505 "tools/widl/parser.y"
+  case 81: /* str_list: str_list ',' aSTRING  */
+#line 521 "tools/widl/parser.y"
                                                 { (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); }
-#line 3589 "tools/widl/parser.tab.c"
+#line 3701 "tools/widl/parser.tab.c"
     break;
 
-  case 78: /* contract_ver: aNUM  */
-#line 509 "tools/widl/parser.y"
+  case 82: /* marshaling_behavior: tAGILE  */
+#line 525 "tools/widl/parser.y"
+                                                { (yyval.num) = MARSHALING_AGILE; }
+#line 3707 "tools/widl/parser.tab.c"
+    break;
+
+  case 83: /* marshaling_behavior: tNONE  */
+#line 526 "tools/widl/parser.y"
+                                                { (yyval.num) = MARSHALING_NONE; }
+#line 3713 "tools/widl/parser.tab.c"
+    break;
+
+  case 84: /* marshaling_behavior: tSTANDARD  */
+#line 527 "tools/widl/parser.y"
+                                                { (yyval.num) = MARSHALING_STANDARD; }
+#line 3719 "tools/widl/parser.tab.c"
+    break;
+
+  case 85: /* contract_ver: aNUM  */
+#line 531 "tools/widl/parser.y"
                                                 { (yyval.num) = MAKEVERSION(0, (yyvsp[0].num)); }
-#line 3595 "tools/widl/parser.tab.c"
+#line 3725 "tools/widl/parser.tab.c"
     break;
 
-  case 79: /* contract_ver: aNUM '.' aNUM  */
-#line 510 "tools/widl/parser.y"
+  case 86: /* contract_ver: aNUM '.' aNUM  */
+#line 532 "tools/widl/parser.y"
                                                 { (yyval.num) = MAKEVERSION((yyvsp[0].num), (yyvsp[-2].num)); }
-#line 3601 "tools/widl/parser.tab.c"
+#line 3731 "tools/widl/parser.tab.c"
     break;
 
-  case 80: /* contract_req: decl_spec ',' contract_ver  */
-#line 513 "tools/widl/parser.y"
+  case 87: /* contract_req: decl_spec ',' contract_ver  */
+#line 535 "tools/widl/parser.y"
                                                 { if ((yyvsp[-2].declspec)->type->type_type != TYPE_APICONTRACT)
 						      error_loc("type %s is not an apicontract\n", (yyvsp[-2].declspec)->type->name);
 						  (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num));
 						  (yyval.expr) = make_exprt(EXPR_GTREQL, declare_var(NULL, (yyvsp[-2].declspec), make_declarator(NULL), 0), (yyval.expr));
 						}
-#line 3611 "tools/widl/parser.tab.c"
+#line 3741 "tools/widl/parser.tab.c"
     break;
 
-  case 81: /* attribute: %empty  */
-#line 519 "tools/widl/parser.y"
-                                                { (yyval.attr) = NULL; }
-#line 3617 "tools/widl/parser.tab.c"
-    break;
-
-  case 82: /* attribute: tAGGREGATABLE  */
-#line 520 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); }
-#line 3623 "tools/widl/parser.tab.c"
-    break;
-
-  case 83: /* attribute: tANNOTATION '(' aSTRING ')'  */
-#line 521 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ANNOTATION, (yyvsp[-1].str)); }
-#line 3629 "tools/widl/parser.tab.c"
-    break;
-
-  case 84: /* attribute: tAPPOBJECT  */
-#line 522 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_APPOBJECT); }
-#line 3635 "tools/widl/parser.tab.c"
-    break;
-
-  case 85: /* attribute: tASYNC  */
-#line 523 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_ASYNC); }
-#line 3641 "tools/widl/parser.tab.c"
-    break;
-
-  case 86: /* attribute: tAUTOHANDLE  */
-#line 524 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); }
-#line 3647 "tools/widl/parser.tab.c"
-    break;
-
-  case 87: /* attribute: tBINDABLE  */
-#line 525 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_BINDABLE); }
-#line 3653 "tools/widl/parser.tab.c"
-    break;
-
-  case 88: /* attribute: tBROADCAST  */
-#line 526 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_BROADCAST); }
-#line 3659 "tools/widl/parser.tab.c"
-    break;
-
-  case 89: /* attribute: tCALLAS '(' ident ')'  */
-#line 527 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); }
-#line 3665 "tools/widl/parser.tab.c"
-    break;
-
-  case 90: /* attribute: tCASE '(' expr_list_int_const ')'  */
-#line 528 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); }
-#line 3671 "tools/widl/parser.tab.c"
-    break;
-
-  case 91: /* attribute: tCODE  */
-#line 529 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_CODE); }
-#line 3677 "tools/widl/parser.tab.c"
-    break;
-
-  case 92: /* attribute: tCOMMSTATUS  */
-#line 530 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_COMMSTATUS); }
-#line 3683 "tools/widl/parser.tab.c"
-    break;
-
-  case 93: /* attribute: tCONTEXTHANDLE  */
-#line 531 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); }
-#line 3689 "tools/widl/parser.tab.c"
-    break;
-
-  case 94: /* attribute: tCONTEXTHANDLENOSERIALIZE  */
-#line 532 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ }
-#line 3695 "tools/widl/parser.tab.c"
-    break;
-
-  case 95: /* attribute: tCONTEXTHANDLESERIALIZE  */
-#line 533 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ }
-#line 3701 "tools/widl/parser.tab.c"
-    break;
-
-  case 96: /* attribute: tCONTRACT '(' contract_req ')'  */
-#line 534 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_CONTRACT, (yyvsp[-1].expr)); }
-#line 3707 "tools/widl/parser.tab.c"
-    break;
-
-  case 97: /* attribute: tCONTRACTVERSION '(' contract_ver ')'  */
-#line 535 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_CONTRACTVERSION, (yyvsp[-1].num)); }
-#line 3713 "tools/widl/parser.tab.c"
-    break;
-
-  case 98: /* attribute: tCONTROL  */
-#line 536 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_CONTROL); }
-#line 3719 "tools/widl/parser.tab.c"
-    break;
-
-  case 99: /* attribute: tCUSTOM '(' uuid_string ',' expr_const ')'  */
-#line 537 "tools/widl/parser.y"
-                                                     { (yyval.attr) = make_custom_attr((yyvsp[-3].uuid), (yyvsp[-1].expr)); }
-#line 3725 "tools/widl/parser.tab.c"
-    break;
-
-  case 100: /* attribute: tDECODE  */
-#line 538 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DECODE); }
-#line 3731 "tools/widl/parser.tab.c"
-    break;
-
-  case 101: /* attribute: tDEFAULT  */
-#line 539 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DEFAULT); }
-#line 3737 "tools/widl/parser.tab.c"
-    break;
-
-  case 102: /* attribute: tDEFAULTBIND  */
-#line 540 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DEFAULTBIND); }
-#line 3743 "tools/widl/parser.tab.c"
-    break;
-
-  case 103: /* attribute: tDEFAULTCOLLELEM  */
+  case 88: /* attribute: %empty  */
 #line 541 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); }
-#line 3749 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = NULL; }
+#line 3747 "tools/widl/parser.tab.c"
     break;
 
-  case 104: /* attribute: tDEFAULTVALUE '(' expr_const ')'  */
+  case 89: /* attribute: tAGGREGATABLE  */
 #line 542 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE, (yyvsp[-1].expr)); }
-#line 3755 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); }
+#line 3753 "tools/widl/parser.tab.c"
     break;
 
-  case 105: /* attribute: tDEFAULTVTABLE  */
+  case 90: /* attribute: tANNOTATION '(' aSTRING ')'  */
 #line 543 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); }
-#line 3761 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_ANNOTATION, (yyvsp[-1].str)); }
+#line 3759 "tools/widl/parser.tab.c"
     break;
 
-  case 106: /* attribute: tDISABLECONSISTENCYCHECK  */
+  case 91: /* attribute: tAPPOBJECT  */
 #line 544 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DISABLECONSISTENCYCHECK); }
-#line 3767 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_APPOBJECT); }
+#line 3765 "tools/widl/parser.tab.c"
     break;
 
-  case 107: /* attribute: tDISPLAYBIND  */
+  case 92: /* attribute: tASYNC  */
 #line 545 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); }
-#line 3773 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_ASYNC); }
+#line 3771 "tools/widl/parser.tab.c"
     break;
 
-  case 108: /* attribute: tDLLNAME '(' aSTRING ')'  */
+  case 93: /* attribute: tAUTOHANDLE  */
 #line 546 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); }
-#line 3779 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); }
+#line 3777 "tools/widl/parser.tab.c"
     break;
 
-  case 109: /* attribute: tDUAL  */
+  case 94: /* attribute: tBINDABLE  */
 #line 547 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_DUAL); }
-#line 3785 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_BINDABLE); }
+#line 3783 "tools/widl/parser.tab.c"
     break;
 
-  case 110: /* attribute: tENABLEALLOCATE  */
+  case 95: /* attribute: tBROADCAST  */
 #line 548 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_ENABLEALLOCATE); }
-#line 3791 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_BROADCAST); }
+#line 3789 "tools/widl/parser.tab.c"
     break;
 
-  case 111: /* attribute: tENCODE  */
+  case 96: /* attribute: tCALLAS '(' ident ')'  */
 #line 549 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_ENCODE); }
-#line 3797 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); }
+#line 3795 "tools/widl/parser.tab.c"
     break;
 
-  case 112: /* attribute: tENDPOINT '(' str_list ')'  */
+  case 97: /* attribute: tCASE '(' expr_list_int_const ')'  */
 #line 550 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); }
-#line 3803 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); }
+#line 3801 "tools/widl/parser.tab.c"
     break;
 
-  case 113: /* attribute: tENTRY '(' expr_const ')'  */
+  case 98: /* attribute: tCODE  */
 #line 551 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ENTRY, (yyvsp[-1].expr)); }
-#line 3809 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_CODE); }
+#line 3807 "tools/widl/parser.tab.c"
     break;
 
-  case 114: /* attribute: tEXPLICITHANDLE  */
+  case 99: /* attribute: tCOMMSTATUS  */
 #line 552 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
-#line 3815 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_COMMSTATUS); }
+#line 3813 "tools/widl/parser.tab.c"
     break;
 
-  case 115: /* attribute: tFAULTSTATUS  */
+  case 100: /* attribute: tCONTEXTHANDLE  */
 #line 553 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_FAULTSTATUS); }
-#line 3821 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); }
+#line 3819 "tools/widl/parser.tab.c"
     break;
 
-  case 116: /* attribute: tFORCEALLOCATE  */
+  case 101: /* attribute: tCONTEXTHANDLENOSERIALIZE  */
 #line 554 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_FORCEALLOCATE); }
-#line 3827 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ }
+#line 3825 "tools/widl/parser.tab.c"
     break;
 
-  case 117: /* attribute: tHANDLE  */
+  case 102: /* attribute: tCONTEXTHANDLESERIALIZE  */
 #line 555 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_HANDLE); }
-#line 3833 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ }
+#line 3831 "tools/widl/parser.tab.c"
     break;
 
-  case 118: /* attribute: tHELPCONTEXT '(' expr_int_const ')'  */
+  case 103: /* attribute: tCONTRACT '(' contract_req ')'  */
 #line 556 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); }
-#line 3839 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_CONTRACT, (yyvsp[-1].expr)); }
+#line 3837 "tools/widl/parser.tab.c"
     break;
 
-  case 119: /* attribute: tHELPFILE '(' aSTRING ')'  */
+  case 104: /* attribute: tCONTRACTVERSION '(' contract_ver ')'  */
 #line 557 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); }
-#line 3845 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrv(ATTR_CONTRACTVERSION, (yyvsp[-1].num)); }
+#line 3843 "tools/widl/parser.tab.c"
     break;
 
-  case 120: /* attribute: tHELPSTRING '(' aSTRING ')'  */
+  case 105: /* attribute: tCONTROL  */
 #line 558 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); }
-#line 3851 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_CONTROL); }
+#line 3849 "tools/widl/parser.tab.c"
     break;
 
-  case 121: /* attribute: tHELPSTRINGCONTEXT '(' expr_int_const ')'  */
+  case 106: /* attribute: tCUSTOM '(' uuid_string ',' expr_const ')'  */
 #line 559 "tools/widl/parser.y"
-                                                        { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); }
-#line 3857 "tools/widl/parser.tab.c"
+                                                     { (yyval.attr) = make_custom_attr((yyvsp[-3].uuid), (yyvsp[-1].expr)); }
+#line 3855 "tools/widl/parser.tab.c"
     break;
 
-  case 122: /* attribute: tHELPSTRINGDLL '(' aSTRING ')'  */
+  case 107: /* attribute: tDECODE  */
 #line 560 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); }
-#line 3863 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DECODE); }
+#line 3861 "tools/widl/parser.tab.c"
     break;
 
-  case 123: /* attribute: tHIDDEN  */
+  case 108: /* attribute: tDEFAULT  */
 #line 561 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_HIDDEN); }
-#line 3869 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULT); }
+#line 3867 "tools/widl/parser.tab.c"
     break;
 
-  case 124: /* attribute: tID '(' expr_int_const ')'  */
+  case 109: /* attribute: tDEFAULTBIND  */
 #line 562 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); }
-#line 3875 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULTBIND); }
+#line 3873 "tools/widl/parser.tab.c"
     break;
 
-  case 125: /* attribute: tIDEMPOTENT  */
+  case 110: /* attribute: tDEFAULTCOLLELEM  */
 #line 563 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); }
-#line 3881 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); }
+#line 3879 "tools/widl/parser.tab.c"
     break;
 
-  case 126: /* attribute: tIGNORE  */
+  case 111: /* attribute: tDEFAULTVALUE '(' expr_const ')'  */
 #line 564 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_IGNORE); }
-#line 3887 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE, (yyvsp[-1].expr)); }
+#line 3885 "tools/widl/parser.tab.c"
     break;
 
-  case 127: /* attribute: tIIDIS '(' expr ')'  */
+  case 112: /* attribute: tDEFAULTVTABLE  */
 #line 565 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); }
-#line 3893 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); }
+#line 3891 "tools/widl/parser.tab.c"
     break;
 
-  case 128: /* attribute: tIMMEDIATEBIND  */
+  case 113: /* attribute: tDISABLECONSISTENCYCHECK  */
 #line 566 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); }
-#line 3899 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DISABLECONSISTENCYCHECK); }
+#line 3897 "tools/widl/parser.tab.c"
     break;
 
-  case 129: /* attribute: tIMPLICITHANDLE '(' arg ')'  */
+  case 114: /* attribute: tDISPLAYBIND  */
 #line 567 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].var)); }
-#line 3905 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); }
+#line 3903 "tools/widl/parser.tab.c"
     break;
 
-  case 130: /* attribute: tIN  */
+  case 115: /* attribute: tDLLNAME '(' aSTRING ')'  */
 #line 568 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_IN); }
-#line 3911 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); }
+#line 3909 "tools/widl/parser.tab.c"
     break;
 
-  case 131: /* attribute: tINPUTSYNC  */
+  case 116: /* attribute: tDUAL  */
 #line 569 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_INPUTSYNC); }
-#line 3917 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_DUAL); }
+#line 3915 "tools/widl/parser.tab.c"
     break;
 
-  case 132: /* attribute: tLENGTHIS '(' m_exprs ')'  */
+  case 117: /* attribute: tENABLEALLOCATE  */
 #line 570 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); }
-#line 3923 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_ENABLEALLOCATE); }
+#line 3921 "tools/widl/parser.tab.c"
     break;
 
-  case 133: /* attribute: tLCID '(' expr_int_const ')'  */
+  case 118: /* attribute: tENCODE  */
 #line 571 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_LIBLCID, (yyvsp[-1].expr)); }
-#line 3929 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attr(ATTR_ENCODE); }
+#line 3927 "tools/widl/parser.tab.c"
     break;
 
-  case 134: /* attribute: tLCID  */
+  case 119: /* attribute: tENDPOINT '(' str_list ')'  */
 #line 572 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PARAMLCID); }
-#line 3935 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); }
+#line 3933 "tools/widl/parser.tab.c"
     break;
 
-  case 135: /* attribute: tLICENSED  */
+  case 120: /* attribute: tENTRY '(' expr_const ')'  */
 #line 573 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_LICENSED); }
-#line 3941 "tools/widl/parser.tab.c"
+                                                { (yyval.attr) = make_attrp(ATTR_ENTRY, (yyvsp[-1].expr)); }
+#line 3939 "tools/widl/parser.tab.c"
     break;
 
-  case 136: /* attribute: tLOCAL  */
+  case 121: /* attribute: tEXCLUSIVETO '(' decl_spec ')'  */
 #line 574 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_LOCAL); }
+                                                { if ((yyvsp[-1].declspec)->type->type_type != TYPE_RUNTIMECLASS)
+						      error_loc("type %s is not a runtimeclass\n", (yyvsp[-1].declspec)->type->name);
+						  (yyval.attr) = make_attrp(ATTR_EXCLUSIVETO, (yyvsp[-1].declspec)->type); }
 #line 3947 "tools/widl/parser.tab.c"
     break;
 
-  case 137: /* attribute: tMAYBE  */
-#line 575 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_MAYBE); }
+  case 122: /* attribute: tEXPLICITHANDLE  */
+#line 577 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
 #line 3953 "tools/widl/parser.tab.c"
     break;
 
-  case 138: /* attribute: tMESSAGE  */
-#line 576 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_MESSAGE); }
+  case 123: /* attribute: tFAULTSTATUS  */
+#line 578 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_FAULTSTATUS); }
 #line 3959 "tools/widl/parser.tab.c"
     break;
 
-  case 139: /* attribute: tNOCODE  */
-#line 577 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NOCODE); }
+  case 124: /* attribute: tFORCEALLOCATE  */
+#line 579 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_FORCEALLOCATE); }
 #line 3965 "tools/widl/parser.tab.c"
     break;
 
-  case 140: /* attribute: tNONBROWSABLE  */
-#line 578 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); }
+  case 125: /* attribute: tHANDLE  */
+#line 580 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_HANDLE); }
 #line 3971 "tools/widl/parser.tab.c"
     break;
 
-  case 141: /* attribute: tNONCREATABLE  */
-#line 579 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NONCREATABLE); }
+  case 126: /* attribute: tHELPCONTEXT '(' expr_int_const ')'  */
+#line 581 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); }
 #line 3977 "tools/widl/parser.tab.c"
     break;
 
-  case 142: /* attribute: tNONEXTENSIBLE  */
-#line 580 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); }
+  case 127: /* attribute: tHELPFILE '(' aSTRING ')'  */
+#line 582 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); }
 #line 3983 "tools/widl/parser.tab.c"
     break;
 
-  case 143: /* attribute: tNOTIFY  */
-#line 581 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NOTIFY); }
+  case 128: /* attribute: tHELPSTRING '(' aSTRING ')'  */
+#line 583 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); }
 #line 3989 "tools/widl/parser.tab.c"
     break;
 
-  case 144: /* attribute: tNOTIFYFLAG  */
-#line 582 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_NOTIFYFLAG); }
+  case 129: /* attribute: tHELPSTRINGCONTEXT '(' expr_int_const ')'  */
+#line 584 "tools/widl/parser.y"
+                                                        { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); }
 #line 3995 "tools/widl/parser.tab.c"
     break;
 
-  case 145: /* attribute: tOBJECT  */
-#line 583 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_OBJECT); }
+  case 130: /* attribute: tHELPSTRINGDLL '(' aSTRING ')'  */
+#line 585 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); }
 #line 4001 "tools/widl/parser.tab.c"
     break;
 
-  case 146: /* attribute: tODL  */
-#line 584 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_ODL); }
+  case 131: /* attribute: tHIDDEN  */
+#line 586 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_HIDDEN); }
 #line 4007 "tools/widl/parser.tab.c"
     break;
 
-  case 147: /* attribute: tOLEAUTOMATION  */
-#line 585 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); }
+  case 132: /* attribute: tID '(' expr_int_const ')'  */
+#line 587 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); }
 #line 4013 "tools/widl/parser.tab.c"
     break;
 
-  case 148: /* attribute: tOPTIMIZE '(' aSTRING ')'  */
-#line 586 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_OPTIMIZE, (yyvsp[-1].str)); }
+  case 133: /* attribute: tIDEMPOTENT  */
+#line 588 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); }
 #line 4019 "tools/widl/parser.tab.c"
     break;
 
-  case 149: /* attribute: tOPTIONAL  */
-#line 587 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_OPTIONAL); }
+  case 134: /* attribute: tIGNORE  */
+#line 589 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_IGNORE); }
 #line 4025 "tools/widl/parser.tab.c"
     break;
 
-  case 150: /* attribute: tOUT  */
-#line 588 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_OUT); }
+  case 135: /* attribute: tIIDIS '(' expr ')'  */
+#line 590 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); }
 #line 4031 "tools/widl/parser.tab.c"
     break;
 
-  case 151: /* attribute: tPARTIALIGNORE  */
-#line 589 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PARTIALIGNORE); }
+  case 136: /* attribute: tIMMEDIATEBIND  */
+#line 591 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); }
 #line 4037 "tools/widl/parser.tab.c"
     break;
 
-  case 152: /* attribute: tPOINTERDEFAULT '(' pointer_type ')'  */
-#line 590 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); }
+  case 137: /* attribute: tIMPLICITHANDLE '(' arg ')'  */
+#line 592 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].var)); }
 #line 4043 "tools/widl/parser.tab.c"
     break;
 
-  case 153: /* attribute: tPROGID '(' aSTRING ')'  */
-#line 591 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_PROGID, (yyvsp[-1].str)); }
+  case 138: /* attribute: tIN  */
+#line 593 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_IN); }
 #line 4049 "tools/widl/parser.tab.c"
     break;
 
-  case 154: /* attribute: tPROPGET  */
-#line 592 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PROPGET); }
+  case 139: /* attribute: tINPUTSYNC  */
+#line 594 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_INPUTSYNC); }
 #line 4055 "tools/widl/parser.tab.c"
     break;
 
-  case 155: /* attribute: tPROPPUT  */
-#line 593 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PROPPUT); }
+  case 140: /* attribute: tLENGTHIS '(' m_exprs ')'  */
+#line 595 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); }
 #line 4061 "tools/widl/parser.tab.c"
     break;
 
-  case 156: /* attribute: tPROPPUTREF  */
-#line 594 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PROPPUTREF); }
+  case 141: /* attribute: tLCID '(' expr_int_const ')'  */
+#line 596 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_LIBLCID, (yyvsp[-1].expr)); }
 #line 4067 "tools/widl/parser.tab.c"
     break;
 
-  case 157: /* attribute: tPROXY  */
-#line 595 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PROXY); }
+  case 142: /* attribute: tLCID  */
+#line 597 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PARAMLCID); }
 #line 4073 "tools/widl/parser.tab.c"
     break;
 
-  case 158: /* attribute: tPUBLIC  */
-#line 596 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_PUBLIC); }
+  case 143: /* attribute: tLICENSED  */
+#line 598 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_LICENSED); }
 #line 4079 "tools/widl/parser.tab.c"
     break;
 
-  case 159: /* attribute: tRANGE '(' expr_int_const ',' expr_int_const ')'  */
-#line 598 "tools/widl/parser.y"
+  case 144: /* attribute: tLOCAL  */
+#line 599 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_LOCAL); }
+#line 4085 "tools/widl/parser.tab.c"
+    break;
+
+  case 145: /* attribute: tMARSHALINGBEHAVIOR '(' marshaling_behavior ')'  */
+#line 601 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrv(ATTR_MARSHALING_BEHAVIOR, (yyvsp[-1].num)); }
+#line 4091 "tools/widl/parser.tab.c"
+    break;
+
+  case 146: /* attribute: tMAYBE  */
+#line 602 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_MAYBE); }
+#line 4097 "tools/widl/parser.tab.c"
+    break;
+
+  case 147: /* attribute: tMESSAGE  */
+#line 603 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_MESSAGE); }
+#line 4103 "tools/widl/parser.tab.c"
+    break;
+
+  case 148: /* attribute: tNOCODE  */
+#line 604 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_NOCODE); }
+#line 4109 "tools/widl/parser.tab.c"
+    break;
+
+  case 149: /* attribute: tNONBROWSABLE  */
+#line 605 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); }
+#line 4115 "tools/widl/parser.tab.c"
+    break;
+
+  case 150: /* attribute: tNONCREATABLE  */
+#line 606 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_NONCREATABLE); }
+#line 4121 "tools/widl/parser.tab.c"
+    break;
+
+  case 151: /* attribute: tNONEXTENSIBLE  */
+#line 607 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); }
+#line 4127 "tools/widl/parser.tab.c"
+    break;
+
+  case 152: /* attribute: tNOTIFY  */
+#line 608 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_NOTIFY); }
+#line 4133 "tools/widl/parser.tab.c"
+    break;
+
+  case 153: /* attribute: tNOTIFYFLAG  */
+#line 609 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_NOTIFYFLAG); }
+#line 4139 "tools/widl/parser.tab.c"
+    break;
+
+  case 154: /* attribute: tOBJECT  */
+#line 610 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_OBJECT); }
+#line 4145 "tools/widl/parser.tab.c"
+    break;
+
+  case 155: /* attribute: tODL  */
+#line 611 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_ODL); }
+#line 4151 "tools/widl/parser.tab.c"
+    break;
+
+  case 156: /* attribute: tOLEAUTOMATION  */
+#line 612 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); }
+#line 4157 "tools/widl/parser.tab.c"
+    break;
+
+  case 157: /* attribute: tOPTIMIZE '(' aSTRING ')'  */
+#line 613 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_OPTIMIZE, (yyvsp[-1].str)); }
+#line 4163 "tools/widl/parser.tab.c"
+    break;
+
+  case 158: /* attribute: tOPTIONAL  */
+#line 614 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_OPTIONAL); }
+#line 4169 "tools/widl/parser.tab.c"
+    break;
+
+  case 159: /* attribute: tOUT  */
+#line 615 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_OUT); }
+#line 4175 "tools/widl/parser.tab.c"
+    break;
+
+  case 160: /* attribute: tPARTIALIGNORE  */
+#line 616 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PARTIALIGNORE); }
+#line 4181 "tools/widl/parser.tab.c"
+    break;
+
+  case 161: /* attribute: tPOINTERDEFAULT '(' pointer_type ')'  */
+#line 617 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); }
+#line 4187 "tools/widl/parser.tab.c"
+    break;
+
+  case 162: /* attribute: tPROGID '(' aSTRING ')'  */
+#line 618 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_PROGID, (yyvsp[-1].str)); }
+#line 4193 "tools/widl/parser.tab.c"
+    break;
+
+  case 163: /* attribute: tPROPGET  */
+#line 619 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PROPGET); }
+#line 4199 "tools/widl/parser.tab.c"
+    break;
+
+  case 164: /* attribute: tPROPPUT  */
+#line 620 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PROPPUT); }
+#line 4205 "tools/widl/parser.tab.c"
+    break;
+
+  case 165: /* attribute: tPROPPUTREF  */
+#line 621 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PROPPUTREF); }
+#line 4211 "tools/widl/parser.tab.c"
+    break;
+
+  case 166: /* attribute: tPROXY  */
+#line 622 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PROXY); }
+#line 4217 "tools/widl/parser.tab.c"
+    break;
+
+  case 167: /* attribute: tPUBLIC  */
+#line 623 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_PUBLIC); }
+#line 4223 "tools/widl/parser.tab.c"
+    break;
+
+  case 168: /* attribute: tRANGE '(' expr_int_const ',' expr_int_const ')'  */
+#line 625 "tools/widl/parser.y"
                                                 { expr_list_t *list = append_expr( NULL, (yyvsp[-3].expr) );
 						  list = append_expr( list, (yyvsp[-1].expr) );
 						  (yyval.attr) = make_attrp(ATTR_RANGE, list); }
-#line 4087 "tools/widl/parser.tab.c"
-    break;
-
-  case 160: /* attribute: tREADONLY  */
-#line 601 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_READONLY); }
-#line 4093 "tools/widl/parser.tab.c"
-    break;
-
-  case 161: /* attribute: tREPRESENTAS '(' type ')'  */
-#line 602 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_REPRESENTAS, (yyvsp[-1].type)); }
-#line 4099 "tools/widl/parser.tab.c"
-    break;
-
-  case 162: /* attribute: tREQUESTEDIT  */
-#line 603 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); }
-#line 4105 "tools/widl/parser.tab.c"
-    break;
-
-  case 163: /* attribute: tRESTRICTED  */
-#line 604 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_RESTRICTED); }
-#line 4111 "tools/widl/parser.tab.c"
-    break;
-
-  case 164: /* attribute: tRETVAL  */
-#line 605 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_RETVAL); }
-#line 4117 "tools/widl/parser.tab.c"
-    break;
-
-  case 165: /* attribute: tSIZEIS '(' m_exprs ')'  */
-#line 606 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[-1].expr_list)); }
-#line 4123 "tools/widl/parser.tab.c"
-    break;
-
-  case 166: /* attribute: tSOURCE  */
-#line 607 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_SOURCE); }
-#line 4129 "tools/widl/parser.tab.c"
-    break;
-
-  case 167: /* attribute: tSTRICTCONTEXTHANDLE  */
-#line 608 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); }
-#line 4135 "tools/widl/parser.tab.c"
-    break;
-
-  case 168: /* attribute: tSTRING  */
-#line 609 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_STRING); }
-#line 4141 "tools/widl/parser.tab.c"
-    break;
-
-  case 169: /* attribute: tSWITCHIS '(' expr ')'  */
-#line 610 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[-1].expr)); }
-#line 4147 "tools/widl/parser.tab.c"
-    break;
-
-  case 170: /* attribute: tSWITCHTYPE '(' type ')'  */
-#line 611 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[-1].type)); }
-#line 4153 "tools/widl/parser.tab.c"
-    break;
-
-  case 171: /* attribute: tTRANSMITAS '(' type ')'  */
-#line 612 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[-1].type)); }
-#line 4159 "tools/widl/parser.tab.c"
-    break;
-
-  case 172: /* attribute: tTHREADING '(' threading_type ')'  */
-#line 613 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_THREADING, (yyvsp[-1].num)); }
-#line 4165 "tools/widl/parser.tab.c"
-    break;
-
-  case 173: /* attribute: tUIDEFAULT  */
-#line 614 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_UIDEFAULT); }
-#line 4171 "tools/widl/parser.tab.c"
-    break;
-
-  case 174: /* attribute: tUSESGETLASTERROR  */
-#line 615 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_USESGETLASTERROR); }
-#line 4177 "tools/widl/parser.tab.c"
-    break;
-
-  case 175: /* attribute: tUSERMARSHAL '(' type ')'  */
-#line 616 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_USERMARSHAL, (yyvsp[-1].type)); }
-#line 4183 "tools/widl/parser.tab.c"
-    break;
-
-  case 176: /* attribute: tUUID '(' uuid_string ')'  */
-#line 617 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[-1].uuid)); }
-#line 4189 "tools/widl/parser.tab.c"
-    break;
-
-  case 177: /* attribute: tASYNCUUID '(' uuid_string ')'  */
-#line 618 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_ASYNCUUID, (yyvsp[-1].uuid)); }
-#line 4195 "tools/widl/parser.tab.c"
-    break;
-
-  case 178: /* attribute: tV1ENUM  */
-#line 619 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_V1ENUM); }
-#line 4201 "tools/widl/parser.tab.c"
-    break;
-
-  case 179: /* attribute: tVARARG  */
-#line 620 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attr(ATTR_VARARG); }
-#line 4207 "tools/widl/parser.tab.c"
-    break;
-
-  case 180: /* attribute: tVERSION '(' version ')'  */
-#line 621 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[-1].num)); }
-#line 4213 "tools/widl/parser.tab.c"
-    break;
-
-  case 181: /* attribute: tVIPROGID '(' aSTRING ')'  */
-#line 622 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_VIPROGID, (yyvsp[-1].str)); }
-#line 4219 "tools/widl/parser.tab.c"
-    break;
-
-  case 182: /* attribute: tWIREMARSHAL '(' type ')'  */
-#line 623 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[-1].type)); }
-#line 4225 "tools/widl/parser.tab.c"
-    break;
-
-  case 183: /* attribute: pointer_type  */
-#line 624 "tools/widl/parser.y"
-                                                { (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[0].num)); }
 #line 4231 "tools/widl/parser.tab.c"
     break;
 
-  case 185: /* uuid_string: aSTRING  */
+  case 169: /* attribute: tREADONLY  */
+#line 628 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_READONLY); }
+#line 4237 "tools/widl/parser.tab.c"
+    break;
+
+  case 170: /* attribute: tREPRESENTAS '(' type ')'  */
 #line 629 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_REPRESENTAS, (yyvsp[-1].type)); }
+#line 4243 "tools/widl/parser.tab.c"
+    break;
+
+  case 171: /* attribute: tREQUESTEDIT  */
+#line 630 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); }
+#line 4249 "tools/widl/parser.tab.c"
+    break;
+
+  case 172: /* attribute: tRESTRICTED  */
+#line 631 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_RESTRICTED); }
+#line 4255 "tools/widl/parser.tab.c"
+    break;
+
+  case 173: /* attribute: tRETVAL  */
+#line 632 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_RETVAL); }
+#line 4261 "tools/widl/parser.tab.c"
+    break;
+
+  case 174: /* attribute: tSIZEIS '(' m_exprs ')'  */
+#line 633 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[-1].expr_list)); }
+#line 4267 "tools/widl/parser.tab.c"
+    break;
+
+  case 175: /* attribute: tSOURCE  */
+#line 634 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_SOURCE); }
+#line 4273 "tools/widl/parser.tab.c"
+    break;
+
+  case 176: /* attribute: tSTRICTCONTEXTHANDLE  */
+#line 635 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); }
+#line 4279 "tools/widl/parser.tab.c"
+    break;
+
+  case 177: /* attribute: tSTRING  */
+#line 636 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_STRING); }
+#line 4285 "tools/widl/parser.tab.c"
+    break;
+
+  case 178: /* attribute: tSWITCHIS '(' expr ')'  */
+#line 637 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[-1].expr)); }
+#line 4291 "tools/widl/parser.tab.c"
+    break;
+
+  case 179: /* attribute: tSWITCHTYPE '(' type ')'  */
+#line 638 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[-1].type)); }
+#line 4297 "tools/widl/parser.tab.c"
+    break;
+
+  case 180: /* attribute: tTRANSMITAS '(' type ')'  */
+#line 639 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[-1].type)); }
+#line 4303 "tools/widl/parser.tab.c"
+    break;
+
+  case 181: /* attribute: tTHREADING '(' threading_type ')'  */
+#line 640 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrv(ATTR_THREADING, (yyvsp[-1].num)); }
+#line 4309 "tools/widl/parser.tab.c"
+    break;
+
+  case 182: /* attribute: tUIDEFAULT  */
+#line 641 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_UIDEFAULT); }
+#line 4315 "tools/widl/parser.tab.c"
+    break;
+
+  case 183: /* attribute: tUSESGETLASTERROR  */
+#line 642 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_USESGETLASTERROR); }
+#line 4321 "tools/widl/parser.tab.c"
+    break;
+
+  case 184: /* attribute: tUSERMARSHAL '(' type ')'  */
+#line 643 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_USERMARSHAL, (yyvsp[-1].type)); }
+#line 4327 "tools/widl/parser.tab.c"
+    break;
+
+  case 185: /* attribute: tUUID '(' uuid_string ')'  */
+#line 644 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[-1].uuid)); }
+#line 4333 "tools/widl/parser.tab.c"
+    break;
+
+  case 186: /* attribute: tASYNCUUID '(' uuid_string ')'  */
+#line 645 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_ASYNCUUID, (yyvsp[-1].uuid)); }
+#line 4339 "tools/widl/parser.tab.c"
+    break;
+
+  case 187: /* attribute: tV1ENUM  */
+#line 646 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_V1ENUM); }
+#line 4345 "tools/widl/parser.tab.c"
+    break;
+
+  case 188: /* attribute: tVARARG  */
+#line 647 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attr(ATTR_VARARG); }
+#line 4351 "tools/widl/parser.tab.c"
+    break;
+
+  case 189: /* attribute: tVERSION '(' version ')'  */
+#line 648 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[-1].num)); }
+#line 4357 "tools/widl/parser.tab.c"
+    break;
+
+  case 190: /* attribute: tVIPROGID '(' aSTRING ')'  */
+#line 649 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_VIPROGID, (yyvsp[-1].str)); }
+#line 4363 "tools/widl/parser.tab.c"
+    break;
+
+  case 191: /* attribute: tWIREMARSHAL '(' type ')'  */
+#line 650 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[-1].type)); }
+#line 4369 "tools/widl/parser.tab.c"
+    break;
+
+  case 192: /* attribute: pointer_type  */
+#line 651 "tools/widl/parser.y"
+                                                { (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[0].num)); }
+#line 4375 "tools/widl/parser.tab.c"
+    break;
+
+  case 194: /* uuid_string: aSTRING  */
+#line 656 "tools/widl/parser.y"
                                                 { if (!is_valid_uuid((yyvsp[0].str)))
 						    error_loc("invalid UUID: %s\n", (yyvsp[0].str));
 						  (yyval.uuid) = parse_uuid((yyvsp[0].str)); }
-#line 4239 "tools/widl/parser.tab.c"
+#line 4383 "tools/widl/parser.tab.c"
     break;
 
-  case 186: /* callconv: tCDECL  */
-#line 634 "tools/widl/parser.y"
+  case 195: /* callconv: tCDECL  */
+#line 661 "tools/widl/parser.y"
                                                 { (yyval.str) = xstrdup("__cdecl"); }
-#line 4245 "tools/widl/parser.tab.c"
+#line 4389 "tools/widl/parser.tab.c"
     break;
 
-  case 187: /* callconv: tFASTCALL  */
-#line 635 "tools/widl/parser.y"
+  case 196: /* callconv: tFASTCALL  */
+#line 662 "tools/widl/parser.y"
                                                 { (yyval.str) = xstrdup("__fastcall"); }
-#line 4251 "tools/widl/parser.tab.c"
+#line 4395 "tools/widl/parser.tab.c"
     break;
 
-  case 188: /* callconv: tPASCAL  */
-#line 636 "tools/widl/parser.y"
+  case 197: /* callconv: tPASCAL  */
+#line 663 "tools/widl/parser.y"
                                                 { (yyval.str) = xstrdup("__pascal"); }
-#line 4257 "tools/widl/parser.tab.c"
+#line 4401 "tools/widl/parser.tab.c"
     break;
 
-  case 189: /* callconv: tSTDCALL  */
-#line 637 "tools/widl/parser.y"
+  case 198: /* callconv: tSTDCALL  */
+#line 664 "tools/widl/parser.y"
                                                 { (yyval.str) = xstrdup("__stdcall"); }
-#line 4263 "tools/widl/parser.tab.c"
+#line 4407 "tools/widl/parser.tab.c"
     break;
 
-  case 190: /* cases: %empty  */
-#line 640 "tools/widl/parser.y"
+  case 199: /* cases: %empty  */
+#line 667 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4269 "tools/widl/parser.tab.c"
+#line 4413 "tools/widl/parser.tab.c"
     break;
 
-  case 191: /* cases: cases case  */
-#line 641 "tools/widl/parser.y"
+  case 200: /* cases: cases case  */
+#line 668 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
-#line 4275 "tools/widl/parser.tab.c"
+#line 4419 "tools/widl/parser.tab.c"
     break;
 
-  case 192: /* case: tCASE expr_int_const ':' union_field  */
-#line 644 "tools/widl/parser.y"
+  case 201: /* case: tCASE expr_int_const ':' union_field  */
+#line 671 "tools/widl/parser.y"
                                                 { attr_t *a = make_attrp(ATTR_CASE, append_expr( NULL, (yyvsp[-2].expr) ));
 						  (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
 						  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
 						}
-#line 4284 "tools/widl/parser.tab.c"
+#line 4428 "tools/widl/parser.tab.c"
     break;
 
-  case 193: /* case: tDEFAULT ':' union_field  */
-#line 648 "tools/widl/parser.y"
+  case 202: /* case: tDEFAULT ':' union_field  */
+#line 675 "tools/widl/parser.y"
                                                 { attr_t *a = make_attr(ATTR_DEFAULT);
 						  (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
 						  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
 						}
-#line 4293 "tools/widl/parser.tab.c"
+#line 4437 "tools/widl/parser.tab.c"
     break;
 
-  case 194: /* enums: %empty  */
-#line 654 "tools/widl/parser.y"
+  case 203: /* enums: %empty  */
+#line 681 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4299 "tools/widl/parser.tab.c"
+#line 4443 "tools/widl/parser.tab.c"
     break;
 
-  case 195: /* enums: enum_list ','  */
-#line 655 "tools/widl/parser.y"
+  case 204: /* enums: enum_list ','  */
+#line 682 "tools/widl/parser.y"
                                                 { (yyval.var_list) = (yyvsp[-1].var_list); }
-#line 4305 "tools/widl/parser.tab.c"
+#line 4449 "tools/widl/parser.tab.c"
     break;
 
-  case 197: /* enum_list: enum  */
-#line 659 "tools/widl/parser.y"
+  case 206: /* enum_list: enum  */
+#line 686 "tools/widl/parser.y"
                                                 { if (!(yyvsp[0].var)->eval)
 						    (yyvsp[0].var)->eval = make_exprl(EXPR_NUM, 0 /* default for first enum entry */);
                                                   (yyval.var_list) = append_var( NULL, (yyvsp[0].var) );
 						}
-#line 4314 "tools/widl/parser.tab.c"
+#line 4458 "tools/widl/parser.tab.c"
     break;
 
-  case 198: /* enum_list: enum_list ',' enum  */
-#line 663 "tools/widl/parser.y"
+  case 207: /* enum_list: enum_list ',' enum  */
+#line 690 "tools/widl/parser.y"
                                                 { if (!(yyvsp[0].var)->eval)
                                                   {
                                                     var_t *last = LIST_ENTRY( list_tail((yyval.var_list)), var_t, entry );
@@ -4325,715 +4469,746 @@
                                                   }
                                                   (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) );
 						}
-#line 4329 "tools/widl/parser.tab.c"
+#line 4473 "tools/widl/parser.tab.c"
     break;
 
-  case 199: /* enum_member: m_attributes ident  */
-#line 675 "tools/widl/parser.y"
+  case 208: /* enum_member: m_attributes ident  */
+#line 702 "tools/widl/parser.y"
                                                 { (yyval.var) = (yyvsp[0].var);
 						  (yyval.var)->attrs = check_enum_member_attrs((yyvsp[-1].attr_list));
 						}
-#line 4337 "tools/widl/parser.tab.c"
+#line 4481 "tools/widl/parser.tab.c"
     break;
 
-  case 200: /* enum: enum_member '=' expr_int_const  */
-#line 680 "tools/widl/parser.y"
+  case 209: /* enum: enum_member '=' expr_int_const  */
+#line 707 "tools/widl/parser.y"
                                                 { (yyval.var) = reg_const((yyvsp[-2].var));
 						  (yyval.var)->eval = (yyvsp[0].expr);
                                                   (yyval.var)->declspec.type = type_new_int(TYPE_BASIC_INT, 0);
 						}
-#line 4346 "tools/widl/parser.tab.c"
+#line 4490 "tools/widl/parser.tab.c"
     break;
 
-  case 201: /* enum: enum_member  */
-#line 684 "tools/widl/parser.y"
+  case 210: /* enum: enum_member  */
+#line 711 "tools/widl/parser.y"
                                                 { (yyval.var) = reg_const((yyvsp[0].var));
                                                   (yyval.var)->declspec.type = type_new_int(TYPE_BASIC_INT, 0);
 						}
-#line 4354 "tools/widl/parser.tab.c"
-    break;
-
-  case 202: /* enumdef: tENUM t_ident '{' enums '}'  */
-#line 689 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_enum((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
-#line 4360 "tools/widl/parser.tab.c"
-    break;
-
-  case 203: /* m_exprs: m_expr  */
-#line 692 "tools/widl/parser.y"
-                                                { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
-#line 4366 "tools/widl/parser.tab.c"
-    break;
-
-  case 204: /* m_exprs: m_exprs ',' m_expr  */
-#line 693 "tools/widl/parser.y"
-                                                { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
-#line 4372 "tools/widl/parser.tab.c"
-    break;
-
-  case 205: /* m_expr: %empty  */
-#line 696 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr(EXPR_VOID); }
-#line 4378 "tools/widl/parser.tab.c"
-    break;
-
-  case 207: /* expr: aNUM  */
-#line 700 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); }
-#line 4384 "tools/widl/parser.tab.c"
-    break;
-
-  case 208: /* expr: aHEXNUM  */
-#line 701 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); }
-#line 4390 "tools/widl/parser.tab.c"
-    break;
-
-  case 209: /* expr: aDOUBLE  */
-#line 702 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); }
-#line 4396 "tools/widl/parser.tab.c"
-    break;
-
-  case 210: /* expr: tFALSE  */
-#line 703 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); }
-#line 4402 "tools/widl/parser.tab.c"
-    break;
-
-  case 211: /* expr: tNULL  */
-#line 704 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprl(EXPR_NUM, 0); }
-#line 4408 "tools/widl/parser.tab.c"
-    break;
-
-  case 212: /* expr: tTRUE  */
-#line 705 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); }
-#line 4414 "tools/widl/parser.tab.c"
-    break;
-
-  case 213: /* expr: aSTRING  */
-#line 706 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprs(EXPR_STRLIT, (yyvsp[0].str)); }
-#line 4420 "tools/widl/parser.tab.c"
-    break;
-
-  case 214: /* expr: aWSTRING  */
-#line 707 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprs(EXPR_WSTRLIT, (yyvsp[0].str)); }
-#line 4426 "tools/widl/parser.tab.c"
-    break;
-
-  case 215: /* expr: aSQSTRING  */
-#line 708 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprs(EXPR_CHARCONST, (yyvsp[0].str)); }
-#line 4432 "tools/widl/parser.tab.c"
-    break;
-
-  case 216: /* expr: aIDENTIFIER  */
-#line 709 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); }
-#line 4438 "tools/widl/parser.tab.c"
-    break;
-
-  case 217: /* expr: expr '?' expr ':' expr  */
-#line 710 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4444 "tools/widl/parser.tab.c"
-    break;
-
-  case 218: /* expr: expr LOGICALOR expr  */
-#line 711 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_LOGOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4450 "tools/widl/parser.tab.c"
-    break;
-
-  case 219: /* expr: expr LOGICALAND expr  */
-#line 712 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_LOGAND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4456 "tools/widl/parser.tab.c"
-    break;
-
-  case 220: /* expr: expr '|' expr  */
-#line 713 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4462 "tools/widl/parser.tab.c"
-    break;
-
-  case 221: /* expr: expr '^' expr  */
-#line 714 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_XOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4468 "tools/widl/parser.tab.c"
-    break;
-
-  case 222: /* expr: expr '&' expr  */
-#line 715 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4474 "tools/widl/parser.tab.c"
-    break;
-
-  case 223: /* expr: expr EQUALITY expr  */
-#line 716 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_EQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4480 "tools/widl/parser.tab.c"
-    break;
-
-  case 224: /* expr: expr INEQUALITY expr  */
-#line 717 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_INEQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4486 "tools/widl/parser.tab.c"
-    break;
-
-  case 225: /* expr: expr '>' expr  */
-#line 718 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_GTR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 4492 "tools/widl/parser.tab.c"
-    break;
-
-  case 226: /* expr: expr '<' expr  */
-#line 719 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_LESS, (yyvsp[-2].expr), (yyvsp[0].expr)); }
 #line 4498 "tools/widl/parser.tab.c"
     break;
 
-  case 227: /* expr: expr GREATEREQUAL expr  */
-#line 720 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_GTREQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+  case 211: /* enumdef: tENUM t_ident '{' enums '}'  */
+#line 716 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_enum((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
 #line 4504 "tools/widl/parser.tab.c"
     break;
 
-  case 228: /* expr: expr LESSEQUAL expr  */
-#line 721 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_LESSEQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+  case 212: /* m_exprs: m_expr  */
+#line 719 "tools/widl/parser.y"
+                                                { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
 #line 4510 "tools/widl/parser.tab.c"
     break;
 
-  case 229: /* expr: expr SHL expr  */
-#line 722 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+  case 213: /* m_exprs: m_exprs ',' m_expr  */
+#line 720 "tools/widl/parser.y"
+                                                { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
 #line 4516 "tools/widl/parser.tab.c"
     break;
 
-  case 230: /* expr: expr SHR expr  */
+  case 214: /* m_expr: %empty  */
 #line 723 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+                                                { (yyval.expr) = make_expr(EXPR_VOID); }
 #line 4522 "tools/widl/parser.tab.c"
     break;
 
-  case 231: /* expr: expr '+' expr  */
-#line 724 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+  case 216: /* expr: aNUM  */
+#line 727 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); }
 #line 4528 "tools/widl/parser.tab.c"
     break;
 
-  case 232: /* expr: expr '-' expr  */
-#line 725 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+  case 217: /* expr: aHEXNUM  */
+#line 728 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); }
 #line 4534 "tools/widl/parser.tab.c"
     break;
 
-  case 233: /* expr: expr '%' expr  */
-#line 726 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_MOD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+  case 218: /* expr: aDOUBLE  */
+#line 729 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); }
 #line 4540 "tools/widl/parser.tab.c"
     break;
 
-  case 234: /* expr: expr '*' expr  */
-#line 727 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+  case 219: /* expr: tFALSE  */
+#line 730 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); }
 #line 4546 "tools/widl/parser.tab.c"
     break;
 
-  case 235: /* expr: expr '/' expr  */
-#line 728 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+  case 220: /* expr: tNULL  */
+#line 731 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_exprl(EXPR_NUM, 0); }
 #line 4552 "tools/widl/parser.tab.c"
     break;
 
-  case 236: /* expr: '!' expr  */
-#line 729 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_LOGNOT, (yyvsp[0].expr)); }
+  case 221: /* expr: tTRUE  */
+#line 732 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); }
 #line 4558 "tools/widl/parser.tab.c"
     break;
 
-  case 237: /* expr: '~' expr  */
-#line 730 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); }
+  case 222: /* expr: aSTRING  */
+#line 733 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_exprs(EXPR_STRLIT, (yyvsp[0].str)); }
 #line 4564 "tools/widl/parser.tab.c"
     break;
 
-  case 238: /* expr: '+' expr  */
-#line 731 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_POS, (yyvsp[0].expr)); }
+  case 223: /* expr: aWSTRING  */
+#line 734 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_exprs(EXPR_WSTRLIT, (yyvsp[0].str)); }
 #line 4570 "tools/widl/parser.tab.c"
     break;
 
-  case 239: /* expr: '-' expr  */
-#line 732 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); }
+  case 224: /* expr: aSQSTRING  */
+#line 735 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_exprs(EXPR_CHARCONST, (yyvsp[0].str)); }
 #line 4576 "tools/widl/parser.tab.c"
     break;
 
-  case 240: /* expr: '&' expr  */
-#line 733 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); }
+  case 225: /* expr: aIDENTIFIER  */
+#line 736 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); }
 #line 4582 "tools/widl/parser.tab.c"
     break;
 
-  case 241: /* expr: '*' expr  */
-#line 734 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); }
+  case 226: /* expr: expr '?' expr ':' expr  */
+#line 737 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); }
 #line 4588 "tools/widl/parser.tab.c"
     break;
 
-  case 242: /* expr: expr MEMBERPTR aIDENTIFIER  */
-#line 735 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_MEMBER, make_expr1(EXPR_PPTR, (yyvsp[-2].expr)), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
+  case 227: /* expr: expr LOGICALOR expr  */
+#line 738 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_LOGOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
 #line 4594 "tools/widl/parser.tab.c"
     break;
 
-  case 243: /* expr: expr '.' aIDENTIFIER  */
-#line 736 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_MEMBER, (yyvsp[-2].expr), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
+  case 228: /* expr: expr LOGICALAND expr  */
+#line 739 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_LOGAND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
 #line 4600 "tools/widl/parser.tab.c"
     break;
 
-  case 244: /* expr: '(' decl_spec m_abstract_declarator ')' expr  */
-#line 738 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprt(EXPR_CAST, declare_var(NULL, (yyvsp[-3].declspec), (yyvsp[-2].declarator), 0), (yyvsp[0].expr)); free((yyvsp[-3].declspec)); free((yyvsp[-2].declarator)); }
+  case 229: /* expr: expr '|' expr  */
+#line 740 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); }
 #line 4606 "tools/widl/parser.tab.c"
     break;
 
-  case 245: /* expr: tSIZEOF '(' decl_spec m_abstract_declarator ')'  */
-#line 740 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_exprt(EXPR_SIZEOF, declare_var(NULL, (yyvsp[-2].declspec), (yyvsp[-1].declarator), 0), NULL); free((yyvsp[-2].declspec)); free((yyvsp[-1].declarator)); }
+  case 230: /* expr: expr '^' expr  */
+#line 741 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_XOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
 #line 4612 "tools/widl/parser.tab.c"
     break;
 
-  case 246: /* expr: expr '[' expr ']'  */
-#line 741 "tools/widl/parser.y"
-                                                { (yyval.expr) = make_expr2(EXPR_ARRAY, (yyvsp[-3].expr), (yyvsp[-1].expr)); }
+  case 231: /* expr: expr '&' expr  */
+#line 742 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
 #line 4618 "tools/widl/parser.tab.c"
     break;
 
-  case 247: /* expr: '(' expr ')'  */
-#line 742 "tools/widl/parser.y"
-                                                { (yyval.expr) = (yyvsp[-1].expr); }
+  case 232: /* expr: expr EQUALITY expr  */
+#line 743 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_EQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
 #line 4624 "tools/widl/parser.tab.c"
     break;
 
-  case 248: /* expr_list_int_const: expr_int_const  */
-#line 745 "tools/widl/parser.y"
-                                                { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
+  case 233: /* expr: expr INEQUALITY expr  */
+#line 744 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_INEQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
 #line 4630 "tools/widl/parser.tab.c"
     break;
 
-  case 249: /* expr_list_int_const: expr_list_int_const ',' expr_int_const  */
-#line 746 "tools/widl/parser.y"
-                                                        { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
+  case 234: /* expr: expr '>' expr  */
+#line 745 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_GTR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
 #line 4636 "tools/widl/parser.tab.c"
     break;
 
-  case 250: /* expr_int_const: expr  */
+  case 235: /* expr: expr '<' expr  */
+#line 746 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_LESS, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4642 "tools/widl/parser.tab.c"
+    break;
+
+  case 236: /* expr: expr GREATEREQUAL expr  */
+#line 747 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_GTREQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4648 "tools/widl/parser.tab.c"
+    break;
+
+  case 237: /* expr: expr LESSEQUAL expr  */
+#line 748 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_LESSEQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4654 "tools/widl/parser.tab.c"
+    break;
+
+  case 238: /* expr: expr SHL expr  */
 #line 749 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4660 "tools/widl/parser.tab.c"
+    break;
+
+  case 239: /* expr: expr SHR expr  */
+#line 750 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4666 "tools/widl/parser.tab.c"
+    break;
+
+  case 240: /* expr: expr '+' expr  */
+#line 751 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4672 "tools/widl/parser.tab.c"
+    break;
+
+  case 241: /* expr: expr '-' expr  */
+#line 752 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4678 "tools/widl/parser.tab.c"
+    break;
+
+  case 242: /* expr: expr '%' expr  */
+#line 753 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_MOD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4684 "tools/widl/parser.tab.c"
+    break;
+
+  case 243: /* expr: expr '*' expr  */
+#line 754 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4690 "tools/widl/parser.tab.c"
+    break;
+
+  case 244: /* expr: expr '/' expr  */
+#line 755 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); }
+#line 4696 "tools/widl/parser.tab.c"
+    break;
+
+  case 245: /* expr: '!' expr  */
+#line 756 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr1(EXPR_LOGNOT, (yyvsp[0].expr)); }
+#line 4702 "tools/widl/parser.tab.c"
+    break;
+
+  case 246: /* expr: '~' expr  */
+#line 757 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); }
+#line 4708 "tools/widl/parser.tab.c"
+    break;
+
+  case 247: /* expr: '+' expr  */
+#line 758 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr1(EXPR_POS, (yyvsp[0].expr)); }
+#line 4714 "tools/widl/parser.tab.c"
+    break;
+
+  case 248: /* expr: '-' expr  */
+#line 759 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); }
+#line 4720 "tools/widl/parser.tab.c"
+    break;
+
+  case 249: /* expr: '&' expr  */
+#line 760 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); }
+#line 4726 "tools/widl/parser.tab.c"
+    break;
+
+  case 250: /* expr: '*' expr  */
+#line 761 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); }
+#line 4732 "tools/widl/parser.tab.c"
+    break;
+
+  case 251: /* expr: expr MEMBERPTR aIDENTIFIER  */
+#line 762 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_MEMBER, make_expr1(EXPR_PPTR, (yyvsp[-2].expr)), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
+#line 4738 "tools/widl/parser.tab.c"
+    break;
+
+  case 252: /* expr: expr '.' aIDENTIFIER  */
+#line 763 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_MEMBER, (yyvsp[-2].expr), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
+#line 4744 "tools/widl/parser.tab.c"
+    break;
+
+  case 253: /* expr: '(' decl_spec m_abstract_declarator ')' expr  */
+#line 765 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_exprt(EXPR_CAST, declare_var(NULL, (yyvsp[-3].declspec), (yyvsp[-2].declarator), 0), (yyvsp[0].expr)); free((yyvsp[-3].declspec)); free((yyvsp[-2].declarator)); }
+#line 4750 "tools/widl/parser.tab.c"
+    break;
+
+  case 254: /* expr: tSIZEOF '(' decl_spec m_abstract_declarator ')'  */
+#line 767 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_exprt(EXPR_SIZEOF, declare_var(NULL, (yyvsp[-2].declspec), (yyvsp[-1].declarator), 0), NULL); free((yyvsp[-2].declspec)); free((yyvsp[-1].declarator)); }
+#line 4756 "tools/widl/parser.tab.c"
+    break;
+
+  case 255: /* expr: expr '[' expr ']'  */
+#line 768 "tools/widl/parser.y"
+                                                { (yyval.expr) = make_expr2(EXPR_ARRAY, (yyvsp[-3].expr), (yyvsp[-1].expr)); }
+#line 4762 "tools/widl/parser.tab.c"
+    break;
+
+  case 256: /* expr: '(' expr ')'  */
+#line 769 "tools/widl/parser.y"
+                                                { (yyval.expr) = (yyvsp[-1].expr); }
+#line 4768 "tools/widl/parser.tab.c"
+    break;
+
+  case 257: /* expr_list_int_const: expr_int_const  */
+#line 772 "tools/widl/parser.y"
+                                                { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
+#line 4774 "tools/widl/parser.tab.c"
+    break;
+
+  case 258: /* expr_list_int_const: expr_list_int_const ',' expr_int_const  */
+#line 773 "tools/widl/parser.y"
+                                                        { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
+#line 4780 "tools/widl/parser.tab.c"
+    break;
+
+  case 259: /* expr_int_const: expr  */
+#line 776 "tools/widl/parser.y"
                                                 { (yyval.expr) = (yyvsp[0].expr);
 						  if (!(yyval.expr)->is_const)
 						      error_loc("expression is not an integer constant\n");
 						}
-#line 4645 "tools/widl/parser.tab.c"
+#line 4789 "tools/widl/parser.tab.c"
     break;
 
-  case 251: /* expr_const: expr  */
-#line 755 "tools/widl/parser.y"
+  case 260: /* expr_const: expr  */
+#line 782 "tools/widl/parser.y"
                                                 { (yyval.expr) = (yyvsp[0].expr);
 						  if (!(yyval.expr)->is_const && (yyval.expr)->type != EXPR_STRLIT && (yyval.expr)->type != EXPR_WSTRLIT)
 						      error_loc("expression is not constant\n");
 						}
-#line 4654 "tools/widl/parser.tab.c"
+#line 4798 "tools/widl/parser.tab.c"
     break;
 
-  case 252: /* fields: %empty  */
-#line 761 "tools/widl/parser.y"
+  case 261: /* fields: %empty  */
+#line 788 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4660 "tools/widl/parser.tab.c"
+#line 4804 "tools/widl/parser.tab.c"
     break;
 
-  case 253: /* fields: fields field  */
-#line 762 "tools/widl/parser.y"
+  case 262: /* fields: fields field  */
+#line 789 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var_list((yyvsp[-1].var_list), (yyvsp[0].var_list)); }
-#line 4666 "tools/widl/parser.tab.c"
+#line 4810 "tools/widl/parser.tab.c"
     break;
 
-  case 254: /* field: m_attributes decl_spec struct_declarator_list ';'  */
-#line 766 "tools/widl/parser.y"
+  case 263: /* field: m_attributes decl_spec struct_declarator_list ';'  */
+#line 793 "tools/widl/parser.y"
                                                 { const char *first = LIST_ENTRY(list_head((yyvsp[-1].declarator_list)), declarator_t, entry)->var->name;
 						  check_field_attrs(first, (yyvsp[-3].attr_list));
 						  (yyval.var_list) = set_var_types((yyvsp[-3].attr_list), (yyvsp[-2].declspec), (yyvsp[-1].declarator_list));
 						}
-#line 4675 "tools/widl/parser.tab.c"
+#line 4819 "tools/widl/parser.tab.c"
     break;
 
-  case 255: /* field: m_attributes uniondef ';'  */
-#line 770 "tools/widl/parser.y"
+  case 264: /* field: m_attributes uniondef ';'  */
+#line 797 "tools/widl/parser.y"
                                                 { var_t *v = make_var(NULL);
 						  v->declspec.type = (yyvsp[-1].type); v->attrs = (yyvsp[-2].attr_list);
 						  (yyval.var_list) = append_var(NULL, v);
 						}
-#line 4684 "tools/widl/parser.tab.c"
+#line 4828 "tools/widl/parser.tab.c"
     break;
 
-  case 256: /* ne_union_field: s_field ';'  */
-#line 777 "tools/widl/parser.y"
+  case 265: /* ne_union_field: s_field ';'  */
+#line 804 "tools/widl/parser.y"
                                                 { (yyval.var) = (yyvsp[-1].var); }
-#line 4690 "tools/widl/parser.tab.c"
+#line 4834 "tools/widl/parser.tab.c"
     break;
 
-  case 257: /* ne_union_field: attributes ';'  */
-#line 778 "tools/widl/parser.y"
+  case 266: /* ne_union_field: attributes ';'  */
+#line 805 "tools/widl/parser.y"
                                                 { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[-1].attr_list); }
-#line 4696 "tools/widl/parser.tab.c"
+#line 4840 "tools/widl/parser.tab.c"
     break;
 
-  case 258: /* ne_union_fields: %empty  */
-#line 781 "tools/widl/parser.y"
+  case 267: /* ne_union_fields: %empty  */
+#line 808 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 4702 "tools/widl/parser.tab.c"
+#line 4846 "tools/widl/parser.tab.c"
     break;
 
-  case 259: /* ne_union_fields: ne_union_fields ne_union_field  */
-#line 782 "tools/widl/parser.y"
+  case 268: /* ne_union_fields: ne_union_fields ne_union_field  */
+#line 809 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
-#line 4708 "tools/widl/parser.tab.c"
+#line 4852 "tools/widl/parser.tab.c"
     break;
 
-  case 260: /* union_field: s_field ';'  */
-#line 786 "tools/widl/parser.y"
+  case 269: /* union_field: s_field ';'  */
+#line 813 "tools/widl/parser.y"
                                                 { (yyval.var) = (yyvsp[-1].var); }
-#line 4714 "tools/widl/parser.tab.c"
+#line 4858 "tools/widl/parser.tab.c"
     break;
 
-  case 261: /* union_field: ';'  */
-#line 787 "tools/widl/parser.y"
+  case 270: /* union_field: ';'  */
+#line 814 "tools/widl/parser.y"
                                                 { (yyval.var) = NULL; }
-#line 4720 "tools/widl/parser.tab.c"
+#line 4864 "tools/widl/parser.tab.c"
     break;
 
-  case 262: /* s_field: m_attributes decl_spec declarator  */
-#line 790 "tools/widl/parser.y"
+  case 271: /* s_field: m_attributes decl_spec declarator  */
+#line 817 "tools/widl/parser.y"
                                                 { (yyval.var) = declare_var(check_field_attrs((yyvsp[0].declarator)->var->name, (yyvsp[-2].attr_list)),
 						                (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 4729 "tools/widl/parser.tab.c"
+#line 4873 "tools/widl/parser.tab.c"
     break;
 
-  case 263: /* s_field: m_attributes structdef  */
-#line 794 "tools/widl/parser.y"
+  case 272: /* s_field: m_attributes structdef  */
+#line 821 "tools/widl/parser.y"
                                                 { var_t *v = make_var(NULL);
 						  v->declspec.type = (yyvsp[0].type); v->attrs = (yyvsp[-1].attr_list);
 						  (yyval.var) = v;
 						}
-#line 4738 "tools/widl/parser.tab.c"
+#line 4882 "tools/widl/parser.tab.c"
     break;
 
-  case 264: /* funcdef: declaration  */
-#line 800 "tools/widl/parser.y"
+  case 273: /* funcdef: declaration  */
+#line 827 "tools/widl/parser.y"
                                                 { (yyval.var) = (yyvsp[0].var);
 						  if (type_get_type((yyval.var)->declspec.type) != TYPE_FUNCTION)
 						    error_loc("only methods may be declared inside the methods section of a dispinterface\n");
 						  check_function_attrs((yyval.var)->name, (yyval.var)->attrs);
 						}
-#line 4748 "tools/widl/parser.tab.c"
+#line 4892 "tools/widl/parser.tab.c"
     break;
 
-  case 265: /* declaration: attributes decl_spec init_declarator  */
-#line 809 "tools/widl/parser.y"
+  case 274: /* declaration: attributes decl_spec init_declarator  */
+#line 836 "tools/widl/parser.y"
                                                 { (yyval.var) = declare_var((yyvsp[-2].attr_list), (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 4756 "tools/widl/parser.tab.c"
+#line 4900 "tools/widl/parser.tab.c"
     break;
 
-  case 266: /* declaration: decl_spec init_declarator  */
-#line 812 "tools/widl/parser.y"
+  case 275: /* declaration: decl_spec init_declarator  */
+#line 839 "tools/widl/parser.y"
                                                 { (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
 						  free((yyvsp[0].declarator));
 						}
-#line 4764 "tools/widl/parser.tab.c"
-    break;
-
-  case 267: /* m_ident: %empty  */
-#line 817 "tools/widl/parser.y"
-                                                { (yyval.var) = NULL; }
-#line 4770 "tools/widl/parser.tab.c"
-    break;
-
-  case 269: /* t_ident: %empty  */
-#line 821 "tools/widl/parser.y"
-                                                { (yyval.str) = NULL; }
-#line 4776 "tools/widl/parser.tab.c"
-    break;
-
-  case 270: /* t_ident: aIDENTIFIER  */
-#line 822 "tools/widl/parser.y"
-                                                { (yyval.str) = (yyvsp[0].str); }
-#line 4782 "tools/widl/parser.tab.c"
-    break;
-
-  case 271: /* t_ident: aKNOWNTYPE  */
-#line 823 "tools/widl/parser.y"
-                                                { (yyval.str) = (yyvsp[0].str); }
-#line 4788 "tools/widl/parser.tab.c"
-    break;
-
-  case 272: /* ident: aIDENTIFIER  */
-#line 826 "tools/widl/parser.y"
-                                                { (yyval.var) = make_var((yyvsp[0].str)); }
-#line 4794 "tools/widl/parser.tab.c"
-    break;
-
-  case 273: /* ident: aKNOWNTYPE  */
-#line 828 "tools/widl/parser.y"
-                                                { (yyval.var) = make_var((yyvsp[0].str)); }
-#line 4800 "tools/widl/parser.tab.c"
-    break;
-
-  case 274: /* base_type: tBYTE  */
-#line 831 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4806 "tools/widl/parser.tab.c"
-    break;
-
-  case 275: /* base_type: tWCHAR  */
-#line 832 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4812 "tools/widl/parser.tab.c"
-    break;
-
-  case 277: /* base_type: tSIGNED int_std  */
-#line 834 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), -1); }
-#line 4818 "tools/widl/parser.tab.c"
-    break;
-
-  case 278: /* base_type: tUNSIGNED int_std  */
-#line 835 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), 1); }
-#line 4824 "tools/widl/parser.tab.c"
-    break;
-
-  case 279: /* base_type: tUNSIGNED  */
-#line 836 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT, 1); }
-#line 4830 "tools/widl/parser.tab.c"
-    break;
-
-  case 280: /* base_type: tFLOAT  */
-#line 837 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4836 "tools/widl/parser.tab.c"
-    break;
-
-  case 281: /* base_type: tDOUBLE  */
-#line 838 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4842 "tools/widl/parser.tab.c"
-    break;
-
-  case 282: /* base_type: tBOOLEAN  */
-#line 839 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4848 "tools/widl/parser.tab.c"
-    break;
-
-  case 283: /* base_type: tERRORSTATUST  */
-#line 840 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4854 "tools/widl/parser.tab.c"
-    break;
-
-  case 284: /* base_type: tHANDLET  */
-#line 841 "tools/widl/parser.y"
-                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
-#line 4860 "tools/widl/parser.tab.c"
-    break;
-
-  case 287: /* int_std: tINT  */
-#line 848 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT, 0); }
-#line 4866 "tools/widl/parser.tab.c"
-    break;
-
-  case 288: /* int_std: tSHORT m_int  */
-#line 849 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT16, 0); }
-#line 4872 "tools/widl/parser.tab.c"
-    break;
-
-  case 289: /* int_std: tSMALL  */
-#line 850 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT8, 0); }
-#line 4878 "tools/widl/parser.tab.c"
-    break;
-
-  case 290: /* int_std: tLONG m_int  */
-#line 851 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_LONG, 0); }
-#line 4884 "tools/widl/parser.tab.c"
-    break;
-
-  case 291: /* int_std: tHYPER m_int  */
-#line 852 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_HYPER, 0); }
-#line 4890 "tools/widl/parser.tab.c"
-    break;
-
-  case 292: /* int_std: tINT64  */
-#line 853 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT64, 0); }
-#line 4896 "tools/widl/parser.tab.c"
-    break;
-
-  case 293: /* int_std: tCHAR  */
-#line 854 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_CHAR, 0); }
-#line 4902 "tools/widl/parser.tab.c"
-    break;
-
-  case 294: /* int_std: tINT32  */
-#line 855 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT32, 0); }
 #line 4908 "tools/widl/parser.tab.c"
     break;
 
-  case 295: /* int_std: tINT3264  */
-#line 856 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT3264, 0); }
+  case 276: /* m_ident: %empty  */
+#line 844 "tools/widl/parser.y"
+                                                { (yyval.var) = NULL; }
 #line 4914 "tools/widl/parser.tab.c"
     break;
 
-  case 296: /* qualified_seq: aKNOWNTYPE  */
-#line 860 "tools/widl/parser.y"
-                      { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+  case 278: /* t_ident: %empty  */
+#line 848 "tools/widl/parser.y"
+                                                { (yyval.str) = NULL; }
 #line 4920 "tools/widl/parser.tab.c"
     break;
 
-  case 297: /* $@3: %empty  */
-#line 861 "tools/widl/parser.y"
-                      { push_lookup_namespace((yyvsp[-1].str)); }
+  case 279: /* t_ident: aIDENTIFIER  */
+#line 849 "tools/widl/parser.y"
+                                                { (yyval.str) = (yyvsp[0].str); }
 #line 4926 "tools/widl/parser.tab.c"
     break;
 
-  case 298: /* qualified_seq: aIDENTIFIER '.' $@3 qualified_seq  */
-#line 861 "tools/widl/parser.y"
-                                                                   { (yyval.type) = (yyvsp[0].type); }
+  case 280: /* t_ident: aKNOWNTYPE  */
+#line 850 "tools/widl/parser.y"
+                                                { (yyval.str) = (yyvsp[0].str); }
 #line 4932 "tools/widl/parser.tab.c"
     break;
 
-  case 299: /* qualified_type: aKNOWNTYPE  */
-#line 865 "tools/widl/parser.y"
-                     { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+  case 281: /* ident: aIDENTIFIER  */
+#line 853 "tools/widl/parser.y"
+                                                { (yyval.var) = make_var((yyvsp[0].str)); }
 #line 4938 "tools/widl/parser.tab.c"
     break;
 
-  case 300: /* $@4: %empty  */
-#line 866 "tools/widl/parser.y"
-                     { init_lookup_namespace((yyvsp[-1].str)); }
+  case 282: /* ident: aKNOWNTYPE  */
+#line 855 "tools/widl/parser.y"
+                                                { (yyval.var) = make_var((yyvsp[0].str)); }
 #line 4944 "tools/widl/parser.tab.c"
     break;
 
-  case 301: /* qualified_type: aNAMESPACE '.' $@4 qualified_seq  */
-#line 866 "tools/widl/parser.y"
-                                                                  { (yyval.type) = (yyvsp[0].type); }
+  case 283: /* base_type: tBYTE  */
+#line 858 "tools/widl/parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
 #line 4950 "tools/widl/parser.tab.c"
     break;
 
-  case 302: /* coclass: tCOCLASS aIDENTIFIER  */
-#line 869 "tools/widl/parser.y"
-                                                { (yyval.type) = type_new_coclass((yyvsp[0].str)); }
+  case 284: /* base_type: tWCHAR  */
+#line 859 "tools/widl/parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
 #line 4956 "tools/widl/parser.tab.c"
     break;
 
-  case 303: /* coclass: tCOCLASS aKNOWNTYPE  */
-#line 870 "tools/widl/parser.y"
+  case 286: /* base_type: tSIGNED int_std  */
+#line 861 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), -1); }
+#line 4962 "tools/widl/parser.tab.c"
+    break;
+
+  case 287: /* base_type: tUNSIGNED int_std  */
+#line 862 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), 1); }
+#line 4968 "tools/widl/parser.tab.c"
+    break;
+
+  case 288: /* base_type: tUNSIGNED  */
+#line 863 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT, 1); }
+#line 4974 "tools/widl/parser.tab.c"
+    break;
+
+  case 289: /* base_type: tFLOAT  */
+#line 864 "tools/widl/parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4980 "tools/widl/parser.tab.c"
+    break;
+
+  case 290: /* base_type: tDOUBLE  */
+#line 865 "tools/widl/parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4986 "tools/widl/parser.tab.c"
+    break;
+
+  case 291: /* base_type: tBOOLEAN  */
+#line 866 "tools/widl/parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4992 "tools/widl/parser.tab.c"
+    break;
+
+  case 292: /* base_type: tERRORSTATUST  */
+#line 867 "tools/widl/parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 4998 "tools/widl/parser.tab.c"
+    break;
+
+  case 293: /* base_type: tHANDLET  */
+#line 868 "tools/widl/parser.y"
+                                                { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 5004 "tools/widl/parser.tab.c"
+    break;
+
+  case 296: /* int_std: tINT  */
+#line 875 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT, 0); }
+#line 5010 "tools/widl/parser.tab.c"
+    break;
+
+  case 297: /* int_std: tSHORT m_int  */
+#line 876 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT16, 0); }
+#line 5016 "tools/widl/parser.tab.c"
+    break;
+
+  case 298: /* int_std: tSMALL  */
+#line 877 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT8, 0); }
+#line 5022 "tools/widl/parser.tab.c"
+    break;
+
+  case 299: /* int_std: tLONG m_int  */
+#line 878 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_LONG, 0); }
+#line 5028 "tools/widl/parser.tab.c"
+    break;
+
+  case 300: /* int_std: tHYPER m_int  */
+#line 879 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_HYPER, 0); }
+#line 5034 "tools/widl/parser.tab.c"
+    break;
+
+  case 301: /* int_std: tINT64  */
+#line 880 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT64, 0); }
+#line 5040 "tools/widl/parser.tab.c"
+    break;
+
+  case 302: /* int_std: tCHAR  */
+#line 881 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_CHAR, 0); }
+#line 5046 "tools/widl/parser.tab.c"
+    break;
+
+  case 303: /* int_std: tINT32  */
+#line 882 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT32, 0); }
+#line 5052 "tools/widl/parser.tab.c"
+    break;
+
+  case 304: /* int_std: tINT3264  */
+#line 883 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_int(TYPE_BASIC_INT3264, 0); }
+#line 5058 "tools/widl/parser.tab.c"
+    break;
+
+  case 305: /* qualified_seq: aKNOWNTYPE  */
+#line 887 "tools/widl/parser.y"
+                      { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 5064 "tools/widl/parser.tab.c"
+    break;
+
+  case 306: /* $@3: %empty  */
+#line 888 "tools/widl/parser.y"
+                      { push_lookup_namespace((yyvsp[-1].str)); }
+#line 5070 "tools/widl/parser.tab.c"
+    break;
+
+  case 307: /* qualified_seq: aIDENTIFIER '.' $@3 qualified_seq  */
+#line 888 "tools/widl/parser.y"
+                                                                   { (yyval.type) = (yyvsp[0].type); }
+#line 5076 "tools/widl/parser.tab.c"
+    break;
+
+  case 308: /* qualified_type: aKNOWNTYPE  */
+#line 892 "tools/widl/parser.y"
+                     { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
+#line 5082 "tools/widl/parser.tab.c"
+    break;
+
+  case 309: /* $@4: %empty  */
+#line 893 "tools/widl/parser.y"
+                     { init_lookup_namespace((yyvsp[-1].str)); }
+#line 5088 "tools/widl/parser.tab.c"
+    break;
+
+  case 310: /* qualified_type: aNAMESPACE '.' $@4 qualified_seq  */
+#line 893 "tools/widl/parser.y"
+                                                                  { (yyval.type) = (yyvsp[0].type); }
+#line 5094 "tools/widl/parser.tab.c"
+    break;
+
+  case 311: /* coclass: tCOCLASS aIDENTIFIER  */
+#line 896 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_coclass((yyvsp[0].str)); }
+#line 5100 "tools/widl/parser.tab.c"
+    break;
+
+  case 312: /* coclass: tCOCLASS aKNOWNTYPE  */
+#line 897 "tools/widl/parser.y"
                                                 { (yyval.type) = find_type((yyvsp[0].str), NULL, 0);
 						  if (type_get_type_detect_alias((yyval.type)) != TYPE_COCLASS)
 						    error_loc("%s was not declared a coclass at %s:%d\n",
 							      (yyvsp[0].str), (yyval.type)->loc_info.input_name,
 							      (yyval.type)->loc_info.line_number);
 						}
-#line 4967 "tools/widl/parser.tab.c"
+#line 5111 "tools/widl/parser.tab.c"
     break;
 
-  case 304: /* coclasshdr: attributes coclass  */
-#line 878 "tools/widl/parser.y"
+  case 313: /* coclasshdr: attributes coclass  */
+#line 905 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type);
 						  check_def((yyval.type));
 						  (yyval.type)->attrs = check_coclass_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
 						}
-#line 4976 "tools/widl/parser.tab.c"
+#line 5120 "tools/widl/parser.tab.c"
     break;
 
-  case 305: /* coclassdef: coclasshdr '{' coclass_ints '}' semicolon_opt  */
-#line 885 "tools/widl/parser.y"
+  case 314: /* coclassdef: coclasshdr '{' class_interfaces '}' semicolon_opt  */
+#line 912 "tools/widl/parser.y"
                                                 { (yyval.type) = type_coclass_define((yyvsp[-4].type), (yyvsp[-2].ifref_list)); }
-#line 4982 "tools/widl/parser.tab.c"
+#line 5126 "tools/widl/parser.tab.c"
     break;
 
-  case 306: /* apicontract: attributes tAPICONTRACT aIDENTIFIER '{' '}'  */
-#line 889 "tools/widl/parser.y"
+  case 315: /* runtimeclass: tRUNTIMECLASS aIDENTIFIER  */
+#line 916 "tools/widl/parser.y"
+                                                { (yyval.type) = type_new_runtimeclass((yyvsp[0].str), current_namespace); }
+#line 5132 "tools/widl/parser.tab.c"
+    break;
+
+  case 316: /* runtimeclass: tRUNTIMECLASS aKNOWNTYPE  */
+#line 917 "tools/widl/parser.y"
+                                                { (yyval.type) = find_type((yyvsp[0].str), NULL, 0);
+						  if (type_get_type_detect_alias((yyval.type)) != TYPE_RUNTIMECLASS)
+						    error_loc("%s was not declared a runtimeclass at %s:%d\n", (yyvsp[0].str),
+						              (yyval.type)->loc_info.input_name, (yyval.type)->loc_info.line_number);
+						}
+#line 5142 "tools/widl/parser.tab.c"
+    break;
+
+  case 317: /* runtimeclass_hdr: attributes runtimeclass  */
+#line 924 "tools/widl/parser.y"
+                                                { (yyval.type) = (yyvsp[0].type);
+						  check_def((yyval.type));
+						  (yyval.type)->attrs = check_runtimeclass_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
+						}
+#line 5151 "tools/widl/parser.tab.c"
+    break;
+
+  case 318: /* runtimeclass_def: runtimeclass_hdr '{' class_interfaces '}' semicolon_opt  */
+#line 931 "tools/widl/parser.y"
+                                                { (yyval.type) = type_runtimeclass_define((yyvsp[-4].type), (yyvsp[-2].ifref_list)); }
+#line 5157 "tools/widl/parser.tab.c"
+    break;
+
+  case 319: /* apicontract: attributes tAPICONTRACT aIDENTIFIER '{' '}'  */
+#line 935 "tools/widl/parser.y"
                                                 { (yyval.type) = get_type(TYPE_APICONTRACT, (yyvsp[-2].str), current_namespace, 0);
 						  check_def((yyval.type));
 						  (yyval.type)->attrs = check_apicontract_attrs((yyval.type)->name, (yyvsp[-4].attr_list));
 						}
-#line 4991 "tools/widl/parser.tab.c"
+#line 5166 "tools/widl/parser.tab.c"
     break;
 
-  case 307: /* namespacedef: tNAMESPACE aIDENTIFIER  */
-#line 895 "tools/widl/parser.y"
+  case 320: /* namespacedef: tNAMESPACE aIDENTIFIER  */
+#line 941 "tools/widl/parser.y"
                                                 { (yyval.str) = (yyvsp[0].str); }
-#line 4997 "tools/widl/parser.tab.c"
+#line 5172 "tools/widl/parser.tab.c"
     break;
 
-  case 308: /* namespacedef: tNAMESPACE aNAMESPACE  */
-#line 896 "tools/widl/parser.y"
+  case 321: /* namespacedef: tNAMESPACE aNAMESPACE  */
+#line 942 "tools/widl/parser.y"
                                                 { (yyval.str) = (yyvsp[0].str); }
-#line 5003 "tools/widl/parser.tab.c"
+#line 5178 "tools/widl/parser.tab.c"
     break;
 
-  case 309: /* coclass_ints: %empty  */
-#line 899 "tools/widl/parser.y"
+  case 322: /* class_interfaces: %empty  */
+#line 945 "tools/widl/parser.y"
                                                 { (yyval.ifref_list) = NULL; }
-#line 5009 "tools/widl/parser.tab.c"
+#line 5184 "tools/widl/parser.tab.c"
     break;
 
-  case 310: /* coclass_ints: coclass_ints coclass_int  */
-#line 900 "tools/widl/parser.y"
+  case 323: /* class_interfaces: class_interfaces class_interface  */
+#line 946 "tools/widl/parser.y"
                                                 { (yyval.ifref_list) = append_ifref( (yyvsp[-1].ifref_list), (yyvsp[0].ifref) ); }
-#line 5015 "tools/widl/parser.tab.c"
+#line 5190 "tools/widl/parser.tab.c"
     break;
 
-  case 311: /* coclass_int: m_attributes interfacedec  */
-#line 904 "tools/widl/parser.y"
+  case 324: /* class_interface: m_attributes interfacedec  */
+#line 950 "tools/widl/parser.y"
                                                 { (yyval.ifref) = make_ifref((yyvsp[0].type)); (yyval.ifref)->attrs = (yyvsp[-1].attr_list); }
-#line 5021 "tools/widl/parser.tab.c"
+#line 5196 "tools/widl/parser.tab.c"
     break;
 
-  case 312: /* dispinterface: tDISPINTERFACE aIDENTIFIER  */
-#line 907 "tools/widl/parser.y"
+  case 325: /* dispinterface: tDISPINTERFACE aIDENTIFIER  */
+#line 953 "tools/widl/parser.y"
                                                 { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 5027 "tools/widl/parser.tab.c"
+#line 5202 "tools/widl/parser.tab.c"
     break;
 
-  case 313: /* dispinterface: tDISPINTERFACE aKNOWNTYPE  */
-#line 908 "tools/widl/parser.y"
+  case 326: /* dispinterface: tDISPINTERFACE aKNOWNTYPE  */
+#line 954 "tools/widl/parser.y"
                                                 { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 5033 "tools/widl/parser.tab.c"
+#line 5208 "tools/widl/parser.tab.c"
     break;
 
-  case 314: /* dispinterfacehdr: attributes dispinterface  */
-#line 911 "tools/widl/parser.y"
+  case 327: /* dispinterfacehdr: attributes dispinterface  */
+#line 957 "tools/widl/parser.y"
                                                 { attr_t *attrs;
 						  (yyval.type) = (yyvsp[0].type);
 						  check_def((yyval.type));
@@ -5041,710 +5216,716 @@
 						  (yyval.type)->attrs = append_attr( check_dispiface_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list)), attrs );
 						  (yyval.type)->defined = TRUE;
 						}
-#line 5045 "tools/widl/parser.tab.c"
+#line 5220 "tools/widl/parser.tab.c"
     break;
 
-  case 315: /* dispint_props: tPROPERTIES ':'  */
-#line 920 "tools/widl/parser.y"
+  case 328: /* dispint_props: tPROPERTIES ':'  */
+#line 966 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 5051 "tools/widl/parser.tab.c"
+#line 5226 "tools/widl/parser.tab.c"
     break;
 
-  case 316: /* dispint_props: dispint_props s_field ';'  */
-#line 921 "tools/widl/parser.y"
+  case 329: /* dispint_props: dispint_props s_field ';'  */
+#line 967 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
-#line 5057 "tools/widl/parser.tab.c"
+#line 5232 "tools/widl/parser.tab.c"
     break;
 
-  case 317: /* dispint_meths: tMETHODS ':'  */
-#line 924 "tools/widl/parser.y"
+  case 330: /* dispint_meths: tMETHODS ':'  */
+#line 970 "tools/widl/parser.y"
                                                 { (yyval.var_list) = NULL; }
-#line 5063 "tools/widl/parser.tab.c"
+#line 5238 "tools/widl/parser.tab.c"
     break;
 
-  case 318: /* dispint_meths: dispint_meths funcdef ';'  */
-#line 925 "tools/widl/parser.y"
+  case 331: /* dispint_meths: dispint_meths funcdef ';'  */
+#line 971 "tools/widl/parser.y"
                                                 { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
-#line 5069 "tools/widl/parser.tab.c"
+#line 5244 "tools/widl/parser.tab.c"
     break;
 
-  case 319: /* dispinterfacedef: dispinterfacehdr '{' dispint_props dispint_meths '}'  */
-#line 931 "tools/widl/parser.y"
+  case 332: /* dispinterfacedef: dispinterfacehdr '{' dispint_props dispint_meths '}'  */
+#line 977 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[-4].type);
 						  type_dispinterface_define((yyval.type), (yyvsp[-2].var_list), (yyvsp[-1].var_list));
 						}
-#line 5077 "tools/widl/parser.tab.c"
+#line 5252 "tools/widl/parser.tab.c"
     break;
 
-  case 320: /* dispinterfacedef: dispinterfacehdr '{' interface ';' '}'  */
-#line 935 "tools/widl/parser.y"
+  case 333: /* dispinterfacedef: dispinterfacehdr '{' interface ';' '}'  */
+#line 981 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[-4].type);
 						  type_dispinterface_define_from_iface((yyval.type), (yyvsp[-2].type));
 						}
-#line 5085 "tools/widl/parser.tab.c"
+#line 5260 "tools/widl/parser.tab.c"
     break;
 
-  case 321: /* inherit: %empty  */
-#line 940 "tools/widl/parser.y"
+  case 334: /* inherit: %empty  */
+#line 986 "tools/widl/parser.y"
                                                 { (yyval.type) = NULL; }
-#line 5091 "tools/widl/parser.tab.c"
+#line 5266 "tools/widl/parser.tab.c"
     break;
 
-  case 322: /* inherit: ':' qualified_type  */
-#line 941 "tools/widl/parser.y"
+  case 335: /* inherit: ':' qualified_type  */
+#line 987 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5097 "tools/widl/parser.tab.c"
+#line 5272 "tools/widl/parser.tab.c"
     break;
 
-  case 323: /* interface: tINTERFACE aIDENTIFIER  */
-#line 944 "tools/widl/parser.y"
+  case 336: /* interface: tINTERFACE aIDENTIFIER  */
+#line 990 "tools/widl/parser.y"
                                                 { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 5103 "tools/widl/parser.tab.c"
+#line 5278 "tools/widl/parser.tab.c"
     break;
 
-  case 324: /* interface: tINTERFACE aKNOWNTYPE  */
-#line 945 "tools/widl/parser.y"
+  case 337: /* interface: tINTERFACE aKNOWNTYPE  */
+#line 991 "tools/widl/parser.y"
                                                 { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
-#line 5109 "tools/widl/parser.tab.c"
+#line 5284 "tools/widl/parser.tab.c"
     break;
 
-  case 325: /* interfacehdr: attributes interface  */
-#line 948 "tools/widl/parser.y"
+  case 338: /* interfacehdr: attributes interface  */
+#line 994 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type);
 						  check_def((yyvsp[0].type));
 						  (yyvsp[0].type)->attrs = check_iface_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
 						  (yyvsp[0].type)->defined = TRUE;
 						}
-#line 5119 "tools/widl/parser.tab.c"
+#line 5294 "tools/widl/parser.tab.c"
     break;
 
-  case 326: /* interfacedef: interfacehdr inherit '{' int_statements '}' semicolon_opt  */
-#line 956 "tools/widl/parser.y"
+  case 339: /* interfacedef: interfacehdr inherit '{' int_statements '}' semicolon_opt  */
+#line 1002 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[-5].type);
 						  if((yyval.type) == (yyvsp[-4].type))
 						    error_loc("Interface can't inherit from itself\n");
 						  type_interface_define((yyval.type), (yyvsp[-4].type), (yyvsp[-2].stmt_list));
 						  check_async_uuid((yyval.type));
 						}
-#line 5130 "tools/widl/parser.tab.c"
+#line 5305 "tools/widl/parser.tab.c"
     break;
 
-  case 327: /* interfacedef: interfacehdr ':' aIDENTIFIER '{' import int_statements '}' semicolon_opt  */
-#line 966 "tools/widl/parser.y"
+  case 340: /* interfacedef: interfacehdr ':' aIDENTIFIER '{' import int_statements '}' semicolon_opt  */
+#line 1012 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[-7].type);
 						  type_interface_define((yyval.type), find_type_or_error2((yyvsp[-5].str), 0), (yyvsp[-2].stmt_list));
 						}
-#line 5138 "tools/widl/parser.tab.c"
+#line 5313 "tools/widl/parser.tab.c"
     break;
 
-  case 328: /* interfacedef: dispinterfacedef semicolon_opt  */
-#line 969 "tools/widl/parser.y"
+  case 341: /* interfacedef: dispinterfacedef semicolon_opt  */
+#line 1015 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[-1].type); }
-#line 5144 "tools/widl/parser.tab.c"
+#line 5319 "tools/widl/parser.tab.c"
     break;
 
-  case 329: /* interfacedec: interface ';'  */
-#line 973 "tools/widl/parser.y"
+  case 342: /* interfacedec: interface ';'  */
+#line 1019 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[-1].type); }
-#line 5150 "tools/widl/parser.tab.c"
+#line 5325 "tools/widl/parser.tab.c"
     break;
 
-  case 330: /* interfacedec: dispinterface ';'  */
-#line 974 "tools/widl/parser.y"
+  case 343: /* interfacedec: dispinterface ';'  */
+#line 1020 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[-1].type); }
-#line 5156 "tools/widl/parser.tab.c"
+#line 5331 "tools/widl/parser.tab.c"
     break;
 
-  case 331: /* module: tMODULE aIDENTIFIER  */
-#line 977 "tools/widl/parser.y"
+  case 344: /* module: tMODULE aIDENTIFIER  */
+#line 1023 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_module((yyvsp[0].str)); }
-#line 5162 "tools/widl/parser.tab.c"
+#line 5337 "tools/widl/parser.tab.c"
     break;
 
-  case 332: /* module: tMODULE aKNOWNTYPE  */
-#line 978 "tools/widl/parser.y"
+  case 345: /* module: tMODULE aKNOWNTYPE  */
+#line 1024 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_module((yyvsp[0].str)); }
-#line 5168 "tools/widl/parser.tab.c"
+#line 5343 "tools/widl/parser.tab.c"
     break;
 
-  case 333: /* modulehdr: attributes module  */
-#line 981 "tools/widl/parser.y"
+  case 346: /* modulehdr: attributes module  */
+#line 1027 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type);
 						  (yyval.type)->attrs = check_module_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
 						}
-#line 5176 "tools/widl/parser.tab.c"
+#line 5351 "tools/widl/parser.tab.c"
     break;
 
-  case 334: /* moduledef: modulehdr '{' int_statements '}' semicolon_opt  */
-#line 987 "tools/widl/parser.y"
+  case 347: /* moduledef: modulehdr '{' int_statements '}' semicolon_opt  */
+#line 1033 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[-4].type);
                                                   type_module_define((yyval.type), (yyvsp[-2].stmt_list));
 						}
-#line 5184 "tools/widl/parser.tab.c"
+#line 5359 "tools/widl/parser.tab.c"
     break;
 
-  case 335: /* storage_cls_spec: tEXTERN  */
-#line 993 "tools/widl/parser.y"
+  case 348: /* storage_cls_spec: tEXTERN  */
+#line 1039 "tools/widl/parser.y"
                                                 { (yyval.stgclass) = STG_EXTERN; }
-#line 5190 "tools/widl/parser.tab.c"
+#line 5365 "tools/widl/parser.tab.c"
     break;
 
-  case 336: /* storage_cls_spec: tSTATIC  */
-#line 994 "tools/widl/parser.y"
+  case 349: /* storage_cls_spec: tSTATIC  */
+#line 1040 "tools/widl/parser.y"
                                                 { (yyval.stgclass) = STG_STATIC; }
-#line 5196 "tools/widl/parser.tab.c"
+#line 5371 "tools/widl/parser.tab.c"
     break;
 
-  case 337: /* storage_cls_spec: tREGISTER  */
-#line 995 "tools/widl/parser.y"
+  case 350: /* storage_cls_spec: tREGISTER  */
+#line 1041 "tools/widl/parser.y"
                                                 { (yyval.stgclass) = STG_REGISTER; }
-#line 5202 "tools/widl/parser.tab.c"
+#line 5377 "tools/widl/parser.tab.c"
     break;
 
-  case 338: /* function_specifier: tINLINE  */
-#line 999 "tools/widl/parser.y"
+  case 351: /* function_specifier: tINLINE  */
+#line 1045 "tools/widl/parser.y"
                                                 { (yyval.function_specifier) = FUNCTION_SPECIFIER_INLINE; }
-#line 5208 "tools/widl/parser.tab.c"
+#line 5383 "tools/widl/parser.tab.c"
     break;
 
-  case 339: /* type_qualifier: tCONST  */
-#line 1003 "tools/widl/parser.y"
+  case 352: /* type_qualifier: tCONST  */
+#line 1049 "tools/widl/parser.y"
                                                 { (yyval.type_qualifier) = TYPE_QUALIFIER_CONST; }
-#line 5214 "tools/widl/parser.tab.c"
+#line 5389 "tools/widl/parser.tab.c"
     break;
 
-  case 340: /* m_type_qual_list: %empty  */
-#line 1006 "tools/widl/parser.y"
+  case 353: /* m_type_qual_list: %empty  */
+#line 1052 "tools/widl/parser.y"
                                                 { (yyval.type_qualifier) = 0; }
-#line 5220 "tools/widl/parser.tab.c"
+#line 5395 "tools/widl/parser.tab.c"
     break;
 
-  case 341: /* m_type_qual_list: m_type_qual_list type_qualifier  */
-#line 1007 "tools/widl/parser.y"
+  case 354: /* m_type_qual_list: m_type_qual_list type_qualifier  */
+#line 1053 "tools/widl/parser.y"
                                                 { (yyval.type_qualifier) = (yyvsp[-1].type_qualifier) | (yyvsp[0].type_qualifier); }
-#line 5226 "tools/widl/parser.tab.c"
+#line 5401 "tools/widl/parser.tab.c"
     break;
 
-  case 342: /* decl_spec: type m_decl_spec_no_type  */
-#line 1010 "tools/widl/parser.y"
+  case 355: /* decl_spec: type m_decl_spec_no_type  */
+#line 1056 "tools/widl/parser.y"
                                                 { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, STG_NONE, 0, 0); }
-#line 5232 "tools/widl/parser.tab.c"
+#line 5407 "tools/widl/parser.tab.c"
     break;
 
-  case 343: /* decl_spec: decl_spec_no_type type m_decl_spec_no_type  */
-#line 1012 "tools/widl/parser.y"
+  case 356: /* decl_spec: decl_spec_no_type type m_decl_spec_no_type  */
+#line 1058 "tools/widl/parser.y"
                                                 { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), STG_NONE, 0, 0); }
-#line 5238 "tools/widl/parser.tab.c"
+#line 5413 "tools/widl/parser.tab.c"
     break;
 
-  case 344: /* m_decl_spec_no_type: %empty  */
-#line 1015 "tools/widl/parser.y"
-                                                { (yyval.declspec) = NULL; }
-#line 5244 "tools/widl/parser.tab.c"
-    break;
-
-  case 346: /* decl_spec_no_type: type_qualifier m_decl_spec_no_type  */
-#line 1020 "tools/widl/parser.y"
-                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, (yyvsp[-1].type_qualifier), 0); }
-#line 5250 "tools/widl/parser.tab.c"
-    break;
-
-  case 347: /* decl_spec_no_type: function_specifier m_decl_spec_no_type  */
-#line 1021 "tools/widl/parser.y"
-                                                  { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, 0, (yyvsp[-1].function_specifier)); }
-#line 5256 "tools/widl/parser.tab.c"
-    break;
-
-  case 348: /* decl_spec_no_type: storage_cls_spec m_decl_spec_no_type  */
-#line 1022 "tools/widl/parser.y"
-                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, (yyvsp[-1].stgclass), 0, 0); }
-#line 5262 "tools/widl/parser.tab.c"
-    break;
-
-  case 349: /* declarator: '*' m_type_qual_list declarator  */
-#line 1027 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5268 "tools/widl/parser.tab.c"
-    break;
-
-  case 350: /* declarator: callconv declarator  */
-#line 1028 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5274 "tools/widl/parser.tab.c"
-    break;
-
-  case 352: /* direct_declarator: ident  */
-#line 1033 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
-#line 5280 "tools/widl/parser.tab.c"
-    break;
-
-  case 353: /* direct_declarator: '(' declarator ')'  */
-#line 1034 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 5286 "tools/widl/parser.tab.c"
-    break;
-
-  case 354: /* direct_declarator: direct_declarator array  */
-#line 1035 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5292 "tools/widl/parser.tab.c"
-    break;
-
-  case 355: /* direct_declarator: direct_declarator '(' m_args ')'  */
-#line 1036 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-3].declarator); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); }
-#line 5298 "tools/widl/parser.tab.c"
-    break;
-
-  case 356: /* abstract_declarator: '*' m_type_qual_list m_abstract_declarator  */
-#line 1042 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5304 "tools/widl/parser.tab.c"
-    break;
-
-  case 357: /* abstract_declarator: callconv m_abstract_declarator  */
-#line 1043 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5310 "tools/widl/parser.tab.c"
-    break;
-
-  case 359: /* abstract_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
-#line 1050 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5316 "tools/widl/parser.tab.c"
-    break;
-
-  case 360: /* abstract_declarator_no_direct: callconv m_any_declarator  */
-#line 1051 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5322 "tools/widl/parser.tab.c"
-    break;
-
-  case 361: /* m_abstract_declarator: %empty  */
-#line 1055 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL); }
-#line 5328 "tools/widl/parser.tab.c"
-    break;
-
-  case 363: /* abstract_direct_declarator: '(' abstract_declarator_no_direct ')'  */
+  case 357: /* m_decl_spec_no_type: %empty  */
 #line 1061 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 5334 "tools/widl/parser.tab.c"
+                                                { (yyval.declspec) = NULL; }
+#line 5419 "tools/widl/parser.tab.c"
     break;
 
-  case 364: /* abstract_direct_declarator: abstract_direct_declarator array  */
-#line 1062 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5340 "tools/widl/parser.tab.c"
+  case 359: /* decl_spec_no_type: type_qualifier m_decl_spec_no_type  */
+#line 1066 "tools/widl/parser.y"
+                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, (yyvsp[-1].type_qualifier), 0); }
+#line 5425 "tools/widl/parser.tab.c"
     break;
 
-  case 365: /* abstract_direct_declarator: array  */
-#line 1063 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5346 "tools/widl/parser.tab.c"
+  case 360: /* decl_spec_no_type: function_specifier m_decl_spec_no_type  */
+#line 1067 "tools/widl/parser.y"
+                                                  { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, 0, (yyvsp[-1].function_specifier)); }
+#line 5431 "tools/widl/parser.tab.c"
     break;
 
-  case 366: /* abstract_direct_declarator: '(' m_args ')'  */
-#line 1065 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL);
-						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
-						}
-#line 5354 "tools/widl/parser.tab.c"
+  case 361: /* decl_spec_no_type: storage_cls_spec m_decl_spec_no_type  */
+#line 1068 "tools/widl/parser.y"
+                                                { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, (yyvsp[-1].stgclass), 0, 0); }
+#line 5437 "tools/widl/parser.tab.c"
     break;
 
-  case 367: /* abstract_direct_declarator: abstract_direct_declarator '(' m_args ')'  */
-#line 1069 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[-3].declarator);
-						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
-						}
-#line 5362 "tools/widl/parser.tab.c"
-    break;
-
-  case 368: /* any_declarator: '*' m_type_qual_list m_any_declarator  */
-#line 1077 "tools/widl/parser.y"
+  case 362: /* declarator: '*' m_type_qual_list declarator  */
+#line 1073 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5368 "tools/widl/parser.tab.c"
+#line 5443 "tools/widl/parser.tab.c"
     break;
 
-  case 369: /* any_declarator: callconv m_any_declarator  */
-#line 1078 "tools/widl/parser.y"
+  case 363: /* declarator: callconv declarator  */
+#line 1074 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5374 "tools/widl/parser.tab.c"
+#line 5449 "tools/widl/parser.tab.c"
     break;
 
-  case 371: /* any_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
-#line 1085 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
-#line 5380 "tools/widl/parser.tab.c"
-    break;
-
-  case 372: /* any_declarator_no_direct: callconv m_any_declarator  */
-#line 1086 "tools/widl/parser.y"
-                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
-#line 5386 "tools/widl/parser.tab.c"
-    break;
-
-  case 373: /* m_any_declarator: %empty  */
-#line 1090 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL); }
-#line 5392 "tools/widl/parser.tab.c"
-    break;
-
-  case 375: /* any_direct_declarator: ident  */
-#line 1098 "tools/widl/parser.y"
+  case 365: /* direct_declarator: ident  */
+#line 1079 "tools/widl/parser.y"
                                                 { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
-#line 5398 "tools/widl/parser.tab.c"
+#line 5455 "tools/widl/parser.tab.c"
     break;
 
-  case 376: /* any_direct_declarator: '(' any_declarator_no_direct ')'  */
-#line 1099 "tools/widl/parser.y"
+  case 366: /* direct_declarator: '(' declarator ')'  */
+#line 1080 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); }
-#line 5404 "tools/widl/parser.tab.c"
+#line 5461 "tools/widl/parser.tab.c"
     break;
 
-  case 377: /* any_direct_declarator: any_direct_declarator array  */
-#line 1100 "tools/widl/parser.y"
+  case 367: /* direct_declarator: direct_declarator array  */
+#line 1081 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5410 "tools/widl/parser.tab.c"
+#line 5467 "tools/widl/parser.tab.c"
     break;
 
-  case 378: /* any_direct_declarator: array  */
+  case 368: /* direct_declarator: direct_declarator '(' m_args ')'  */
+#line 1082 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-3].declarator); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); }
+#line 5473 "tools/widl/parser.tab.c"
+    break;
+
+  case 369: /* abstract_declarator: '*' m_type_qual_list m_abstract_declarator  */
+#line 1088 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5479 "tools/widl/parser.tab.c"
+    break;
+
+  case 370: /* abstract_declarator: callconv m_abstract_declarator  */
+#line 1089 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5485 "tools/widl/parser.tab.c"
+    break;
+
+  case 372: /* abstract_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
+#line 1096 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5491 "tools/widl/parser.tab.c"
+    break;
+
+  case 373: /* abstract_declarator_no_direct: callconv m_any_declarator  */
+#line 1097 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5497 "tools/widl/parser.tab.c"
+    break;
+
+  case 374: /* m_abstract_declarator: %empty  */
 #line 1101 "tools/widl/parser.y"
-                                                { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
-#line 5416 "tools/widl/parser.tab.c"
+                                                { (yyval.declarator) = make_declarator(NULL); }
+#line 5503 "tools/widl/parser.tab.c"
     break;
 
-  case 379: /* any_direct_declarator: '(' m_args ')'  */
-#line 1103 "tools/widl/parser.y"
+  case 376: /* abstract_direct_declarator: '(' abstract_declarator_no_direct ')'  */
+#line 1107 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
+#line 5509 "tools/widl/parser.tab.c"
+    break;
+
+  case 377: /* abstract_direct_declarator: abstract_direct_declarator array  */
+#line 1108 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 5515 "tools/widl/parser.tab.c"
+    break;
+
+  case 378: /* abstract_direct_declarator: array  */
+#line 1109 "tools/widl/parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 5521 "tools/widl/parser.tab.c"
+    break;
+
+  case 379: /* abstract_direct_declarator: '(' m_args ')'  */
+#line 1111 "tools/widl/parser.y"
                                                 { (yyval.declarator) = make_declarator(NULL);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
-#line 5424 "tools/widl/parser.tab.c"
+#line 5529 "tools/widl/parser.tab.c"
     break;
 
-  case 380: /* any_direct_declarator: any_direct_declarator '(' m_args ')'  */
-#line 1107 "tools/widl/parser.y"
+  case 380: /* abstract_direct_declarator: abstract_direct_declarator '(' m_args ')'  */
+#line 1115 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-3].declarator);
 						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
 						}
-#line 5432 "tools/widl/parser.tab.c"
+#line 5537 "tools/widl/parser.tab.c"
     break;
 
-  case 381: /* declarator_list: declarator  */
-#line 1113 "tools/widl/parser.y"
+  case 381: /* any_declarator: '*' m_type_qual_list m_any_declarator  */
+#line 1123 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5543 "tools/widl/parser.tab.c"
+    break;
+
+  case 382: /* any_declarator: callconv m_any_declarator  */
+#line 1124 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5549 "tools/widl/parser.tab.c"
+    break;
+
+  case 384: /* any_declarator_no_direct: '*' m_type_qual_list m_any_declarator  */
+#line 1131 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); }
+#line 5555 "tools/widl/parser.tab.c"
+    break;
+
+  case 385: /* any_declarator_no_direct: callconv m_any_declarator  */
+#line 1132 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv((yyval.declarator)->type, (yyvsp[-1].str)); }
+#line 5561 "tools/widl/parser.tab.c"
+    break;
+
+  case 386: /* m_any_declarator: %empty  */
+#line 1136 "tools/widl/parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); }
+#line 5567 "tools/widl/parser.tab.c"
+    break;
+
+  case 388: /* any_direct_declarator: ident  */
+#line 1144 "tools/widl/parser.y"
+                                                { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
+#line 5573 "tools/widl/parser.tab.c"
+    break;
+
+  case 389: /* any_direct_declarator: '(' any_declarator_no_direct ')'  */
+#line 1145 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); }
+#line 5579 "tools/widl/parser.tab.c"
+    break;
+
+  case 390: /* any_direct_declarator: any_direct_declarator array  */
+#line 1146 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 5585 "tools/widl/parser.tab.c"
+    break;
+
+  case 391: /* any_direct_declarator: array  */
+#line 1147 "tools/widl/parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); }
+#line 5591 "tools/widl/parser.tab.c"
+    break;
+
+  case 392: /* any_direct_declarator: '(' m_args ')'  */
+#line 1149 "tools/widl/parser.y"
+                                                { (yyval.declarator) = make_declarator(NULL);
+						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
+						}
+#line 5599 "tools/widl/parser.tab.c"
+    break;
+
+  case 393: /* any_direct_declarator: any_direct_declarator '(' m_args ')'  */
+#line 1153 "tools/widl/parser.y"
+                                                { (yyval.declarator) = (yyvsp[-3].declarator);
+						  append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0);
+						}
+#line 5607 "tools/widl/parser.tab.c"
+    break;
+
+  case 394: /* declarator_list: declarator  */
+#line 1159 "tools/widl/parser.y"
                                                 { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
-#line 5438 "tools/widl/parser.tab.c"
+#line 5613 "tools/widl/parser.tab.c"
     break;
 
-  case 382: /* declarator_list: declarator_list ',' declarator  */
-#line 1114 "tools/widl/parser.y"
+  case 395: /* declarator_list: declarator_list ',' declarator  */
+#line 1160 "tools/widl/parser.y"
                                                 { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
-#line 5444 "tools/widl/parser.tab.c"
+#line 5619 "tools/widl/parser.tab.c"
     break;
 
-  case 383: /* m_bitfield: %empty  */
-#line 1117 "tools/widl/parser.y"
+  case 396: /* m_bitfield: %empty  */
+#line 1163 "tools/widl/parser.y"
                                                 { (yyval.expr) = NULL; }
-#line 5450 "tools/widl/parser.tab.c"
+#line 5625 "tools/widl/parser.tab.c"
     break;
 
-  case 384: /* m_bitfield: ':' expr_const  */
-#line 1118 "tools/widl/parser.y"
+  case 397: /* m_bitfield: ':' expr_const  */
+#line 1164 "tools/widl/parser.y"
                                                 { (yyval.expr) = (yyvsp[0].expr); }
-#line 5456 "tools/widl/parser.tab.c"
+#line 5631 "tools/widl/parser.tab.c"
     break;
 
-  case 385: /* struct_declarator: any_declarator m_bitfield  */
-#line 1121 "tools/widl/parser.y"
+  case 398: /* struct_declarator: any_declarator m_bitfield  */
+#line 1167 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-1].declarator); (yyval.declarator)->bits = (yyvsp[0].expr);
 						  if (!(yyval.declarator)->bits && !(yyval.declarator)->var->name)
 						    error_loc("unnamed fields are not allowed\n");
 						}
-#line 5465 "tools/widl/parser.tab.c"
+#line 5640 "tools/widl/parser.tab.c"
     break;
 
-  case 386: /* struct_declarator_list: struct_declarator  */
-#line 1128 "tools/widl/parser.y"
+  case 399: /* struct_declarator_list: struct_declarator  */
+#line 1174 "tools/widl/parser.y"
                                                 { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
-#line 5471 "tools/widl/parser.tab.c"
+#line 5646 "tools/widl/parser.tab.c"
     break;
 
-  case 387: /* struct_declarator_list: struct_declarator_list ',' struct_declarator  */
-#line 1130 "tools/widl/parser.y"
+  case 400: /* struct_declarator_list: struct_declarator_list ',' struct_declarator  */
+#line 1176 "tools/widl/parser.y"
                                                 { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
-#line 5477 "tools/widl/parser.tab.c"
+#line 5652 "tools/widl/parser.tab.c"
     break;
 
-  case 388: /* init_declarator: declarator  */
-#line 1134 "tools/widl/parser.y"
+  case 401: /* init_declarator: declarator  */
+#line 1180 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[0].declarator); }
-#line 5483 "tools/widl/parser.tab.c"
+#line 5658 "tools/widl/parser.tab.c"
     break;
 
-  case 389: /* init_declarator: declarator '=' expr_const  */
-#line 1135 "tools/widl/parser.y"
+  case 402: /* init_declarator: declarator '=' expr_const  */
+#line 1181 "tools/widl/parser.y"
                                                 { (yyval.declarator) = (yyvsp[-2].declarator); (yyvsp[-2].declarator)->var->eval = (yyvsp[0].expr); }
-#line 5489 "tools/widl/parser.tab.c"
+#line 5664 "tools/widl/parser.tab.c"
     break;
 
-  case 390: /* threading_type: tAPARTMENT  */
-#line 1139 "tools/widl/parser.y"
+  case 403: /* threading_type: tAPARTMENT  */
+#line 1185 "tools/widl/parser.y"
                                                 { (yyval.num) = THREADING_APARTMENT; }
-#line 5495 "tools/widl/parser.tab.c"
+#line 5670 "tools/widl/parser.tab.c"
     break;
 
-  case 391: /* threading_type: tNEUTRAL  */
-#line 1140 "tools/widl/parser.y"
+  case 404: /* threading_type: tNEUTRAL  */
+#line 1186 "tools/widl/parser.y"
                                                 { (yyval.num) = THREADING_NEUTRAL; }
-#line 5501 "tools/widl/parser.tab.c"
+#line 5676 "tools/widl/parser.tab.c"
     break;
 
-  case 392: /* threading_type: tSINGLE  */
-#line 1141 "tools/widl/parser.y"
+  case 405: /* threading_type: tSINGLE  */
+#line 1187 "tools/widl/parser.y"
                                                 { (yyval.num) = THREADING_SINGLE; }
-#line 5507 "tools/widl/parser.tab.c"
+#line 5682 "tools/widl/parser.tab.c"
     break;
 
-  case 393: /* threading_type: tFREE  */
-#line 1142 "tools/widl/parser.y"
+  case 406: /* threading_type: tFREE  */
+#line 1188 "tools/widl/parser.y"
                                                 { (yyval.num) = THREADING_FREE; }
-#line 5513 "tools/widl/parser.tab.c"
+#line 5688 "tools/widl/parser.tab.c"
     break;
 
-  case 394: /* threading_type: tBOTH  */
-#line 1143 "tools/widl/parser.y"
+  case 407: /* threading_type: tBOTH  */
+#line 1189 "tools/widl/parser.y"
                                                 { (yyval.num) = THREADING_BOTH; }
-#line 5519 "tools/widl/parser.tab.c"
+#line 5694 "tools/widl/parser.tab.c"
     break;
 
-  case 395: /* pointer_type: tREF  */
-#line 1147 "tools/widl/parser.y"
+  case 408: /* threading_type: tMTA  */
+#line 1190 "tools/widl/parser.y"
+                                                { (yyval.num) = THREADING_FREE; }
+#line 5700 "tools/widl/parser.tab.c"
+    break;
+
+  case 409: /* pointer_type: tREF  */
+#line 1194 "tools/widl/parser.y"
                                                 { (yyval.num) = FC_RP; }
-#line 5525 "tools/widl/parser.tab.c"
+#line 5706 "tools/widl/parser.tab.c"
     break;
 
-  case 396: /* pointer_type: tUNIQUE  */
-#line 1148 "tools/widl/parser.y"
+  case 410: /* pointer_type: tUNIQUE  */
+#line 1195 "tools/widl/parser.y"
                                                 { (yyval.num) = FC_UP; }
-#line 5531 "tools/widl/parser.tab.c"
+#line 5712 "tools/widl/parser.tab.c"
     break;
 
-  case 397: /* pointer_type: tPTR  */
-#line 1149 "tools/widl/parser.y"
+  case 411: /* pointer_type: tPTR  */
+#line 1196 "tools/widl/parser.y"
                                                 { (yyval.num) = FC_FP; }
-#line 5537 "tools/widl/parser.tab.c"
+#line 5718 "tools/widl/parser.tab.c"
     break;
 
-  case 398: /* structdef: tSTRUCT t_ident '{' fields '}'  */
-#line 1152 "tools/widl/parser.y"
+  case 412: /* structdef: tSTRUCT t_ident '{' fields '}'  */
+#line 1199 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_struct((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
-#line 5543 "tools/widl/parser.tab.c"
+#line 5724 "tools/widl/parser.tab.c"
     break;
 
-  case 399: /* type: tVOID  */
-#line 1155 "tools/widl/parser.y"
+  case 413: /* type: tVOID  */
+#line 1202 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_void(); }
-#line 5549 "tools/widl/parser.tab.c"
+#line 5730 "tools/widl/parser.tab.c"
     break;
 
-  case 400: /* type: qualified_type  */
-#line 1156 "tools/widl/parser.y"
+  case 414: /* type: qualified_type  */
+#line 1203 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5555 "tools/widl/parser.tab.c"
+#line 5736 "tools/widl/parser.tab.c"
     break;
 
-  case 401: /* type: base_type  */
-#line 1157 "tools/widl/parser.y"
+  case 415: /* type: base_type  */
+#line 1204 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5561 "tools/widl/parser.tab.c"
+#line 5742 "tools/widl/parser.tab.c"
     break;
 
-  case 402: /* type: enumdef  */
-#line 1158 "tools/widl/parser.y"
+  case 416: /* type: enumdef  */
+#line 1205 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5567 "tools/widl/parser.tab.c"
+#line 5748 "tools/widl/parser.tab.c"
     break;
 
-  case 403: /* type: tENUM aIDENTIFIER  */
-#line 1159 "tools/widl/parser.y"
+  case 417: /* type: tENUM aIDENTIFIER  */
+#line 1206 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 5573 "tools/widl/parser.tab.c"
+#line 5754 "tools/widl/parser.tab.c"
     break;
 
-  case 404: /* type: structdef  */
-#line 1160 "tools/widl/parser.y"
+  case 418: /* type: structdef  */
+#line 1207 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5579 "tools/widl/parser.tab.c"
+#line 5760 "tools/widl/parser.tab.c"
     break;
 
-  case 405: /* type: tSTRUCT aIDENTIFIER  */
-#line 1161 "tools/widl/parser.y"
+  case 419: /* type: tSTRUCT aIDENTIFIER  */
+#line 1208 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
-#line 5585 "tools/widl/parser.tab.c"
+#line 5766 "tools/widl/parser.tab.c"
     break;
 
-  case 406: /* type: uniondef  */
-#line 1162 "tools/widl/parser.y"
+  case 420: /* type: uniondef  */
+#line 1209 "tools/widl/parser.y"
                                                 { (yyval.type) = (yyvsp[0].type); }
-#line 5591 "tools/widl/parser.tab.c"
+#line 5772 "tools/widl/parser.tab.c"
     break;
 
-  case 407: /* type: tUNION aIDENTIFIER  */
-#line 1163 "tools/widl/parser.y"
+  case 421: /* type: tUNION aIDENTIFIER  */
+#line 1210 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
-#line 5597 "tools/widl/parser.tab.c"
+#line 5778 "tools/widl/parser.tab.c"
     break;
 
-  case 408: /* type: tSAFEARRAY '(' type ')'  */
-#line 1164 "tools/widl/parser.y"
+  case 422: /* type: tSAFEARRAY '(' type ')'  */
+#line 1211 "tools/widl/parser.y"
                                                 { (yyval.type) = make_safearray((yyvsp[-1].type)); }
-#line 5603 "tools/widl/parser.tab.c"
+#line 5784 "tools/widl/parser.tab.c"
     break;
 
-  case 409: /* typedef: m_attributes tTYPEDEF m_attributes decl_spec declarator_list  */
-#line 1168 "tools/widl/parser.y"
+  case 423: /* typedef: m_attributes tTYPEDEF m_attributes decl_spec declarator_list  */
+#line 1215 "tools/widl/parser.y"
                                                 { (yyvsp[-4].attr_list) = append_attribs((yyvsp[-4].attr_list), (yyvsp[-2].attr_list));
 						  reg_typedefs((yyvsp[-1].declspec), (yyvsp[0].declarator_list), check_typedef_attrs((yyvsp[-4].attr_list)));
 						  (yyval.statement) = make_statement_typedef((yyvsp[0].declarator_list), !(yyvsp[-1].declspec)->type->defined);
 						}
-#line 5612 "tools/widl/parser.tab.c"
+#line 5793 "tools/widl/parser.tab.c"
     break;
 
-  case 410: /* uniondef: tUNION t_ident '{' ne_union_fields '}'  */
-#line 1175 "tools/widl/parser.y"
+  case 424: /* uniondef: tUNION t_ident '{' ne_union_fields '}'  */
+#line 1222 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_nonencapsulated_union((yyvsp[-3].str), TRUE, (yyvsp[-1].var_list)); }
-#line 5618 "tools/widl/parser.tab.c"
+#line 5799 "tools/widl/parser.tab.c"
     break;
 
-  case 411: /* uniondef: tUNION t_ident tSWITCH '(' s_field ')' m_ident '{' cases '}'  */
-#line 1178 "tools/widl/parser.y"
+  case 425: /* uniondef: tUNION t_ident tSWITCH '(' s_field ')' m_ident '{' cases '}'  */
+#line 1225 "tools/widl/parser.y"
                                                 { (yyval.type) = type_new_encapsulated_union((yyvsp[-8].str), (yyvsp[-5].var), (yyvsp[-3].var), (yyvsp[-1].var_list)); }
-#line 5624 "tools/widl/parser.tab.c"
+#line 5805 "tools/widl/parser.tab.c"
     break;
 
-  case 412: /* version: aNUM  */
-#line 1182 "tools/widl/parser.y"
+  case 426: /* version: aNUM  */
+#line 1229 "tools/widl/parser.y"
                                                 { (yyval.num) = MAKEVERSION((yyvsp[0].num), 0); }
-#line 5630 "tools/widl/parser.tab.c"
+#line 5811 "tools/widl/parser.tab.c"
     break;
 
-  case 413: /* version: aNUM '.' aNUM  */
-#line 1183 "tools/widl/parser.y"
+  case 427: /* version: aNUM '.' aNUM  */
+#line 1230 "tools/widl/parser.y"
                                                 { (yyval.num) = MAKEVERSION((yyvsp[-2].num), (yyvsp[0].num)); }
-#line 5636 "tools/widl/parser.tab.c"
+#line 5817 "tools/widl/parser.tab.c"
     break;
 
-  case 414: /* version: aHEXNUM  */
-#line 1184 "tools/widl/parser.y"
+  case 428: /* version: aHEXNUM  */
+#line 1231 "tools/widl/parser.y"
                                                 { (yyval.num) = (yyvsp[0].num); }
-#line 5642 "tools/widl/parser.tab.c"
+#line 5823 "tools/widl/parser.tab.c"
     break;
 
-  case 419: /* acf_int_statement: tTYPEDEF acf_attributes aKNOWNTYPE ';'  */
-#line 1199 "tools/widl/parser.y"
+  case 433: /* acf_int_statement: tTYPEDEF acf_attributes aKNOWNTYPE ';'  */
+#line 1246 "tools/widl/parser.y"
                                                 { type_t *type = find_type_or_error((yyvsp[-1].str), 0);
                                                   type->attrs = append_attr_list(type->attrs, (yyvsp[-2].attr_list));
                                                 }
-#line 5650 "tools/widl/parser.tab.c"
+#line 5831 "tools/widl/parser.tab.c"
     break;
 
-  case 420: /* acf_interface: acf_attributes tINTERFACE aKNOWNTYPE '{' acf_int_statements '}'  */
-#line 1206 "tools/widl/parser.y"
+  case 434: /* acf_interface: acf_attributes tINTERFACE aKNOWNTYPE '{' acf_int_statements '}'  */
+#line 1253 "tools/widl/parser.y"
                                                 {  type_t *iface = find_type_or_error2((yyvsp[-3].str), 0);
                                                    if (type_get_type(iface) != TYPE_INTERFACE)
                                                        error_loc("%s is not an interface\n", iface->name);
                                                    iface->attrs = append_attr_list(iface->attrs, (yyvsp[-5].attr_list));
                                                 }
-#line 5660 "tools/widl/parser.tab.c"
+#line 5841 "tools/widl/parser.tab.c"
     break;
 
-  case 421: /* acf_attributes: %empty  */
-#line 1214 "tools/widl/parser.y"
+  case 435: /* acf_attributes: %empty  */
+#line 1261 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = NULL; }
-#line 5666 "tools/widl/parser.tab.c"
+#line 5847 "tools/widl/parser.tab.c"
     break;
 
-  case 422: /* acf_attributes: '[' acf_attribute_list ']'  */
-#line 1215 "tools/widl/parser.y"
+  case 436: /* acf_attributes: '[' acf_attribute_list ']'  */
+#line 1262 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = (yyvsp[-1].attr_list); }
-#line 5672 "tools/widl/parser.tab.c"
+#line 5853 "tools/widl/parser.tab.c"
     break;
 
-  case 423: /* acf_attribute_list: acf_attribute  */
-#line 1219 "tools/widl/parser.y"
+  case 437: /* acf_attribute_list: acf_attribute  */
+#line 1266 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = append_attr(NULL, (yyvsp[0].attr)); }
-#line 5678 "tools/widl/parser.tab.c"
+#line 5859 "tools/widl/parser.tab.c"
     break;
 
-  case 424: /* acf_attribute_list: acf_attribute_list ',' acf_attribute  */
-#line 1220 "tools/widl/parser.y"
+  case 438: /* acf_attribute_list: acf_attribute_list ',' acf_attribute  */
+#line 1267 "tools/widl/parser.y"
                                                 { (yyval.attr_list) = append_attr((yyvsp[-2].attr_list), (yyvsp[0].attr)); }
-#line 5684 "tools/widl/parser.tab.c"
+#line 5865 "tools/widl/parser.tab.c"
     break;
 
-  case 425: /* acf_attribute: tALLOCATE '(' allocate_option_list ')'  */
-#line 1225 "tools/widl/parser.y"
+  case 439: /* acf_attribute: tALLOCATE '(' allocate_option_list ')'  */
+#line 1272 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attrv(ATTR_ALLOCATE, (yyvsp[-1].num)); }
-#line 5690 "tools/widl/parser.tab.c"
+#line 5871 "tools/widl/parser.tab.c"
     break;
 
-  case 426: /* acf_attribute: tENCODE  */
-#line 1226 "tools/widl/parser.y"
+  case 440: /* acf_attribute: tENCODE  */
+#line 1273 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_ENCODE); }
-#line 5696 "tools/widl/parser.tab.c"
+#line 5877 "tools/widl/parser.tab.c"
     break;
 
-  case 427: /* acf_attribute: tDECODE  */
-#line 1227 "tools/widl/parser.y"
+  case 441: /* acf_attribute: tDECODE  */
+#line 1274 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_DECODE); }
-#line 5702 "tools/widl/parser.tab.c"
+#line 5883 "tools/widl/parser.tab.c"
     break;
 
-  case 428: /* acf_attribute: tEXPLICITHANDLE  */
-#line 1228 "tools/widl/parser.y"
+  case 442: /* acf_attribute: tEXPLICITHANDLE  */
+#line 1275 "tools/widl/parser.y"
                                                 { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
-#line 5708 "tools/widl/parser.tab.c"
+#line 5889 "tools/widl/parser.tab.c"
     break;
 
-  case 429: /* allocate_option_list: allocate_option  */
-#line 1232 "tools/widl/parser.y"
+  case 443: /* allocate_option_list: allocate_option  */
+#line 1279 "tools/widl/parser.y"
                                                 { (yyval.num) = (yyvsp[0].num); }
-#line 5714 "tools/widl/parser.tab.c"
+#line 5895 "tools/widl/parser.tab.c"
     break;
 
-  case 430: /* allocate_option_list: allocate_option_list ',' allocate_option  */
-#line 1234 "tools/widl/parser.y"
+  case 444: /* allocate_option_list: allocate_option_list ',' allocate_option  */
+#line 1281 "tools/widl/parser.y"
                                                 { (yyval.num) = (yyvsp[-2].num) | (yyvsp[0].num); }
-#line 5720 "tools/widl/parser.tab.c"
+#line 5901 "tools/widl/parser.tab.c"
     break;
 
-  case 431: /* allocate_option: tDONTFREE  */
-#line 1238 "tools/widl/parser.y"
+  case 445: /* allocate_option: tDONTFREE  */
+#line 1285 "tools/widl/parser.y"
                                                 { (yyval.num) = FC_DONT_FREE; }
-#line 5726 "tools/widl/parser.tab.c"
+#line 5907 "tools/widl/parser.tab.c"
     break;
 
-  case 432: /* allocate_option: tFREE  */
-#line 1239 "tools/widl/parser.y"
+  case 446: /* allocate_option: tFREE  */
+#line 1286 "tools/widl/parser.y"
                                                 { (yyval.num) = 0; }
-#line 5732 "tools/widl/parser.tab.c"
+#line 5913 "tools/widl/parser.tab.c"
     break;
 
-  case 433: /* allocate_option: tALLNODES  */
-#line 1240 "tools/widl/parser.y"
+  case 447: /* allocate_option: tALLNODES  */
+#line 1287 "tools/widl/parser.y"
                                                 { (yyval.num) = FC_ALLOCATE_ALL_NODES; }
-#line 5738 "tools/widl/parser.tab.c"
+#line 5919 "tools/widl/parser.tab.c"
     break;
 
-  case 434: /* allocate_option: tSINGLENODE  */
-#line 1241 "tools/widl/parser.y"
+  case 448: /* allocate_option: tSINGLENODE  */
+#line 1288 "tools/widl/parser.y"
                                                 { (yyval.num) = 0; }
-#line 5744 "tools/widl/parser.tab.c"
+#line 5925 "tools/widl/parser.tab.c"
     break;
 
 
-#line 5748 "tools/widl/parser.tab.c"
+#line 5929 "tools/widl/parser.tab.c"
 
       default: break;
     }
@@ -5969,7 +6150,7 @@
   return yyresult;
 }
 
-#line 1244 "tools/widl/parser.y"
+#line 1291 "tools/widl/parser.y"
 
 
 static void decl_builtin_basic(const char *name, enum type_basic_type type)
@@ -6897,115 +7078,118 @@
     unsigned int on_module : 1;
     unsigned int on_coclass : 1;
     unsigned int on_apicontract : 1;
+    unsigned int on_runtimeclass : 1;
     const char *display_name;
 };
 
 struct allowed_attr allowed_attr[] =
 {
-    /* attr                        { D ACF M   I Fn ARG T En Enm St Un Fi L  DI M  C AC  <display name> } */
-    /* ATTR_AGGREGATABLE */        { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "aggregatable" },
-    /* ATTR_ALLOCATE */            { 0, 1, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "allocate" },
-    /* ATTR_ANNOTATION */          { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "annotation" },
-    /* ATTR_APPOBJECT */           { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "appobject" },
-    /* ATTR_ASYNC */               { 0, 1, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "async" },
-    /* ATTR_ASYNCUUID */           { 1, 0, 0,  1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, "async_uuid" },
-    /* ATTR_AUTO_HANDLE */         { 1, 1, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "auto_handle" },
-    /* ATTR_BINDABLE */            { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "bindable" },
-    /* ATTR_BROADCAST */           { 1, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "broadcast" },
-    /* ATTR_CALLAS */              { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "call_as" },
-    /* ATTR_CALLCONV */            { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
-    /* ATTR_CASE */                { 1, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "case" },
-    /* ATTR_CODE */                { 0, 1, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "code" },
-    /* ATTR_COMMSTATUS */          { 0, 0, 0,  0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "comm_status" },
-    /* ATTR_CONTEXTHANDLE */       { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "context_handle" },
-    /* ATTR_CONTRACT */            { 0, 0, 0,  1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, "contract" },
-    /* ATTR_CONTRACTVERSION */     { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "contractversion" },
-    /* ATTR_CONTROL */             { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, "control" },
-    /* ATTR_CUSTOM */              { 0, 0, 1,  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, "custom" },
-    /* ATTR_DECODE */              { 0, 0, 0,  1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "decode" },
-    /* ATTR_DEFAULT */             { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, "default" },
-    /* ATTR_DEFAULTBIND */         { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultbind" },
-    /* ATTR_DEFAULTCOLLELEM */     { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultcollelem" },
-    /* ATTR_DEFAULTVALUE */        { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultvalue" },
-    /* ATTR_DEFAULTVTABLE */       { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "defaultvtable" },
- /* ATTR_DISABLECONSISTENCYCHECK */{ 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "disable_consistency_check" },
-    /* ATTR_DISPINTERFACE */       { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
-    /* ATTR_DISPLAYBIND */         { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "displaybind" },
-    /* ATTR_DLLNAME */             { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "dllname" },
-    /* ATTR_DUAL */                { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "dual" },
-    /* ATTR_ENABLEALLOCATE */      { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "enable_allocate" },
-    /* ATTR_ENCODE */              { 0, 0, 0,  1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "encode" },
-    /* ATTR_ENDPOINT */            { 1, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "endpoint" },
-    /* ATTR_ENTRY */               { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "entry" },
-    /* ATTR_EXPLICIT_HANDLE */     { 1, 1, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "explicit_handle" },
-    /* ATTR_FAULTSTATUS */         { 0, 0, 0,  0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "fault_status" },
-    /* ATTR_FORCEALLOCATE */       { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "force_allocate" },
-    /* ATTR_HANDLE */              { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "handle" },
-    /* ATTR_HELPCONTEXT */         { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, "helpcontext" },
-    /* ATTR_HELPFILE */            { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "helpfile" },
-    /* ATTR_HELPSTRING */          { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, "helpstring" },
-    /* ATTR_HELPSTRINGCONTEXT */   { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, "helpstringcontext" },
-    /* ATTR_HELPSTRINGDLL */       { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "helpstringdll" },
-    /* ATTR_HIDDEN */              { 0, 0, 0,  1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, "hidden" },
-    /* ATTR_ID */                  { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, "id" },
-    /* ATTR_IDEMPOTENT */          { 1, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "idempotent" },
-    /* ATTR_IGNORE */              { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "ignore" },
-    /* ATTR_IIDIS */               { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "iid_is" },
-    /* ATTR_IMMEDIATEBIND */       { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "immediatebind" },
-    /* ATTR_IMPLICIT_HANDLE */     { 1, 1, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "implicit_handle" },
-    /* ATTR_IN */                  { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "in" },
-    /* ATTR_INPUTSYNC */           { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "inputsync" },
-    /* ATTR_LENGTHIS */            { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "length_is" },
-    /* ATTR_LIBLCID */             { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "lcid" },
-    /* ATTR_LICENSED */            { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "licensed" },
-    /* ATTR_LOCAL */               { 1, 0, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "local" },
-    /* ATTR_MAYBE */               { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "maybe" },
-    /* ATTR_MESSAGE */             { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "message" },
-    /* ATTR_NOCODE */              { 0, 1, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nocode" },
-    /* ATTR_NONBROWSABLE */        { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nonbrowsable" },
-    /* ATTR_NONCREATABLE */        { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "noncreatable" },
-    /* ATTR_NONEXTENSIBLE */       { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nonextensible" },
-    /* ATTR_NOTIFY */              { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "notify" },
-    /* ATTR_NOTIFYFLAG */          { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "notify_flag" },
-    /* ATTR_OBJECT */              { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "object" },
-    /* ATTR_ODL */                 { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "odl" },
-    /* ATTR_OLEAUTOMATION */       { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "oleautomation" },
-    /* ATTR_OPTIMIZE */            { 0, 0, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "optimize" },
-    /* ATTR_OPTIONAL */            { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "optional" },
-    /* ATTR_OUT */                 { 1, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "out" },
-    /* ATTR_PARAMLCID */           { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "lcid" },
-    /* ATTR_PARTIALIGNORE */       { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "partial_ignore" },
-    /* ATTR_POINTERDEFAULT */      { 1, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "pointer_default" },
-    /* ATTR_POINTERTYPE */         { 1, 0, 0,  0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "ref, unique or ptr" },
-    /* ATTR_PROGID */              { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "progid" },
-    /* ATTR_PROPGET */             { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propget" },
-    /* ATTR_PROPPUT */             { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propput" },
-    /* ATTR_PROPPUTREF */          { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propputref" },
-    /* ATTR_PROXY */               { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "proxy" },
-    /* ATTR_PUBLIC */              { 0, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "public" },
-    /* ATTR_RANGE */               { 0, 0, 0,  0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, "range" },
-    /* ATTR_READONLY */            { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "readonly" },
-    /* ATTR_REPRESENTAS */         { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "represent_as" },
-    /* ATTR_REQUESTEDIT */         { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "requestedit" },
-    /* ATTR_RESTRICTED */          { 0, 0, 0,  1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, "restricted" },
-    /* ATTR_RETVAL */              { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "retval" },
-    /* ATTR_SIZEIS */              { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "size_is" },
-    /* ATTR_SOURCE */              { 0, 0, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "source" },
-    /* ATTR_STRICTCONTEXTHANDLE */ { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "strict_context_handle" },
-    /* ATTR_STRING */              { 1, 0, 0,  0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "string" },
-    /* ATTR_SWITCHIS */            { 1, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "switch_is" },
-    /* ATTR_SWITCHTYPE */          { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "switch_type" },
-    /* ATTR_THREADING */           { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "threading" },
-    /* ATTR_TRANSMITAS */          { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "transmit_as" },
-    /* ATTR_UIDEFAULT */           { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "uidefault" },
-    /* ATTR_USESGETLASTERROR */    { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "usesgetlasterror" },
-    /* ATTR_USERMARSHAL */         { 0, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "user_marshal" },
-    /* ATTR_UUID */                { 1, 0, 0,  1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, "uuid" },
-    /* ATTR_V1ENUM */              { 0, 0, 0,  0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "v1_enum" },
-    /* ATTR_VARARG */              { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "vararg" },
-    /* ATTR_VERSION */             { 1, 0, 0,  1, 0, 0, 1, 1, 0, 2, 0, 0, 1, 0, 0, 1, 0, "version" },
-    /* ATTR_VIPROGID */            { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "vi_progid" },
-    /* ATTR_WIREMARSHAL */         { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "wire_marshal" },
+    /* attr                        { D ACF M   I Fn ARG T En Enm St Un Fi L  DI M  C AC  R  <display name> } */
+    /* ATTR_AGGREGATABLE */        { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "aggregatable" },
+    /* ATTR_ALLOCATE */            { 0, 1, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "allocate" },
+    /* ATTR_ANNOTATION */          { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "annotation" },
+    /* ATTR_APPOBJECT */           { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "appobject" },
+    /* ATTR_ASYNC */               { 0, 1, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "async" },
+    /* ATTR_ASYNCUUID */           { 1, 0, 0,  1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, "async_uuid" },
+    /* ATTR_AUTO_HANDLE */         { 1, 1, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "auto_handle" },
+    /* ATTR_BINDABLE */            { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "bindable" },
+    /* ATTR_BROADCAST */           { 1, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "broadcast" },
+    /* ATTR_CALLAS */              { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "call_as" },
+    /* ATTR_CALLCONV */            { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
+    /* ATTR_CASE */                { 1, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "case" },
+    /* ATTR_CODE */                { 0, 1, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "code" },
+    /* ATTR_COMMSTATUS */          { 0, 0, 0,  0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "comm_status" },
+    /* ATTR_CONTEXTHANDLE */       { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "context_handle" },
+    /* ATTR_CONTRACT */            { 0, 0, 0,  1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, "contract" },
+    /* ATTR_CONTRACTVERSION */     { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "contractversion" },
+    /* ATTR_CONTROL */             { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, "control" },
+    /* ATTR_CUSTOM */              { 0, 0, 1,  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, "custom" },
+    /* ATTR_DECODE */              { 0, 0, 0,  1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "decode" },
+    /* ATTR_DEFAULT */             { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, "default" },
+    /* ATTR_DEFAULTBIND */         { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultbind" },
+    /* ATTR_DEFAULTCOLLELEM */     { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultcollelem" },
+    /* ATTR_DEFAULTVALUE */        { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultvalue" },
+    /* ATTR_DEFAULTVTABLE */       { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "defaultvtable" },
+ /* ATTR_DISABLECONSISTENCYCHECK */{ 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "disable_consistency_check" },
+    /* ATTR_DISPINTERFACE */       { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
+    /* ATTR_DISPLAYBIND */         { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "displaybind" },
+    /* ATTR_DLLNAME */             { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "dllname" },
+    /* ATTR_DUAL */                { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "dual" },
+    /* ATTR_ENABLEALLOCATE */      { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "enable_allocate" },
+    /* ATTR_ENCODE */              { 0, 0, 0,  1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "encode" },
+    /* ATTR_ENDPOINT */            { 1, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "endpoint" },
+    /* ATTR_ENTRY */               { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "entry" },
+    /* ATTR_EXCLUSIVETO */         { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "exclusive_to" },
+    /* ATTR_EXPLICIT_HANDLE */     { 1, 1, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "explicit_handle" },
+    /* ATTR_FAULTSTATUS */         { 0, 0, 0,  0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "fault_status" },
+    /* ATTR_FORCEALLOCATE */       { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "force_allocate" },
+    /* ATTR_HANDLE */              { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "handle" },
+    /* ATTR_HELPCONTEXT */         { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, "helpcontext" },
+    /* ATTR_HELPFILE */            { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "helpfile" },
+    /* ATTR_HELPSTRING */          { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, "helpstring" },
+    /* ATTR_HELPSTRINGCONTEXT */   { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, "helpstringcontext" },
+    /* ATTR_HELPSTRINGDLL */       { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "helpstringdll" },
+    /* ATTR_HIDDEN */              { 0, 0, 0,  1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, "hidden" },
+    /* ATTR_ID */                  { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, "id" },
+    /* ATTR_IDEMPOTENT */          { 1, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "idempotent" },
+    /* ATTR_IGNORE */              { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "ignore" },
+    /* ATTR_IIDIS */               { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "iid_is" },
+    /* ATTR_IMMEDIATEBIND */       { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "immediatebind" },
+    /* ATTR_IMPLICIT_HANDLE */     { 1, 1, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "implicit_handle" },
+    /* ATTR_IN */                  { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "in" },
+    /* ATTR_INPUTSYNC */           { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "inputsync" },
+    /* ATTR_LENGTHIS */            { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "length_is" },
+    /* ATTR_LIBLCID */             { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "lcid" },
+    /* ATTR_LICENSED */            { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "licensed" },
+    /* ATTR_LOCAL */               { 1, 0, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "local" },
+    /* ATTR_MARSHALING_BEHAVIOR */ { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "marshaling_behavior" },
+    /* ATTR_MAYBE */               { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "maybe" },
+    /* ATTR_MESSAGE */             { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "message" },
+    /* ATTR_NOCODE */              { 0, 1, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nocode" },
+    /* ATTR_NONBROWSABLE */        { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nonbrowsable" },
+    /* ATTR_NONCREATABLE */        { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "noncreatable" },
+    /* ATTR_NONEXTENSIBLE */       { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nonextensible" },
+    /* ATTR_NOTIFY */              { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "notify" },
+    /* ATTR_NOTIFYFLAG */          { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "notify_flag" },
+    /* ATTR_OBJECT */              { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "object" },
+    /* ATTR_ODL */                 { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "odl" },
+    /* ATTR_OLEAUTOMATION */       { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "oleautomation" },
+    /* ATTR_OPTIMIZE */            { 0, 0, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "optimize" },
+    /* ATTR_OPTIONAL */            { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "optional" },
+    /* ATTR_OUT */                 { 1, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "out" },
+    /* ATTR_PARAMLCID */           { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "lcid" },
+    /* ATTR_PARTIALIGNORE */       { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "partial_ignore" },
+    /* ATTR_POINTERDEFAULT */      { 1, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "pointer_default" },
+    /* ATTR_POINTERTYPE */         { 1, 0, 0,  0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "ref, unique or ptr" },
+    /* ATTR_PROGID */              { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "progid" },
+    /* ATTR_PROPGET */             { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propget" },
+    /* ATTR_PROPPUT */             { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propput" },
+    /* ATTR_PROPPUTREF */          { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propputref" },
+    /* ATTR_PROXY */               { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "proxy" },
+    /* ATTR_PUBLIC */              { 0, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "public" },
+    /* ATTR_RANGE */               { 0, 0, 0,  0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "range" },
+    /* ATTR_READONLY */            { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "readonly" },
+    /* ATTR_REPRESENTAS */         { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "represent_as" },
+    /* ATTR_REQUESTEDIT */         { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "requestedit" },
+    /* ATTR_RESTRICTED */          { 0, 0, 0,  1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, "restricted" },
+    /* ATTR_RETVAL */              { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "retval" },
+    /* ATTR_SIZEIS */              { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "size_is" },
+    /* ATTR_SOURCE */              { 0, 0, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "source" },
+    /* ATTR_STRICTCONTEXTHANDLE */ { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "strict_context_handle" },
+    /* ATTR_STRING */              { 1, 0, 0,  0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "string" },
+    /* ATTR_SWITCHIS */            { 1, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "switch_is" },
+    /* ATTR_SWITCHTYPE */          { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "switch_type" },
+    /* ATTR_THREADING */           { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, "threading" },
+    /* ATTR_TRANSMITAS */          { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "transmit_as" },
+    /* ATTR_UIDEFAULT */           { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "uidefault" },
+    /* ATTR_USESGETLASTERROR */    { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "usesgetlasterror" },
+    /* ATTR_USERMARSHAL */         { 0, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "user_marshal" },
+    /* ATTR_UUID */                { 1, 0, 0,  1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, "uuid" },
+    /* ATTR_V1ENUM */              { 0, 0, 0,  0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "v1_enum" },
+    /* ATTR_VARARG */              { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "vararg" },
+    /* ATTR_VERSION */             { 1, 0, 0,  1, 0, 0, 1, 1, 0, 2, 0, 0, 1, 0, 0, 1, 0, 1, "version" },
+    /* ATTR_VIPROGID */            { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "vi_progid" },
+    /* ATTR_WIREMARSHAL */         { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "wire_marshal" },
 };
 
 static attr_list_t *append_attr(attr_list_t *list, attr_t *attr)
@@ -7220,6 +7404,17 @@
   return attrs;
 }
 
+static attr_list_t *check_runtimeclass_attrs(const char *name, attr_list_t *attrs)
+{
+    const attr_t *attr;
+    if (!attrs) return attrs;
+    LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+        if (!allowed_attr[attr->type].on_runtimeclass)
+            error_loc("inapplicable attribute %s for runtimeclass %s\n",
+                      allowed_attr[attr->type].display_name, name);
+    return attrs;
+}
+
 static attr_list_t *check_apicontract_attrs(const char *name, attr_list_t *attrs)
 {
     const attr_t *attr;
@@ -7269,6 +7464,7 @@
     case TYPE_FUNCTION:
     case TYPE_INTERFACE:
     case TYPE_BITFIELD:
+    case TYPE_RUNTIMECLASS:
         return FALSE;
     case TYPE_APICONTRACT:
         /* not supposed to be here */
diff --git a/mingw-w64-tools/widl/src/parser.tab.h b/mingw-w64-tools/widl/src/parser.tab.h
index bff5000..458209f 100644
--- a/mingw-w64-tools/widl/src/parser.tab.h
+++ b/mingw-w64-tools/widl/src/parser.tab.h
@@ -78,176 +78,183 @@
     LOGICALAND = 279,              /* LOGICALAND  */
     ELLIPSIS = 280,                /* ELLIPSIS  */
     tAGGREGATABLE = 281,           /* tAGGREGATABLE  */
-    tALLNODES = 282,               /* tALLNODES  */
-    tALLOCATE = 283,               /* tALLOCATE  */
-    tANNOTATION = 284,             /* tANNOTATION  */
-    tAPICONTRACT = 285,            /* tAPICONTRACT  */
-    tAPPOBJECT = 286,              /* tAPPOBJECT  */
-    tASYNC = 287,                  /* tASYNC  */
-    tASYNCUUID = 288,              /* tASYNCUUID  */
-    tAUTOHANDLE = 289,             /* tAUTOHANDLE  */
-    tBINDABLE = 290,               /* tBINDABLE  */
-    tBOOLEAN = 291,                /* tBOOLEAN  */
-    tBROADCAST = 292,              /* tBROADCAST  */
-    tBYTE = 293,                   /* tBYTE  */
-    tBYTECOUNT = 294,              /* tBYTECOUNT  */
-    tCALLAS = 295,                 /* tCALLAS  */
-    tCALLBACK = 296,               /* tCALLBACK  */
-    tCASE = 297,                   /* tCASE  */
-    tCDECL = 298,                  /* tCDECL  */
-    tCHAR = 299,                   /* tCHAR  */
-    tCOCLASS = 300,                /* tCOCLASS  */
-    tCODE = 301,                   /* tCODE  */
-    tCOMMSTATUS = 302,             /* tCOMMSTATUS  */
-    tCONST = 303,                  /* tCONST  */
-    tCONTEXTHANDLE = 304,          /* tCONTEXTHANDLE  */
-    tCONTEXTHANDLENOSERIALIZE = 305, /* tCONTEXTHANDLENOSERIALIZE  */
-    tCONTEXTHANDLESERIALIZE = 306, /* tCONTEXTHANDLESERIALIZE  */
-    tCONTRACT = 307,               /* tCONTRACT  */
-    tCONTRACTVERSION = 308,        /* tCONTRACTVERSION  */
-    tCONTROL = 309,                /* tCONTROL  */
-    tCPPQUOTE = 310,               /* tCPPQUOTE  */
-    tCUSTOM = 311,                 /* tCUSTOM  */
-    tDECODE = 312,                 /* tDECODE  */
-    tDEFAULT = 313,                /* tDEFAULT  */
-    tDEFAULTBIND = 314,            /* tDEFAULTBIND  */
-    tDEFAULTCOLLELEM = 315,        /* tDEFAULTCOLLELEM  */
-    tDEFAULTVALUE = 316,           /* tDEFAULTVALUE  */
-    tDEFAULTVTABLE = 317,          /* tDEFAULTVTABLE  */
-    tDISABLECONSISTENCYCHECK = 318, /* tDISABLECONSISTENCYCHECK  */
-    tDISPLAYBIND = 319,            /* tDISPLAYBIND  */
-    tDISPINTERFACE = 320,          /* tDISPINTERFACE  */
-    tDLLNAME = 321,                /* tDLLNAME  */
-    tDONTFREE = 322,               /* tDONTFREE  */
-    tDOUBLE = 323,                 /* tDOUBLE  */
-    tDUAL = 324,                   /* tDUAL  */
-    tENABLEALLOCATE = 325,         /* tENABLEALLOCATE  */
-    tENCODE = 326,                 /* tENCODE  */
-    tENDPOINT = 327,               /* tENDPOINT  */
-    tENTRY = 328,                  /* tENTRY  */
-    tENUM = 329,                   /* tENUM  */
-    tERRORSTATUST = 330,           /* tERRORSTATUST  */
-    tEXPLICITHANDLE = 331,         /* tEXPLICITHANDLE  */
-    tEXTERN = 332,                 /* tEXTERN  */
-    tFALSE = 333,                  /* tFALSE  */
-    tFASTCALL = 334,               /* tFASTCALL  */
-    tFAULTSTATUS = 335,            /* tFAULTSTATUS  */
-    tFLOAT = 336,                  /* tFLOAT  */
-    tFORCEALLOCATE = 337,          /* tFORCEALLOCATE  */
-    tHANDLE = 338,                 /* tHANDLE  */
-    tHANDLET = 339,                /* tHANDLET  */
-    tHELPCONTEXT = 340,            /* tHELPCONTEXT  */
-    tHELPFILE = 341,               /* tHELPFILE  */
-    tHELPSTRING = 342,             /* tHELPSTRING  */
-    tHELPSTRINGCONTEXT = 343,      /* tHELPSTRINGCONTEXT  */
-    tHELPSTRINGDLL = 344,          /* tHELPSTRINGDLL  */
-    tHIDDEN = 345,                 /* tHIDDEN  */
-    tHYPER = 346,                  /* tHYPER  */
-    tID = 347,                     /* tID  */
-    tIDEMPOTENT = 348,             /* tIDEMPOTENT  */
-    tIGNORE = 349,                 /* tIGNORE  */
-    tIIDIS = 350,                  /* tIIDIS  */
-    tIMMEDIATEBIND = 351,          /* tIMMEDIATEBIND  */
-    tIMPLICITHANDLE = 352,         /* tIMPLICITHANDLE  */
-    tIMPORT = 353,                 /* tIMPORT  */
-    tIMPORTLIB = 354,              /* tIMPORTLIB  */
-    tIN = 355,                     /* tIN  */
-    tIN_LINE = 356,                /* tIN_LINE  */
-    tINLINE = 357,                 /* tINLINE  */
-    tINPUTSYNC = 358,              /* tINPUTSYNC  */
-    tINT = 359,                    /* tINT  */
-    tINT32 = 360,                  /* tINT32  */
-    tINT3264 = 361,                /* tINT3264  */
-    tINT64 = 362,                  /* tINT64  */
-    tINTERFACE = 363,              /* tINTERFACE  */
-    tLCID = 364,                   /* tLCID  */
-    tLENGTHIS = 365,               /* tLENGTHIS  */
-    tLIBRARY = 366,                /* tLIBRARY  */
-    tLICENSED = 367,               /* tLICENSED  */
-    tLOCAL = 368,                  /* tLOCAL  */
-    tLONG = 369,                   /* tLONG  */
-    tMAYBE = 370,                  /* tMAYBE  */
-    tMESSAGE = 371,                /* tMESSAGE  */
-    tMETHODS = 372,                /* tMETHODS  */
-    tMODULE = 373,                 /* tMODULE  */
-    tNAMESPACE = 374,              /* tNAMESPACE  */
-    tNOCODE = 375,                 /* tNOCODE  */
-    tNONBROWSABLE = 376,           /* tNONBROWSABLE  */
-    tNONCREATABLE = 377,           /* tNONCREATABLE  */
-    tNONEXTENSIBLE = 378,          /* tNONEXTENSIBLE  */
-    tNOTIFY = 379,                 /* tNOTIFY  */
-    tNOTIFYFLAG = 380,             /* tNOTIFYFLAG  */
-    tNULL = 381,                   /* tNULL  */
-    tOBJECT = 382,                 /* tOBJECT  */
-    tODL = 383,                    /* tODL  */
-    tOLEAUTOMATION = 384,          /* tOLEAUTOMATION  */
-    tOPTIMIZE = 385,               /* tOPTIMIZE  */
-    tOPTIONAL = 386,               /* tOPTIONAL  */
-    tOUT = 387,                    /* tOUT  */
-    tPARTIALIGNORE = 388,          /* tPARTIALIGNORE  */
-    tPASCAL = 389,                 /* tPASCAL  */
-    tPOINTERDEFAULT = 390,         /* tPOINTERDEFAULT  */
-    tPRAGMA_WARNING = 391,         /* tPRAGMA_WARNING  */
-    tPROGID = 392,                 /* tPROGID  */
-    tPROPERTIES = 393,             /* tPROPERTIES  */
-    tPROPGET = 394,                /* tPROPGET  */
-    tPROPPUT = 395,                /* tPROPPUT  */
-    tPROPPUTREF = 396,             /* tPROPPUTREF  */
-    tPROXY = 397,                  /* tPROXY  */
-    tPTR = 398,                    /* tPTR  */
-    tPUBLIC = 399,                 /* tPUBLIC  */
-    tRANGE = 400,                  /* tRANGE  */
-    tREADONLY = 401,               /* tREADONLY  */
-    tREF = 402,                    /* tREF  */
-    tREGISTER = 403,               /* tREGISTER  */
-    tREPRESENTAS = 404,            /* tREPRESENTAS  */
-    tREQUESTEDIT = 405,            /* tREQUESTEDIT  */
-    tRESTRICTED = 406,             /* tRESTRICTED  */
-    tRETVAL = 407,                 /* tRETVAL  */
-    tSAFEARRAY = 408,              /* tSAFEARRAY  */
-    tSHORT = 409,                  /* tSHORT  */
-    tSIGNED = 410,                 /* tSIGNED  */
-    tSINGLENODE = 411,             /* tSINGLENODE  */
-    tSIZEIS = 412,                 /* tSIZEIS  */
-    tSIZEOF = 413,                 /* tSIZEOF  */
-    tSMALL = 414,                  /* tSMALL  */
-    tSOURCE = 415,                 /* tSOURCE  */
-    tSTATIC = 416,                 /* tSTATIC  */
-    tSTDCALL = 417,                /* tSTDCALL  */
-    tSTRICTCONTEXTHANDLE = 418,    /* tSTRICTCONTEXTHANDLE  */
-    tSTRING = 419,                 /* tSTRING  */
-    tSTRUCT = 420,                 /* tSTRUCT  */
-    tSWITCH = 421,                 /* tSWITCH  */
-    tSWITCHIS = 422,               /* tSWITCHIS  */
-    tSWITCHTYPE = 423,             /* tSWITCHTYPE  */
-    tTHREADING = 424,              /* tTHREADING  */
-    tTRANSMITAS = 425,             /* tTRANSMITAS  */
-    tTRUE = 426,                   /* tTRUE  */
-    tTYPEDEF = 427,                /* tTYPEDEF  */
-    tUIDEFAULT = 428,              /* tUIDEFAULT  */
-    tUNION = 429,                  /* tUNION  */
-    tUNIQUE = 430,                 /* tUNIQUE  */
-    tUNSIGNED = 431,               /* tUNSIGNED  */
-    tUSESGETLASTERROR = 432,       /* tUSESGETLASTERROR  */
-    tUSERMARSHAL = 433,            /* tUSERMARSHAL  */
-    tUUID = 434,                   /* tUUID  */
-    tV1ENUM = 435,                 /* tV1ENUM  */
-    tVARARG = 436,                 /* tVARARG  */
-    tVERSION = 437,                /* tVERSION  */
-    tVIPROGID = 438,               /* tVIPROGID  */
-    tVOID = 439,                   /* tVOID  */
-    tWCHAR = 440,                  /* tWCHAR  */
-    tWIREMARSHAL = 441,            /* tWIREMARSHAL  */
-    tAPARTMENT = 442,              /* tAPARTMENT  */
-    tNEUTRAL = 443,                /* tNEUTRAL  */
-    tSINGLE = 444,                 /* tSINGLE  */
-    tFREE = 445,                   /* tFREE  */
-    tBOTH = 446,                   /* tBOTH  */
-    CAST = 447,                    /* CAST  */
-    PPTR = 448,                    /* PPTR  */
-    POS = 449,                     /* POS  */
-    NEG = 450,                     /* NEG  */
-    ADDRESSOF = 451                /* ADDRESSOF  */
+    tAGILE = 282,                  /* tAGILE  */
+    tALLNODES = 283,               /* tALLNODES  */
+    tALLOCATE = 284,               /* tALLOCATE  */
+    tANNOTATION = 285,             /* tANNOTATION  */
+    tAPICONTRACT = 286,            /* tAPICONTRACT  */
+    tAPPOBJECT = 287,              /* tAPPOBJECT  */
+    tASYNC = 288,                  /* tASYNC  */
+    tASYNCUUID = 289,              /* tASYNCUUID  */
+    tAUTOHANDLE = 290,             /* tAUTOHANDLE  */
+    tBINDABLE = 291,               /* tBINDABLE  */
+    tBOOLEAN = 292,                /* tBOOLEAN  */
+    tBROADCAST = 293,              /* tBROADCAST  */
+    tBYTE = 294,                   /* tBYTE  */
+    tBYTECOUNT = 295,              /* tBYTECOUNT  */
+    tCALLAS = 296,                 /* tCALLAS  */
+    tCALLBACK = 297,               /* tCALLBACK  */
+    tCASE = 298,                   /* tCASE  */
+    tCDECL = 299,                  /* tCDECL  */
+    tCHAR = 300,                   /* tCHAR  */
+    tCOCLASS = 301,                /* tCOCLASS  */
+    tCODE = 302,                   /* tCODE  */
+    tCOMMSTATUS = 303,             /* tCOMMSTATUS  */
+    tCONST = 304,                  /* tCONST  */
+    tCONTEXTHANDLE = 305,          /* tCONTEXTHANDLE  */
+    tCONTEXTHANDLENOSERIALIZE = 306, /* tCONTEXTHANDLENOSERIALIZE  */
+    tCONTEXTHANDLESERIALIZE = 307, /* tCONTEXTHANDLESERIALIZE  */
+    tCONTRACT = 308,               /* tCONTRACT  */
+    tCONTRACTVERSION = 309,        /* tCONTRACTVERSION  */
+    tCONTROL = 310,                /* tCONTROL  */
+    tCPPQUOTE = 311,               /* tCPPQUOTE  */
+    tCUSTOM = 312,                 /* tCUSTOM  */
+    tDECODE = 313,                 /* tDECODE  */
+    tDEFAULT = 314,                /* tDEFAULT  */
+    tDEFAULTBIND = 315,            /* tDEFAULTBIND  */
+    tDEFAULTCOLLELEM = 316,        /* tDEFAULTCOLLELEM  */
+    tDEFAULTVALUE = 317,           /* tDEFAULTVALUE  */
+    tDEFAULTVTABLE = 318,          /* tDEFAULTVTABLE  */
+    tDISABLECONSISTENCYCHECK = 319, /* tDISABLECONSISTENCYCHECK  */
+    tDISPLAYBIND = 320,            /* tDISPLAYBIND  */
+    tDISPINTERFACE = 321,          /* tDISPINTERFACE  */
+    tDLLNAME = 322,                /* tDLLNAME  */
+    tDONTFREE = 323,               /* tDONTFREE  */
+    tDOUBLE = 324,                 /* tDOUBLE  */
+    tDUAL = 325,                   /* tDUAL  */
+    tENABLEALLOCATE = 326,         /* tENABLEALLOCATE  */
+    tENCODE = 327,                 /* tENCODE  */
+    tENDPOINT = 328,               /* tENDPOINT  */
+    tENTRY = 329,                  /* tENTRY  */
+    tENUM = 330,                   /* tENUM  */
+    tERRORSTATUST = 331,           /* tERRORSTATUST  */
+    tEXCLUSIVETO = 332,            /* tEXCLUSIVETO  */
+    tEXPLICITHANDLE = 333,         /* tEXPLICITHANDLE  */
+    tEXTERN = 334,                 /* tEXTERN  */
+    tFALSE = 335,                  /* tFALSE  */
+    tFASTCALL = 336,               /* tFASTCALL  */
+    tFAULTSTATUS = 337,            /* tFAULTSTATUS  */
+    tFLOAT = 338,                  /* tFLOAT  */
+    tFORCEALLOCATE = 339,          /* tFORCEALLOCATE  */
+    tHANDLE = 340,                 /* tHANDLE  */
+    tHANDLET = 341,                /* tHANDLET  */
+    tHELPCONTEXT = 342,            /* tHELPCONTEXT  */
+    tHELPFILE = 343,               /* tHELPFILE  */
+    tHELPSTRING = 344,             /* tHELPSTRING  */
+    tHELPSTRINGCONTEXT = 345,      /* tHELPSTRINGCONTEXT  */
+    tHELPSTRINGDLL = 346,          /* tHELPSTRINGDLL  */
+    tHIDDEN = 347,                 /* tHIDDEN  */
+    tHYPER = 348,                  /* tHYPER  */
+    tID = 349,                     /* tID  */
+    tIDEMPOTENT = 350,             /* tIDEMPOTENT  */
+    tIGNORE = 351,                 /* tIGNORE  */
+    tIIDIS = 352,                  /* tIIDIS  */
+    tIMMEDIATEBIND = 353,          /* tIMMEDIATEBIND  */
+    tIMPLICITHANDLE = 354,         /* tIMPLICITHANDLE  */
+    tIMPORT = 355,                 /* tIMPORT  */
+    tIMPORTLIB = 356,              /* tIMPORTLIB  */
+    tIN = 357,                     /* tIN  */
+    tIN_LINE = 358,                /* tIN_LINE  */
+    tINLINE = 359,                 /* tINLINE  */
+    tINPUTSYNC = 360,              /* tINPUTSYNC  */
+    tINT = 361,                    /* tINT  */
+    tINT32 = 362,                  /* tINT32  */
+    tINT3264 = 363,                /* tINT3264  */
+    tINT64 = 364,                  /* tINT64  */
+    tINTERFACE = 365,              /* tINTERFACE  */
+    tLCID = 366,                   /* tLCID  */
+    tLENGTHIS = 367,               /* tLENGTHIS  */
+    tLIBRARY = 368,                /* tLIBRARY  */
+    tLICENSED = 369,               /* tLICENSED  */
+    tLOCAL = 370,                  /* tLOCAL  */
+    tLONG = 371,                   /* tLONG  */
+    tMARSHALINGBEHAVIOR = 372,     /* tMARSHALINGBEHAVIOR  */
+    tMAYBE = 373,                  /* tMAYBE  */
+    tMESSAGE = 374,                /* tMESSAGE  */
+    tMETHODS = 375,                /* tMETHODS  */
+    tMODULE = 376,                 /* tMODULE  */
+    tMTA = 377,                    /* tMTA  */
+    tNAMESPACE = 378,              /* tNAMESPACE  */
+    tNOCODE = 379,                 /* tNOCODE  */
+    tNONBROWSABLE = 380,           /* tNONBROWSABLE  */
+    tNONCREATABLE = 381,           /* tNONCREATABLE  */
+    tNONE = 382,                   /* tNONE  */
+    tNONEXTENSIBLE = 383,          /* tNONEXTENSIBLE  */
+    tNOTIFY = 384,                 /* tNOTIFY  */
+    tNOTIFYFLAG = 385,             /* tNOTIFYFLAG  */
+    tNULL = 386,                   /* tNULL  */
+    tOBJECT = 387,                 /* tOBJECT  */
+    tODL = 388,                    /* tODL  */
+    tOLEAUTOMATION = 389,          /* tOLEAUTOMATION  */
+    tOPTIMIZE = 390,               /* tOPTIMIZE  */
+    tOPTIONAL = 391,               /* tOPTIONAL  */
+    tOUT = 392,                    /* tOUT  */
+    tPARTIALIGNORE = 393,          /* tPARTIALIGNORE  */
+    tPASCAL = 394,                 /* tPASCAL  */
+    tPOINTERDEFAULT = 395,         /* tPOINTERDEFAULT  */
+    tPRAGMA_WARNING = 396,         /* tPRAGMA_WARNING  */
+    tPROGID = 397,                 /* tPROGID  */
+    tPROPERTIES = 398,             /* tPROPERTIES  */
+    tPROPGET = 399,                /* tPROPGET  */
+    tPROPPUT = 400,                /* tPROPPUT  */
+    tPROPPUTREF = 401,             /* tPROPPUTREF  */
+    tPROXY = 402,                  /* tPROXY  */
+    tPTR = 403,                    /* tPTR  */
+    tPUBLIC = 404,                 /* tPUBLIC  */
+    tRANGE = 405,                  /* tRANGE  */
+    tREADONLY = 406,               /* tREADONLY  */
+    tREF = 407,                    /* tREF  */
+    tREGISTER = 408,               /* tREGISTER  */
+    tREPRESENTAS = 409,            /* tREPRESENTAS  */
+    tREQUESTEDIT = 410,            /* tREQUESTEDIT  */
+    tRESTRICTED = 411,             /* tRESTRICTED  */
+    tRETVAL = 412,                 /* tRETVAL  */
+    tRUNTIMECLASS = 413,           /* tRUNTIMECLASS  */
+    tSAFEARRAY = 414,              /* tSAFEARRAY  */
+    tSHORT = 415,                  /* tSHORT  */
+    tSIGNED = 416,                 /* tSIGNED  */
+    tSINGLENODE = 417,             /* tSINGLENODE  */
+    tSIZEIS = 418,                 /* tSIZEIS  */
+    tSIZEOF = 419,                 /* tSIZEOF  */
+    tSMALL = 420,                  /* tSMALL  */
+    tSOURCE = 421,                 /* tSOURCE  */
+    tSTANDARD = 422,               /* tSTANDARD  */
+    tSTATIC = 423,                 /* tSTATIC  */
+    tSTDCALL = 424,                /* tSTDCALL  */
+    tSTRICTCONTEXTHANDLE = 425,    /* tSTRICTCONTEXTHANDLE  */
+    tSTRING = 426,                 /* tSTRING  */
+    tSTRUCT = 427,                 /* tSTRUCT  */
+    tSWITCH = 428,                 /* tSWITCH  */
+    tSWITCHIS = 429,               /* tSWITCHIS  */
+    tSWITCHTYPE = 430,             /* tSWITCHTYPE  */
+    tTHREADING = 431,              /* tTHREADING  */
+    tTRANSMITAS = 432,             /* tTRANSMITAS  */
+    tTRUE = 433,                   /* tTRUE  */
+    tTYPEDEF = 434,                /* tTYPEDEF  */
+    tUIDEFAULT = 435,              /* tUIDEFAULT  */
+    tUNION = 436,                  /* tUNION  */
+    tUNIQUE = 437,                 /* tUNIQUE  */
+    tUNSIGNED = 438,               /* tUNSIGNED  */
+    tUSESGETLASTERROR = 439,       /* tUSESGETLASTERROR  */
+    tUSERMARSHAL = 440,            /* tUSERMARSHAL  */
+    tUUID = 441,                   /* tUUID  */
+    tV1ENUM = 442,                 /* tV1ENUM  */
+    tVARARG = 443,                 /* tVARARG  */
+    tVERSION = 444,                /* tVERSION  */
+    tVIPROGID = 445,               /* tVIPROGID  */
+    tVOID = 446,                   /* tVOID  */
+    tWCHAR = 447,                  /* tWCHAR  */
+    tWIREMARSHAL = 448,            /* tWIREMARSHAL  */
+    tAPARTMENT = 449,              /* tAPARTMENT  */
+    tNEUTRAL = 450,                /* tNEUTRAL  */
+    tSINGLE = 451,                 /* tSINGLE  */
+    tFREE = 452,                   /* tFREE  */
+    tBOTH = 453,                   /* tBOTH  */
+    CAST = 454,                    /* CAST  */
+    PPTR = 455,                    /* PPTR  */
+    POS = 456,                     /* POS  */
+    NEG = 457,                     /* NEG  */
+    ADDRESSOF = 458                /* ADDRESSOF  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -256,7 +263,7 @@
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 135 "tools/widl/parser.y"
+#line 136 "tools/widl/parser.y"
 
 	attr_t *attr;
 	attr_list_t *attr_list;
@@ -285,7 +292,7 @@
 	enum type_qualifier type_qualifier;
 	enum function_specifier function_specifier;
 
-#line 289 "tools/widl/parser.tab.h"
+#line 296 "tools/widl/parser.tab.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
diff --git a/mingw-w64-tools/widl/src/parser.y b/mingw-w64-tools/widl/src/parser.y
index b729d77..d12caa0 100644
--- a/mingw-w64-tools/widl/src/parser.y
+++ b/mingw-w64-tools/widl/src/parser.y
@@ -100,6 +100,7 @@
 static attr_list_t *check_dispiface_attrs(const char *name, attr_list_t *attrs);
 static attr_list_t *check_module_attrs(const char *name, attr_list_t *attrs);
 static attr_list_t *check_coclass_attrs(const char *name, attr_list_t *attrs);
+static attr_list_t *check_runtimeclass_attrs(const char *name, attr_list_t *attrs);
 static attr_list_t *check_apicontract_attrs(const char *name, attr_list_t *attrs);
 const char *get_attr_display_name(enum attr_type type);
 static void add_explicit_handle_if_necessary(const type_t *iface, var_t *func);
@@ -174,7 +175,9 @@
 %token GREATEREQUAL LESSEQUAL
 %token LOGICALOR LOGICALAND
 %token ELLIPSIS
-%token tAGGREGATABLE tALLNODES tALLOCATE tANNOTATION
+%token tAGGREGATABLE
+%token tAGILE
+%token tALLNODES tALLOCATE tANNOTATION
 %token tAPICONTRACT
 %token tAPPOBJECT tASYNC tASYNCUUID
 %token tAUTOHANDLE tBINDABLE tBOOLEAN tBROADCAST tBYTE tBYTECOUNT
@@ -194,6 +197,7 @@
 %token tDLLNAME tDONTFREE tDOUBLE tDUAL
 %token tENABLEALLOCATE tENCODE tENDPOINT
 %token tENTRY tENUM tERRORSTATUST
+%token tEXCLUSIVETO
 %token tEXPLICITHANDLE tEXTERN
 %token tFALSE
 %token tFASTCALL tFAULTSTATUS
@@ -216,12 +220,15 @@
 %token tLENGTHIS tLIBRARY
 %token tLICENSED tLOCAL
 %token tLONG
+%token tMARSHALINGBEHAVIOR
 %token tMAYBE tMESSAGE
 %token tMETHODS
 %token tMODULE
+%token tMTA
 %token tNAMESPACE
 %token tNOCODE tNONBROWSABLE
 %token tNONCREATABLE
+%token tNONE
 %token tNONEXTENSIBLE
 %token tNOTIFY tNOTIFYFLAG
 %token tNULL
@@ -241,12 +248,14 @@
 %token tREQUESTEDIT
 %token tRESTRICTED
 %token tRETVAL
+%token tRUNTIMECLASS
 %token tSAFEARRAY
 %token tSHORT
 %token tSIGNED tSINGLENODE
 %token tSIZEIS tSIZEOF
 %token tSMALL
 %token tSOURCE
+%token tSTANDARD
 %token tSTATIC
 %token tSTDCALL
 %token tSTRICTCONTEXTHANDLE
@@ -285,8 +294,8 @@
 %type <type> base_type int_std
 %type <type> enumdef structdef uniondef typedecl
 %type <type> type qualified_seq qualified_type
-%type <ifref> coclass_int
-%type <ifref_list> coclass_ints
+%type <ifref> class_interface
+%type <ifref_list> class_interfaces
 %type <var> arg ne_union_field union_field s_field case enum enum_member declaration
 %type <var> funcdef
 %type <var_list> m_args arg_list args dispint_meths
@@ -297,9 +306,10 @@
 %type <declarator> m_abstract_declarator abstract_declarator abstract_declarator_no_direct abstract_direct_declarator
 %type <declarator_list> declarator_list struct_declarator_list
 %type <type> coclass coclasshdr coclassdef
+%type <type> runtimeclass runtimeclass_hdr runtimeclass_def
 %type <type> apicontract
 %type <num> contract_ver
-%type <num> pointer_type threading_type version
+%type <num> pointer_type threading_type marshaling_behavior version
 %type <str> libraryhdr callconv cppquote importlib import t_ident
 %type <uuid> uuid_string
 %type <import> import_start
@@ -357,6 +367,9 @@
 						}
 	| gbl_statements apicontract ';'        { $$ = append_statement($1, make_statement_type_decl($2));
 	                                          reg_type($2, $2->name, current_namespace, 0); }
+	| gbl_statements runtimeclass ';'       { $$ = $1; reg_type($2, $2->name, current_namespace, 0); }
+	| gbl_statements runtimeclass_def       { $$ = append_statement($1, make_statement_type_decl($2));
+	                                          reg_type($2, $2->name, current_namespace, 0); }
 	| gbl_statements moduledef		{ $$ = append_statement($1, make_statement_module($2)); }
 	| gbl_statements librarydef		{ $$ = append_statement($1, make_statement_library($2)); }
 	| gbl_statements statement		{ $$ = append_statement($1, $2); }
@@ -373,6 +386,9 @@
 						}
 	| imp_statements apicontract ';'        { $$ = append_statement($1, make_statement_type_decl($2));
 	                                          reg_type($2, $2->name, current_namespace, 0); }
+	| imp_statements runtimeclass ';'       { $$ = $1; reg_type($2, $2->name, current_namespace, 0); }
+	| imp_statements runtimeclass_def       { $$ = append_statement($1, make_statement_type_decl($2));
+	                                          reg_type($2, $2->name, current_namespace, 0); }
 	| imp_statements moduledef		{ $$ = append_statement($1, make_statement_module($2)); }
 	| imp_statements statement		{ $$ = append_statement($1, $2); }
 	| imp_statements importlib		{ $$ = append_statement($1, make_statement_importlib($2)); }
@@ -505,6 +521,12 @@
 	| str_list ',' aSTRING                  { $$ = append_str( $1, $3 ); }
 	;
 
+marshaling_behavior:
+	  tAGILE				{ $$ = MARSHALING_AGILE; }
+	| tNONE					{ $$ = MARSHALING_NONE; }
+	| tSTANDARD				{ $$ = MARSHALING_STANDARD; }
+	;
+
 contract_ver:
 	  aNUM					{ $$ = MAKEVERSION(0, $1); }
 	| aNUM '.' aNUM				{ $$ = MAKEVERSION($3, $1); }
@@ -549,6 +571,9 @@
 	| tENCODE				{ $$ = make_attr(ATTR_ENCODE); }
 	| tENDPOINT '(' str_list ')'		{ $$ = make_attrp(ATTR_ENDPOINT, $3); }
 	| tENTRY '(' expr_const ')'		{ $$ = make_attrp(ATTR_ENTRY, $3); }
+	| tEXCLUSIVETO '(' decl_spec ')'	{ if ($3->type->type_type != TYPE_RUNTIMECLASS)
+						      error_loc("type %s is not a runtimeclass\n", $3->type->name);
+						  $$ = make_attrp(ATTR_EXCLUSIVETO, $3->type); }
 	| tEXPLICITHANDLE			{ $$ = make_attr(ATTR_EXPLICIT_HANDLE); }
 	| tFAULTSTATUS				{ $$ = make_attr(ATTR_FAULTSTATUS); }
 	| tFORCEALLOCATE			{ $$ = make_attr(ATTR_FORCEALLOCATE); }
@@ -572,6 +597,8 @@
 	| tLCID					{ $$ = make_attr(ATTR_PARAMLCID); }
 	| tLICENSED				{ $$ = make_attr(ATTR_LICENSED); }
 	| tLOCAL				{ $$ = make_attr(ATTR_LOCAL); }
+	| tMARSHALINGBEHAVIOR '(' marshaling_behavior ')'
+						{ $$ = make_attrv(ATTR_MARSHALING_BEHAVIOR, $3); }
 	| tMAYBE				{ $$ = make_attr(ATTR_MAYBE); }
 	| tMESSAGE				{ $$ = make_attr(ATTR_MESSAGE); }
 	| tNOCODE				{ $$ = make_attr(ATTR_NOCODE); }
@@ -881,10 +908,29 @@
 						}
 	;
 
-coclassdef: coclasshdr '{' coclass_ints '}' semicolon_opt
+coclassdef: coclasshdr '{' class_interfaces '}' semicolon_opt
 						{ $$ = type_coclass_define($1, $3); }
 	;
 
+runtimeclass:
+	  tRUNTIMECLASS aIDENTIFIER		{ $$ = type_new_runtimeclass($2, current_namespace); }
+	| tRUNTIMECLASS aKNOWNTYPE		{ $$ = find_type($2, NULL, 0);
+						  if (type_get_type_detect_alias($$) != TYPE_RUNTIMECLASS)
+						    error_loc("%s was not declared a runtimeclass at %s:%d\n", $2,
+						              $$->loc_info.input_name, $$->loc_info.line_number);
+						}
+	;
+
+runtimeclass_hdr: attributes runtimeclass	{ $$ = $2;
+						  check_def($$);
+						  $$->attrs = check_runtimeclass_attrs($2->name, $1);
+						}
+	;
+
+runtimeclass_def: runtimeclass_hdr '{' class_interfaces '}' semicolon_opt
+						{ $$ = type_runtimeclass_define($1, $3); }
+	;
+
 apicontract: attributes tAPICONTRACT aIDENTIFIER '{' '}'
 						{ $$ = get_type(TYPE_APICONTRACT, $3, current_namespace, 0);
 						  check_def($$);
@@ -896,11 +942,11 @@
 	| tNAMESPACE aNAMESPACE                 { $$ = $2; }
 	;
 
-coclass_ints:					{ $$ = NULL; }
-	| coclass_ints coclass_int		{ $$ = append_ifref( $1, $2 ); }
+class_interfaces:				{ $$ = NULL; }
+	| class_interfaces class_interface	{ $$ = append_ifref( $1, $2 ); }
 	;
 
-coclass_int:
+class_interface:
 	  m_attributes interfacedec		{ $$ = make_ifref($2); $$->attrs = $1; }
 	;
 
@@ -1141,6 +1187,7 @@
 	| tSINGLE				{ $$ = THREADING_SINGLE; }
 	| tFREE					{ $$ = THREADING_FREE; }
 	| tBOTH					{ $$ = THREADING_BOTH; }
+	| tMTA					{ $$ = THREADING_FREE; }
 	;
 
 pointer_type:
@@ -2168,115 +2215,118 @@
     unsigned int on_module : 1;
     unsigned int on_coclass : 1;
     unsigned int on_apicontract : 1;
+    unsigned int on_runtimeclass : 1;
     const char *display_name;
 };
 
 struct allowed_attr allowed_attr[] =
 {
-    /* attr                        { D ACF M   I Fn ARG T En Enm St Un Fi L  DI M  C AC  <display name> } */
-    /* ATTR_AGGREGATABLE */        { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "aggregatable" },
-    /* ATTR_ALLOCATE */            { 0, 1, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "allocate" },
-    /* ATTR_ANNOTATION */          { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "annotation" },
-    /* ATTR_APPOBJECT */           { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "appobject" },
-    /* ATTR_ASYNC */               { 0, 1, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "async" },
-    /* ATTR_ASYNCUUID */           { 1, 0, 0,  1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, "async_uuid" },
-    /* ATTR_AUTO_HANDLE */         { 1, 1, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "auto_handle" },
-    /* ATTR_BINDABLE */            { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "bindable" },
-    /* ATTR_BROADCAST */           { 1, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "broadcast" },
-    /* ATTR_CALLAS */              { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "call_as" },
-    /* ATTR_CALLCONV */            { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
-    /* ATTR_CASE */                { 1, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "case" },
-    /* ATTR_CODE */                { 0, 1, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "code" },
-    /* ATTR_COMMSTATUS */          { 0, 0, 0,  0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "comm_status" },
-    /* ATTR_CONTEXTHANDLE */       { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "context_handle" },
-    /* ATTR_CONTRACT */            { 0, 0, 0,  1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, "contract" },
-    /* ATTR_CONTRACTVERSION */     { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "contractversion" },
-    /* ATTR_CONTROL */             { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, "control" },
-    /* ATTR_CUSTOM */              { 0, 0, 1,  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, "custom" },
-    /* ATTR_DECODE */              { 0, 0, 0,  1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "decode" },
-    /* ATTR_DEFAULT */             { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, "default" },
-    /* ATTR_DEFAULTBIND */         { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultbind" },
-    /* ATTR_DEFAULTCOLLELEM */     { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultcollelem" },
-    /* ATTR_DEFAULTVALUE */        { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultvalue" },
-    /* ATTR_DEFAULTVTABLE */       { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "defaultvtable" },
- /* ATTR_DISABLECONSISTENCYCHECK */{ 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "disable_consistency_check" },
-    /* ATTR_DISPINTERFACE */       { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
-    /* ATTR_DISPLAYBIND */         { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "displaybind" },
-    /* ATTR_DLLNAME */             { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "dllname" },
-    /* ATTR_DUAL */                { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "dual" },
-    /* ATTR_ENABLEALLOCATE */      { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "enable_allocate" },
-    /* ATTR_ENCODE */              { 0, 0, 0,  1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "encode" },
-    /* ATTR_ENDPOINT */            { 1, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "endpoint" },
-    /* ATTR_ENTRY */               { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "entry" },
-    /* ATTR_EXPLICIT_HANDLE */     { 1, 1, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "explicit_handle" },
-    /* ATTR_FAULTSTATUS */         { 0, 0, 0,  0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "fault_status" },
-    /* ATTR_FORCEALLOCATE */       { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "force_allocate" },
-    /* ATTR_HANDLE */              { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "handle" },
-    /* ATTR_HELPCONTEXT */         { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, "helpcontext" },
-    /* ATTR_HELPFILE */            { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "helpfile" },
-    /* ATTR_HELPSTRING */          { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, "helpstring" },
-    /* ATTR_HELPSTRINGCONTEXT */   { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, "helpstringcontext" },
-    /* ATTR_HELPSTRINGDLL */       { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "helpstringdll" },
-    /* ATTR_HIDDEN */              { 0, 0, 0,  1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, "hidden" },
-    /* ATTR_ID */                  { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, "id" },
-    /* ATTR_IDEMPOTENT */          { 1, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "idempotent" },
-    /* ATTR_IGNORE */              { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "ignore" },
-    /* ATTR_IIDIS */               { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "iid_is" },
-    /* ATTR_IMMEDIATEBIND */       { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "immediatebind" },
-    /* ATTR_IMPLICIT_HANDLE */     { 1, 1, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "implicit_handle" },
-    /* ATTR_IN */                  { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "in" },
-    /* ATTR_INPUTSYNC */           { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "inputsync" },
-    /* ATTR_LENGTHIS */            { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "length_is" },
-    /* ATTR_LIBLCID */             { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "lcid" },
-    /* ATTR_LICENSED */            { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "licensed" },
-    /* ATTR_LOCAL */               { 1, 0, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "local" },
-    /* ATTR_MAYBE */               { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "maybe" },
-    /* ATTR_MESSAGE */             { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "message" },
-    /* ATTR_NOCODE */              { 0, 1, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nocode" },
-    /* ATTR_NONBROWSABLE */        { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nonbrowsable" },
-    /* ATTR_NONCREATABLE */        { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "noncreatable" },
-    /* ATTR_NONEXTENSIBLE */       { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nonextensible" },
-    /* ATTR_NOTIFY */              { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "notify" },
-    /* ATTR_NOTIFYFLAG */          { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "notify_flag" },
-    /* ATTR_OBJECT */              { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "object" },
-    /* ATTR_ODL */                 { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "odl" },
-    /* ATTR_OLEAUTOMATION */       { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "oleautomation" },
-    /* ATTR_OPTIMIZE */            { 0, 0, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "optimize" },
-    /* ATTR_OPTIONAL */            { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "optional" },
-    /* ATTR_OUT */                 { 1, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "out" },
-    /* ATTR_PARAMLCID */           { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "lcid" },
-    /* ATTR_PARTIALIGNORE */       { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "partial_ignore" },
-    /* ATTR_POINTERDEFAULT */      { 1, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "pointer_default" },
-    /* ATTR_POINTERTYPE */         { 1, 0, 0,  0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "ref, unique or ptr" },
-    /* ATTR_PROGID */              { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "progid" },
-    /* ATTR_PROPGET */             { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propget" },
-    /* ATTR_PROPPUT */             { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propput" },
-    /* ATTR_PROPPUTREF */          { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propputref" },
-    /* ATTR_PROXY */               { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "proxy" },
-    /* ATTR_PUBLIC */              { 0, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "public" },
-    /* ATTR_RANGE */               { 0, 0, 0,  0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, "range" },
-    /* ATTR_READONLY */            { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "readonly" },
-    /* ATTR_REPRESENTAS */         { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "represent_as" },
-    /* ATTR_REQUESTEDIT */         { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "requestedit" },
-    /* ATTR_RESTRICTED */          { 0, 0, 0,  1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, "restricted" },
-    /* ATTR_RETVAL */              { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "retval" },
-    /* ATTR_SIZEIS */              { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "size_is" },
-    /* ATTR_SOURCE */              { 0, 0, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "source" },
-    /* ATTR_STRICTCONTEXTHANDLE */ { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "strict_context_handle" },
-    /* ATTR_STRING */              { 1, 0, 0,  0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "string" },
-    /* ATTR_SWITCHIS */            { 1, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "switch_is" },
-    /* ATTR_SWITCHTYPE */          { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "switch_type" },
-    /* ATTR_THREADING */           { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "threading" },
-    /* ATTR_TRANSMITAS */          { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "transmit_as" },
-    /* ATTR_UIDEFAULT */           { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "uidefault" },
-    /* ATTR_USESGETLASTERROR */    { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "usesgetlasterror" },
-    /* ATTR_USERMARSHAL */         { 0, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "user_marshal" },
-    /* ATTR_UUID */                { 1, 0, 0,  1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, "uuid" },
-    /* ATTR_V1ENUM */              { 0, 0, 0,  0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "v1_enum" },
-    /* ATTR_VARARG */              { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "vararg" },
-    /* ATTR_VERSION */             { 1, 0, 0,  1, 0, 0, 1, 1, 0, 2, 0, 0, 1, 0, 0, 1, 0, "version" },
-    /* ATTR_VIPROGID */            { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "vi_progid" },
-    /* ATTR_WIREMARSHAL */         { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "wire_marshal" },
+    /* attr                        { D ACF M   I Fn ARG T En Enm St Un Fi L  DI M  C AC  R  <display name> } */
+    /* ATTR_AGGREGATABLE */        { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "aggregatable" },
+    /* ATTR_ALLOCATE */            { 0, 1, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "allocate" },
+    /* ATTR_ANNOTATION */          { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "annotation" },
+    /* ATTR_APPOBJECT */           { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "appobject" },
+    /* ATTR_ASYNC */               { 0, 1, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "async" },
+    /* ATTR_ASYNCUUID */           { 1, 0, 0,  1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, "async_uuid" },
+    /* ATTR_AUTO_HANDLE */         { 1, 1, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "auto_handle" },
+    /* ATTR_BINDABLE */            { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "bindable" },
+    /* ATTR_BROADCAST */           { 1, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "broadcast" },
+    /* ATTR_CALLAS */              { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "call_as" },
+    /* ATTR_CALLCONV */            { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
+    /* ATTR_CASE */                { 1, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "case" },
+    /* ATTR_CODE */                { 0, 1, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "code" },
+    /* ATTR_COMMSTATUS */          { 0, 0, 0,  0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "comm_status" },
+    /* ATTR_CONTEXTHANDLE */       { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "context_handle" },
+    /* ATTR_CONTRACT */            { 0, 0, 0,  1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, "contract" },
+    /* ATTR_CONTRACTVERSION */     { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "contractversion" },
+    /* ATTR_CONTROL */             { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, "control" },
+    /* ATTR_CUSTOM */              { 0, 0, 1,  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, "custom" },
+    /* ATTR_DECODE */              { 0, 0, 0,  1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "decode" },
+    /* ATTR_DEFAULT */             { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, "default" },
+    /* ATTR_DEFAULTBIND */         { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultbind" },
+    /* ATTR_DEFAULTCOLLELEM */     { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultcollelem" },
+    /* ATTR_DEFAULTVALUE */        { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultvalue" },
+    /* ATTR_DEFAULTVTABLE */       { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "defaultvtable" },
+ /* ATTR_DISABLECONSISTENCYCHECK */{ 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "disable_consistency_check" },
+    /* ATTR_DISPINTERFACE */       { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
+    /* ATTR_DISPLAYBIND */         { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "displaybind" },
+    /* ATTR_DLLNAME */             { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "dllname" },
+    /* ATTR_DUAL */                { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "dual" },
+    /* ATTR_ENABLEALLOCATE */      { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "enable_allocate" },
+    /* ATTR_ENCODE */              { 0, 0, 0,  1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "encode" },
+    /* ATTR_ENDPOINT */            { 1, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "endpoint" },
+    /* ATTR_ENTRY */               { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "entry" },
+    /* ATTR_EXCLUSIVETO */         { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "exclusive_to" },
+    /* ATTR_EXPLICIT_HANDLE */     { 1, 1, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "explicit_handle" },
+    /* ATTR_FAULTSTATUS */         { 0, 0, 0,  0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "fault_status" },
+    /* ATTR_FORCEALLOCATE */       { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "force_allocate" },
+    /* ATTR_HANDLE */              { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "handle" },
+    /* ATTR_HELPCONTEXT */         { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, "helpcontext" },
+    /* ATTR_HELPFILE */            { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "helpfile" },
+    /* ATTR_HELPSTRING */          { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, "helpstring" },
+    /* ATTR_HELPSTRINGCONTEXT */   { 0, 0, 0,  1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, "helpstringcontext" },
+    /* ATTR_HELPSTRINGDLL */       { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "helpstringdll" },
+    /* ATTR_HIDDEN */              { 0, 0, 0,  1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, "hidden" },
+    /* ATTR_ID */                  { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, "id" },
+    /* ATTR_IDEMPOTENT */          { 1, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "idempotent" },
+    /* ATTR_IGNORE */              { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "ignore" },
+    /* ATTR_IIDIS */               { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "iid_is" },
+    /* ATTR_IMMEDIATEBIND */       { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "immediatebind" },
+    /* ATTR_IMPLICIT_HANDLE */     { 1, 1, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "implicit_handle" },
+    /* ATTR_IN */                  { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "in" },
+    /* ATTR_INPUTSYNC */           { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "inputsync" },
+    /* ATTR_LENGTHIS */            { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "length_is" },
+    /* ATTR_LIBLCID */             { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "lcid" },
+    /* ATTR_LICENSED */            { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "licensed" },
+    /* ATTR_LOCAL */               { 1, 0, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "local" },
+    /* ATTR_MARSHALING_BEHAVIOR */ { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "marshaling_behavior" },
+    /* ATTR_MAYBE */               { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "maybe" },
+    /* ATTR_MESSAGE */             { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "message" },
+    /* ATTR_NOCODE */              { 0, 1, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nocode" },
+    /* ATTR_NONBROWSABLE */        { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nonbrowsable" },
+    /* ATTR_NONCREATABLE */        { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "noncreatable" },
+    /* ATTR_NONEXTENSIBLE */       { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nonextensible" },
+    /* ATTR_NOTIFY */              { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "notify" },
+    /* ATTR_NOTIFYFLAG */          { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "notify_flag" },
+    /* ATTR_OBJECT */              { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "object" },
+    /* ATTR_ODL */                 { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "odl" },
+    /* ATTR_OLEAUTOMATION */       { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "oleautomation" },
+    /* ATTR_OPTIMIZE */            { 0, 0, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "optimize" },
+    /* ATTR_OPTIONAL */            { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "optional" },
+    /* ATTR_OUT */                 { 1, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "out" },
+    /* ATTR_PARAMLCID */           { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "lcid" },
+    /* ATTR_PARTIALIGNORE */       { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "partial_ignore" },
+    /* ATTR_POINTERDEFAULT */      { 1, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "pointer_default" },
+    /* ATTR_POINTERTYPE */         { 1, 0, 0,  0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "ref, unique or ptr" },
+    /* ATTR_PROGID */              { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "progid" },
+    /* ATTR_PROPGET */             { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propget" },
+    /* ATTR_PROPPUT */             { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propput" },
+    /* ATTR_PROPPUTREF */          { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propputref" },
+    /* ATTR_PROXY */               { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "proxy" },
+    /* ATTR_PUBLIC */              { 0, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "public" },
+    /* ATTR_RANGE */               { 0, 0, 0,  0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "range" },
+    /* ATTR_READONLY */            { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "readonly" },
+    /* ATTR_REPRESENTAS */         { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "represent_as" },
+    /* ATTR_REQUESTEDIT */         { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "requestedit" },
+    /* ATTR_RESTRICTED */          { 0, 0, 0,  1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, "restricted" },
+    /* ATTR_RETVAL */              { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "retval" },
+    /* ATTR_SIZEIS */              { 0, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "size_is" },
+    /* ATTR_SOURCE */              { 0, 0, 0,  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "source" },
+    /* ATTR_STRICTCONTEXTHANDLE */ { 0, 0, 0,  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "strict_context_handle" },
+    /* ATTR_STRING */              { 1, 0, 0,  0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "string" },
+    /* ATTR_SWITCHIS */            { 1, 0, 0,  0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "switch_is" },
+    /* ATTR_SWITCHTYPE */          { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "switch_type" },
+    /* ATTR_THREADING */           { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, "threading" },
+    /* ATTR_TRANSMITAS */          { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "transmit_as" },
+    /* ATTR_UIDEFAULT */           { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "uidefault" },
+    /* ATTR_USESGETLASTERROR */    { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "usesgetlasterror" },
+    /* ATTR_USERMARSHAL */         { 0, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "user_marshal" },
+    /* ATTR_UUID */                { 1, 0, 0,  1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, "uuid" },
+    /* ATTR_V1ENUM */              { 0, 0, 0,  0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "v1_enum" },
+    /* ATTR_VARARG */              { 0, 0, 0,  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "vararg" },
+    /* ATTR_VERSION */             { 1, 0, 0,  1, 0, 0, 1, 1, 0, 2, 0, 0, 1, 0, 0, 1, 0, 1, "version" },
+    /* ATTR_VIPROGID */            { 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "vi_progid" },
+    /* ATTR_WIREMARSHAL */         { 1, 0, 0,  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "wire_marshal" },
 };
 
 static attr_list_t *append_attr(attr_list_t *list, attr_t *attr)
@@ -2491,6 +2541,17 @@
   return attrs;
 }
 
+static attr_list_t *check_runtimeclass_attrs(const char *name, attr_list_t *attrs)
+{
+    const attr_t *attr;
+    if (!attrs) return attrs;
+    LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
+        if (!allowed_attr[attr->type].on_runtimeclass)
+            error_loc("inapplicable attribute %s for runtimeclass %s\n",
+                      allowed_attr[attr->type].display_name, name);
+    return attrs;
+}
+
 static attr_list_t *check_apicontract_attrs(const char *name, attr_list_t *attrs)
 {
     const attr_t *attr;
@@ -2540,6 +2601,7 @@
     case TYPE_FUNCTION:
     case TYPE_INTERFACE:
     case TYPE_BITFIELD:
+    case TYPE_RUNTIMECLASS:
         return FALSE;
     case TYPE_APICONTRACT:
         /* not supposed to be here */
diff --git a/mingw-w64-tools/widl/src/parser.yy.c b/mingw-w64-tools/widl/src/parser.yy.c
index 3455b6b..560b13c 100644
--- a/mingw-w64-tools/widl/src/parser.yy.c
+++ b/mingw-w64-tools/widl/src/parser.yy.c
@@ -2690,6 +2690,7 @@
 	{"pascal",          tPASCAL,         0},
 	{"properties",      tPROPERTIES,     0},
 	{"register",        tREGISTER,       0},
+	{"runtimeclass",    tRUNTIMECLASS,   1},
 	{"short",           tSHORT,          0},
 	{"signed",          tSIGNED,         0},
 	{"sizeof",          tSIZEOF,         0},
@@ -2712,6 +2713,7 @@
 static const struct keyword attr_keywords[] =
 {
 	{"aggregatable",                tAGGREGATABLE,              0},
+	{"agile",                       tAGILE,                     1},
 	{"all_nodes",                   tALLNODES,                  0},
 	{"allocate",                    tALLOCATE,                  0},
 	{"annotation",                  tANNOTATION,                0},
@@ -2749,6 +2751,7 @@
 	{"encode",                      tENCODE,                    0},
 	{"endpoint",                    tENDPOINT,                  0},
 	{"entry",                       tENTRY,                     0},
+	{"exclusiveto",                 tEXCLUSIVETO,               1},
 	{"explicit_handle",             tEXPLICITHANDLE,            0},
 	{"fault_status",                tFAULTSTATUS,               0},
 	{"force_allocate",              tFORCEALLOCATE,             0},
@@ -2773,12 +2776,15 @@
 	{"length_is",                   tLENGTHIS,                  0},
 	{"licensed",                    tLICENSED,                  0},
 	{"local",                       tLOCAL,                     0},
+	{"marshaling_behavior",         tMARSHALINGBEHAVIOR,        1},
 	{"maybe",                       tMAYBE,                     0},
 	{"message",                     tMESSAGE,                   0},
+	{"mta" ,                        tMTA,                       0},
 	{"neutral",                     tNEUTRAL,                   0},
 	{"nocode",                      tNOCODE,                    0},
 	{"nonbrowsable",                tNONBROWSABLE,              0},
 	{"noncreatable",                tNONCREATABLE,              0},
+	{"none",                        tNONE,                      1},
 	{"nonextensible",               tNONEXTENSIBLE,             0},
 	{"notify",                      tNOTIFY,                    0},
 	{"notify_flag",                 tNOTIFYFLAG,                0},
@@ -2808,6 +2814,7 @@
 	{"single_node",                 tSINGLENODE,                0},
 	{"size_is",                     tSIZEIS,                    0},
 	{"source",                      tSOURCE,                    0},
+	{"standard",                    tSTANDARD,                  1},
 	{"strict_context_handle",       tSTRICTCONTEXTHANDLE,       0},
 	{"string",                      tSTRING,                    0},
 	{"switch_is",                   tSWITCHIS,                  0},
diff --git a/mingw-w64-tools/widl/src/typegen.c b/mingw-w64-tools/widl/src/typegen.c
index 5d0f24b..2e9be07 100644
--- a/mingw-w64-tools/widl/src/typegen.c
+++ b/mingw-w64-tools/widl/src/typegen.c
@@ -353,6 +353,7 @@
         return TGT_ENUM;
     case TYPE_POINTER:
         if (type_get_type(type_pointer_get_ref_type(type)) == TYPE_INTERFACE ||
+            type_get_type(type_pointer_get_ref_type(type)) == TYPE_RUNTIMECLASS ||
             (type_get_type(type_pointer_get_ref_type(type)) == TYPE_VOID && is_attr(attrs, ATTR_IIDIS)))
             return TGT_IFACE_POINTER;
         else if (is_aliaschain_attr(type_pointer_get_ref_type(type), ATTR_CONTEXTHANDLE))
@@ -373,6 +374,7 @@
     case TYPE_VOID:
     case TYPE_ALIAS:
     case TYPE_BITFIELD:
+    case TYPE_RUNTIMECLASS:
         break;
     case TYPE_APICONTRACT:
         /* not supposed to be here */
@@ -1971,6 +1973,7 @@
     case TYPE_FUNCTION:
     case TYPE_BITFIELD:
     case TYPE_APICONTRACT:
+    case TYPE_RUNTIMECLASS:
         /* these types should not be encountered here due to language
          * restrictions (interface, void, coclass, module), logical
          * restrictions (alias - due to type_get_type call above) or
@@ -2073,6 +2076,7 @@
     case TYPE_FUNCTION:
     case TYPE_BITFIELD:
     case TYPE_APICONTRACT:
+    case TYPE_RUNTIMECLASS:
         /* these types should not be encountered here due to language
          * restrictions (interface, void, coclass, module), logical
          * restrictions (alias - due to type_get_type call above) or
diff --git a/mingw-w64-tools/widl/src/typelib.c b/mingw-w64-tools/widl/src/typelib.c
index faf7644..ace6424 100644
--- a/mingw-w64-tools/widl/src/typelib.c
+++ b/mingw-w64-tools/widl/src/typelib.c
@@ -218,6 +218,7 @@
   case TYPE_MODULE:
   case TYPE_UNION:
   case TYPE_ENCAPSULATED_UNION:
+  case TYPE_RUNTIMECLASS:
     return VT_USERDEFINED;
 
   case TYPE_VOID:
diff --git a/mingw-w64-tools/widl/src/typetree.c b/mingw-w64-tools/widl/src/typetree.c
index df88357..a18ffe1 100644
--- a/mingw-w64-tools/widl/src/typetree.c
+++ b/mingw-w64-tools/widl/src/typetree.c
@@ -215,6 +215,16 @@
     return type;
 }
 
+type_t *type_new_runtimeclass(char *name, struct namespace *namespace)
+{
+    type_t *type = get_type(TYPE_RUNTIMECLASS, name, NULL, 0);
+    if (type->type_type != TYPE_RUNTIMECLASS || type->defined)
+        error_loc("%s: redefinition error; original definition was at %s:%d\n",
+                  type->name, type->loc_info.input_name, type->loc_info.line_number);
+    type->name = name;
+    type->namespace = namespace;
+    return type;
+}
 
 type_t *type_new_array(const char *name, const decl_spec_t *element, int declptr,
                        unsigned int dim, expr_t *size_is, expr_t *length_is)
@@ -509,6 +519,15 @@
     return coclass;
 }
 
+type_t *type_runtimeclass_define(type_t *runtimeclass, ifref_list_t *ifaces)
+{
+    runtimeclass->details.runtimeclass.ifaces = ifaces;
+    runtimeclass->defined = TRUE;
+    if (!type_runtimeclass_get_default_iface(runtimeclass))
+        error_loc("missing default interface on runtimeclass %s\n", runtimeclass->name);
+    return runtimeclass;
+}
+
 int type_is_equal(const type_t *type1, const type_t *type2)
 {
     if (type_get_type_detect_alias(type1) != type_get_type_detect_alias(type2))
diff --git a/mingw-w64-tools/widl/src/typetree.h b/mingw-w64-tools/widl/src/typetree.h
index 7abec41..dc44c3f 100644
--- a/mingw-w64-tools/widl/src/typetree.h
+++ b/mingw-w64-tools/widl/src/typetree.h
@@ -44,14 +44,17 @@
 type_t *type_new_nonencapsulated_union(const char *name, int defined, var_list_t *fields);
 type_t *type_new_encapsulated_union(char *name, var_t *switch_field, var_t *union_field, var_list_t *cases);
 type_t *type_new_bitfield(type_t *field_type, const expr_t *bits);
+type_t *type_new_runtimeclass(char *name, struct namespace *namespace);
 void type_interface_define(type_t *iface, type_t *inherit, statement_list_t *stmts);
 void type_dispinterface_define(type_t *iface, var_list_t *props, var_list_t *methods);
 void type_dispinterface_define_from_iface(type_t *dispiface, type_t *iface);
 void type_module_define(type_t *module, statement_list_t *stmts);
 type_t *type_coclass_define(type_t *coclass, ifref_list_t *ifaces);
+type_t *type_runtimeclass_define(type_t *runtimeclass, ifref_list_t *ifaces);
 int type_is_equal(const type_t *type1, const type_t *type2);
 const char *type_get_name(const type_t *type, enum name_type name_type);
 char *gen_name(void);
+extern int is_attr(const attr_list_t *list, enum attr_type t);
 
 /* FIXME: shouldn't need to export this */
 type_t *duptype(type_t *t, int dupname);
@@ -222,6 +225,7 @@
     case TYPE_POINTER:
     case TYPE_ARRAY:
     case TYPE_BITFIELD:
+    case TYPE_RUNTIMECLASS:
         return TRUE;
     case TYPE_APICONTRACT:
         assert(0);
@@ -322,6 +326,26 @@
     return type->details.coclass.ifaces;
 }
 
+static inline ifref_list_t *type_runtimeclass_get_ifaces(const type_t *type)
+{
+    type = type_get_real_type(type);
+    assert(type_get_type(type) == TYPE_RUNTIMECLASS);
+    return type->details.runtimeclass.ifaces;
+}
+
+static inline type_t *type_runtimeclass_get_default_iface(const type_t *type)
+{
+    ifref_list_t *ifaces = type_runtimeclass_get_ifaces(type);
+    ifref_t *entry;
+
+    if (!ifaces) return NULL;
+    LIST_FOR_EACH_ENTRY(entry, ifaces, ifref_t, entry)
+        if (is_attr(entry->attrs, ATTR_DEFAULT))
+            return entry->iface;
+
+    return NULL;
+}
+
 static inline const decl_spec_t *type_pointer_get_ref(const type_t *type)
 {
     type = type_get_real_type(type);
diff --git a/mingw-w64-tools/widl/src/widltypes.h b/mingw-w64-tools/widl/src/widltypes.h
index d586242..46a44da 100644
--- a/mingw-w64-tools/widl/src/widltypes.h
+++ b/mingw-w64-tools/widl/src/widltypes.h
@@ -103,6 +103,7 @@
     ATTR_ENCODE,
     ATTR_ENDPOINT,
     ATTR_ENTRY,
+    ATTR_EXCLUSIVETO,
     ATTR_EXPLICIT_HANDLE,
     ATTR_FAULTSTATUS,
     ATTR_FORCEALLOCATE,
@@ -125,6 +126,7 @@
     ATTR_LIBLCID,
     ATTR_LICENSED,
     ATTR_LOCAL,
+    ATTR_MARSHALING_BEHAVIOR,
     ATTR_MAYBE,
     ATTR_MESSAGE,
     ATTR_NOCODE,
@@ -271,6 +273,14 @@
     THREADING_BOTH
 };
 
+enum marshaling_type
+{
+    MARSHALING_INVALID = 0,
+    MARSHALING_NONE,
+    MARSHALING_AGILE,
+    MARSHALING_STANDARD,
+};
+
 enum type_basic_type
 {
     TYPE_BASIC_INT8 = 1,
@@ -415,6 +425,11 @@
     struct _decl_spec_t aliasee;
 };
 
+struct runtimeclass_details
+{
+    ifref_list_t *ifaces;
+};
+
 #define HASHMAX 64
 
 struct namespace {
@@ -442,6 +457,7 @@
     TYPE_ARRAY,
     TYPE_BITFIELD,
     TYPE_APICONTRACT,
+    TYPE_RUNTIMECLASS,
 };
 
 struct _type_t {
@@ -462,6 +478,7 @@
     struct pointer_details pointer;
     struct bitfield_details bitfield;
     struct alias_details alias;
+    struct runtimeclass_details runtimeclass;
   } details;
   const char *c_name;
   unsigned int typestring_offset;