Commit be271454 authored by Leszek Swirski's avatar Leszek Swirski Committed by Commit Bot

Revert "[regexp] implement regexp property sequence proposal"

This reverts commit f4c14fd9.

Reason for revert: Breaks noi18n build

Original change's description:
> [regexp] implement regexp property sequence proposal
> 
> Also-By: mathias@chromium.org
> Bug: v8:7467
> Change-Id: I9fd6e61f4da1097c2375f671b4801e9730f792c4
> Reviewed-on: https://chromium-review.googlesource.com/1227974
> Commit-Queue: Yang Guo <yangguo@chromium.org>
> Reviewed-by: Jakob Gruber <jgruber@chromium.org>
> Reviewed-by: Mathias Bynens <mathias@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#55991}

TBR=yangguo@chromium.org,jgruber@chromium.org,mathias@chromium.org

Change-Id: I10c67ad3ade35af920d32a7eea8ae0297677fa07
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: v8:7467
Reviewed-on: https://chromium-review.googlesource.com/1230137Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
Commit-Queue: Leszek Swirski <leszeks@chromium.org>
Cr-Commit-Position: refs/heads/master@{#55996}
parent f2911319
......@@ -2360,8 +2360,6 @@ v8_source_set("v8_base") {
"src/regexp/jsregexp-inl.h",
"src/regexp/jsregexp.cc",
"src/regexp/jsregexp.h",
"src/regexp/property-sequences.cc",
"src/regexp/property-sequences.h",
"src/regexp/regexp-ast.cc",
"src/regexp/regexp-ast.h",
"src/regexp/regexp-macro-assembler-irregexp-inl.h",
......
......@@ -4767,8 +4767,6 @@ void Genesis::InitializeGlobal_harmony_intl_relative_time_format() {
#endif // V8_INTL_SUPPORT
void Genesis::InitializeGlobal_harmony_regexp_sequence() {}
Handle<JSFunction> Genesis::CreateArrayBuffer(
Handle<String> name, ArrayBufferKind array_buffer_kind) {
// Create the %ArrayBufferPrototype%
......
......@@ -209,11 +209,10 @@ DEFINE_IMPLICATION(harmony_class_fields, harmony_private_fields)
// Update bootstrapper.cc whenever adding a new feature flag.
// Features that are still work in progress (behind individual flags).
#define HARMONY_INPROGRESS_BASE(V) \
V(harmony_do_expressions, "harmony do-expressions") \
V(harmony_class_fields, "harmony fields in class literals") \
V(harmony_await_optimization, "harmony await taking 1 tick") \
V(harmony_regexp_sequence, "RegExp Unicode sequence properties")
#define HARMONY_INPROGRESS_BASE(V) \
V(harmony_do_expressions, "harmony do-expressions") \
V(harmony_class_fields, "harmony fields in class literals") \
V(harmony_await_optimization, "harmony await taking 1 tick")
#ifdef V8_INTL_SUPPORT
#define HARMONY_INPROGRESS(V) \
......
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifdef V8_INTL_SUPPORT
#include "src/regexp/property-sequences.h"
namespace v8 {
namespace internal {
/*
Generated from following Node.js source:
package.json
```
{
"private": true,
"dependencies": {
"unicode-11.0.0": "^0.7.8"
}
}
```
generate-unicode-sequence-property-data.js
```
const toHex = (symbol) => {
return '0x' + symbol.codePointAt(0).toString(16)
.toUpperCase().padStart(6, '0');
};
```
const generateData = (property) => {
const sequences =
require(`unicode-11.0.0/Sequence_Property/${ property }/index.js`);
const id = property.replace(/_/g, '') + 's';
const buffer = [];
for (const sequence of sequences) {
const symbols = [...sequence];
const codePoints = symbols.map(symbol => toHex(symbol));
buffer.push(' ' + codePoints.join(', ') + ', 0,');
}
const output =
`const uc32 UnicodePropertySequences::k${ id }[] = {\n` +
`${ buffer.join('\n') }\n0 // null-terminating the list\n};\n`;
return output;
};
const properties = [
'Emoji_Flag_Sequence',
'Emoji_Tag_Sequence',
'Emoji_ZWJ_Sequence',
];
for (const property of properties) {
console.log(generateData(property));
}
```
*/
const uc32 UnicodePropertySequences::kEmojiFlagSequences[] = {
0x01F1E6, 0x01F1E8, 0,
0x01F1FF, 0x01F1FC, 0,
0x01F1E6, 0x01F1EA, 0,
0x01F1E6, 0x01F1EB, 0,
0x01F1E6, 0x01F1EC, 0,
0x01F1E6, 0x01F1EE, 0,
0x01F1E6, 0x01F1F1, 0,
0x01F1E6, 0x01F1F2, 0,
0x01F1E6, 0x01F1F4, 0,
0x01F1E6, 0x01F1F6, 0,
0x01F1E6, 0x01F1F7, 0,
0x01F1E6, 0x01F1F8, 0,
0x01F1E6, 0x01F1F9, 0,
0x01F1E6, 0x01F1FA, 0,
0x01F1E6, 0x01F1FC, 0,
0x01F1E6, 0x01F1FD, 0,
0x01F1E6, 0x01F1FF, 0,
0x01F1E7, 0x01F1E6, 0,
0x01F1E7, 0x01F1E7, 0,
0x01F1E7, 0x01F1E9, 0,
0x01F1E7, 0x01F1EA, 0,
0x01F1E7, 0x01F1EB, 0,
0x01F1E7, 0x01F1EC, 0,
0x01F1E7, 0x01F1ED, 0,
0x01F1E7, 0x01F1EE, 0,
0x01F1E7, 0x01F1EF, 0,
0x01F1E7, 0x01F1F1, 0,
0x01F1E7, 0x01F1F2, 0,
0x01F1E7, 0x01F1F3, 0,
0x01F1E7, 0x01F1F4, 0,
0x01F1E7, 0x01F1F6, 0,
0x01F1E7, 0x01F1F7, 0,
0x01F1E7, 0x01F1F8, 0,
0x01F1E7, 0x01F1F9, 0,
0x01F1E7, 0x01F1FB, 0,
0x01F1E7, 0x01F1FC, 0,
0x01F1E7, 0x01F1FE, 0,
0x01F1E7, 0x01F1FF, 0,
0x01F1E8, 0x01F1E6, 0,
0x01F1E8, 0x01F1E8, 0,
0x01F1E8, 0x01F1E9, 0,
0x01F1E8, 0x01F1EB, 0,
0x01F1E8, 0x01F1EC, 0,
0x01F1E8, 0x01F1ED, 0,
0x01F1E8, 0x01F1EE, 0,
0x01F1E8, 0x01F1F0, 0,
0x01F1E8, 0x01F1F1, 0,
0x01F1E8, 0x01F1F2, 0,
0x01F1E8, 0x01F1F3, 0,
0x01F1E8, 0x01F1F4, 0,
0x01F1E8, 0x01F1F5, 0,
0x01F1E8, 0x01F1F7, 0,
0x01F1E8, 0x01F1FA, 0,
0x01F1E8, 0x01F1FB, 0,
0x01F1E8, 0x01F1FC, 0,
0x01F1E8, 0x01F1FD, 0,
0x01F1E8, 0x01F1FE, 0,
0x01F1E8, 0x01F1FF, 0,
0x01F1E9, 0x01F1EA, 0,
0x01F1E9, 0x01F1EC, 0,
0x01F1E9, 0x01F1EF, 0,
0x01F1E9, 0x01F1F0, 0,
0x01F1E9, 0x01F1F2, 0,
0x01F1E9, 0x01F1F4, 0,
0x01F1E9, 0x01F1FF, 0,
0x01F1EA, 0x01F1E6, 0,
0x01F1EA, 0x01F1E8, 0,
0x01F1EA, 0x01F1EA, 0,
0x01F1EA, 0x01F1EC, 0,
0x01F1EA, 0x01F1ED, 0,
0x01F1EA, 0x01F1F7, 0,
0x01F1EA, 0x01F1F8, 0,
0x01F1EA, 0x01F1F9, 0,
0x01F1EA, 0x01F1FA, 0,
0x01F1EB, 0x01F1EE, 0,
0x01F1EB, 0x01F1EF, 0,
0x01F1EB, 0x01F1F0, 0,
0x01F1EB, 0x01F1F2, 0,
0x01F1EB, 0x01F1F4, 0,
0x01F1EB, 0x01F1F7, 0,
0x01F1EC, 0x01F1E6, 0,
0x01F1EC, 0x01F1E7, 0,
0x01F1EC, 0x01F1E9, 0,
0x01F1EC, 0x01F1EA, 0,
0x01F1EC, 0x01F1EB, 0,
0x01F1EC, 0x01F1EC, 0,
0x01F1EC, 0x01F1ED, 0,
0x01F1EC, 0x01F1EE, 0,
0x01F1EC, 0x01F1F1, 0,
0x01F1EC, 0x01F1F2, 0,
0x01F1EC, 0x01F1F3, 0,
0x01F1EC, 0x01F1F5, 0,
0x01F1EC, 0x01F1F6, 0,
0x01F1EC, 0x01F1F7, 0,
0x01F1EC, 0x01F1F8, 0,
0x01F1EC, 0x01F1F9, 0,
0x01F1EC, 0x01F1FA, 0,
0x01F1EC, 0x01F1FC, 0,
0x01F1EC, 0x01F1FE, 0,
0x01F1ED, 0x01F1F0, 0,
0x01F1ED, 0x01F1F2, 0,
0x01F1ED, 0x01F1F3, 0,
0x01F1ED, 0x01F1F7, 0,
0x01F1ED, 0x01F1F9, 0,
0x01F1ED, 0x01F1FA, 0,
0x01F1EE, 0x01F1E8, 0,
0x01F1EE, 0x01F1E9, 0,
0x01F1EE, 0x01F1EA, 0,
0x01F1EE, 0x01F1F1, 0,
0x01F1EE, 0x01F1F2, 0,
0x01F1EE, 0x01F1F3, 0,
0x01F1EE, 0x01F1F4, 0,
0x01F1EE, 0x01F1F6, 0,
0x01F1EE, 0x01F1F7, 0,
0x01F1EE, 0x01F1F8, 0,
0x01F1EE, 0x01F1F9, 0,
0x01F1EF, 0x01F1EA, 0,
0x01F1EF, 0x01F1F2, 0,
0x01F1EF, 0x01F1F4, 0,
0x01F1EF, 0x01F1F5, 0,
0x01F1F0, 0x01F1EA, 0,
0x01F1F0, 0x01F1EC, 0,
0x01F1F0, 0x01F1ED, 0,
0x01F1F0, 0x01F1EE, 0,
0x01F1F0, 0x01F1F2, 0,
0x01F1F0, 0x01F1F3, 0,
0x01F1F0, 0x01F1F5, 0,
0x01F1F0, 0x01F1F7, 0,
0x01F1F0, 0x01F1FC, 0,
0x01F1E6, 0x01F1E9, 0,
0x01F1F0, 0x01F1FF, 0,
0x01F1F1, 0x01F1E6, 0,
0x01F1F1, 0x01F1E7, 0,
0x01F1F1, 0x01F1E8, 0,
0x01F1F1, 0x01F1EE, 0,
0x01F1F1, 0x01F1F0, 0,
0x01F1F1, 0x01F1F7, 0,
0x01F1F1, 0x01F1F8, 0,
0x01F1F1, 0x01F1F9, 0,
0x01F1F1, 0x01F1FA, 0,
0x01F1F1, 0x01F1FB, 0,
0x01F1F1, 0x01F1FE, 0,
0x01F1F2, 0x01F1E6, 0,
0x01F1F2, 0x01F1E8, 0,
0x01F1F2, 0x01F1E9, 0,
0x01F1F2, 0x01F1EA, 0,
0x01F1F2, 0x01F1EB, 0,
0x01F1F2, 0x01F1EC, 0,
0x01F1F2, 0x01F1ED, 0,
0x01F1F2, 0x01F1F0, 0,
0x01F1F2, 0x01F1F1, 0,
0x01F1F2, 0x01F1F2, 0,
0x01F1F2, 0x01F1F3, 0,
0x01F1F2, 0x01F1F4, 0,
0x01F1F2, 0x01F1F5, 0,
0x01F1F2, 0x01F1F6, 0,
0x01F1F2, 0x01F1F7, 0,
0x01F1F2, 0x01F1F8, 0,
0x01F1F2, 0x01F1F9, 0,
0x01F1F2, 0x01F1FA, 0,
0x01F1F2, 0x01F1FB, 0,
0x01F1F2, 0x01F1FC, 0,
0x01F1F2, 0x01F1FD, 0,
0x01F1F2, 0x01F1FE, 0,
0x01F1F2, 0x01F1FF, 0,
0x01F1F3, 0x01F1E6, 0,
0x01F1F3, 0x01F1E8, 0,
0x01F1F3, 0x01F1EA, 0,
0x01F1F3, 0x01F1EB, 0,
0x01F1F3, 0x01F1EC, 0,
0x01F1F3, 0x01F1EE, 0,
0x01F1F3, 0x01F1F1, 0,
0x01F1F3, 0x01F1F4, 0,
0x01F1F3, 0x01F1F5, 0,
0x01F1F3, 0x01F1F7, 0,
0x01F1F3, 0x01F1FA, 0,
0x01F1F3, 0x01F1FF, 0,
0x01F1F4, 0x01F1F2, 0,
0x01F1F5, 0x01F1E6, 0,
0x01F1F5, 0x01F1EA, 0,
0x01F1F5, 0x01F1EB, 0,
0x01F1F5, 0x01F1EC, 0,
0x01F1F5, 0x01F1ED, 0,
0x01F1F5, 0x01F1F0, 0,
0x01F1F5, 0x01F1F1, 0,
0x01F1F5, 0x01F1F2, 0,
0x01F1F5, 0x01F1F3, 0,
0x01F1F5, 0x01F1F7, 0,
0x01F1F5, 0x01F1F8, 0,
0x01F1F5, 0x01F1F9, 0,
0x01F1F5, 0x01F1FC, 0,
0x01F1F5, 0x01F1FE, 0,
0x01F1F6, 0x01F1E6, 0,
0x01F1F7, 0x01F1EA, 0,
0x01F1F7, 0x01F1F4, 0,
0x01F1F7, 0x01F1F8, 0,
0x01F1F7, 0x01F1FA, 0,
0x01F1F7, 0x01F1FC, 0,
0x01F1F8, 0x01F1E6, 0,
0x01F1F8, 0x01F1E7, 0,
0x01F1F8, 0x01F1E8, 0,
0x01F1F8, 0x01F1E9, 0,
0x01F1F8, 0x01F1EA, 0,
0x01F1F8, 0x01F1EC, 0,
0x01F1F8, 0x01F1ED, 0,
0x01F1F8, 0x01F1EE, 0,
0x01F1F8, 0x01F1EF, 0,
0x01F1F8, 0x01F1F0, 0,
0x01F1F8, 0x01F1F1, 0,
0x01F1F8, 0x01F1F2, 0,
0x01F1F8, 0x01F1F3, 0,
0x01F1F8, 0x01F1F4, 0,
0x01F1F8, 0x01F1F7, 0,
0x01F1F8, 0x01F1F8, 0,
0x01F1F8, 0x01F1F9, 0,
0x01F1F8, 0x01F1FB, 0,
0x01F1F8, 0x01F1FD, 0,
0x01F1F8, 0x01F1FE, 0,
0x01F1F8, 0x01F1FF, 0,
0x01F1F9, 0x01F1E6, 0,
0x01F1F9, 0x01F1E8, 0,
0x01F1F9, 0x01F1E9, 0,
0x01F1F9, 0x01F1EB, 0,
0x01F1F9, 0x01F1EC, 0,
0x01F1F9, 0x01F1ED, 0,
0x01F1F9, 0x01F1EF, 0,
0x01F1F9, 0x01F1F0, 0,
0x01F1F9, 0x01F1F1, 0,
0x01F1F9, 0x01F1F2, 0,
0x01F1F9, 0x01F1F3, 0,
0x01F1F9, 0x01F1F4, 0,
0x01F1F9, 0x01F1F7, 0,
0x01F1F9, 0x01F1F9, 0,
0x01F1F9, 0x01F1FB, 0,
0x01F1F9, 0x01F1FC, 0,
0x01F1F9, 0x01F1FF, 0,
0x01F1FA, 0x01F1E6, 0,
0x01F1FA, 0x01F1EC, 0,
0x01F1FA, 0x01F1F2, 0,
0x01F1FA, 0x01F1F3, 0,
0x01F1FA, 0x01F1F8, 0,
0x01F1FA, 0x01F1FE, 0,
0x01F1FA, 0x01F1FF, 0,
0x01F1FB, 0x01F1E6, 0,
0x01F1FB, 0x01F1E8, 0,
0x01F1FB, 0x01F1EA, 0,
0x01F1FB, 0x01F1EC, 0,
0x01F1FB, 0x01F1EE, 0,
0x01F1FB, 0x01F1F3, 0,
0x01F1FB, 0x01F1FA, 0,
0x01F1FC, 0x01F1EB, 0,
0x01F1FC, 0x01F1F8, 0,
0x01F1FD, 0x01F1F0, 0,
0x01F1FE, 0x01F1EA, 0,
0x01F1FE, 0x01F1F9, 0,
0x01F1FF, 0x01F1E6, 0,
0x01F1FF, 0x01F1F2, 0,
0x01F1F0, 0x01F1FE, 0,
0 // null-terminating the list
};
const uc32 UnicodePropertySequences::kEmojiTagSequences[] = {
0x01F3F4, 0x0E0067, 0x0E0062, 0x0E0065, 0x0E006E, 0x0E0067, 0x0E007F, 0,
0x01F3F4, 0x0E0067, 0x0E0062, 0x0E0073, 0x0E0063, 0x0E0074, 0x0E007F, 0,
0x01F3F4, 0x0E0067, 0x0E0062, 0x0E0077, 0x0E006C, 0x0E0073, 0x0E007F, 0,
0 // null-terminating the list
};
const uc32 UnicodePropertySequences::kEmojiZWJSequences[] = {
0x0026F9, 0x00FE0F, 0x00200D, 0x002640, 0x00FE0F, 0,
0x0026F9, 0x00FE0F, 0x00200D, 0x002642, 0x00FE0F, 0,
0x0026F9, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x0026F9, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x0026F9, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x0026F9, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x0026F9, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x0026F9, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x0026F9, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x0026F9, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x0026F9, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x0026F9, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3C3, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3C3, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3C3, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3C3, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3C3, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3C3, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3C3, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3C3, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3C3, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3C3, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3C3, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3C3, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3C4, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3C4, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3C4, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3C4, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3C4, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3C4, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3C4, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3C4, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3C4, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3C4, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3C4, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3C4, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CA, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CA, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CA, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CA, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CA, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CA, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CA, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CA, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CA, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CA, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CA, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CA, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CB, 0x00FE0F, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CB, 0x00FE0F, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CB, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CB, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CB, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CB, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CB, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CB, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CB, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CB, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CB, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CB, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CC, 0x00FE0F, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CC, 0x00FE0F, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CC, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CC, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CC, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CC, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CC, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CC, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CC, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CC, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3CC, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F3CC, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F3F3, 0x00FE0F, 0x00200D, 0x01F308, 0,
0x01F3F4, 0x00200D, 0x002620, 0x00FE0F, 0,
0x01F441, 0x00FE0F, 0x00200D, 0x01F5E8, 0x00FE0F, 0,
0x01F468, 0x00200D, 0x002695, 0x00FE0F, 0,
0x01F468, 0x00200D, 0x002696, 0x00FE0F, 0,
0x01F468, 0x00200D, 0x002708, 0x00FE0F, 0,
0x01F468, 0x00200D, 0x002764, 0x00FE0F, 0x00200D, 0x01F468, 0,
0x01F468, 0x00200D, 0x002764, 0x00FE0F, 0x00200D, 0x01F48B, 0x00200D,
0x01F468, 0,
0x01F468, 0x00200D, 0x01F33E, 0,
0x01F468, 0x00200D, 0x01F373, 0,
0x01F468, 0x00200D, 0x01F393, 0,
0x01F468, 0x00200D, 0x01F3A4, 0,
0x01F468, 0x00200D, 0x01F3A8, 0,
0x01F468, 0x00200D, 0x01F3EB, 0,
0x01F468, 0x00200D, 0x01F3ED, 0,
0x01F468, 0x00200D, 0x01F466, 0,
0x01F468, 0x00200D, 0x01F466, 0x00200D, 0x01F466, 0,
0x01F468, 0x00200D, 0x01F467, 0,
0x01F468, 0x00200D, 0x01F467, 0x00200D, 0x01F466, 0,
0x01F468, 0x00200D, 0x01F467, 0x00200D, 0x01F467, 0,
0x01F468, 0x00200D, 0x01F468, 0x00200D, 0x01F466, 0,
0x01F468, 0x00200D, 0x01F468, 0x00200D, 0x01F466, 0x00200D, 0x01F466, 0,
0x01F468, 0x00200D, 0x01F468, 0x00200D, 0x01F467, 0,
0x01F468, 0x00200D, 0x01F468, 0x00200D, 0x01F467, 0x00200D, 0x01F466, 0,
0x01F468, 0x00200D, 0x01F468, 0x00200D, 0x01F467, 0x00200D, 0x01F467, 0,
0x01F468, 0x00200D, 0x01F469, 0x00200D, 0x01F466, 0,
0x01F468, 0x00200D, 0x01F469, 0x00200D, 0x01F466, 0x00200D, 0x01F466, 0,
0x01F468, 0x00200D, 0x01F469, 0x00200D, 0x01F467, 0,
0x01F468, 0x00200D, 0x01F469, 0x00200D, 0x01F467, 0x00200D, 0x01F466, 0,
0x01F468, 0x00200D, 0x01F469, 0x00200D, 0x01F467, 0x00200D, 0x01F467, 0,
0x01F468, 0x00200D, 0x01F4BB, 0,
0x01F468, 0x00200D, 0x01F4BC, 0,
0x01F468, 0x00200D, 0x01F527, 0,
0x01F468, 0x00200D, 0x01F52C, 0,
0x01F468, 0x00200D, 0x01F680, 0,
0x01F468, 0x00200D, 0x01F692, 0,
0x01F468, 0x00200D, 0x01F9B0, 0,
0x01F468, 0x00200D, 0x01F9B1, 0,
0x01F468, 0x00200D, 0x01F9B2, 0,
0x01F468, 0x00200D, 0x01F9B3, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x002695, 0x00FE0F, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x002696, 0x00FE0F, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x002708, 0x00FE0F, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F33E, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F373, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F393, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F3A4, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F3A8, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F3EB, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F3ED, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F4BB, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F4BC, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F527, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F52C, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F680, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F692, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F9B0, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F9B1, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F9B2, 0,
0x01F468, 0x01F3FB, 0x00200D, 0x01F9B3, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x002695, 0x00FE0F, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x002696, 0x00FE0F, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x002708, 0x00FE0F, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F33E, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F373, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F393, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F3A4, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F3A8, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F3EB, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F3ED, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F4BB, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F4BC, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F527, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F52C, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F680, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F692, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F9B0, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F9B1, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F9B2, 0,
0x01F468, 0x01F3FC, 0x00200D, 0x01F9B3, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x002695, 0x00FE0F, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x002696, 0x00FE0F, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x002708, 0x00FE0F, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F33E, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F373, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F393, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F3A4, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F3A8, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F3EB, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F3ED, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F4BB, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F4BC, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F527, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F52C, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F680, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F692, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F9B0, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F9B1, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F9B2, 0,
0x01F468, 0x01F3FD, 0x00200D, 0x01F9B3, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x002695, 0x00FE0F, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x002696, 0x00FE0F, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x002708, 0x00FE0F, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F33E, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F373, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F393, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F3A4, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F3A8, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F3EB, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F3ED, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F4BB, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F4BC, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F527, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F52C, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F680, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F692, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F9B0, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F9B1, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F9B2, 0,
0x01F468, 0x01F3FE, 0x00200D, 0x01F9B3, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x002695, 0x00FE0F, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x002696, 0x00FE0F, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x002708, 0x00FE0F, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F33E, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F373, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F393, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F3A4, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F3A8, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F3EB, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F3ED, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F4BB, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F4BC, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F527, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F52C, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F680, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F692, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F9B0, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F9B1, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F9B2, 0,
0x01F468, 0x01F3FF, 0x00200D, 0x01F9B3, 0,
0x01F469, 0x00200D, 0x002695, 0x00FE0F, 0,
0x01F469, 0x00200D, 0x002696, 0x00FE0F, 0,
0x01F469, 0x00200D, 0x002708, 0x00FE0F, 0,
0x01F469, 0x00200D, 0x002764, 0x00FE0F, 0x00200D, 0x01F468, 0,
0x01F469, 0x00200D, 0x002764, 0x00FE0F, 0x00200D, 0x01F469, 0,
0x01F469, 0x00200D, 0x002764, 0x00FE0F, 0x00200D, 0x01F48B, 0x00200D,
0x01F468, 0,
0x01F469, 0x00200D, 0x002764, 0x00FE0F, 0x00200D, 0x01F48B, 0x00200D,
0x01F469, 0,
0x01F469, 0x00200D, 0x01F33E, 0,
0x01F469, 0x00200D, 0x01F373, 0,
0x01F469, 0x00200D, 0x01F393, 0,
0x01F469, 0x00200D, 0x01F3A4, 0,
0x01F469, 0x00200D, 0x01F3A8, 0,
0x01F469, 0x00200D, 0x01F3EB, 0,
0x01F469, 0x00200D, 0x01F3ED, 0,
0x01F469, 0x00200D, 0x01F466, 0,
0x01F469, 0x00200D, 0x01F466, 0x00200D, 0x01F466, 0,
0x01F469, 0x00200D, 0x01F467, 0,
0x01F469, 0x00200D, 0x01F467, 0x00200D, 0x01F466, 0,
0x01F469, 0x00200D, 0x01F467, 0x00200D, 0x01F467, 0,
0x01F469, 0x00200D, 0x01F469, 0x00200D, 0x01F466, 0,
0x01F469, 0x00200D, 0x01F469, 0x00200D, 0x01F466, 0x00200D, 0x01F466, 0,
0x01F469, 0x00200D, 0x01F469, 0x00200D, 0x01F467, 0,
0x01F469, 0x00200D, 0x01F469, 0x00200D, 0x01F467, 0x00200D, 0x01F466, 0,
0x01F469, 0x00200D, 0x01F469, 0x00200D, 0x01F467, 0x00200D, 0x01F467, 0,
0x01F469, 0x00200D, 0x01F4BB, 0,
0x01F469, 0x00200D, 0x01F4BC, 0,
0x01F469, 0x00200D, 0x01F527, 0,
0x01F469, 0x00200D, 0x01F52C, 0,
0x01F469, 0x00200D, 0x01F680, 0,
0x01F469, 0x00200D, 0x01F692, 0,
0x01F469, 0x00200D, 0x01F9B0, 0,
0x01F469, 0x00200D, 0x01F9B1, 0,
0x01F469, 0x00200D, 0x01F9B2, 0,
0x01F469, 0x00200D, 0x01F9B3, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x002695, 0x00FE0F, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x002696, 0x00FE0F, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x002708, 0x00FE0F, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F33E, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F373, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F393, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F3A4, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F3A8, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F3EB, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F3ED, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F4BB, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F4BC, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F527, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F52C, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F680, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F692, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F9B0, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F9B1, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F9B2, 0,
0x01F469, 0x01F3FB, 0x00200D, 0x01F9B3, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x002695, 0x00FE0F, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x002696, 0x00FE0F, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x002708, 0x00FE0F, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F33E, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F373, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F393, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F3A4, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F3A8, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F3EB, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F3ED, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F4BB, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F4BC, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F527, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F52C, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F680, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F692, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F9B0, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F9B1, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F9B2, 0,
0x01F469, 0x01F3FC, 0x00200D, 0x01F9B3, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x002695, 0x00FE0F, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x002696, 0x00FE0F, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x002708, 0x00FE0F, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F33E, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F373, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F393, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F3A4, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F3A8, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F3EB, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F3ED, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F4BB, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F4BC, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F527, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F52C, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F680, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F692, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F9B0, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F9B1, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F9B2, 0,
0x01F469, 0x01F3FD, 0x00200D, 0x01F9B3, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x002695, 0x00FE0F, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x002696, 0x00FE0F, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x002708, 0x00FE0F, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F33E, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F373, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F393, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F3A4, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F3A8, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F3EB, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F3ED, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F4BB, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F4BC, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F527, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F52C, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F680, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F692, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F9B0, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F9B1, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F9B2, 0,
0x01F469, 0x01F3FE, 0x00200D, 0x01F9B3, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x002695, 0x00FE0F, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x002696, 0x00FE0F, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x002708, 0x00FE0F, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F33E, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F373, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F393, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F3A4, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F3A8, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F3EB, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F3ED, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F4BB, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F4BC, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F527, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F52C, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F680, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F692, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F9B0, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F9B1, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F9B2, 0,
0x01F469, 0x01F3FF, 0x00200D, 0x01F9B3, 0,
0x01F46E, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F46E, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F46E, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F46E, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F46E, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F46E, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F46E, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F46E, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F46E, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F46E, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F46E, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F46E, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F46F, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F46F, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F471, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F471, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F471, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F471, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F471, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F471, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F471, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F471, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F471, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F471, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F471, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F471, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F473, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F473, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F473, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F473, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F473, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F473, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F473, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F473, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F473, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F473, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F473, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F473, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F477, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F477, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F477, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F477, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F477, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F477, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F477, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F477, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F477, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F477, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F477, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F477, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F481, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F481, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F481, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F481, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F481, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F481, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F481, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F481, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F481, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F481, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F481, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F481, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F482, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F482, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F482, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F482, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F482, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F482, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F482, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F482, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F482, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F482, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F482, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F482, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F486, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F486, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F486, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F486, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F486, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F486, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F486, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F486, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F486, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F486, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F486, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F486, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F487, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F487, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F487, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F487, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F487, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F487, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F487, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F487, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F487, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F487, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F487, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F487, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F575, 0x00FE0F, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F575, 0x00FE0F, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F575, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F575, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F575, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F575, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F575, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F575, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F575, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F575, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F575, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F575, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F645, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F645, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F645, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F645, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F645, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F645, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F645, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F645, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F645, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F645, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F645, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F645, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F646, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F646, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F646, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F646, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F646, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F646, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F646, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F646, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F646, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F646, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F646, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F646, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F647, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F647, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F647, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F647, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F647, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F647, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F647, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F647, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F647, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F647, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F647, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F647, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64B, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64B, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64B, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64B, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64B, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64B, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64B, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64B, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64B, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64B, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64B, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64B, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64D, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64D, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64D, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64D, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64D, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64D, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64D, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64D, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64D, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64D, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64D, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64D, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64E, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64E, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64E, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64E, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64E, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64E, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64E, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64E, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64E, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64E, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F64E, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F64E, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6A3, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6A3, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6A3, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6A3, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6A3, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6A3, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6A3, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6A3, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6A3, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6A3, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6A3, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6A3, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B4, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B4, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B4, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B4, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B4, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B4, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B4, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B4, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B4, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B4, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B4, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B4, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B5, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B5, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B5, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B5, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B5, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B5, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B5, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B5, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B5, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B5, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B5, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B5, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B6, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B6, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B6, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B6, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B6, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B6, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B6, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B6, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B6, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B6, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F6B6, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F6B6, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F926, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F926, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F926, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F926, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F926, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F926, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F926, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F926, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F926, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F926, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F926, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F926, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F937, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F937, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F937, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F937, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F937, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F937, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F937, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F937, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F937, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F937, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F937, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F937, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F938, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F938, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F938, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F938, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F938, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F938, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F938, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F938, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F938, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F938, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F938, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F938, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F939, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F939, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F939, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F939, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F939, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F939, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F939, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F939, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F939, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F939, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F939, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F939, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F93C, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F93C, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F93D, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F93D, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F93D, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F93D, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F93D, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F93D, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F93D, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F93D, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F93D, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F93D, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F93D, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F93D, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F93E, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F93E, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F93E, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F93E, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F93E, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F93E, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F93E, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F93E, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F93E, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F93E, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F93E, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F93E, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9B8, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9B8, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9B8, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9B8, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9B8, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9B8, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9B8, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9B8, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9B8, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9B8, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9B8, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9B8, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9B9, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9B9, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9B9, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9B9, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9B9, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9B9, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9B9, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9B9, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9B9, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9B9, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9B9, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9B9, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D6, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D6, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D6, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D6, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D6, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D6, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D6, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D6, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D6, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D6, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D6, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D6, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D7, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D7, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D7, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D7, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D7, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D7, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D7, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D7, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D7, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D7, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D7, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D7, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D8, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D8, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D8, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D8, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D8, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D8, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D8, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D8, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D8, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D8, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D8, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D8, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D9, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D9, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D9, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D9, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D9, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D9, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D9, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D9, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D9, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D9, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9D9, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9D9, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DA, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DA, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DA, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DA, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DA, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DA, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DA, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DA, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DA, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DA, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DA, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DA, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DB, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DB, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DB, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DB, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DB, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DB, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DB, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DB, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DB, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DB, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DC, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DC, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DC, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DC, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DC, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DC, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DC, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DC, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DC, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DC, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DD, 0x01F3FB, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DD, 0x01F3FB, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DD, 0x01F3FC, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DD, 0x01F3FC, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DD, 0x01F3FD, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DD, 0x01F3FD, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DD, 0x01F3FE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DD, 0x01F3FE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DD, 0x01F3FF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DD, 0x01F3FF, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DE, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DE, 0x00200D, 0x002642, 0x00FE0F, 0,
0x01F9DF, 0x00200D, 0x002640, 0x00FE0F, 0,
0x01F9DF, 0x00200D, 0x002642, 0x00FE0F, 0,
0 // null-terminating the list
};
} // namespace internal
} // namespace v8
#endif // V8_INTL_SUPPORT
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef V8_REGEXP_PROPERTY_SEQUENCES_H_
#define V8_REGEXP_PROPERTY_SEQUENCES_H_
#ifdef V8_INTL_SUPPORT
#include "src/globals.h"
namespace v8 {
namespace internal {
class UnicodePropertySequences : public AllStatic {
public:
static const uc32 kEmojiFlagSequences[];
static const uc32 kEmojiTagSequences[];
static const uc32 kEmojiZWJSequences[];
};
} // namespace internal
} // namespace v8
#endif // V8_INTL_SUPPORT
#endif // V8_REGEXP_PROPERTY_SEQUENCES_H_
......@@ -12,7 +12,6 @@
#include "src/objects-inl.h"
#include "src/ostreams.h"
#include "src/regexp/jsregexp.h"
#include "src/regexp/property-sequences.h"
#include "src/utils.h"
#ifdef V8_INTL_SUPPORT
......@@ -345,23 +344,13 @@ RegExpTree* RegExpParser::ParseDisjunction() {
if (unicode()) {
ZoneList<CharacterRange>* ranges =
new (zone()) ZoneList<CharacterRange>(2, zone());
std::vector<char> name_1, name_2;
if (ParsePropertyClassName(&name_1, &name_2)) {
if (AddPropertyClassRange(ranges, p == 'P', name_1, name_2)) {
RegExpCharacterClass* cc = new (zone())
RegExpCharacterClass(zone(), ranges, builder->flags());
builder->AddCharacterClass(cc);
break;
}
if (p == 'p' && name_2.empty()) {
RegExpTree* sequence = GetPropertySequence(name_1);
if (sequence != nullptr) {
builder->AddAtom(sequence);
break;
}
}
if (!ParsePropertyClass(ranges, p == 'P')) {
return ReportError(CStrVector("Invalid property name"));
}
return ReportError(CStrVector("Invalid property name"));
RegExpCharacterClass* cc = new (zone())
RegExpCharacterClass(zone(), ranges, builder->flags());
builder->AddCharacterClass(cc);
} else {
builder->AddCharacter(p);
}
......@@ -1357,10 +1346,8 @@ bool IsUnicodePropertyValueCharacter(char c) {
} // anonymous namespace
bool RegExpParser::ParsePropertyClassName(std::vector<char>* name_1,
std::vector<char>* name_2) {
DCHECK(name_1->empty());
DCHECK(name_2->empty());
bool RegExpParser::ParsePropertyClass(ZoneList<CharacterRange>* result,
bool negate) {
// Parse the property class as follows:
// - In \p{name}, 'name' is interpreted
// - either as a general category property value name.
......@@ -1369,58 +1356,55 @@ bool RegExpParser::ParsePropertyClassName(std::vector<char>* name_1,
// and 'value' is interpreted as one of the available property value names.
// - Aliases in PropertyAlias.txt and PropertyValueAlias.txt can be used.
// - Loose matching is not applied.
std::vector<char> first_part;
std::vector<char> second_part;
if (current() == '{') {
// Parse \p{[PropertyName=]PropertyNameValue}
for (Advance(); current() != '}' && current() != '='; Advance()) {
if (!IsUnicodePropertyValueCharacter(current())) return false;
if (!has_next()) return false;
name_1->push_back(static_cast<char>(current()));
first_part.push_back(static_cast<char>(current()));
}
if (current() == '=') {
for (Advance(); current() != '}'; Advance()) {
if (!IsUnicodePropertyValueCharacter(current())) return false;
if (!has_next()) return false;
name_2->push_back(static_cast<char>(current()));
second_part.push_back(static_cast<char>(current()));
}
name_2->push_back(0); // null-terminate string.
second_part.push_back(0); // null-terminate string.
}
} else {
return false;
}
Advance();
name_1->push_back(0); // null-terminate string.
first_part.push_back(0); // null-terminate string.
DCHECK(name_1->size() - 1 == std::strlen(name_1->data()));
DCHECK(name_2->empty() || name_2->size() - 1 == std::strlen(name_2->data()));
return true;
}
DCHECK(first_part.size() - 1 == std::strlen(first_part.data()));
DCHECK(second_part.empty() ||
second_part.size() - 1 == std::strlen(second_part.data()));
bool RegExpParser::AddPropertyClassRange(ZoneList<CharacterRange>* add_to,
bool negate,
const std::vector<char>& name_1,
const std::vector<char>& name_2) {
if (name_2.empty()) {
if (second_part.empty()) {
// First attempt to interpret as general category property value name.
const char* name = name_1.data();
const char* name = first_part.data();
if (LookupPropertyValueName(UCHAR_GENERAL_CATEGORY_MASK, name, negate,
add_to, zone())) {
result, zone())) {
return true;
}
// Interpret "Any", "ASCII", and "Assigned".
if (LookupSpecialPropertyValueName(name, add_to, negate, zone())) {
if (LookupSpecialPropertyValueName(name, result, negate, zone())) {
return true;
}
// Then attempt to interpret as binary property name with value name 'Y'.
UProperty property = u_getPropertyEnum(name);
if (!IsSupportedBinaryProperty(property)) return false;
if (!IsExactPropertyAlias(name, property)) return false;
return LookupPropertyValueName(property, negate ? "N" : "Y", false, add_to,
return LookupPropertyValueName(property, negate ? "N" : "Y", false, result,
zone());
} else {
// Both property name and value name are specified. Attempt to interpret
// the property name as enumerated property.
const char* property_name = name_1.data();
const char* value_name = name_2.data();
const char* property_name = first_part.data();
const char* value_name = second_part.data();
UProperty property = u_getPropertyEnum(property_name);
if (!IsExactPropertyAlias(property_name, property)) return false;
if (property == UCHAR_GENERAL_CATEGORY) {
......@@ -1430,88 +1414,18 @@ bool RegExpParser::AddPropertyClassRange(ZoneList<CharacterRange>* add_to,
property != UCHAR_SCRIPT_EXTENSIONS) {
return false;
}
return LookupPropertyValueName(property, value_name, negate, add_to,
return LookupPropertyValueName(property, value_name, negate, result,
zone());
}
}
RegExpTree* RegExpParser::GetPropertySequence(const std::vector<char>& name_1) {
if (!FLAG_harmony_regexp_sequence) return nullptr;
const char* name = name_1.data();
const uc32* sequence_list = nullptr;
JSRegExp::Flags flags = JSRegExp::kUnicode;
if (NameEquals(name, "Emoji_Flag_Sequence")) {
sequence_list = UnicodePropertySequences::kEmojiFlagSequences;
} else if (NameEquals(name, "Emoji_Tag_Sequence")) {
sequence_list = UnicodePropertySequences::kEmojiTagSequences;
} else if (NameEquals(name, "Emoji_ZWJ_Sequence")) {
sequence_list = UnicodePropertySequences::kEmojiZWJSequences;
}
if (sequence_list != nullptr) {
// TODO(yangguo): this creates huge regexp code. Alternative to this is
// to create a new operator that checks for these sequences at runtime.
RegExpBuilder builder(zone(), flags);
while (true) { // Iterate through list of sequences.
while (*sequence_list != 0) { // Iterate through sequence.
builder.AddUnicodeCharacter(*sequence_list);
sequence_list++;
}
sequence_list++;
if (*sequence_list == 0) break;
builder.NewAlternative();
}
return builder.ToRegExp();
}
if (NameEquals(name, "Emoji_Keycap_Sequence")) {
// https://unicode.org/reports/tr51/#def_emoji_keycap_sequence
// emoji_keycap_sequence := [0-9#*] \x{FE0F 20E3}
RegExpBuilder builder(zone(), flags);
ZoneList<CharacterRange>* prefix_ranges =
new (zone()) ZoneList<CharacterRange>(2, zone());
prefix_ranges->Add(CharacterRange::Range('0', '9'), zone());
prefix_ranges->Add(CharacterRange::Singleton('#'), zone());
prefix_ranges->Add(CharacterRange::Singleton('*'), zone());
builder.AddCharacterClass(
new (zone()) RegExpCharacterClass(zone(), prefix_ranges, flags));
builder.AddCharacter(0xFE0F);
builder.AddCharacter(0x20E3);
return builder.ToRegExp();
} else if (NameEquals(name, "Emoji_Modifier_Sequence")) {
// https://unicode.org/reports/tr51/#def_emoji_modifier_sequence
// emoji_modifier_sequence := emoji_modifier_base emoji_modifier
RegExpBuilder builder(zone(), flags);
ZoneList<CharacterRange>* modifier_base_ranges =
new (zone()) ZoneList<CharacterRange>(2, zone());
LookupPropertyValueName(UCHAR_EMOJI_MODIFIER_BASE, "Y", false,
modifier_base_ranges, zone());
builder.AddCharacterClass(
new (zone()) RegExpCharacterClass(zone(), modifier_base_ranges, flags));
ZoneList<CharacterRange>* modifier_ranges =
new (zone()) ZoneList<CharacterRange>(2, zone());
LookupPropertyValueName(UCHAR_EMOJI_MODIFIER, "Y", false, modifier_ranges,
zone());
builder.AddCharacterClass(
new (zone()) RegExpCharacterClass(zone(), modifier_ranges, flags));
return builder.ToRegExp();
}
return nullptr;
}
#else // V8_INTL_SUPPORT
bool RegExpParser::AddPropertyClassRange(ZoneList<CharacterRange>* add_to,
bool negate,
const std::vector<char>& name_1,
const std::vector<char>& name_2) {
bool RegExpParser::ParsePropertyClass(ZoneList<CharacterRange>* result,
bool negate) {
return false;
}
RegExpTree* RegExpParser::GetPropertySequence(const std::vector<char>& name) {
return nullptr;
}
#endif // V8_INTL_SUPPORT
bool RegExpParser::ParseUnlimitedLengthHexNumber(int max_value, uc32* value) {
......@@ -1677,9 +1591,7 @@ void RegExpParser::ParseClassEscape(ZoneList<CharacterRange>* ranges,
if (unicode()) {
bool negate = Next() == 'P';
Advance(2);
std::vector<char> name_1, name_2;
if (!ParsePropertyClassName(&name_1, &name_2) ||
!AddPropertyClassRange(ranges, negate, name_1, name_2)) {
if (!ParsePropertyClass(ranges, negate)) {
ReportError(CStrVector("Invalid property name in character class"));
}
*is_class_escape = true;
......
......@@ -176,14 +176,7 @@ class RegExpParser {
bool ParseHexEscape(int length, uc32* value);
bool ParseUnicodeEscape(uc32* value);
bool ParseUnlimitedLengthHexNumber(int max_value, uc32* value);
bool ParsePropertyClassName(std::vector<char>* name_1,
std::vector<char>* name_2);
bool AddPropertyClassRange(ZoneList<CharacterRange>* add_to, bool negate,
const std::vector<char>& name_1,
const std::vector<char>& name_2);
RegExpTree* GetPropertySequence(const std::vector<char>& name_1);
bool ParsePropertyClass(ZoneList<CharacterRange>* result, bool negate);
RegExpTree* ParseCharacterClass(const RegExpBuilder* state);
uc32 ParseOctalLiteral();
......
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --harmony-regexp-sequence
const re = /\p{Emoji_Flag_Sequence}/u;
assertTrue(re.test('\u{1F1E6}\u{1F1E8}'));
assertTrue(re.test('\u{1F1FF}\u{1F1FC}'));
assertTrue(re.test('\u{1F1E6}\u{1F1EA}'));
assertTrue(re.test('\u{1F1E6}\u{1F1EB}'));
assertTrue(re.test('\u{1F1E6}\u{1F1EC}'));
assertTrue(re.test('\u{1F1E6}\u{1F1EE}'));
assertTrue(re.test('\u{1F1E6}\u{1F1F1}'));
assertTrue(re.test('\u{1F1E6}\u{1F1F2}'));
assertTrue(re.test('\u{1F1E6}\u{1F1F4}'));
assertTrue(re.test('\u{1F1E6}\u{1F1F6}'));
assertTrue(re.test('\u{1F1E6}\u{1F1F7}'));
assertTrue(re.test('\u{1F1E6}\u{1F1F8}'));
assertTrue(re.test('\u{1F1E6}\u{1F1F9}'));
assertTrue(re.test('\u{1F1E6}\u{1F1FA}'));
assertTrue(re.test('\u{1F1E6}\u{1F1FC}'));
assertTrue(re.test('\u{1F1E6}\u{1F1FD}'));
assertTrue(re.test('\u{1F1E6}\u{1F1FF}'));
assertTrue(re.test('\u{1F1E7}\u{1F1E6}'));
assertTrue(re.test('\u{1F1E7}\u{1F1E7}'));
assertTrue(re.test('\u{1F1E7}\u{1F1E9}'));
assertTrue(re.test('\u{1F1E7}\u{1F1EA}'));
assertTrue(re.test('\u{1F1E7}\u{1F1EB}'));
assertTrue(re.test('\u{1F1E7}\u{1F1EC}'));
assertTrue(re.test('\u{1F1E7}\u{1F1ED}'));
assertTrue(re.test('\u{1F1E7}\u{1F1EE}'));
assertTrue(re.test('\u{1F1E7}\u{1F1EF}'));
assertTrue(re.test('\u{1F1E7}\u{1F1F1}'));
assertTrue(re.test('\u{1F1E7}\u{1F1F2}'));
assertTrue(re.test('\u{1F1E7}\u{1F1F3}'));
assertTrue(re.test('\u{1F1E7}\u{1F1F4}'));
assertTrue(re.test('\u{1F1E7}\u{1F1F6}'));
assertTrue(re.test('\u{1F1E7}\u{1F1F7}'));
assertTrue(re.test('\u{1F1E7}\u{1F1F8}'));
assertTrue(re.test('\u{1F1E7}\u{1F1F9}'));
assertTrue(re.test('\u{1F1E7}\u{1F1FB}'));
assertTrue(re.test('\u{1F1E7}\u{1F1FC}'));
assertTrue(re.test('\u{1F1E7}\u{1F1FE}'));
assertTrue(re.test('\u{1F1E7}\u{1F1FF}'));
assertTrue(re.test('\u{1F1E8}\u{1F1E6}'));
assertTrue(re.test('\u{1F1E8}\u{1F1E8}'));
assertTrue(re.test('\u{1F1E8}\u{1F1E9}'));
assertTrue(re.test('\u{1F1E8}\u{1F1EB}'));
assertTrue(re.test('\u{1F1E8}\u{1F1EC}'));
assertTrue(re.test('\u{1F1E8}\u{1F1ED}'));
assertTrue(re.test('\u{1F1E8}\u{1F1EE}'));
assertTrue(re.test('\u{1F1E8}\u{1F1F0}'));
assertTrue(re.test('\u{1F1E8}\u{1F1F1}'));
assertTrue(re.test('\u{1F1E8}\u{1F1F2}'));
assertTrue(re.test('\u{1F1E8}\u{1F1F3}'));
assertTrue(re.test('\u{1F1E8}\u{1F1F4}'));
assertTrue(re.test('\u{1F1E8}\u{1F1F5}'));
assertTrue(re.test('\u{1F1E8}\u{1F1F7}'));
assertTrue(re.test('\u{1F1E8}\u{1F1FA}'));
assertTrue(re.test('\u{1F1E8}\u{1F1FB}'));
assertTrue(re.test('\u{1F1E8}\u{1F1FC}'));
assertTrue(re.test('\u{1F1E8}\u{1F1FD}'));
assertTrue(re.test('\u{1F1E8}\u{1F1FE}'));
assertTrue(re.test('\u{1F1E8}\u{1F1FF}'));
assertTrue(re.test('\u{1F1E9}\u{1F1EA}'));
assertTrue(re.test('\u{1F1E9}\u{1F1EC}'));
assertTrue(re.test('\u{1F1E9}\u{1F1EF}'));
assertTrue(re.test('\u{1F1E9}\u{1F1F0}'));
assertTrue(re.test('\u{1F1E9}\u{1F1F2}'));
assertTrue(re.test('\u{1F1E9}\u{1F1F4}'));
assertTrue(re.test('\u{1F1E9}\u{1F1FF}'));
assertTrue(re.test('\u{1F1EA}\u{1F1E6}'));
assertTrue(re.test('\u{1F1EA}\u{1F1E8}'));
assertTrue(re.test('\u{1F1EA}\u{1F1EA}'));
assertTrue(re.test('\u{1F1EA}\u{1F1EC}'));
assertTrue(re.test('\u{1F1EA}\u{1F1ED}'));
assertTrue(re.test('\u{1F1EA}\u{1F1F7}'));
assertTrue(re.test('\u{1F1EA}\u{1F1F8}'));
assertTrue(re.test('\u{1F1EA}\u{1F1F9}'));
assertTrue(re.test('\u{1F1EA}\u{1F1FA}'));
assertTrue(re.test('\u{1F1EB}\u{1F1EE}'));
assertTrue(re.test('\u{1F1EB}\u{1F1EF}'));
assertTrue(re.test('\u{1F1EB}\u{1F1F0}'));
assertTrue(re.test('\u{1F1EB}\u{1F1F2}'));
assertTrue(re.test('\u{1F1EB}\u{1F1F4}'));
assertTrue(re.test('\u{1F1EB}\u{1F1F7}'));
assertTrue(re.test('\u{1F1EC}\u{1F1E6}'));
assertTrue(re.test('\u{1F1EC}\u{1F1E7}'));
assertTrue(re.test('\u{1F1EC}\u{1F1E9}'));
assertTrue(re.test('\u{1F1EC}\u{1F1EA}'));
assertTrue(re.test('\u{1F1EC}\u{1F1EB}'));
assertTrue(re.test('\u{1F1EC}\u{1F1EC}'));
assertTrue(re.test('\u{1F1EC}\u{1F1ED}'));
assertTrue(re.test('\u{1F1EC}\u{1F1EE}'));
assertTrue(re.test('\u{1F1EC}\u{1F1F1}'));
assertTrue(re.test('\u{1F1EC}\u{1F1F2}'));
assertTrue(re.test('\u{1F1EC}\u{1F1F3}'));
assertTrue(re.test('\u{1F1EC}\u{1F1F5}'));
assertTrue(re.test('\u{1F1EC}\u{1F1F6}'));
assertTrue(re.test('\u{1F1EC}\u{1F1F7}'));
assertTrue(re.test('\u{1F1EC}\u{1F1F8}'));
assertTrue(re.test('\u{1F1EC}\u{1F1F9}'));
assertTrue(re.test('\u{1F1EC}\u{1F1FA}'));
assertTrue(re.test('\u{1F1EC}\u{1F1FC}'));
assertTrue(re.test('\u{1F1EC}\u{1F1FE}'));
assertTrue(re.test('\u{1F1ED}\u{1F1F0}'));
assertTrue(re.test('\u{1F1ED}\u{1F1F2}'));
assertTrue(re.test('\u{1F1ED}\u{1F1F3}'));
assertTrue(re.test('\u{1F1ED}\u{1F1F7}'));
assertTrue(re.test('\u{1F1ED}\u{1F1F9}'));
assertTrue(re.test('\u{1F1ED}\u{1F1FA}'));
assertTrue(re.test('\u{1F1EE}\u{1F1E8}'));
assertTrue(re.test('\u{1F1EE}\u{1F1E9}'));
assertTrue(re.test('\u{1F1EE}\u{1F1EA}'));
assertTrue(re.test('\u{1F1EE}\u{1F1F1}'));
assertTrue(re.test('\u{1F1EE}\u{1F1F2}'));
assertTrue(re.test('\u{1F1EE}\u{1F1F3}'));
assertTrue(re.test('\u{1F1EE}\u{1F1F4}'));
assertTrue(re.test('\u{1F1EE}\u{1F1F6}'));
assertTrue(re.test('\u{1F1EE}\u{1F1F7}'));
assertTrue(re.test('\u{1F1EE}\u{1F1F8}'));
assertTrue(re.test('\u{1F1EE}\u{1F1F9}'));
assertTrue(re.test('\u{1F1EF}\u{1F1EA}'));
assertTrue(re.test('\u{1F1EF}\u{1F1F2}'));
assertTrue(re.test('\u{1F1EF}\u{1F1F4}'));
assertTrue(re.test('\u{1F1EF}\u{1F1F5}'));
assertTrue(re.test('\u{1F1F0}\u{1F1EA}'));
assertTrue(re.test('\u{1F1F0}\u{1F1EC}'));
assertTrue(re.test('\u{1F1F0}\u{1F1ED}'));
assertTrue(re.test('\u{1F1F0}\u{1F1EE}'));
assertTrue(re.test('\u{1F1F0}\u{1F1F2}'));
assertTrue(re.test('\u{1F1F0}\u{1F1F3}'));
assertTrue(re.test('\u{1F1F0}\u{1F1F5}'));
assertTrue(re.test('\u{1F1F0}\u{1F1F7}'));
assertTrue(re.test('\u{1F1F0}\u{1F1FC}'));
assertTrue(re.test('\u{1F1E6}\u{1F1E9}'));
assertTrue(re.test('\u{1F1F0}\u{1F1FF}'));
assertTrue(re.test('\u{1F1F1}\u{1F1E6}'));
assertTrue(re.test('\u{1F1F1}\u{1F1E7}'));
assertTrue(re.test('\u{1F1F1}\u{1F1E8}'));
assertTrue(re.test('\u{1F1F1}\u{1F1EE}'));
assertTrue(re.test('\u{1F1F1}\u{1F1F0}'));
assertTrue(re.test('\u{1F1F1}\u{1F1F7}'));
assertTrue(re.test('\u{1F1F1}\u{1F1F8}'));
assertTrue(re.test('\u{1F1F1}\u{1F1F9}'));
assertTrue(re.test('\u{1F1F1}\u{1F1FA}'));
assertTrue(re.test('\u{1F1F1}\u{1F1FB}'));
assertTrue(re.test('\u{1F1F1}\u{1F1FE}'));
assertTrue(re.test('\u{1F1F2}\u{1F1E6}'));
assertTrue(re.test('\u{1F1F2}\u{1F1E8}'));
assertTrue(re.test('\u{1F1F2}\u{1F1E9}'));
assertTrue(re.test('\u{1F1F2}\u{1F1EA}'));
assertTrue(re.test('\u{1F1F2}\u{1F1EB}'));
assertTrue(re.test('\u{1F1F2}\u{1F1EC}'));
assertTrue(re.test('\u{1F1F2}\u{1F1ED}'));
assertTrue(re.test('\u{1F1F2}\u{1F1F0}'));
assertTrue(re.test('\u{1F1F2}\u{1F1F1}'));
assertTrue(re.test('\u{1F1F2}\u{1F1F2}'));
assertTrue(re.test('\u{1F1F2}\u{1F1F3}'));
assertTrue(re.test('\u{1F1F2}\u{1F1F4}'));
assertTrue(re.test('\u{1F1F2}\u{1F1F5}'));
assertTrue(re.test('\u{1F1F2}\u{1F1F6}'));
assertTrue(re.test('\u{1F1F2}\u{1F1F7}'));
assertTrue(re.test('\u{1F1F2}\u{1F1F8}'));
assertTrue(re.test('\u{1F1F2}\u{1F1F9}'));
assertTrue(re.test('\u{1F1F2}\u{1F1FA}'));
assertTrue(re.test('\u{1F1F2}\u{1F1FB}'));
assertTrue(re.test('\u{1F1F2}\u{1F1FC}'));
assertTrue(re.test('\u{1F1F2}\u{1F1FD}'));
assertTrue(re.test('\u{1F1F2}\u{1F1FE}'));
assertTrue(re.test('\u{1F1F2}\u{1F1FF}'));
assertTrue(re.test('\u{1F1F3}\u{1F1E6}'));
assertTrue(re.test('\u{1F1F3}\u{1F1E8}'));
assertTrue(re.test('\u{1F1F3}\u{1F1EA}'));
assertTrue(re.test('\u{1F1F3}\u{1F1EB}'));
assertTrue(re.test('\u{1F1F3}\u{1F1EC}'));
assertTrue(re.test('\u{1F1F3}\u{1F1EE}'));
assertTrue(re.test('\u{1F1F3}\u{1F1F1}'));
assertTrue(re.test('\u{1F1F3}\u{1F1F4}'));
assertTrue(re.test('\u{1F1F3}\u{1F1F5}'));
assertTrue(re.test('\u{1F1F3}\u{1F1F7}'));
assertTrue(re.test('\u{1F1F3}\u{1F1FA}'));
assertTrue(re.test('\u{1F1F3}\u{1F1FF}'));
assertTrue(re.test('\u{1F1F4}\u{1F1F2}'));
assertTrue(re.test('\u{1F1F5}\u{1F1E6}'));
assertTrue(re.test('\u{1F1F5}\u{1F1EA}'));
assertTrue(re.test('\u{1F1F5}\u{1F1EB}'));
assertTrue(re.test('\u{1F1F5}\u{1F1EC}'));
assertTrue(re.test('\u{1F1F5}\u{1F1ED}'));
assertTrue(re.test('\u{1F1F5}\u{1F1F0}'));
assertTrue(re.test('\u{1F1F5}\u{1F1F1}'));
assertTrue(re.test('\u{1F1F5}\u{1F1F2}'));
assertTrue(re.test('\u{1F1F5}\u{1F1F3}'));
assertTrue(re.test('\u{1F1F5}\u{1F1F7}'));
assertTrue(re.test('\u{1F1F5}\u{1F1F8}'));
assertTrue(re.test('\u{1F1F5}\u{1F1F9}'));
assertTrue(re.test('\u{1F1F5}\u{1F1FC}'));
assertTrue(re.test('\u{1F1F5}\u{1F1FE}'));
assertTrue(re.test('\u{1F1F6}\u{1F1E6}'));
assertTrue(re.test('\u{1F1F7}\u{1F1EA}'));
assertTrue(re.test('\u{1F1F7}\u{1F1F4}'));
assertTrue(re.test('\u{1F1F7}\u{1F1F8}'));
assertTrue(re.test('\u{1F1F7}\u{1F1FA}'));
assertTrue(re.test('\u{1F1F7}\u{1F1FC}'));
assertTrue(re.test('\u{1F1F8}\u{1F1E6}'));
assertTrue(re.test('\u{1F1F8}\u{1F1E7}'));
assertTrue(re.test('\u{1F1F8}\u{1F1E8}'));
assertTrue(re.test('\u{1F1F8}\u{1F1E9}'));
assertTrue(re.test('\u{1F1F8}\u{1F1EA}'));
assertTrue(re.test('\u{1F1F8}\u{1F1EC}'));
assertTrue(re.test('\u{1F1F8}\u{1F1ED}'));
assertTrue(re.test('\u{1F1F8}\u{1F1EE}'));
assertTrue(re.test('\u{1F1F8}\u{1F1EF}'));
assertTrue(re.test('\u{1F1F8}\u{1F1F0}'));
assertTrue(re.test('\u{1F1F8}\u{1F1F1}'));
assertTrue(re.test('\u{1F1F8}\u{1F1F2}'));
assertTrue(re.test('\u{1F1F8}\u{1F1F3}'));
assertTrue(re.test('\u{1F1F8}\u{1F1F4}'));
assertTrue(re.test('\u{1F1F8}\u{1F1F7}'));
assertTrue(re.test('\u{1F1F8}\u{1F1F8}'));
assertTrue(re.test('\u{1F1F8}\u{1F1F9}'));
assertTrue(re.test('\u{1F1F8}\u{1F1FB}'));
assertTrue(re.test('\u{1F1F8}\u{1F1FD}'));
assertTrue(re.test('\u{1F1F8}\u{1F1FE}'));
assertTrue(re.test('\u{1F1F8}\u{1F1FF}'));
assertTrue(re.test('\u{1F1F9}\u{1F1E6}'));
assertTrue(re.test('\u{1F1F9}\u{1F1E8}'));
assertTrue(re.test('\u{1F1F9}\u{1F1E9}'));
assertTrue(re.test('\u{1F1F9}\u{1F1EB}'));
assertTrue(re.test('\u{1F1F9}\u{1F1EC}'));
assertTrue(re.test('\u{1F1F9}\u{1F1ED}'));
assertTrue(re.test('\u{1F1F9}\u{1F1EF}'));
assertTrue(re.test('\u{1F1F9}\u{1F1F0}'));
assertTrue(re.test('\u{1F1F9}\u{1F1F1}'));
assertTrue(re.test('\u{1F1F9}\u{1F1F2}'));
assertTrue(re.test('\u{1F1F9}\u{1F1F3}'));
assertTrue(re.test('\u{1F1F9}\u{1F1F4}'));
assertTrue(re.test('\u{1F1F9}\u{1F1F7}'));
assertTrue(re.test('\u{1F1F9}\u{1F1F9}'));
assertTrue(re.test('\u{1F1F9}\u{1F1FB}'));
assertTrue(re.test('\u{1F1F9}\u{1F1FC}'));
assertTrue(re.test('\u{1F1F9}\u{1F1FF}'));
assertTrue(re.test('\u{1F1FA}\u{1F1E6}'));
assertTrue(re.test('\u{1F1FA}\u{1F1EC}'));
assertTrue(re.test('\u{1F1FA}\u{1F1F2}'));
assertTrue(re.test('\u{1F1FA}\u{1F1F3}'));
assertTrue(re.test('\u{1F1FA}\u{1F1F8}'));
assertTrue(re.test('\u{1F1FA}\u{1F1FE}'));
assertTrue(re.test('\u{1F1FA}\u{1F1FF}'));
assertTrue(re.test('\u{1F1FB}\u{1F1E6}'));
assertTrue(re.test('\u{1F1FB}\u{1F1E8}'));
assertTrue(re.test('\u{1F1FB}\u{1F1EA}'));
assertTrue(re.test('\u{1F1FB}\u{1F1EC}'));
assertTrue(re.test('\u{1F1FB}\u{1F1EE}'));
assertTrue(re.test('\u{1F1FB}\u{1F1F3}'));
assertTrue(re.test('\u{1F1FB}\u{1F1FA}'));
assertTrue(re.test('\u{1F1FC}\u{1F1EB}'));
assertTrue(re.test('\u{1F1FC}\u{1F1F8}'));
assertTrue(re.test('\u{1F1FD}\u{1F1F0}'));
assertTrue(re.test('\u{1F1FE}\u{1F1EA}'));
assertTrue(re.test('\u{1F1FE}\u{1F1F9}'));
assertTrue(re.test('\u{1F1FF}\u{1F1E6}'));
assertTrue(re.test('\u{1F1FF}\u{1F1F2}'));
assertTrue(re.test('\u{1F1F0}\u{1F1FE}'));
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --harmony-regexp-sequence
const re = /\p{Emoji_Keycap_Sequence}/u;
assertTrue(re.test('#\uFE0F\u20E3'));
assertTrue(re.test('9\uFE0F\u20E3'));
assertTrue(re.test('0\uFE0F\u20E3'));
assertTrue(re.test('1\uFE0F\u20E3'));
assertTrue(re.test('2\uFE0F\u20E3'));
assertTrue(re.test('3\uFE0F\u20E3'));
assertTrue(re.test('*\uFE0F\u20E3'));
assertTrue(re.test('5\uFE0F\u20E3'));
assertTrue(re.test('6\uFE0F\u20E3'));
assertTrue(re.test('7\uFE0F\u20E3'));
assertTrue(re.test('8\uFE0F\u20E3'));
assertTrue(re.test('4\uFE0F\u20E3'));
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --harmony-regexp-sequence
const re = /\p{Emoji_Modifier_Sequence}/u;
assertTrue(re.test('\u261D\u{1F3FB}'));
assertTrue(re.test('\u{1F9DD}\u{1F3FF}'));
assertTrue(re.test('\u261D\u{1F3FD}'));
assertTrue(re.test('\u261D\u{1F3FE}'));
assertTrue(re.test('\u261D\u{1F3FF}'));
assertTrue(re.test('\u26F9\u{1F3FB}'));
assertTrue(re.test('\u26F9\u{1F3FC}'));
assertTrue(re.test('\u26F9\u{1F3FD}'));
assertTrue(re.test('\u26F9\u{1F3FE}'));
assertTrue(re.test('\u26F9\u{1F3FF}'));
assertTrue(re.test('\u270A\u{1F3FB}'));
assertTrue(re.test('\u270A\u{1F3FC}'));
assertTrue(re.test('\u270A\u{1F3FD}'));
assertTrue(re.test('\u270A\u{1F3FE}'));
assertTrue(re.test('\u270A\u{1F3FF}'));
assertTrue(re.test('\u270B\u{1F3FB}'));
assertTrue(re.test('\u270B\u{1F3FC}'));
assertTrue(re.test('\u270B\u{1F3FD}'));
assertTrue(re.test('\u270B\u{1F3FE}'));
assertTrue(re.test('\u270B\u{1F3FF}'));
assertTrue(re.test('\u270C\u{1F3FB}'));
assertTrue(re.test('\u270C\u{1F3FC}'));
assertTrue(re.test('\u270C\u{1F3FD}'));
assertTrue(re.test('\u270C\u{1F3FE}'));
assertTrue(re.test('\u270C\u{1F3FF}'));
assertTrue(re.test('\u270D\u{1F3FB}'));
assertTrue(re.test('\u270D\u{1F3FC}'));
assertTrue(re.test('\u270D\u{1F3FD}'));
assertTrue(re.test('\u270D\u{1F3FE}'));
assertTrue(re.test('\u270D\u{1F3FF}'));
assertTrue(re.test('\u{1F385}\u{1F3FB}'));
assertTrue(re.test('\u{1F385}\u{1F3FC}'));
assertTrue(re.test('\u{1F385}\u{1F3FD}'));
assertTrue(re.test('\u{1F385}\u{1F3FE}'));
assertTrue(re.test('\u{1F385}\u{1F3FF}'));
assertTrue(re.test('\u{1F3C2}\u{1F3FB}'));
assertTrue(re.test('\u{1F3C2}\u{1F3FC}'));
assertTrue(re.test('\u{1F3C2}\u{1F3FD}'));
assertTrue(re.test('\u{1F3C2}\u{1F3FE}'));
assertTrue(re.test('\u{1F3C2}\u{1F3FF}'));
assertTrue(re.test('\u{1F3C3}\u{1F3FB}'));
assertTrue(re.test('\u{1F3C3}\u{1F3FC}'));
assertTrue(re.test('\u{1F3C3}\u{1F3FD}'));
assertTrue(re.test('\u{1F3C3}\u{1F3FE}'));
assertTrue(re.test('\u{1F3C3}\u{1F3FF}'));
assertTrue(re.test('\u{1F3C4}\u{1F3FB}'));
assertTrue(re.test('\u{1F3C4}\u{1F3FC}'));
assertTrue(re.test('\u{1F3C4}\u{1F3FD}'));
assertTrue(re.test('\u{1F3C4}\u{1F3FE}'));
assertTrue(re.test('\u{1F3C4}\u{1F3FF}'));
assertTrue(re.test('\u{1F3C7}\u{1F3FB}'));
assertTrue(re.test('\u{1F3C7}\u{1F3FC}'));
assertTrue(re.test('\u{1F3C7}\u{1F3FD}'));
assertTrue(re.test('\u{1F3C7}\u{1F3FE}'));
assertTrue(re.test('\u{1F3C7}\u{1F3FF}'));
assertTrue(re.test('\u{1F3CA}\u{1F3FB}'));
assertTrue(re.test('\u{1F3CA}\u{1F3FC}'));
assertTrue(re.test('\u{1F3CA}\u{1F3FD}'));
assertTrue(re.test('\u{1F3CA}\u{1F3FE}'));
assertTrue(re.test('\u{1F3CA}\u{1F3FF}'));
assertTrue(re.test('\u{1F3CB}\u{1F3FB}'));
assertTrue(re.test('\u{1F3CB}\u{1F3FC}'));
assertTrue(re.test('\u{1F3CB}\u{1F3FD}'));
assertTrue(re.test('\u{1F3CB}\u{1F3FE}'));
assertTrue(re.test('\u{1F3CB}\u{1F3FF}'));
assertTrue(re.test('\u{1F3CC}\u{1F3FB}'));
assertTrue(re.test('\u{1F3CC}\u{1F3FC}'));
assertTrue(re.test('\u{1F3CC}\u{1F3FD}'));
assertTrue(re.test('\u{1F3CC}\u{1F3FE}'));
assertTrue(re.test('\u{1F3CC}\u{1F3FF}'));
assertTrue(re.test('\u{1F442}\u{1F3FB}'));
assertTrue(re.test('\u{1F442}\u{1F3FC}'));
assertTrue(re.test('\u{1F442}\u{1F3FD}'));
assertTrue(re.test('\u{1F442}\u{1F3FE}'));
assertTrue(re.test('\u{1F442}\u{1F3FF}'));
assertTrue(re.test('\u{1F443}\u{1F3FB}'));
assertTrue(re.test('\u{1F443}\u{1F3FC}'));
assertTrue(re.test('\u{1F443}\u{1F3FD}'));
assertTrue(re.test('\u{1F443}\u{1F3FE}'));
assertTrue(re.test('\u{1F443}\u{1F3FF}'));
assertTrue(re.test('\u{1F446}\u{1F3FB}'));
assertTrue(re.test('\u{1F446}\u{1F3FC}'));
assertTrue(re.test('\u{1F446}\u{1F3FD}'));
assertTrue(re.test('\u{1F446}\u{1F3FE}'));
assertTrue(re.test('\u{1F446}\u{1F3FF}'));
assertTrue(re.test('\u{1F447}\u{1F3FB}'));
assertTrue(re.test('\u{1F447}\u{1F3FC}'));
assertTrue(re.test('\u{1F447}\u{1F3FD}'));
assertTrue(re.test('\u{1F447}\u{1F3FE}'));
assertTrue(re.test('\u{1F447}\u{1F3FF}'));
assertTrue(re.test('\u{1F448}\u{1F3FB}'));
assertTrue(re.test('\u{1F448}\u{1F3FC}'));
assertTrue(re.test('\u{1F448}\u{1F3FD}'));
assertTrue(re.test('\u{1F448}\u{1F3FE}'));
assertTrue(re.test('\u{1F448}\u{1F3FF}'));
assertTrue(re.test('\u{1F449}\u{1F3FB}'));
assertTrue(re.test('\u{1F449}\u{1F3FC}'));
assertTrue(re.test('\u{1F449}\u{1F3FD}'));
assertTrue(re.test('\u{1F449}\u{1F3FE}'));
assertTrue(re.test('\u{1F449}\u{1F3FF}'));
assertTrue(re.test('\u{1F44A}\u{1F3FB}'));
assertTrue(re.test('\u{1F44A}\u{1F3FC}'));
assertTrue(re.test('\u{1F44A}\u{1F3FD}'));
assertTrue(re.test('\u{1F44A}\u{1F3FE}'));
assertTrue(re.test('\u{1F44A}\u{1F3FF}'));
assertTrue(re.test('\u{1F44B}\u{1F3FB}'));
assertTrue(re.test('\u{1F44B}\u{1F3FC}'));
assertTrue(re.test('\u{1F44B}\u{1F3FD}'));
assertTrue(re.test('\u{1F44B}\u{1F3FE}'));
assertTrue(re.test('\u{1F44B}\u{1F3FF}'));
assertTrue(re.test('\u{1F44C}\u{1F3FB}'));
assertTrue(re.test('\u{1F44C}\u{1F3FC}'));
assertTrue(re.test('\u{1F44C}\u{1F3FD}'));
assertTrue(re.test('\u{1F44C}\u{1F3FE}'));
assertTrue(re.test('\u{1F44C}\u{1F3FF}'));
assertTrue(re.test('\u{1F44D}\u{1F3FB}'));
assertTrue(re.test('\u{1F44D}\u{1F3FC}'));
assertTrue(re.test('\u{1F44D}\u{1F3FD}'));
assertTrue(re.test('\u{1F44D}\u{1F3FE}'));
assertTrue(re.test('\u{1F44D}\u{1F3FF}'));
assertTrue(re.test('\u{1F44E}\u{1F3FB}'));
assertTrue(re.test('\u{1F44E}\u{1F3FC}'));
assertTrue(re.test('\u{1F44E}\u{1F3FD}'));
assertTrue(re.test('\u{1F44E}\u{1F3FE}'));
assertTrue(re.test('\u{1F44E}\u{1F3FF}'));
assertTrue(re.test('\u{1F44F}\u{1F3FB}'));
assertTrue(re.test('\u{1F44F}\u{1F3FC}'));
assertTrue(re.test('\u{1F44F}\u{1F3FD}'));
assertTrue(re.test('\u{1F44F}\u{1F3FE}'));
assertTrue(re.test('\u{1F44F}\u{1F3FF}'));
assertTrue(re.test('\u{1F450}\u{1F3FB}'));
assertTrue(re.test('\u{1F450}\u{1F3FC}'));
assertTrue(re.test('\u{1F450}\u{1F3FD}'));
assertTrue(re.test('\u{1F450}\u{1F3FE}'));
assertTrue(re.test('\u{1F450}\u{1F3FF}'));
assertTrue(re.test('\u{1F466}\u{1F3FB}'));
assertTrue(re.test('\u{1F466}\u{1F3FC}'));
assertTrue(re.test('\u{1F466}\u{1F3FD}'));
assertTrue(re.test('\u{1F466}\u{1F3FE}'));
assertTrue(re.test('\u{1F466}\u{1F3FF}'));
assertTrue(re.test('\u{1F467}\u{1F3FB}'));
assertTrue(re.test('\u{1F467}\u{1F3FC}'));
assertTrue(re.test('\u{1F467}\u{1F3FD}'));
assertTrue(re.test('\u{1F467}\u{1F3FE}'));
assertTrue(re.test('\u{1F467}\u{1F3FF}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}'));
assertTrue(re.test('\u{1F46E}\u{1F3FB}'));
assertTrue(re.test('\u{1F46E}\u{1F3FC}'));
assertTrue(re.test('\u{1F46E}\u{1F3FD}'));
assertTrue(re.test('\u{1F46E}\u{1F3FE}'));
assertTrue(re.test('\u{1F46E}\u{1F3FF}'));
assertTrue(re.test('\u{1F470}\u{1F3FB}'));
assertTrue(re.test('\u{1F470}\u{1F3FC}'));
assertTrue(re.test('\u{1F470}\u{1F3FD}'));
assertTrue(re.test('\u{1F470}\u{1F3FE}'));
assertTrue(re.test('\u{1F470}\u{1F3FF}'));
assertTrue(re.test('\u{1F471}\u{1F3FB}'));
assertTrue(re.test('\u{1F471}\u{1F3FC}'));
assertTrue(re.test('\u{1F471}\u{1F3FD}'));
assertTrue(re.test('\u{1F471}\u{1F3FE}'));
assertTrue(re.test('\u{1F471}\u{1F3FF}'));
assertTrue(re.test('\u{1F472}\u{1F3FB}'));
assertTrue(re.test('\u{1F472}\u{1F3FC}'));
assertTrue(re.test('\u{1F472}\u{1F3FD}'));
assertTrue(re.test('\u{1F472}\u{1F3FE}'));
assertTrue(re.test('\u{1F472}\u{1F3FF}'));
assertTrue(re.test('\u{1F473}\u{1F3FB}'));
assertTrue(re.test('\u{1F473}\u{1F3FC}'));
assertTrue(re.test('\u{1F473}\u{1F3FD}'));
assertTrue(re.test('\u{1F473}\u{1F3FE}'));
assertTrue(re.test('\u{1F473}\u{1F3FF}'));
assertTrue(re.test('\u{1F474}\u{1F3FB}'));
assertTrue(re.test('\u{1F474}\u{1F3FC}'));
assertTrue(re.test('\u{1F474}\u{1F3FD}'));
assertTrue(re.test('\u{1F474}\u{1F3FE}'));
assertTrue(re.test('\u{1F474}\u{1F3FF}'));
assertTrue(re.test('\u{1F475}\u{1F3FB}'));
assertTrue(re.test('\u{1F475}\u{1F3FC}'));
assertTrue(re.test('\u{1F475}\u{1F3FD}'));
assertTrue(re.test('\u{1F475}\u{1F3FE}'));
assertTrue(re.test('\u{1F475}\u{1F3FF}'));
assertTrue(re.test('\u{1F476}\u{1F3FB}'));
assertTrue(re.test('\u{1F476}\u{1F3FC}'));
assertTrue(re.test('\u{1F476}\u{1F3FD}'));
assertTrue(re.test('\u{1F476}\u{1F3FE}'));
assertTrue(re.test('\u{1F476}\u{1F3FF}'));
assertTrue(re.test('\u{1F477}\u{1F3FB}'));
assertTrue(re.test('\u{1F477}\u{1F3FC}'));
assertTrue(re.test('\u{1F477}\u{1F3FD}'));
assertTrue(re.test('\u{1F477}\u{1F3FE}'));
assertTrue(re.test('\u{1F477}\u{1F3FF}'));
assertTrue(re.test('\u{1F478}\u{1F3FB}'));
assertTrue(re.test('\u{1F478}\u{1F3FC}'));
assertTrue(re.test('\u{1F478}\u{1F3FD}'));
assertTrue(re.test('\u{1F478}\u{1F3FE}'));
assertTrue(re.test('\u{1F478}\u{1F3FF}'));
assertTrue(re.test('\u{1F47C}\u{1F3FB}'));
assertTrue(re.test('\u{1F47C}\u{1F3FC}'));
assertTrue(re.test('\u{1F47C}\u{1F3FD}'));
assertTrue(re.test('\u{1F47C}\u{1F3FE}'));
assertTrue(re.test('\u{1F47C}\u{1F3FF}'));
assertTrue(re.test('\u{1F481}\u{1F3FB}'));
assertTrue(re.test('\u{1F481}\u{1F3FC}'));
assertTrue(re.test('\u{1F481}\u{1F3FD}'));
assertTrue(re.test('\u{1F481}\u{1F3FE}'));
assertTrue(re.test('\u{1F481}\u{1F3FF}'));
assertTrue(re.test('\u{1F482}\u{1F3FB}'));
assertTrue(re.test('\u{1F482}\u{1F3FC}'));
assertTrue(re.test('\u{1F482}\u{1F3FD}'));
assertTrue(re.test('\u{1F482}\u{1F3FE}'));
assertTrue(re.test('\u{1F482}\u{1F3FF}'));
assertTrue(re.test('\u{1F483}\u{1F3FB}'));
assertTrue(re.test('\u{1F483}\u{1F3FC}'));
assertTrue(re.test('\u{1F483}\u{1F3FD}'));
assertTrue(re.test('\u{1F483}\u{1F3FE}'));
assertTrue(re.test('\u{1F483}\u{1F3FF}'));
assertTrue(re.test('\u{1F485}\u{1F3FB}'));
assertTrue(re.test('\u{1F485}\u{1F3FC}'));
assertTrue(re.test('\u{1F485}\u{1F3FD}'));
assertTrue(re.test('\u{1F485}\u{1F3FE}'));
assertTrue(re.test('\u{1F485}\u{1F3FF}'));
assertTrue(re.test('\u{1F486}\u{1F3FB}'));
assertTrue(re.test('\u{1F486}\u{1F3FC}'));
assertTrue(re.test('\u{1F486}\u{1F3FD}'));
assertTrue(re.test('\u{1F486}\u{1F3FE}'));
assertTrue(re.test('\u{1F486}\u{1F3FF}'));
assertTrue(re.test('\u{1F487}\u{1F3FB}'));
assertTrue(re.test('\u{1F487}\u{1F3FC}'));
assertTrue(re.test('\u{1F487}\u{1F3FD}'));
assertTrue(re.test('\u{1F487}\u{1F3FE}'));
assertTrue(re.test('\u{1F487}\u{1F3FF}'));
assertTrue(re.test('\u{1F4AA}\u{1F3FB}'));
assertTrue(re.test('\u{1F4AA}\u{1F3FC}'));
assertTrue(re.test('\u{1F4AA}\u{1F3FD}'));
assertTrue(re.test('\u{1F4AA}\u{1F3FE}'));
assertTrue(re.test('\u{1F4AA}\u{1F3FF}'));
assertTrue(re.test('\u{1F574}\u{1F3FB}'));
assertTrue(re.test('\u{1F574}\u{1F3FC}'));
assertTrue(re.test('\u{1F574}\u{1F3FD}'));
assertTrue(re.test('\u{1F574}\u{1F3FE}'));
assertTrue(re.test('\u{1F574}\u{1F3FF}'));
assertTrue(re.test('\u{1F575}\u{1F3FB}'));
assertTrue(re.test('\u{1F575}\u{1F3FC}'));
assertTrue(re.test('\u{1F575}\u{1F3FD}'));
assertTrue(re.test('\u{1F575}\u{1F3FE}'));
assertTrue(re.test('\u{1F575}\u{1F3FF}'));
assertTrue(re.test('\u{1F57A}\u{1F3FB}'));
assertTrue(re.test('\u{1F57A}\u{1F3FC}'));
assertTrue(re.test('\u{1F57A}\u{1F3FD}'));
assertTrue(re.test('\u{1F57A}\u{1F3FE}'));
assertTrue(re.test('\u{1F57A}\u{1F3FF}'));
assertTrue(re.test('\u{1F590}\u{1F3FB}'));
assertTrue(re.test('\u{1F590}\u{1F3FC}'));
assertTrue(re.test('\u{1F590}\u{1F3FD}'));
assertTrue(re.test('\u{1F590}\u{1F3FE}'));
assertTrue(re.test('\u{1F590}\u{1F3FF}'));
assertTrue(re.test('\u261D\u{1F3FC}'));
assertTrue(re.test('\u{1F595}\u{1F3FC}'));
assertTrue(re.test('\u{1F595}\u{1F3FD}'));
assertTrue(re.test('\u{1F595}\u{1F3FE}'));
assertTrue(re.test('\u{1F595}\u{1F3FF}'));
assertTrue(re.test('\u{1F596}\u{1F3FB}'));
assertTrue(re.test('\u{1F596}\u{1F3FC}'));
assertTrue(re.test('\u{1F596}\u{1F3FD}'));
assertTrue(re.test('\u{1F596}\u{1F3FE}'));
assertTrue(re.test('\u{1F596}\u{1F3FF}'));
assertTrue(re.test('\u{1F645}\u{1F3FB}'));
assertTrue(re.test('\u{1F645}\u{1F3FC}'));
assertTrue(re.test('\u{1F645}\u{1F3FD}'));
assertTrue(re.test('\u{1F645}\u{1F3FE}'));
assertTrue(re.test('\u{1F645}\u{1F3FF}'));
assertTrue(re.test('\u{1F646}\u{1F3FB}'));
assertTrue(re.test('\u{1F646}\u{1F3FC}'));
assertTrue(re.test('\u{1F646}\u{1F3FD}'));
assertTrue(re.test('\u{1F646}\u{1F3FE}'));
assertTrue(re.test('\u{1F646}\u{1F3FF}'));
assertTrue(re.test('\u{1F647}\u{1F3FB}'));
assertTrue(re.test('\u{1F647}\u{1F3FC}'));
assertTrue(re.test('\u{1F647}\u{1F3FD}'));
assertTrue(re.test('\u{1F647}\u{1F3FE}'));
assertTrue(re.test('\u{1F647}\u{1F3FF}'));
assertTrue(re.test('\u{1F64B}\u{1F3FB}'));
assertTrue(re.test('\u{1F64B}\u{1F3FC}'));
assertTrue(re.test('\u{1F64B}\u{1F3FD}'));
assertTrue(re.test('\u{1F64B}\u{1F3FE}'));
assertTrue(re.test('\u{1F64B}\u{1F3FF}'));
assertTrue(re.test('\u{1F64C}\u{1F3FB}'));
assertTrue(re.test('\u{1F64C}\u{1F3FC}'));
assertTrue(re.test('\u{1F64C}\u{1F3FD}'));
assertTrue(re.test('\u{1F64C}\u{1F3FE}'));
assertTrue(re.test('\u{1F64C}\u{1F3FF}'));
assertTrue(re.test('\u{1F64D}\u{1F3FB}'));
assertTrue(re.test('\u{1F64D}\u{1F3FC}'));
assertTrue(re.test('\u{1F64D}\u{1F3FD}'));
assertTrue(re.test('\u{1F64D}\u{1F3FE}'));
assertTrue(re.test('\u{1F64D}\u{1F3FF}'));
assertTrue(re.test('\u{1F64E}\u{1F3FB}'));
assertTrue(re.test('\u{1F64E}\u{1F3FC}'));
assertTrue(re.test('\u{1F64E}\u{1F3FD}'));
assertTrue(re.test('\u{1F64E}\u{1F3FE}'));
assertTrue(re.test('\u{1F64E}\u{1F3FF}'));
assertTrue(re.test('\u{1F64F}\u{1F3FB}'));
assertTrue(re.test('\u{1F64F}\u{1F3FC}'));
assertTrue(re.test('\u{1F64F}\u{1F3FD}'));
assertTrue(re.test('\u{1F64F}\u{1F3FE}'));
assertTrue(re.test('\u{1F64F}\u{1F3FF}'));
assertTrue(re.test('\u{1F6A3}\u{1F3FB}'));
assertTrue(re.test('\u{1F6A3}\u{1F3FC}'));
assertTrue(re.test('\u{1F6A3}\u{1F3FD}'));
assertTrue(re.test('\u{1F6A3}\u{1F3FE}'));
assertTrue(re.test('\u{1F6A3}\u{1F3FF}'));
assertTrue(re.test('\u{1F6B4}\u{1F3FB}'));
assertTrue(re.test('\u{1F6B4}\u{1F3FC}'));
assertTrue(re.test('\u{1F6B4}\u{1F3FD}'));
assertTrue(re.test('\u{1F6B4}\u{1F3FE}'));
assertTrue(re.test('\u{1F6B4}\u{1F3FF}'));
assertTrue(re.test('\u{1F6B5}\u{1F3FB}'));
assertTrue(re.test('\u{1F6B5}\u{1F3FC}'));
assertTrue(re.test('\u{1F6B5}\u{1F3FD}'));
assertTrue(re.test('\u{1F6B5}\u{1F3FE}'));
assertTrue(re.test('\u{1F6B5}\u{1F3FF}'));
assertTrue(re.test('\u{1F6B6}\u{1F3FB}'));
assertTrue(re.test('\u{1F6B6}\u{1F3FC}'));
assertTrue(re.test('\u{1F6B6}\u{1F3FD}'));
assertTrue(re.test('\u{1F6B6}\u{1F3FE}'));
assertTrue(re.test('\u{1F6B6}\u{1F3FF}'));
assertTrue(re.test('\u{1F6C0}\u{1F3FB}'));
assertTrue(re.test('\u{1F6C0}\u{1F3FC}'));
assertTrue(re.test('\u{1F6C0}\u{1F3FD}'));
assertTrue(re.test('\u{1F6C0}\u{1F3FE}'));
assertTrue(re.test('\u{1F6C0}\u{1F3FF}'));
assertTrue(re.test('\u{1F6CC}\u{1F3FB}'));
assertTrue(re.test('\u{1F6CC}\u{1F3FC}'));
assertTrue(re.test('\u{1F6CC}\u{1F3FD}'));
assertTrue(re.test('\u{1F6CC}\u{1F3FE}'));
assertTrue(re.test('\u{1F6CC}\u{1F3FF}'));
assertTrue(re.test('\u{1F918}\u{1F3FB}'));
assertTrue(re.test('\u{1F918}\u{1F3FC}'));
assertTrue(re.test('\u{1F918}\u{1F3FD}'));
assertTrue(re.test('\u{1F918}\u{1F3FE}'));
assertTrue(re.test('\u{1F918}\u{1F3FF}'));
assertTrue(re.test('\u{1F919}\u{1F3FB}'));
assertTrue(re.test('\u{1F919}\u{1F3FC}'));
assertTrue(re.test('\u{1F919}\u{1F3FD}'));
assertTrue(re.test('\u{1F919}\u{1F3FE}'));
assertTrue(re.test('\u{1F919}\u{1F3FF}'));
assertTrue(re.test('\u{1F91A}\u{1F3FB}'));
assertTrue(re.test('\u{1F91A}\u{1F3FC}'));
assertTrue(re.test('\u{1F91A}\u{1F3FD}'));
assertTrue(re.test('\u{1F91A}\u{1F3FE}'));
assertTrue(re.test('\u{1F91A}\u{1F3FF}'));
assertTrue(re.test('\u{1F91B}\u{1F3FB}'));
assertTrue(re.test('\u{1F91B}\u{1F3FC}'));
assertTrue(re.test('\u{1F91B}\u{1F3FD}'));
assertTrue(re.test('\u{1F91B}\u{1F3FE}'));
assertTrue(re.test('\u{1F91B}\u{1F3FF}'));
assertTrue(re.test('\u{1F91C}\u{1F3FB}'));
assertTrue(re.test('\u{1F91C}\u{1F3FC}'));
assertTrue(re.test('\u{1F91C}\u{1F3FD}'));
assertTrue(re.test('\u{1F91C}\u{1F3FE}'));
assertTrue(re.test('\u{1F91C}\u{1F3FF}'));
assertTrue(re.test('\u{1F91E}\u{1F3FB}'));
assertTrue(re.test('\u{1F91E}\u{1F3FC}'));
assertTrue(re.test('\u{1F91E}\u{1F3FD}'));
assertTrue(re.test('\u{1F91E}\u{1F3FE}'));
assertTrue(re.test('\u{1F91E}\u{1F3FF}'));
assertTrue(re.test('\u{1F91F}\u{1F3FB}'));
assertTrue(re.test('\u{1F91F}\u{1F3FC}'));
assertTrue(re.test('\u{1F91F}\u{1F3FD}'));
assertTrue(re.test('\u{1F91F}\u{1F3FE}'));
assertTrue(re.test('\u{1F91F}\u{1F3FF}'));
assertTrue(re.test('\u{1F926}\u{1F3FB}'));
assertTrue(re.test('\u{1F926}\u{1F3FC}'));
assertTrue(re.test('\u{1F926}\u{1F3FD}'));
assertTrue(re.test('\u{1F926}\u{1F3FE}'));
assertTrue(re.test('\u{1F926}\u{1F3FF}'));
assertTrue(re.test('\u{1F930}\u{1F3FB}'));
assertTrue(re.test('\u{1F930}\u{1F3FC}'));
assertTrue(re.test('\u{1F930}\u{1F3FD}'));
assertTrue(re.test('\u{1F930}\u{1F3FE}'));
assertTrue(re.test('\u{1F930}\u{1F3FF}'));
assertTrue(re.test('\u{1F931}\u{1F3FB}'));
assertTrue(re.test('\u{1F931}\u{1F3FC}'));
assertTrue(re.test('\u{1F931}\u{1F3FD}'));
assertTrue(re.test('\u{1F931}\u{1F3FE}'));
assertTrue(re.test('\u{1F931}\u{1F3FF}'));
assertTrue(re.test('\u{1F932}\u{1F3FB}'));
assertTrue(re.test('\u{1F932}\u{1F3FC}'));
assertTrue(re.test('\u{1F932}\u{1F3FD}'));
assertTrue(re.test('\u{1F932}\u{1F3FE}'));
assertTrue(re.test('\u{1F932}\u{1F3FF}'));
assertTrue(re.test('\u{1F933}\u{1F3FB}'));
assertTrue(re.test('\u{1F933}\u{1F3FC}'));
assertTrue(re.test('\u{1F933}\u{1F3FD}'));
assertTrue(re.test('\u{1F933}\u{1F3FE}'));
assertTrue(re.test('\u{1F933}\u{1F3FF}'));
assertTrue(re.test('\u{1F934}\u{1F3FB}'));
assertTrue(re.test('\u{1F934}\u{1F3FC}'));
assertTrue(re.test('\u{1F934}\u{1F3FD}'));
assertTrue(re.test('\u{1F934}\u{1F3FE}'));
assertTrue(re.test('\u{1F934}\u{1F3FF}'));
assertTrue(re.test('\u{1F935}\u{1F3FB}'));
assertTrue(re.test('\u{1F935}\u{1F3FC}'));
assertTrue(re.test('\u{1F935}\u{1F3FD}'));
assertTrue(re.test('\u{1F935}\u{1F3FE}'));
assertTrue(re.test('\u{1F935}\u{1F3FF}'));
assertTrue(re.test('\u{1F936}\u{1F3FB}'));
assertTrue(re.test('\u{1F936}\u{1F3FC}'));
assertTrue(re.test('\u{1F936}\u{1F3FD}'));
assertTrue(re.test('\u{1F936}\u{1F3FE}'));
assertTrue(re.test('\u{1F936}\u{1F3FF}'));
assertTrue(re.test('\u{1F937}\u{1F3FB}'));
assertTrue(re.test('\u{1F937}\u{1F3FC}'));
assertTrue(re.test('\u{1F937}\u{1F3FD}'));
assertTrue(re.test('\u{1F937}\u{1F3FE}'));
assertTrue(re.test('\u{1F937}\u{1F3FF}'));
assertTrue(re.test('\u{1F938}\u{1F3FB}'));
assertTrue(re.test('\u{1F938}\u{1F3FC}'));
assertTrue(re.test('\u{1F938}\u{1F3FD}'));
assertTrue(re.test('\u{1F938}\u{1F3FE}'));
assertTrue(re.test('\u{1F938}\u{1F3FF}'));
assertTrue(re.test('\u{1F939}\u{1F3FB}'));
assertTrue(re.test('\u{1F939}\u{1F3FC}'));
assertTrue(re.test('\u{1F939}\u{1F3FD}'));
assertTrue(re.test('\u{1F939}\u{1F3FE}'));
assertTrue(re.test('\u{1F939}\u{1F3FF}'));
assertTrue(re.test('\u{1F93D}\u{1F3FB}'));
assertTrue(re.test('\u{1F93D}\u{1F3FC}'));
assertTrue(re.test('\u{1F93D}\u{1F3FD}'));
assertTrue(re.test('\u{1F93D}\u{1F3FE}'));
assertTrue(re.test('\u{1F93D}\u{1F3FF}'));
assertTrue(re.test('\u{1F93E}\u{1F3FB}'));
assertTrue(re.test('\u{1F93E}\u{1F3FC}'));
assertTrue(re.test('\u{1F93E}\u{1F3FD}'));
assertTrue(re.test('\u{1F93E}\u{1F3FE}'));
assertTrue(re.test('\u{1F93E}\u{1F3FF}'));
assertTrue(re.test('\u{1F9B5}\u{1F3FB}'));
assertTrue(re.test('\u{1F9B5}\u{1F3FC}'));
assertTrue(re.test('\u{1F9B5}\u{1F3FD}'));
assertTrue(re.test('\u{1F9B5}\u{1F3FE}'));
assertTrue(re.test('\u{1F9B5}\u{1F3FF}'));
assertTrue(re.test('\u{1F9B6}\u{1F3FB}'));
assertTrue(re.test('\u{1F9B6}\u{1F3FC}'));
assertTrue(re.test('\u{1F9B6}\u{1F3FD}'));
assertTrue(re.test('\u{1F9B6}\u{1F3FE}'));
assertTrue(re.test('\u{1F9B6}\u{1F3FF}'));
assertTrue(re.test('\u{1F9B8}\u{1F3FB}'));
assertTrue(re.test('\u{1F9B8}\u{1F3FC}'));
assertTrue(re.test('\u{1F9B8}\u{1F3FD}'));
assertTrue(re.test('\u{1F9B8}\u{1F3FE}'));
assertTrue(re.test('\u{1F9B8}\u{1F3FF}'));
assertTrue(re.test('\u{1F9B9}\u{1F3FB}'));
assertTrue(re.test('\u{1F9B9}\u{1F3FC}'));
assertTrue(re.test('\u{1F9B9}\u{1F3FD}'));
assertTrue(re.test('\u{1F9B9}\u{1F3FE}'));
assertTrue(re.test('\u{1F9B9}\u{1F3FF}'));
assertTrue(re.test('\u{1F9D1}\u{1F3FB}'));
assertTrue(re.test('\u{1F9D1}\u{1F3FC}'));
assertTrue(re.test('\u{1F9D1}\u{1F3FD}'));
assertTrue(re.test('\u{1F9D1}\u{1F3FE}'));
assertTrue(re.test('\u{1F9D1}\u{1F3FF}'));
assertTrue(re.test('\u{1F9D2}\u{1F3FB}'));
assertTrue(re.test('\u{1F9D2}\u{1F3FC}'));
assertTrue(re.test('\u{1F9D2}\u{1F3FD}'));
assertTrue(re.test('\u{1F9D2}\u{1F3FE}'));
assertTrue(re.test('\u{1F9D2}\u{1F3FF}'));
assertTrue(re.test('\u{1F9D3}\u{1F3FB}'));
assertTrue(re.test('\u{1F9D3}\u{1F3FC}'));
assertTrue(re.test('\u{1F9D3}\u{1F3FD}'));
assertTrue(re.test('\u{1F9D3}\u{1F3FE}'));
assertTrue(re.test('\u{1F9D3}\u{1F3FF}'));
assertTrue(re.test('\u{1F9D4}\u{1F3FB}'));
assertTrue(re.test('\u{1F9D4}\u{1F3FC}'));
assertTrue(re.test('\u{1F9D4}\u{1F3FD}'));
assertTrue(re.test('\u{1F9D4}\u{1F3FE}'));
assertTrue(re.test('\u{1F9D4}\u{1F3FF}'));
assertTrue(re.test('\u{1F9D5}\u{1F3FB}'));
assertTrue(re.test('\u{1F9D5}\u{1F3FC}'));
assertTrue(re.test('\u{1F9D5}\u{1F3FD}'));
assertTrue(re.test('\u{1F9D5}\u{1F3FE}'));
assertTrue(re.test('\u{1F9D5}\u{1F3FF}'));
assertTrue(re.test('\u{1F9D6}\u{1F3FB}'));
assertTrue(re.test('\u{1F9D6}\u{1F3FC}'));
assertTrue(re.test('\u{1F9D6}\u{1F3FD}'));
assertTrue(re.test('\u{1F9D6}\u{1F3FE}'));
assertTrue(re.test('\u{1F9D6}\u{1F3FF}'));
assertTrue(re.test('\u{1F9D7}\u{1F3FB}'));
assertTrue(re.test('\u{1F9D7}\u{1F3FC}'));
assertTrue(re.test('\u{1F9D7}\u{1F3FD}'));
assertTrue(re.test('\u{1F9D7}\u{1F3FE}'));
assertTrue(re.test('\u{1F9D7}\u{1F3FF}'));
assertTrue(re.test('\u{1F9D8}\u{1F3FB}'));
assertTrue(re.test('\u{1F9D8}\u{1F3FC}'));
assertTrue(re.test('\u{1F9D8}\u{1F3FD}'));
assertTrue(re.test('\u{1F9D8}\u{1F3FE}'));
assertTrue(re.test('\u{1F9D8}\u{1F3FF}'));
assertTrue(re.test('\u{1F9D9}\u{1F3FB}'));
assertTrue(re.test('\u{1F9D9}\u{1F3FC}'));
assertTrue(re.test('\u{1F9D9}\u{1F3FD}'));
assertTrue(re.test('\u{1F9D9}\u{1F3FE}'));
assertTrue(re.test('\u{1F9D9}\u{1F3FF}'));
assertTrue(re.test('\u{1F9DA}\u{1F3FB}'));
assertTrue(re.test('\u{1F9DA}\u{1F3FC}'));
assertTrue(re.test('\u{1F9DA}\u{1F3FD}'));
assertTrue(re.test('\u{1F9DA}\u{1F3FE}'));
assertTrue(re.test('\u{1F9DA}\u{1F3FF}'));
assertTrue(re.test('\u{1F9DB}\u{1F3FB}'));
assertTrue(re.test('\u{1F9DB}\u{1F3FC}'));
assertTrue(re.test('\u{1F9DB}\u{1F3FD}'));
assertTrue(re.test('\u{1F9DB}\u{1F3FE}'));
assertTrue(re.test('\u{1F9DB}\u{1F3FF}'));
assertTrue(re.test('\u{1F9DC}\u{1F3FB}'));
assertTrue(re.test('\u{1F9DC}\u{1F3FC}'));
assertTrue(re.test('\u{1F9DC}\u{1F3FD}'));
assertTrue(re.test('\u{1F9DC}\u{1F3FE}'));
assertTrue(re.test('\u{1F9DC}\u{1F3FF}'));
assertTrue(re.test('\u{1F9DD}\u{1F3FB}'));
assertTrue(re.test('\u{1F9DD}\u{1F3FC}'));
assertTrue(re.test('\u{1F9DD}\u{1F3FD}'));
assertTrue(re.test('\u{1F9DD}\u{1F3FE}'));
assertTrue(re.test('\u{1F595}\u{1F3FB}'));
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --harmony-regexp-sequence
const re = /\p{Emoji_Tag_Sequence}/u;
assertTrue(re.test('\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}'));
assertTrue(re.test('\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}'));
assertTrue(re.test('\u{1F3F4}\u{E0067}\u{E0062}\u{E0077}\u{E006C}\u{E0073}\u{E007F}'));
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --harmony-regexp-sequence
const re = /\p{Emoji_ZWJ_Sequence}/u;
assertTrue(re.test('\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F468}'));
assertTrue(re.test('\u{1F441}\uFE0F\u200D\u{1F5E8}\uFE0F'));
assertTrue(re.test('\u{1F468}\u200D\u{1F466}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F466}\u200D\u{1F466}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F467}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F467}\u200D\u{1F466}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F467}\u200D\u{1F467}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F468}\u200D\u{1F466}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F468}\u200D\u{1F466}\u200D\u{1F466}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F468}\u200D\u{1F467}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F468}\u200D\u{1F467}\u200D\u{1F466}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F468}\u200D\u{1F467}\u200D\u{1F467}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F469}\u200D\u{1F466}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F469}\u200D\u{1F466}\u200D\u{1F466}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F469}\u200D\u{1F467}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F466}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F467}'));
assertTrue(re.test('\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F468}'));
assertTrue(re.test('\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F469}'));
assertTrue(re.test('\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}'));
assertTrue(re.test('\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F466}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F466}\u200D\u{1F466}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F467}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F467}\u200D\u{1F466}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F467}\u200D\u{1F467}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F469}\u200D\u{1F466}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F469}\u200D\u{1F466}\u200D\u{1F466}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F469}\u200D\u{1F467}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F466}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F467}'));
assertTrue(re.test('\u{1F468}\u200D\u2695\uFE0F'));
assertTrue(re.test('\u{1F468}\u200D\u2696\uFE0F'));
assertTrue(re.test('\u{1F468}\u200D\u2708\uFE0F'));
assertTrue(re.test('\u{1F468}\u200D\u{1F33E}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F373}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F393}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F3A4}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F3A8}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F3EB}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F3ED}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F4BB}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F4BC}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F527}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F52C}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F680}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F692}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F9B0}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F9B1}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F9B2}'));
assertTrue(re.test('\u{1F468}\u200D\u{1F9B3}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u2695\uFE0F'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u2696\uFE0F'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u2708\uFE0F'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F33E}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F373}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F393}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F3A4}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F3A8}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F3EB}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F3ED}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F4BB}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F4BC}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F527}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F52C}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F680}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F692}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F9B0}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F9B1}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F9B2}'));
assertTrue(re.test('\u{1F468}\u{1F3FB}\u200D\u{1F9B3}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u2695\uFE0F'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u2696\uFE0F'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u2708\uFE0F'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F33E}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F373}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F393}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F3A4}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F3A8}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F3EB}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F3ED}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F4BB}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F4BC}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F527}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F52C}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F680}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F692}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F9B0}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F9B1}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F9B2}'));
assertTrue(re.test('\u{1F468}\u{1F3FC}\u200D\u{1F9B3}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u2695\uFE0F'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u2696\uFE0F'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u2708\uFE0F'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F33E}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F373}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F393}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F3A4}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F3A8}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F3EB}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F3ED}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F4BB}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F4BC}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F527}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F52C}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F680}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F692}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F9B0}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F9B1}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F9B2}'));
assertTrue(re.test('\u{1F468}\u{1F3FD}\u200D\u{1F9B3}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u2695\uFE0F'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u2696\uFE0F'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u2708\uFE0F'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F33E}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F373}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F393}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F3A4}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F3A8}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F3EB}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F3ED}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F4BB}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F4BC}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F527}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F52C}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F680}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F692}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F9B0}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F9B1}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F9B2}'));
assertTrue(re.test('\u{1F468}\u{1F3FE}\u200D\u{1F9B3}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u2695\uFE0F'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u2696\uFE0F'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u2708\uFE0F'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F33E}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F373}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F393}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F3A4}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F3A8}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F3EB}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F3ED}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F4BB}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F4BC}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F527}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F52C}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F680}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F692}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F9B0}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F9B1}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F9B2}'));
assertTrue(re.test('\u{1F468}\u{1F3FF}\u200D\u{1F9B3}'));
assertTrue(re.test('\u{1F469}\u200D\u2695\uFE0F'));
assertTrue(re.test('\u{1F469}\u200D\u2696\uFE0F'));
assertTrue(re.test('\u{1F469}\u200D\u2708\uFE0F'));
assertTrue(re.test('\u{1F469}\u200D\u{1F33E}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F373}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F393}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F3A4}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F3A8}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F3EB}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F3ED}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F4BB}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F4BC}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F527}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F52C}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F680}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F692}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F9B0}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F9B1}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F9B2}'));
assertTrue(re.test('\u{1F469}\u200D\u{1F9B3}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u2695\uFE0F'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u2696\uFE0F'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u2708\uFE0F'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F33E}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F373}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F393}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F3A4}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F3A8}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F3EB}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F3ED}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F4BB}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F4BC}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F527}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F52C}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F680}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F692}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F9B0}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F9B1}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F9B2}'));
assertTrue(re.test('\u{1F469}\u{1F3FB}\u200D\u{1F9B3}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u2695\uFE0F'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u2696\uFE0F'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u2708\uFE0F'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F33E}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F373}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F393}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F3A4}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F3A8}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F3EB}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F3ED}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F4BB}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F4BC}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F527}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F52C}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F680}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F692}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F9B0}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F9B1}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F9B2}'));
assertTrue(re.test('\u{1F469}\u{1F3FC}\u200D\u{1F9B3}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u2695\uFE0F'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u2696\uFE0F'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u2708\uFE0F'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F33E}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F373}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F393}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F3A4}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F3A8}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F3EB}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F3ED}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F4BB}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F4BC}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F527}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F52C}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F680}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F692}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F9B0}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F9B1}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F9B2}'));
assertTrue(re.test('\u{1F469}\u{1F3FD}\u200D\u{1F9B3}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u2695\uFE0F'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u2696\uFE0F'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u2708\uFE0F'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F33E}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F373}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F393}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F3A4}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F3A8}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F3EB}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F3ED}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F4BB}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F4BC}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F527}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F52C}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F680}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F692}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F9B0}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F9B1}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F9B2}'));
assertTrue(re.test('\u{1F469}\u{1F3FE}\u200D\u{1F9B3}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u2695\uFE0F'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u2696\uFE0F'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u2708\uFE0F'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F33E}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F373}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F393}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F3A4}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F3A8}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F3EB}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F3ED}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F4BB}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F4BC}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F527}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F52C}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F680}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F692}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F9B0}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F9B1}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F9B2}'));
assertTrue(re.test('\u{1F469}\u{1F3FF}\u200D\u{1F9B3}'));
assertTrue(re.test('\u{1F46E}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F46E}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F46E}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F46E}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F46E}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F46E}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F46E}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F46E}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F46E}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F46E}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F46E}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F46E}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F471}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F471}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F471}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F471}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F471}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F471}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F471}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F471}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F471}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F471}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F471}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F471}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F473}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F473}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F473}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F473}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F473}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F473}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F473}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F473}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F473}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F473}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F473}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F473}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F477}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F477}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F477}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F477}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F477}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F477}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F477}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F477}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F477}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F477}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F477}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F477}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F482}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F482}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F482}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F482}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F482}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F482}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F482}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F482}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F482}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F482}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F482}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F482}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F575}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F575}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F575}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F575}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F575}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F575}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F575}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F575}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F575}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F575}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F575}\uFE0F\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F575}\uFE0F\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D9}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D9}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D9}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D9}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D9}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D9}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D9}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D9}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D9}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D9}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D9}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D9}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DA}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DA}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DA}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DA}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DA}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DA}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DA}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DA}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DA}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DA}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DA}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DA}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DB}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DB}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DB}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DB}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DB}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DB}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DB}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DB}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DB}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DB}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DC}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DC}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DC}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DC}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DC}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DC}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}'));
assertTrue(re.test('\u{1F9DC}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DC}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DC}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DD}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DD}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DD}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DD}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DD}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DD}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DD}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DD}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DD}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DD}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9DF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9DF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u26F9\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u26F9\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u26F9\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u26F9\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u26F9\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u26F9\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u26F9\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u26F9\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u26F9\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u26F9\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u26F9\uFE0F\u200D\u2640\uFE0F'));
assertTrue(re.test('\u26F9\uFE0F\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3C3}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3C3}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3C3}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3C3}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3C3}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3C3}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3C3}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3C3}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3C3}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3C3}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3C3}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3C3}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3C4}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3C4}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3C4}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3C4}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3C4}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3C4}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3C4}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3C4}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3C4}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3C4}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3C4}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3C4}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CA}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CA}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CA}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CA}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CA}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CA}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CA}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CA}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CA}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CA}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CA}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CA}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CB}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CB}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CB}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CB}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CB}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CB}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CB}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CB}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CB}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CB}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CB}\uFE0F\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CB}\uFE0F\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CC}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CC}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CC}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CC}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CC}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CC}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CC}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CC}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CC}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CC}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3CC}\uFE0F\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F3CC}\uFE0F\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F46F}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F46F}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F486}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F486}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F486}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F486}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F486}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F486}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F486}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F486}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F486}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F486}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F486}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F486}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F487}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F487}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F487}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F487}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F487}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F487}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F487}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F487}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F487}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F487}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F487}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F487}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6A3}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6A3}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6A3}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6A3}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6A3}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6A3}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6A3}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6A3}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6A3}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6A3}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6A3}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6A3}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B4}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B4}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B4}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B4}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B4}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B4}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B4}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B4}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B4}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B4}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B4}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B4}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B5}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B5}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B5}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B5}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B5}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B5}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B5}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B5}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B5}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B5}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B5}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B5}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B6}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B6}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B6}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B6}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B6}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B6}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B6}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B6}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B6}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B6}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F6B6}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F6B6}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F938}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F938}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F938}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F938}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F938}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F938}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F938}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F938}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F938}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F938}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F938}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F938}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F939}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F939}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F939}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F939}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F939}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F939}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F939}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F939}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F939}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F939}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F939}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F939}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F93C}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F93C}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F93D}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F93D}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F93D}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F93D}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F93D}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F93D}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F93D}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F93D}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F93D}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F93D}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F93D}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F93D}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F93E}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F93E}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F93E}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F93E}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F93E}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F93E}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F93E}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F93E}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F93E}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F93E}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F93E}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F93E}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D6}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D6}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D6}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D6}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D6}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D6}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D6}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D6}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D6}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D6}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D6}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D6}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D7}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D7}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D7}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D7}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D7}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D7}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D7}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D7}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D7}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D7}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D7}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D7}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D8}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D8}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D8}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D8}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D8}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D8}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D8}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D8}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D8}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D8}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9D8}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9D8}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F481}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F481}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F481}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F481}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F481}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F481}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F481}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F481}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F481}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F481}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F481}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F481}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F645}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F645}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F645}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F645}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F645}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F645}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F645}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F645}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F645}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F645}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F645}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F645}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F646}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F646}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F646}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F646}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F646}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F646}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F646}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F646}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F646}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F646}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F646}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F646}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F647}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F647}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F647}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F647}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F647}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F647}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F647}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F647}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F647}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F647}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F647}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F647}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64B}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64B}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64B}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64B}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64B}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64B}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64B}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64B}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64B}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64B}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64B}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64B}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64D}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64D}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64D}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64D}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64D}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64D}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64D}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64D}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64D}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64D}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64D}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64D}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64E}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64E}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64E}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64E}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64E}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64E}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64E}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64E}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64E}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64E}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F64E}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F64E}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F926}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F926}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F926}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F926}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F926}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F926}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F926}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F926}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F926}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F926}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F926}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F926}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F937}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F937}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F937}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F937}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F937}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F937}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F937}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F937}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F937}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F937}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F937}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F937}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9B8}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9B8}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9B8}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9B8}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9B8}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9B8}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9B8}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9B8}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9B8}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9B8}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9B8}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9B8}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9B9}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9B9}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9B9}\u{1F3FB}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9B9}\u{1F3FB}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9B9}\u{1F3FC}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9B9}\u{1F3FC}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9B9}\u{1F3FD}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9B9}\u{1F3FD}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9B9}\u{1F3FE}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9B9}\u{1F3FE}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F9B9}\u{1F3FF}\u200D\u2640\uFE0F'));
assertTrue(re.test('\u{1F9B9}\u{1F3FF}\u200D\u2642\uFE0F'));
assertTrue(re.test('\u{1F3F3}\uFE0F\u200D\u{1F308}'));
assertTrue(re.test('\u{1F3F4}\u200D\u2620\uFE0F'));
assertTrue(re.test('\u{1F9DC}\u{1F3FE}\u200D\u2640\uFE0F'));
......@@ -34,5 +34,3 @@ assertThrows("/\\p{In}/u");
assertThrows("/\\pI/u");
assertThrows("/\\p{I}/u");
assertThrows("/\\p{CJK}/u");
assertThrows("/\\p{}/u");
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --harmony-regexp-sequence
// Normal usage.
assertDoesNotThrow("/\\p{Emoji_Flag_Sequence}/u");
assertTrue(/\p{Emoji_Flag_Sequence}/u.test("\u{1F1E9}\u{1F1EA}"));
assertDoesNotThrow("/\\p{Emoji_Keycap_Sequence}/u");
assertTrue(/\p{Emoji_Keycap_Sequence}/u.test("\u0023\ufe0f\u20e3"));
assertDoesNotThrow("/\\p{Emoji_Keycap_Sequence}/u");
assertFalse(/\p{Emoji_Keycap_Sequence}/u.test("\u0022\ufe0f\u20e3"));
assertDoesNotThrow("/\\p{Emoji_Modifier_Sequence}/u");
assertTrue(/\p{Emoji_Modifier_Sequence}/u.test("\u26f9\u{1f3ff}"));
assertDoesNotThrow("/\\p{Emoji_ZWJ_Sequence}/u");
assertTrue(/\p{Emoji_ZWJ_Sequence}/u.test("\u{1F468}\u{200D}\u{1F467}"));
// Without unicode flag.
assertDoesNotThrow("/\\p{Emoji_Flag_Sequence}/");
assertFalse(/\p{Emoji_Flag_Sequence}/.test("\u{1F1E9}\u{1F1EA}"));
assertTrue(/\p{Emoji_Flag_Sequence}/.test("\\p{Emoji_Flag_Sequence}"));
// Negated and/or inside a character class.
assertThrows("/\\P{Emoji_Flag_Sequence}/u");
assertThrows("/[\\p{Emoji_Flag_Sequence}]/u");
assertThrows("/[\\P{Emoji_Flag_Sequence}]/u");
assertThrows("/[\\w\\p{Emoji_Flag_Sequence}]/u");
assertThrows("/[\\w\\P{Emoji_Flag_Sequence}]/u");
// Two regional indicators, but not a country.
assertFalse(/\p{Emoji_Flag_Sequence}/u.test("\u{1F1E6}\u{1F1E6}"));
// ZWJ sequence as in two ZWJ elements joined by a ZWJ, but not in the list.
assertFalse(/\p{Emoji_ZWJ_Sequence}/u.test("\u{1F467}\u{200D}\u{1F468}"));
// More complex regexp
assertEquals(
["country flag: \u{1F1E6}\u{1F1F9}"],
/Country Flag: \p{Emoji_Flag_Sequence}/iu.exec(
"this is an example of a country flag: \u{1F1E6}\u{1F1F9} is Austra"));
assertEquals(
["country flag: \u{1F1E6}\u{1F1F9}", "\u{1F1E6}\u{1F1F9}"],
/Country Flag: (\p{Emoji_Flag_Sequence})/iu.exec(
"this is an example of a country flag: \u{1F1E6}\u{1F1F9} is Austra"));
assertEquals(
["country flag: \u{1F1E6}\u{1F1F9}"],
/Country Flag: ..(?<=\p{Emoji_Flag_Sequence})/iu.exec(
"this is an example of a country flag: \u{1F1E6}\u{1F1F9} is Austra"));
assertEquals(
["flag: \u{1F1E6}\u{1F1F9}", "\u{1F1E6}\u{1F1F9}"],
/Flag: ..(?<=(\p{Emoji_Flag_Sequence})|\p{Emoji_Keycap_Sequence})/iu.exec(
"this is an example of a country flag: \u{1F1E6}\u{1F1F9} is Austra"));
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment