Skip to content

Instantly share code, notes, and snippets.

@vittorioromeo
Last active September 10, 2017 17:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vittorioromeo/4f9ae8f99da72288c73ca643b101ed20 to your computer and use it in GitHub Desktop.
Save vittorioromeo/4f9ae8f99da72288c73ca643b101ed20 to your computer and use it in GitHub Desktop.
// generated with `unosolo`
// https://github.com/SuperV1234/unosolo
#pragma once
#define VRM_CORE_NAMESPACE \
namespace vrm \
{ \
namespace core
#define VRM_CORE_NAMESPACE_END }
#define VRM_CORE_IMPL_ATTRIBUTE(...) __attribute__((__VA_ARGS__))
#define VRM_CORE_ATTRIBUTE(...) VRM_CORE_IMPL_ATTRIBUTE(__VA_ARGS__)
#define VRM_CORE_UNUSED VRM_CORE_ATTRIBUTE(unused)
#define VRM_CORE_ALWAYS_INLINE VRM_CORE_ATTRIBUTE(always_inline) inline
#define VRM_CORE_NEVER_INLINE VRM_CORE_ATTRIBUTE(noinline)
#define VRM_CORE_UNUSED_FN VRM_CORE_UNUSED
#define VRM_CORE_PURE_FN VRM_CORE_ATTRIBUTE(pure)
#define VRM_CORE_CONST_FN VRM_CORE_ATTRIBUTE(const)
#define VRM_CORE_NORETURN_FN VRM_CORE_ATTRIBUTE(noreturn)
VRM_CORE_NAMESPACE
{
namespace detection
{
enum class operating_system
{
os_linux,
os_windows,
os_mac,
os_android,
os_freebsd,
os_unknown
};
constexpr auto current_operating_system() noexcept;
constexpr auto on_unix() noexcept;
constexpr auto on_windows() noexcept;
constexpr auto on_mac() noexcept;
}
}
VRM_CORE_NAMESPACE_END
#if defined(__unix__) || defined(__unix)
#if defined(__ANDROID__)
#define VRM_CORE_OS_ANDROID 1
#elif defined(__linux__)
#define VRM_CORE_OS_LINUX 1
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
#define VRM_CORE_OS_FREEBSD 1
#endif
#elif defined(_WIN64) || defined(_WIN32) || defined(__CYGWIN32__) || \
defined(__MINGW32__)
#define VRM_CORE_OS_WINDOWS 1
#elif defined(MACOSX) || defined(__DARWIN__) || defined(__APPLE__)
#define VRM_CORE_OS_MAC 1
#else
#define VRM_CORE_OS_UNKNOWN 1
#endif
VRM_CORE_NAMESPACE
{
namespace detection
{
inline constexpr auto current_operating_system() noexcept
{
#if defined(VRM_CORE_OS_LINUX)
return operating_system::os_linux;
#elif defined(VRM_CORE_OS_ANDROID)
return operating_system::os_android;
#elif defined(VRM_CORE_OS_FREEBSD)
return operating_system::os_freebsd;
#elif defined(VRM_CORE_OS_WINDOWS)
return operating_system::os_windows;
#elif defined(VRM_CORE_OS_MAC)
return operating_system::os_mac;
#else
return operating_system::os_unknown;
#endif
}
inline constexpr auto on_unix() noexcept
{
return current_operating_system() == operating_system::os_linux ||
current_operating_system() == operating_system::os_android ||
current_operating_system() == operating_system::os_freebsd;
}
inline constexpr auto on_windows() noexcept
{
return current_operating_system() == operating_system::os_windows;
}
inline constexpr auto on_mac() noexcept
{
return current_operating_system() == operating_system::os_mac;
}
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace detection
{
enum class architecture
{
x86,
x64,
unknown
};
constexpr auto current_architecture() noexcept;
}
}
VRM_CORE_NAMESPACE_END
#if(defined(WIN_32) || defined(__i386__) || defined(i386) || defined(__x86__))
#define VRM_CORE_ARCH_32 1
#elif(defined(__amd64) || defined(__amd64__) || defined(__x86_64) || \
defined(__x86_64__) || defined(_M_X64) || defined(__ia64__) || \
defined(_M_IA64))
#define VRM_CORE_ARCH_64 1
#else
#define VRM_CORE_ARCH_UNKNOWN 1
#endif
VRM_CORE_NAMESPACE
{
namespace detection
{
inline constexpr auto current_architecture() noexcept
{
#if defined(VRM_CORE_ARCH_32)
return architecture::x86;
#elif defined(VRM_CORE_ARCH_64)
return architecture::x64;
#else
return architecture::unknown;
#endif
}
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace detection
{
enum class compiler
{
clang,
gcc,
mscv,
unknown
};
constexpr auto current_compiler() noexcept;
}
}
VRM_CORE_NAMESPACE_END
#if defined(__clang__)
#define VRM_CORE_COMPILER_CLANG 1
#elif defined(__GNUC__)
#define VRM_CORE_COMPILER_GCC 1
#elif defined(_MSC_VER)
#define VRM_CORE_COMPILER_MSCV 1
#else
#define VRM_CORE_COMPILER_UNKNOWN 1
#endif
VRM_CORE_NAMESPACE
{
namespace detection
{
inline constexpr auto current_compiler() noexcept
{
#if defined(VRM_CORE_COMPILER_CLANG)
return compiler::clang;
#elif defined(VRM_CORE_COMPILER_GCC)
return compiler::gcc;
#elif defined(VRM_CORE_COMPILER_MSCV)
return compiler::mscv;
#else
return compiler::unknown;
#endif
}
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace detection
{
constexpr auto debug() noexcept;
}
}
VRM_CORE_NAMESPACE_END
#if !defined(NDEBUG)
#define VRM_CORE_DEBUG 1
#endif
VRM_CORE_NAMESPACE
{
namespace detection
{
inline constexpr auto debug() noexcept
{
#if defined(VRM_CORE_DEBUG)
return true;
#else
return false;
#endif
}
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace detection
{
enum class stdlib
{
libcxx,
libstdcxx,
unknown
};
constexpr auto current_stdlib() noexcept;
}
}
VRM_CORE_NAMESPACE_END
#if defined(_LIBCPP_VERSION)
#define VRM_CORE_STDLIB_LIBCXX 1
#elif defined(__GLIBCXX__)
#define VRM_CORE_STDLIB_LIBSTDCXX 1
#else
#define VRM_CORE_STDLIB_UNKNOWN 1
#endif
VRM_CORE_NAMESPACE
{
namespace detection
{
inline constexpr auto current_stdlib() noexcept
{
#if defined(VRM_CORE_STDLIB_LIBCXX)
return stdlib::libcxx;
#elif defined(VRM_CORE_STDLIB_LIBSTDCXX)
return stdlib::libstdcxx;
#else
return stdlib::unknown;
#endif
}
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace detection
{
constexpr auto rtti() noexcept;
}
}
VRM_CORE_NAMESPACE_END
#if defined(__cpp_rtti) || defined(__GXX_RTTI) || defined(_CPPRTTI)
#define VRM_CORE_RTTI_ENABLED 1
#else
#define VRM_CORE_RTTI_DISABLED 1
#endif
VRM_CORE_NAMESPACE
{
namespace detection
{
inline constexpr auto rtti() noexcept
{
#if defined(VRM_CORE_RTTI_ENABLED)
return true;
#else
return false;
#endif
}
}
}
VRM_CORE_NAMESPACE_END
#define VRM_CORE_INLINE_LIBRARY 1
#if defined(VRM_CORE_INLINE_LIBRARY)
#define VRM_CORE_FN_API inline
#define VRM_CORE_CLASS_API
#elif defined(VRM_CORE_STATIC_LIBRARY)
#define VRM_CORE_FN_API
#define VRM_CORE_CLASS_API
#elif defined(VRM_CORE_EXPORT_LIBRARY)
#define VRM_CORE_FN_API __declspec(dllexport)
#define VRM_CORE_CLASS_API __declspec(dllexport)
#elif defined(VRM_CORE_IMPORT_LIBRARY)
#define VRM_CORE_FN_API __declspec(dllimport)
#define VRM_CORE_CLASS_API __declspec(dllimport)
#endif
#include <utility>
#define VRM_CORE_FWD(...) ::std::forward<decltype(__VA_ARGS__)>(__VA_ARGS__)
#if !defined(VRM_CORE_NO_FWD_MACRO) && !defined(FWD)
#define FWD VRM_CORE_FWD
#endif
#if defined(VRM_CORE_COMPILER_CLANG) || defined(VRM_CORE_COMPILER_GCC)
VRM_CORE_NAMESPACE
{
VRM_CORE_ALWAYS_INLINE constexpr auto likely(bool x) noexcept
{
return __builtin_expect(x, true);
}
VRM_CORE_ALWAYS_INLINE constexpr auto unlikely(bool x) noexcept
{
return __builtin_expect(x, false);
}
}
VRM_CORE_NAMESPACE_END
#else
VRM_CORE_NAMESPACE
{
VRM_CORE_ALWAYS_INLINE constexpr auto likely(bool x) noexcept
{
return x;
}
VRM_CORE_ALWAYS_INLINE constexpr auto unlikely(bool x) noexcept
{
return x;
}
}
VRM_CORE_NAMESPACE_END
#endif
#define VRM_PP_IMPL_DECREMENT_0 0
#define VRM_PP_IMPL_DECREMENT_1 0
#define VRM_PP_IMPL_DECREMENT_2 1
#define VRM_PP_IMPL_DECREMENT_3 2
#define VRM_PP_IMPL_DECREMENT_4 3
#define VRM_PP_IMPL_DECREMENT_5 4
#define VRM_PP_IMPL_DECREMENT_6 5
#define VRM_PP_IMPL_DECREMENT_7 6
#define VRM_PP_IMPL_DECREMENT_8 7
#define VRM_PP_IMPL_DECREMENT_9 8
#define VRM_PP_IMPL_DECREMENT_10 9
#define VRM_PP_IMPL_DECREMENT_11 10
#define VRM_PP_IMPL_DECREMENT_12 11
#define VRM_PP_IMPL_DECREMENT_13 12
#define VRM_PP_IMPL_DECREMENT_14 13
#define VRM_PP_IMPL_DECREMENT_15 14
#define VRM_PP_IMPL_DECREMENT_16 15
#define VRM_PP_IMPL_DECREMENT_17 16
#define VRM_PP_IMPL_DECREMENT_18 17
#define VRM_PP_IMPL_DECREMENT_19 18
#define VRM_PP_IMPL_DECREMENT_20 19
#define VRM_PP_IMPL_DECREMENT_21 20
#define VRM_PP_IMPL_DECREMENT_22 21
#define VRM_PP_IMPL_DECREMENT_23 22
#define VRM_PP_IMPL_DECREMENT_24 23
#define VRM_PP_IMPL_DECREMENT_25 24
#define VRM_PP_IMPL_DECREMENT_26 25
#define VRM_PP_IMPL_DECREMENT_27 26
#define VRM_PP_IMPL_DECREMENT_28 27
#define VRM_PP_IMPL_DECREMENT_29 28
#define VRM_PP_IMPL_DECREMENT_30 29
#define VRM_PP_IMPL_DECREMENT_31 30
#define VRM_PP_IMPL_DECREMENT_32 31
#define VRM_PP_IMPL_DECREMENT_33 32
#define VRM_PP_IMPL_DECREMENT_34 33
#define VRM_PP_IMPL_DECREMENT_35 34
#define VRM_PP_IMPL_DECREMENT_36 35
#define VRM_PP_IMPL_DECREMENT_37 36
#define VRM_PP_IMPL_DECREMENT_38 37
#define VRM_PP_IMPL_DECREMENT_39 38
#define VRM_PP_IMPL_DECREMENT_40 39
#define VRM_PP_IMPL_DECREMENT_41 40
#define VRM_PP_IMPL_DECREMENT_42 41
#define VRM_PP_IMPL_DECREMENT_43 42
#define VRM_PP_IMPL_DECREMENT_44 43
#define VRM_PP_IMPL_DECREMENT_45 44
#define VRM_PP_IMPL_DECREMENT_46 45
#define VRM_PP_IMPL_DECREMENT_47 46
#define VRM_PP_IMPL_DECREMENT_48 47
#define VRM_PP_IMPL_DECREMENT_49 48
#define VRM_PP_IMPL_DECREMENT_50 49
#define VRM_PP_IMPL_DECREMENT_51 50
#define VRM_PP_IMPL_DECREMENT_52 51
#define VRM_PP_IMPL_DECREMENT_53 52
#define VRM_PP_IMPL_DECREMENT_54 53
#define VRM_PP_IMPL_DECREMENT_55 54
#define VRM_PP_IMPL_DECREMENT_56 55
#define VRM_PP_IMPL_DECREMENT_57 56
#define VRM_PP_IMPL_DECREMENT_58 57
#define VRM_PP_IMPL_DECREMENT_59 58
#define VRM_PP_IMPL_DECREMENT_60 59
#define VRM_PP_IMPL_DECREMENT_61 60
#define VRM_PP_IMPL_DECREMENT_62 61
#define VRM_PP_IMPL_DECREMENT_63 62
#define VRM_PP_IMPL_DECREMENT_64 63
#define VRM_PP_IMPL_DECREMENT_65 64
#define VRM_PP_IMPL_DECREMENT_66 65
#define VRM_PP_IMPL_DECREMENT_67 66
#define VRM_PP_IMPL_DECREMENT_68 67
#define VRM_PP_IMPL_DECREMENT_69 68
#define VRM_PP_IMPL_DECREMENT_70 69
#define VRM_PP_IMPL_DECREMENT_71 70
#define VRM_PP_IMPL_DECREMENT_72 71
#define VRM_PP_IMPL_DECREMENT_73 72
#define VRM_PP_IMPL_DECREMENT_74 73
#define VRM_PP_IMPL_DECREMENT_75 74
#define VRM_PP_IMPL_DECREMENT_76 75
#define VRM_PP_IMPL_DECREMENT_77 76
#define VRM_PP_IMPL_DECREMENT_78 77
#define VRM_PP_IMPL_DECREMENT_79 78
#define VRM_PP_IMPL_DECREMENT_80 79
#define VRM_PP_IMPL_DECREMENT_81 80
#define VRM_PP_IMPL_DECREMENT_82 81
#define VRM_PP_IMPL_DECREMENT_83 82
#define VRM_PP_IMPL_DECREMENT_84 83
#define VRM_PP_IMPL_DECREMENT_85 84
#define VRM_PP_IMPL_DECREMENT_86 85
#define VRM_PP_IMPL_DECREMENT_87 86
#define VRM_PP_IMPL_DECREMENT_88 87
#define VRM_PP_IMPL_DECREMENT_89 88
#define VRM_PP_IMPL_DECREMENT_90 89
#define VRM_PP_IMPL_DECREMENT_91 90
#define VRM_PP_IMPL_DECREMENT_92 91
#define VRM_PP_IMPL_DECREMENT_93 92
#define VRM_PP_IMPL_DECREMENT_94 93
#define VRM_PP_IMPL_DECREMENT_95 94
#define VRM_PP_IMPL_DECREMENT_96 95
#define VRM_PP_IMPL_DECREMENT_97 96
#define VRM_PP_IMPL_DECREMENT_98 97
#define VRM_PP_IMPL_DECREMENT_99 98
#define VRM_PP_IMPL_DECREMENT_100 99
#define VRM_PP_IMPL_DECREMENT_101 100
#define VRM_PP_IMPL_DECREMENT_102 101
#define VRM_PP_IMPL_DECREMENT_103 102
#define VRM_PP_IMPL_DECREMENT_104 103
#define VRM_PP_IMPL_DECREMENT_105 104
#define VRM_PP_IMPL_DECREMENT_106 105
#define VRM_PP_IMPL_DECREMENT_107 106
#define VRM_PP_IMPL_DECREMENT_108 107
#define VRM_PP_IMPL_DECREMENT_109 108
#define VRM_PP_IMPL_DECREMENT_110 109
#define VRM_PP_IMPL_DECREMENT_111 110
#define VRM_PP_IMPL_DECREMENT_112 111
#define VRM_PP_IMPL_DECREMENT_113 112
#define VRM_PP_IMPL_DECREMENT_114 113
#define VRM_PP_IMPL_DECREMENT_115 114
#define VRM_PP_IMPL_DECREMENT_116 115
#define VRM_PP_IMPL_DECREMENT_117 116
#define VRM_PP_IMPL_DECREMENT_118 117
#define VRM_PP_IMPL_DECREMENT_119 118
#define VRM_PP_IMPL_DECREMENT_120 119
#define VRM_PP_IMPL_DECREMENT_121 120
#define VRM_PP_IMPL_DECREMENT_122 121
#define VRM_PP_IMPL_DECREMENT_123 122
#define VRM_PP_IMPL_DECREMENT_124 123
#define VRM_PP_IMPL_DECREMENT_125 124
#define VRM_PP_IMPL_DECREMENT_126 125
#define VRM_PP_IMPL_DECREMENT_127 126
#define VRM_PP_IMPL_DECREMENT_128 127
#define VRM_PP_IMPL_DECREMENT_129 128
#define VRM_PP_IMPL_DECREMENT_130 129
#define VRM_PP_IMPL_DECREMENT_131 130
#define VRM_PP_IMPL_DECREMENT_132 131
#define VRM_PP_IMPL_DECREMENT_133 132
#define VRM_PP_IMPL_DECREMENT_134 133
#define VRM_PP_IMPL_DECREMENT_135 134
#define VRM_PP_IMPL_DECREMENT_136 135
#define VRM_PP_IMPL_DECREMENT_137 136
#define VRM_PP_IMPL_DECREMENT_138 137
#define VRM_PP_IMPL_DECREMENT_139 138
#define VRM_PP_IMPL_DECREMENT_140 139
#define VRM_PP_IMPL_DECREMENT_141 140
#define VRM_PP_IMPL_DECREMENT_142 141
#define VRM_PP_IMPL_DECREMENT_143 142
#define VRM_PP_IMPL_DECREMENT_144 143
#define VRM_PP_IMPL_DECREMENT_145 144
#define VRM_PP_IMPL_DECREMENT_146 145
#define VRM_PP_IMPL_DECREMENT_147 146
#define VRM_PP_IMPL_DECREMENT_148 147
#define VRM_PP_IMPL_DECREMENT_149 148
#define VRM_PP_IMPL_DECREMENT_150 149
#define VRM_PP_IMPL_DECREMENT_151 150
#define VRM_PP_IMPL_DECREMENT_152 151
#define VRM_PP_IMPL_DECREMENT_153 152
#define VRM_PP_IMPL_DECREMENT_154 153
#define VRM_PP_IMPL_DECREMENT_155 154
#define VRM_PP_IMPL_DECREMENT_156 155
#define VRM_PP_IMPL_DECREMENT_157 156
#define VRM_PP_IMPL_DECREMENT_158 157
#define VRM_PP_IMPL_DECREMENT_159 158
#define VRM_PP_IMPL_DECREMENT_160 159
#define VRM_PP_IMPL_DECREMENT_161 160
#define VRM_PP_IMPL_DECREMENT_162 161
#define VRM_PP_IMPL_DECREMENT_163 162
#define VRM_PP_IMPL_DECREMENT_164 163
#define VRM_PP_IMPL_DECREMENT_165 164
#define VRM_PP_IMPL_DECREMENT_166 165
#define VRM_PP_IMPL_DECREMENT_167 166
#define VRM_PP_IMPL_DECREMENT_168 167
#define VRM_PP_IMPL_DECREMENT_169 168
#define VRM_PP_IMPL_DECREMENT_170 169
#define VRM_PP_IMPL_DECREMENT_171 170
#define VRM_PP_IMPL_DECREMENT_172 171
#define VRM_PP_IMPL_DECREMENT_173 172
#define VRM_PP_IMPL_DECREMENT_174 173
#define VRM_PP_IMPL_DECREMENT_175 174
#define VRM_PP_IMPL_DECREMENT_176 175
#define VRM_PP_IMPL_DECREMENT_177 176
#define VRM_PP_IMPL_DECREMENT_178 177
#define VRM_PP_IMPL_DECREMENT_179 178
#define VRM_PP_IMPL_DECREMENT_180 179
#define VRM_PP_IMPL_DECREMENT_181 180
#define VRM_PP_IMPL_DECREMENT_182 181
#define VRM_PP_IMPL_DECREMENT_183 182
#define VRM_PP_IMPL_DECREMENT_184 183
#define VRM_PP_IMPL_DECREMENT_185 184
#define VRM_PP_IMPL_DECREMENT_186 185
#define VRM_PP_IMPL_DECREMENT_187 186
#define VRM_PP_IMPL_DECREMENT_188 187
#define VRM_PP_IMPL_DECREMENT_189 188
#define VRM_PP_IMPL_DECREMENT_190 189
#define VRM_PP_IMPL_DECREMENT_191 190
#define VRM_PP_IMPL_DECREMENT_192 191
#define VRM_PP_IMPL_DECREMENT_193 192
#define VRM_PP_IMPL_DECREMENT_194 193
#define VRM_PP_IMPL_DECREMENT_195 194
#define VRM_PP_IMPL_DECREMENT_196 195
#define VRM_PP_IMPL_DECREMENT_197 196
#define VRM_PP_IMPL_DECREMENT_198 197
#define VRM_PP_IMPL_DECREMENT_199 198
#define VRM_PP_IMPL_DECREMENT_200 199
#define VRM_PP_IMPL_DECREMENT_201 200
#define VRM_PP_IMPL_DECREMENT_202 201
#define VRM_PP_IMPL_DECREMENT_203 202
#define VRM_PP_IMPL_DECREMENT_204 203
#define VRM_PP_IMPL_DECREMENT_205 204
#define VRM_PP_IMPL_DECREMENT_206 205
#define VRM_PP_IMPL_DECREMENT_207 206
#define VRM_PP_IMPL_DECREMENT_208 207
#define VRM_PP_IMPL_DECREMENT_209 208
#define VRM_PP_IMPL_DECREMENT_210 209
#define VRM_PP_IMPL_DECREMENT_211 210
#define VRM_PP_IMPL_DECREMENT_212 211
#define VRM_PP_IMPL_DECREMENT_213 212
#define VRM_PP_IMPL_DECREMENT_214 213
#define VRM_PP_IMPL_DECREMENT_215 214
#define VRM_PP_IMPL_DECREMENT_216 215
#define VRM_PP_IMPL_DECREMENT_217 216
#define VRM_PP_IMPL_DECREMENT_218 217
#define VRM_PP_IMPL_DECREMENT_219 218
#define VRM_PP_IMPL_DECREMENT_220 219
#define VRM_PP_IMPL_DECREMENT_221 220
#define VRM_PP_IMPL_DECREMENT_222 221
#define VRM_PP_IMPL_DECREMENT_223 222
#define VRM_PP_IMPL_DECREMENT_224 223
#define VRM_PP_IMPL_DECREMENT_225 224
#define VRM_PP_IMPL_DECREMENT_226 225
#define VRM_PP_IMPL_DECREMENT_227 226
#define VRM_PP_IMPL_DECREMENT_228 227
#define VRM_PP_IMPL_DECREMENT_229 228
#define VRM_PP_IMPL_DECREMENT_230 229
#define VRM_PP_IMPL_DECREMENT_231 230
#define VRM_PP_IMPL_DECREMENT_232 231
#define VRM_PP_IMPL_DECREMENT_233 232
#define VRM_PP_IMPL_DECREMENT_234 233
#define VRM_PP_IMPL_DECREMENT_235 234
#define VRM_PP_IMPL_DECREMENT_236 235
#define VRM_PP_IMPL_DECREMENT_237 236
#define VRM_PP_IMPL_DECREMENT_238 237
#define VRM_PP_IMPL_DECREMENT_239 238
#define VRM_PP_IMPL_DECREMENT_240 239
#define VRM_PP_IMPL_DECREMENT_241 240
#define VRM_PP_IMPL_DECREMENT_242 241
#define VRM_PP_IMPL_DECREMENT_243 242
#define VRM_PP_IMPL_DECREMENT_244 243
#define VRM_PP_IMPL_DECREMENT_245 244
#define VRM_PP_IMPL_DECREMENT_246 245
#define VRM_PP_IMPL_DECREMENT_247 246
#define VRM_PP_IMPL_DECREMENT_248 247
#define VRM_PP_IMPL_DECREMENT_249 248
#define VRM_PP_IMPL_DECREMENT_250 249
#define VRM_PP_IMPL_DECREMENT_251 250
#define VRM_PP_IMPL_DECREMENT_252 251
#define VRM_PP_IMPL_DECREMENT_253 252
#define VRM_PP_IMPL_DECREMENT_254 253
#define VRM_PP_IMPL_DECREMENT_255 254
#define VRM_PP_IMPL_INCREMENT_0 1
#define VRM_PP_IMPL_INCREMENT_1 2
#define VRM_PP_IMPL_INCREMENT_2 3
#define VRM_PP_IMPL_INCREMENT_3 4
#define VRM_PP_IMPL_INCREMENT_4 5
#define VRM_PP_IMPL_INCREMENT_5 6
#define VRM_PP_IMPL_INCREMENT_6 7
#define VRM_PP_IMPL_INCREMENT_7 8
#define VRM_PP_IMPL_INCREMENT_8 9
#define VRM_PP_IMPL_INCREMENT_9 10
#define VRM_PP_IMPL_INCREMENT_10 11
#define VRM_PP_IMPL_INCREMENT_11 12
#define VRM_PP_IMPL_INCREMENT_12 13
#define VRM_PP_IMPL_INCREMENT_13 14
#define VRM_PP_IMPL_INCREMENT_14 15
#define VRM_PP_IMPL_INCREMENT_15 16
#define VRM_PP_IMPL_INCREMENT_16 17
#define VRM_PP_IMPL_INCREMENT_17 18
#define VRM_PP_IMPL_INCREMENT_18 19
#define VRM_PP_IMPL_INCREMENT_19 20
#define VRM_PP_IMPL_INCREMENT_20 21
#define VRM_PP_IMPL_INCREMENT_21 22
#define VRM_PP_IMPL_INCREMENT_22 23
#define VRM_PP_IMPL_INCREMENT_23 24
#define VRM_PP_IMPL_INCREMENT_24 25
#define VRM_PP_IMPL_INCREMENT_25 26
#define VRM_PP_IMPL_INCREMENT_26 27
#define VRM_PP_IMPL_INCREMENT_27 28
#define VRM_PP_IMPL_INCREMENT_28 29
#define VRM_PP_IMPL_INCREMENT_29 30
#define VRM_PP_IMPL_INCREMENT_30 31
#define VRM_PP_IMPL_INCREMENT_31 32
#define VRM_PP_IMPL_INCREMENT_32 33
#define VRM_PP_IMPL_INCREMENT_33 34
#define VRM_PP_IMPL_INCREMENT_34 35
#define VRM_PP_IMPL_INCREMENT_35 36
#define VRM_PP_IMPL_INCREMENT_36 37
#define VRM_PP_IMPL_INCREMENT_37 38
#define VRM_PP_IMPL_INCREMENT_38 39
#define VRM_PP_IMPL_INCREMENT_39 40
#define VRM_PP_IMPL_INCREMENT_40 41
#define VRM_PP_IMPL_INCREMENT_41 42
#define VRM_PP_IMPL_INCREMENT_42 43
#define VRM_PP_IMPL_INCREMENT_43 44
#define VRM_PP_IMPL_INCREMENT_44 45
#define VRM_PP_IMPL_INCREMENT_45 46
#define VRM_PP_IMPL_INCREMENT_46 47
#define VRM_PP_IMPL_INCREMENT_47 48
#define VRM_PP_IMPL_INCREMENT_48 49
#define VRM_PP_IMPL_INCREMENT_49 50
#define VRM_PP_IMPL_INCREMENT_50 51
#define VRM_PP_IMPL_INCREMENT_51 52
#define VRM_PP_IMPL_INCREMENT_52 53
#define VRM_PP_IMPL_INCREMENT_53 54
#define VRM_PP_IMPL_INCREMENT_54 55
#define VRM_PP_IMPL_INCREMENT_55 56
#define VRM_PP_IMPL_INCREMENT_56 57
#define VRM_PP_IMPL_INCREMENT_57 58
#define VRM_PP_IMPL_INCREMENT_58 59
#define VRM_PP_IMPL_INCREMENT_59 60
#define VRM_PP_IMPL_INCREMENT_60 61
#define VRM_PP_IMPL_INCREMENT_61 62
#define VRM_PP_IMPL_INCREMENT_62 63
#define VRM_PP_IMPL_INCREMENT_63 64
#define VRM_PP_IMPL_INCREMENT_64 65
#define VRM_PP_IMPL_INCREMENT_65 66
#define VRM_PP_IMPL_INCREMENT_66 67
#define VRM_PP_IMPL_INCREMENT_67 68
#define VRM_PP_IMPL_INCREMENT_68 69
#define VRM_PP_IMPL_INCREMENT_69 70
#define VRM_PP_IMPL_INCREMENT_70 71
#define VRM_PP_IMPL_INCREMENT_71 72
#define VRM_PP_IMPL_INCREMENT_72 73
#define VRM_PP_IMPL_INCREMENT_73 74
#define VRM_PP_IMPL_INCREMENT_74 75
#define VRM_PP_IMPL_INCREMENT_75 76
#define VRM_PP_IMPL_INCREMENT_76 77
#define VRM_PP_IMPL_INCREMENT_77 78
#define VRM_PP_IMPL_INCREMENT_78 79
#define VRM_PP_IMPL_INCREMENT_79 80
#define VRM_PP_IMPL_INCREMENT_80 81
#define VRM_PP_IMPL_INCREMENT_81 82
#define VRM_PP_IMPL_INCREMENT_82 83
#define VRM_PP_IMPL_INCREMENT_83 84
#define VRM_PP_IMPL_INCREMENT_84 85
#define VRM_PP_IMPL_INCREMENT_85 86
#define VRM_PP_IMPL_INCREMENT_86 87
#define VRM_PP_IMPL_INCREMENT_87 88
#define VRM_PP_IMPL_INCREMENT_88 89
#define VRM_PP_IMPL_INCREMENT_89 90
#define VRM_PP_IMPL_INCREMENT_90 91
#define VRM_PP_IMPL_INCREMENT_91 92
#define VRM_PP_IMPL_INCREMENT_92 93
#define VRM_PP_IMPL_INCREMENT_93 94
#define VRM_PP_IMPL_INCREMENT_94 95
#define VRM_PP_IMPL_INCREMENT_95 96
#define VRM_PP_IMPL_INCREMENT_96 97
#define VRM_PP_IMPL_INCREMENT_97 98
#define VRM_PP_IMPL_INCREMENT_98 99
#define VRM_PP_IMPL_INCREMENT_99 100
#define VRM_PP_IMPL_INCREMENT_100 101
#define VRM_PP_IMPL_INCREMENT_101 102
#define VRM_PP_IMPL_INCREMENT_102 103
#define VRM_PP_IMPL_INCREMENT_103 104
#define VRM_PP_IMPL_INCREMENT_104 105
#define VRM_PP_IMPL_INCREMENT_105 106
#define VRM_PP_IMPL_INCREMENT_106 107
#define VRM_PP_IMPL_INCREMENT_107 108
#define VRM_PP_IMPL_INCREMENT_108 109
#define VRM_PP_IMPL_INCREMENT_109 110
#define VRM_PP_IMPL_INCREMENT_110 111
#define VRM_PP_IMPL_INCREMENT_111 112
#define VRM_PP_IMPL_INCREMENT_112 113
#define VRM_PP_IMPL_INCREMENT_113 114
#define VRM_PP_IMPL_INCREMENT_114 115
#define VRM_PP_IMPL_INCREMENT_115 116
#define VRM_PP_IMPL_INCREMENT_116 117
#define VRM_PP_IMPL_INCREMENT_117 118
#define VRM_PP_IMPL_INCREMENT_118 119
#define VRM_PP_IMPL_INCREMENT_119 120
#define VRM_PP_IMPL_INCREMENT_120 121
#define VRM_PP_IMPL_INCREMENT_121 122
#define VRM_PP_IMPL_INCREMENT_122 123
#define VRM_PP_IMPL_INCREMENT_123 124
#define VRM_PP_IMPL_INCREMENT_124 125
#define VRM_PP_IMPL_INCREMENT_125 126
#define VRM_PP_IMPL_INCREMENT_126 127
#define VRM_PP_IMPL_INCREMENT_127 128
#define VRM_PP_IMPL_INCREMENT_128 129
#define VRM_PP_IMPL_INCREMENT_129 130
#define VRM_PP_IMPL_INCREMENT_130 131
#define VRM_PP_IMPL_INCREMENT_131 132
#define VRM_PP_IMPL_INCREMENT_132 133
#define VRM_PP_IMPL_INCREMENT_133 134
#define VRM_PP_IMPL_INCREMENT_134 135
#define VRM_PP_IMPL_INCREMENT_135 136
#define VRM_PP_IMPL_INCREMENT_136 137
#define VRM_PP_IMPL_INCREMENT_137 138
#define VRM_PP_IMPL_INCREMENT_138 139
#define VRM_PP_IMPL_INCREMENT_139 140
#define VRM_PP_IMPL_INCREMENT_140 141
#define VRM_PP_IMPL_INCREMENT_141 142
#define VRM_PP_IMPL_INCREMENT_142 143
#define VRM_PP_IMPL_INCREMENT_143 144
#define VRM_PP_IMPL_INCREMENT_144 145
#define VRM_PP_IMPL_INCREMENT_145 146
#define VRM_PP_IMPL_INCREMENT_146 147
#define VRM_PP_IMPL_INCREMENT_147 148
#define VRM_PP_IMPL_INCREMENT_148 149
#define VRM_PP_IMPL_INCREMENT_149 150
#define VRM_PP_IMPL_INCREMENT_150 151
#define VRM_PP_IMPL_INCREMENT_151 152
#define VRM_PP_IMPL_INCREMENT_152 153
#define VRM_PP_IMPL_INCREMENT_153 154
#define VRM_PP_IMPL_INCREMENT_154 155
#define VRM_PP_IMPL_INCREMENT_155 156
#define VRM_PP_IMPL_INCREMENT_156 157
#define VRM_PP_IMPL_INCREMENT_157 158
#define VRM_PP_IMPL_INCREMENT_158 159
#define VRM_PP_IMPL_INCREMENT_159 160
#define VRM_PP_IMPL_INCREMENT_160 161
#define VRM_PP_IMPL_INCREMENT_161 162
#define VRM_PP_IMPL_INCREMENT_162 163
#define VRM_PP_IMPL_INCREMENT_163 164
#define VRM_PP_IMPL_INCREMENT_164 165
#define VRM_PP_IMPL_INCREMENT_165 166
#define VRM_PP_IMPL_INCREMENT_166 167
#define VRM_PP_IMPL_INCREMENT_167 168
#define VRM_PP_IMPL_INCREMENT_168 169
#define VRM_PP_IMPL_INCREMENT_169 170
#define VRM_PP_IMPL_INCREMENT_170 171
#define VRM_PP_IMPL_INCREMENT_171 172
#define VRM_PP_IMPL_INCREMENT_172 173
#define VRM_PP_IMPL_INCREMENT_173 174
#define VRM_PP_IMPL_INCREMENT_174 175
#define VRM_PP_IMPL_INCREMENT_175 176
#define VRM_PP_IMPL_INCREMENT_176 177
#define VRM_PP_IMPL_INCREMENT_177 178
#define VRM_PP_IMPL_INCREMENT_178 179
#define VRM_PP_IMPL_INCREMENT_179 180
#define VRM_PP_IMPL_INCREMENT_180 181
#define VRM_PP_IMPL_INCREMENT_181 182
#define VRM_PP_IMPL_INCREMENT_182 183
#define VRM_PP_IMPL_INCREMENT_183 184
#define VRM_PP_IMPL_INCREMENT_184 185
#define VRM_PP_IMPL_INCREMENT_185 186
#define VRM_PP_IMPL_INCREMENT_186 187
#define VRM_PP_IMPL_INCREMENT_187 188
#define VRM_PP_IMPL_INCREMENT_188 189
#define VRM_PP_IMPL_INCREMENT_189 190
#define VRM_PP_IMPL_INCREMENT_190 191
#define VRM_PP_IMPL_INCREMENT_191 192
#define VRM_PP_IMPL_INCREMENT_192 193
#define VRM_PP_IMPL_INCREMENT_193 194
#define VRM_PP_IMPL_INCREMENT_194 195
#define VRM_PP_IMPL_INCREMENT_195 196
#define VRM_PP_IMPL_INCREMENT_196 197
#define VRM_PP_IMPL_INCREMENT_197 198
#define VRM_PP_IMPL_INCREMENT_198 199
#define VRM_PP_IMPL_INCREMENT_199 200
#define VRM_PP_IMPL_INCREMENT_200 201
#define VRM_PP_IMPL_INCREMENT_201 202
#define VRM_PP_IMPL_INCREMENT_202 203
#define VRM_PP_IMPL_INCREMENT_203 204
#define VRM_PP_IMPL_INCREMENT_204 205
#define VRM_PP_IMPL_INCREMENT_205 206
#define VRM_PP_IMPL_INCREMENT_206 207
#define VRM_PP_IMPL_INCREMENT_207 208
#define VRM_PP_IMPL_INCREMENT_208 209
#define VRM_PP_IMPL_INCREMENT_209 210
#define VRM_PP_IMPL_INCREMENT_210 211
#define VRM_PP_IMPL_INCREMENT_211 212
#define VRM_PP_IMPL_INCREMENT_212 213
#define VRM_PP_IMPL_INCREMENT_213 214
#define VRM_PP_IMPL_INCREMENT_214 215
#define VRM_PP_IMPL_INCREMENT_215 216
#define VRM_PP_IMPL_INCREMENT_216 217
#define VRM_PP_IMPL_INCREMENT_217 218
#define VRM_PP_IMPL_INCREMENT_218 219
#define VRM_PP_IMPL_INCREMENT_219 220
#define VRM_PP_IMPL_INCREMENT_220 221
#define VRM_PP_IMPL_INCREMENT_221 222
#define VRM_PP_IMPL_INCREMENT_222 223
#define VRM_PP_IMPL_INCREMENT_223 224
#define VRM_PP_IMPL_INCREMENT_224 225
#define VRM_PP_IMPL_INCREMENT_225 226
#define VRM_PP_IMPL_INCREMENT_226 227
#define VRM_PP_IMPL_INCREMENT_227 228
#define VRM_PP_IMPL_INCREMENT_228 229
#define VRM_PP_IMPL_INCREMENT_229 230
#define VRM_PP_IMPL_INCREMENT_230 231
#define VRM_PP_IMPL_INCREMENT_231 232
#define VRM_PP_IMPL_INCREMENT_232 233
#define VRM_PP_IMPL_INCREMENT_233 234
#define VRM_PP_IMPL_INCREMENT_234 235
#define VRM_PP_IMPL_INCREMENT_235 236
#define VRM_PP_IMPL_INCREMENT_236 237
#define VRM_PP_IMPL_INCREMENT_237 238
#define VRM_PP_IMPL_INCREMENT_238 239
#define VRM_PP_IMPL_INCREMENT_239 240
#define VRM_PP_IMPL_INCREMENT_240 241
#define VRM_PP_IMPL_INCREMENT_241 242
#define VRM_PP_IMPL_INCREMENT_242 243
#define VRM_PP_IMPL_INCREMENT_243 244
#define VRM_PP_IMPL_INCREMENT_244 245
#define VRM_PP_IMPL_INCREMENT_245 246
#define VRM_PP_IMPL_INCREMENT_246 247
#define VRM_PP_IMPL_INCREMENT_247 248
#define VRM_PP_IMPL_INCREMENT_248 249
#define VRM_PP_IMPL_INCREMENT_249 250
#define VRM_PP_IMPL_INCREMENT_250 251
#define VRM_PP_IMPL_INCREMENT_251 252
#define VRM_PP_IMPL_INCREMENT_252 253
#define VRM_PP_IMPL_INCREMENT_253 254
#define VRM_PP_IMPL_INCREMENT_254 255
#define VRM_PP_IMPL_INCREMENT_255 256
#define VRM_PP_IMPL_INCREMENT_256 256
#define VRM_PP_IMPL_BOOL_0 0
#define VRM_PP_IMPL_BOOL_1 1
#define VRM_PP_IMPL_BOOL_2 1
#define VRM_PP_IMPL_BOOL_3 1
#define VRM_PP_IMPL_BOOL_4 1
#define VRM_PP_IMPL_BOOL_5 1
#define VRM_PP_IMPL_BOOL_6 1
#define VRM_PP_IMPL_BOOL_7 1
#define VRM_PP_IMPL_BOOL_8 1
#define VRM_PP_IMPL_BOOL_9 1
#define VRM_PP_IMPL_BOOL_10 1
#define VRM_PP_IMPL_BOOL_11 1
#define VRM_PP_IMPL_BOOL_12 1
#define VRM_PP_IMPL_BOOL_13 1
#define VRM_PP_IMPL_BOOL_14 1
#define VRM_PP_IMPL_BOOL_15 1
#define VRM_PP_IMPL_BOOL_16 1
#define VRM_PP_IMPL_BOOL_17 1
#define VRM_PP_IMPL_BOOL_18 1
#define VRM_PP_IMPL_BOOL_19 1
#define VRM_PP_IMPL_BOOL_20 1
#define VRM_PP_IMPL_BOOL_21 1
#define VRM_PP_IMPL_BOOL_22 1
#define VRM_PP_IMPL_BOOL_23 1
#define VRM_PP_IMPL_BOOL_24 1
#define VRM_PP_IMPL_BOOL_25 1
#define VRM_PP_IMPL_BOOL_26 1
#define VRM_PP_IMPL_BOOL_27 1
#define VRM_PP_IMPL_BOOL_28 1
#define VRM_PP_IMPL_BOOL_29 1
#define VRM_PP_IMPL_BOOL_30 1
#define VRM_PP_IMPL_BOOL_31 1
#define VRM_PP_IMPL_BOOL_32 1
#define VRM_PP_IMPL_BOOL_33 1
#define VRM_PP_IMPL_BOOL_34 1
#define VRM_PP_IMPL_BOOL_35 1
#define VRM_PP_IMPL_BOOL_36 1
#define VRM_PP_IMPL_BOOL_37 1
#define VRM_PP_IMPL_BOOL_38 1
#define VRM_PP_IMPL_BOOL_39 1
#define VRM_PP_IMPL_BOOL_40 1
#define VRM_PP_IMPL_BOOL_41 1
#define VRM_PP_IMPL_BOOL_42 1
#define VRM_PP_IMPL_BOOL_43 1
#define VRM_PP_IMPL_BOOL_44 1
#define VRM_PP_IMPL_BOOL_45 1
#define VRM_PP_IMPL_BOOL_46 1
#define VRM_PP_IMPL_BOOL_47 1
#define VRM_PP_IMPL_BOOL_48 1
#define VRM_PP_IMPL_BOOL_49 1
#define VRM_PP_IMPL_BOOL_50 1
#define VRM_PP_IMPL_BOOL_51 1
#define VRM_PP_IMPL_BOOL_52 1
#define VRM_PP_IMPL_BOOL_53 1
#define VRM_PP_IMPL_BOOL_54 1
#define VRM_PP_IMPL_BOOL_55 1
#define VRM_PP_IMPL_BOOL_56 1
#define VRM_PP_IMPL_BOOL_57 1
#define VRM_PP_IMPL_BOOL_58 1
#define VRM_PP_IMPL_BOOL_59 1
#define VRM_PP_IMPL_BOOL_60 1
#define VRM_PP_IMPL_BOOL_61 1
#define VRM_PP_IMPL_BOOL_62 1
#define VRM_PP_IMPL_BOOL_63 1
#define VRM_PP_IMPL_BOOL_64 1
#define VRM_PP_IMPL_BOOL_65 1
#define VRM_PP_IMPL_BOOL_66 1
#define VRM_PP_IMPL_BOOL_67 1
#define VRM_PP_IMPL_BOOL_68 1
#define VRM_PP_IMPL_BOOL_69 1
#define VRM_PP_IMPL_BOOL_70 1
#define VRM_PP_IMPL_BOOL_71 1
#define VRM_PP_IMPL_BOOL_72 1
#define VRM_PP_IMPL_BOOL_73 1
#define VRM_PP_IMPL_BOOL_74 1
#define VRM_PP_IMPL_BOOL_75 1
#define VRM_PP_IMPL_BOOL_76 1
#define VRM_PP_IMPL_BOOL_77 1
#define VRM_PP_IMPL_BOOL_78 1
#define VRM_PP_IMPL_BOOL_79 1
#define VRM_PP_IMPL_BOOL_80 1
#define VRM_PP_IMPL_BOOL_81 1
#define VRM_PP_IMPL_BOOL_82 1
#define VRM_PP_IMPL_BOOL_83 1
#define VRM_PP_IMPL_BOOL_84 1
#define VRM_PP_IMPL_BOOL_85 1
#define VRM_PP_IMPL_BOOL_86 1
#define VRM_PP_IMPL_BOOL_87 1
#define VRM_PP_IMPL_BOOL_88 1
#define VRM_PP_IMPL_BOOL_89 1
#define VRM_PP_IMPL_BOOL_90 1
#define VRM_PP_IMPL_BOOL_91 1
#define VRM_PP_IMPL_BOOL_92 1
#define VRM_PP_IMPL_BOOL_93 1
#define VRM_PP_IMPL_BOOL_94 1
#define VRM_PP_IMPL_BOOL_95 1
#define VRM_PP_IMPL_BOOL_96 1
#define VRM_PP_IMPL_BOOL_97 1
#define VRM_PP_IMPL_BOOL_98 1
#define VRM_PP_IMPL_BOOL_99 1
#define VRM_PP_IMPL_BOOL_100 1
#define VRM_PP_IMPL_BOOL_101 1
#define VRM_PP_IMPL_BOOL_102 1
#define VRM_PP_IMPL_BOOL_103 1
#define VRM_PP_IMPL_BOOL_104 1
#define VRM_PP_IMPL_BOOL_105 1
#define VRM_PP_IMPL_BOOL_106 1
#define VRM_PP_IMPL_BOOL_107 1
#define VRM_PP_IMPL_BOOL_108 1
#define VRM_PP_IMPL_BOOL_109 1
#define VRM_PP_IMPL_BOOL_110 1
#define VRM_PP_IMPL_BOOL_111 1
#define VRM_PP_IMPL_BOOL_112 1
#define VRM_PP_IMPL_BOOL_113 1
#define VRM_PP_IMPL_BOOL_114 1
#define VRM_PP_IMPL_BOOL_115 1
#define VRM_PP_IMPL_BOOL_116 1
#define VRM_PP_IMPL_BOOL_117 1
#define VRM_PP_IMPL_BOOL_118 1
#define VRM_PP_IMPL_BOOL_119 1
#define VRM_PP_IMPL_BOOL_120 1
#define VRM_PP_IMPL_BOOL_121 1
#define VRM_PP_IMPL_BOOL_122 1
#define VRM_PP_IMPL_BOOL_123 1
#define VRM_PP_IMPL_BOOL_124 1
#define VRM_PP_IMPL_BOOL_125 1
#define VRM_PP_IMPL_BOOL_126 1
#define VRM_PP_IMPL_BOOL_127 1
#define VRM_PP_IMPL_BOOL_128 1
#define VRM_PP_IMPL_BOOL_129 1
#define VRM_PP_IMPL_BOOL_130 1
#define VRM_PP_IMPL_BOOL_131 1
#define VRM_PP_IMPL_BOOL_132 1
#define VRM_PP_IMPL_BOOL_133 1
#define VRM_PP_IMPL_BOOL_134 1
#define VRM_PP_IMPL_BOOL_135 1
#define VRM_PP_IMPL_BOOL_136 1
#define VRM_PP_IMPL_BOOL_137 1
#define VRM_PP_IMPL_BOOL_138 1
#define VRM_PP_IMPL_BOOL_139 1
#define VRM_PP_IMPL_BOOL_140 1
#define VRM_PP_IMPL_BOOL_141 1
#define VRM_PP_IMPL_BOOL_142 1
#define VRM_PP_IMPL_BOOL_143 1
#define VRM_PP_IMPL_BOOL_144 1
#define VRM_PP_IMPL_BOOL_145 1
#define VRM_PP_IMPL_BOOL_146 1
#define VRM_PP_IMPL_BOOL_147 1
#define VRM_PP_IMPL_BOOL_148 1
#define VRM_PP_IMPL_BOOL_149 1
#define VRM_PP_IMPL_BOOL_150 1
#define VRM_PP_IMPL_BOOL_151 1
#define VRM_PP_IMPL_BOOL_152 1
#define VRM_PP_IMPL_BOOL_153 1
#define VRM_PP_IMPL_BOOL_154 1
#define VRM_PP_IMPL_BOOL_155 1
#define VRM_PP_IMPL_BOOL_156 1
#define VRM_PP_IMPL_BOOL_157 1
#define VRM_PP_IMPL_BOOL_158 1
#define VRM_PP_IMPL_BOOL_159 1
#define VRM_PP_IMPL_BOOL_160 1
#define VRM_PP_IMPL_BOOL_161 1
#define VRM_PP_IMPL_BOOL_162 1
#define VRM_PP_IMPL_BOOL_163 1
#define VRM_PP_IMPL_BOOL_164 1
#define VRM_PP_IMPL_BOOL_165 1
#define VRM_PP_IMPL_BOOL_166 1
#define VRM_PP_IMPL_BOOL_167 1
#define VRM_PP_IMPL_BOOL_168 1
#define VRM_PP_IMPL_BOOL_169 1
#define VRM_PP_IMPL_BOOL_170 1
#define VRM_PP_IMPL_BOOL_171 1
#define VRM_PP_IMPL_BOOL_172 1
#define VRM_PP_IMPL_BOOL_173 1
#define VRM_PP_IMPL_BOOL_174 1
#define VRM_PP_IMPL_BOOL_175 1
#define VRM_PP_IMPL_BOOL_176 1
#define VRM_PP_IMPL_BOOL_177 1
#define VRM_PP_IMPL_BOOL_178 1
#define VRM_PP_IMPL_BOOL_179 1
#define VRM_PP_IMPL_BOOL_180 1
#define VRM_PP_IMPL_BOOL_181 1
#define VRM_PP_IMPL_BOOL_182 1
#define VRM_PP_IMPL_BOOL_183 1
#define VRM_PP_IMPL_BOOL_184 1
#define VRM_PP_IMPL_BOOL_185 1
#define VRM_PP_IMPL_BOOL_186 1
#define VRM_PP_IMPL_BOOL_187 1
#define VRM_PP_IMPL_BOOL_188 1
#define VRM_PP_IMPL_BOOL_189 1
#define VRM_PP_IMPL_BOOL_190 1
#define VRM_PP_IMPL_BOOL_191 1
#define VRM_PP_IMPL_BOOL_192 1
#define VRM_PP_IMPL_BOOL_193 1
#define VRM_PP_IMPL_BOOL_194 1
#define VRM_PP_IMPL_BOOL_195 1
#define VRM_PP_IMPL_BOOL_196 1
#define VRM_PP_IMPL_BOOL_197 1
#define VRM_PP_IMPL_BOOL_198 1
#define VRM_PP_IMPL_BOOL_199 1
#define VRM_PP_IMPL_BOOL_200 1
#define VRM_PP_IMPL_BOOL_201 1
#define VRM_PP_IMPL_BOOL_202 1
#define VRM_PP_IMPL_BOOL_203 1
#define VRM_PP_IMPL_BOOL_204 1
#define VRM_PP_IMPL_BOOL_205 1
#define VRM_PP_IMPL_BOOL_206 1
#define VRM_PP_IMPL_BOOL_207 1
#define VRM_PP_IMPL_BOOL_208 1
#define VRM_PP_IMPL_BOOL_209 1
#define VRM_PP_IMPL_BOOL_210 1
#define VRM_PP_IMPL_BOOL_211 1
#define VRM_PP_IMPL_BOOL_212 1
#define VRM_PP_IMPL_BOOL_213 1
#define VRM_PP_IMPL_BOOL_214 1
#define VRM_PP_IMPL_BOOL_215 1
#define VRM_PP_IMPL_BOOL_216 1
#define VRM_PP_IMPL_BOOL_217 1
#define VRM_PP_IMPL_BOOL_218 1
#define VRM_PP_IMPL_BOOL_219 1
#define VRM_PP_IMPL_BOOL_220 1
#define VRM_PP_IMPL_BOOL_221 1
#define VRM_PP_IMPL_BOOL_222 1
#define VRM_PP_IMPL_BOOL_223 1
#define VRM_PP_IMPL_BOOL_224 1
#define VRM_PP_IMPL_BOOL_225 1
#define VRM_PP_IMPL_BOOL_226 1
#define VRM_PP_IMPL_BOOL_227 1
#define VRM_PP_IMPL_BOOL_228 1
#define VRM_PP_IMPL_BOOL_229 1
#define VRM_PP_IMPL_BOOL_230 1
#define VRM_PP_IMPL_BOOL_231 1
#define VRM_PP_IMPL_BOOL_232 1
#define VRM_PP_IMPL_BOOL_233 1
#define VRM_PP_IMPL_BOOL_234 1
#define VRM_PP_IMPL_BOOL_235 1
#define VRM_PP_IMPL_BOOL_236 1
#define VRM_PP_IMPL_BOOL_237 1
#define VRM_PP_IMPL_BOOL_238 1
#define VRM_PP_IMPL_BOOL_239 1
#define VRM_PP_IMPL_BOOL_240 1
#define VRM_PP_IMPL_BOOL_241 1
#define VRM_PP_IMPL_BOOL_242 1
#define VRM_PP_IMPL_BOOL_243 1
#define VRM_PP_IMPL_BOOL_244 1
#define VRM_PP_IMPL_BOOL_245 1
#define VRM_PP_IMPL_BOOL_246 1
#define VRM_PP_IMPL_BOOL_247 1
#define VRM_PP_IMPL_BOOL_248 1
#define VRM_PP_IMPL_BOOL_249 1
#define VRM_PP_IMPL_BOOL_250 1
#define VRM_PP_IMPL_BOOL_251 1
#define VRM_PP_IMPL_BOOL_252 1
#define VRM_PP_IMPL_BOOL_253 1
#define VRM_PP_IMPL_BOOL_254 1
#define VRM_PP_IMPL_BOOL_255 1
#define VRM_PP_IMPL_NSEQ( m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63, m64, m65, m66, m67, m68, m69, m70, m71, m72, m73, m74, m75, m76, m77, m78, m79, m80, m81, m82, m83, m84, m85, m86, m87, m88, m89, m90, m91, m92, m93, m94, m95, m96, m97, m98, m99, m100, m101, m102, m103, m104, m105, m106, m107, m108, m109, m110, m111, m112, m113, m114, m115, m116, m117, m118, m119, m120, m121, m122, m123, m124, m125, m126, m127, mN, ...) mN
#define VRM_PP_IMPL_RSEQ() 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
#define VRM_PP_IMPL_CSEQ() 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
#define VRM_PP_IMPL_CAT_0() VRM_PP_EMPTY()
#define VRM_PP_IMPL_CAT_1(m0) VRM_PP_EXPAND(m0)
#define VRM_PP_IMPL_CAT_2(m0, m1) VRM_PP_IMPL_CAT_1(VRM_PP_TKNCAT_2(m0, m1))
#define VRM_PP_IMPL_CAT_3(m0, m1, ...) VRM_PP_IMPL_CAT_2(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_4(m0, m1, ...) VRM_PP_IMPL_CAT_3(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_5(m0, m1, ...) VRM_PP_IMPL_CAT_4(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_6(m0, m1, ...) VRM_PP_IMPL_CAT_5(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_7(m0, m1, ...) VRM_PP_IMPL_CAT_6(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_8(m0, m1, ...) VRM_PP_IMPL_CAT_7(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_9(m0, m1, ...) VRM_PP_IMPL_CAT_8(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_10(m0, m1, ...) VRM_PP_IMPL_CAT_9(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_11(m0, m1, ...) VRM_PP_IMPL_CAT_10(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_12(m0, m1, ...) VRM_PP_IMPL_CAT_11(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_13(m0, m1, ...) VRM_PP_IMPL_CAT_12(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_14(m0, m1, ...) VRM_PP_IMPL_CAT_13(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_15(m0, m1, ...) VRM_PP_IMPL_CAT_14(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_16(m0, m1, ...) VRM_PP_IMPL_CAT_15(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_17(m0, m1, ...) VRM_PP_IMPL_CAT_16(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_18(m0, m1, ...) VRM_PP_IMPL_CAT_17(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_19(m0, m1, ...) VRM_PP_IMPL_CAT_18(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_20(m0, m1, ...) VRM_PP_IMPL_CAT_19(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_21(m0, m1, ...) VRM_PP_IMPL_CAT_20(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_22(m0, m1, ...) VRM_PP_IMPL_CAT_21(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_23(m0, m1, ...) VRM_PP_IMPL_CAT_22(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_24(m0, m1, ...) VRM_PP_IMPL_CAT_23(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_25(m0, m1, ...) VRM_PP_IMPL_CAT_24(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_26(m0, m1, ...) VRM_PP_IMPL_CAT_25(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_27(m0, m1, ...) VRM_PP_IMPL_CAT_26(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_28(m0, m1, ...) VRM_PP_IMPL_CAT_27(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_29(m0, m1, ...) VRM_PP_IMPL_CAT_28(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_30(m0, m1, ...) VRM_PP_IMPL_CAT_29(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_31(m0, m1, ...) VRM_PP_IMPL_CAT_30(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_32(m0, m1, ...) VRM_PP_IMPL_CAT_31(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_33(m0, m1, ...) VRM_PP_IMPL_CAT_32(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_34(m0, m1, ...) VRM_PP_IMPL_CAT_33(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_35(m0, m1, ...) VRM_PP_IMPL_CAT_34(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_36(m0, m1, ...) VRM_PP_IMPL_CAT_35(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_37(m0, m1, ...) VRM_PP_IMPL_CAT_36(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_38(m0, m1, ...) VRM_PP_IMPL_CAT_37(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_39(m0, m1, ...) VRM_PP_IMPL_CAT_38(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_40(m0, m1, ...) VRM_PP_IMPL_CAT_39(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_41(m0, m1, ...) VRM_PP_IMPL_CAT_40(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_42(m0, m1, ...) VRM_PP_IMPL_CAT_41(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_43(m0, m1, ...) VRM_PP_IMPL_CAT_42(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_44(m0, m1, ...) VRM_PP_IMPL_CAT_43(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_45(m0, m1, ...) VRM_PP_IMPL_CAT_44(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_46(m0, m1, ...) VRM_PP_IMPL_CAT_45(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_47(m0, m1, ...) VRM_PP_IMPL_CAT_46(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_48(m0, m1, ...) VRM_PP_IMPL_CAT_47(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_49(m0, m1, ...) VRM_PP_IMPL_CAT_48(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_50(m0, m1, ...) VRM_PP_IMPL_CAT_49(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_51(m0, m1, ...) VRM_PP_IMPL_CAT_50(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_52(m0, m1, ...) VRM_PP_IMPL_CAT_51(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_53(m0, m1, ...) VRM_PP_IMPL_CAT_52(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_54(m0, m1, ...) VRM_PP_IMPL_CAT_53(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_55(m0, m1, ...) VRM_PP_IMPL_CAT_54(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_56(m0, m1, ...) VRM_PP_IMPL_CAT_55(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_57(m0, m1, ...) VRM_PP_IMPL_CAT_56(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_58(m0, m1, ...) VRM_PP_IMPL_CAT_57(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_59(m0, m1, ...) VRM_PP_IMPL_CAT_58(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_60(m0, m1, ...) VRM_PP_IMPL_CAT_59(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_61(m0, m1, ...) VRM_PP_IMPL_CAT_60(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_62(m0, m1, ...) VRM_PP_IMPL_CAT_61(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_63(m0, m1, ...) VRM_PP_IMPL_CAT_62(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_64(m0, m1, ...) VRM_PP_IMPL_CAT_63(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_65(m0, m1, ...) VRM_PP_IMPL_CAT_64(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_66(m0, m1, ...) VRM_PP_IMPL_CAT_65(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_67(m0, m1, ...) VRM_PP_IMPL_CAT_66(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_68(m0, m1, ...) VRM_PP_IMPL_CAT_67(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_69(m0, m1, ...) VRM_PP_IMPL_CAT_68(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_70(m0, m1, ...) VRM_PP_IMPL_CAT_69(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_71(m0, m1, ...) VRM_PP_IMPL_CAT_70(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_72(m0, m1, ...) VRM_PP_IMPL_CAT_71(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_73(m0, m1, ...) VRM_PP_IMPL_CAT_72(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_74(m0, m1, ...) VRM_PP_IMPL_CAT_73(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_75(m0, m1, ...) VRM_PP_IMPL_CAT_74(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_76(m0, m1, ...) VRM_PP_IMPL_CAT_75(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_77(m0, m1, ...) VRM_PP_IMPL_CAT_76(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_78(m0, m1, ...) VRM_PP_IMPL_CAT_77(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_79(m0, m1, ...) VRM_PP_IMPL_CAT_78(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_80(m0, m1, ...) VRM_PP_IMPL_CAT_79(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_81(m0, m1, ...) VRM_PP_IMPL_CAT_80(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_82(m0, m1, ...) VRM_PP_IMPL_CAT_81(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_83(m0, m1, ...) VRM_PP_IMPL_CAT_82(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_84(m0, m1, ...) VRM_PP_IMPL_CAT_83(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_85(m0, m1, ...) VRM_PP_IMPL_CAT_84(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_86(m0, m1, ...) VRM_PP_IMPL_CAT_85(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_87(m0, m1, ...) VRM_PP_IMPL_CAT_86(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_88(m0, m1, ...) VRM_PP_IMPL_CAT_87(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_89(m0, m1, ...) VRM_PP_IMPL_CAT_88(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_90(m0, m1, ...) VRM_PP_IMPL_CAT_89(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_91(m0, m1, ...) VRM_PP_IMPL_CAT_90(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_92(m0, m1, ...) VRM_PP_IMPL_CAT_91(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_93(m0, m1, ...) VRM_PP_IMPL_CAT_92(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_94(m0, m1, ...) VRM_PP_IMPL_CAT_93(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_95(m0, m1, ...) VRM_PP_IMPL_CAT_94(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_96(m0, m1, ...) VRM_PP_IMPL_CAT_95(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_97(m0, m1, ...) VRM_PP_IMPL_CAT_96(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_98(m0, m1, ...) VRM_PP_IMPL_CAT_97(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_99(m0, m1, ...) VRM_PP_IMPL_CAT_98(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_100(m0, m1, ...) VRM_PP_IMPL_CAT_99(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_101(m0, m1, ...) VRM_PP_IMPL_CAT_100(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_102(m0, m1, ...) VRM_PP_IMPL_CAT_101(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_103(m0, m1, ...) VRM_PP_IMPL_CAT_102(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_104(m0, m1, ...) VRM_PP_IMPL_CAT_103(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_105(m0, m1, ...) VRM_PP_IMPL_CAT_104(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_106(m0, m1, ...) VRM_PP_IMPL_CAT_105(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_107(m0, m1, ...) VRM_PP_IMPL_CAT_106(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_108(m0, m1, ...) VRM_PP_IMPL_CAT_107(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_109(m0, m1, ...) VRM_PP_IMPL_CAT_108(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_110(m0, m1, ...) VRM_PP_IMPL_CAT_109(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_111(m0, m1, ...) VRM_PP_IMPL_CAT_110(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_112(m0, m1, ...) VRM_PP_IMPL_CAT_111(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_113(m0, m1, ...) VRM_PP_IMPL_CAT_112(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_114(m0, m1, ...) VRM_PP_IMPL_CAT_113(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_115(m0, m1, ...) VRM_PP_IMPL_CAT_114(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_116(m0, m1, ...) VRM_PP_IMPL_CAT_115(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_117(m0, m1, ...) VRM_PP_IMPL_CAT_116(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_118(m0, m1, ...) VRM_PP_IMPL_CAT_117(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_119(m0, m1, ...) VRM_PP_IMPL_CAT_118(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_120(m0, m1, ...) VRM_PP_IMPL_CAT_119(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_121(m0, m1, ...) VRM_PP_IMPL_CAT_120(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_122(m0, m1, ...) VRM_PP_IMPL_CAT_121(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_123(m0, m1, ...) VRM_PP_IMPL_CAT_122(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_124(m0, m1, ...) VRM_PP_IMPL_CAT_123(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_125(m0, m1, ...) VRM_PP_IMPL_CAT_124(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_126(m0, m1, ...) VRM_PP_IMPL_CAT_125(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_CAT_127(m0, m1, ...) VRM_PP_IMPL_CAT_126(VRM_PP_TKNCAT_2(m0, m1), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_FILL_0(m0) 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, 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
#define VRM_PP_IMPL_TPL_FILL_1(m0) VRM_PP_TPL_EXPLODE(m0), 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, 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
#define VRM_PP_IMPL_TPL_FILL_2(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_3(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_4(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_5(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_6(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_7(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_8(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_9(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_10(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_11(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_12(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_13(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_14(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_15(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_16(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_17(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_18(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_19(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_20(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_21(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_22(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_23(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_24(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0, 0
#define VRM_PP_IMPL_TPL_FILL_25(m0) VRM_PP_TPL_EXPLODE(m0), 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, 0
#define VRM_PP_IMPL_TPL_FILL_26(m0) VRM_PP_TPL_EXPLODE(m0), 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
#define VRM_PP_IMPL_TPL_FILL_27(m0) VRM_PP_TPL_EXPLODE(m0), 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
#define VRM_PP_IMPL_TPL_FILL_28(m0) VRM_PP_TPL_EXPLODE(m0), 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
#define VRM_PP_IMPL_TPL_FILL_29(m0) VRM_PP_TPL_EXPLODE(m0), 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
#define VRM_PP_IMPL_TPL_FILL_30(m0) VRM_PP_TPL_EXPLODE(m0), 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
#define VRM_PP_IMPL_TPL_FILL_31(m0) VRM_PP_TPL_EXPLODE(m0), 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
#define VRM_PP_IMPL_TPL_FILL_32(m0) VRM_PP_TPL_EXPLODE(m0), 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
#define VRM_PP_IMPL_TPL_FILL_33(m0) VRM_PP_TPL_EXPLODE(m0), 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
#define VRM_PP_IMPL_TPL_FILL_34(m0) VRM_PP_TPL_EXPLODE(m0), 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
#define VRM_PP_IMPL_TPL_FILL_35(m0) VRM_PP_TPL_EXPLODE(m0), 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
#define VRM_PP_IMPL_TPL_FILL_36(m0) VRM_PP_TPL_EXPLODE(m0), 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
#define VRM_PP_IMPL_TPL_FILL_37(m0) VRM_PP_TPL_EXPLODE(m0), 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
#define VRM_PP_IMPL_TPL_FILL_38(m0) VRM_PP_TPL_EXPLODE(m0), 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
#define VRM_PP_IMPL_TPL_FILL_39(m0) VRM_PP_TPL_EXPLODE(m0), 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
#define VRM_PP_IMPL_TPL_FILL_40(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_41(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_42(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_43(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_44(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_45(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_46(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_47(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_48(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_49(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_50(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_51(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_52(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_53(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_54(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_55(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_56(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_57(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_58(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_59(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_60(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_61(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0, 0
#define VRM_PP_IMPL_TPL_FILL_62(m0) VRM_PP_TPL_EXPLODE(m0), 0, 0
#define VRM_PP_IMPL_TPL_FILL_63(m0) VRM_PP_TPL_EXPLODE(m0), 0
#define VRM_PP_IMPL_TPL_FILL_64(m0) VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_0(m0) 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, 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
#define VRM_PP_IMPL_TPL_FILL_REVERSE_1(m0) 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, 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, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_2(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_3(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_4(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_5(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_6(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_7(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_8(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_9(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_10(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_11(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_12(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_13(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_14(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_15(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_16(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_17(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_18(m0) 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, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_19(m0) 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, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_20(m0) 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, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_21(m0) 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, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_22(m0) 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, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_23(m0) 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, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_24(m0) 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, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_25(m0) 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, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_26(m0) 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, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_27(m0) 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, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_28(m0) 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, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_29(m0) 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, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_30(m0) 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, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_31(m0) 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, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_32(m0) 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, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_33(m0) 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, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_34(m0) 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, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_35(m0) 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, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_36(m0) 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, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_37(m0) 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, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_38(m0) 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, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_39(m0) 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, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_40(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_41(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_42(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_43(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_44(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_45(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_46(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_47(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_48(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_49(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_50(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_51(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_52(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_53(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_54(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_55(m0) 0, 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_56(m0) 0, 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_57(m0) 0, 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_58(m0) 0, 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_59(m0) 0, 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_60(m0) 0, 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_61(m0) 0, 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_62(m0) 0, 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_63(m0) 0, VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_FILL_REVERSE_64(m0) VRM_PP_TPL_EXPLODE(m0)
#define VRM_PP_IMPL_TPL_ELEM_0(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m0
#define VRM_PP_IMPL_TPL_ELEM_1(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m1
#define VRM_PP_IMPL_TPL_ELEM_2(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m2
#define VRM_PP_IMPL_TPL_ELEM_3(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m3
#define VRM_PP_IMPL_TPL_ELEM_4(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m4
#define VRM_PP_IMPL_TPL_ELEM_5(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m5
#define VRM_PP_IMPL_TPL_ELEM_6(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m6
#define VRM_PP_IMPL_TPL_ELEM_7(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m7
#define VRM_PP_IMPL_TPL_ELEM_8(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m8
#define VRM_PP_IMPL_TPL_ELEM_9(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m9
#define VRM_PP_IMPL_TPL_ELEM_10(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m10
#define VRM_PP_IMPL_TPL_ELEM_11(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m11
#define VRM_PP_IMPL_TPL_ELEM_12(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m12
#define VRM_PP_IMPL_TPL_ELEM_13(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m13
#define VRM_PP_IMPL_TPL_ELEM_14(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m14
#define VRM_PP_IMPL_TPL_ELEM_15(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m15
#define VRM_PP_IMPL_TPL_ELEM_16(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m16
#define VRM_PP_IMPL_TPL_ELEM_17(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m17
#define VRM_PP_IMPL_TPL_ELEM_18(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m18
#define VRM_PP_IMPL_TPL_ELEM_19(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m19
#define VRM_PP_IMPL_TPL_ELEM_20(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m20
#define VRM_PP_IMPL_TPL_ELEM_21(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m21
#define VRM_PP_IMPL_TPL_ELEM_22(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m22
#define VRM_PP_IMPL_TPL_ELEM_23(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m23
#define VRM_PP_IMPL_TPL_ELEM_24(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m24
#define VRM_PP_IMPL_TPL_ELEM_25(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m25
#define VRM_PP_IMPL_TPL_ELEM_26(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m26
#define VRM_PP_IMPL_TPL_ELEM_27(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m27
#define VRM_PP_IMPL_TPL_ELEM_28(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m28
#define VRM_PP_IMPL_TPL_ELEM_29(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m29
#define VRM_PP_IMPL_TPL_ELEM_30(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m30
#define VRM_PP_IMPL_TPL_ELEM_31(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m31
#define VRM_PP_IMPL_TPL_ELEM_32(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m32
#define VRM_PP_IMPL_TPL_ELEM_33(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m33
#define VRM_PP_IMPL_TPL_ELEM_34(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m34
#define VRM_PP_IMPL_TPL_ELEM_35(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m35
#define VRM_PP_IMPL_TPL_ELEM_36(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m36
#define VRM_PP_IMPL_TPL_ELEM_37(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m37
#define VRM_PP_IMPL_TPL_ELEM_38(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m38
#define VRM_PP_IMPL_TPL_ELEM_39(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m39
#define VRM_PP_IMPL_TPL_ELEM_40(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m40
#define VRM_PP_IMPL_TPL_ELEM_41(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m41
#define VRM_PP_IMPL_TPL_ELEM_42(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m42
#define VRM_PP_IMPL_TPL_ELEM_43(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m43
#define VRM_PP_IMPL_TPL_ELEM_44(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m44
#define VRM_PP_IMPL_TPL_ELEM_45(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m45
#define VRM_PP_IMPL_TPL_ELEM_46(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m46
#define VRM_PP_IMPL_TPL_ELEM_47(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m47
#define VRM_PP_IMPL_TPL_ELEM_48(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m48
#define VRM_PP_IMPL_TPL_ELEM_49(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m49
#define VRM_PP_IMPL_TPL_ELEM_50(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m50
#define VRM_PP_IMPL_TPL_ELEM_51(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m51
#define VRM_PP_IMPL_TPL_ELEM_52(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m52
#define VRM_PP_IMPL_TPL_ELEM_53(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m53
#define VRM_PP_IMPL_TPL_ELEM_54(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m54
#define VRM_PP_IMPL_TPL_ELEM_55(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m55
#define VRM_PP_IMPL_TPL_ELEM_56(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m56
#define VRM_PP_IMPL_TPL_ELEM_57(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m57
#define VRM_PP_IMPL_TPL_ELEM_58(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m58
#define VRM_PP_IMPL_TPL_ELEM_59(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m59
#define VRM_PP_IMPL_TPL_ELEM_60(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m60
#define VRM_PP_IMPL_TPL_ELEM_61(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m61
#define VRM_PP_IMPL_TPL_ELEM_62(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m62
#define VRM_PP_IMPL_TPL_ELEM_63(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m63
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_0(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m63
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_1(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m62
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_2(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m61
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_3(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m60
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_4(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m59
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_5(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m58
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_6(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m57
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_7(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m56
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_8(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m55
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_9(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m54
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_10(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m53
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_11(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m52
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_12(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m51
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_13(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m50
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_14(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m49
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_15(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m48
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_16(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m47
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_17(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m46
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_18(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m45
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_19(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m44
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_20(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m43
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_21(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m42
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_22(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m41
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_23(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m40
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_24(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m39
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_25(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m38
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_26(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m37
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_27(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m36
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_28(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m35
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_29(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m34
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_30(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m33
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_31(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m32
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_32(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m31
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_33(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m30
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_34(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m29
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_35(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m28
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_36(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m27
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_37(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m26
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_38(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m25
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_39(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m24
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_40(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m23
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_41(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m22
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_42(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m21
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_43(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m20
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_44(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m19
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_45(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m18
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_46(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m17
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_47(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m16
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_48(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m15
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_49(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m14
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_50(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m13
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_51(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m12
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_52(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m11
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_53(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m10
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_54(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m9
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_55(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m8
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_56(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m7
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_57(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m6
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_58(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m5
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_59(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m4
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_60(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m3
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_61(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m2
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_62(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m1
#define VRM_PP_IMPL_TPL_ELEM_REVERSE_63(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40, m41, m42, m43, m44, m45, m46, m47, m48, m49, m50, m51, m52, m53, m54, m55, m56, m57, m58, m59, m60, m61, m62, m63) m0
#define VRM_PP_IMPL_TPL_CAT_0() VRM_PP_EMPTY()
#define VRM_PP_IMPL_TPL_CAT_1(m0) m0
#define VRM_PP_IMPL_TPL_CAT_2(m0, m1) VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1))
#define VRM_PP_IMPL_TPL_CAT_3(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_2(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_4(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_3(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_5(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_4(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_6(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_5(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_7(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_6(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_8(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_7(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_9(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_8(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_10(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_9(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_11(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_10(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_12(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_11(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_13(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_12(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_14(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_13(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_15(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_14(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_16(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_15(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_17(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_16(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_18(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_17(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_19(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_18(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_20(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_19(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_21(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_20(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_22(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_21(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_23(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_22(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_24(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_23(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_25(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_24(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_26(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_25(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_27(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_26(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_28(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_27(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_29(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_28(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_30(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_29(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_31(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_30(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_32(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_31(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_33(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_32(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_34(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_33(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_35(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_34(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_36(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_35(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_37(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_36(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_38(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_37(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_39(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_38(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_40(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_39(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_41(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_40(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_42(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_41(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_43(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_42(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_44(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_43(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_45(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_44(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_46(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_45(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_47(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_46(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_48(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_47(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_49(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_48(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_50(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_49(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_51(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_50(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_52(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_51(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_53(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_52(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_54(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_53(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_55(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_54(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_56(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_55(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_57(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_56(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_58(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_57(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_59(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_58(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_60(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_59(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_61(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_60(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_62(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_61(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_63(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_62(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_64(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_63(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_65(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_64(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_66(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_65(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_67(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_66(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_68(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_67(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_69(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_68(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_70(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_69(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_71(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_70(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_72(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_71(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_73(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_72(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_74(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_73(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_75(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_74(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_76(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_75(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_77(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_76(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_78(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_77(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_79(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_78(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_80(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_79(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_81(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_80(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_82(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_81(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_83(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_82(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_84(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_83(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_85(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_84(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_86(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_85(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_87(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_86(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_88(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_87(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_89(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_88(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_90(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_89(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_91(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_90(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_92(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_91(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_93(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_92(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_94(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_93(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_95(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_94(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_96(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_95(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_97(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_96(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_98(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_97(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_99(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_98(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_100(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_99(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_101(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_100(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_102(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_101(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_103(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_102(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_104(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_103(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_105(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_104(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_106(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_105(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_107(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_106(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_108(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_107(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_109(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_108(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_110(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_109(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_111(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_110(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_112(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_111(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_113(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_112(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_114(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_113(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_115(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_114(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_116(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_115(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_117(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_116(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_118(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_117(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_119(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_118(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_120(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_119(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_121(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_120(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_122(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_121(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_123(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_122(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_124(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_123(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_125(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_124(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_126(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_125(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_127(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_126(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_IMPL_TPL_CAT_128(m0, m1, ...) VRM_PP_IMPL_TPL_CAT_127(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(m0), VRM_PP_TPL_EXPLODE(m1)), __VA_ARGS__)
#define VRM_PP_TPL_MAX_SIZE 64
#define VRM_PP_IMPL_FOREACH_0(mLast, mAction, mData)
#define VRM_PP_IMPL_FOREACH_1(mLast, mAction, mData, mA0) mAction(mLast, mData, mA0)
#define VRM_PP_IMPL_FOREACH_2(mLast, mAction, mData, mA0, mA1) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_1(VRM_PP_INCREMENT(mLast), mAction, mData, mA1)
#define VRM_PP_IMPL_FOREACH_3(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_2(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_4(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_3(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_5(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_4(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_6(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_5(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_7(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_6(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_8(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_7(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_9(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_8(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_10(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_9(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_11(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_10(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_12(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_11(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_13(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_12(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_14(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_13(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_15(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_14(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_16(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_15(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_17(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_16(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_18(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_17(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_19(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_18(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_20(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_19(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_21(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_20(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_22(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_21(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_23(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_22(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_24(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_23(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_25(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_24(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_26(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_25(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_27(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_26(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_28(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_27(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_29(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_28(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_30(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_29(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_31(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_30(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_32(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_31(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_33(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_32(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_34(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_33(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_35(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_34(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_36(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_35(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_37(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_36(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_38(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_37(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_39(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_38(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_40(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_39(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_41(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_40(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_42(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_41(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_43(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_42(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_44(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_43(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_45(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_44(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_46(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_45(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_47(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_46(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_48(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_47(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_49(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_48(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_50(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_49(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_51(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_50(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_52(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_51(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_53(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_52(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_54(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_53(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_55(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_54(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_56(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_55(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_57(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_56(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_58(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_57(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_59(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_58(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_60(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_59(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_61(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_60(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_62(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_61(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_63(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_62(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_64(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_63(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_65(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_64(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_66(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_65(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_67(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_66(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_68(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_67(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_69(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_68(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_70(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_69(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_71(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_70(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_72(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_71(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_73(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_72(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_74(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_73(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_75(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_74(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_76(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_75(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_77(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_76(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_78(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_77(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_79(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_78(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_80(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_79(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_81(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_80(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_82(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_81(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_83(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_82(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_84(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_83(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_85(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_84(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_86(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_85(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_87(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_86(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_88(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_87(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_89(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_88(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_90(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_89(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_91(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_90(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_92(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_91(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_93(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_92(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_94(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_93(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_95(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_94(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_96(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_95(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_97(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_96(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_98(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_97(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_99(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_98(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_100(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_99(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_101(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_100(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_102(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_101(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_103(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_102(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_104(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_103(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_105(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_104(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_106(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_105(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_107(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_106(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_108(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_107(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_109(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_108(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_110(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_109(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_111(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_110(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_112(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_111(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_113(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_112(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_114(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_113(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_115(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_114(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_116(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_115(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_117(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_116(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_118(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_117(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_119(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_118(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_120(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_119(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_121(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_120(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_122(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_121(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_123(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_122(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_124(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_123(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_125(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_124(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_126(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_125(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_127(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_126(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_128(mLast, mAction, mData, mA0, mA1, ...) mAction(mLast, mData, mA0) VRM_PP_IMPL_FOREACH_127(VRM_PP_INCREMENT(mLast), mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_0(mAction, mData)
#define VRM_PP_IMPL_FOREACH_REVERSE_1(mAction, mData, mA0) mAction(0, mData, mA0)
#define VRM_PP_IMPL_FOREACH_REVERSE_2(mAction, mData, mA0, mA1) mAction(1, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_1(mAction, mData, mA1)
#define VRM_PP_IMPL_FOREACH_REVERSE_3(mAction, mData, mA0, mA1, ...) mAction(2, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_2(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_4(mAction, mData, mA0, mA1, ...) mAction(3, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_3(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_5(mAction, mData, mA0, mA1, ...) mAction(4, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_4(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_6(mAction, mData, mA0, mA1, ...) mAction(5, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_5(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_7(mAction, mData, mA0, mA1, ...) mAction(6, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_6(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_8(mAction, mData, mA0, mA1, ...) mAction(7, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_7(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_9(mAction, mData, mA0, mA1, ...) mAction(8, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_8(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_10(mAction, mData, mA0, mA1, ...) mAction(9, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_9(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_11(mAction, mData, mA0, mA1, ...) mAction(10, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_10(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_12(mAction, mData, mA0, mA1, ...) mAction(11, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_11(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_13(mAction, mData, mA0, mA1, ...) mAction(12, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_12(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_14(mAction, mData, mA0, mA1, ...) mAction(13, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_13(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_15(mAction, mData, mA0, mA1, ...) mAction(14, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_14(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_16(mAction, mData, mA0, mA1, ...) mAction(15, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_15(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_17(mAction, mData, mA0, mA1, ...) mAction(16, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_16(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_18(mAction, mData, mA0, mA1, ...) mAction(17, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_17(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_19(mAction, mData, mA0, mA1, ...) mAction(18, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_18(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_20(mAction, mData, mA0, mA1, ...) mAction(19, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_19(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_21(mAction, mData, mA0, mA1, ...) mAction(20, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_20(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_22(mAction, mData, mA0, mA1, ...) mAction(21, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_21(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_23(mAction, mData, mA0, mA1, ...) mAction(22, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_22(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_24(mAction, mData, mA0, mA1, ...) mAction(23, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_23(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_25(mAction, mData, mA0, mA1, ...) mAction(24, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_24(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_26(mAction, mData, mA0, mA1, ...) mAction(25, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_25(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_27(mAction, mData, mA0, mA1, ...) mAction(26, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_26(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_28(mAction, mData, mA0, mA1, ...) mAction(27, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_27(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_29(mAction, mData, mA0, mA1, ...) mAction(28, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_28(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_30(mAction, mData, mA0, mA1, ...) mAction(29, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_29(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_31(mAction, mData, mA0, mA1, ...) mAction(30, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_30(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_32(mAction, mData, mA0, mA1, ...) mAction(31, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_31(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_33(mAction, mData, mA0, mA1, ...) mAction(32, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_32(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_34(mAction, mData, mA0, mA1, ...) mAction(33, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_33(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_35(mAction, mData, mA0, mA1, ...) mAction(34, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_34(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_36(mAction, mData, mA0, mA1, ...) mAction(35, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_35(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_37(mAction, mData, mA0, mA1, ...) mAction(36, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_36(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_38(mAction, mData, mA0, mA1, ...) mAction(37, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_37(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_39(mAction, mData, mA0, mA1, ...) mAction(38, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_38(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_40(mAction, mData, mA0, mA1, ...) mAction(39, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_39(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_41(mAction, mData, mA0, mA1, ...) mAction(40, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_40(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_42(mAction, mData, mA0, mA1, ...) mAction(41, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_41(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_43(mAction, mData, mA0, mA1, ...) mAction(42, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_42(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_44(mAction, mData, mA0, mA1, ...) mAction(43, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_43(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_45(mAction, mData, mA0, mA1, ...) mAction(44, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_44(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_46(mAction, mData, mA0, mA1, ...) mAction(45, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_45(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_47(mAction, mData, mA0, mA1, ...) mAction(46, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_46(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_48(mAction, mData, mA0, mA1, ...) mAction(47, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_47(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_49(mAction, mData, mA0, mA1, ...) mAction(48, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_48(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_50(mAction, mData, mA0, mA1, ...) mAction(49, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_49(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_51(mAction, mData, mA0, mA1, ...) mAction(50, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_50(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_52(mAction, mData, mA0, mA1, ...) mAction(51, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_51(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_53(mAction, mData, mA0, mA1, ...) mAction(52, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_52(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_54(mAction, mData, mA0, mA1, ...) mAction(53, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_53(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_55(mAction, mData, mA0, mA1, ...) mAction(54, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_54(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_56(mAction, mData, mA0, mA1, ...) mAction(55, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_55(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_57(mAction, mData, mA0, mA1, ...) mAction(56, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_56(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_58(mAction, mData, mA0, mA1, ...) mAction(57, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_57(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_59(mAction, mData, mA0, mA1, ...) mAction(58, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_58(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_60(mAction, mData, mA0, mA1, ...) mAction(59, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_59(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_61(mAction, mData, mA0, mA1, ...) mAction(60, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_60(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_62(mAction, mData, mA0, mA1, ...) mAction(61, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_61(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_63(mAction, mData, mA0, mA1, ...) mAction(62, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_62(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_64(mAction, mData, mA0, mA1, ...) mAction(63, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_63(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_65(mAction, mData, mA0, mA1, ...) mAction(64, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_64(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_66(mAction, mData, mA0, mA1, ...) mAction(65, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_65(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_67(mAction, mData, mA0, mA1, ...) mAction(66, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_66(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_68(mAction, mData, mA0, mA1, ...) mAction(67, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_67(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_69(mAction, mData, mA0, mA1, ...) mAction(68, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_68(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_70(mAction, mData, mA0, mA1, ...) mAction(69, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_69(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_71(mAction, mData, mA0, mA1, ...) mAction(70, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_70(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_72(mAction, mData, mA0, mA1, ...) mAction(71, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_71(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_73(mAction, mData, mA0, mA1, ...) mAction(72, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_72(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_74(mAction, mData, mA0, mA1, ...) mAction(73, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_73(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_75(mAction, mData, mA0, mA1, ...) mAction(74, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_74(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_76(mAction, mData, mA0, mA1, ...) mAction(75, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_75(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_77(mAction, mData, mA0, mA1, ...) mAction(76, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_76(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_78(mAction, mData, mA0, mA1, ...) mAction(77, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_77(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_79(mAction, mData, mA0, mA1, ...) mAction(78, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_78(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_80(mAction, mData, mA0, mA1, ...) mAction(79, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_79(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_81(mAction, mData, mA0, mA1, ...) mAction(80, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_80(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_82(mAction, mData, mA0, mA1, ...) mAction(81, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_81(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_83(mAction, mData, mA0, mA1, ...) mAction(82, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_82(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_84(mAction, mData, mA0, mA1, ...) mAction(83, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_83(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_85(mAction, mData, mA0, mA1, ...) mAction(84, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_84(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_86(mAction, mData, mA0, mA1, ...) mAction(85, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_85(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_87(mAction, mData, mA0, mA1, ...) mAction(86, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_86(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_88(mAction, mData, mA0, mA1, ...) mAction(87, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_87(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_89(mAction, mData, mA0, mA1, ...) mAction(88, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_88(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_90(mAction, mData, mA0, mA1, ...) mAction(89, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_89(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_91(mAction, mData, mA0, mA1, ...) mAction(90, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_90(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_92(mAction, mData, mA0, mA1, ...) mAction(91, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_91(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_93(mAction, mData, mA0, mA1, ...) mAction(92, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_92(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_94(mAction, mData, mA0, mA1, ...) mAction(93, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_93(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_95(mAction, mData, mA0, mA1, ...) mAction(94, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_94(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_96(mAction, mData, mA0, mA1, ...) mAction(95, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_95(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_97(mAction, mData, mA0, mA1, ...) mAction(96, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_96(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_98(mAction, mData, mA0, mA1, ...) mAction(97, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_97(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_99(mAction, mData, mA0, mA1, ...) mAction(98, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_98(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_100(mAction, mData, mA0, mA1, ...) mAction(99, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_99(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_101(mAction, mData, mA0, mA1, ...) mAction(100, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_100(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_102(mAction, mData, mA0, mA1, ...) mAction(101, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_101(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_103(mAction, mData, mA0, mA1, ...) mAction(102, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_102(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_104(mAction, mData, mA0, mA1, ...) mAction(103, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_103(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_105(mAction, mData, mA0, mA1, ...) mAction(104, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_104(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_106(mAction, mData, mA0, mA1, ...) mAction(105, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_105(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_107(mAction, mData, mA0, mA1, ...) mAction(106, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_106(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_108(mAction, mData, mA0, mA1, ...) mAction(107, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_107(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_109(mAction, mData, mA0, mA1, ...) mAction(108, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_108(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_110(mAction, mData, mA0, mA1, ...) mAction(109, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_109(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_111(mAction, mData, mA0, mA1, ...) mAction(110, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_110(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_112(mAction, mData, mA0, mA1, ...) mAction(111, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_111(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_113(mAction, mData, mA0, mA1, ...) mAction(112, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_112(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_114(mAction, mData, mA0, mA1, ...) mAction(113, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_113(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_115(mAction, mData, mA0, mA1, ...) mAction(114, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_114(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_116(mAction, mData, mA0, mA1, ...) mAction(115, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_115(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_117(mAction, mData, mA0, mA1, ...) mAction(116, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_116(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_118(mAction, mData, mA0, mA1, ...) mAction(117, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_117(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_119(mAction, mData, mA0, mA1, ...) mAction(118, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_118(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_120(mAction, mData, mA0, mA1, ...) mAction(119, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_119(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_121(mAction, mData, mA0, mA1, ...) mAction(120, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_120(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_122(mAction, mData, mA0, mA1, ...) mAction(121, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_121(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_123(mAction, mData, mA0, mA1, ...) mAction(122, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_122(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_124(mAction, mData, mA0, mA1, ...) mAction(123, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_123(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_125(mAction, mData, mA0, mA1, ...) mAction(124, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_124(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_126(mAction, mData, mA0, mA1, ...) mAction(125, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_125(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_127(mAction, mData, mA0, mA1, ...) mAction(126, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_126(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE_128(mAction, mData, mA0, mA1, ...) mAction(127, mData, mA0) VRM_PP_IMPL_FOREACH_REVERSE_127(mAction, mData, mA1, __VA_ARGS__)
#define VRM_PP_IMPL_REPEAT_DEC_0(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_1(mAction, mData) mAction(0, mData) VRM_PP_IMPL_REPEAT_DEC_0(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_2(mAction, mData) mAction(1, mData) VRM_PP_IMPL_REPEAT_DEC_1(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_3(mAction, mData) mAction(2, mData) VRM_PP_IMPL_REPEAT_DEC_2(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_4(mAction, mData) mAction(3, mData) VRM_PP_IMPL_REPEAT_DEC_3(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_5(mAction, mData) mAction(4, mData) VRM_PP_IMPL_REPEAT_DEC_4(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_6(mAction, mData) mAction(5, mData) VRM_PP_IMPL_REPEAT_DEC_5(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_7(mAction, mData) mAction(6, mData) VRM_PP_IMPL_REPEAT_DEC_6(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_8(mAction, mData) mAction(7, mData) VRM_PP_IMPL_REPEAT_DEC_7(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_9(mAction, mData) mAction(8, mData) VRM_PP_IMPL_REPEAT_DEC_8(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_10(mAction, mData) mAction(9, mData) VRM_PP_IMPL_REPEAT_DEC_9(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_11(mAction, mData) mAction(10, mData) VRM_PP_IMPL_REPEAT_DEC_10(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_12(mAction, mData) mAction(11, mData) VRM_PP_IMPL_REPEAT_DEC_11(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_13(mAction, mData) mAction(12, mData) VRM_PP_IMPL_REPEAT_DEC_12(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_14(mAction, mData) mAction(13, mData) VRM_PP_IMPL_REPEAT_DEC_13(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_15(mAction, mData) mAction(14, mData) VRM_PP_IMPL_REPEAT_DEC_14(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_16(mAction, mData) mAction(15, mData) VRM_PP_IMPL_REPEAT_DEC_15(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_17(mAction, mData) mAction(16, mData) VRM_PP_IMPL_REPEAT_DEC_16(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_18(mAction, mData) mAction(17, mData) VRM_PP_IMPL_REPEAT_DEC_17(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_19(mAction, mData) mAction(18, mData) VRM_PP_IMPL_REPEAT_DEC_18(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_20(mAction, mData) mAction(19, mData) VRM_PP_IMPL_REPEAT_DEC_19(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_21(mAction, mData) mAction(20, mData) VRM_PP_IMPL_REPEAT_DEC_20(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_22(mAction, mData) mAction(21, mData) VRM_PP_IMPL_REPEAT_DEC_21(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_23(mAction, mData) mAction(22, mData) VRM_PP_IMPL_REPEAT_DEC_22(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_24(mAction, mData) mAction(23, mData) VRM_PP_IMPL_REPEAT_DEC_23(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_25(mAction, mData) mAction(24, mData) VRM_PP_IMPL_REPEAT_DEC_24(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_26(mAction, mData) mAction(25, mData) VRM_PP_IMPL_REPEAT_DEC_25(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_27(mAction, mData) mAction(26, mData) VRM_PP_IMPL_REPEAT_DEC_26(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_28(mAction, mData) mAction(27, mData) VRM_PP_IMPL_REPEAT_DEC_27(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_29(mAction, mData) mAction(28, mData) VRM_PP_IMPL_REPEAT_DEC_28(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_30(mAction, mData) mAction(29, mData) VRM_PP_IMPL_REPEAT_DEC_29(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_31(mAction, mData) mAction(30, mData) VRM_PP_IMPL_REPEAT_DEC_30(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_32(mAction, mData) mAction(31, mData) VRM_PP_IMPL_REPEAT_DEC_31(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_33(mAction, mData) mAction(32, mData) VRM_PP_IMPL_REPEAT_DEC_32(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_34(mAction, mData) mAction(33, mData) VRM_PP_IMPL_REPEAT_DEC_33(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_35(mAction, mData) mAction(34, mData) VRM_PP_IMPL_REPEAT_DEC_34(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_36(mAction, mData) mAction(35, mData) VRM_PP_IMPL_REPEAT_DEC_35(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_37(mAction, mData) mAction(36, mData) VRM_PP_IMPL_REPEAT_DEC_36(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_38(mAction, mData) mAction(37, mData) VRM_PP_IMPL_REPEAT_DEC_37(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_39(mAction, mData) mAction(38, mData) VRM_PP_IMPL_REPEAT_DEC_38(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_40(mAction, mData) mAction(39, mData) VRM_PP_IMPL_REPEAT_DEC_39(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_41(mAction, mData) mAction(40, mData) VRM_PP_IMPL_REPEAT_DEC_40(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_42(mAction, mData) mAction(41, mData) VRM_PP_IMPL_REPEAT_DEC_41(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_43(mAction, mData) mAction(42, mData) VRM_PP_IMPL_REPEAT_DEC_42(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_44(mAction, mData) mAction(43, mData) VRM_PP_IMPL_REPEAT_DEC_43(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_45(mAction, mData) mAction(44, mData) VRM_PP_IMPL_REPEAT_DEC_44(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_46(mAction, mData) mAction(45, mData) VRM_PP_IMPL_REPEAT_DEC_45(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_47(mAction, mData) mAction(46, mData) VRM_PP_IMPL_REPEAT_DEC_46(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_48(mAction, mData) mAction(47, mData) VRM_PP_IMPL_REPEAT_DEC_47(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_49(mAction, mData) mAction(48, mData) VRM_PP_IMPL_REPEAT_DEC_48(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_50(mAction, mData) mAction(49, mData) VRM_PP_IMPL_REPEAT_DEC_49(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_51(mAction, mData) mAction(50, mData) VRM_PP_IMPL_REPEAT_DEC_50(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_52(mAction, mData) mAction(51, mData) VRM_PP_IMPL_REPEAT_DEC_51(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_53(mAction, mData) mAction(52, mData) VRM_PP_IMPL_REPEAT_DEC_52(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_54(mAction, mData) mAction(53, mData) VRM_PP_IMPL_REPEAT_DEC_53(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_55(mAction, mData) mAction(54, mData) VRM_PP_IMPL_REPEAT_DEC_54(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_56(mAction, mData) mAction(55, mData) VRM_PP_IMPL_REPEAT_DEC_55(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_57(mAction, mData) mAction(56, mData) VRM_PP_IMPL_REPEAT_DEC_56(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_58(mAction, mData) mAction(57, mData) VRM_PP_IMPL_REPEAT_DEC_57(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_59(mAction, mData) mAction(58, mData) VRM_PP_IMPL_REPEAT_DEC_58(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_60(mAction, mData) mAction(59, mData) VRM_PP_IMPL_REPEAT_DEC_59(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_61(mAction, mData) mAction(60, mData) VRM_PP_IMPL_REPEAT_DEC_60(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_62(mAction, mData) mAction(61, mData) VRM_PP_IMPL_REPEAT_DEC_61(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_63(mAction, mData) mAction(62, mData) VRM_PP_IMPL_REPEAT_DEC_62(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_64(mAction, mData) mAction(63, mData) VRM_PP_IMPL_REPEAT_DEC_63(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_65(mAction, mData) mAction(64, mData) VRM_PP_IMPL_REPEAT_DEC_64(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_66(mAction, mData) mAction(65, mData) VRM_PP_IMPL_REPEAT_DEC_65(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_67(mAction, mData) mAction(66, mData) VRM_PP_IMPL_REPEAT_DEC_66(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_68(mAction, mData) mAction(67, mData) VRM_PP_IMPL_REPEAT_DEC_67(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_69(mAction, mData) mAction(68, mData) VRM_PP_IMPL_REPEAT_DEC_68(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_70(mAction, mData) mAction(69, mData) VRM_PP_IMPL_REPEAT_DEC_69(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_71(mAction, mData) mAction(70, mData) VRM_PP_IMPL_REPEAT_DEC_70(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_72(mAction, mData) mAction(71, mData) VRM_PP_IMPL_REPEAT_DEC_71(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_73(mAction, mData) mAction(72, mData) VRM_PP_IMPL_REPEAT_DEC_72(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_74(mAction, mData) mAction(73, mData) VRM_PP_IMPL_REPEAT_DEC_73(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_75(mAction, mData) mAction(74, mData) VRM_PP_IMPL_REPEAT_DEC_74(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_76(mAction, mData) mAction(75, mData) VRM_PP_IMPL_REPEAT_DEC_75(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_77(mAction, mData) mAction(76, mData) VRM_PP_IMPL_REPEAT_DEC_76(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_78(mAction, mData) mAction(77, mData) VRM_PP_IMPL_REPEAT_DEC_77(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_79(mAction, mData) mAction(78, mData) VRM_PP_IMPL_REPEAT_DEC_78(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_80(mAction, mData) mAction(79, mData) VRM_PP_IMPL_REPEAT_DEC_79(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_81(mAction, mData) mAction(80, mData) VRM_PP_IMPL_REPEAT_DEC_80(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_82(mAction, mData) mAction(81, mData) VRM_PP_IMPL_REPEAT_DEC_81(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_83(mAction, mData) mAction(82, mData) VRM_PP_IMPL_REPEAT_DEC_82(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_84(mAction, mData) mAction(83, mData) VRM_PP_IMPL_REPEAT_DEC_83(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_85(mAction, mData) mAction(84, mData) VRM_PP_IMPL_REPEAT_DEC_84(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_86(mAction, mData) mAction(85, mData) VRM_PP_IMPL_REPEAT_DEC_85(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_87(mAction, mData) mAction(86, mData) VRM_PP_IMPL_REPEAT_DEC_86(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_88(mAction, mData) mAction(87, mData) VRM_PP_IMPL_REPEAT_DEC_87(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_89(mAction, mData) mAction(88, mData) VRM_PP_IMPL_REPEAT_DEC_88(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_90(mAction, mData) mAction(89, mData) VRM_PP_IMPL_REPEAT_DEC_89(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_91(mAction, mData) mAction(90, mData) VRM_PP_IMPL_REPEAT_DEC_90(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_92(mAction, mData) mAction(91, mData) VRM_PP_IMPL_REPEAT_DEC_91(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_93(mAction, mData) mAction(92, mData) VRM_PP_IMPL_REPEAT_DEC_92(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_94(mAction, mData) mAction(93, mData) VRM_PP_IMPL_REPEAT_DEC_93(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_95(mAction, mData) mAction(94, mData) VRM_PP_IMPL_REPEAT_DEC_94(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_96(mAction, mData) mAction(95, mData) VRM_PP_IMPL_REPEAT_DEC_95(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_97(mAction, mData) mAction(96, mData) VRM_PP_IMPL_REPEAT_DEC_96(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_98(mAction, mData) mAction(97, mData) VRM_PP_IMPL_REPEAT_DEC_97(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_99(mAction, mData) mAction(98, mData) VRM_PP_IMPL_REPEAT_DEC_98(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_100(mAction, mData) mAction(99, mData) VRM_PP_IMPL_REPEAT_DEC_99(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_101(mAction, mData) mAction(100, mData) VRM_PP_IMPL_REPEAT_DEC_100(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_102(mAction, mData) mAction(101, mData) VRM_PP_IMPL_REPEAT_DEC_101(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_103(mAction, mData) mAction(102, mData) VRM_PP_IMPL_REPEAT_DEC_102(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_104(mAction, mData) mAction(103, mData) VRM_PP_IMPL_REPEAT_DEC_103(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_105(mAction, mData) mAction(104, mData) VRM_PP_IMPL_REPEAT_DEC_104(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_106(mAction, mData) mAction(105, mData) VRM_PP_IMPL_REPEAT_DEC_105(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_107(mAction, mData) mAction(106, mData) VRM_PP_IMPL_REPEAT_DEC_106(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_108(mAction, mData) mAction(107, mData) VRM_PP_IMPL_REPEAT_DEC_107(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_109(mAction, mData) mAction(108, mData) VRM_PP_IMPL_REPEAT_DEC_108(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_110(mAction, mData) mAction(109, mData) VRM_PP_IMPL_REPEAT_DEC_109(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_111(mAction, mData) mAction(110, mData) VRM_PP_IMPL_REPEAT_DEC_110(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_112(mAction, mData) mAction(111, mData) VRM_PP_IMPL_REPEAT_DEC_111(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_113(mAction, mData) mAction(112, mData) VRM_PP_IMPL_REPEAT_DEC_112(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_114(mAction, mData) mAction(113, mData) VRM_PP_IMPL_REPEAT_DEC_113(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_115(mAction, mData) mAction(114, mData) VRM_PP_IMPL_REPEAT_DEC_114(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_116(mAction, mData) mAction(115, mData) VRM_PP_IMPL_REPEAT_DEC_115(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_117(mAction, mData) mAction(116, mData) VRM_PP_IMPL_REPEAT_DEC_116(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_118(mAction, mData) mAction(117, mData) VRM_PP_IMPL_REPEAT_DEC_117(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_119(mAction, mData) mAction(118, mData) VRM_PP_IMPL_REPEAT_DEC_118(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_120(mAction, mData) mAction(119, mData) VRM_PP_IMPL_REPEAT_DEC_119(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_121(mAction, mData) mAction(120, mData) VRM_PP_IMPL_REPEAT_DEC_120(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_122(mAction, mData) mAction(121, mData) VRM_PP_IMPL_REPEAT_DEC_121(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_123(mAction, mData) mAction(122, mData) VRM_PP_IMPL_REPEAT_DEC_122(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_124(mAction, mData) mAction(123, mData) VRM_PP_IMPL_REPEAT_DEC_123(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_125(mAction, mData) mAction(124, mData) VRM_PP_IMPL_REPEAT_DEC_124(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_126(mAction, mData) mAction(125, mData) VRM_PP_IMPL_REPEAT_DEC_125(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_127(mAction, mData) mAction(126, mData) VRM_PP_IMPL_REPEAT_DEC_126(mAction, mData)
#define VRM_PP_IMPL_REPEAT_DEC_128(mAction, mData) mAction(127, mData) VRM_PP_IMPL_REPEAT_DEC_127(mAction, mData)
#define VRM_PP_IMPL_REPEAT_INC_0(mAction, mData, mLast)
#define VRM_PP_IMPL_REPEAT_INC_1(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_0(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_2(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_1(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_3(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_2(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_4(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_3(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_5(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_4(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_6(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_5(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_7(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_6(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_8(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_7(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_9(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_8(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_10(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_9(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_11(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_10(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_12(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_11(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_13(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_12(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_14(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_13(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_15(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_14(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_16(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_15(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_17(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_16(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_18(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_17(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_19(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_18(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_20(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_19(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_21(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_20(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_22(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_21(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_23(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_22(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_24(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_23(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_25(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_24(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_26(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_25(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_27(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_26(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_28(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_27(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_29(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_28(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_30(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_29(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_31(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_30(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_32(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_31(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_33(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_32(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_34(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_33(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_35(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_34(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_36(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_35(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_37(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_36(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_38(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_37(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_39(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_38(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_40(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_39(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_41(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_40(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_42(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_41(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_43(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_42(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_44(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_43(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_45(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_44(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_46(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_45(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_47(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_46(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_48(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_47(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_49(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_48(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_50(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_49(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_51(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_50(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_52(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_51(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_53(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_52(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_54(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_53(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_55(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_54(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_56(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_55(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_57(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_56(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_58(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_57(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_59(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_58(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_60(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_59(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_61(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_60(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_62(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_61(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_63(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_62(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_64(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_63(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_65(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_64(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_66(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_65(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_67(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_66(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_68(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_67(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_69(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_68(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_70(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_69(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_71(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_70(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_72(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_71(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_73(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_72(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_74(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_73(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_75(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_74(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_76(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_75(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_77(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_76(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_78(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_77(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_79(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_78(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_80(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_79(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_81(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_80(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_82(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_81(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_83(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_82(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_84(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_83(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_85(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_84(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_86(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_85(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_87(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_86(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_88(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_87(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_89(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_88(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_90(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_89(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_91(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_90(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_92(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_91(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_93(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_92(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_94(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_93(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_95(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_94(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_96(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_95(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_97(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_96(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_98(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_97(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_99(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_98(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_100(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_99(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_101(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_100(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_102(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_101(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_103(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_102(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_104(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_103(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_105(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_104(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_106(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_105(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_107(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_106(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_108(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_107(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_109(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_108(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_110(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_109(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_111(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_110(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_112(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_111(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_113(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_112(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_114(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_113(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_115(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_114(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_116(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_115(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_117(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_116(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_118(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_117(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_119(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_118(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_120(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_119(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_121(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_120(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_122(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_121(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_123(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_122(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_124(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_123(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_125(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_124(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_126(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_125(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_127(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_126(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_REPEAT_INC_128(mAction, mData, mLast) mAction(mLast, mData) VRM_PP_IMPL_REPEAT_INC_127(mAction, mData, VRM_PP_INCREMENT(mLast))
#define VRM_PP_IMPL_EVAL_3(...) __VA_ARGS__
#define VRM_PP_IMPL_EVAL_2(...) VRM_PP_IMPL_EVAL_3(VRM_PP_IMPL_EVAL_3(VRM_PP_IMPL_EVAL_3(__VA_ARGS__)))
#define VRM_PP_IMPL_EVAL_1(...) VRM_PP_IMPL_EVAL_2(VRM_PP_IMPL_EVAL_2(VRM_PP_IMPL_EVAL_2(__VA_ARGS__)))
#define VRM_PP_IMPL_EVAL_0(...) VRM_PP_IMPL_EVAL_1(VRM_PP_IMPL_EVAL_1(VRM_PP_IMPL_EVAL_1(__VA_ARGS__)))
#define VRM_PP_EMPTY()
#define VRM_PP_DOT() .
#define VRM_PP_COMMA() ,
#define VRM_PP_DEFER(mX) mX VRM_PP_EMPTY()
#define VRM_PP_OBSTRUCT(...) __VA_ARGS__ VRM_PP_DEFER(VRM_PP_EMPTY)()
#define VRM_PP_EXPAND(...) __VA_ARGS__
#define VRM_PP_EAT(...)
#define VRM_PP_RAW(...) __VA_ARGS__
#define __R(...) VRM_PP_RAW(__VA_ARGS__)
#define VRM_PP_TOSTR_IMPL(...) #__VA_ARGS__
#define VRM_PP_TOSTR(...) VRM_PP_TOSTR_IMPL(__VA_ARGS__)
#define VRM_PP_IMPL_TKNCAT_2(m0, m1) m0##m1
#define VRM_PP_IMPL_TKNCAT_3(m0, m1, m2) m0##m1##m2
#define VRM_PP_IMPL_TKNCAT_4(m0, m1, m2, m3) m0##m1##m2##m3
#define VRM_PP_IMPL_TKNCAT_5(m0, m1, m2, m3, m4) m0##m1##m2##m3##m4
#define VRM_PP_TKNCAT_2(m0, m1) VRM_PP_IMPL_TKNCAT_2(m0, m1)
#define VRM_PP_TKNCAT_3(m0, m1, m2) VRM_PP_IMPL_TKNCAT_3(m0, m1, m2)
#define VRM_PP_TKNCAT_4(m0, m1, m2, m3) VRM_PP_IMPL_TKNCAT_4(m0, m1, m2, m3)
#define VRM_PP_TKNCAT_5(m0, m1, m2, m3, m4) \
VRM_PP_IMPL_TKNCAT_5(m0, m1, m2, m3, m4)
#define VRM_PP_IMPL_N_ARG(...) VRM_PP_IMPL_NSEQ(__VA_ARGS__)
#define VRM_PP_IMPL_ARGCOUNT(...) \
VRM_PP_IMPL_N_ARG(__VA_ARGS__, VRM_PP_IMPL_RSEQ())
#define VRM_PP_ARGCOUNT(...) VRM_PP_IMPL_ARGCOUNT(__VA_ARGS__)
#define VRM_PP_IMPL_CAT(...) \
VRM_PP_TKNCAT_2(VRM_PP_IMPL_CAT_, VRM_PP_ARGCOUNT(__VA_ARGS__))(__VA_ARGS__)
#define VRM_PP_CAT(...) VRM_PP_IMPL_CAT(__VA_ARGS__)
#define VRM_CORE_RETURNS_BODY(...) \
{ \
return __VA_ARGS__; \
}
#define VRM_CORE_NOEXCEPT_AND_TRT(...) \
noexcept(noexcept(__VA_ARGS__))->decltype(__VA_ARGS__)
#define VRM_CORE_RETURNS(...) \
VRM_CORE_NOEXCEPT_AND_TRT(__VA_ARGS__) VRM_CORE_RETURNS_BODY(__VA_ARGS__)
#include <cassert>
#include <cstdlib>
#if defined(VRM_CORE_COMPILER_CLANG) || defined(VRM_CORE_COMPILER_GCC)
#define VRM_CORE_UNREACHABLE() __builtin_unreachable()
#else
#define VRM_CORE_UNREACHABLE() \
do \
{ \
assert(false); \
exit(EXIT_FAILURE); \
} while(false)
#endif
#define VRM_CORE_STATIC_ASSERT(...) static_assert(__VA_ARGS__)
#define VRM_CORE_STATIC_ASSERT_NM(...) \
static_assert(__VA_ARGS__, VRM_PP_TOSTR(__VA_ARGS__))
#if(defined(VRM_CORE_ASSERT_FORCE_OFF) || !defined(VRM_CORE_DEBUG)) && \
!defined(VRM_CORE_ASSERT_FORCE_ON)
#define VRM_CORE_IMPL_ASSERT_DISABLED 1
#else
#define VRM_CORE_IMPL_ASSERT_DISABLED 0
#endif
#if VRM_CORE_IMPL_ASSERT_DISABLED
#define VRM_CORE_IMPL_ASSERT(...)
#define VRM_CORE_IMPL_CONSTEXPR_ASSERT(...)
#else
#include <cassert>
#define VRM_PP_IMPL_BOOL(mX) VRM_PP_IMPL_BOOL_##mX
#define VRM_PP_BOOL(mX) VRM_PP_IMPL_BOOL(mX)
#define VRM_PP_IMPL_BITNOT_0 1
#define VRM_PP_IMPL_BITNOT_1 0
#define VRM_PP_IMPL_BITAND_00 0
#define VRM_PP_IMPL_BITAND_01 0
#define VRM_PP_IMPL_BITAND_10 0
#define VRM_PP_IMPL_BITAND_11 1
#define VRM_PP_IMPL_BITOR_00 0
#define VRM_PP_IMPL_BITOR_01 1
#define VRM_PP_IMPL_BITOR_10 1
#define VRM_PP_IMPL_BITOR_11 1
#define VRM_PP_IMPL_BITNOR_00 1
#define VRM_PP_IMPL_BITNOR_01 0
#define VRM_PP_IMPL_BITNOR_10 0
#define VRM_PP_IMPL_BITNOR_11 0
#define VRM_PP_IMPL_BITXOR_00 0
#define VRM_PP_IMPL_BITXOR_01 1
#define VRM_PP_IMPL_BITXOR_10 1
#define VRM_PP_IMPL_BITXOR_11 0
#define VRM_PP_BITNOT(mX) VRM_PP_TKNCAT_2(VRM_PP_IMPL_BITNOT_, VRM_PP_DEFER(mX))
#define VRM_PP_BITAND(m0, m1) \
VRM_PP_TKNCAT_3(VRM_PP_IMPL_BITAND_, VRM_PP_DEFER(m0), VRM_PP_DEFER(m1))
#define VRM_PP_BITOR(m0, m1) \
VRM_PP_TKNCAT_3(VRM_PP_IMPL_BITOR_, VRM_PP_DEFER(m0), VRM_PP_DEFER(m1))
#define VRM_PP_BITNOR(m0, m1) \
VRM_PP_TKNCAT_3(VRM_PP_IMPL_BITNOR_, VRM_PP_DEFER(m0), VRM_PP_DEFER(m1))
#define VRM_PP_BITXOR(m0, m1) \
VRM_PP_TKNCAT_3(VRM_PP_IMPL_BITXOR_, VRM_PP_DEFER(m0), VRM_PP_DEFER(m1))
#define VRM_PP_IMPL_NOT(mX) VRM_PP_BITNOT(VRM_PP_BOOL(mX))
#define VRM_PP_IMPL_AND(m0, m1) VRM_PP_BITAND(VRM_PP_BOOL(m0), VRM_PP_BOOL(m1))
#define VRM_PP_IMPL_OR(m0, m1) VRM_PP_BITOR(VRM_PP_BOOL(m0), VRM_PP_BOOL(m1))
#define VRM_PP_IMPL_NOR(m0, m1) VRM_PP_BITNOR(VRM_PP_BOOL(m0), VRM_PP_BOOL(m1))
#define VRM_PP_IMPL_XOR(m0, m1) VRM_PP_BITXOR(VRM_PP_BOOL(m0), VRM_PP_BOOL(m1))
#define VRM_PP_NOT(mX) VRM_PP_IMPL_NOT(mX)
#define VRM_PP_AND(m0, m1) VRM_PP_IMPL_AND(m0, m1)
#define VRM_PP_OR(m0, m1) VRM_PP_IMPL_OR(m0, m1)
#define VRM_PP_NOR(m0, m1) VRM_PP_IMPL_NOR(m0, m1)
#define VRM_PP_XOR(m0, m1) VRM_PP_IMPL_XOR(m0, m1)
#define VRM_PP_IMPL_IF_0(mTrue, mFalse) mFalse
#define VRM_PP_IMPL_IF_1(mTrue, mFalse) mTrue
#define VRM_PP_IF(mCond, mTrue, mFalse) \
VRM_PP_TKNCAT_2(VRM_PP_IMPL_IF_, VRM_PP_BOOL(mCond))(mTrue, mFalse)
#define VRM_PP_COMMA_IF(mCond) VRM_PP_IF(mCond, VRM_PP_COMMA, VRM_PP_EMPTY)()
#define VRM_PP_IMPL_DECREMENT(mX) VRM_PP_IMPL_DECREMENT_##mX
#define VRM_PP_DECREMENT(mX) VRM_PP_IMPL_DECREMENT(mX)
#define VRM_PP_IMPL_INCREMENT(mX) VRM_PP_IMPL_INCREMENT_##mX
#define VRM_PP_INCREMENT(mX) VRM_PP_IMPL_INCREMENT(mX)
#define VRM_PP_IMPL_FOREACH(mAction, mData, ...) \
VRM_PP_TKNCAT_2(VRM_PP_IMPL_FOREACH_, VRM_PP_ARGCOUNT(__VA_ARGS__))( \
0, mAction, mData, __VA_ARGS__)
#define VRM_PP_FOREACH(...) VRM_PP_IMPL_FOREACH(__VA_ARGS__)
#define VRM_PP_IMPL_FOREACH_REVERSE(mAction, mData, ...) \
VRM_PP_TKNCAT_2(VRM_PP_IMPL_FOREACH_REVERSE_, \
VRM_PP_ARGCOUNT(__VA_ARGS__))(mAction, mData, __VA_ARGS__)
#define VRM_PP_FOREACH_REVERSE(...) VRM_PP_IMPL_FOREACH_REVERSE(__VA_ARGS__)
#define VRM_PP_IMPL_SEP_TOSTR(mIdx, mData, mArg) \
VRM_PP_TOSTR(mArg) VRM_PP_IF(mIdx, mData, VRM_PP_EMPTY())
#define VRM_PP_SEP_TOSTR(mSeparator, ...) \
VRM_PP_FOREACH_REVERSE(VRM_PP_IMPL_SEP_TOSTR, mSeparator, __VA_ARGS__)
#define VRM_CORE_IMPL_ASSERT(lhs, op, rhs, msg) \
do \
{ \
if(::vrm::core::likely(lhs op rhs)) break; \
\
auto lhs_res(lhs); \
auto rhs_res(rhs); \
\
const char* code_str = VRM_PP_SEP_TOSTR(" ", lhs, op, rhs); \
const char* line_str = VRM_PP_TOSTR(__LINE__); \
const char* file_str = VRM_PP_TOSTR(__FILE__); \
const char* lhs_str = VRM_PP_TOSTR(lhs); \
const char* op_str = VRM_PP_TOSTR(op); \
const char* rhs_str = VRM_PP_TOSTR(rhs); \
const char* msg_str = msg; \
\
::vrm::core::impl::assert::fire(code_str, line_str, file_str, lhs_str, \
op_str, rhs_str, msg_str, lhs_res, rhs_res); \
\
} while(false)
#define VRM_CORE_IMPL_CONSTEXPR_ASSERT(lhs, op, rhs, msg) \
do \
{ \
(::vrm::core::likely(lhs op rhs) \
? void(0) \
: []{ assert(!VRM_PP_TOSTR(lhs, op, rhs));}()); \
\
} while(false)
#endif
#define VRM_CORE_ASSERT_OP_MSG(lhs, op, rhs, msg) \
VRM_CORE_IMPL_ASSERT(lhs, op, rhs, msg)
#define VRM_CORE_ASSERT_OP(lhs, op, rhs) \
VRM_CORE_ASSERT_OP_MSG(lhs, op, rhs, "")
#define VRM_CORE_ASSERT_MSG(expr, msg) \
VRM_CORE_ASSERT_OP_MSG((expr), ==, true, msg)
#define VRM_CORE_ASSERT(expr) VRM_CORE_ASSERT_MSG(expr, "")
#define VRM_CORE_CONSTEXPR_ASSERT_OP_MSG(lhs, op, rhs, msg) \
VRM_CORE_IMPL_CONSTEXPR_ASSERT(lhs, op, rhs, msg)
#define VRM_CORE_CONSTEXPR_ASSERT_OP(lhs, op, rhs) \
VRM_CORE_CONSTEXPR_ASSERT_OP_MSG(lhs, op, rhs, "")
#define VRM_CORE_CONSTEXPR_ASSERT_MSG(expr, msg) \
VRM_CORE_CONSTEXPR_ASSERT_OP_MSG((expr), ==, true, msg)
#define VRM_CORE_CONSTEXPR_ASSERT(expr) VRM_CORE_CONSTEXPR_ASSERT_MSG(expr, "")
#if !VRM_CORE_IMPL_ASSERT_DISABLED
#if !VRM_CORE_IMPL_ASSERT_DISABLED
VRM_CORE_NAMESPACE
{
namespace impl
{
namespace assert
{
struct state final
{
bool _skip{false};
};
state& get_state() noexcept;
template <typename TLhs, typename TRhs>
void fire(const char* code, const char* line, const char* file,
const char* lhs, const char* op, const char* rhs,
const char* msg, const TLhs& lhs_res, const TRhs& rhs_res);
}
}
}
VRM_CORE_NAMESPACE_END
#endif
#if !VRM_CORE_IMPL_ASSERT_DISABLED
#include <iostream>
#include <string>
#include <sstream>
VRM_CORE_NAMESPACE
{
namespace impl
{
namespace assert
{
template <typename TLhs, typename TRhs>
void fire(const char* code, const char* line, const char* file,
const char* lhs, const char* op, const char* rhs,
const char* msg, const TLhs& lhs_res, const TRhs& rhs_res)
{
auto c_str_empty([](auto c_str)
{
return c_str && !c_str[0];
});
std::cout << "ASSERTION FAILED\n";
if(!c_str_empty(msg)) std::cout << "Message: " << msg << "\n";
std::cout << "\n";
std::cout << "[file: " << file << "]\n"
<< "[line: " << line << "]\n\n" << code << "\n\n";
std::cout << lhs << " = " << lhs_res << "\n" << rhs << " = "
<< rhs_res << "\n\n"
<< "(" << lhs_res << " " << op << " " << rhs_res
<< ") == false\n\n";
if(get_state()._skip)
{
std::cout << "Skipping assertion..." << std::endl;
return;
}
std::cout << "0) Skip this assertion.\n"
<< "1) Skip all assertions.\n"
<< "_) Terminate the program." << std::endl;
std::string input;
std::cin >> input;
if(input == "0")
{
return;
}
if(input == "1")
{
get_state()._skip = true;
return;
}
std::terminate();
}
}
}
}
VRM_CORE_NAMESPACE_END
#endif
#if defined(VRM_CORE_INLINE_LIBRARY)
#if !VRM_CORE_IMPL_ASSERT_DISABLED
VRM_CORE_NAMESPACE
{
namespace impl
{
namespace assert
{
VRM_CORE_FN_API state& VRM_CORE_CONST_FN get_state() noexcept
{
thread_local state result;
return result;
}
}
}
}
VRM_CORE_NAMESPACE_END
#endif
#endif
#endif
#include <type_traits>
#include <utility>
#include <cstddef>
#include <cstdint>
VRM_CORE_NAMESPACE
{
using llong = long long;
using uchar = unsigned char;
using ushort = unsigned short;
using uint = unsigned int;
using ulong = unsigned long;
using ullong = unsigned long long;
using ldouble = long double;
using sz_t = ::std::size_t;
using i8 = ::std::int8_t;
using i16 = ::std::int16_t;
using i32 = ::std::int32_t;
using i64 = ::std::int64_t;
using ui8 = ::std::uint8_t;
using ui16 = ::std::uint16_t;
using ui32 = ::std::uint32_t;
using ui64 = ::std::uint64_t;
}
VRM_CORE_NAMESPACE_END
#include <cstddef>
#include <type_traits>
#define VRM_CORE_IMPL_IC_ALIAS(type, name) VRM_PP_CAT(name, _constant)
#define VRM_CORE_IMPL_IC_SHORT_ALIAS(type, name) VRM_PP_CAT(name, _)
#define VRM_CORE_IMPL_IC_SHORT_ALIAS_V(type, name) VRM_PP_CAT(name, _v)
#define VRM_CORE_IMPL_IS_IC_HELPER(type, name) \
VRM_PP_CAT(is_, name, _constant_helper)
#define VRM_CORE_IMPL_IS_IC(type, name) VRM_PP_CAT(is_, name, _constant)
#define VRM_CORE_IMPL_IS_IC_V(type, name) VRM_PP_CAT(is_, name, _constant_v)
#define VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER(type, name) \
template <type TV> \
using VRM_CORE_IMPL_IC_ALIAS(type, name) = \
::std::integral_constant<type, TV>; \
\
template <type TV> \
using VRM_CORE_IMPL_IC_SHORT_ALIAS(type, name) = \
VRM_CORE_IMPL_IC_ALIAS(type, name)<TV>; \
\
template <type TV> \
constexpr VRM_CORE_IMPL_IC_SHORT_ALIAS( \
type, name)<TV> VRM_CORE_IMPL_IC_SHORT_ALIAS_V(type, name){}; \
\
namespace impl \
{ \
template <typename T> \
struct VRM_CORE_IMPL_IS_IC_HELPER(type, name) \
: ::std::false_type \
{ \
}; \
\
template <type TV> \
struct VRM_CORE_IMPL_IS_IC_HELPER( \
type, name)<::std::integral_constant<type, TV>> : ::std::true_type \
{ \
}; \
} \
\
template <typename T> \
using VRM_CORE_IMPL_IS_IC(type, name) = \
impl::VRM_CORE_IMPL_IS_IC_HELPER(type, name)<T>; \
\
template <typename T> \
constexpr VRM_CORE_IMPL_IS_IC(type, name)<T> VRM_CORE_IMPL_IS_IC_V( \
type, name){};
#define VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(x) \
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER(x, x)
VRM_CORE_NAMESPACE
{
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(char)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(short)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(int)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(long)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(llong)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(uchar)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(ushort)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(uint)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(ulong)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(ullong)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(i8)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(i16)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(i32)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(i64)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(ui8)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(ui16)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(ui32)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(ui64)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(bool)
VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN(sz_t)
template <sz_t TI>
constexpr sz_t_<TI> sz_v{};
}
VRM_CORE_NAMESPACE_END
#undef VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER_SN
#undef VRM_CORE_IMPL_DEFINE_INTEGRAL_CONSTANT_WRAPPER
#undef VRM_CORE_IMPL_IS_IC_V
#undef VRM_CORE_IMPL_IS_IC
#undef VRM_CORE_IMPL_IS_IC_HELPER
#undef VRM_CORE_IMPL_IC_SHORT_ALIAS_V
#undef VRM_CORE_IMPL_IC_SHORT_ALIAS
#undef VRM_CORE_IMPL_IC_ALIAS
VRM_CORE_NAMESPACE
{
template <typename TOut, typename TIn>
using same_signedness =
bool_<std::is_signed<TOut>{} == std::is_signed<TIn>{}>;
template <typename TEnum, typename TOut>
using underlying_convertible_to =
bool_<std::is_convertible<std::underlying_type_t<TEnum>, TOut>{}>;
template <typename TOut, typename TIn>
using number_convertible_to_enum =
bool_<std::is_enum<TOut>() && !std::is_enum<TIn>() &&
underlying_convertible_to<TOut, TIn>{}>;
template <typename TOut, typename TIn>
using are_both_enums = bool_<std::is_enum<TOut>() && std::is_enum<TIn>()>;
template <typename TOut, typename TIn>
using are_underlying_types_convertible =
bool_<std::is_convertible<std::underlying_type_t<TOut>,
std::underlying_type_t<TIn>>{}>;
template <typename T, typename TStorage>
using valid_storage = bool_<sizeof(typename TStorage::type) >= sizeof(T) &&
alignof(typename TStorage::type) >= alignof(T)>;
}
VRM_CORE_NAMESPACE_END
#include <type_traits>
#include <type_traits>
VRM_CORE_NAMESPACE
{
template <typename T, typename TSource>
using copy_const_qualifier =
std::conditional_t<std::is_const<TSource>{}, // .
std::add_const_t<T>, T>;
template <typename T, typename TSource>
using copy_volatile_qualifier =
std::conditional_t<std::is_volatile<TSource>{}, // .
std::add_volatile_t<T>, T>;
template <typename T, typename TSource>
using copy_cv_qualifiers =
copy_const_qualifier<copy_volatile_qualifier<T, TSource>, TSource>;
}
VRM_CORE_NAMESPACE_END
#include <type_traits>
VRM_CORE_NAMESPACE
{
template <typename T>
struct remove_rvalue_reference
{
using type = T;
};
template <typename T>
struct remove_rvalue_reference<T&&>
{
using type = T;
};
template <typename T>
using remove_rvalue_reference_t = typename remove_rvalue_reference<T>::type;
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
template <typename T>
VRM_CORE_ALWAYS_INLINE constexpr auto copy_if_rvalue(T && x) noexcept(
!std::is_rvalue_reference<T>{} ||
std::is_nothrow_copy_constructible<T>{})
->remove_rvalue_reference_t<decltype(FWD(x))>
{
return FWD(x);
}
}
VRM_CORE_NAMESPACE_END
#include <type_traits>
#include <utility>
VRM_CORE_NAMESPACE
{
struct nonesuch
{
nonesuch() = delete;
~nonesuch() = delete;
nonesuch(const nonesuch&) = delete;
void operator=(const nonesuch&) = delete;
};
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
template <typename...>
using void_t = void;
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace impl
{
template <
typename TDefault,
typename TVoid,
template <typename...> class TOp, typename... Ts // .
>
struct detector
{
using value_t = std::false_type;
using type = TDefault;
};
template < // .
typename TDefault, // .
template <typename...> class TOp, // .
typename... Ts // .
>
struct detector<TDefault, void_t<TOp<Ts...>>, TOp, Ts...>
{
using value_t = std::true_type;
using type = TOp<Ts...>;
};
}
template <template <typename...> class TOp, typename... Ts>
using is_detected =
typename impl::detector<nonesuch, void, TOp, Ts...>::value_t;
template <template <typename...> class TOp, typename... Ts>
using detected_t =
typename impl::detector<nonesuch, void, TOp, Ts...>::type;
template <typename TDefault, template <typename...> class TOp,
typename... Ts>
using detected_or = impl::detector<TDefault, void, TOp, Ts...>;
template <template <typename...> class TOp, typename... Ts>
constexpr bool is_detected_v = is_detected<TOp, Ts...>::value;
template <typename TDefault, template <typename...> class TOp,
typename... Ts>
using detected_or_t = typename detected_or<TDefault, TOp, Ts...>::type;
template <typename Expected, template <typename...> class TOp,
typename... Ts>
using is_detected_exact = std::is_same<Expected, detected_t<TOp, Ts...>>;
template <typename Expected, template <typename...> class TOp,
typename... Ts>
constexpr bool is_detected_exact_v =
is_detected_exact<Expected, TOp, Ts...>::value;
template <typename To, template <typename...> class TOp, typename... Ts>
using is_detected_convertible =
std::is_convertible<detected_t<TOp, Ts...>, To>;
template <typename To, template <typename...> class TOp, typename... Ts>
constexpr bool is_detected_convertible_v =
is_detected_convertible<To, TOp, Ts...>::value;
}
VRM_CORE_NAMESPACE_END
#include <type_traits>
#include <type_traits>
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename T, typename TSource>
using copy_referenceness_impl =
std::conditional_t<!std::is_reference<TSource>{}, T,
std::conditional_t<std::is_lvalue_reference<TSource>{},
std::add_lvalue_reference_t<T>,
std::add_rvalue_reference_t<T>>>;
}
template <typename T, typename TSource>
using copy_referenceness =
impl::copy_referenceness_impl<std::remove_reference_t<T>, TSource>;
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
template <typename T, typename TSource>
using as_if_forwarded = std::conditional_t<!std::is_reference<TSource>{},
std::add_rvalue_reference_t<std::remove_reference_t<T>>,
copy_referenceness<T, TSource>>;
template <typename TLike, typename T>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) forward_like(
T && x) noexcept
{
VRM_CORE_STATIC_ASSERT_NM(!(std::is_rvalue_reference<decltype(x)>{} &&
std::is_lvalue_reference<TLike>{}));
return static_cast<as_if_forwarded<T, TLike>>(x);
}
}
VRM_CORE_NAMESPACE_END
#include <type_traits>
VRM_CORE_NAMESPACE
{
template <typename, template <typename...> class>
struct is_specialization_of : std::false_type
{
};
template <template <typename...> class TTemplate, typename... Ts>
struct is_specialization_of<TTemplate<Ts...>, TTemplate> : std::true_type
{
};
template <typename T, template <typename...> class TTemplate>
using is_specialization_of_t = is_specialization_of<T, TTemplate>;
template <typename T, template <typename...> class TTemplate>
constexpr auto is_specialization_of_v =
is_specialization_of<T, TTemplate>{};
}
VRM_CORE_NAMESPACE_END
#include <type_traits>
VRM_CORE_NAMESPACE
{
template <typename T, typename... Ts>
using has_nothrow_call_operator =
bool_<noexcept((std::declval<T>())(std::declval<Ts>()...))>;
}
VRM_CORE_NAMESPACE_END
#include <type_traits>
#include <utility>
VRM_CORE_NAMESPACE
{
template <typename T>
VRM_CORE_ALWAYS_INLINE constexpr auto decay_tuple_size() noexcept
{
return std::tuple_size<std::decay_t<T>>{};
}
template <typename T>
using make_tuple_index_sequence =
std::make_index_sequence<decay_tuple_size<T>()>;
}
VRM_CORE_NAMESPACE_END
#include <type_traits>
#include <iosfwd>
#include <cstddef>
namespace std
{
VRM_CORE_FN_API auto& operator<<(ostream& o, const nullptr_t&);
}
#if defined(VRM_CORE_INLINE_LIBRARY)
#include <ostream>
namespace std
{
auto& operator<<(std::ostream& o, const std::nullptr_t&)
{
o << "nullptr";
return o;
}
}
#endif
#include <iosfwd>
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename T>
VRM_CORE_CLASS_API class ignore_manipulator
{
private:
T _str;
public:
ignore_manipulator() = default;
template <typename TStr>
ignore_manipulator(TStr&& str);
template <typename TStr>
auto& operator=(TStr&& str);
operator const T&() const noexcept;
auto begin() const noexcept;
auto end() const noexcept;
};
template <typename>
struct is_ignore_manipulator : std::false_type
{
};
template <typename T>
struct is_ignore_manipulator<ignore_manipulator<T>> : std::true_type
{
};
}
template <typename T>
auto make_ignore_manipulator(T && x);
template <typename T>
auto operator<<(std::ostream & o, const T& im)
->std::enable_if_t<impl::is_ignore_manipulator<T>{}, std::ostream&>;
}
VRM_CORE_NAMESPACE_END
#include <ostream>
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename T>
template <typename TStr>
ignore_manipulator<T>::ignore_manipulator(TStr&& str)
: _str(FWD(str))
{
}
template <typename T>
template <typename TStr>
auto& ignore_manipulator<T>::operator=(TStr&& str)
{
_str = FWD(str);
return *this;
}
template <typename T>
ignore_manipulator<T>::operator const T&() const noexcept
{
return _str;
}
template <typename T>
auto VRM_CORE_PURE_FN ignore_manipulator<T>::begin() const noexcept
{
return std::begin(_str);
}
template <typename T>
auto VRM_CORE_PURE_FN ignore_manipulator<T>::end() const noexcept
{
return std::end(_str);
}
}
template <typename T>
auto make_ignore_manipulator(T && x)
{
return impl::ignore_manipulator<decltype(x)>(FWD(x));
}
template <typename T>
auto operator<<(std::ostream & o, const T& im)
->std::enable_if_t<impl::is_ignore_manipulator<T>{}, std::ostream&>
{
for(const auto& c : im) o.put(c);
return o;
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename TOut, typename T>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto)
assert_correct_polymorphic(T* ptr, std::true_type) noexcept
{
VRM_CORE_ASSERT_OP(dynamic_cast<TOut>(ptr), ==, ptr);
(void)ptr;
}
template <typename TCasted, typename T>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto)
assert_correct_polymorphic(T*, std::false_type) noexcept
{
}
template <typename TDerived, typename TBase, typename TOut, typename T>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) hierarchy_cast(
T* ptr) noexcept
{
VRM_CORE_STATIC_ASSERT_NM(std::is_base_of<TBase, TDerived>{});
VRM_CORE_ASSERT_OP(ptr, !=, nullptr);
assert_correct_polymorphic<TOut>(ptr, std::is_polymorphic<TBase>{});
return static_cast<TOut>(ptr);
}
}
template <typename TDerived, typename TBase>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) to_derived(
TBase * base) noexcept
{
using result_type = copy_cv_qualifiers<TDerived, TBase>*;
return impl::hierarchy_cast<TDerived, TBase, result_type>(base);
}
template <typename TBase, typename TDerived>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) to_base(
TDerived * derived) noexcept
{
using result_type = copy_cv_qualifiers<TBase, TDerived>*;
return impl::hierarchy_cast<TDerived, TBase, result_type>(derived);
}
template <typename TDerived, typename TBase>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) to_derived(
TBase && base) noexcept
{
return forward_like<decltype(base)>(*to_derived<TDerived>(&base));
}
template <typename TBase, typename TDerived>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) to_base(
TDerived && derived) noexcept
{
return forward_like<decltype(derived)>(*to_base<TBase>(&derived));
}
}
VRM_CORE_NAMESPACE_END
#include <type_traits>
VRM_CORE_NAMESPACE
{
template <typename T, typename TStorage>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) storage_cast(
TStorage * storage) noexcept
{
VRM_CORE_STATIC_ASSERT( // .
sizeof(typename TStorage::type) >= sizeof(T), // .
"`TStorage` is not big enough for `T`.");
VRM_CORE_STATIC_ASSERT( // .
alignof(typename TStorage::type) >= alignof(T), // .
"`TStorage` is not properly aligned for `T`.");
VRM_CORE_ASSERT_OP(storage, !=, nullptr);
using return_type = copy_cv_qualifiers<T, TStorage>;
return reinterpret_cast<return_type*>(storage);
}
template <typename T, typename TStorage>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) storage_cast(
TStorage && storage) noexcept
{
return forward_like<decltype(storage)>(*storage_cast<T>(&storage));
}
}
VRM_CORE_NAMESPACE_END
#include <type_traits>
#include <cstdint>
#include <cfenv>
#include <limits>
#include <type_traits>
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename TOut, typename TIn>
constexpr bool will_overflow_impl(
const TIn& x, std::false_type, std::false_type) noexcept
{
if(x > std::numeric_limits<TOut>::max() ||
x < std::numeric_limits<TOut>::lowest())
{
return true;
}
std::feclearexcept(FE_OVERFLOW | FE_UNDERFLOW | FE_INVALID);
TOut temp0(x);
TIn temp1(x);
temp0 = temp1;
(void)temp0;
(void)temp1;
if(std::fetestexcept(FE_OVERFLOW | FE_UNDERFLOW | FE_INVALID))
{
return true;
}
if(static_cast<TIn>(static_cast<TOut>(x)) != x)
{
return true;
}
return false;
}
template <typename TOut, typename TIn>
constexpr bool will_overflow_impl(
const TIn& x, std::true_type, std::false_type) noexcept
{
if((long double)x > (long double)std::numeric_limits<TOut>::max() ||
(long double)x <
(long double)std::numeric_limits<TOut>::lowest())
{
return true;
}
return false;
}
template <typename TOut, typename TIn>
constexpr bool will_overflow_impl(
const TIn& x, std::false_type, std::true_type) noexcept
{
if((long double)x > (long double)std::numeric_limits<TOut>::max() ||
(long double)x <
(long double)std::numeric_limits<TOut>::lowest())
{
return true;
}
return false;
}
template <typename TOut, typename TIn>
constexpr bool will_overflow_impl(
const TIn& x, std::true_type, std::true_type) noexcept
{
using out_lim = std::numeric_limits<TOut>;
using intmax_lim = std::numeric_limits<intmax_t>;
constexpr auto out_min(out_lim::min());
constexpr auto out_max(out_lim::max());
constexpr auto intmax_max(intmax_lim::max());
auto x_as_intmax_t(static_cast<intmax_t>(x));
auto x_as_uintmax_t(static_cast<uintmax_t>(x));
constexpr auto out_min_as_intmax_t(static_cast<intmax_t>(out_min));
constexpr auto out_max_as_intmax_t(static_cast<intmax_t>(out_max));
constexpr auto intmax_max_as_uintmax_t(
static_cast<uintmax_t>(intmax_max));
constexpr auto out_max_as_uintmax_t(
static_cast<uintmax_t>(out_max));
if(std::is_signed<TOut>{})
{
if(!std::is_signed<TIn>{} &&
x_as_uintmax_t > intmax_max_as_uintmax_t)
{
return true;
}
if(x_as_intmax_t < out_min_as_intmax_t)
{
return true;
}
if(x_as_intmax_t > out_max_as_intmax_t)
{
return true;
}
return false;
}
if(x < 0)
{
return true;
}
if(x_as_uintmax_t > out_max_as_uintmax_t)
{
return true;
}
if(static_cast<TIn>(static_cast<TOut>(x)) != x)
{
return true;
}
return false;
}
template <typename TOut, typename TIn>
constexpr bool will_overflow(const TIn& x) noexcept
{
return will_overflow_impl<TOut, TIn>(x,
bool_v<std::is_integral<TOut>{}>,
bool_v<std::is_integral<TIn>{}>);
}
}
}
VRM_CORE_NAMESPACE_END
#include <type_traits>
#include <type_traits>
#include <type_traits>
VRM_CORE_NAMESPACE
{
namespace impl
{
struct is_valid_dummy
{
};
template <typename T>
class is_valid_wrapper
{
private:
template <typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto test(is_valid_dummy) noexcept
-> decltype(
std::declval<T>()(std::declval<Ts>()...), std::true_type{})
{
return std::true_type{};
}
template <typename...>
VRM_CORE_ALWAYS_INLINE constexpr auto test(...) noexcept
{
return std::false_type{};
}
public:
template <typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto operator()(
Ts&&... xs) noexcept
{
return test<decltype(xs)...>(is_valid_dummy{});
}
};
}
template <typename T>
VRM_CORE_ALWAYS_INLINE constexpr auto is_valid(T && )
{
return impl::is_valid_wrapper<T>{};
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace impl
{
VRM_CORE_ALWAYS_INLINE auto VRM_CORE_CONST_FN is_strong_typedef_impl()
{
return is_valid([](auto x) ->
typename decltype(x)::strong_typedef_tag{});
}
}
template <typename T>
constexpr auto is_strong_typedef_v = // .
decltype(impl::is_strong_typedef_impl()(T{})){};
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace impl
{
struct strong_typedef_marker
{
};
}
}
VRM_CORE_NAMESPACE_END
#define VRM_CORE_STRONG_TYPEDEF(underlying, name) \
class name final \
{ \
public: \
using strong_typedef_tag = ::vrm::core::impl::strong_typedef_marker; \
using underlying_type = underlying; \
\
private: \
underlying _value; \
\
public: \
VRM_CORE_ALWAYS_INLINE name() noexcept = default; \
\
VRM_CORE_ALWAYS_INLINE name(const name&) = default; \
VRM_CORE_ALWAYS_INLINE name(name&&) = default; \
\
VRM_CORE_ALWAYS_INLINE name& operator=(const name&) = default; \
VRM_CORE_ALWAYS_INLINE name& operator=(name&&) = default; \
\
VRM_CORE_ALWAYS_INLINE constexpr explicit name(underlying x) noexcept \
: _value{x} \
{ \
} \
\
VRM_CORE_ALWAYS_INLINE constexpr name& operator=( \
underlying rhs) noexcept \
{ \
_value = rhs; \
return *this; \
} \
\
VRM_CORE_ALWAYS_INLINE constexpr operator const underlying&() const \
noexcept \
{ \
return _value; \
} \
\
VRM_CORE_ALWAYS_INLINE constexpr operator underlying&() noexcept \
{ \
return _value; \
} \
\
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) operator==( \
const name& rhs) noexcept \
{ \
return _value == rhs._value; \
} \
\
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) operator!=( \
const name& rhs) noexcept \
{ \
return _value != rhs._value; \
} \
\
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) operator<( \
const name& rhs) noexcept \
{ \
return _value < rhs._value; \
} \
\
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) operator>( \
const name& rhs) noexcept \
{ \
return _value > rhs._value; \
} \
\
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) operator<=( \
const name& rhs) noexcept \
{ \
return _value <= rhs._value; \
} \
\
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) operator>=( \
const name& rhs) noexcept \
{ \
return _value >= rhs._value; \
} \
}; \
\
VRM_CORE_STATIC_ASSERT_NM(std::is_literal_type<name>{}); \
VRM_CORE_STATIC_ASSERT_NM(std::is_literal_type<underlying>{})
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename, typename>
struct underyling_if_strong_typedef_dispatch;
template <typename T>
struct underyling_if_strong_typedef_dispatch<T, std::true_type>
{
using type = typename T::underlying_type;
};
template <typename T>
struct underyling_if_strong_typedef_dispatch<T, std::false_type>
{
using type = T;
};
}
template <typename T>
using underlying_if_strong_typedef_type =
typename impl::underyling_if_strong_typedef_dispatch<T,
bool_<is_strong_typedef_v<T>>>::type;
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
template <typename TOut, typename TIn>
VRM_CORE_ALWAYS_INLINE constexpr auto to_num(const TIn& x) noexcept
{
VRM_CORE_STATIC_ASSERT( // .
std::is_arithmetic<underlying_if_strong_typedef_type<TOut>>{},
"`TOut` output type must be an arithmetic type.");
VRM_CORE_STATIC_ASSERT( // .
std::is_arithmetic<underlying_if_strong_typedef_type<TIn>>{},
"`TIn` input type must be an arithmetic type.");
VRM_CORE_CONSTEXPR_ASSERT((!impl::will_overflow<TOut, TIn>(x)));
return static_cast<TOut>(x);
}
}
VRM_CORE_NAMESPACE_END
#define VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER(type, name) \
template <typename T> \
VRM_CORE_ALWAYS_INLINE constexpr auto VRM_PP_CAT(to_, name)(T x) noexcept \
{ \
return to_num<type>(x); \
}
#define VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(type) \
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER(type, type)
VRM_CORE_NAMESPACE
{
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(float)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(double)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(ldouble)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(char)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(short)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(int)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(long)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(llong)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(uchar)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(ushort)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(uint)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(ulong)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(ullong)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(i8)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(i16)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(i32)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(i64)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(ui8)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(ui16)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(ui32)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(ui64)
VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME(sz_t)
}
VRM_CORE_NAMESPACE_END
#undef VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER_SAME_NAME
#undef VRM_CORE_IMPL_DEFINE_NUM_TO_NUM_CONVERTER
VRM_CORE_NAMESPACE
{
template <typename TOut, typename TIn>
VRM_CORE_ALWAYS_INLINE constexpr auto from_enum(const TIn& x) noexcept
{
VRM_CORE_STATIC_ASSERT_NM(std::is_enum<TIn>{});
VRM_CORE_STATIC_ASSERT_NM(underlying_convertible_to<TIn, TOut>{});
return to_num<TOut>(static_cast<std::underlying_type_t<TIn>>(x));
}
template <typename TIn>
VRM_CORE_ALWAYS_INLINE constexpr auto from_enum(const TIn& x) noexcept
{
return from_enum<std::underlying_type_t<TIn>, TIn>(x);
}
template <typename TOut, typename TIn>
VRM_CORE_ALWAYS_INLINE constexpr auto to_enum(const TIn& x) noexcept
->std::enable_if_t<number_convertible_to_enum<TOut, TIn>{}, TOut>
{
return static_cast<TOut>(to_num<std::underlying_type_t<TOut>>(x));
}
template <typename TOut, typename TIn>
VRM_CORE_ALWAYS_INLINE constexpr auto to_enum(const TIn& x) noexcept
->std::enable_if_t<are_both_enums<TOut, TIn>{}, TOut>
{
VRM_CORE_STATIC_ASSERT_NM(
are_underlying_types_convertible<TOut, TIn>{});
return to_enum<TOut>(from_enum(x));
}
}
VRM_CORE_NAMESPACE_END
#include <type_traits>
#include <string>
VRM_CORE_NAMESPACE
{
VRM_CORE_ALWAYS_INLINE auto str_to_int(const char* x)
{
char* end;
return to_int(std::strtol(x, &end, 10));
}
VRM_CORE_ALWAYS_INLINE auto str_to_float(const char* x)
{
char* end;
return to_float(std::strtof(x, &end));
}
VRM_CORE_ALWAYS_INLINE auto str_to_double(const char* x)
{
char* end;
return to_double(std::strtod(x, &end));
}
VRM_CORE_ALWAYS_INLINE auto str_to_size_t(const char* x)
{
char* end;
return to_sz_t(std::strtoll(x, &end, 10));
}
VRM_CORE_ALWAYS_INLINE auto str_to_int(const std::string& x)
{
return str_to_int(x.c_str());
}
VRM_CORE_ALWAYS_INLINE auto str_to_float(const std::string& x)
{
return str_to_float(x.c_str());
}
VRM_CORE_ALWAYS_INLINE auto str_to_double(const std::string& x)
{
return str_to_double(x.c_str());
}
VRM_CORE_ALWAYS_INLINE auto str_to_size_t(const std::string& x)
{
return str_to_size_t(x.c_str());
}
}
VRM_CORE_NAMESPACE_END
#include <type_traits>
VRM_CORE_NAMESPACE
{
template <typename T>
VRM_CORE_ALWAYS_INLINE constexpr auto to_void_ptr(T * x) noexcept
{
return static_cast<copy_cv_qualifiers<void, T>*>(x);
}
template <typename T>
VRM_CORE_ALWAYS_INLINE constexpr auto num_to_void_ptr(T && x) noexcept
->std::enable_if_t<!std::is_pointer<T>{}, copy_cv_qualifiers<void, T>*>
{
VRM_CORE_STATIC_ASSERT_NM(std::is_arithmetic<std::decay_t<T>>{});
return reinterpret_cast<copy_cv_qualifiers<void, T>*>(x);
}
}
VRM_CORE_NAMESPACE_END
#include <type_traits>
VRM_CORE_NAMESPACE
{
template <typename TOut, typename TIn>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) self_cast(TIn && x) noexcept
{
using out_decay = std::decay_t<TOut>;
using in_decay = std::decay_t<TIn>;
VRM_CORE_STATIC_ASSERT_NM(std::is_same<out_decay, in_decay>{});
return static_cast<TOut>(FWD(x));
}
}
VRM_CORE_NAMESPACE_END
#include <tuple>
#include <utility>
/*
struct for_args_continue{};
struct for_args_break{};
struct for_args_return{};*/
VRM_CORE_NAMESPACE
{
namespace impl
{
template <sz_t TI>
struct for_args_data_type
{
static constexpr sz_t index{TI};
};
template <sz_t TI>
constexpr sz_t for_args_data_type<TI>::index;
template <typename, typename>
struct for_args_data_helper;
template <sz_t... Bs, sz_t... Cs>
struct for_args_data_helper<std::index_sequence<Bs...>,
std::index_sequence<Cs...>>
{
using swallow = bool[];
#define VRM_CORE_IMPL_IMPL_FORNARGS_EXECN_BODY() \
f(for_args_data_type<TI>{}, std::get<TArity + Cs>(FWD(xs))...)
template <sz_t TI, sz_t TArity, typename TF, typename TTpl,
typename... Ts>
VRM_CORE_ALWAYS_INLINE static constexpr void
exec_n(TF&& f, TTpl&& xs) noexcept(
noexcept(VRM_CORE_IMPL_IMPL_FORNARGS_EXECN_BODY()))
{
VRM_CORE_IMPL_IMPL_FORNARGS_EXECN_BODY();
}
#undef VRM_CORE_IMPL_IMPL_FORNARGS_EXECN_BODY
#define VRM_CORE_IMPL_IMPL_FORNARGS_EXEC_BODY() \
(void) swallow \
{ \
(exec_n<Bs, (Bs * sizeof...(Cs))>(f, FWD(xs)), true)..., true \
}
template <typename TF, typename TTpl, typename... Ts>
VRM_CORE_ALWAYS_INLINE static constexpr void
exec(TF&& f, TTpl&& xs) noexcept(
noexcept(VRM_CORE_IMPL_IMPL_FORNARGS_EXEC_BODY()))
{
VRM_CORE_IMPL_IMPL_FORNARGS_EXEC_BODY();
}
#undef VRM_CORE_IMPL_IMPL_FORNARGS_EXEC_BODY
};
#define VRM_CORE_IMPL_FORNARGS_BODY() \
impl::for_args_data_helper< \
std::make_index_sequence<sizeof...(Ts) / TArity>, \
std::make_index_sequence<TArity>>::exec(FWD(f), \
std::forward_as_tuple(FWD(xs)...))
template <sz_t TArity>
struct for_args_data_dispatch
{
template <typename TF, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr static void exec(TF&& f,
Ts&&... xs) noexcept(noexcept(VRM_CORE_IMPL_FORNARGS_BODY()))
{
VRM_CORE_STATIC_ASSERT(
TArity > 0, "Unallowed arity: must be greater than 0");
VRM_CORE_STATIC_ASSERT(sizeof...(Ts) % TArity == 0,
"Unallowed arity: not divisible by number of arguments");
VRM_CORE_IMPL_FORNARGS_BODY();
}
};
#undef VRM_CORE_IMPL_FORNARGS_BODY
}
template <sz_t TArity = 1, typename TF, typename... Ts>
VRM_CORE_ALWAYS_INLINE // .
constexpr void for_args_data(TF && f, Ts && ... xs) // .
noexcept(noexcept(
impl::for_args_data_dispatch<TArity>::exec(FWD(f), FWD(xs)...)))
{
impl::for_args_data_dispatch<TArity>::exec(FWD(f), FWD(xs)...);
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename TF>
struct ignore_first_arg
{
TF _f;
template <typename T>
ignore_first_arg(T&& f) noexcept : _f{f}
{
}
template <typename T, typename... Ts>
VRM_CORE_ALWAYS_INLINE void operator()(T&&, Ts&&... xs)
{
_f(FWD(xs)...);
}
};
}
template <sz_t TArity = 1, typename TF, typename... Ts>
VRM_CORE_ALWAYS_INLINE // .
constexpr void for_args(TF && f, Ts && ... xs) // .
noexcept(noexcept(for_args_data<TArity>(
impl::ignore_first_arg<decltype(f)>{f}, FWD(xs)...)))
{
for_args_data<TArity>(
[&f](auto, auto&&... rest)
{
f(FWD(rest)...);
},
FWD(xs)...);
}
}
VRM_CORE_NAMESPACE_END
#include <tuple>
VRM_CORE_NAMESPACE
{
template <typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto make_ref_tuple(Ts && ... xs) noexcept
{
return std::tuple<Ts...>(FWD(xs)...);
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
template <sz_t TN, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) nth_arg(Ts && ... xs) // .
noexcept(noexcept(std::get<TN>(make_ref_tuple(FWD(xs)...))))
{
VRM_CORE_STATIC_ASSERT_NM(sizeof...(xs) > TN);
return copy_if_rvalue(std::get<TN>(make_ref_tuple(FWD(xs)...)));
}
}
VRM_CORE_NAMESPACE_END
#include <utility>
VRM_CORE_NAMESPACE
{
namespace impl
{
template <sz_t TIBegin, sz_t... TIs, typename... Ts>
constexpr auto build_args_slice(
std::index_sequence<TIs...>, Ts&&... xs) noexcept;
}
template <sz_t TIBegin, sz_t TIEnd, typename... Ts>
constexpr auto args_slice(Ts && ... xs) noexcept;
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace impl
{
template <sz_t TIBegin, sz_t... TIs, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto build_args_slice(
std::index_sequence<TIs...>, Ts&&... xs) noexcept
{
return make_ref_tuple(nth_arg<TIBegin + TIs>(FWD(xs)...)...);
}
}
template <sz_t TIBegin, sz_t TIEnd, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto args_slice(Ts && ... xs) noexcept
{
VRM_CORE_STATIC_ASSERT_NM(TIEnd >= TIBegin);
VRM_CORE_STATIC_ASSERT_NM(sizeof...(xs) >= TIEnd - TIBegin);
return impl::build_args_slice<TIBegin>(
std::make_index_sequence<TIEnd - TIBegin>(), FWD(xs)...);
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
template <sz_t TN, typename... Ts>
constexpr auto first_n_args(Ts && ... xs) noexcept;
template <sz_t TN, typename... Ts>
constexpr auto last_n_args(Ts && ... xs) noexcept;
template <sz_t TN, typename... Ts>
constexpr auto all_args_from(Ts && ... xs) noexcept;
template <sz_t TN, typename... Ts>
constexpr auto all_args_after(Ts && ... xs) noexcept;
template <sz_t TN, typename... Ts>
constexpr auto all_args_until(Ts && ... xs) noexcept;
template <sz_t TN, typename... Ts>
constexpr auto all_args_before(Ts && ... xs) noexcept;
template <typename... Ts>
constexpr decltype(auto) first_arg(Ts && ... xs) noexcept;
template <typename... Ts>
constexpr decltype(auto) last_arg(Ts && ... xs) noexcept;
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
template <sz_t TN, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto first_n_args(Ts && ... xs) noexcept
{
return args_slice<0, TN>(FWD(xs)...);
}
template <sz_t TN, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto last_n_args(Ts && ... xs) noexcept
{
constexpr auto begin_idx(sizeof...(xs)-TN);
return args_slice<begin_idx, begin_idx + TN>(FWD(xs)...);
}
template <sz_t TN, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto all_args_from(Ts && ... xs) noexcept
{
return args_slice<TN, sizeof...(xs)>(FWD(xs)...);
}
template <sz_t TN, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto all_args_after(Ts && ... xs) noexcept
{
return all_args_from<TN + 1>(FWD(xs)...);
}
template <sz_t TN, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto all_args_until(Ts && ... xs) noexcept
{
return first_n_args<TN + 1>(FWD(xs)...);
}
template <sz_t TN, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto all_args_before(Ts && ... xs) noexcept
{
return first_n_args<TN>(FWD(xs)...);
}
template <typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) first_arg(
Ts && ... xs) noexcept
{
return copy_if_rvalue(std::get<0>(first_n_args<1>(FWD(xs)...)));
}
template <typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) last_arg(
Ts && ... xs) noexcept
{
return copy_if_rvalue(std::get<0>(last_n_args<1>(FWD(xs)...)));
}
}
VRM_CORE_NAMESPACE_END
#define VRM_PP_IMPL_EVAL(...) VRM_PP_IMPL_EVAL_0(__VA_ARGS__)
#define VRM_PP_EVAL(...) VRM_PP_IMPL_EVAL(__VA_ARGS__)
#define VRM_PP_IMPL_TPL_EXPLODE(...) __VA_ARGS__
#define VRM_PP_IMPL_TPL_MAKE(...) (__VA_ARGS__)
#define VRM_PP_TPL_EXPLODE(mTpl) VRM_PP_DEFER(VRM_PP_IMPL_TPL_EXPLODE mTpl)
#define VRM_PP_TPL_MAKE(...) VRM_PP_IMPL_TPL_MAKE(__VA_ARGS__)
#define VRM_PP_TPL_FILL_IMPL(mTpl) \
VRM_PP_TKNCAT_2(VRM_PP_IMPL_TPL_FILL_, VRM_PP_TPL_SIZE(mTpl))(mTpl)
#define VRM_PP_TPL_FILL_REVERSE_IMPL(mTpl) \
VRM_PP_TKNCAT_2(VRM_PP_IMPL_TPL_FILL_REVERSE_, VRM_PP_TPL_SIZE(mTpl))(mTpl)
#define VRM_PP_IMPL_TPL_ELEM(mTpl, mIdx) \
VRM_PP_TKNCAT_2(VRM_PP_IMPL_TPL_ELEM_, mIdx) \
VRM_PP_DEFER(VRM_PP_TPL_FILL(mTpl))
#define VRM_PP_IMPL_TPL_ELEM_REVERSE(mTpl, mIdx) \
VRM_PP_TKNCAT_2(VRM_PP_IMPL_TPL_ELEM_REVERSE_, mIdx) \
VRM_PP_DEFER(VRM_PP_TPL_FILL_REVERSE(mTpl))
#define VRM_PP_IMPL_TPL_CAT(...) \
VRM_PP_TKNCAT_2(VRM_PP_IMPL_TPL_CAT_, \
VRM_PP_ARGCOUNT(__VA_ARGS__))(__VA_ARGS__)
#define VRM_PP_IMPL_TPL_SIZE(mTpl) VRM_PP_ARGCOUNT(VRM_PP_TPL_EXPLODE(mTpl))
#define VRM_PP_IMPL_TPL_HEAD(mTpl) VRM_PP_DEFER(VRM_PP_TPL_ELEM(mTpl, 0))
#define VRM_PP_IMPL_TPL_TAIL(mTpl) \
VRM_PP_DEFER(VRM_PP_TPL_ELEM_REVERSE(mTpl, 0))
#define VRM_PP_IMPL_TPL_PUSH_BACK(mTpl, mArg) \
VRM_PP_DEFER(VRM_PP_TPL_MAKE(VRM_PP_TPL_EXPLODE(mTpl), mArg))
#define VRM_PP_IMPL_TPL_PUSH_FRONT(mTpl, mArg) \
VRM_PP_DEFER(VRM_PP_TPL_MAKE(mArg, VRM_PP_TPL_EXPLODE(mTpl)))
#define VRM_PP_TPL_FILL(mTpl) (VRM_PP_TPL_FILL_IMPL(mTpl))
#define VRM_PP_TPL_FILL_REVERSE(mTpl) (VRM_PP_TPL_FILL_REVERSE_IMPL(mTpl))
#define VRM_PP_TPL_ELEM(mTpl, mIdx) \
VRM_PP_DEFER(VRM_PP_IMPL_TPL_ELEM(mTpl, mIdx))
#define VRM_PP_TPL_ELEM_REVERSE(mTpl, mIdx) \
VRM_PP_DEFER(VRM_PP_IMPL_TPL_ELEM_REVERSE(mTpl, mIdx))
#define VRM_PP_TPL_CAT(...) VRM_PP_IMPL_TPL_CAT(__VA_ARGS__)
#define VRM_PP_TPL_SIZE(mTpl) VRM_PP_IMPL_TPL_SIZE(mTpl)
#define VRM_PP_TPL_HEAD(mTpl) VRM_PP_IMPL_TPL_HEAD(mTpl)
#define VRM_PP_TPL_TAIL(mTpl) VRM_PP_IMPL_TPL_TAIL(mTpl)
#define VRM_PP_TPL_PUSH_BACK(mTpl, mArg) VRM_PP_IMPL_TPL_PUSH_BACK(mTpl, mArg)
#define VRM_PP_TPL_PUSH_FRONT(mTpl, mArg) VRM_PP_IMPL_TPL_PUSH_FRONT(mTpl, mArg)
#define VRM_PP_IMPL_REPEAT_DEC(mTimes, mAction, mData) \
VRM_PP_TKNCAT_2(VRM_PP_IMPL_REPEAT_DEC_, mTimes)(mAction, mData)
#define VRM_PP_REPEAT_DEC(...) VRM_PP_IMPL_REPEAT_DEC(__VA_ARGS__)
#define VRM_PP_IMPL_REPEAT_INC(mTimes, mAction, mData) \
VRM_PP_TKNCAT_2(VRM_PP_IMPL_REPEAT_INC_, mTimes)(mAction, mData, 0)
#define VRM_PP_REPEAT_INC(...) VRM_PP_IMPL_REPEAT_INC(__VA_ARGS__)
#define VRM_PP_IMPL_SEP(mIdx, mData, mArg) \
mArg VRM_PP_IF(mIdx, mData, VRM_PP_EMPTY())
#define VRM_PP_SEP(mSeparator, ...) \
VRM_PP_FOREACH_REVERSE(VRM_PP_IMPL_SEP, mSeparator, __VA_ARGS__)
#include <tuple>
#include <type_traits>
#include <tuple>
#include <type_traits>
VRM_CORE_NAMESPACE
{
template <typename T>
VRM_CORE_ALWAYS_INLINE constexpr auto variadic_min(T a) noexcept
{
return a;
}
template <typename T0, typename T1>
VRM_CORE_ALWAYS_INLINE constexpr auto variadic_min(T0 a, T1 b) noexcept
{
return a < b ? a : b;
}
template <typename T0, typename T1, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto variadic_min(
T0 a, T1 b, Ts... xs) noexcept
{
return variadic_min(a, variadic_min(b, xs...));
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
template <typename T>
VRM_CORE_ALWAYS_INLINE constexpr auto variadic_max(T a) noexcept
{
return a;
}
template <typename T0, typename T1>
VRM_CORE_ALWAYS_INLINE constexpr auto variadic_max(T0 a, T1 b) noexcept
{
return a < b ? b : a;
}
template <typename T0, typename T1, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto variadic_max(
T0 a, T1 b, Ts... xs) noexcept
{
return variadic_max(a, variadic_max(b, xs...));
}
}
VRM_CORE_NAMESPACE_END
#include <tuple>
#include <type_traits>
VRM_CORE_NAMESPACE
{
namespace impl
{
template <sz_t TColumnCount, sz_t TRowCount>
struct tuple_transposer
{
static constexpr sz_t column_count{TColumnCount};
static constexpr sz_t row_count{TRowCount};
template <typename T0, typename T1, typename T2>
VRM_CORE_ALWAYS_INLINE static constexpr auto index_1d_from_2d(
const T0& x, const T1& y, const T2& x_column_count) noexcept
{
VRM_CORE_CONSTEXPR_ASSERT(x_column_count >= 0);
return x + y * x_column_count;
}
template <sz_t TVX, sz_t TVY, typename T>
inline static constexpr decltype(auto) get_normal(T&& t) noexcept
{
constexpr auto idx(index_1d_from_2d(TVX, TVY, column_count));
return std::get<idx>(FWD(t));
}
template <sz_t TIColumn, typename TF, typename T, sz_t... TIs>
inline static constexpr decltype(auto)
make_column_tuple_single_impl(
std::index_sequence<TIs...>, TF&& f, T&& t)
{
return f(get_normal<TIColumn, TIs>(FWD(t))...);
}
template <typename TF, typename T, sz_t... TIs>
inline static constexpr decltype(auto) exec_single_impl(
std::index_sequence<TIs...>, TF&& f, T&& t)
{
return std::tuple_cat(make_column_tuple_single_impl<TIs>(
std::make_index_sequence<row_count>{}, f, FWD(t))...);
}
template <typename TF, typename T>
inline static constexpr decltype(auto) exec_single(TF&& f, T&& t)
{
return exec_single_impl(
std::make_index_sequence<column_count>{}, f, FWD(t));
}
};
template <sz_t TColumnCount, sz_t TRowCount, typename TF, typename T>
inline constexpr decltype(auto) invoke_tuple_transposer(
TF&& f, T&& t) noexcept
{
return tuple_transposer<TColumnCount, TRowCount>::exec_single(
f, FWD(t));
}
struct make_tuple_wrapper
{
template <typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) operator()(
Ts&&... xs)
{
return std::make_tuple(FWD(xs)...);
}
};
struct make_ref_tuple_wrapper
{
template <typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) operator()(
Ts&&... xs)
{
return make_ref_tuple(FWD(xs)...);
}
};
struct forward_as_tuple_wrapper
{
template <typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) operator()(
Ts&&... xs)
{
return std::forward_as_tuple(FWD(xs)...);
}
};
template <sz_t TRowCount, typename T>
constexpr sz_t tuple_column_count{decay_tuple_size<T>() / TRowCount};
template <sz_t TRowCount, typename TF, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
make_generic_transposed_tuple(TF&& f, Ts&&... xs) noexcept
{
constexpr auto column_count(sizeof...(xs) / TRowCount);
return invoke_tuple_transposer< // .
column_count, TRowCount>(f, f(FWD(xs)...));
}
template <sz_t TRowCount, typename TF, typename T>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
to_generic_transposed_tuple(TF&& f, T&& t) noexcept
{
return invoke_tuple_transposer< // .
tuple_column_count<TRowCount, T>, TRowCount>(f, FWD(t));
}
template <typename T, sz_t... TIs>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
tuple_ref_to_ref_tuple(T&& t, std::index_sequence<TIs...>) noexcept
{
return std::forward_as_tuple(std::get<TIs>(FWD(t))...);
}
template <typename TF, typename... TRows>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
to_generic_transposed_tuple_from_rows(
TF&& f, TRows&&... rows) noexcept
{
return f(std::tuple_cat(tuple_ref_to_ref_tuple(
FWD(rows), make_tuple_index_sequence<decltype(rows)>{})...));
}
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
template <sz_t TRowCount, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
make_transposed_tuple(Ts && ... xs) noexcept
{
return impl::make_generic_transposed_tuple<TRowCount>( // .
impl::make_tuple_wrapper{}, FWD(xs)...);
}
template <sz_t TRowCount, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
make_transposed_ref_tuple(Ts && ... xs) noexcept
{
return impl::make_generic_transposed_tuple<TRowCount>( // .
impl::make_ref_tuple_wrapper{}, FWD(xs)...);
}
template <sz_t TRowCount, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
forward_as_transposed_tuple(Ts && ... xs) noexcept
{
return impl::make_generic_transposed_tuple<TRowCount>( // .
impl::forward_as_tuple_wrapper{}, FWD(xs)...);
}
template <sz_t TRowCount, typename T>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
to_transposed_tuple(T && t) noexcept
{
return impl::to_generic_transposed_tuple<TRowCount>( // .
impl::make_tuple_wrapper{}, FWD(t));
}
template <sz_t TRowCount, typename T>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
to_transposed_ref_tuple(T && t) noexcept
{
return impl::to_generic_transposed_tuple<TRowCount>( // .
impl::make_ref_tuple_wrapper{}, FWD(t));
}
template <sz_t TRowCount, typename T>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
to_forwarded_transposed_tuple(T && t) noexcept
{
return impl::to_generic_transposed_tuple<TRowCount>( // .
impl::forward_as_tuple_wrapper{}, FWD(t));
}
template <typename... TRows>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
to_transposed_tuple_from_rows(TRows && ... rows)
{
return impl::to_generic_transposed_tuple_from_rows(
[](auto&& t) -> decltype(auto)
{
return to_transposed_tuple<sizeof...(TRows)>(FWD(t));
},
FWD(rows)...);
}
template <typename... TRows>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
to_transposed_ref_tuple_from_rows(TRows && ... rows)
{
return impl::to_generic_transposed_tuple_from_rows(
[](auto&& t) -> decltype(auto)
{
return to_transposed_ref_tuple<sizeof...(TRows)>(FWD(t));
},
FWD(rows)...);
}
template <typename... TRows>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
to_forwarded_transposed_tuple_from_rows(TRows && ... rows)
{
return impl::to_generic_transposed_tuple_from_rows(
[](auto&& t) -> decltype(auto)
{
return to_forwarded_transposed_tuple<sizeof...(TRows)>(FWD(t));
},
FWD(rows)...);
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename TF, typename TT, sz_t... TIs>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) apply_helper(
TF&& f, TT&& t, std::index_sequence<TIs...>) // .
{
return FWD(f)(std::get<TIs>(FWD(t))...);
}
}
template <typename TF, typename TT>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) apply(TF && f, TT && t) // .
{
return impl::apply_helper(
FWD(f), FWD(t), make_tuple_index_sequence<TT>{});
}
template <typename T>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
tuple_ref_to_ref_tuple(T && t) noexcept
{
return vrm::core::apply(
[](auto&&... xs) { return std::forward_as_tuple(FWD(xs)...); },
FWD(t));
}
template <typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
tuple_cat_as_ref(Ts && ... ts) noexcept
{
return std::tuple_cat(tuple_ref_to_ref_tuple(FWD(ts))...);
}
template <sz_t TColumnCount, typename TF, typename TT>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) apply_interleaved(
TF && f, TT && t) // .
{
constexpr sz_t row_count{decay_tuple_size<TT>() / TColumnCount};
return vrm::core::apply(
FWD(f), to_forwarded_transposed_tuple<row_count>(FWD(t)));
}
template <typename TF, typename... TTs>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) apply_all_sequential(
TF && f, TTs && ... ts) // .
{
return vrm::core::apply(FWD(f), tuple_cat_as_ref(FWD(ts)...));
}
template <sz_t TColumnCount, typename TF, typename... TTs>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) apply_all_interleaved(
TF && f, TTs && ... ts) // .
{
return apply_interleaved<TColumnCount>(
FWD(f), tuple_cat_as_ref(FWD(ts)...));
}
template <typename TF, typename... TTs>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) multi_apply(
TF && f, TTs && ... ts) // TODO: noexcept
{
return vrm::core::apply(FWD(f), std::tuple_cat(FWD(ts)...));
}
}
VRM_CORE_NAMESPACE_END
#define VRM_CORE_IMPL_DEFINE_ARGS_SLICE_WRAPPER(name, fn) \
template <sz_t TN> \
struct name final \
{ \
template <typename... Ts> \
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) operator()( \
Ts&&... xs) noexcept \
{ \
return fn<TN>(FWD(xs)...); \
} \
};
#define VRM_CORE_IMPL_DEFINE_ARGS_SLICE_WRAPPER_SN(fn) \
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_WRAPPER(VRM_PP_CAT(fn, _wrapper), fn)
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename TFArgGetter, typename TF, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto // .
args_call_wrapper(TFArgGetter, TF&& f, Ts&&... xs) // .
VRM_CORE_RETURNS( // .
apply(f, TFArgGetter{}(FWD(xs)...)) // .
)
}
namespace impl
{
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_WRAPPER_SN(first_n_args)
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_WRAPPER_SN(last_n_args)
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_WRAPPER_SN(all_args_from)
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_WRAPPER_SN(all_args_after)
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_WRAPPER_SN(all_args_until)
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_WRAPPER_SN(all_args_before)
}
}
VRM_CORE_NAMESPACE_END
#undef VRM_CORE_IMPL_DEFINE_ARGS_SLICE_WRAPPER_SN
#undef VRM_CORE_IMPL_DEFINE_ARGS_SLICE_WRAPPER
#define VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER_WRAPPER_FN(fn) \
impl::VRM_PP_CAT(fn, _wrapper)
#define VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER_BODY(fn) \
impl::args_call_wrapper( \
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER_WRAPPER_FN(fn) < TN > {}, \
FWD(f), FWD(xs)...)
#define VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER(name, fn) \
template <sz_t TN, typename TF, typename... Ts> \
VRM_CORE_ALWAYS_INLINE constexpr auto name(TF&& f, Ts&&... xs) \
VRM_CORE_RETURNS( \
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER_BODY(fn))
#define VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER_SN(fn) \
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER(VRM_PP_CAT(call_with_, fn), fn)
VRM_CORE_NAMESPACE
{
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER_SN(first_n_args)
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER_SN(last_n_args)
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER_SN(all_args_from)
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER_SN(all_args_after)
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER_SN(all_args_until)
VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER_SN(all_args_before)
}
VRM_CORE_NAMESPACE_END
#undef VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER_SN
#undef VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER
#undef VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER_BODY
#undef VRM_CORE_IMPL_DEFINE_ARGS_SLICE_CALLER_WRAPPER_FN
#include <tuple>
#include <functional>
#include <type_traits>
#include <functional>
#include <type_traits>
#include <type_traits>
#include <utility>
#include <iosfwd>
#include <utility>
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename T, typename... Ts>
using callable_detector =
decltype(std::declval<T>()(std::declval<Ts&&>()...));
}
template <typename T, typename... Ts>
constexpr is_detected<impl::callable_detector, T, Ts...> callable{};
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
template <typename T>
class value_wrapper
{
VRM_CORE_STATIC_ASSERT_NM(!std::is_reference<T>{});
private:
T _value;
public:
using type = T;
template <typename TFwd>
VRM_CORE_ALWAYS_INLINE constexpr value_wrapper(TFwd&& x) noexcept(
std::is_nothrow_constructible<T, TFwd&&>{})
: _value(FWD(x))
{
}
template <typename... TArgs,
typename = std::enable_if_t<callable<T&(TArgs&&...)>>>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) operator()(
TArgs&&... args) noexcept(noexcept(_value(FWD(args)...)))
{
return _value(FWD(args)...);
}
template <typename... TArgs,
typename = std::enable_if_t<callable<const T&(TArgs&&...)>>>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) operator()(
TArgs&&... args) const noexcept(noexcept(_value(FWD(args)...)))
{
return _value(FWD(args)...);
}
VRM_CORE_ALWAYS_INLINE constexpr auto& get() & noexcept
{
return _value;
}
VRM_CORE_ALWAYS_INLINE constexpr const auto& get() const & noexcept
{
return _value;
}
VRM_CORE_ALWAYS_INLINE constexpr T get() &&
noexcept(std::is_nothrow_move_constructible<T>{})
{
return std::move(_value);
}
VRM_CORE_ALWAYS_INLINE constexpr operator T&() & noexcept
{
return _value;
}
VRM_CORE_ALWAYS_INLINE constexpr operator const T&() const noexcept
{
return _value;
}
VRM_CORE_ALWAYS_INLINE constexpr operator T() &&
noexcept(std::is_nothrow_move_constructible<T>{})
{
return std::move(_value);
}
};
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
template <typename T>
using perfect_wrapper = std::conditional_t< // .
std::is_lvalue_reference<T>::value, // .
std::reference_wrapper<std::remove_reference_t<T>>, // .
vrm::core::value_wrapper<T> // .
>;
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename T>
class fwd_capture_wrapper : public perfect_wrapper<T>
{
private:
using base_type = perfect_wrapper<T>;
public:
template <typename TFwd>
constexpr fwd_capture_wrapper(TFwd&& x) noexcept(
std::is_nothrow_constructible<base_type, TFwd&&>{})
: base_type(FWD(x))
{
}
constexpr T fwd_get() noexcept(
std::is_nothrow_constructible<T, T&&>{})
{
return std::forward<T>(this->get());
}
constexpr T fwd_get() const = delete;
};
template <typename T>
constexpr auto fwd_capture(T&& x) noexcept(
noexcept(fwd_capture_wrapper<T>(FWD(x))))
{
return fwd_capture_wrapper<T>(FWD(x));
}
template <typename T>
constexpr auto fwd_copy_capture(T&& x) noexcept(
noexcept(fwd_capture_wrapper<T>(x)))
{
return fwd_capture_wrapper<T>(x);
}
}
}
VRM_CORE_NAMESPACE_END
#define VRM_CORE_FWD_CAPTURE(...) \
::vrm::core::impl::fwd_capture(FWD(__VA_ARGS__))
#define VRM_CORE_FWD_COPY_CAPTURE(...) \
::vrm::core::impl::fwd_copy_capture(FWD(__VA_ARGS__))
#if !defined(VRM_CORE_NO_FWD_CAPTURE_MACRO) && !defined(FWD_CAPTURE)
#define FWD_CAPTURE VRM_CORE_FWD_CAPTURE
#endif
#if !defined(VRM_CORE_NO_FWD_COPY_CAPTURE_MACRO) && !defined(FWD_COPY_CAPTURE)
#define FWD_COPY_CAPTURE VRM_CORE_FWD_COPY_CAPTURE
#endif
VRM_CORE_NAMESPACE
{
template <typename TF, typename... TFwdCaptures>
constexpr decltype(auto) apply_fwd_capture(TF && f, TFwdCaptures && ... fcs)
{
return multi_apply([&f](auto&&... xs) -> decltype(
auto) { return FWD(f)(xs.fwd_get()...); },
FWD(fcs)...);
}
}
VRM_CORE_NAMESPACE_END
#include <tuple>
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename... Ts>
constexpr auto fwd_capture_pack(Ts&&... xs) noexcept(
noexcept(std::make_tuple(VRM_CORE_FWD_CAPTURE(xs)...)))
{
return std::make_tuple(VRM_CORE_FWD_CAPTURE(xs)...);
}
template <typename... Ts>
constexpr auto fwd_copy_capture_pack(Ts&&... xs) noexcept(
noexcept(std::make_tuple(VRM_CORE_FWD_COPY_CAPTURE(xs)...)))
{
return std::make_tuple(VRM_CORE_FWD_COPY_CAPTURE(xs)...);
}
}
}
VRM_CORE_NAMESPACE_END
#define VRM_CORE_FWD_CAPTURE_PACK(...) \
vrm::core::impl::fwd_capture_pack(FWD(__VA_ARGS__)...)
#define VRM_CORE_FWD_COPY_CAPTURE_PACK(...) \
vrm::core::impl::fwd_copy_capture_pack(FWD(__VA_ARGS__)...)
#if !defined(VRM_CORE_NO_FWD_CAPTURE_PACK_MACRO) && !defined(FWD_CAPTURE_PACK)
#define FWD_CAPTURE_PACK VRM_CORE_FWD_CAPTURE_PACK
#endif
#if !defined(VRM_CORE_NO_FWD_COPY_CAPTURE_PACK_MACRO) && \
!defined(FWD_COPY_CAPTURE_PACK)
#define FWD_COPY_CAPTURE_PACK VRM_CORE_FWD_COPY_CAPTURE_PACK
#endif
#include <type_traits>
VRM_CORE_NAMESPACE
{
namespace literals
{
namespace impl
{
VRM_CORE_ALWAYS_INLINE constexpr auto combine(long long x) noexcept
{
return x;
}
template <typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto combine(
long long val, long long x, Ts... xs) noexcept
{
return combine(val * 10 + x, xs...);
}
VRM_CORE_ALWAYS_INLINE constexpr auto parse(char c) noexcept
{
VRM_CORE_CONSTEXPR_ASSERT(c >= '0' && c <= '9');
return c - '0';
}
}
template <char... TCs>
VRM_CORE_ALWAYS_INLINE constexpr auto operator"" _c() noexcept
{
return llong_<impl::combine(0, impl::parse(TCs)...)>{};
}
}
}
VRM_CORE_NAMESPACE_END
#include <array>
#include <type_traits>
VRM_CORE_NAMESPACE
{
template <typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto make_array(Ts && ... xs) // .
VRM_CORE_RETURNS(
std::array<std::decay_t<std::common_type_t<Ts...>>, sizeof...(Ts)>{
{FWD(xs)...}})
}
VRM_CORE_NAMESPACE_END
#undef VRM_CORE_IMPL_BODY
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename...>
struct overload_set;
template <typename TF>
struct overload_set<TF> : TF
{
using call_type = TF;
using call_type::operator();
VRM_CORE_ALWAYS_INLINE overload_set(TF&& f) noexcept : TF(FWD(f))
{
}
};
template <typename TF, typename... TFs>
struct overload_set<TF, TFs...> : TF, overload_set<TFs...>::call_type
{
using base_type = typename overload_set<TFs...>::call_type;
using f_type = TF;
using call_type = overload_set;
VRM_CORE_ALWAYS_INLINE overload_set(TF &&f, TFs &&... fs) noexcept
: f_type(FWD(f)),
base_type(FWD(fs)...)
{
}
using f_type::operator();
using base_type::operator();
};
}
template <typename... TFs>
VRM_CORE_ALWAYS_INLINE auto make_overload(TFs && ... fs) noexcept
{
return impl::overload_set<TFs...>{FWD(fs)...};
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace impl
{
template <bool TPredicateResult>
struct static_if_;
template <typename TPredicate>
VRM_CORE_ALWAYS_INLINE constexpr auto make_static_if(
TPredicate) noexcept
{
return static_if_<TPredicate{}>{};
}
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename TFunctionToCall>
struct static_if_result final : TFunctionToCall
{
template <typename TFFwd>
VRM_CORE_ALWAYS_INLINE constexpr static_if_result(
TFFwd&& f) noexcept : TFunctionToCall(FWD(f))
{
}
template <typename TF>
VRM_CORE_ALWAYS_INLINE constexpr auto& else_(TF&&) noexcept
{
return *this;
}
template <typename TF>
VRM_CORE_ALWAYS_INLINE constexpr auto& then(TF&&) noexcept
{
return *this;
}
template <typename TPredicate>
VRM_CORE_ALWAYS_INLINE constexpr auto& else_if(TPredicate) noexcept
{
return *this;
}
};
template <typename TF>
VRM_CORE_ALWAYS_INLINE constexpr auto make_static_if_result(
TF&& f) noexcept
{
return static_if_result<TF>{FWD(f)};
}
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace impl
{
template <>
struct static_if_<true> final
{
template <typename TF>
VRM_CORE_ALWAYS_INLINE constexpr auto& else_(TF&&) noexcept
{
return *this;
}
template <typename TF>
VRM_CORE_ALWAYS_INLINE constexpr auto then(TF&& f) noexcept
{
return make_static_if_result(FWD(f));
}
template <typename TPredicate>
VRM_CORE_ALWAYS_INLINE constexpr auto& else_if(TPredicate) noexcept
{
return *this;
}
};
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace impl
{
template <>
struct static_if_<false> final
{
template <typename TF>
VRM_CORE_ALWAYS_INLINE constexpr auto& then(TF&&) noexcept
{
return *this;
}
template <typename TF>
VRM_CORE_ALWAYS_INLINE constexpr auto else_(TF&& f) noexcept
{
return make_static_if_result(FWD(f));
}
template <typename TPredicate>
VRM_CORE_ALWAYS_INLINE constexpr auto else_if(TPredicate) noexcept
{
return make_static_if(TPredicate{});
}
template <typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto operator()(Ts&&...) noexcept
{
}
};
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace impl
{
auto is_valid_predicate(
is_valid([](auto x) -> decltype(decltype(x)::value)
{
}));
}
template <typename TPredicate>
VRM_CORE_ALWAYS_INLINE constexpr auto static_if(TPredicate) noexcept
{
VRM_CORE_STATIC_ASSERT_NM(impl::is_valid_predicate(TPredicate{}));
return impl::make_static_if(TPredicate{});
}
}
VRM_CORE_NAMESPACE_END
/*
#define VRM_CORE_STATIC_IF(...) \
::vrm::core::static_if(::vrm::core::bool_v<__VA_ARGS__>)
#define VRM_CORE_THEN .then
#define VRM_CORE_ELSE_IF(...) \
.else_if(::vrm::core::bool_v<__VA_ARGS__>)
*/
#include <tuple>
VRM_CORE_NAMESPACE
{
namespace impl
{
template <sz_t TI>
struct for_tuple_data_type
{
static constexpr sz_t index{TI};
};
template <sz_t TI>
constexpr sz_t for_tuple_data_type<TI>::index;
template <sz_t TS, typename... Ts>
struct for_tuple_data_helper
{
template <sz_t TI, typename TF>
VRM_CORE_ALWAYS_INLINE static constexpr // .
std::enable_if_t<(TI == TS), void> // .
exec(TF, Ts&&...) // .
noexcept // .
{
}
#define VRM_CORE_IMPL_TPLFORHELPER_BODY() \
FWD(f)(for_tuple_data_type<TI>{}, std::get<TI>(FWD(ts))...)
template <sz_t TI = 0, typename TF>
VRM_CORE_ALWAYS_INLINE static constexpr // .
std::enable_if_t<(TI < TS), void> // .
exec(TF&& f, Ts&&... ts) // .
noexcept(noexcept(VRM_CORE_IMPL_TPLFORHELPER_BODY()))
{
VRM_CORE_IMPL_TPLFORHELPER_BODY();
exec<TI + 1, TF>(FWD(f), FWD(ts)...);
}
#undef VRM_CORE_IMPL_TPLFORHELPER_BODY
};
template <typename... Ts>
struct for_tuple_data_helper<0, Ts...>
{
template <typename... TIgnore>
VRM_CORE_ALWAYS_INLINE static constexpr // .
void
exec(TIgnore&&...) noexcept // .
{
}
};
}
template <typename TF, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr auto for_tuple_data(
TF && f, Ts && ... ts)
VRM_CORE_RETURNS(::vrm::core::impl::for_tuple_data_helper<
::vrm::core::variadic_min(decay_tuple_size<Ts>()...),
Ts...>::exec(FWD(f), FWD(ts)...))
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename TF>
class for_tuple_caller
{
private:
TF _f;
public:
template <typename TFFwd>
VRM_CORE_ALWAYS_INLINE constexpr for_tuple_caller(
TFFwd&& f) noexcept
: _f{FWD(f)}
{
}
template <typename TIgnore, typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) // .
operator()(TIgnore&&, Ts&&... xs) // .
noexcept(noexcept((std::declval<TF>()(FWD(xs)...))))
{
return _f(FWD(xs)...);
}
};
}
}
VRM_CORE_NAMESPACE_END
VRM_CORE_NAMESPACE
{
template <typename TF, typename... Ts>
VRM_CORE_ALWAYS_INLINE // .
constexpr auto
for_tuple(TF && f, Ts && ... xs) // .
VRM_CORE_RETURNS( // .
for_tuple_data(impl::for_tuple_caller<TF>{FWD(f)}, FWD(xs)...) // .
)
}
VRM_CORE_NAMESPACE_END
#include <tuple>
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename T, typename TT>
struct tuple_index_of_helper;
template <typename T, typename... Ts>
struct tuple_index_of_helper<T, std::tuple<T, Ts...>>
: std::integral_constant<sz_t, 0>
{
};
template <typename T1, typename T2, typename... Ts>
struct tuple_index_of_helper<T1, std::tuple<T2, Ts...>>
: std::integral_constant<sz_t,
1 + tuple_index_of_helper<T1, std::tuple<Ts...>>{}>
{
};
}
template <typename T, typename TT>
VRM_CORE_ALWAYS_INLINE constexpr auto tuple_index_of() noexcept
{
return impl::tuple_index_of_helper<T, TT>{};
}
template <typename T, typename TT>
VRM_CORE_ALWAYS_INLINE constexpr auto tuple_index_of(TT&)noexcept
{
return impl::tuple_index_of_helper<T, TT>{};
}
}
VRM_CORE_NAMESPACE_END
#include <tuple>
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename, sz_t, typename>
struct tuple_repeat_impl_helper;
template <typename T, sz_t TS, typename... Ts>
struct tuple_repeat_impl_helper<T, TS, std::tuple<Ts...>>
{
using type = typename tuple_repeat_impl_helper<T, TS - 1,
std::tuple<Ts..., T>>::type;
};
template <typename T, typename... Ts>
struct tuple_repeat_impl_helper<T, 0, std::tuple<Ts...>>
{
using type = std::tuple<Ts...>;
};
template <typename T, sz_t TS>
struct tuple_repeat_impl
{
using type =
typename tuple_repeat_impl_helper<T, TS, std::tuple<>>::type;
};
}
template <sz_t TN, typename T, typename TIdxs = std::index_sequence<TN>>
using repeated_tuple = typename impl::tuple_repeat_impl<T, TN>::type;
template <sz_t TN, typename T>
VRM_CORE_ALWAYS_INLINE auto make_repeated_tuple(const T& x = T{}) noexcept
{
auto result(repeated_tuple<TN, T>{});
for_tuple(
[&x](auto& elem)
{
elem = x;
},
result);
return result;
}
}
VRM_CORE_NAMESPACE_END
#include <functional>
#include <type_traits>
#include <utility>
VRM_CORE_NAMESPACE
{
namespace impl
{
template <typename TF>
class y_combinator_result final
{
private:
using this_type = y_combinator_result<TF>;
TF _f;
public:
template <typename T>
VRM_CORE_ALWAYS_INLINE // .
constexpr explicit y_combinator_result(T&& f) noexcept
: _f(FWD(f))
{
}
template <typename... Ts>
VRM_CORE_ALWAYS_INLINE constexpr decltype(auto) operator()(
Ts&&... xs) noexcept(noexcept( // .
_f(std::declval<std::reference_wrapper<this_type>>(), // .
FWD(xs)...) // .
))
{
return _f(std::ref(*this), FWD(xs)...);
}
};
}
template <typename TF>
VRM_CORE_ALWAYS_INLINE constexpr auto y_combinator(TF && f) noexcept
{
return impl::y_combinator_result<std::decay_t<TF>>(FWD(f));
}
}
VRM_CORE_NAMESPACE_END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment