PASTEBIN
| #1 paste tool since 2002
create new paste
tools
api
archive
faq
PASTEBIN
create new paste
trending pastes
sign up
login
my alerts
my settings
my profile
Don't like ads?
PRO users
don't see any ads ;-)
Public Pastes
Untitled
9 sec ago
Untitled
11 sec ago
Untitled
15 sec ago
Untitled
JavaScript | 21 sec ago
Untitled
15 sec ago
Untitled
15 sec ago
Untitled
17 sec ago
Untitled
21 sec ago
Jeremie Pelletier
By: a guest on
Oct 11th, 2009
| syntax:
D
| size: 73.69 KB | hits: 417 | expires: Never
download
|
raw
|
embed
|
report abuse
|
print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
/**
Unicode Character Types
*/
module
std.
uni
;
import
core.
stdc
.
stdint
;
import
core.
stdc
.
stdio
;
import
std.
ctype
;
// this really needs pure functions that return bools
class
UCharException
:
Exception
{
this
(
string msg
,
dchar
c
)
{
char
[
255
]
buf
=
void
;
uint
len
=
snprintf
(
buf.
ptr
,
buf.
length
,
"%*s:
\\
u%04X
\\
u%04X"
,
msg
,
c
&
0xFFFF
,
(
c
>>
15
)
&
0xFFFF
)
;
super
(
buf
[
0
..
len
]
.
idup
)
;
}
}
// Lu, Ll, Lt, Lm, Lo
/*pure*/
bool
isUniAlpha
(
dchar
code
)
{
if
(
code
<=
0x7F
)
return
cast
(
bool
)
isalpha
(
code
)
;
switch
(
getType
(
code
)
)
{
case
CharType.
UPPERCASE_LETTER
:
case
CharType.
LOWERCASE_LETTER
:
case
CharType.
TITLECASE_LETTER
:
case
CharType.
MODIFIER_LETTER
:
case
CharType.
OTHER_LETTER
:
return
true
;
default
:
return
false
;
}
}
// Lu
/*pure*/
bool
isUniUpper
(
dchar
code
)
{
if
(
code
<=
0x7F
)
return
cast
(
bool
)
isupper
(
code
)
;
return
getType
(
code
)
==
CharType.
UPPERCASE_LETTER
;
}
// Ll
/*pure*/
bool
isUniLower
(
dchar
code
)
{
if
(
code
<=
0x7F
)
return
cast
(
bool
)
islower
(
code
)
;
return
getType
(
code
)
==
CharType.
LOWERCASE_LETTER
;
}
// Lt
/*pure*/
bool
isUniTitle
(
dchar
code
)
{
return
getType
(
code
)
==
CharType.
TITLECASE_LETTER
;
}
// Lu, Ll, Lt, Lm, Lo, Nd
/*pure*/
bool
isUniAlphaNum
(
dchar
code
)
{
if
(
code
<=
0x7F
)
return
cast
(
bool
)
isalnum
(
code
)
;
switch
(
getType
(
code
)
)
{
case
CharType.
UPPERCASE_LETTER
:
case
CharType.
LOWERCASE_LETTER
:
case
CharType.
TITLECASE_LETTER
:
case
CharType.
MODIFIER_LETTER
:
case
CharType.
OTHER_LETTER
:
case
CharType.
DECIMAL_DIGIT_NUMBER
:
return
true
;
default
:
return
false
;
}
}
// Nd, Nl, No
/*pure*/
bool
isUniNumber
(
dchar
code
)
{
if
(
code
<=
0x7F
)
return
cast
(
bool
)
isdigit
(
code
)
;
switch
(
getType
(
code
)
)
{
case
CharType.
DECIMAL_DIGIT_NUMBER
:
case
CharType.
LETTER_NUMBER
:
case
CharType.
OTHER_NUMBER
:
return
true
;
default
:
return
false
;
}
}
// Nd
/*pure*/
bool
isUniDigit
(
dchar
code
)
{
if
(
code
<=
0x7F
)
return
cast
(
bool
)
isdigit
(
code
)
;
return
getType
(
code
)
==
CharType.
DECIMAL_DIGIT_NUMBER
;
}
// Zs, Zl, Zp
/*pure*/
bool
isUniSeparator
(
dchar
code
)
{
if
(
code
<=
0x7F
)
return
cast
(
bool
)
isspace
(
code
)
;
switch
(
getType
(
code
)
)
{
case
CharType.
SPACE_SEPARATOR
:
case
CharType.
LINE_SEPARATOR
:
case
CharType.
PARAGRAPH_SEPARATOR
:
return
true
;
default
:
return
false
;
}
}
// Zs
/*pure*/
bool
isUniSpace
(
dchar
code
)
{
if
(
code
<=
0x7F
)
return
cast
(
bool
)
isspace
(
code
)
;
return
getType
(
code
)
==
CharType.
SPACE_SEPARATOR
;
}
// Zl
/*pure*/
bool
isUniLine
(
dchar
code
)
{
return
getType
(
code
)
==
CharType.
LINE_SEPARATOR
;
}
// Zp
/*pure*/
bool
isUniParagraph
(
dchar
code
)
{
return
getType
(
code
)
==
CharType.
PARAGRAPH_SEPARATOR
;
}
// Mn, Mc, Me
/*pure*/
bool
isUniMark
(
dchar
code
)
{
switch
(
getType
(
code
)
)
{
case
CharType.
NONSPACING_MARK
:
case
CharType.
COMBINING_SPACING_MARK
:
case
CharType.
ENCLOSING_MARK
:
return
true
;
default
:
return
false
;
}
}
/*pure*/
bool
isUniNonspacing
(
dchar
code
)
{
return
getType
(
code
)
==
CharType.
NONSPACING_MARK
;
}
// Pc, Pd, Ps, Pe, Pi, Pf, Po
/*pure*/
bool
isUniPunctuation
(
dchar
code
)
{
if
(
code
<=
0x7F
)
return
cast
(
bool
)
ispunct
(
code
)
;
switch
(
getType
(
code
)
)
{
case
CharType.
CONNECTOR_PUNCTUATION
:
case
CharType.
DASH_PUNCTUATION
:
case
CharType.
OPEN_PUNCTUATION
:
case
CharType.
CLOSE_PUNCTUATION
:
case
CharType.
INITIAL_QUOTE_PUNCTUATION
:
case
CharType.
FINAL_QUOTE_PUNCTUATION
:
case
CharType.
OTHER_PUNCTUATION
:
return
true
;
default
:
return
false
;
}
}
// Sm, Sc, Sk, So
/*pure*/
bool
isUniSymbol
(
dchar
code
)
{
switch
(
getType
(
code
)
)
{
case
CharType.
MATH_SYMBOL
:
case
CharType.
CURRENCY_SYMBOL
:
case
CharType.
MODIFIER_SYMBOL
:
case
CharType.
OTHER_SYMBOL
:
return
true
;
default
:
return
false
;
}
}
// Cc, Cf, Cs, Co, Cn
/*pure*/
bool
isUniOther
(
dchar
code
)
{
switch
(
getType
(
code
)
)
{
case
CharType.
CONTROL
:
case
CharType.
FORMAT
:
case
CharType.
SURROGATE
:
case
CharType.
PRIVATE_USE
:
case
CharType.
NOT_ASSIGNED
:
return
true
;
default
:
return
false
;
}
}
// Cc
/*pure*/
bool
isUniControl
(
dchar
code
)
{
if
(
code
<=
0x7F
)
return
cast
(
bool
)
iscntrl
(
code
)
;
return
getType
(
code
)
==
CharType.
CONTROL
;
}
// Cf
/*pure*/
bool
isUniFormat
(
dchar
code
)
{
return
getType
(
code
)
==
CharType.
FORMAT
;
}
// Cs
/*pure*/
bool
isUniSurrogate
(
dchar
code
)
{
return
getType
(
code
)
==
CharType.
SURROGATE
;
}
// Co
/*pure*/
bool
isUniPrivateUse
(
dchar
code
)
{
return
getType
(
code
)
==
CharType.
PRIVATE_USE
;
}
// Lu, Ll, Lt, Lm, Lo, Nd, Nl, No, Mn, Mc, Me,
// Pc, Pd, Ps, Pe, Pi, Pf, Po, Sm, Sc, Sk, So
/*pure*/
bool
isUniGraph
(
dchar
code
)
{
if
(
code
<=
0x7F
)
return
cast
(
bool
)
isgraph
(
code
)
;
switch
(
getType
(
code
)
)
{
case
CharType.
UPPERCASE_LETTER
:
case
CharType.
LOWERCASE_LETTER
:
case
CharType.
TITLECASE_LETTER
:
case
CharType.
MODIFIER_LETTER
:
case
CharType.
OTHER_LETTER
:
case
CharType.
DECIMAL_DIGIT_NUMBER
:
case
CharType.
LETTER_NUMBER
:
case
CharType.
OTHER_NUMBER
:
case
CharType.
NONSPACING_MARK
:
case
CharType.
COMBINING_SPACING_MARK
:
case
CharType.
ENCLOSING_MARK
:
case
CharType.
CONNECTOR_PUNCTUATION
:
case
CharType.
DASH_PUNCTUATION
:
case
CharType.
OPEN_PUNCTUATION
:
case
CharType.
CLOSE_PUNCTUATION
:
case
CharType.
INITIAL_QUOTE_PUNCTUATION
:
case
CharType.
FINAL_QUOTE_PUNCTUATION
:
case
CharType.
OTHER_PUNCTUATION
:
case
CharType.
MATH_SYMBOL
:
case
CharType.
CURRENCY_SYMBOL
:
case
CharType.
MODIFIER_SYMBOL
:
case
CharType.
OTHER_SYMBOL
:
return
true
;
default
:
return
false
;
}
}
// Lu, Ll, Lt, Lm, Lo, Nd, Nl, No, Zs, Mn, Mc, Me,
// Pc, Pd, Ps, Pe, Pi, Pf, Po, Sm, Sc, Sk, So
/*pure*/
bool
isUniPrint
(
dchar
code
)
{
if
(
code
<=
0x7F
)
return
cast
(
bool
)
isprint
(
code
)
;
switch
(
getType
(
code
)
)
{
case
CharType.
UPPERCASE_LETTER
:
case
CharType.
LOWERCASE_LETTER
:
case
CharType.
TITLECASE_LETTER
:
case
CharType.
MODIFIER_LETTER
:
case
CharType.
OTHER_LETTER
:
case
CharType.
DECIMAL_DIGIT_NUMBER
:
case
CharType.
LETTER_NUMBER
:
case
CharType.
OTHER_NUMBER
:
case
CharType.
SPACE_SEPARATOR
:
case
CharType.
NONSPACING_MARK
:
case
CharType.
COMBINING_SPACING_MARK
:
case
CharType.
ENCLOSING_MARK
:
case
CharType.
CONNECTOR_PUNCTUATION
:
case
CharType.
DASH_PUNCTUATION
:
case
CharType.
OPEN_PUNCTUATION
:
case
CharType.
CLOSE_PUNCTUATION
:
case
CharType.
INITIAL_QUOTE_PUNCTUATION
:
case
CharType.
FINAL_QUOTE_PUNCTUATION
:
case
CharType.
OTHER_PUNCTUATION
:
case
CharType.
MATH_SYMBOL
:
case
CharType.
CURRENCY_SYMBOL
:
case
CharType.
MODIFIER_SYMBOL
:
case
CharType.
OTHER_SYMBOL
:
return
true
;
default
:
return
false
;
}
}
// Ws
/*pure*/
bool
isUniDirWhiteSpace
(
dchar
code
)
{
return
getDirectionality
(
code
)
==
Direction.
WHITESPACE
;
}
// R
/*pure*/
bool
isUniDirLTL
(
dchar
code
)
{
return
getDirectionality
(
code
)
==
Direction.
LEFT_TO_RIGHT
;
}
// L
/*pure*/
bool
isUniDirRTL
(
dchar
code
)
{
return
getDirectionality
(
code
)
==
Direction.
RIGHT_TO_LEFT
;
}
// L, R
/*pure*/
bool
isUniDirStrong
(
dchar
code
)
{
switch
(
getDirectionality
(
code
)
)
{
case
Direction.
LEFT_TO_RIGHT
:
case
Direction.
RIGHT_TO_LEFT
:
return
true
;
default
:
return
false
;
}
}
// En, Es, Et, An, Cs
/*pure*/
bool
isUniDirWeak
(
dchar
code
)
{
switch
(
getDirectionality
(
code
)
)
{
case
Direction.
EUROPEAN_NUMBER
:
case
Direction.
EUROPEAN_NUMBER_SEPARATOR
:
case
Direction.
EUROPEAN_NUMBER_TERMINATOR
:
case
Direction.
ARABIC_NUMBER
:
case
Direction.
COMMON_NUMBER_SEPARATOR
:
return
true
;
default
:
return
false
;
}
}
//B, S, Ws, On
/*pure*/
bool
isUniDirNeutral
(
dchar
code
)
{
switch
(
getDirectionality
(
code
)
)
{
case
Direction.
BLOCK_SEPARATOR
:
case
Direction.
SEGMENT_SEPARATOR
:
case
Direction.
WHITESPACE
:
case
Direction.
OTHER_NEUTRALS
:
return
true
;
default
:
return
false
;
}
}
// B, S
/*pure*/
bool
isUniDirSeparator
(
dchar
code
)
{
switch
(
getDirectionality
(
code
)
)
{
case
Direction.
BLOCK_SEPARATOR
:
case
Direction.
SEGMENT_SEPARATOR
:
return
true
;
default
:
return
false
;
}
}
//
/*pure*/
bool
isUniNonBreaking
(
dchar
code
)
{
return
getDecompositionType
(
code
)
==
DecompositionType.
NOBREAK
;
}
/*pure*/
bool
isUniMirroring
(
dchar
code
)
{
return
(
(
getPackedData
(
code
)
>>
MIRRORED_SHIFT
)
&
MIRRORED_MASK
)
!=
0
;
}
// Lu -> Lt
/*pure*/
dchar
toUniLower
(
dchar
code
)
{
return
code
+
LCDIFF
[
(
getPackedData
(
code
)
>>
TOLOWER_SHIFT
)
&
TOLOWER_MASK
]
;
}
// Lt -> Lu
/*pure*/
dchar
toUniUpper
(
dchar
code
)
{
return
code
+
UCDIFF
[
(
getPackedData
(
code
)
>>
TOUPPER_SHIFT
)
&
TOUPPER_MASK
]
;
}
// L& -> Lt
/*pure*/
dchar
toUniTitle
(
dchar
c
)
{
int32_t diff
=
TCDIFF
[
(
getPackedData
(
c
)
>>
TOTITLE_SHIFT
)
&
TOTITLE_MASK
]
;
return
diff
!=
TOTITLE_MASK
?
c
+
diff
:
toUniUpper
(
c
)
;
}
/*pure*/
dchar
toUniMirror
(
dchar
c
)
{
if
(
!
isUniMirroring
(
c
)
)
return
c
;
return
c
+
MIRROR_DIFF
[
(
getPackedData
(
c
)
>>
MIRROR_SHIFT
)
&
MIRROR_MASK
]
;
}
// The following is taken from AndroidUnicode.h, AndroidUnicode.cpp and
// characterData.h from the Andriod project; after hunting high and low for
// documentation about Unicode on Google and not wanting to go for heavyweight
// implementations like ICU I found this gem. I ported it to D to implement
// the public Unicode api. Other implementations of interest are in V8 and
// Mozilla, some benchmarks would be useful to determine the one which performs
// best.
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
private
:
/*
* Directions specified in the Unicode standard. These directions map directly
* to java.lang.Character.
*/
enum
Direction
{
UNDEFINED
=
-
1
,
LEFT_TO_RIGHT
,
RIGHT_TO_LEFT
,
RIGHT_TO_LEFT_ARABIC
,
EUROPEAN_NUMBER
,
EUROPEAN_NUMBER_SEPARATOR
,
EUROPEAN_NUMBER_TERMINATOR
,
ARABIC_NUMBER
,
COMMON_NUMBER_SEPARATOR
,
NONSPACING_MARK
,
BOUNDARY_NEUTRAL
,
BLOCK_SEPARATOR
,
SEGMENT_SEPARATOR
,
WHITESPACE
,
OTHER_NEUTRALS
,
LEFT_TO_RIGHT_EMBEDDING
,
LEFT_TO_RIGHT_OVERRIDE
,
RIGHT_TO_LEFT_EMBEDDING
,
RIGHT_TO_LEFT_OVERRIDE
,
POP_DIRECTIONAL_FORMAT
}
/*
* Character types as specified in the Unicode standard. These map directly to
* java.lang.Character.
*/
enum
CharType
{
UNASSIGNED
,
UPPERCASE_LETTER
,
LOWERCASE_LETTER
,
TITLECASE_LETTER
,
MODIFIER_LETTER
,
OTHER_LETTER
,
NONSPACING_MARK
,
ENCLOSING_MARK
,
COMBINING_SPACING_MARK
,
DECIMAL_DIGIT_NUMBER
,
LETTER_NUMBER
,
OTHER_NUMBER
,
SPACE_SEPARATOR
,
LINE_SEPARATOR
,
PARAGRAPH_SEPARATOR
,
CONTROL
,
FORMAT
,
NOT_ASSIGNED
,
PRIVATE_USE
,
SURROGATE
,
DASH_PUNCTUATION
,
OPEN_PUNCTUATION
,
CLOSE_PUNCTUATION
,
CONNECTOR_PUNCTUATION
,
OTHER_PUNCTUATION
,
MATH_SYMBOL
,
CURRENCY_SYMBOL
,
MODIFIER_SYMBOL
,
OTHER_SYMBOL
,
INITIAL_QUOTE_PUNCTUATION
,
FINAL_QUOTE_PUNCTUATION
}
/*
* Decomposition types as described by the unicode standard. These values map to
* the same values in dchar.h in ICU.
*/
enum
DecompositionType
{
NONE
,
CANONICAL
,
COMPAT
,
CIRCLE
,
FINAL
,
FONT
,
FRACTION
,
INITIAL
,
ISOLATED
,
MEDIAL
,
NARROW
,
NOBREAK
,
SMALL
,
SQUARE
,
SUB
,
SUPER
,
VERTICAL
,
WIDE
}
enum
{
MIN_RADIX
=
2
,
MAX_RADIX
=
36
,
TYPE_SHIFT
=
0
,
TYPE_MASK
=
(
1
<<
5
)
-
1
,
DIRECTION_SHIFT
=
TYPE_SHIFT
+
5
,
DIRECTION_MASK
=
(
1
<<
5
)
-
1
,
MIRRORED_SHIFT
=
DIRECTION_SHIFT
+
5
,
MIRRORED_MASK
=
(
1
<<
1
)
-
1
,
TOUPPER_SHIFT
=
MIRRORED_SHIFT
+
1
,
TOUPPER_MASK
=
(
1
<<
6
)
-
1
,
TOLOWER_SHIFT
=
TOUPPER_SHIFT
+
6
,
TOLOWER_MASK
=
(
1
<<
6
)
-
1
,
TOTITLE_SHIFT
=
TOLOWER_SHIFT
+
6
,
TOTITLE_MASK
=
(
1
<<
2
)
-
1
,
MIRROR_SHIFT
=
TOTITLE_SHIFT
+
2
,
MIRROR_MASK
=
(
1
<<
5
)
-
1
,
NUMERIC_SHIFT
=
TOTITLE_SHIFT
+
2
,
NUMERIC_MASK
=
(
1
<<
7
)
-
1
,
DECOMPOSITION_SHIFT
=
11
,
DECOMPOSITION_MASK
=
(
1
<<
5
)
-
1
}
/**
* Returns the packed data for java calls
* @param c The unicode character.
* @return The packed data for the character.
*
* Copied from java.lang.Character implementation:
* 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
* F E D C B A 9 8 7 6 5 4 3 2 1 0 F E D C B A 9 8 7 6 5 4 3 2 1 0
*
* 31 types ---------
* 18 directionalities ---------
* 2 mirroreds -
* ----------- 56 toupper diffs
* ----------- 48 tolower diffs
* --- 4 totitlecase diffs
* ------------- 84 numeric values
* --------- 24 mirror char diffs
*/
/*pure*/
dchar
getPackedData
(
dchar
c
)
{
// findCharacterValue returns a 16-bit value with the top 5 bits containing
// a decomposition type and the remaining bits containing an index.
return
PACKED_DATA
[
findCharacterValue
(
c
)
&
0x7FF
]
;
}
/*
* Get the Character type.
* @param c The unicode character.
* @return The character's type or CHARTYPE_UNASSIGNED if the character is
* invalid or has an unassigned class.
*/
/*pure*/
CharType getType
(
dchar
c
)
{
if
(
c
>=
0x10FFFF
)
return
CharType.
UNASSIGNED
;
return
cast
(
CharType
)
(
(
getPackedData
(
c
)
>>
TYPE_SHIFT
)
&
TYPE_MASK
)
;
}
/**
* Get the Character's decomposition type.
* @param c The unicode character.
* @return The character's decomposition type or DECOMPOSITION_NONE is there
* is no decomposition.
*/
/*pure*/
DecompositionType getDecompositionType
(
dchar
c
)
{
// findCharacterValue returns a 16-bit value with the top 5 bits containing
// a decomposition type and the remaining bits containing an index.
return
cast
(
DecompositionType
)
(
(
findCharacterValue
(
c
)
>>
DECOMPOSITION_SHIFT
)
&
DECOMPOSITION_MASK
)
;
}
/*pure*/
int
getDigitValue
(
dchar
c
,
int
radix
)
{
if
(
radix
<
MIN_RADIX
||
radix
>
MAX_RADIX
)
return
-
1
;
int
tempValue
=
radix
;
if
(
c
>=
'0'
&&
c
<=
'9'
)
tempValue
=
c
-
'0'
;
else
if
(
c
>=
'a'
&&
c
<=
'z'
)
tempValue
=
c
-
'a'
+
10
;
else
if
(
c
>=
'A'
&&
c
<=
'Z'
)
tempValue
=
c
-
'A'
+
10
;
return
tempValue
<
radix
?
tempValue
:
-
1
;
}
/*pure*/
int
getNumericValue
(
dchar
c
)
{
if
(
isUniMirroring
(
c
)
)
return
-
1
;
return
NUMERICS
[
(
(
getPackedData
(
c
)
>>
NUMERIC_SHIFT
)
&
NUMERIC_MASK
)
]
;
}
/*pure*/
Direction getDirectionality
(
dchar
c
)
{
uint32_t data
=
getPackedData
(
c
)
;
if
(
!
data
)
return
Direction.
UNDEFINED
;
Direction d
=
cast
(
Direction
)
(
(
data
>>
DIRECTION_SHIFT
)
&
DIRECTION_MASK
)
;
return
d
!=
DIRECTION_MASK
?
d
:
Direction.
UNDEFINED
;
}
/*pure*/
ushort
findCharacterValue
(
dchar
c
)
{
if
(
c
>
0x10FFFF
)
throw
new
UCharException
(
"invalid Unicode codepoint"
,
c
)
;
if
(
c
<=
0xFF
)
return
LATIN1_DATA
[
c
]
;
// Rotate the bits because the tables are separated into even and odd
// codepoints
dchar
u
=
(
c
>>
1
)
|
(
(
c
&
1
)
<<
20
)
;
const
Range search
=
FULL_DATA
[
u
>>
16
]
;
const
uint
[
]
array
=
search.
array
;
// This trick is so that that compare in the while loop does not need to
// shift the array entry down by 16
u
<<=
16
;
u
|=
0xFFFF
;
int
high
=
search.
length
-
1
;
int
low
=
0
;
if
(
high
<
0
)
return
0
;
while
(
low
<
high
-
1
)
{
int
probe
=
(
high
+
low
)
>>
1
;
// The entries contain the codepoint in the high 16 bits and the index
// into PACKED_DATA in the low 16.
if
(
array
[
probe
]
>
u
)
high
=
probe
;
else
low
=
probe
;
}
if
(
array
[
low
]
>
u
)
throw
new
UCharException
(
"a suitable range was not found"
,
c
)
;
return
cast
(
ushort
)
(
array
[
low
]
&
0xFFFF
)
;
}
// Structure containing an array of ranges
struct
Range
{
int
length
;
uint
[
]
array
;
}
;
// For Latin1 characters just index into this array to get the index and decomposition
immutable
ushort
[
]
LATIN1_DATA
=
[
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0002
,
0x0003
,
0x0002
,
0x0004
,
0x0003
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0003
,
0x0003
,
0x0003
,
0x0002
,
0x0005
,
0x0006
,
0x0006
,
0x0007
,
0x0008
,
0x0007
,
0x0006
,
0x0006
,
0x0009
,
0x000A
,
0x0006
,
0x000B
,
0x000C
,
0x000D
,
0x000C
,
0x000C
,
0x000E
,
0x000F
,
0x0010
,
0x0011
,
0x0012
,
0x0013
,
0x0014
,
0x0015
,
0x0016
,
0x0017
,
0x000C
,
0x0006
,
0x0018
,
0x0019
,
0x001A
,
0x0006
,
0x0006
,
0x001B
,
0x001C
,
0x001D
,
0x001E
,
0x001F
,
0x0020
,
0x0021
,
0x0022
,
0x0023
,
0x0024
,
0x0025
,
0x0026
,
0x0027
,
0x0028
,
0x0029
,
0x002A
,
0x002B
,
0x002C
,
0x002D
,
0x002E
,
0x002F
,
0x0030
,
0x0031
,
0x0032
,
0x0033
,
0x0034
,
0x0035
,
0x0006
,
0x0036
,
0x0037
,
0x0038
,
0x0037
,
0x0039
,
0x003A
,
0x003B
,
0x003C
,
0x003D
,
0x003E
,
0x003F
,
0x0040
,
0x0041
,
0x0042
,
0x0043
,
0x0044
,
0x0045
,
0x0046
,
0x0047
,
0x0048
,
0x0049
,
0x004A
,
0x004B
,
0x004C
,
0x004D
,
0x004E
,
0x004F
,
0x0050
,
0x0051
,
0x0052
,
0x0035
,
0x0019
,
0x0036
,
0x0019
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0003
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x0001
,
0x5853
,
0x0006
,
0x0008
,
0x0008
,
0x0008
,
0x0008
,
0x0054
,
0x0054
,
0x1037
,
0x0054
,
0x7855
,
0x0056
,
0x0019
,
0x0057
,
0x0054
,
0x1037
,
0x0058
,
0x0059
,
0x785A
,
0x785B
,
0x1037
,
0x105C
,
0x0054
,
0x0006
,
0x1037
,
0x785D
,
0x7855
,
0x005E
,
0x305F
,
0x305F
,
0x305F
,
0x0006
,
0x0860
,
0x0860
,
0x0860
,
0x0860
,
0x0860
,
0x0860
,
0x0060
,
0x0860
,
0x0860
,
0x0860
,
0x0860
,
0x0860
,
0x0860
,
0x0860
,
0x0860
,
0x0860
,
0x0060
,
0x0860
,
0x0860
,
0x0860
,
0x0860
,
0x0860
,
0x0860
,
0x0019
,
0x0060
,
0x0860
,
0x0860
,
0x0860
,
0x0860
,
0x0860
,
0x0060
,
0x0055
,
0x0861
,
0x0861
,
0x0861
,
0x0861
,
0x0861
,
0x0861
,
0x0061
,
0x0861
,
0x0861
,
0x0861
,
0x0861
,
0x0861
,
0x0861
,
0x0861
,
0x0861
,
0x0861
,
0x0061
,
0x0861
,
0x0861
,
0x0861
,
0x0861
,
0x0861
,
0x0861
,
0x0019
,
0x0061
,
0x0861
,
0x0861
,
0x0861
,
0x0861
,
0x0861
,
0x0061
,
0x0862
]
;
// Each of these arrays is stripped into ranges. In order to build the arrays, each
// codepoint was bit-shifted so that even and odd characters were separated into different
// arrays. The identifier of each array is the top byte after bit-shifting.
// The numbers stored in the array are the bit-shifted codepoint, the decomposition, and an
// index into another array of all possible packed data values. The top 16 bits are the
// codepoint and the bottom 16 are the decomposition and index. The top 5 bits for the decomposition
// and the rest for the index.
immutable
uint
[
]
a0
=
[
0x00800863
,
0x00880063
,
0x00890863
,
0x00930063
,
0x00940863
,
0x00980864
,
0x00991063
,
0x009A0863
,
0x009C0055
,
0x009D0865
,
0x00A01065
,
0x00A10065
,
0x00A20865
,
0x00A50063
,
0x00A60863
,
0x00A90063
,
0x00AA0863
,
0x00B30063
,
0x00B40863
,
0x00BC0866
,
0x00BD0865
,
0x00C00055
,
0x00C10063
,
0x00C30067
,
0x00C40065
,
0x00C50068
,
0x00C60065
,
0x00C70069
,
0x00C8006A
,
0x00C90065
,
0x00CA006B
,
0x00CB006C
,
0x00CC0063
,
0x00CD006D
,
0x00CE006C
,
0x00CF006E
,
0x00D00863
,
0x00D10063
,
0x00D3006F
,
0x00D40065
,
0x00D50055
,
0x00D60063
,
0x00D7006F
,
0x00D80865
,
0x00D90070
,
0x00DA0065
,
0x00DC0063
,
0x00DD0055
,
0x00DE0063
,
0x00DF0055
,
0x00E00071
,
0x00E21072
,
0x00E31073
,
0x00E41074
,
0x00E51072
,
0x00E61073
,
0x00E70865
,
0x00EF0863
,
0x00F20063
,
0x00F30863
,
0x00F80855
,
0x00F91074
,
0x00FA0863
,
0x00FB0075
,
0x00FC0863
,
0x010E0063
,
0x010F0863
,
0x01100076
,
0x01110063
,
0x01130863
,
0x011A0055
,
0x011D0077
,
0x011E0065
,
0x011F0077
,
0x01200055
,
0x01210078
,
0x01280055
,
0x012A0079
,
0x012B007A
,
0x012C0055
,
0x0130007A
,
0x01310055
,
0x0134007B
,
0x01350055
,
0x0139007C
,
0x013A0055
,
0x0140007D
,
0x01410055
,
0x0144007D
,
0x0145007E
,
0x01460055
,
0x0149007F
,
0x014A0080
,
0x014B0055
,
0x01587881
,
0x015D0082
,
0x015E0081
,
0x01610037
,
0x01630082
,
0x01680081
,
0x01690037
,
0x016C1037
,
0x016F0037
,
0x01707881
,
0x01730037
,
0x01770081
,
0x01780037
,
0x01800083
,
0x01A00883
,
0x01A10083
,
0x01A20883
,
0x01A30083
,
0x01B80078
,
0x01BA0837
,
0x01BB0078
,
0x01BD1081
,
0x01BE0078
,
0x01BF0806
,
0x01C00078
,
0x01C21037
,
0x01C30884
,
0x01C40885
,
0x01C60886
,
0x01C70887
,
0x01C80855
,
0x01C90060
,
0x01D10078
,
0x01D20060
,
0x01D50860
,
0x01D60888
,
0x01D70889
,
0x01D80855
,
0x01D90061
,
0x01E1008A
,
0x01E20061
,
0x01E50861
,
0x01E6088B
,
0x01E7088C
,
0x01E8108D
,
0x01E91077
,
0x01EA0877
,
0x01EB108E
,
0x01EC0063
,
0x01F8108F
,
0x01F91090
,
0x01FA1091
,
0x01FB0019
,
0x01FC0065
,
0x01FD0063
,
0x01FE0055
,
0x01FF0077
,
0x02000892
,
0x02010092
,
0x02060892
,
0x02080060
,
0x02180061
,
0x02280893
,
0x02290093
,
0x022E0893
,
0x02300063
,
0x023B0863
,
0x023C0063
,
0x02410094
,
0x02420083
,
0x02440095
,
0x02450063
,
0x02600077
,
0x02610865
,
0x02620065
,
0x02680863
,
0x026A0063
,
0x026B0863
,
0x026C0063
,
0x026D0863
,
0x02700063
,
0x02710863
,
0x02740063
,
0x02750863
,
0x027B0063
,
0x027C0863
,
0x027D0078
,
0x02800063
,
0x02880078
,
0x02990096
,
0x02AC0078
,
0x02AD0097
,
0x02B00078
,
0x02B10098
,
0x02C40078
,
0x02C50099
,
0x02C60078
,
0x02C90083
,
0x02DD0078
,
0x02DE0083
,
0x02DF009A
,
0x02E10083
,
0x02E3009A
,
0x02E40078
,
0x02E8009B
,
0x02F60078
,
0x02F8009B
,
0x02FA009A
,
0x02FB0078
,
0x0300009C
,
0x03020078
,
0x0306000C
,
0x03070054
,
0x03080083
,
0x030B0078
,
0x030F009D
,
0x03100078
,
0x0311089E
,
0x0314009E
,
0x031E0078
,
0x0320009F
,
0x0321009E
,
0x03260083
,
0x033000A0
,
0x033100A1
,
0x033200A2
,
0x033300A3
,
0x033400A4
,
0x03350007
,
0x033600A5
,
0x0337009E
,
0x03380083
,
0x0339009E
,
0x033B109E
,
0x033D009E
,
0x0360089E
,
0x0362009E
,
0x036A009D
,
0x036B0083
,
0x036F0095
,
0x03700083
,
0x0373009F
,
0x03740083
,
0x0377009E
,
0x0378000E
,
0x03790010
,
0x037A0012
,
0x037B0014
,
0x037C0016
,
0x037D009E
,
0x037F00A6
,
0x0380009D
,
0x03870078
,
0x0388009E
,
0x03980083
,
0x03A60078
,
0x03A7009E
,
0x03B70078
,
0x03C0009E
,
0x03D30083
,
0x03D90078
,
0x04810083
,
0x04820071
,
0x049A0871
,
0x049B0071
,
0x049D0078
,
0x049E0083
,
0x049F00A7
,
0x04A10083
,
0x04A500A7
,
0x04A70078
,
0x04A80071
,
0x04A90083
,
0x04AB0078
,
0x04AC0871
,
0x04B00071
,
0x04B10083
,
0x04B20097
,
0x04B300A8
,
0x04B400A9
,
0x04B500AA
,
0x04B600AB
,
0x04B700AC
,
0x04B80097
,
0x04B90078
,
0x04C100A7
,
0x04C20078
,
0x04C30071
,
0x04C70078
,
0x04C80071
,
0x04C90078
,
0x04CA0071
,
0x04DA0078
,
0x04DB0071
,
0x04DD0078
,
0x04DE0083
,
0x04DF00A7
,
0x04E10083
,
0x04E30078
,
0x04E400A7
,
0x04E50078
,
0x04E608A7
,
0x04E70071
,
0x04E80078
,
0x04EE0871
,
0x04EF0078
,
0x04F00071
,
0x04F10083
,
0x04F20078
,
0x04F300A8
,
0x04F400A9
,
0x04F500AA
,
0x04F600AB
,
0x04F700AC
,
0x04F80071
,
0x04F90008
,
0x04FA00AD
,
0x04FB00AE
,
0x04FC00AF
,
0x04FD0094
,
0x04FE0078
,
0x05010083
,
0x05020078
,
0x05030071
,
0x05060078
,
0x05080071
,
0x05090078
,
0x050A0071
,
0x051A0078
,
0x051B0871
,
0x051C0071
,
0x051D0078
,
0x051E0083
,
0x051F00A7
,
0x05210083
,
0x05220078
,
0x05240083
,
0x05250078
,
0x05260083
,
0x05270078
,
0x052D0871
,
0x052E0071
,
0x052F0871
,
0x05300078
,
0x053300A8
,
0x053400A9
,
0x053500AA
,
0x053600AB
,
0x053700AC
,
0x05380083
,
0x05390071
,
0x053B0078
,
0x05410083
,
0x05420078
,
0x05430071
,
0x05470078
,
0x05480071
,
0x05490078
,
0x054A0071
,
0x055A0078
,
0x055B0071
,
0x055D0078
,
0x055E0083
,
0x055F00A7
,
0x05610083
,
0x05630078
,
0x05640083
,
0x05650078
,
0x056600A7
,
0x05670078
,
0x05680071
,
0x05690078
,
0x05700071
,
0x05710083
,
0x05720078
,
0x057300A8
,
0x057400A9
,
0x057500AA
,
0x057600AB
,
0x057700AC
,
0x05780078
,
0x058100A7
,
0x05820078
,
0x05830071
,
0x05870078
,
0x05880071
,
0x05890078
,
0x058A0071
,
0x059A0078
,
0x059B0071
,
0x059D0078
,
0x059E0083
,
0x059F00A7
,
0x05A10083
,
0x05A20078
,
0x05A408A7
,
0x05A50078
,
0x05A608A7
,
0x05A70078
,
0x05AB0083
,
0x05AC0078
,
0x05AE0871
,
0x05AF0078
,
0x05B00071
,
0x05B10078
,
0x05B300A8
,
0x05B400A9
,
0x05B500AA
,
0x05B600AB
,
0x05B700AC
,
0x05B80094
,
0x05B90078
,
0x05C10083
,
0x05C20078
,
0x05C30071
,
0x05C60078
,
0x05C70071
,
0x05CA0871
,
0x05CB0078
,
0x05CD0071
,
0x05D00078
,
0x05D20071
,
0x05D30078
,
0x05D40071
,
0x05D60078
,
0x05D70071
,
0x05DD0078
,
0x05DF00A7
,
0x05E00083
,
0x05E100A7
,
0x05E20078
,
0x05E300A7
,
0x05E508A7
,
0x05E70078
,
0x05F300A8
,
0x05F400A9
,
0x05F500AA
,
0x05F600AB
,
0x05F700AC
,
0x05F800B0
,
0x05F900B1
,
0x05FA0054
,
0x05FE0078
,
0x060100A7
,
0x06020078
,
0x06030071
,
0x061A0078
,
0x061B0071
,
0x061D0078
,
0x061F0083
,
0x062100A7
,
0x06230083
,
0x06240883
,
0x06250083
,
0x06270078
,
0x062B0083
,
0x062C0078
,
0x06300071
,
0x06310078
,
0x063300A8
,
0x063400A9
,
0x063500AA
,
0x063600AB
,
0x063700AC
,
0x06380078
,
0x064100A7
,
0x06420078
,
0x06430071
,
0x065A0078
,
0x065B0071
,
0x065D0078
,
0x065E0083
,
0x065F00A7
,
0x066008A7
,
0x066100A7
,
0x066300B2
,
0x066408A7
,
0x06660083
,
0x06670078
,
0x066B00A7
,
0x066C0078
,
0x066F0071
,
0x06710078
,
0x067300A8
,
0x067400A9
,
0x067500AA
,
0x067600AB
,
0x067700AC
,
0x06780078
,
0x068100A7
,
0x06820078
,
0x06830071
,
0x069D0078
,
0x069F00A7
,
0x06A10083
,
0x06A20078
,
0x06A300A7
,
0x06A508A7
,
0x06A70078
,
0x06B00071
,
0x06B10078
,
0x06B300A8
,
0x06B400A9
,
0x06B500AA
,
0x06B600AB
,
0x06B700AC
,
0x06B80078
,
0x06C100A7
,
0x06C20078
,
0x06C30071
,
0x06CC0078
,
0x06CD0071
,
0x06D90078
,
0x06DA0071
,
0x06DE0078
,
0x06E00071
,
0x06E40078
,
0x06E50083
,
0x06E60078
,
0x06E800A7
,
0x06E90083
,
0x06EC00A7
,
0x06ED08A7
,
0x06F00078
,
0x06F900A7
,
0x06FA0097
,
0x06FB0078
,
0x07010071
,
0x071A0083
,
0x071E0078
,
0x07200071
,
0x07230081
,
0x07240083
,
0x072800A8
,
0x072900A9
,
0x072A00AA
,
0x072B00AB
,
0x072C00AC
,
0x072D0097
,
0x072E0078
,
0x07410071
,
0x07430078
,
0x07440071
,
0x07460078
,
0x074A0071
,
0x074C0078
,
0x074D0071
,
0x07500078
,
0x07510071
,
0x07520078
,
0x07550071
,
0x07560078
,
0x07570071
,
0x075A0083
,
0x075D0078
,
0x075E0083
,
0x075F0078
,
0x07600071
,
0x07630081
,
0x07640083
,
0x07670078
,
0x076800A8
,
0x076900A9
,
0x076A00AA
,
0x076B00AB
,
0x076C00AC
,
0x076D0078
,
0x076E1071
,
0x076F0078
,
0x07800071
,
0x07810094
,
0x07820097
,
0x07865897
,
0x07870097
,
0x078A0094
,
0x078C0083
,
0x078D0094
,
0x079000A8
,
0x079100A9
,
0x079200AA
,
0x079300AB
,
0x079400AC
,
0x079500B3
,
0x079A0094
,
0x079D00B4
,
0x079F00A7
,
0x07A00071
,
0x07A40078
,
0x07A50071
,
0x07A90871
,
0x07AA0071
,
0x07AE0871
,
0x07AF0071
,
0x07B60078
,
0x07B90083
,
0x07BB0883
,
0x07BD0083
,
0x07C40071
,
0x07C60078
,
0x07C80083
,
0x07CC0078
,
0x07CD0083
,
0x07D10883
,
0x07D20083
,
0x07D60883
,
0x07D70083
,
0x07DF0094
,
0x07E30083
,
0x07E40094
,
0x07E70078
,
0x07E80097
,
0x07E90078
,
0x08000071
,
0x08110078
,
0x08120071
,
0x08130871
,
0x08140078
,
0x08150071
,
0x081600A7
,
0x08170083
,
0x081A0078
,
0x081B0083
,
0x081C00A7
,
0x081D0078
,
0x082000A8
,
0x082100A9
,
0x082200AA
,
0x082300AB
,
0x082400AC
,
0x08250097
,
0x08280071
,
0x082B00A7
,
0x082C0083
,
0x082D0078
,
0x085000B5
,
0x08630078
,
0x08680071
,
0x087E7881
,
0x087F0078
,
0x08800071
,
0x08AD0078
,
0x08B00071
,
0x08D20078
,
0x08D40071
,
0x08FD0078
,
0x09000071
,
0x09270078
,
0x09280071
,
0x092F0078
,
0x09300071
,
0x09470078
,
0x09480071
,
0x095B0078
,
0x095C0071
,
0x09630078
,
0x09640071
,
0x098B0078
,
0x098C0071
,
0x09AE0078
,
0x09B00094
,
0x09B10097
,
0x09B500B6
,
0x09B600B7
,
0x09B700B8
,
0x09B800B9
,
0x09B900B0
,
0x09BA00BA
,
0x09BB00BB
,
0x09BC00BC
,
0x09BD00BD
,
0x09BE00BE
,
0x09BF0078
,
0x09C00071
,
0x09C80054
,
0x09CD0078
,
0x09D00071
,
0x09FB0078
,
0x0A010071
,
0x0B370097
,
0x0B380071
,
0x0B3C0078
,
0x0B400005
,
0x0B410071
,
0x0B4E00BF
,
0x0B4F0078
,
0x0B500071
,
0x0B760097
,
0x0B7700C0
,
0x0B7800C1
,
0x0B790078
,
0x0B800071
,
0x0B890083
,
0x0B8B0078
,
0x0B900071
,
0x0B990083
,
0x0B9B0097
,
0x0B9C0078
,
0x0BA00071
,
0x0BA90083
,
0x0BAA0078
,
0x0BB00071
,
0x0BB90083
,
0x0BBA0078
,
0x0BC00071
,
0x0BDA00C2
,
0x0BDB00A7
,
0x0BDC0083
,
0x0BDF00A7
,
0x0BE30083
,
0x0BE400A7
,
0x0BE50083
,
0x0BEA0097
,
0x0BEE0071
,
0x0BEF0078
,
0x0BF000A8
,
0x0BF100A9
,
0x0BF200AA
,
0x0BF300AB
,
0x0BF400AC
,
0x0BF50078
,
0x0BF800C3
,
0x0BF900C4
,
0x0BFA00C5
,
0x0BFB00C6
,
0x0BFC00C7
,
0x0BFD0078
,
0x0C000006
,
0x0C030099
,
0x0C040006
,
0x0C060083
,
0x0C070005
,
0x0C0800A8
,
0x0C0900A9
,
0x0C0A00AA
,
0x0C0B00AB
,
0x0C0C00AC
,
0x0C0D0078
,
0x0C100071
,
0x0C3C0078
,
0x0C400071
,
0x0C550078
,
0x0C800071
,
0x0C8F0078
,
0x0C900083
,
0x0C9200A7
,
0x0C940083
,
0x0C9500C8
,
0x0C960078
,
0x0C9800A7
,
0x0C990083
,
0x0C9A00A7
,
0x0C9D0083
,
0x0C9E0078
,
0x0CA00054
,
0x0CA10078
,
0x0CA20006
,
0x0CA300A8
,
0x0CA400A9
,
0x0CA500AA
,
0x0CA600AB
,
0x0CA700AC
,
0x0CA80071
,
0x0CB70078
,
0x0CB80071
,
0x0CBB0078
,
0x0CC00071
,
0x0CD50078
,
0x0CD800A7
,
0x0CE10071
,
0x0CE400A7
,
0x0CE50078
,
0x0CE800A8
,
0x0CE900A9
,
0x0CEA00AA
,
0x0CEB00AB
,
0x0CEC00AC
,
0x0CED0078
,
0x0CEF0006
,
0x0CF00054
,
0x0D000071
,
0x0D0C0083
,
0x0D0D00A7
,
0x0D0E0078
,
0x0D0F0097
,
0x0D100078
,
0x0E800055
,
0x0E967881
,
0x0EA70081
,
0x0EA87881
,
0x0EB17055
,
0x0EB60055
,
0x0EBC7881
,
0x0EBD0055
,
0x0ECE7881
,
0x0EE00083
,
0x0EE20078
,
0x0F000863
,
0x0F4B0855
,
0x0F4D1055
,
0x0F4E0078
,
0x0F500863
,
0x0F7D0078
,
0x0F8008C9
,
0x0F8408CA
,
0x0F8808C9
,
0x0F8B0078
,
0x0F8C08CA
,
0x0F8F0078
,
0x0F9008C9
,
0x0F9408CA
,
0x0F9808C9
,
0x0F9C08CA
,
0x0FA008C9
,
0x0FA30078
,
0x0FA408CA
,
0x0FA70078
,
0x0FA80855
,
0x0FAC0078
,
0x0FB008C9
,
0x0FB408CA
,
0x0FB808CB
,
0x0FB908CC
,
0x0FBB08CD
,
0x0FBC08CE
,
0x0FBD08CF
,
0x0FBE08D0
,
0x0FBF0078
,
0x0FC008C9
,
0x0FC408D1
,
0x0FC808C9
,
0x0FCC08D1
,
0x0FD008C9
,
0x0FD408D1
,
0x0FD808C9
,
0x0FD90855
,
0x0FDC08CA
,
0x0FDD08D2
,
0x0FDE08D3
,
0x0FDF08D4
,
0x0FE01037
,
0x0FE10855
,
0x0FE408D5
,
0x0FE608D3
,
0x0FE70837
,
0x0FE808C9
,
0x0FE90855
,
0x0FEA0078
,
0x0FEB0855
,
0x0FEC08CA
,
0x0FED08D6
,
0x0FEE0078
,
0x0FEF0837
,
0x0FF008C9
,
0x0FF10855
,
0x0FF408CA
,
0x0FF508D7
,
0x0FF608D8
,
0x0FF70837
,
0x0FF80078
,
0x0FF90855
,
0x0FFC08D9
,
0x0FFD08DA
,
0x0FFE08D3
,
0x0FFF1037
,
0x10000805
,
0x10011005
,
0x10060057
,
0x100700C2
,
0x10080099
,
0x100B0006
,
0x100C00DB
,
0x100D00B4
,
0x100E00DB
,
0x100F00B4
,
0x10100006
,
0x10121006
,
0x101400DC
,
0x101500DD
,
0x101600DE
,
0x101700DF
,
0x10180007
,
0x101A1007
,
0x101B1006
,
0x101C0006
,
0x101D00E0
,
0x101E1006
,
0x10200038
,
0x10210006
,
0x102200E1
,
0x1023000A
,
0x10241006
,
0x10250006
,
0x10290019
,
0x102A0038
,
0x102B0006
,
0x10300057
,
0x10320078
,
0x10350057
,
0x103878E2
,
0x10390078
,
0x103A78E3
,
0x103B78E4
,
0x103C78E5
,
0x103D780B
,
0x103E7819
,
0x103F780A
,
0x104070E2
,
0x1041705A
,
0x104270E3
,
0x104370E4
,
0x104470E5
,
0x1045700B
,
0x10467019
,
0x1047700A
,
0x10487081
,
0x104B0078
,
0x10500008
,
0x10541008
,
0x10550008
,
0x105B0078
,
0x10680083
,
0x106F0095
,
0x10730083
,
0x10760078
,
0x10801054
,
0x10812877
,
0x10820054
,
0x10831054
,
0x10840054
,
0x10852855
,
0x10862877
,
0x10872855
,
0x10882877
,
0x108A0054
,
0x108B1054
,
0x108C0054
,
0x108D2877
,
0x108F0054
,
0x10907854
,
0x10922877
,
0x109308E6
,
0x10942877
,
0x109508E7
,
0x10962877
,
0x10970058
,
0x10982877
,
0x10990054
,
0x109A2855
,
0x109B1071
,
0x109D0054
,
0x109E2855
,
0x109F2877
,
0x10A028E8
,
0x10A10019
,
0x10A32855
,
0x10A50054
,
0x10A70078
,
0x10AA305F
,
0x10B010E9
,
0x10B110EA
,
0x10B210EB
,
0x10B310EC
,
0x10B410ED
,
0x10B510EE
,
0x10B610EF
,
0x10B710F0
,
0x10B810F1
,
0x10B910F2
,
0x10BA10F3
,
0x10BB10F4
,
0x10BC10F5
,
0x10BD10F6
,
0x10BE10F7
,
0x10BF10F8
,
0x10C000F9
,
0x10C100FA
,
0x10C20078
,
0x10C80019
,
0x10CB0054
,
0x10CD0819
,
0x10CE0054
,
0x10D00019
,
0x10D10054
,
0x10D30019
,
0x10D40054
,
0x10D70819
,
0x10D80054
,
0x10E70819
,
0x10E80054
,
0x10E90019
,
0x10EB0054
,
0x10FA0019
,
0x110100E8
,
0x110208E8
,
0x11030019
,
0x110400FB
,
0x110608FC
,
0x11070019
,
0x1109000B
,
0x110A0019
,
0x110B00E8
,
0x110C0019
,
0x110D00E8
,
0x110F0019
,
0x111000E8
,
0x111208E8
,
0x11140019
,
0x111610E8
,
0x111700E8
,
0x111810E8
,
0x111900E8
,
0x111A0019
,
0x111E00FD
,
0x111F00E8
,
0x112208E8
,
0x112300E8
,
0x11270019
,
0x112900FD
,
0x112B0019
,
0x113008E8
,
0x113200FD
,
0x11360019
,
0x113708FD
,
0x113900FD
,
0x113A08FD
,
0x113B00FD
,
0x113C08FD
,
0x113D00FD
,
0x114008FD
,
0x114100FD
,
0x114208FD
,
0x114300FD
,
0x114408FD
,
0x114500FD
,
0x114600E8
,
0x11470019
,
0x114800FE
,
0x114A0019
,
0x114C00FF
,
0x114D0019
,
0x115100FD
,
0x11520019
,
0x11530100
,
0x11540101
,
0x115500E8
,
0x115608E8
,
0x115800FD
,
0x115C00E8
,
0x115D0019
,
0x115F00E8
,
0x11600019
,
0x116500FE
,
0x11670019
,
0x116800FD
,
0x11690019
,
0x116B00FD
,
0x117008FD
,
0x117200FD
,
0x117508FD
,
0x11770019
,
0x117800FD
,
0x11790102
,
0x117B0103
,
0x117C00E8
,
0x117D0104
,
0x117F0105
,
0x11800054
,
0x118400FD
,
0x11860054
,
0x119000E8
,
0x11910054
,
0x1195080A
,
0x11960054
,
0x119B0094
,
0x11BE0019
,
0x11BF0054
,
0x11CE0019
,
0x11DA00B4
,
0x11DB0006
,
0x11DC0054
,
0x11EE0078
,
0x12000054
,
0x12140078
,
0x12200054
,
0x12260078
,
0x12301906
,
0x12311907
,
0x12321908
,
0x12331909
,
0x1234190A
,
0x1235190B
,
0x1236190C
,
0x1237190D
,
0x1238190E
,
0x1239190F
,
0x123A1106
,
0x123B1107
,
0x123C1108
,
0x123D1109
,
0x123E110A
,
0x123F110B
,
0x1240110C
,
0x1241110D
,
0x1242110E
,
0x1243110F
,
0x1244105D
,
0x1245105B
,
0x12461110
,
0x12471111
,
0x12481112
,
0x12491113
,
0x124A1114
,
0x124B1115
,
0x124C1116
,
0x124D1117
,
0x124E1094
,
0x125B1918
,
0x12681919
,
0x127518C3
,
0x1276011A
,
0x1277011B
,
0x1278011C
,
0x1279011D
,
0x127A011E
,
0x127B00C4
,
0x127C00C5
,
0x127D00C6
,
0x127E00C7
,
0x127F011F
,
0x12800054
,
0x12FC0019
,
0x13000054
,
0x134F0078
,
0x13500054
,
0x13560094
,
0x13570054
,
0x13590078
,
0x13810054
,
0x13850078
,
0x13860054
,
0x13940078
,
0x13950054
,
0x13A60078
,
0x13A80054
,
0x13AA0078
,
0x13AB0054
,
0x13B00078
,
0x13B10054
,
0x13B40009
,
0x13BB0106
,
0x13BC0107
,
0x13BD0108
,
0x13BE0109
,
0x13BF010A
,
0x13C00106
,
0x13C10107
,
0x13C20108
,
0x13C30109
,
0x13C4010A
,
0x13C50106
,
0x13C60107
,
0x13C70108
,
0x13C80109
,
0x13C9010A
,
0x13CA0054
,
0x13CB0078
,
0x13CC0054
,
0x13D80078
,
0x13D90054
,
0x13E000E8
,
0x13E10019
,
0x13E200FE
,
0x13E3000A
,
0x13E40078
,
0x13E80019
,
0x13EA00E8
,
0x13EB00FE
,
0x13EC0019
,
0x13EE00E8
,
0x13EF00FE
,
0x13F00019
,
0x13F100FD
,
0x13F30009
,
0x13F60078
,
0x13F80019
,
0x14000094
,
0x14800019
,
0x14C2000A
,
0x14C70120
,
0x14C80121
,
0x14C9000A
,
0x14CD0019
,
0x14CE00E8
,
0x14D80019
,
0x14DC0122
,
0x14DD0019
,
0x14E000FD
,
0x14E100E8
,
0x14E200FD
,
0x14E30019
,
0x14E700E8
,
0x14E800FE
,
0x14EA00FD
,
0x14EB0019
,
0x14EC0009
,
0x14EE00E8
,
0x14EF0019
,
0x14F200E8
,
0x14F30019
,
0x14F400E8
,
0x14F50019
,
0x14FA00E8
,
0x14FC00FD
,
0x14FD0019
,
0x14FE0009
,
0x14FF0019
,
0x150500E8
,
0x150610E8
,
0x150700E8
,
0x15110019
,
0x151200E8
,
0x15140019
,
0x151600FE
,
0x15180019
,
0x151A00FD
,
0x151B0019
,
0x151E00FD
,
0x151F00E8
,
0x15200019
,
0x152C00E8
,
0x152D0019
,
0x153200FD
,
0x15330019
,
0x153500E8
,
0x15370019
,
0x153800E8
,
0x15390019
,
0x153A10E8
,
0x153B1019
,
0x153C0019
,
0x153D00FE
,
0x153E00E8
,
0x153F00FE
,
0x154300E8
,
0x154600FE
,
0x154700E8
,
0x154900FE
,
0x154F00E8
,
0x155100FE
,
0x15520019
,
0x155300FD
,
0x15570019
,
0x155800FE
,
0x155900E8
,
0x155A00FE
,
0x155B00E8
,
0x155E00FE
,
0x156400E8
,
0x156700FE
,
0x156C0019
,
0x156E08E8
,
0x156F0123
,
0x15700019
,
0x157100E8
,
0x15720124
,
0x157300E8
,
0x15740019
,
0x157600FD
,
0x157700E8
,
0x15780019
,
0x157C00FE
,
0x157E0019
,
0x15800054
,
0x158A0078
,
0x16000096
,
0x16180098
,
0x16300078
,
0x16400063
,
0x16720055
,
0x16730054
,
0x16760078
,
0x167D0006
,
0x16800125
,
0x16930078
,
0x16980071
,
0x16B30078
,
0x16C00071
,
0x16CC0078
,
0x16D00071
,
0x16F00078
,
0x17000006
,
0x17010126
,
0x17030006
,
0x170500E0
,
0x17060126
,
0x17070006
,
0x170C0078
,
0x170E0126
,
0x170F0078
,
0x17400054
,
0x174D0078
,
0x174E0054
,
0x177A0078
,
0x17801054
,
0x17EB0078
,
0x17F80054
,
0x17FE0078
,
0x18008805
,
0x18010006
,
0x18020054
,
0x18030071
,
0x18040009
,
0x18090054
,
0x180A0009
,
0x180E0099
,
0x180F00BF
,
0x18100054
,
0x18110127
,
0x18120128
,
0x18130129
,
0x1814012A
,
0x18150083
,
0x18180099
,
0x18190081
,
0x181B1054
,
0x181C112B
,
0x181D112C
,
0x181E0071
,
0x181F0054
,
0x18200078
,
0x18210071
,
0x18260871
,
0x18320071
,
0x18380871
,
0x18390071
,
0x183A0871
,
0x183C0071
,
0x183D0871
,
0x183F0071
,
0x184A0871
,
0x184B0071
,
0x184C0078
,
0x184D0083
,
0x184E1037
,
0x184F0881
,
0x18500099
,
0x18510071
,
0x18560871
,
0x18620071
,
0x18680871
,
0x18690071
,
0x186A0871
,
0x186C0071
,
0x186D0871
,
0x186F0071
,
0x187A0871
,
0x187B0071
,
0x187C0871
,
0x187E0081
,
0x187F0881
,
0x18800078
,
0x18830071
,
0x18970078
,
0x18991071
,
0x18C80094
,
0x18C978AD
,
0x18CA78AE
,
0x18CB7894
,
0x18D00071
,
0x18DC0078
,
0x18E00054
,
0x18E80078
,
0x18F80071
,
0x19001094
,
0x190F1054
,
0x191010AD
,
0x191110AE
,
0x1912112D
,
0x1913112E
,
0x1914112F
,
0x19151094
,
0x19220078
,
0x19286854
,
0x19291930
,
0x192A1931
,
0x192B1932
,
0x192C1933
,
0x192D1934
,
0x192E1935
,
0x192F1936
,
0x19301894
,
0x193E1854
,
0x194018AD
,
0x194118AE
,
0x1942192D
,
0x1943192E
,
0x1944192F
,
0x19451894
,
0x19591937
,
0x195A1938
,
0x195B1939
,
0x195C193A
,
0x195D193B
,
0x195E193C
,
0x195F193D
,
0x19601094
,
0x19666854
,
0x19681894
,
0x19806894
,
0x19AC1094
,
0x19B96894
,
0x19BC6854
,
0x19BE6894
,
0x19EF6854
,
0x19F01094
,
0x1A000071
,
0x26DB0078
,
0x26E00054
,
0x27000071
,
0x4FDE0078
,
0x50000071
,
0x52470078
,
0x52480054
,
0x52640078
,
0x53800037
,
0x538C0078
,
0x54000071
,
0x540100C8
,
0x54020071
,
0x54030083
,
0x54040071
,
0x541200A7
,
0x54130083
,
0x54140054
,
0x54160078
,
0x56000071
,
0x6BD20078
,
0x6C00013E
,
0x7000013F
,
0x7C800871
,
0x7D070071
,
0x7D080871
,
0x7D0A0071
,
0x7D0B0871
,
0x7D120071
,
0x7D130871
,
0x7D140071
,
0x7D150871
,
0x7D170078
,
0x7D180871
,
0x7D360078
,
0x7D380871
,
0x7D6D0078
,
0x7D801055
,
0x7D840078
,
0x7D8A1055
,
0x7D8C0078
,
0x7D8F0083
,
0x7D90289B
,
0x7D95089B
,
0x7DA10078
,
0x7DA2089B
,
0x7DA8409E
,
0x7DAA389E
,
0x7DAB409E
,
0x7DAC389E
,
0x7DAD409E
,
0x7DAE389E
,
0x7DAF409E
,
0x7DB0389E
,
0x7DB1409E
,
0x7DB2389E
,
0x7DB3409E
,
0x7DB4389E
,
0x7DB5409E
,
0x7DB6389E
,
0x7DB7409E
,
0x7DB8389E
,
0x7DB9409E
,
0x7DBA389E
,
0x7DBB409E
,
0x7DBC389E
,
0x7DBD409E
,
0x7DBE389E
,
0x7DBF409E
,
0x7DC0389E
,
0x7DC1409E
,
0x7DC8389E
,
0x7DC9409E
,
0x7DCA389E
,
0x7DCB409E
,
0x7DCC389E
,
0x7DCD409E
,
0x7DCE389E
,
0x7DCF409E
,
0x7DD1389E
,
0x7DD2409E
,
0x7DD4389E
,
0x7DD5409E
,
0x7DD6389E
,
0x7DD7409E
,
0x7DD90078
,
0x7DEA209E
,
0x7DEB489E
,
0x7DEC209E
,
0x7DEF409E
,
0x7DF3389E
,
0x7DF5409E
,
0x7DFC389E
,
0x7DFD209E
,
0x7DFE409E
,
0x7DFF389E
,
0x7E00409E
,
0x7E32209E
,
0x7E4C389E
,
0x7E70489E
,
0x7E7B409E
,
0x7E89209E
,
0x7E97389E
,
0x7E9A489E
,
0x7E9E209E
,
0x7E9F00B4
,
0x7EA00078
,
0x7EA8389E
,
0x7EAC209E
,
0x7EAE389E
,
0x7EAF209E
,
0x7EB0389E
,
0x7EB1209E
,
0x7EB4389E
,
0x7EB5209E
,
0x7EB8389E
,
0x7EBA209E
,
0x7EC3389E
,
0x7EC80078
,
0x7EC9389E
,
0x7ECB209E
,
0x7ECC389E
,
0x7ECD209E
,
0x7EDA389E
,
0x7EDB209E
,
0x7EDC389E
,
0x7EDE209E
,
0x7EE2389E
,
0x7EE3209E
,
0x7EE40078
,
0x7EF8409E
,
0x7EFE4140
,
0x7EFF0078
,
0x7F000083
,
0x7F088006
,
0x7F0C80BF
,
0x7F0D0078
,
0x7F100083
,
0x7F120078
,
0x7F188006
,
0x7F198099
,
0x7F1A8038
,
0x7F1B80BF
,
0x7F230006
,
0x7F2480BF
,
0x7F251006
,
0x7F271038
,
0x7F28600C
,
0x7F2A6006
,
0x7F2C6099
,
0x7F2D60BF
,
0x7F306006
,
0x7F31600B
,
0x7F326019
,
0x7F346006
,
0x7F356007
,
0x7F360078
,
0x7F38409E
,
0x7F41209E
,
0x7F46489E
,
0x7F47209E
,
0x7F49489E
,
0x7F4A209E
,
0x7F4C489E
,
0x7F4D209E
,
0x7F4E489E
,
0x7F4F209E
,
0x7F50489E
,
0x7F51209E
,
0x7F52489E
,
0x7F53209E
,
0x7F54489E
,
0x7F55209E
,
0x7F5A489E
,
0x7F5B209E
,
0x7F5C489E
,
0x7F5D209E
,
0x7F5E489E
,
0x7F5F209E
,
0x7F60489E
,
0x7F61209E
,
0x7F62489E
,
0x7F63209E
,
0x7F64489E
,
0x7F65209E
,
0x7F66489E
,
0x7F67209E
,
0x7F68489E
,
0x7F69209E
,
0x7F6A489E
,
0x7F6B209E
,
0x7F6C489E
,
0x7F6D209E
,
0x7F6E489E
,
0x7F6F209E
,
0x7F70489E
,
0x7F71209E
,
0x7F72489E
,
0x7F73209E
,
0x7F74489E
,
0x7F75209E
,
0x7F76489E
,
0x7F77209E
,
0x7F7A489E
,
0x7F7B209E
,
0x7F7F0078
,
0x7F818806
,
0x7F828808
,
0x7F838806
,
0x7F848809
,
0x7F858806
,
0x7F86880C
,
0x7F88880E
,
0x7F898810
,
0x7F8A8812
,
0x7F8B8814
,
0x7F8C8816
,
0x7F8D880C
,
0x7F8E8818
,
0x7F8F881A
,
0x7F908806
,
0x7F918860
,
0x7F9E8806
,
0x7F9F8837
,
0x7FA18861
,
0x7FAE8819
,
0x7FB0880A
,
0x7FB15009
,
0x7FB25006
,
0x7FB35071
,
0x7FB85081
,
0x7FB95071
,
0x7FCF5081
,
0x7FD05071
,
0x7FE00078
,
0x7FE15071
,
0x7FE40078
,
0x7FE55071
,
0x7FE80078
,
0x7FE95071
,
0x7FEC0078
,
0x7FED5071
,
0x7FEF0078
,
0x7FF08808
,
0x7FF18819
,
0x7FF28854
,
0x7FF38808
,
0x7FF45054
,
0x7FF55019
,
0x7FF75054
,
0x7FF80078
,
0x7FFD0141
,
0x7FFE0054
,
0x7FFF0078
,
0x80000071
,
0x80060078
,
0x80070071
,
0x801F0078
,
0x80200071
,
0x80270078
,
0x80280071
,
0x802F0078
,
0x80400071
,
0x807E0078
,
0x80800097
,
0x80810094
,
0x80820078
,
0x808400B6
,
0x808500B7
,
0x808600B8
,
0x808700B9
,
0x808800B0
,
0x808900BA
,
0x808A00BB
,
0x808B00BC
,
0x808C00BD
,
0x808D0142
,
0x808E0143
,
0x808F0144
,
0x80900145
,
0x809100B1
,
0x80920146
,
0x80930147
,
0x80940148
,
0x80950149
,
0x8096014A
,
0x8097014B
,
0x8098014C
,
0x8099014D
,
0x809A0078
,
0x809C0094
,
0x80A0014E
,
0x80A1014F
,
0x80A20150
,
0x80A30151
,
0x80A40152
,
0x80A50150
,
0x80A60153
,
0x80A70151
,
0x80A80154
,
0x80A90155
,
0x80AA0156
,
0x80AB0157
,
0x80AC014F
,
0x80AE0158
,
0x80B00154
,
0x80B30150
,
0x80B50155
,
0x80B60153
,
0x80B90151
,
0x80BA0150
,
0x80BB005F
,
0x80BD0054
,
0x80C500C3
,
0x80C60078
,
0x81800071
,
0x819000AD
,
0x819100B0
,
0x81920078
,
0x81980071
,
0x81A50159
,
0x81A60078
,
0x81C00071
,
0x81CF0078
,
0x81D00071
,
0x81E20078
,
0x81E40071
,
0x81E80094
,
0x81E90158
,
0x81EA015A
,
0x81EB0078
,
0x8200015B
,
0x8214015C
,
0x82280071
,
0x824F0078
,
0x825000A8
,
0x825100A9
,
0x825200AA
,
0x825300AB
,
0x825400AC
,
0x82550078
,
0x8400009B
,
0x84030078
,
0x8404009B
,
0x841B0078
,
0x841C009B
,
0x841D0078
,
0x841E009B
,
0x841F0078
,
0x8500009B
,
0x85010083
,
0x85020078
,
0x85030083
,
0x85040078
,
0x85060083
,
0x8508009B
,
0x850A0078
,
0x850B009B
,
0x850C0078
,
0x850D009B
,
0x851A0078
,
0x851C0083
,
0x851E0078
,
0x8520015D
,
0x8521015E
,
0x8522015F
,
0x85230160
,
0x85240078
,
0x8528009A
,
0x852D0078
,
0xE8000094
,
0xE87B0078
,
0xE8800094
,
0xE8940078
,
0xE8950094
,
0xE8AF0894
,
0xE8B300A7
,
0xE8B40083
,
0xE8B50094
,
0xE8B700A7
,
0xE8BA0057
,
0xE8BE0083
,
0xE8C20094
,
0xE8C30083
,
0xE8C60094
,
0xE8D50083
,
0xE8D70094
,
0xE8DE0894
,
0xE8E10094
,
0xE8EF0078
,
0xE9000054
,
0xE9210083
,
0xE9230078
,
0xE9800054
,
0xE9AC0078
,
0xEA002877
,
0xEA0D2855
,
0xEA1A2877
,
0xEA272855
,
0xEA342877
,
0xEA412855
,
0xEA4E2877
,
0xEA500078
,
0xEA512877
,
0xEA520078
,
0xEA532877
,
0xEA540078
,
0xEA552877
,
0xEA5B2855
,
0xEA5D0078
,
0xEA5F2855
,
0xEA620078
,
0xEA632855
,
0xEA682877
,
0xEA752855
,
0xEA822877
,
0xEA830078
,
0xEA842877
,
0xEA860078
,
0xEA872877
,
0xEA8F2855
,
0xEA9C2877
,
0xEA9D0078
,
0xEA9E2877
,
0xEAA40078
,
0xEAA52877
,
0xEAA92855
,
0xEAB62877
,
0xEAC32855
,
0xEAD02877
,
0xEADD2855
,
0xEAEA2877
,
0xEAF72855
,
0xEB042877
,
0xEB112855
,
0xEB1E2877
,
0xEB2B2855
,
0xEB382877
,
0xEB452855
,
0xEB530078
,
0xEB542877
,
0xEB612855
,
0xEB712877
,
0xEB7E2855
,
0xEB8E2877
,
0xEB9B2855
,
0xEBAB2877
,
0xEBB82855
,
0xEBC82877
,
0xEBD52855
,
0xEBE50078
,
0xEBE7280E
,
0xEBE82810
,
0xEBE92812
,
0xEBEA2814
,
0xEBEB2816
,
0xEBEC280E
,
0xEBED2810
,
0xEBEE2812
,
0xEBEF2814
,
0xEBF02816
,
0xEBF1280E
,
0xEBF22810
,
0xEBF32812
,
0xEBF42814
,
0xEBF52816
,
0xEBF6280E
,
0xEBF72810
,
0xEBF82812
,
0xEBF92814
,
0xEBFA2816
,
0xEBFB280E
,
0xEBFC2810
,
0xEBFD2812
,
0xEBFE2814
,
0xEBFF2816
,
0xEC000078
]
;
immutable
uint
[
]
a1
=
[
0x00000071
,
0x536C0078
,
0x7C000871
,
0x7D0F0078
]
;
immutable
uint
[
]
a7
=
[
0x00100057
,
0x00400078
,
0x00800083
,
0x00F80078
,
0x8000013F
,
0xFFFF0078
]
;
immutable
uint
[
]
a8
=
[
0x0000013F
,
0x7FFF0078
]
;
immutable
uint
[
]
a16
=
[
0x00800865
,
0x00880065
,
0x00890865
,
0x00930065
,
0x00940865
,
0x00980161
,
0x00991065
,
0x009A0865
,
0x009C0863
,
0x009F1063
,
0x00A00063
,
0x00A10863
,
0x00A41055
,
0x00A50065
,
0x00A60865
,
0x00A90065
,
0x00AA0865
,
0x00B30065
,
0x00B40865
,
0x00BC0863
,
0x00BF1162
,
0x00C00163
,
0x00C10065
,
0x00C30063
,
0x00C40068
,
0x00C50063
,
0x00C60055
,
0x00C70164
,
0x00C80063
,
0x00C90068
,
0x00CA0165
,
0x00CB0166
,
0x00CC0065
,
0x00CD0055
,
0x00CE0167
,
0x00CF0168
,
0x00D00865
,
0x00D10065
,
0x00D30063
,
0x00D4006F
,
0x00D50055
,
0x00D60065
,
0x00D70863
,
0x00D80070
,
0x00D90063
,
0x00DB0169
,
0x00DC0065
,
0x00DD0071
,
0x00DE0065
,
0x00DF016A
,
0x00E00071
,
0x00E21074
,
0x00E31072
,
0x00E41073
,
0x00E51074
,
0x00E60863
,
0x00EE016B
,
0x00EF0865
,
0x00F20065
,
0x00F30865
,
0x00F81072
,
0x00F91073
,
0x00FA0865
,
0x00FB016C
,
0x00FC0865
,
0x010E0065
,
0x010F0865
,
0x01100055
,
0x01110065
,
0x01130865
,
0x011A0055
,
0x011D0063
,
0x011E016D
,
0x011F0055
,
0x0120016E
,
0x01210078
,
0x01280055
,
0x0129016F
,
0x012A0055
,
0x012B007A
,
0x012C0170
,
0x012D0171
,
0x012E0055
,
0x01310172
,
0x01320055
,
0x01340173
,
0x01350055
,
0x01370173
,
0x01380055
,
0x013A0174
,
0x013B0055
,
0x0141007D
,
0x01420055
,
0x0145007E
,
0x01460055
,
0x01587881
,
0x015C0082
,
0x015D0081
,
0x01610037
,
0x01630082
,
0x01680081
,
0x01690037
,
0x016C1037
,
0x016F0037
,
0x01707881
,
0x01720037
,
0x01800083
,
0x01A00883
,
0x01A20175
,
0x01A30083
,
0x01B80078
,
0x01BA0037
,
0x01BB0078
,
0x01C20837
,
0x01C30806
,
0x01C40885
,
0x01C50078
,
0x01C70887
,
0x01C80060
,
0x01D50860
,
0x01D60889
,
0x01D80061
,
0x01E50861
,
0x01E6088C
,
0x01E70078
,
0x01E81176
,
0x01E90877
,
0x01EA1177
,
0x01EB0055
,
0x01EC0065
,
0x01F81093
,
0x01F90055
,
0x01FA1178
,
0x01FB0063
,
0x01FC10D8
,
0x01FD0065
,
0x01FE0077
,
0x02000892
,
0x02020092
,
0x02030892
,
0x02040092
,
0x02060892
,
0x02070092
,
0x02080060
,
0x020C0860
,
0x020D0060
,
0x02180061
,
0x021C0861
,
0x021D0061
,
0x02280893
,
0x022A0093
,
0x022B0893
,
0x022C0093
,
0x022E0893
,
0x022F0093
,
0x02300065
,
0x023B0865
,
0x023C0065
,
0x02410083
,
0x02430078
,
0x02440095
,
0x02450065
,
0x02600863
,
0x02610063
,
0x02670078
,
0x02680865
,
0x026A0065
,
0x026B0865
,
0x026C0065
,
0x026D0865
,
0x02700065
,
0x02710865
,
0x02740065
,
0x02750865
,
0x027B0065
,
0x027C0865
,
0x027D0078
,
0x02800065
,
0x02880078
,
0x02980096
,
0x02AB0078
,
0x02AC0081
,
0x02AD0097
,
0x02B00098
,
0x02C31055
,
0x02C40097
,
0x02C50078
,
0x02C80083
,
0x02E1009A
,
0x02E20083
,
0x02E40078
,
0x02E8009B
,
0x02F50078
,
0x02F8009B
,
0x02F9009A
,
0x02FA0078
,
0x0300009C
,
0x03020078
,
0x03050140
,
0x0306009D
,
0x03070054
,
0x03080083
,
0x030B0078
,
0x030D009D
,
0x030E0078
,
0x030F009D
,
0x0310009E
,
0x0311089E
,
0x0313009E
,
0x031D0078
,
0x0320009E
,
0x03250083
,
0x032F0078
,
0x03300179
,
0x0331017A
,
0x0332017B
,
0x0333017C
,
0x0334017D
,
0x033500A5
,
0x0336009D
,
0x0337009E
,
0x033A109E
,
0x033C009E
,
0x0369089E
,
0x036A009E
,
0x036B0083
,
0x036E009C
,
0x036F0083
,
0x0372009F
,
0x03730083
,
0x03740054
,
0x03750083
,
0x0377009E
,
0x0378000F
,
0x03790011
,
0x037A0013
,
0x037B0015
,
0x037C0017
,
0x037D009E
,
0x037E00A6
,
0x037F009E
,
0x0380009D
,
0x03870057
,
0x03880083
,
0x0389009E
,
0x03980083
,
0x03A50078
,
0x03A6009E
,
0x03B70078
,
0x03C0009E
,
0x03D30083
,
0x03D8009E
,
0x03D90078
,
0x04800083
,
0x048100A7
,
0x04820071
,
0x04940871
,
0x04950071
,
0x04980871
,
0x04990071
,
0x049D0078
,
0x049E0071
,
0x049F00A7
,
0x04A00083
,
0x04A400A7
,
0x04A60083
,
0x04A70078
,
0x04A80083
,
0x04AA0078
,
0x04AC0871
,
0x04B00071
,
0x04B10083
,
0x04B20097
,
0x04B3017E
,
0x04B4017F
,
0x04B50180
,
0x04B60181
,
0x04B70182
,
0x04B80078
,
0x04BE0071
,
0x04BF0078
,
0x04C00083
,
0x04C100A7
,
0x04C20071
,
0x04C60078
,
0x04C70071
,
0x04C80078
,
0x04C90071
,
0x04D40078
,
0x04D50071
,
0x04D80078
,
0x04DB0071
,
0x04DD0078
,
0x04DE0071
,
0x04DF00A7
,
0x04E00083
,
0x04E20078
,
0x04E300A7
,
0x04E40078
,
0x04E508A7
,
0x04E60083
,
0x04E70078
,
0x04EB00A7
,
0x04EC0078
,
0x04EE0871
,
0x04F00071
,
0x04F10083
,
0x04F20078
,
0x04F3017E
,
0x04F4017F
,
0x04F50180
,
0x04F60181
,
0x04F70182
,
0x04F80071
,
0x04F90008
,
0x04FA00B6
,
0x04FB00B7
,
0x04FC0183
,
0x04FD0078
,
0x05000083
,
0x050100A7
,
0x05020071
,
0x05050078
,
0x05070071
,
0x05080078
,
0x05090071
,
0x05140078
,
0x05150071
,
0x05180078
,
0x05190871
,
0x051A0071
,
0x051B0078
,
0x051C0071
,
0x051D0078
,
0x051F00A7
,
0x05200083
,
0x05210078
,
0x05230083
,
0x05240078
,
0x05250083
,
0x05270078
,
0x052C0871
,
0x052E0078
,
0x0533017E
,
0x0534017F
,
0x05350180
,
0x05360181
,
0x05370182
,
0x05380083
,
0x05390071
,
0x053A0078
,
0x05400083
,
0x054100A7
,
0x05420071
,
0x05540078
,
0x05550071
,
0x05580078
,
0x05590071
,
0x055D0078
,
0x055E0071
,
0x055F00A7
,
0x05600083
,
0x056400A7
,
0x05660083
,
0x05670078
,
0x05700071
,
0x05710083
,
0x05720078
,
0x0573017E
,
0x0574017F
,
0x05750180
,
0x05760181
,
0x05770182
,
0x05780008
,
0x05790078
,
0x05800083
,
0x058100A7
,
0x05820071
,
0x05860078
,
0x05870071
,
0x05880078
,
0x05890071
,
0x05940078
,
0x05950071
,
0x05980078
,
0x05990071
,
0x059D0078
,
0x059E0071
,
0x059F0083
,
0x05A20078
,
0x05A300A7
,
0x05A40078
,
0x05A508A7
,
0x05A60083
,
0x05A70078
,
0x05AB00A7
,
0x05AC0078
,
0x05AE0871
,
0x05AF0071
,
0x05B10078
,
0x05B3017E
,
0x05B4017F
,
0x05B50180
,
0x05B60181
,
0x05B70182
,
0x05B80071
,
0x05B90078
,
0x05C10071
,
0x05C50078
,
0x05C70071
,
0x05C80078
,
0x05C90071
,
0x05CB0078
,
0x05CC0071
,
0x05CD0078
,
0x05CF0071
,
0x05D00078
,
0x05D10071
,
0x05D20078
,
0x05D40071
,
0x05D50078
,
0x05D70071
,
0x05DD0078
,
0x05DF00A7
,
0x05E10078
,
0x05E300A7
,
0x05E40078
,
0x05E508A7
,
0x05E60083
,
0x05E70078
,
0x05EB00A7
,
0x05EC0078
,
0x05F3017E
,
0x05F4017F
,
0x05F50180
,
0x05F60181
,
0x05F70182
,
0x05F80184
,
0x05F90054
,
0x05FC0008
,
0x05FD0078
,
0x060000A7
,
0x06020071
,
0x06060078
,
0x06070071
,
0x06080078
,
0x06090071
,
0x06140078
,
0x06150071
,
0x061D0078
,
0x061F0083
,
0x062000A7
,
0x06220078
,
0x06230083
,
0x06240078
,
0x06250083
,
0x06270078
,
0x062A0083
,
0x062B0078
,
0x06300071
,
0x06310078
,
0x0633017E
,
0x0634017F
,
0x06350180
,
0x06360181
,
0x06370182
,
0x06380078
,
0x064100A7
,
0x06420071
,
0x06460078
,
0x06470071
,
0x06480078
,
0x06490071
,
0x06540078
,
0x06550071
,
0x065D0078
,
0x065E0071
,
0x065F00B2
,
0x066000A7
,
0x06620078
,
0x066308A7
,
0x06640078
,
0x066508A7
,
0x06660083
,
0x06670078
,
0x066A00A7
,
0x066B0078
,
0x06700071
,
0x06710078
,
0x0673017E
,
0x0674017F
,
0x06750180
,
0x06760181
,
0x06770182
,
0x06780078
,
0x068100A7
,
0x06820071
,
0x06860078
,
0x06870071
,
0x06880078
,
0x06890071
,
0x06940078
,
0x06950071
,
0x069D0078
,
0x069F00A7
,
0x06A00083
,
0x06A20078
,
0x06A300A7
,
0x06A40078
,
0x06A508A7
,
0x06A60083
,
0x06A70078
,
0x06AB00A7
,
0x06AC0078
,
0x06B00071
,
0x06B10078
,
0x06B3017E
,
0x06B4017F
,
0x06B50180
,
0x06B60181
,
0x06B70182
,
0x06B80078
,
0x06C100A7
,
0x06C20071
,
0x06CB0078
,
0x06CD0071
,
0x06DF0078
,
0x06E00071
,
0x06E30078
,
0x06E700A7
,
0x06E90083
,
0x06EA0078
,
0x06EC00A7
,
0x06EE08A7
,
0x06EF00A7
,
0x06F00078
,
0x06F900A7
,
0x06FA0078
,
0x07000071
,
0x07180083
,
0x07191071
,
0x071A0083
,
0x071D0078
,
0x071F0008
,
0x07200071
,
0x07230083
,
0x07270097
,
0x0728017E
,
0x0729017F
,
0x072A0180
,
0x072B0181
,
0x072C0182
,
0x072D0097
,
0x072E0078
,
0x07400071
,
0x07410078
,
0x07430071
,
0x07440078
,
0x07460071
,
0x07470078
,
0x074A0071
,
0x07540078
,
0x07550071
,
0x07580083
,
0x07591071
,
0x075A0083
,
0x075E0071
,
0x075F0078
,
0x07600071
,
0x07620078
,
0x07640083
,
0x07670078
,
0x0768017E
,
0x0769017F
,
0x076A0180
,
0x076B0181
,
0x076C0182
,
0x076D0078
,
0x076E1071
,
0x076F0078
,
0x07800094
,
0x07820097
,
0x07890094
,
0x078C0083
,
0x078D0094
,
0x0790017E
,
0x0791017F
,
0x07920180
,
0x07930181
,
0x07940182
,
0x079500B3
,
0x079A0083
,
0x079D00BF
,
0x079F00A7
,
0x07A00071
,
0x07A10871
,
0x07A20071
,
0x07A60871
,
0x07A70071
,
0x07AB0871
,
0x07AC0071
,
0x07B40871
,
0x07B50078
,
0x07B80083
,
0x07B90883
,
0x07BB1083
,
0x07BD0083
,
0x07BF00A7
,
0x07C00883
,
0x07C10083
,
0x07C20097
,
0x07C30083
,
0x07C40071
,
0x07C60078
,
0x07C80083
,
0x07C90883
,
0x07CA0083
,
0x07CE0883
,
0x07CF0083
,
0x07D30883
,
0x07D40083
,
0x07DC0883
,
0x07DD0083
,
0x07DE0078
,
0x07DF0094
,
0x07E60078
,
0x07E70094
,
0x07E80097
,
0x07E90078
,
0x08000071
,
0x08150078
,
0x08160083
,
0x081800A7
,
0x08190078
,
0x081B0083
,
0x081D0078
,
0x0820017E
,
0x0821017F
,
0x08220180
,
0x08230181
,
0x08240182
,
0x08250097
,
0x08280071
,
0x082B00A7
,
0x082C0083
,
0x082D0078
,
0x085000B5
,
0x08630078
,
0x08680071
,
0x087D0097
,
0x087E0078
,
0x08800071
,
0x08AD0078
,
0x08AF0071
,
0x08D10078
,
0x08D40071
,
0x08FD0078
,
0x09000071
,
0x09240078
,
0x09250071
,
0x09270078
,
0x09280071
,
0x092B0078
,
0x092D0071
,
0x092F0078
,
0x09300071
,
0x09440078
,
0x09450071
,
0x09470078
,
0x09480071
,
0x09580078
,
0x09590071
,
0x095B0078
,
0x095C0071
,
0x095F0078
,
0x09610071
,
0x09630078
,
0x09640071
,
0x096B0078
,
0x096C0071
,
0x09880078
,
0x09890071
,
0x098B0078
,
0x098C0071
,
0x09AD0078
,
0x09AF0083
,
0x09B00097
,
0x09B400AD
,
0x09B500AE
,
0x09B6012D
,
0x09B7012E
,
0x09B8012F
,
0x09B90185
,
0x09BA0186
,
0x09BB0187
,
0x09BC0188
,
0x09BD0184
,
0x09BE0078
,
0x09C00071
,
0x09C80054
,
0x09CD0078
,
0x09D00071
,
0x09FA0078
,
0x0A000071
,
0x0B360097
,
0x0B370071
,
0x0B3B0078
,
0x0B400071
,
0x0B4D00B4
,
0x0B4E0078
,
0x0B500071
,
0x0B750097
,
0x0B770189
,
0x0B780078
,
0x0B800071
,
0x0B860078
,
0x0B870071
,
0x0B890083
,
0x0B8A0078
,
0x0B900071
,
0x0B990083
,
0x0B9A0097
,
0x0B9B0078
,
0x0BA00071
,
0x0BA90083
,
0x0BAA0078
,
0x0BB00071
,
0x0BB60078
,
0x0BB70071
,
0x0BB80078
,
0x0BB90083
,
0x0BBA0078
,
0x0BC00071
,
0x0BDA00C2
,
0x0BDB0083
,
0x0BDF00A7
,
0x0BE40083
,
0x0BEA0097
,
0x0BEB0081
,
0x0BEC0097
,
0x0BED0008
,
0x0BEE0083
,
0x0BEF0078
,
0x0BF0017E
,
0x0BF1017F
,
0x0BF20180
,
0x0BF30181
,
0x0BF40182
,
0x0BF50078
,
0x0BF80106
,
0x0BF90107
,
0x0BFA0108
,
0x0BFB0109
,
0x0BFC010A
,
0x0BFD0078
,
0x0C000006
,
0x0C050083
,
0x0C070078
,
0x0C08017E
,
0x0C09017F
,
0x0C0A0180
,
0x0C0B0181
,
0x0C0C0182
,
0x0C0D0078
,
0x0C100071
,
0x0C210081
,
0x0C220071
,
0x0C3C0078
,
0x0C400071
,
0x0C540083
,
0x0C550078
,
0x0C800071
,
0x0C8E0078
,
0x0C900083
,
0x0C9100A7
,
0x0C930083
,
0x0C9400C8
,
0x0C960078
,
0x0C9800A7
,
0x0C9C0083
,
0x0C9E0078
,
0x0CA20006
,
0x0CA3017E
,
0x0CA4017F
,
0x0CA50180
,
0x0CA60181
,
0x0CA70182
,
0x0CA80071
,
0x0CB70078
,
0x0CB80071
,
0x0CBA0078
,
0x0CC00071
,
0x0CD50078
,
0x0CD800A7
,
0x0CE00071
,
0x0CE400A7
,
0x0CE50078
,
0x0CE8017E
,
0x0CE9017F
,
0x0CEA0180
,
0x0CEB0181
,
0x0CEC0182
,
0x0CED0078
,
0x0CEF0006
,
0x0CF00054
,
0x0D000071
,
0x0D0B0083
,
0x0D0C00A7
,
0x0D0E0078
,
0x0D0F0097
,
0x0D100078
,
0x0E800055
,
0x0E967881
,
0x0E970081
,
0x0E987881
,
0x0E9D0081
,
0x0E9E7881
,
0x0EB17055
,
0x0EB50055
,
0x0ECD7881
,
0x0EE00083
,
0x0EE20078
,
0x0F000865
,
0x0F4B0855
,
0x0F4D098A
,
0x0F4E0078
,
0x0F500865
,
0x0F7D0078
,
0x0F8008C9
,
0x0F8408CA
,
0x0F8808C9
,
0x0F8B0078
,
0x0F8C08CA
,
0x0F8F0078
,
0x0F9008C9
,
0x0F9408CA
,
0x0F9808C9
,
0x0F9C08CA
,
0x0FA008C9
,
0x0FA30078
,
0x0FA408CA
,
0x0FA70078
,
0x0FA808C9
,
0x0FAC08CA
,
0x0FB008C9
,
0x0FB408CA
,
0x0FB808CB
,
0x0FB908CC
,
0x0FBB08CD
,
0x0FBC08CE
,
0x0FBD08CF
,
0x0FBE08D0
,
0x0FBF0078
,
0x0FC008C9
,
0x0FC408D1
,
0x0FC808C9
,
0x0FCC08D1
,
0x0FD008C9
,
0x0FD408D1
,
0x0FD808C9
,
0x0FD9098B
,
0x0FDA0078
,
0x0FDB0855
,
0x0FDC08CA
,
0x0FDD08D2
,
0x0FDE1037
,
0x0FE00837
,
0x0FE1098B
,
0x0FE20078
,
0x0FE30855
,
0x0FE408D5
,
0x0FE60837
,
0x0FE808C9
,
0x0FE90855
,
0x0FEA0078
,
0x0FEB0855
,
0x0FEC08CA
,
0x0FED08D6
,
0x0FEE0837
,
0x0FF008C9
,
0x0FF10855
,
0x0FF20890
,
0x0FF30855
,
0x0FF408CA
,
0x0FF508D7
,
0x0FF60837
,
0x0FF80078
,
0x0FF9098B
,
0x0FFA0078
,
0x0FFB0855
,
0x0FFC08D9
,
0x0FFD08DA
,
0x0FFE0837
,
0x0FFF0078
,
0x10000805
,
0x10011005
,
0x10035805
,
0x10041005
,
0x10050057
,
0x1007018C
,
0x10085899
,
0x10090099
,
0x100B1006
,
0x100C018D
,
0x100D00DB
,
0x100E018D
,
0x100F00DB
,
0x10100006
,
0x10121006
,
0x10130006
,
0x1014018E
,
0x1015018F
,
0x10160190
,
0x10175853
,
0x10180007
,
0x10191007
,
0x101A0006
,
0x101B1006
,
0x101C0126
,
0x101D0006
,
0x101F0038
,
0x10200006
,
0x10220009
,
0x10231006
,
0x10250006
,
0x102B1006
,
0x102C0006
,
0x102F1005
,
0x10300057
,
0x10320078
,
0x10350057
,
0x10387855
,
0x10390078
,
0x103A7910
,
0x103B7911
,
0x103C7912
,
0x103D780B
,
0x103E7809
,
0x103F7855
,
0x1040705D
,
0x1041705B
,
0x10427110
,
0x10437111
,
0x10447112
,
0x1045700B
,
0x10467009
,
0x10470078
,
0x10487081
,
0x104A0078
,
0x10500008
,
0x105B0078
,
0x10680083
,
0x106E0095
,
0x10700083
,
0x10710095
,
0x10720083
,
0x10760078
,
0x10801054
,
0x10831077
,
0x10841054
,
0x10852877
,
0x10872855
,
0x10882877
,
0x10892855
,
0x108A2877
,
0x108B0054
,
0x108C2877
,
0x108F0054
,
0x10901054
,
0x10910054
,
0x10950991
,
0x10962877
,
0x10972855
,
0x10982877
,
0x109A1071
,
0x109C2855
,
0x109D1054
,
0x109E2855
,
0x109F2877
,
0x10A00019
,
0x10A22877
,
0x10A32855
,
0x10A50019
,
0x10A60078
,
0x10A9305F
,
0x10AF3106
,
0x10B01192
,
0x10B11193
,
0x10B21194
,
0x10B31195
,
0x10B41196
,
0x10B51197
,
0x10B61198
,
0x10B71199
,
0x10B8119A
,
0x10B9119B
,
0x10BA119C
,
0x10BB119D
,
0x10BC119E
,
0x10BD119F
,
0x10BE11A0
,
0x10BF11A1
,
0x10C001A2
,
0x10C101A3
,
0x10C20078
,
0x10C80019
,
0x10CA0054
,
0x10CD0819
,
0x10CE0054
,
0x10D10019
,
0x10D20054
,
0x10E60854
,
0x10E70819
,
0x10E80054
,
0x10FA0019
,
0x110000E8
,
0x11020019
,
0x110408FB
,
0x110500FC
,
0x11070019
,
0x110800E8
,
0x11090059
,
0x110A01A4
,
0x110B0019
,
0x110D00E8
,
0x11110019
,
0x111500E8
,
0x111610E8
,
0x111800E8
,
0x111A0019
,
0x111C00E8
,
0x111E00FE
,
0x111F00E8
,
0x112008E8
,
0x112101A5
,
0x112200E8
,
0x112308E8
,
0x112500E8
,
0x11260019
,
0x112900FE
,
0x112B0019
,
0x112F00E8
,
0x11300019
,
0x113200FE
,
0x11360819
,
0x113708FE
,
0x113900FE
,
0x113A08FE
,
0x113B00FE
,
0x113C08FE
,
0x113D00FE
,
0x114008FE
,
0x114100FE
,
0x114208FE
,
0x114300FE
,
0x114408FE
,
0x114500FE
,
0x11460019
,
0x114700FD
,
0x11490019
,
0x115100FE
,
0x11520019
,
0x115300E8
,
0x115401A6
,
0x115608E8
,
0x115800FE
,
0x115C0019
,
0x115F00E8
,
0x11600019
,
0x116400FD
,
0x116601A7
,
0x11670019
,
0x116800FE
,
0x11690019
,
0x116B00FE
,
0x117008FE
,
0x117200FE
,
0x117508FE
,
0x11770019
,
0x117800FE
,
0x11790102
,
0x117A00E8
,
0x117B0103
,
0x117C00E8
,
0x117D0104
,
0x117E0105
,
0x117F00E8
,
0x11800054
,
0x118400FE
,
0x11860054
,
0x119000E8
,
0x11910054
,
0x11940809
,
0x11950054
,
0x119B0094
,
0x11BD0054
,
0x11CA0094
,
0x11CB0054
,
0x11CD0019
,
0x11DA00BF
,
0x11DB0054
,
0x11EE0078
,
0x12000054
,
0x12130078
,
0x12200054
,
0x12250078
,
0x123018C4
,
0x123118C5
,
0x123218C6
,
0x123318C7
,
0x1234191F
,
0x1235191A
,
0x1236191B
,
0x1237191C
,
0x1238191D
,
0x1239191E
,
0x123A10C4
,
0x123B10C5
,
0x123C10C6
,
0x123D10C7
,
0x123E111F
,
0x123F111A
,
0x1240111B
,
0x1241111C
,
0x1242111D
,
0x1243111E
,
0x1244105A
,
0x124510E3
,
0x124610E4
,
0x124710E5
,
0x124811A8
,
0x124911A9
,
0x124A11AA
,
0x124B11AB
,
0x124C11AC
,
0x124D11AD
,
0x124E1094
,
0x125B1918
,
0x12681919
,
0x1275010B
,
0x1276010C
,
0x1277010D
,
0x1278010E
,
0x1279010F
,
0x127A0106
,
0x127B0107
,
0x127C0108
,
0x127D0109
,
0x127E010A
,
0x127F00C3
,
0x12800054
,
0x12DB0019
,
0x12DC0054
,
0x12E00019
,
0x12E10054
,
0x12FC0019
,
0x13000054
,
0x13370019
,
0x13380054
,
0x134E0078
,
0x13500054
,
0x13590078
,
0x13800054
,
0x13820078
,
0x13830054
,
0x13850078
,
0x13860054
,
0x13A90078
,
0x13AC0054
,
0x13AF0078
,
0x13B00054
,
0x13B4000A
,
0x13BB00C4
,
0x13BC00C5
,
0x13BD00C6
,
0x13BE00C7
,
0x13BF011F
,
0x13C000C4
,
0x13C100C5
,
0x13C200C6
,
0x13C300C7
,
0x13C4011F
,
0x13C500C4
,
0x13C600C5
,
0x13C700C6
,
0x13C800C7
,
0x13C9011F
,
0x13CA0078
,
0x13CC0054
,
0x13DF0078
,
0x13E00019
,
0x13E100FD
,
0x13E20009
,
0x13E30078
,
0x13E80019
,
0x13E900E8
,
0x13EA00FD
,
0x13EB0019
,
0x13EE00FD
,
0x13EF0019
,
0x13F100FE
,
0x13F3000A
,
0x13F60078
,
0x13F80019
,
0x14000094
,
0x14800019
,
0x14C10009
,
0x14C601AE
,
0x14C701AF
,
0x14C80009
,
0x14CC0019
,
0x14CD00E8
,
0x14D80019
,
0x14E000FE
,
0x14E100E8
,
0x14E200FE
,
0x14E30019
,
0x14E400E8
,
0x14E50019
,
0x14E700FD
,
0x14E90019
,
0x14EA00FE
,
0x14EB0019
,
0x14EC000A
,
0x14EE0019
,
0x14F000E8
,
0x14F30019
,
0x14F400E8
,
0x14F50019
,
0x14FA01B0
,
0x14FB00E8
,
0x14FC00FE
,
0x14FD0019
,
0x14FE000A
,
0x14FF0019
,
0x150500E8
,
0x150E0019
,
0x150F00E8
,
0x15110019
,
0x151400E8
,
0x151500FD
,
0x15170019
,
0x151A00FE
,
0x151B0019
,
0x151E00FE
,
0x151F0019
,
0x152B00E8
,
0x152C0019
,
0x153200FE
,
0x15330019
,
0x153500E8
,
0x15380019
,
0x153900E8
,
0x153A1019
,
0x153B0019
,
0x153C00FD
,
0x153D00E8
,
0x153E00FD
,
0x154200E8
,
0x154500FD
,
0x154600E8
,
0x154800FD
,
0x154E00E8
,
0x155000FD
,
0x155100E8
,
0x15520019
,
0x155300FE
,
0x155700FD
,
0x155800E8
,
0x155900FD
,
0x155A00E8
,
0x155D00FD
,
0x156300E8
,
0x156600FD
,
0x156B0019
,
0x157101B1
,
0x15730019
,
0x157600FE
,
0x15770019
,
0x157900E8
,
0x157A0019
,
0x157B00FD
,
0x157D00E8
,
0x157F0019
,
0x15800054
,
0x158A0078
,
0x16000096
,
0x16170078
,
0x16180098
,
0x162F0078
,
0x16400065
,
0x16720054
,
0x16750078
,
0x167C0006
,
0x167E005F
,
0x167F0006
,
0x16800125
,
0x16930078
,
0x16980071
,
0x16B30078
,
0x16B77881
,
0x16B80078
,
0x16C00071
,
0x16CB0078
,
0x16D00071
,
0x16D30078
,
0x16D40071
,
0x16D70078
,
0x16D80071
,
0x16DB0078
,
0x16DC0071
,
0x16DF0078
,
0x16E00071
,
0x16E30078
,
0x16E40071
,
0x16E70078
,
0x16E80071
,
0x16EB0078
,
0x16EC0071
,
0x16EF0078
,
0x17000006
,
0x170100E0
,
0x17030006
,
0x17040126
,
0x17050006
,
0x170600E0
,
0x17070006
,
0x170B0099
,
0x170C0078
,
0x170E00E0
,
0x170F0078
,
0x17400054
,
0x174F1054
,
0x17500054
,
0x17791054
,
0x177A0078
,
0x17801054
,
0x17EB0078
,
0x17F80054
,
0x17FE0078
,
0x18000006
,
0x18020081
,
0x180301B2
,
0x1804000A
,
0x18090054
,
0x180A000A
,
0x180E00B4
,
0x180F00BF
,
0x181001B3
,
0x181101B4
,
0x181201B5
,
0x181301B6
,
0x181401B7
,
0x18150083
,
0x18180081
,
0x181B0054
,
0x181C11B8
,
0x181D0081
,
0x181E0006
,
0x181F0054
,
0x18200071
,
0x18320871
,
0x18350071
,
0x18380871
,
0x183A0071
,
0x183B0871
,
0x183D0071
,
0x183E0871
,
0x183F0071
,
0x184B0078
,
0x184C0083
,
0x184D1037
,
0x184E0081
,
0x184F8071
,
0x18500071
,
0x18620871
,
0x18650071
,
0x18680871
,
0x186A0071
,
0x186B0871
,
0x186D0071
,
0x186E0871
,
0x186F0071
,
0x187B0871
,
0x187D0006
,
0x187E0081
,
0x187F8071
,
0x18800078
,
0x18820071
,
0x18960078
,
0x18981071
,
0x18C70078
,
0x18C80094
,
0x18C978B6
,
0x18CA78B7
,
0x18CB7894
,
0x18D00071
,
0x18DC0078
,
0x18E00054
,
0x18E80078
,
0x18F80071
,
0x19001094
,
0x190E1054
,
0x190F0078
,
0x191010B6
,
0x191110B7
,
0x191210B8
,
0x191310B9
,
0x191410B0
,
0x19151094
,
0x19220078
,
0x192819B9
,
0x192919BA
,
0x192A19BB
,
0x192B19BC
,
0x192C19BD
,
0x192D19BE
,
0x192E19BF
,
0x192F19C0
,
0x19301894
,
0x193E1854
,
0x193F0094
,
0x194018B6
,
0x194118B7
,
0x194218B8
,
0x194318B9
,
0x194418B0
,
0x19451894
,
0x195819C1
,
0x195919C2
,
0x195A19C3
,
0x195B19C4
,
0x195C19C5
,
0x195D19C6
,
0x195E19C7
,
0x195F19C8
,
0x19601094
,
0x19666854
,
0x19681894
,
0x197F0078
,
0x19806894
,
0x19AC1094
,
0x19B86894
,
0x19BB6854
,
0x19BD6894
,
0x19EF6854
,
0x19F01094
,
0x19FF6854
,
0x1A000071
,
0x26DB0078
,
0x26E00054
,
0x27000071
,
0x4FDE0078
,
0x50000071
,
0x500A0081
,
0x500B0071
,
0x52460078
,
0x52480054
,
0x52630078
,
0x53800037
,
0x538B0078
,
0x54000071
,
0x54050083
,
0x54060071
,
0x541100A7
,
0x54120083
,
0x541300A7
,
0x54140054
,
0x54160078
,
0x56000071
,
0x6BD20078
,
0x6C00013E
,
0x7000013F
,
0x7C800871
,
0x7D070071
,
0x7D0A0871
,
0x7D0F0071
,
0x7D120871
,
0x7D130071
,
0x7D150871
,
0x7D170078
,
0x7D180871
,
0x7D350078
,
0x7D380871
,
0x7D6D0078
,
0x7D801055
,
0x7D830078
,
0x7D891055
,
0x7D8C0078
,
0x7D8E089B
,
0x7D90289B
,
0x7D94280B
,
0x7D95089B
,
0x7D9B0078
,
0x7D9C089B
,
0x7D9E0078
,
0x7DA0089B
,
0x7DA20078
,
0x7DA3089B
,
0x7DA7109B
,
0x7DA8209E
,
0x7DAA489E
,
0x7DAB209E
,
0x7DAC489E
,
0x7DAD209E
,
0x7DAE489E
,
0x7DAF209E
,
0x7DB0489E
,
0x7DB1209E
,
0x7DB2489E
,
0x7DB3209E
,
0x7DB4489E
,
0x7DB5209E
,
0x7DB6489E
,
0x7DB7209E
,
0x7DB8489E
,
0x7DB9209E
,
0x7DBA489E
,
0x7DBB209E
,
0x7DBC489E
,
0x7DBD209E
,
0x7DBE489E
,
0x7DBF209E
,
0x7DC0489E
,
0x7DC1209E
,
0x7DC8489E
,
0x7DC9209E
,
0x7DCA489E
,
0x7DCB209E
,
0x7DCC489E
,
0x7DCD209E
,
0x7DCE489E
,
0x7DCF209E
,
0x7DD1489E
,
0x7DD2209E
,
0x7DD4489E
,
0x7DD5209E
,
0x7DD6489E
,
0x7DD7209E
,
0x7DD90078
,
0x7DE9409E
,
0x7DEA389E
,
0x7DEB409E
,
0x7DEF209E
,
0x7DF3489E
,
0x7DF5209E
,
0x7DFC409E
,
0x7DFD389E
,
0x7DFE209E
,
0x7DFF489E
,
0x7E00409E
,
0x7E32209E
,
0x7E4B389E
,
0x7E6F489E
,
0x7E7A409E
,
0x7E88209E
,
0x7E96389E
,
0x7E9A489E
,
0x7E9E409E
,
0x7E9F00BF
,
0x7EA00078
,
0x7EA8209E
,
0x7EA9389E
,
0x7EAD209E
,
0x7EAE389E
,
0x7EAF209E
,
0x7EB0389E
,
0x7EB3209E
,
0x7EB5389E
,
0x7EB7209E
,
0x7EB9389E
,
0x7EBA209E
,
0x7EBB389E
,
0x7EBC209E
,
0x7EBE389E
,
0x7EBF209E
,
0x7EC1389E
,
0x7EC2209E
,
0x7EC4389E
,
0x7EC5209E
,
0x7EC6389E
,
0x7EC80078
,
0x7EC9389E
,
0x7ECB209E
,
0x7ECE389E
,
0x7ECF209E
,
0x7EDA389E
,
0x7EDB209E
,
0x7EE1389E
,
0x7EE3209E
,
0x7EE40078
,
0x7EF8409E
,
0x7EFE0054
,
0x7EFF0078
,
0x7F000083
,
0x7F088006
,
0x7F0B80B4
,
0x7F0C8006
,
0x7F0D0078
,
0x7F100083
,
0x7F120078
,
0x7F188099
,
0x7F198038
,
0x7F1A80B4
,
0x7F220006
,
0x7F2380B4
,
0x7F241006
,
0x7F261038
,
0x7F286006
,
0x7F290078
,
0x7F2A600C
,
0x7F2B6006
,
0x7F2C60B4
,
0x7F2F6007
,
0x7F306006
,
0x7F31600D
,
0x7F326019
,
0x7F330078
,
0x7F346008
,
0x7F356006
,
0x7F360078
,
0x7F38489E
,
0x7F39009E
,
0x7F3A0078
,
0x7F3B489E
,
0x7F40409E
,
0x7F45389E
,
0x7F46409E
,
0x7F48389E
,
0x7F49409E
,
0x7F4B389E
,
0x7F4C409E
,
0x7F4D389E
,
0x7F4E409E
,
0x7F4F389E
,
0x7F50409E
,
0x7F51389E
,
0x7F52409E
,
0x7F53389E
,
0x7F54409E
,
0x7F59389E
,
0x7F5A409E
,
0x7F5B389E
,
0x7F5C409E
,
0x7F5D389E
,
0x7F5E409E
,
0x7F5F389E
,
0x7F60409E
,
0x7F61389E
,
0x7F62409E
,
0x7F63389E
,
0x7F64409E
,
0x7F65389E
,
0x7F66409E
,
0x7F67389E
,
0x7F68409E
,
0x7F69389E
,
0x7F6A409E
,
0x7F6B389E
,
0x7F6C409E
,
0x7F6D389E
,
0x7F6E409E
,
0x7F6F389E
,
0x7F70409E
,
0x7F71389E
,
0x7F72409E
,
0x7F73389E
,
0x7F74409E
,
0x7F75389E
,
0x7F76409E
,
0x7F79389E
,
0x7F7A409E
,
0x7F7E0078
,
0x7F7F0057
,
0x7F808806
,
0x7F818807
,
0x7F838806
,
0x7F84880A
,
0x7F85880B
,
0x7F86880D
,
0x7F87880C
,
0x7F88880F
,
0x7F898811
,
0x7F8A8813
,
0x7F8B8815
,
0x7F8C8817
,
0x7F8D8806
,
0x7F8E8819
,
0x7F8F8806
,
0x7F908860
,
0x7F9D8835
,
0x7F9E8836
,
0x7F9F8838
,
0x7FA08861
,
0x7FAD8835
,
0x7FAE8836
,
0x7FAF8809
,
0x7FB05006
,
0x7FB1500A
,
0x7FB25006
,
0x7FB35071
,
0x7FCF5081
,
0x7FD05071
,
0x7FDF0078
,
0x7FE15071
,
0x7FE40078
,
0x7FE55071
,
0x7FE80078
,
0x7FE95071
,
0x7FEC0078
,
0x7FED5071
,
0x7FEE0078
,
0x7FF08808
,
0x7FF18837
,
0x7FF28808
,
0x7FF30078
,
0x7FF45019
,
0x7FF65054
,
0x7FF70078
,
0x7FFC0141
,
0x7FFE0054
,
0x7FFF0078
,
0x80000071
,
0x80130078
,
0x80140071
,
0x801D0078
,
0x801E0071
,
0x80270078
,
0x80280071
,
0x802F0078
,
0x80400071
,
0x807D0078
,
0x80800006
,
0x80810078
,
0x808300AD
,
0x808400AE
,
0x8085012D
,
0x8086012E
,
0x8087012F
,
0x80880185
,
0x80890186
,
0x808A0187
,
0x808B0188
,
0x808C0184
,
0x808D01C9
,
0x808E01CA
,
0x808F01CB
,
0x809001CC
,
0x809101CD
,
0x809201CE
,
0x809301CF
,
0x809401D0
,
0x809500BE
,
0x809601D1
,
0x809701D2
,
0x809801D3
,
0x809901D4
,
0x809A0078
,
0x809B0094
,
0x80A0014E
,
0x80A10152
,
0x80A20153
,
0x80A30157
,
0x80A40154
,
0x80A50155
,
0x80A60156
,
0x80A70152
,
0x80A80150
,
0x80A90153
,
0x80AA01D5
,
0x80AB0154
,
0x80AC014F
,
0x80AD0158
,
0x80AF0152
,
0x80B00154
,
0x80B201D6
,
0x80B30150
,
0x80B501D7
,
0x80B60153
,
0x80B80156
,
0x80B90152
,
0x80BA005F
,
0x80BC0054
,
0x80C50078
,
0x81800071
,
0x818F0078
,
0x8190012D
,
0x819100BB
,
0x81920078
,
0x81980071
,
0x81A50078
,
0x81C00071
,
0x81CF0097
,
0x81D00071
,
0x81E20078
,
0x81E40071
,
0x81E8014F
,
0x81E90154
,
0x81EA0155
,
0x81EB0078
,
0x8200015B
,
0x8214015C
,
0x82280071
,
0x824F0078
,
0x8250017E
,
0x8251017F
,
0x82520180
,
0x82530181
,
0x82540182
,
0x82550078
,
0x8400009B
,
0x84030078
,
0x8405009B
,
0x841C0078
,
0x841F009B
,
0x84200078
,
0x85000083
,
0x85030078
,
0x85060083
,
0x8508009B
,
0x851A0078
,
0x851C0083
,
0x851D0078
,
0x851F0083
,
0x852001D8
,
0x852101D9
,
0x852201DA
,
0x852301DB
,
0x85240078
,
0x8528009A
,
0x852C0078
,
0xE8000094
,
0xE87B0078
,
0xE8800094
,
0xE8930078
,
0xE8950094
,
0xE8AF0894
,
0xE8B200A7
,
0xE8B30083
,
0xE8B50094
,
0xE8B600A7
,
0xE8B90057
,
0xE8BD0083
,
0xE8C10094
,
0xE8C20083
,
0xE8C60094
,
0xE8D50083
,
0xE8D70094
,
0xE8DD0894
,
0xE8E00094
,
0xE8EF0078
,
0xE9000054
,
0xE9210083
,
0xE9220054
,
0xE9230078
,
0xE9800054
,
0xE9AB0078
,
0xEA002877
,
0xEA0D2855
,
0xEA1A2877
,
0xEA272855
,
0xEA2A0078
,
0xEA2B2855
,
0xEA342877
,
0xEA412855
,
0xEA4E0078
,
0xEA4F2877
,
0xEA500078
,
0xEA522877
,
0xEA530078
,
0xEA542877
,
0xEA560078
,
0xEA572877
,
0xEA5B2855
,
0xEA682877
,
0xEA752855
,
0xEA822877
,
0xEA850078
,
0xEA862877
,
0xEA8A0078
,
0xEA8B2877
,
0xEA8E0078
,
0xEA8F2855
,
0xEA9C2877
,
0xEA9F0078
,
0xEAA02877
,
0xEAA20078
,
0xEAA52877
,
0xEAA80078
,
0xEAA92855
,
0xEAB62877
,
0xEAC32855
,
0xEAD02877
,
0xEADD2855
,
0xEAEA2877
,
0xEAF72855
,
0xEB042877
,
0xEB112855
,
0xEB1E2877
,
0xEB2B2855
,
0xEB382877
,
0xEB452855
,
0xEB530078
,
0xEB542877
,
0xEB6029DC
,
0xEB612855
,
0xEB6D29DC
,
0xEB6E2855
,
0xEB712877
,
0xEB7D29DC
,
0xEB7E2855
,
0xEB8A29DC
,
0xEB8B2855
,
0xEB8E2877
,
0xEB9A29DC
,
0xEB9B2855
,
0xEBA729DC
,
0xEBA82855
,
0xEBAB2877
,
0xEBB729DC
,
0xEBB82855
,
0xEBC429DC
,
0xEBC52855
,
0xEBC82877
,
0xEBD429DC
,
0xEBD52855
,
0xEBE129DC
,
0xEBE22855
,
0xEBE50078
,
0xEBE7280F
,
0xEBE82811
,
0xEBE92813
,
0xEBEA2815
,
0xEBEB2817
,
0xEBEC280F
,
0xEBED2811
,
0xEBEE2813
,
0xEBEF2815
,
0xEBF02817
,
0xEBF1280F
,
0xEBF22811
,
0xEBF32813
,
0xEBF42815
,
0xEBF52817
,
0xEBF6280F
,
0xEBF72811
,
0xEBF82813
,
0xEBF92815
,
0xEBFA2817
,
0xEBFB280F
,
0xEBFC2811
,
0xEBFD2813
,
0xEBFE2815
,
0xEBFF2817
,
0xEC000078
]
;
immutable
uint
[
]
a17
=
[
0x00000071
,
0x536B0078
,
0x7C000871
,
0x7D0F0078
]
;
immutable
uint
[
]
a23
=
[
0x00000057
,
0x00010078
,
0x00100057
,
0x00400078
,
0x00800083
,
0x00F80078
,
0x8000013F
,
0xFFFF0078
]
;
immutable
uint
[
]
a24
=
[
0x0000013F
,
0x7FFF0078
]
;
// The full set of all arrays to be searched.
immutable Range
[
]
FULL_DATA
=
[
Range
(
a0.
length
/
uint
.
sizeof
,
a0
)
,
Range
(
a1.
sizeof
/
uint
.
sizeof
,
a1
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
a7.
sizeof
/
uint
.
sizeof
,
a7
)
,
Range
(
a8.
sizeof
/
uint
.
sizeof
,
a8
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
a16.
sizeof
/
uint
.
sizeof
,
a16
)
,
Range
(
a17.
sizeof
/
uint
.
sizeof
,
a17
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
a23.
sizeof
/
uint
.
sizeof
,
a23
)
,
Range
(
a24.
sizeof
/
uint
.
sizeof
,
a24
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
,
Range
(
0
,
null
)
]
;
// Array of uppercase differences
immutable
short
[
]
UCDIFF
=
[
0
,
-
32
,
743
,
121
,
-
1
,
-
232
,
-
300
,
97
,
163
,
130
,
56
,
-
2
,
-
79
,
-
210
,
-
206
,
-
205
,
-
202
,
-
203
,
-
207
,
-
209
,
-
211
,
-
213
,
-
214
,
-
218
,
-
217
,
-
219
,
-
83
,
84
,
-
38
,
-
37
,
-
31
,
-
64
,
-
63
,
-
62
,
-
57
,
-
47
,
-
54
,
-
86
,
-
80
,
7
,
-
96
,
-
48
,
-
59
,
8
,
74
,
86
,
100
,
128
,
112
,
126
,
9
,
-
7205
,
-
16
,
-
26
,
-
7264
,
-
40
]
;
// Array of lowercase differences
immutable
short
[
]
LCDIFF
=
[
0
,
32
,
1
,
-
199
,
-
121
,
210
,
206
,
205
,
79
,
202
,
203
,
207
,
211
,
209
,
213
,
214
,
218
,
217
,
219
,
2
,
-
97
,
-
56
,
-
130
,
-
163
,
83
,
38
,
37
,
64
,
63
,
-
60
,
-
7
,
80
,
48
,
7264
,
-
8
,
-
74
,
-
9
,
-
86
,
-
100
,
-
112
,
-
128
,
-
126
,
-
7517
,
-
8383
,
-
8262
,
16
,
26
,
40
]
;
// Array of titlecase differences
immutable
short
[
]
TCDIFF
=
[
3
,
1
,
0
,
-
1
]
;
// Array of mirrored character differences
immutable
short
[
]
MIRROR_DIFF
=
[
0
,
1
,
-
1
,
2
,
-
2
,
16
,
-
16
,
3
,
-
3
,
2016
,
138
,
1824
,
2104
,
2108
,
2106
,
-
138
,
8
,
7
,
-
8
,
-
7
,
-
1824
,
-
2016
,
-
2104
,
-
2106
,
-
2108
]
;
// Array of all possible numeric values
immutable
int
[
]
NUMERICS
=
[
-
1
,
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
,
16
,
17
,
18
,
19
,
20
,
21
,
22
,
23
,
24
,
25
,
26
,
27
,
28
,
29
,
30
,
31
,
32
,
33
,
34
,
35
,
-
2
,
100
,
1000
,
40
,
50
,
60
,
70
,
80
,
90
,
10000
,
500
,
5000
,
36
,
37
,
38
,
39
,
41
,
42
,
43
,
44
,
45
,
46
,
47
,
48
,
49
,
200
,
300
,
400
,
600
,
700
,
800
,
900
,
2000
,
3000
,
4000
,
6000
,
7000
,
8000
,
9000
,
20000
,
30000
,
40000
,
50000
,
60000
,
70000
,
80000
,
90000
]
;
// All possible packed data values, no duplicates
immutable
uint
[
]
PACKED_DATA
=
[
0x00000000
,
0x0000012F
,
0x0000016F
,
0x0000014F
,
0x0000018F
,
0x0000018C
,
0x000001B8
,
0x000000B8
,
0x000000BA
,
0x020005B5
,
0x040005B6
,
0x00000099
,
0x000000F8
,
0x00000094
,
0x02000069
,
0x04000069
,
0x06000069
,
0x08000069
,
0x0A000069
,
0x0C000069
,
0x0E000069
,
0x10000069
,
0x12000069
,
0x14000069
,
0x060005B9
,
0x000001B9
,
0x080005B9
,
0x16020001
,
0x18020001
,
0x1A020001
,
0x1C020001
,
0x1E020001
,
0x20020001
,
0x22020001
,
0x24020001
,
0x26020001
,
0x28020001
,
0x2A020001
,
0x2C020001
,
0x2E020001
,
0x30020001
,
0x32020001
,
0x34020001
,
0x36020001
,
0x38020001
,
0x3A020001
,
0x3C020001
,
0x3E020001
,
0x40020001
,
0x42020001
,
0x44020001
,
0x46020001
,
0x48020001
,
0x060005B5
,
0x080005B6
,
0x000001BB
,
0x000001B7
,
0x16000802
,
0x18000802
,
0x1A000802
,
0x1C000802
,
0x1E000802
,
0x20000802
,
0x22000802
,
0x24000802
,
0x26000802
,
0x28000802
,
0x2A000802
,
0x2C000802
,
0x2E000802
,
0x30000802
,
0x32000802
,
0x34000802
,
0x36000802
,
0x38000802
,
0x3A000802
,
0x3C000802
,
0x3E000802
,
0x40000802
,
0x42000802
,
0x44000802
,
0x46000802
,
0x48000802
,
0x000000EC
,
0x000001BC
,
0x00000002
,
0x0A0005BD
,
0x00000130
,
0x000000BC
,
0x000000B9
,
0x0600006B
,
0x0800006B
,
0x00001002
,
0x0400006B
,
0x0C0005BE
,
0x4A0001AB
,
0x00020001
,
0x00000802
,
0x00001802
,
0x00040001
,
0x00060001
,
0x00002002
,
0x00080001
,
0x000C0001
,
0x000E0001
,
0x00100001
,
0x00140001
,
0x00160001
,
0x00180001
,
0x00004002
,
0x00004802
,
0x00200001
,
0x00220001
,
0x00000005
,
0x00A60001
,
0x01805802
,
0x01042003
,
0x00280001
,
0x002C0001
,
0x00000001
,
0x00000000
,
0x00007002
,
0x00007802
,
0x00009802
,
0x0000A802
,
0x0000B802
,
0x0000C002
,
0x0000C802
,
0x0000D002
,
0x00000004
,
0x000001A4
,
0x00000106
,
0x00320001
,
0x00340001
,
0x00360001
,
0x00380001
,
0x0000E002
,
0x0000E802
,
0x0000F002
,
0x0000F802
,
0x00010002
,
0x00010802
,
0x00012002
,
0x00012802
,
0x00013802
,
0x003A0001
,
0x003E0001
,
0x00013002
,
0x0000001C
,
0x00000107
,
0x00400001
,
0x00000018
,
0x00014802
,
0x000001B4
,
0x00000038
,
0x00000025
,
0x00000050
,
0x00000058
,
0x00000045
,
0x00000044
,
0x020000C9
,
0x060000C9
,
0x0A0000C9
,
0x0E0000C9
,
0x120000C9
,
0x000000D8
,
0x0000005C
,
0x00000008
,
0x02000009
,
0x06000009
,
0x0A000009
,
0x0E000009
,
0x12000009
,
0x0400000B
,
0x0800000B
,
0x0000000B
,
0x1600000B
,
0x4E00000B
,
0x00000006
,
0x4A00000B
,
0x000001B5
,
0x00420001
,
0x0600000B
,
0x0A00000B
,
0x0E00000B
,
0x1200000B
,
0x3E00000B
,
0x5200000B
,
0x5600000B
,
0x5A00000B
,
0x5C00000B
,
0x000001B6
,
0x2400000A
,
0x2800000A
,
0x00000010
,
0x020001AB
,
0x060001AB
,
0x0A0001AB
,
0x0E0001AB
,
0x120001AB
,
0x00000108
,
0x00015802
,
0x00440001
,
0x00016002
,
0x00016802
,
0x00017002
,
0x00017802
,
0x00018002
,
0x00018802
,
0x00440003
,
0x00460001
,
0x00480003
,
0x00019802
,
0x004A0001
,
0x004C0001
,
0x004E0001
,
0x003C0001
,
0x00500001
,
0x00520001
,
0x000001BD
,
0x0000018D
,
0x000001D0
,
0x00000250
,
0x00000230
,
0x040005BE
,
0x000000F9
,
0x0200006B
,
0x0A00006B
,
0x0E00006B
,
0x1200006B
,
0x00540001
,
0x00560001
,
0x000005B9
,
0x045A000A
,
0x085A000A
,
0x0C5A000A
,
0x105A000A
,
0x145A000A
,
0x185A000A
,
0x525A000A
,
0x5E5A000A
,
0x0401A00A
,
0x0801A00A
,
0x0C01A00A
,
0x1001A00A
,
0x1401A00A
,
0x1801A00A
,
0x5201A00A
,
0x5E01A00A
,
0x4E00000A
,
0x5C00000A
,
0x0E0005B9
,
0x100005B9
,
0x020005B9
,
0x040005B9
,
0x160005B9
,
0x180005B9
,
0x1A0005B9
,
0x200005B9
,
0x220005B9
,
0x240005B9
,
0x260005B9
,
0x040001AB
,
0x080001AB
,
0x0C0001AB
,
0x100001AB
,
0x140001AB
,
0x180001AB
,
0x1C0001AB
,
0x200001AB
,
0x240001AB
,
0x280001AB
,
0x0C00006B
,
0x1000006B
,
0x1400006B
,
0x1800006B
,
0x1C00006B
,
0x2000006B
,
0x2400006B
,
0x2800006B
,
0x005C001C
,
0x0001A81C
,
0x1A0001AB
,
0x1E0001AB
,
0x220001AB
,
0x260001AB
,
0x2A0001AB
,
0x160001AB
,
0x020005B6
,
0x100005B6
,
0x280005B9
,
0x2C0005B9
,
0x300005B9
,
0x0001B002
,
0x020005BD
,
0x0600000A
,
0x0A00000A
,
0x0E00000A
,
0x1200000A
,
0x1600000A
,
0x3E00000A
,
0x0C00000B
,
0x1000000B
,
0x1400000B
,
0x2E0001AB
,
0x320001AB
,
0x360001AB
,
0x3A0001AB
,
0x3E0001AB
,
0x420001AB
,
0x460001AB
,
0x640001AB
,
0x680001AB
,
0x6A0001AB
,
0x6E0001AB
,
0x720001AB
,
0x760001AB
,
0x7A0001AB
,
0x00000013
,
0x00000012
,
0x0000005A
,
0x000001B0
,
0x7C00000B
,
0x8000000B
,
0x8200000B
,
0x8600000B
,
0x8C00000B
,
0x6000000B
,
0x9200000B
,
0x9600000B
,
0x9800000B
,
0x9C00000B
,
0xA000000B
,
0xA400000B
,
0x4A0001AA
,
0x040001AA
,
0x520001AA
,
0x600001AA
,
0x0C0001AA
,
0x5E0001AA
,
0x160001AA
,
0x4C0001AA
,
0x4E0001AA
,
0x9E0001AA
,
0x060001AA
,
0x8800000A
,
0x2A0001AA
,
0x005E0001
,
0x0001B802
,
0x0400002B
,
0x0800002B
,
0x1600002B
,
0x4C00002B
,
0x00002802
,
0x00003002
,
0x000A0001
,
0x00120001
,
0x00003802
,
0x001A0001
,
0x001C0001
,
0x001E0001
,
0x00240001
,
0x00005002
,
0x00006002
,
0x002A0001
,
0x002E0001
,
0x00300001
,
0x00006802
,
0x00008002
,
0x00008802
,
0x00009002
,
0x0000A002
,
0x0000B002
,
0x0000D906
,
0x00011002
,
0x00011802
,
0x00014002
,
0x040000C9
,
0x080000C9
,
0x0C0000C9
,
0x100000C9
,
0x140000C9
,
0x04000009
,
0x08000009
,
0x0C000009
,
0x10000009
,
0x14000009
,
0x2200000B
,
0x4C00000B
,
0x2A00000B
,
0x5000000B
,
0x5400000B
,
0x5800000B
,
0x2600000A
,
0x00015002
,
0x00019002
,
0x00000030
,
0x000001BE
,
0x0000014E
,
0x00000210
,
0x000001F0
,
0x00580001
,
0x065A000A
,
0x0A5A000A
,
0x0E5A000A
,
0x125A000A
,
0x165A000A
,
0x1A5A000A
,
0x4C5A000A
,
0x4E5A000A
,
0x0601A00A
,
0x0A01A00A
,
0x0E01A00A
,
0x1201A00A
,
0x1601A00A
,
0x1A01A00A
,
0x4C01A00A
,
0x4E01A00A
,
0x6000000A
,
0x0000000A
,
0x120005B9
,
0x140005B9
,
0x1C0005B9
,
0x1E0005B9
,
0x1600006B
,
0x1A00006B
,
0x1E00006B
,
0x2200006B
,
0x2600006B
,
0x2A00006B
,
0x0E0005B5
,
0x040005B5
,
0x2A0005B9
,
0x2E0005B9
,
0x0200000A
,
0x0400000A
,
0x0800000A
,
0x0C00000A
,
0x1000000A
,
0x1400000A
,
0x2A00000A
,
0x2C0001AB
,
0x300001AB
,
0x340001AB
,
0x380001AB
,
0x3C0001AB
,
0x400001AB
,
0x440001AB
,
0x480001AB
,
0x620001AB
,
0x660001AB
,
0x500001AB
,
0x6C0001AB
,
0x700001AB
,
0x740001AB
,
0x780001AB
,
0x520001AB
,
0x7E00000B
,
0x5E00000B
,
0x8400000B
,
0x8800000B
,
0x8A00000B
,
0x8E00000B
,
0x9000000B
,
0x9400000B
,
0x9A00000B
,
0x9E00000B
,
0xA200000B
,
0xA600000B
,
0x5C0001AA
,
0x3E0001AA
,
0x7E0001AA
,
0x0600002B
,
0x0A00002B
,
0x2A00002B
,
0x4E00002B
,
0x00000019
]
;
create a
new version
of this paste
RAW Paste Data
/** Unicode Character Types */ module std.uni; import core.stdc.stdint; import core.stdc.stdio; import std.ctype; // this really needs pure functions that return bools class UCharException : Exception { this(string msg, dchar c) { char[255] buf = void; uint len = snprintf(buf.ptr, buf.length, "%*s: \\u%04X\\u%04X", msg, c & 0xFFFF, (c >> 15) & 0xFFFF); super(buf[0 .. len].idup); } } // Lu, Ll, Lt, Lm, Lo /*pure*/ bool isUniAlpha(dchar code) { if(code <= 0x7F) return cast(bool)isalpha(code); switch(getType(code)) { case CharType.UPPERCASE_LETTER: case CharType.LOWERCASE_LETTER: case CharType.TITLECASE_LETTER: case CharType.MODIFIER_LETTER: case CharType.OTHER_LETTER: return true; default: return false; } } // Lu /*pure*/ bool isUniUpper(dchar code) { if(code <= 0x7F) return cast(bool)isupper(code); return getType(code) == CharType.UPPERCASE_LETTER; } // Ll /*pure*/ bool isUniLower(dchar code) { if(code <= 0x7F) return cast(bool)islower(code); return getType(code) == CharType.LOWERCASE_LETTER; } // Lt /*pure*/ bool isUniTitle(dchar code) { return getType(code) == CharType.TITLECASE_LETTER; } // Lu, Ll, Lt, Lm, Lo, Nd /*pure*/ bool isUniAlphaNum(dchar code) { if(code <= 0x7F) return cast(bool)isalnum(code); switch(getType(code)) { case CharType.UPPERCASE_LETTER: case CharType.LOWERCASE_LETTER: case CharType.TITLECASE_LETTER: case CharType.MODIFIER_LETTER: case CharType.OTHER_LETTER: case CharType.DECIMAL_DIGIT_NUMBER: return true; default: return false; } } // Nd, Nl, No /*pure*/ bool isUniNumber(dchar code) { if(code <= 0x7F) return cast(bool)isdigit(code); switch(getType(code)) { case CharType.DECIMAL_DIGIT_NUMBER: case CharType.LETTER_NUMBER: case CharType.OTHER_NUMBER: return true; default: return false; } } // Nd /*pure*/ bool isUniDigit(dchar code) { if(code <= 0x7F) return cast(bool)isdigit(code); return getType(code) == CharType.DECIMAL_DIGIT_NUMBER; } // Zs, Zl, Zp /*pure*/ bool isUniSeparator(dchar code) { if(code <= 0x7F) return cast(bool)isspace(code); switch(getType(code)) { case CharType.SPACE_SEPARATOR: case CharType.LINE_SEPARATOR: case CharType.PARAGRAPH_SEPARATOR: return true; default: return false; } } // Zs /*pure*/ bool isUniSpace(dchar code) { if(code <= 0x7F) return cast(bool)isspace(code); return getType(code) == CharType.SPACE_SEPARATOR; } // Zl /*pure*/ bool isUniLine(dchar code) { return getType(code) == CharType.LINE_SEPARATOR; } // Zp /*pure*/ bool isUniParagraph(dchar code) { return getType(code) == CharType.PARAGRAPH_SEPARATOR; } // Mn, Mc, Me /*pure*/ bool isUniMark(dchar code) { switch(getType(code)) { case CharType.NONSPACING_MARK: case CharType.COMBINING_SPACING_MARK: case CharType.ENCLOSING_MARK: return true; default: return false; } } /*pure*/ bool isUniNonspacing(dchar code) { return getType(code) == CharType.NONSPACING_MARK; } // Pc, Pd, Ps, Pe, Pi, Pf, Po /*pure*/ bool isUniPunctuation(dchar code) { if(code <= 0x7F) return cast(bool)ispunct(code); switch(getType(code)) { case CharType.CONNECTOR_PUNCTUATION: case CharType.DASH_PUNCTUATION: case CharType.OPEN_PUNCTUATION: case CharType.CLOSE_PUNCTUATION: case CharType.INITIAL_QUOTE_PUNCTUATION: case CharType.FINAL_QUOTE_PUNCTUATION: case CharType.OTHER_PUNCTUATION: return true; default: return false; } } // Sm, Sc, Sk, So /*pure*/ bool isUniSymbol(dchar code) { switch(getType(code)) { case CharType.MATH_SYMBOL: case CharType.CURRENCY_SYMBOL: case CharType.MODIFIER_SYMBOL: case CharType.OTHER_SYMBOL: return true; default: return false; } } // Cc, Cf, Cs, Co, Cn /*pure*/ bool isUniOther(dchar code) { switch(getType(code)) { case CharType.CONTROL: case CharType.FORMAT: case CharType.SURROGATE: case CharType.PRIVATE_USE: case CharType.NOT_ASSIGNED: return true; default: return false; } } // Cc /*pure*/ bool isUniControl(dchar code) { if(code <= 0x7F) return cast(bool)iscntrl(code); return getType(code) == CharType.CONTROL; } // Cf /*pure*/ bool isUniFormat(dchar code) { return getType(code) == CharType.FORMAT; } // Cs /*pure*/ bool isUniSurrogate(dchar code) { return getType(code) == CharType.SURROGATE; } // Co /*pure*/ bool isUniPrivateUse(dchar code) { return getType(code) == CharType.PRIVATE_USE; } // Lu, Ll, Lt, Lm, Lo, Nd, Nl, No, Mn, Mc, Me, // Pc, Pd, Ps, Pe, Pi, Pf, Po, Sm, Sc, Sk, So /*pure*/ bool isUniGraph(dchar code) { if(code <= 0x7F) return cast(bool)isgraph(code); switch(getType(code)) { case CharType.UPPERCASE_LETTER: case CharType.LOWERCASE_LETTER: case CharType.TITLECASE_LETTER: case CharType.MODIFIER_LETTER: case CharType.OTHER_LETTER: case CharType.DECIMAL_DIGIT_NUMBER: case CharType.LETTER_NUMBER: case CharType.OTHER_NUMBER: case CharType.NONSPACING_MARK: case CharType.COMBINING_SPACING_MARK: case CharType.ENCLOSING_MARK: case CharType.CONNECTOR_PUNCTUATION: case CharType.DASH_PUNCTUATION: case CharType.OPEN_PUNCTUATION: case CharType.CLOSE_PUNCTUATION: case CharType.INITIAL_QUOTE_PUNCTUATION: case CharType.FINAL_QUOTE_PUNCTUATION: case CharType.OTHER_PUNCTUATION: case CharType.MATH_SYMBOL: case CharType.CURRENCY_SYMBOL: case CharType.MODIFIER_SYMBOL: case CharType.OTHER_SYMBOL: return true; default: return false; } } // Lu, Ll, Lt, Lm, Lo, Nd, Nl, No, Zs, Mn, Mc, Me, // Pc, Pd, Ps, Pe, Pi, Pf, Po, Sm, Sc, Sk, So /*pure*/ bool isUniPrint(dchar code) { if(code <= 0x7F) return cast(bool)isprint(code); switch(getType(code)) { case CharType.UPPERCASE_LETTER: case CharType.LOWERCASE_LETTER: case CharType.TITLECASE_LETTER: case CharType.MODIFIER_LETTER: case CharType.OTHER_LETTER: case CharType.DECIMAL_DIGIT_NUMBER: case CharType.LETTER_NUMBER: case CharType.OTHER_NUMBER: case CharType.SPACE_SEPARATOR: case CharType.NONSPACING_MARK: case CharType.COMBINING_SPACING_MARK: case CharType.ENCLOSING_MARK: case CharType.CONNECTOR_PUNCTUATION: case CharType.DASH_PUNCTUATION: case CharType.OPEN_PUNCTUATION: case CharType.CLOSE_PUNCTUATION: case CharType.INITIAL_QUOTE_PUNCTUATION: case CharType.FINAL_QUOTE_PUNCTUATION: case CharType.OTHER_PUNCTUATION: case CharType.MATH_SYMBOL: case CharType.CURRENCY_SYMBOL: case CharType.MODIFIER_SYMBOL: case CharType.OTHER_SYMBOL: return true; default: return false; } } // Ws /*pure*/ bool isUniDirWhiteSpace(dchar code) { return getDirectionality(code) == Direction.WHITESPACE; } // R /*pure*/ bool isUniDirLTL(dchar code) { return getDirectionality(code) == Direction.LEFT_TO_RIGHT; } // L /*pure*/ bool isUniDirRTL(dchar code) { return getDirectionality(code) == Direction.RIGHT_TO_LEFT; } // L, R /*pure*/ bool isUniDirStrong(dchar code) { switch(getDirectionality(code)) { case Direction.LEFT_TO_RIGHT: case Direction.RIGHT_TO_LEFT: return true; default: return false; } } // En, Es, Et, An, Cs /*pure*/ bool isUniDirWeak(dchar code) { switch(getDirectionality(code)) { case Direction.EUROPEAN_NUMBER: case Direction.EUROPEAN_NUMBER_SEPARATOR: case Direction.EUROPEAN_NUMBER_TERMINATOR: case Direction.ARABIC_NUMBER: case Direction.COMMON_NUMBER_SEPARATOR: return true; default: return false; } } //B, S, Ws, On /*pure*/ bool isUniDirNeutral(dchar code) { switch(getDirectionality(code)) { case Direction.BLOCK_SEPARATOR: case Direction.SEGMENT_SEPARATOR: case Direction.WHITESPACE: case Direction.OTHER_NEUTRALS: return true; default: return false; } } // B, S /*pure*/ bool isUniDirSeparator(dchar code) { switch(getDirectionality(code)) { case Direction.BLOCK_SEPARATOR: case Direction.SEGMENT_SEPARATOR: return true; default: return false; } } // /*pure*/ bool isUniNonBreaking(dchar code) { return getDecompositionType(code) == DecompositionType.NOBREAK; } /*pure*/ bool isUniMirroring(dchar code) { return ((getPackedData(code) >> MIRRORED_SHIFT) & MIRRORED_MASK) != 0; } // Lu -> Lt /*pure*/ dchar toUniLower(dchar code) { return code + LCDIFF[(getPackedData(code) >> TOLOWER_SHIFT) & TOLOWER_MASK]; } // Lt -> Lu /*pure*/ dchar toUniUpper(dchar code) { return code + UCDIFF[(getPackedData(code) >> TOUPPER_SHIFT) & TOUPPER_MASK]; } // L& -> Lt /*pure*/ dchar toUniTitle(dchar c) { int32_t diff = TCDIFF[(getPackedData(c) >> TOTITLE_SHIFT) & TOTITLE_MASK]; return diff != TOTITLE_MASK ? c + diff : toUniUpper(c); } /*pure*/ dchar toUniMirror(dchar c) { if(!isUniMirroring(c)) return c; return c + MIRROR_DIFF[(getPackedData(c) >> MIRROR_SHIFT) & MIRROR_MASK]; } // The following is taken from AndroidUnicode.h, AndroidUnicode.cpp and // characterData.h from the Andriod project; after hunting high and low for // documentation about Unicode on Google and not wanting to go for heavyweight // implementations like ICU I found this gem. I ported it to D to implement // the public Unicode api. Other implementations of interest are in V8 and // Mozilla, some benchmarks would be useful to determine the one which performs // best. /* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ private: /* * Directions specified in the Unicode standard. These directions map directly * to java.lang.Character. */ enum Direction { UNDEFINED = -1, LEFT_TO_RIGHT, RIGHT_TO_LEFT, RIGHT_TO_LEFT_ARABIC, EUROPEAN_NUMBER, EUROPEAN_NUMBER_SEPARATOR, EUROPEAN_NUMBER_TERMINATOR, ARABIC_NUMBER, COMMON_NUMBER_SEPARATOR, NONSPACING_MARK, BOUNDARY_NEUTRAL, BLOCK_SEPARATOR, SEGMENT_SEPARATOR, WHITESPACE, OTHER_NEUTRALS, LEFT_TO_RIGHT_EMBEDDING, LEFT_TO_RIGHT_OVERRIDE, RIGHT_TO_LEFT_EMBEDDING, RIGHT_TO_LEFT_OVERRIDE, POP_DIRECTIONAL_FORMAT } /* * Character types as specified in the Unicode standard. These map directly to * java.lang.Character. */ enum CharType { UNASSIGNED, UPPERCASE_LETTER, LOWERCASE_LETTER, TITLECASE_LETTER, MODIFIER_LETTER, OTHER_LETTER, NONSPACING_MARK, ENCLOSING_MARK, COMBINING_SPACING_MARK, DECIMAL_DIGIT_NUMBER, LETTER_NUMBER, OTHER_NUMBER, SPACE_SEPARATOR, LINE_SEPARATOR, PARAGRAPH_SEPARATOR, CONTROL, FORMAT, NOT_ASSIGNED, PRIVATE_USE, SURROGATE, DASH_PUNCTUATION, OPEN_PUNCTUATION, CLOSE_PUNCTUATION, CONNECTOR_PUNCTUATION, OTHER_PUNCTUATION, MATH_SYMBOL, CURRENCY_SYMBOL, MODIFIER_SYMBOL, OTHER_SYMBOL, INITIAL_QUOTE_PUNCTUATION, FINAL_QUOTE_PUNCTUATION } /* * Decomposition types as described by the unicode standard. These values map to * the same values in dchar.h in ICU. */ enum DecompositionType { NONE, CANONICAL, COMPAT, CIRCLE, FINAL, FONT, FRACTION, INITIAL, ISOLATED, MEDIAL, NARROW, NOBREAK, SMALL, SQUARE, SUB, SUPER, VERTICAL, WIDE } enum { MIN_RADIX = 2, MAX_RADIX = 36, TYPE_SHIFT = 0, TYPE_MASK = (1 << 5) - 1, DIRECTION_SHIFT = TYPE_SHIFT + 5, DIRECTION_MASK = (1 << 5) - 1, MIRRORED_SHIFT = DIRECTION_SHIFT + 5, MIRRORED_MASK = (1 << 1) - 1, TOUPPER_SHIFT = MIRRORED_SHIFT + 1, TOUPPER_MASK = (1 << 6)-1, TOLOWER_SHIFT = TOUPPER_SHIFT + 6, TOLOWER_MASK = (1 << 6)-1, TOTITLE_SHIFT = TOLOWER_SHIFT+6, TOTITLE_MASK = (1 << 2) - 1, MIRROR_SHIFT = TOTITLE_SHIFT + 2, MIRROR_MASK = (1 << 5) - 1, NUMERIC_SHIFT = TOTITLE_SHIFT + 2, NUMERIC_MASK = (1 << 7) - 1, DECOMPOSITION_SHIFT = 11, DECOMPOSITION_MASK = (1 << 5) - 1 } /** * Returns the packed data for java calls * @param c The unicode character. * @return The packed data for the character. * * Copied from java.lang.Character implementation: * 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 * F E D C B A 9 8 7 6 5 4 3 2 1 0 F E D C B A 9 8 7 6 5 4 3 2 1 0 * * 31 types --------- * 18 directionalities --------- * 2 mirroreds - * ----------- 56 toupper diffs * ----------- 48 tolower diffs * --- 4 totitlecase diffs * ------------- 84 numeric values * --------- 24 mirror char diffs */ /*pure*/ dchar getPackedData(dchar c) { // findCharacterValue returns a 16-bit value with the top 5 bits containing // a decomposition type and the remaining bits containing an index. return PACKED_DATA[findCharacterValue(c) & 0x7FF]; } /* * Get the Character type. * @param c The unicode character. * @return The character's type or CHARTYPE_UNASSIGNED if the character is * invalid or has an unassigned class. */ /*pure*/ CharType getType(dchar c) { if(c >= 0x10FFFF) return CharType.UNASSIGNED; return cast(CharType)((getPackedData(c) >> TYPE_SHIFT) & TYPE_MASK); } /** * Get the Character's decomposition type. * @param c The unicode character. * @return The character's decomposition type or DECOMPOSITION_NONE is there * is no decomposition. */ /*pure*/ DecompositionType getDecompositionType(dchar c) { // findCharacterValue returns a 16-bit value with the top 5 bits containing // a decomposition type and the remaining bits containing an index. return cast(DecompositionType) ((findCharacterValue(c) >> DECOMPOSITION_SHIFT) & DECOMPOSITION_MASK); } /*pure*/ int getDigitValue(dchar c, int radix) { if(radix < MIN_RADIX || radix > MAX_RADIX) return -1; int tempValue = radix; if(c >= '0' && c <= '9') tempValue = c - '0'; else if(c >= 'a' && c <= 'z') tempValue = c - 'a' + 10; else if(c >= 'A' && c <= 'Z') tempValue = c - 'A' + 10; return tempValue < radix ? tempValue : -1; } /*pure*/ int getNumericValue(dchar c) { if(isUniMirroring(c)) return -1; return NUMERICS[((getPackedData(c) >> NUMERIC_SHIFT) & NUMERIC_MASK)]; } /*pure*/ Direction getDirectionality(dchar c) { uint32_t data = getPackedData(c); if(!data) return Direction.UNDEFINED; Direction d = cast(Direction)((data >> DIRECTION_SHIFT) & DIRECTION_MASK); return d != DIRECTION_MASK ? d : Direction.UNDEFINED; } /*pure*/ ushort findCharacterValue(dchar c) { if(c > 0x10FFFF) throw new UCharException("invalid Unicode codepoint", c); if(c <= 0xFF) return LATIN1_DATA[c]; // Rotate the bits because the tables are separated into even and odd // codepoints dchar u = (c >> 1) | ((c & 1) << 20); const Range search = FULL_DATA[u >> 16]; const uint[] array = search.array; // This trick is so that that compare in the while loop does not need to // shift the array entry down by 16 u <<= 16; u |= 0xFFFF; int high = search.length - 1; int low = 0; if(high < 0) return 0; while(low < high - 1) { int probe = (high + low) >> 1; // The entries contain the codepoint in the high 16 bits and the index // into PACKED_DATA in the low 16. if(array[probe] > u) high = probe; else low = probe; } if(array[low] > u) throw new UCharException("a suitable range was not found", c); return cast(ushort)(array[low] & 0xFFFF); } // Structure containing an array of ranges struct Range { int length; uint[] array; }; // For Latin1 characters just index into this array to get the index and decomposition immutable ushort[] LATIN1_DATA = [ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0003, 0x0002, 0x0004, 0x0003, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003, 0x0003, 0x0003, 0x0002, 0x0005, 0x0006, 0x0006, 0x0007, 0x0008, 0x0007, 0x0006, 0x0006, 0x0009, 0x000A, 0x0006, 0x000B, 0x000C, 0x000D, 0x000C, 0x000C, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x000C, 0x0006, 0x0018, 0x0019, 0x001A, 0x0006, 0x0006, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0006, 0x0036, 0x0037, 0x0038, 0x0037, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0035, 0x0019, 0x0036, 0x0019, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x5853, 0x0006, 0x0008, 0x0008, 0x0008, 0x0008, 0x0054, 0x0054, 0x1037, 0x0054, 0x7855, 0x0056, 0x0019, 0x0057, 0x0054, 0x1037, 0x0058, 0x0059, 0x785A, 0x785B, 0x1037, 0x105C, 0x0054, 0x0006, 0x1037, 0x785D, 0x7855, 0x005E, 0x305F, 0x305F, 0x305F, 0x0006, 0x0860, 0x0860, 0x0860, 0x0860, 0x0860, 0x0860, 0x0060, 0x0860, 0x0860, 0x0860, 0x0860, 0x0860, 0x0860, 0x0860, 0x0860, 0x0860, 0x0060, 0x0860, 0x0860, 0x0860, 0x0860, 0x0860, 0x0860, 0x0019, 0x0060, 0x0860, 0x0860, 0x0860, 0x0860, 0x0860, 0x0060, 0x0055, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0061, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0061, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0019, 0x0061, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0061, 0x0862 ]; // Each of these arrays is stripped into ranges. In order to build the arrays, each // codepoint was bit-shifted so that even and odd characters were separated into different // arrays. The identifier of each array is the top byte after bit-shifting. // The numbers stored in the array are the bit-shifted codepoint, the decomposition, and an // index into another array of all possible packed data values. The top 16 bits are the // codepoint and the bottom 16 are the decomposition and index. The top 5 bits for the decomposition // and the rest for the index. immutable uint[] a0 = [ 0x00800863, 0x00880063, 0x00890863, 0x00930063, 0x00940863, 0x00980864, 0x00991063, 0x009A0863, 0x009C0055, 0x009D0865, 0x00A01065, 0x00A10065, 0x00A20865, 0x00A50063, 0x00A60863, 0x00A90063, 0x00AA0863, 0x00B30063, 0x00B40863, 0x00BC0866, 0x00BD0865, 0x00C00055, 0x00C10063, 0x00C30067, 0x00C40065, 0x00C50068, 0x00C60065, 0x00C70069, 0x00C8006A, 0x00C90065, 0x00CA006B, 0x00CB006C, 0x00CC0063, 0x00CD006D, 0x00CE006C, 0x00CF006E, 0x00D00863, 0x00D10063, 0x00D3006F, 0x00D40065, 0x00D50055, 0x00D60063, 0x00D7006F, 0x00D80865, 0x00D90070, 0x00DA0065, 0x00DC0063, 0x00DD0055, 0x00DE0063, 0x00DF0055, 0x00E00071, 0x00E21072, 0x00E31073, 0x00E41074, 0x00E51072, 0x00E61073, 0x00E70865, 0x00EF0863, 0x00F20063, 0x00F30863, 0x00F80855, 0x00F91074, 0x00FA0863, 0x00FB0075, 0x00FC0863, 0x010E0063, 0x010F0863, 0x01100076, 0x01110063, 0x01130863, 0x011A0055, 0x011D0077, 0x011E0065, 0x011F0077, 0x01200055, 0x01210078, 0x01280055, 0x012A0079, 0x012B007A, 0x012C0055, 0x0130007A, 0x01310055, 0x0134007B, 0x01350055, 0x0139007C, 0x013A0055, 0x0140007D, 0x01410055, 0x0144007D, 0x0145007E, 0x01460055, 0x0149007F, 0x014A0080, 0x014B0055, 0x01587881, 0x015D0082, 0x015E0081, 0x01610037, 0x01630082, 0x01680081, 0x01690037, 0x016C1037, 0x016F0037, 0x01707881, 0x01730037, 0x01770081, 0x01780037, 0x01800083, 0x01A00883, 0x01A10083, 0x01A20883, 0x01A30083, 0x01B80078, 0x01BA0837, 0x01BB0078, 0x01BD1081, 0x01BE0078, 0x01BF0806, 0x01C00078, 0x01C21037, 0x01C30884, 0x01C40885, 0x01C60886, 0x01C70887, 0x01C80855, 0x01C90060, 0x01D10078, 0x01D20060, 0x01D50860, 0x01D60888, 0x01D70889, 0x01D80855, 0x01D90061, 0x01E1008A, 0x01E20061, 0x01E50861, 0x01E6088B, 0x01E7088C, 0x01E8108D, 0x01E91077, 0x01EA0877, 0x01EB108E, 0x01EC0063, 0x01F8108F, 0x01F91090, 0x01FA1091, 0x01FB0019, 0x01FC0065, 0x01FD0063, 0x01FE0055, 0x01FF0077, 0x02000892, 0x02010092, 0x02060892, 0x02080060, 0x02180061, 0x02280893, 0x02290093, 0x022E0893, 0x02300063, 0x023B0863, 0x023C0063, 0x02410094, 0x02420083, 0x02440095, 0x02450063, 0x02600077, 0x02610865, 0x02620065, 0x02680863, 0x026A0063, 0x026B0863, 0x026C0063, 0x026D0863, 0x02700063, 0x02710863, 0x02740063, 0x02750863, 0x027B0063, 0x027C0863, 0x027D0078, 0x02800063, 0x02880078, 0x02990096, 0x02AC0078, 0x02AD0097, 0x02B00078, 0x02B10098, 0x02C40078, 0x02C50099, 0x02C60078, 0x02C90083, 0x02DD0078, 0x02DE0083, 0x02DF009A, 0x02E10083, 0x02E3009A, 0x02E40078, 0x02E8009B, 0x02F60078, 0x02F8009B, 0x02FA009A, 0x02FB0078, 0x0300009C, 0x03020078, 0x0306000C, 0x03070054, 0x03080083, 0x030B0078, 0x030F009D, 0x03100078, 0x0311089E, 0x0314009E, 0x031E0078, 0x0320009F, 0x0321009E, 0x03260083, 0x033000A0, 0x033100A1, 0x033200A2, 0x033300A3, 0x033400A4, 0x03350007, 0x033600A5, 0x0337009E, 0x03380083, 0x0339009E, 0x033B109E, 0x033D009E, 0x0360089E, 0x0362009E, 0x036A009D, 0x036B0083, 0x036F0095, 0x03700083, 0x0373009F, 0x03740083, 0x0377009E, 0x0378000E, 0x03790010, 0x037A0012, 0x037B0014, 0x037C0016, 0x037D009E, 0x037F00A6, 0x0380009D, 0x03870078, 0x0388009E, 0x03980083, 0x03A60078, 0x03A7009E, 0x03B70078, 0x03C0009E, 0x03D30083, 0x03D90078, 0x04810083, 0x04820071, 0x049A0871, 0x049B0071, 0x049D0078, 0x049E0083, 0x049F00A7, 0x04A10083, 0x04A500A7, 0x04A70078, 0x04A80071, 0x04A90083, 0x04AB0078, 0x04AC0871, 0x04B00071, 0x04B10083, 0x04B20097, 0x04B300A8, 0x04B400A9, 0x04B500AA, 0x04B600AB, 0x04B700AC, 0x04B80097, 0x04B90078, 0x04C100A7, 0x04C20078, 0x04C30071, 0x04C70078, 0x04C80071, 0x04C90078, 0x04CA0071, 0x04DA0078, 0x04DB0071, 0x04DD0078, 0x04DE0083, 0x04DF00A7, 0x04E10083, 0x04E30078, 0x04E400A7, 0x04E50078, 0x04E608A7, 0x04E70071, 0x04E80078, 0x04EE0871, 0x04EF0078, 0x04F00071, 0x04F10083, 0x04F20078, 0x04F300A8, 0x04F400A9, 0x04F500AA, 0x04F600AB, 0x04F700AC, 0x04F80071, 0x04F90008, 0x04FA00AD, 0x04FB00AE, 0x04FC00AF, 0x04FD0094, 0x04FE0078, 0x05010083, 0x05020078, 0x05030071, 0x05060078, 0x05080071, 0x05090078, 0x050A0071, 0x051A0078, 0x051B0871, 0x051C0071, 0x051D0078, 0x051E0083, 0x051F00A7, 0x05210083, 0x05220078, 0x05240083, 0x05250078, 0x05260083, 0x05270078, 0x052D0871, 0x052E0071, 0x052F0871, 0x05300078, 0x053300A8, 0x053400A9, 0x053500AA, 0x053600AB, 0x053700AC, 0x05380083, 0x05390071, 0x053B0078, 0x05410083, 0x05420078, 0x05430071, 0x05470078, 0x05480071, 0x05490078, 0x054A0071, 0x055A0078, 0x055B0071, 0x055D0078, 0x055E0083, 0x055F00A7, 0x05610083, 0x05630078, 0x05640083, 0x05650078, 0x056600A7, 0x05670078, 0x05680071, 0x05690078, 0x05700071, 0x05710083, 0x05720078, 0x057300A8, 0x057400A9, 0x057500AA, 0x057600AB, 0x057700AC, 0x05780078, 0x058100A7, 0x05820078, 0x05830071, 0x05870078, 0x05880071, 0x05890078, 0x058A0071, 0x059A0078, 0x059B0071, 0x059D0078, 0x059E0083, 0x059F00A7, 0x05A10083, 0x05A20078, 0x05A408A7, 0x05A50078, 0x05A608A7, 0x05A70078, 0x05AB0083, 0x05AC0078, 0x05AE0871, 0x05AF0078, 0x05B00071, 0x05B10078, 0x05B300A8, 0x05B400A9, 0x05B500AA, 0x05B600AB, 0x05B700AC, 0x05B80094, 0x05B90078, 0x05C10083, 0x05C20078, 0x05C30071, 0x05C60078, 0x05C70071, 0x05CA0871, 0x05CB0078, 0x05CD0071, 0x05D00078, 0x05D20071, 0x05D30078, 0x05D40071, 0x05D60078, 0x05D70071, 0x05DD0078, 0x05DF00A7, 0x05E00083, 0x05E100A7, 0x05E20078, 0x05E300A7, 0x05E508A7, 0x05E70078, 0x05F300A8, 0x05F400A9, 0x05F500AA, 0x05F600AB, 0x05F700AC, 0x05F800B0, 0x05F900B1, 0x05FA0054, 0x05FE0078, 0x060100A7, 0x06020078, 0x06030071, 0x061A0078, 0x061B0071, 0x061D0078, 0x061F0083, 0x062100A7, 0x06230083, 0x06240883, 0x06250083, 0x06270078, 0x062B0083, 0x062C0078, 0x06300071, 0x06310078, 0x063300A8, 0x063400A9, 0x063500AA, 0x063600AB, 0x063700AC, 0x06380078, 0x064100A7, 0x06420078, 0x06430071, 0x065A0078, 0x065B0071, 0x065D0078, 0x065E0083, 0x065F00A7, 0x066008A7, 0x066100A7, 0x066300B2, 0x066408A7, 0x06660083, 0x06670078, 0x066B00A7, 0x066C0078, 0x066F0071, 0x06710078, 0x067300A8, 0x067400A9, 0x067500AA, 0x067600AB, 0x067700AC, 0x06780078, 0x068100A7, 0x06820078, 0x06830071, 0x069D0078, 0x069F00A7, 0x06A10083, 0x06A20078, 0x06A300A7, 0x06A508A7, 0x06A70078, 0x06B00071, 0x06B10078, 0x06B300A8, 0x06B400A9, 0x06B500AA, 0x06B600AB, 0x06B700AC, 0x06B80078, 0x06C100A7, 0x06C20078, 0x06C30071, 0x06CC0078, 0x06CD0071, 0x06D90078, 0x06DA0071, 0x06DE0078, 0x06E00071, 0x06E40078, 0x06E50083, 0x06E60078, 0x06E800A7, 0x06E90083, 0x06EC00A7, 0x06ED08A7, 0x06F00078, 0x06F900A7, 0x06FA0097, 0x06FB0078, 0x07010071, 0x071A0083, 0x071E0078, 0x07200071, 0x07230081, 0x07240083, 0x072800A8, 0x072900A9, 0x072A00AA, 0x072B00AB, 0x072C00AC, 0x072D0097, 0x072E0078, 0x07410071, 0x07430078, 0x07440071, 0x07460078, 0x074A0071, 0x074C0078, 0x074D0071, 0x07500078, 0x07510071, 0x07520078, 0x07550071, 0x07560078, 0x07570071, 0x075A0083, 0x075D0078, 0x075E0083, 0x075F0078, 0x07600071, 0x07630081, 0x07640083, 0x07670078, 0x076800A8, 0x076900A9, 0x076A00AA, 0x076B00AB, 0x076C00AC, 0x076D0078, 0x076E1071, 0x076F0078, 0x07800071, 0x07810094, 0x07820097, 0x07865897, 0x07870097, 0x078A0094, 0x078C0083, 0x078D0094, 0x079000A8, 0x079100A9, 0x079200AA, 0x079300AB, 0x079400AC, 0x079500B3, 0x079A0094, 0x079D00B4, 0x079F00A7, 0x07A00071, 0x07A40078, 0x07A50071, 0x07A90871, 0x07AA0071, 0x07AE0871, 0x07AF0071, 0x07B60078, 0x07B90083, 0x07BB0883, 0x07BD0083, 0x07C40071, 0x07C60078, 0x07C80083, 0x07CC0078, 0x07CD0083, 0x07D10883, 0x07D20083, 0x07D60883, 0x07D70083, 0x07DF0094, 0x07E30083, 0x07E40094, 0x07E70078, 0x07E80097, 0x07E90078, 0x08000071, 0x08110078, 0x08120071, 0x08130871, 0x08140078, 0x08150071, 0x081600A7, 0x08170083, 0x081A0078, 0x081B0083, 0x081C00A7, 0x081D0078, 0x082000A8, 0x082100A9, 0x082200AA, 0x082300AB, 0x082400AC, 0x08250097, 0x08280071, 0x082B00A7, 0x082C0083, 0x082D0078, 0x085000B5, 0x08630078, 0x08680071, 0x087E7881, 0x087F0078, 0x08800071, 0x08AD0078, 0x08B00071, 0x08D20078, 0x08D40071, 0x08FD0078, 0x09000071, 0x09270078, 0x09280071, 0x092F0078, 0x09300071, 0x09470078, 0x09480071, 0x095B0078, 0x095C0071, 0x09630078, 0x09640071, 0x098B0078, 0x098C0071, 0x09AE0078, 0x09B00094, 0x09B10097, 0x09B500B6, 0x09B600B7, 0x09B700B8, 0x09B800B9, 0x09B900B0, 0x09BA00BA, 0x09BB00BB, 0x09BC00BC, 0x09BD00BD, 0x09BE00BE, 0x09BF0078, 0x09C00071, 0x09C80054, 0x09CD0078, 0x09D00071, 0x09FB0078, 0x0A010071, 0x0B370097, 0x0B380071, 0x0B3C0078, 0x0B400005, 0x0B410071, 0x0B4E00BF, 0x0B4F0078, 0x0B500071, 0x0B760097, 0x0B7700C0, 0x0B7800C1, 0x0B790078, 0x0B800071, 0x0B890083, 0x0B8B0078, 0x0B900071, 0x0B990083, 0x0B9B0097, 0x0B9C0078, 0x0BA00071, 0x0BA90083, 0x0BAA0078, 0x0BB00071, 0x0BB90083, 0x0BBA0078, 0x0BC00071, 0x0BDA00C2, 0x0BDB00A7, 0x0BDC0083, 0x0BDF00A7, 0x0BE30083, 0x0BE400A7, 0x0BE50083, 0x0BEA0097, 0x0BEE0071, 0x0BEF0078, 0x0BF000A8, 0x0BF100A9, 0x0BF200AA, 0x0BF300AB, 0x0BF400AC, 0x0BF50078, 0x0BF800C3, 0x0BF900C4, 0x0BFA00C5, 0x0BFB00C6, 0x0BFC00C7, 0x0BFD0078, 0x0C000006, 0x0C030099, 0x0C040006, 0x0C060083, 0x0C070005, 0x0C0800A8, 0x0C0900A9, 0x0C0A00AA, 0x0C0B00AB, 0x0C0C00AC, 0x0C0D0078, 0x0C100071, 0x0C3C0078, 0x0C400071, 0x0C550078, 0x0C800071, 0x0C8F0078, 0x0C900083, 0x0C9200A7, 0x0C940083, 0x0C9500C8, 0x0C960078, 0x0C9800A7, 0x0C990083, 0x0C9A00A7, 0x0C9D0083, 0x0C9E0078, 0x0CA00054, 0x0CA10078, 0x0CA20006, 0x0CA300A8, 0x0CA400A9, 0x0CA500AA, 0x0CA600AB, 0x0CA700AC, 0x0CA80071, 0x0CB70078, 0x0CB80071, 0x0CBB0078, 0x0CC00071, 0x0CD50078, 0x0CD800A7, 0x0CE10071, 0x0CE400A7, 0x0CE50078, 0x0CE800A8, 0x0CE900A9, 0x0CEA00AA, 0x0CEB00AB, 0x0CEC00AC, 0x0CED0078, 0x0CEF0006, 0x0CF00054, 0x0D000071, 0x0D0C0083, 0x0D0D00A7, 0x0D0E0078, 0x0D0F0097, 0x0D100078, 0x0E800055, 0x0E967881, 0x0EA70081, 0x0EA87881, 0x0EB17055, 0x0EB60055, 0x0EBC7881, 0x0EBD0055, 0x0ECE7881, 0x0EE00083, 0x0EE20078, 0x0F000863, 0x0F4B0855, 0x0F4D1055, 0x0F4E0078, 0x0F500863, 0x0F7D0078, 0x0F8008C9, 0x0F8408CA, 0x0F8808C9, 0x0F8B0078, 0x0F8C08CA, 0x0F8F0078, 0x0F9008C9, 0x0F9408CA, 0x0F9808C9, 0x0F9C08CA, 0x0FA008C9, 0x0FA30078, 0x0FA408CA, 0x0FA70078, 0x0FA80855, 0x0FAC0078, 0x0FB008C9, 0x0FB408CA, 0x0FB808CB, 0x0FB908CC, 0x0FBB08CD, 0x0FBC08CE, 0x0FBD08CF, 0x0FBE08D0, 0x0FBF0078, 0x0FC008C9, 0x0FC408D1, 0x0FC808C9, 0x0FCC08D1, 0x0FD008C9, 0x0FD408D1, 0x0FD808C9, 0x0FD90855, 0x0FDC08CA, 0x0FDD08D2, 0x0FDE08D3, 0x0FDF08D4, 0x0FE01037, 0x0FE10855, 0x0FE408D5, 0x0FE608D3, 0x0FE70837, 0x0FE808C9, 0x0FE90855, 0x0FEA0078, 0x0FEB0855, 0x0FEC08CA, 0x0FED08D6, 0x0FEE0078, 0x0FEF0837, 0x0FF008C9, 0x0FF10855, 0x0FF408CA, 0x0FF508D7, 0x0FF608D8, 0x0FF70837, 0x0FF80078, 0x0FF90855, 0x0FFC08D9, 0x0FFD08DA, 0x0FFE08D3, 0x0FFF1037, 0x10000805, 0x10011005, 0x10060057, 0x100700C2, 0x10080099, 0x100B0006, 0x100C00DB, 0x100D00B4, 0x100E00DB, 0x100F00B4, 0x10100006, 0x10121006, 0x101400DC, 0x101500DD, 0x101600DE, 0x101700DF, 0x10180007, 0x101A1007, 0x101B1006, 0x101C0006, 0x101D00E0, 0x101E1006, 0x10200038, 0x10210006, 0x102200E1, 0x1023000A, 0x10241006, 0x10250006, 0x10290019, 0x102A0038, 0x102B0006, 0x10300057, 0x10320078, 0x10350057, 0x103878E2, 0x10390078, 0x103A78E3, 0x103B78E4, 0x103C78E5, 0x103D780B, 0x103E7819, 0x103F780A, 0x104070E2, 0x1041705A, 0x104270E3, 0x104370E4, 0x104470E5, 0x1045700B, 0x10467019, 0x1047700A, 0x10487081, 0x104B0078, 0x10500008, 0x10541008, 0x10550008, 0x105B0078, 0x10680083, 0x106F0095, 0x10730083, 0x10760078, 0x10801054, 0x10812877, 0x10820054, 0x10831054, 0x10840054, 0x10852855, 0x10862877, 0x10872855, 0x10882877, 0x108A0054, 0x108B1054, 0x108C0054, 0x108D2877, 0x108F0054, 0x10907854, 0x10922877, 0x109308E6, 0x10942877, 0x109508E7, 0x10962877, 0x10970058, 0x10982877, 0x10990054, 0x109A2855, 0x109B1071, 0x109D0054, 0x109E2855, 0x109F2877, 0x10A028E8, 0x10A10019, 0x10A32855, 0x10A50054, 0x10A70078, 0x10AA305F, 0x10B010E9, 0x10B110EA, 0x10B210EB, 0x10B310EC, 0x10B410ED, 0x10B510EE, 0x10B610EF, 0x10B710F0, 0x10B810F1, 0x10B910F2, 0x10BA10F3, 0x10BB10F4, 0x10BC10F5, 0x10BD10F6, 0x10BE10F7, 0x10BF10F8, 0x10C000F9, 0x10C100FA, 0x10C20078, 0x10C80019, 0x10CB0054, 0x10CD0819, 0x10CE0054, 0x10D00019, 0x10D10054, 0x10D30019, 0x10D40054, 0x10D70819, 0x10D80054, 0x10E70819, 0x10E80054, 0x10E90019, 0x10EB0054, 0x10FA0019, 0x110100E8, 0x110208E8, 0x11030019, 0x110400FB, 0x110608FC, 0x11070019, 0x1109000B, 0x110A0019, 0x110B00E8, 0x110C0019, 0x110D00E8, 0x110F0019, 0x111000E8, 0x111208E8, 0x11140019, 0x111610E8, 0x111700E8, 0x111810E8, 0x111900E8, 0x111A0019, 0x111E00FD, 0x111F00E8, 0x112208E8, 0x112300E8, 0x11270019, 0x112900FD, 0x112B0019, 0x113008E8, 0x113200FD, 0x11360019, 0x113708FD, 0x113900FD, 0x113A08FD, 0x113B00FD, 0x113C08FD, 0x113D00FD, 0x114008FD, 0x114100FD, 0x114208FD, 0x114300FD, 0x114408FD, 0x114500FD, 0x114600E8, 0x11470019, 0x114800FE, 0x114A0019, 0x114C00FF, 0x114D0019, 0x115100FD, 0x11520019, 0x11530100, 0x11540101, 0x115500E8, 0x115608E8, 0x115800FD, 0x115C00E8, 0x115D0019, 0x115F00E8, 0x11600019, 0x116500FE, 0x11670019, 0x116800FD, 0x11690019, 0x116B00FD, 0x117008FD, 0x117200FD, 0x117508FD, 0x11770019, 0x117800FD, 0x11790102, 0x117B0103, 0x117C00E8, 0x117D0104, 0x117F0105, 0x11800054, 0x118400FD, 0x11860054, 0x119000E8, 0x11910054, 0x1195080A, 0x11960054, 0x119B0094, 0x11BE0019, 0x11BF0054, 0x11CE0019, 0x11DA00B4, 0x11DB0006, 0x11DC0054, 0x11EE0078, 0x12000054, 0x12140078, 0x12200054, 0x12260078, 0x12301906, 0x12311907, 0x12321908, 0x12331909, 0x1234190A, 0x1235190B, 0x1236190C, 0x1237190D, 0x1238190E, 0x1239190F, 0x123A1106, 0x123B1107, 0x123C1108, 0x123D1109, 0x123E110A, 0x123F110B, 0x1240110C, 0x1241110D, 0x1242110E, 0x1243110F, 0x1244105D, 0x1245105B, 0x12461110, 0x12471111, 0x12481112, 0x12491113, 0x124A1114, 0x124B1115, 0x124C1116, 0x124D1117, 0x124E1094, 0x125B1918, 0x12681919, 0x127518C3, 0x1276011A, 0x1277011B, 0x1278011C, 0x1279011D, 0x127A011E, 0x127B00C4, 0x127C00C5, 0x127D00C6, 0x127E00C7, 0x127F011F, 0x12800054, 0x12FC0019, 0x13000054, 0x134F0078, 0x13500054, 0x13560094, 0x13570054, 0x13590078, 0x13810054, 0x13850078, 0x13860054, 0x13940078, 0x13950054, 0x13A60078, 0x13A80054, 0x13AA0078, 0x13AB0054, 0x13B00078, 0x13B10054, 0x13B40009, 0x13BB0106, 0x13BC0107, 0x13BD0108, 0x13BE0109, 0x13BF010A, 0x13C00106, 0x13C10107, 0x13C20108, 0x13C30109, 0x13C4010A, 0x13C50106, 0x13C60107, 0x13C70108, 0x13C80109, 0x13C9010A, 0x13CA0054, 0x13CB0078, 0x13CC0054, 0x13D80078, 0x13D90054, 0x13E000E8, 0x13E10019, 0x13E200FE, 0x13E3000A, 0x13E40078, 0x13E80019, 0x13EA00E8, 0x13EB00FE, 0x13EC0019, 0x13EE00E8, 0x13EF00FE, 0x13F00019, 0x13F100FD, 0x13F30009, 0x13F60078, 0x13F80019, 0x14000094, 0x14800019, 0x14C2000A, 0x14C70120, 0x14C80121, 0x14C9000A, 0x14CD0019, 0x14CE00E8, 0x14D80019, 0x14DC0122, 0x14DD0019, 0x14E000FD, 0x14E100E8, 0x14E200FD, 0x14E30019, 0x14E700E8, 0x14E800FE, 0x14EA00FD, 0x14EB0019, 0x14EC0009, 0x14EE00E8, 0x14EF0019, 0x14F200E8, 0x14F30019, 0x14F400E8, 0x14F50019, 0x14FA00E8, 0x14FC00FD, 0x14FD0019, 0x14FE0009, 0x14FF0019, 0x150500E8, 0x150610E8, 0x150700E8, 0x15110019, 0x151200E8, 0x15140019, 0x151600FE, 0x15180019, 0x151A00FD, 0x151B0019, 0x151E00FD, 0x151F00E8, 0x15200019, 0x152C00E8, 0x152D0019, 0x153200FD, 0x15330019, 0x153500E8, 0x15370019, 0x153800E8, 0x15390019, 0x153A10E8, 0x153B1019, 0x153C0019, 0x153D00FE, 0x153E00E8, 0x153F00FE, 0x154300E8, 0x154600FE, 0x154700E8, 0x154900FE, 0x154F00E8, 0x155100FE, 0x15520019, 0x155300FD, 0x15570019, 0x155800FE, 0x155900E8, 0x155A00FE, 0x155B00E8, 0x155E00FE, 0x156400E8, 0x156700FE, 0x156C0019, 0x156E08E8, 0x156F0123, 0x15700019, 0x157100E8, 0x15720124, 0x157300E8, 0x15740019, 0x157600FD, 0x157700E8, 0x15780019, 0x157C00FE, 0x157E0019, 0x15800054, 0x158A0078, 0x16000096, 0x16180098, 0x16300078, 0x16400063, 0x16720055, 0x16730054, 0x16760078, 0x167D0006, 0x16800125, 0x16930078, 0x16980071, 0x16B30078, 0x16C00071, 0x16CC0078, 0x16D00071, 0x16F00078, 0x17000006, 0x17010126, 0x17030006, 0x170500E0, 0x17060126, 0x17070006, 0x170C0078, 0x170E0126, 0x170F0078, 0x17400054, 0x174D0078, 0x174E0054, 0x177A0078, 0x17801054, 0x17EB0078, 0x17F80054, 0x17FE0078, 0x18008805, 0x18010006, 0x18020054, 0x18030071, 0x18040009, 0x18090054, 0x180A0009, 0x180E0099, 0x180F00BF, 0x18100054, 0x18110127, 0x18120128, 0x18130129, 0x1814012A, 0x18150083, 0x18180099, 0x18190081, 0x181B1054, 0x181C112B, 0x181D112C, 0x181E0071, 0x181F0054, 0x18200078, 0x18210071, 0x18260871, 0x18320071, 0x18380871, 0x18390071, 0x183A0871, 0x183C0071, 0x183D0871, 0x183F0071, 0x184A0871, 0x184B0071, 0x184C0078, 0x184D0083, 0x184E1037, 0x184F0881, 0x18500099, 0x18510071, 0x18560871, 0x18620071, 0x18680871, 0x18690071, 0x186A0871, 0x186C0071, 0x186D0871, 0x186F0071, 0x187A0871, 0x187B0071, 0x187C0871, 0x187E0081, 0x187F0881, 0x18800078, 0x18830071, 0x18970078, 0x18991071, 0x18C80094, 0x18C978AD, 0x18CA78AE, 0x18CB7894, 0x18D00071, 0x18DC0078, 0x18E00054, 0x18E80078, 0x18F80071, 0x19001094, 0x190F1054, 0x191010AD, 0x191110AE, 0x1912112D, 0x1913112E, 0x1914112F, 0x19151094, 0x19220078, 0x19286854, 0x19291930, 0x192A1931, 0x192B1932, 0x192C1933, 0x192D1934, 0x192E1935, 0x192F1936, 0x19301894, 0x193E1854, 0x194018AD, 0x194118AE, 0x1942192D, 0x1943192E, 0x1944192F, 0x19451894, 0x19591937, 0x195A1938, 0x195B1939, 0x195C193A, 0x195D193B, 0x195E193C, 0x195F193D, 0x19601094, 0x19666854, 0x19681894, 0x19806894, 0x19AC1094, 0x19B96894, 0x19BC6854, 0x19BE6894, 0x19EF6854, 0x19F01094, 0x1A000071, 0x26DB0078, 0x26E00054, 0x27000071, 0x4FDE0078, 0x50000071, 0x52470078, 0x52480054, 0x52640078, 0x53800037, 0x538C0078, 0x54000071, 0x540100C8, 0x54020071, 0x54030083, 0x54040071, 0x541200A7, 0x54130083, 0x54140054, 0x54160078, 0x56000071, 0x6BD20078, 0x6C00013E, 0x7000013F, 0x7C800871, 0x7D070071, 0x7D080871, 0x7D0A0071, 0x7D0B0871, 0x7D120071, 0x7D130871, 0x7D140071, 0x7D150871, 0x7D170078, 0x7D180871, 0x7D360078, 0x7D380871, 0x7D6D0078, 0x7D801055, 0x7D840078, 0x7D8A1055, 0x7D8C0078, 0x7D8F0083, 0x7D90289B, 0x7D95089B, 0x7DA10078, 0x7DA2089B, 0x7DA8409E, 0x7DAA389E, 0x7DAB409E, 0x7DAC389E, 0x7DAD409E, 0x7DAE389E, 0x7DAF409E, 0x7DB0389E, 0x7DB1409E, 0x7DB2389E, 0x7DB3409E, 0x7DB4389E, 0x7DB5409E, 0x7DB6389E, 0x7DB7409E, 0x7DB8389E, 0x7DB9409E, 0x7DBA389E, 0x7DBB409E, 0x7DBC389E, 0x7DBD409E, 0x7DBE389E, 0x7DBF409E, 0x7DC0389E, 0x7DC1409E, 0x7DC8389E, 0x7DC9409E, 0x7DCA389E, 0x7DCB409E, 0x7DCC389E, 0x7DCD409E, 0x7DCE389E, 0x7DCF409E, 0x7DD1389E, 0x7DD2409E, 0x7DD4389E, 0x7DD5409E, 0x7DD6389E, 0x7DD7409E, 0x7DD90078, 0x7DEA209E, 0x7DEB489E, 0x7DEC209E, 0x7DEF409E, 0x7DF3389E, 0x7DF5409E, 0x7DFC389E, 0x7DFD209E, 0x7DFE409E, 0x7DFF389E, 0x7E00409E, 0x7E32209E, 0x7E4C389E, 0x7E70489E, 0x7E7B409E, 0x7E89209E, 0x7E97389E, 0x7E9A489E, 0x7E9E209E, 0x7E9F00B4, 0x7EA00078, 0x7EA8389E, 0x7EAC209E, 0x7EAE389E, 0x7EAF209E, 0x7EB0389E, 0x7EB1209E, 0x7EB4389E, 0x7EB5209E, 0x7EB8389E, 0x7EBA209E, 0x7EC3389E, 0x7EC80078, 0x7EC9389E, 0x7ECB209E, 0x7ECC389E, 0x7ECD209E, 0x7EDA389E, 0x7EDB209E, 0x7EDC389E, 0x7EDE209E, 0x7EE2389E, 0x7EE3209E, 0x7EE40078, 0x7EF8409E, 0x7EFE4140, 0x7EFF0078, 0x7F000083, 0x7F088006, 0x7F0C80BF, 0x7F0D0078, 0x7F100083, 0x7F120078, 0x7F188006, 0x7F198099, 0x7F1A8038, 0x7F1B80BF, 0x7F230006, 0x7F2480BF, 0x7F251006, 0x7F271038, 0x7F28600C, 0x7F2A6006, 0x7F2C6099, 0x7F2D60BF, 0x7F306006, 0x7F31600B, 0x7F326019, 0x7F346006, 0x7F356007, 0x7F360078, 0x7F38409E, 0x7F41209E, 0x7F46489E, 0x7F47209E, 0x7F49489E, 0x7F4A209E, 0x7F4C489E, 0x7F4D209E, 0x7F4E489E, 0x7F4F209E, 0x7F50489E, 0x7F51209E, 0x7F52489E, 0x7F53209E, 0x7F54489E, 0x7F55209E, 0x7F5A489E, 0x7F5B209E, 0x7F5C489E, 0x7F5D209E, 0x7F5E489E, 0x7F5F209E, 0x7F60489E, 0x7F61209E, 0x7F62489E, 0x7F63209E, 0x7F64489E, 0x7F65209E, 0x7F66489E, 0x7F67209E, 0x7F68489E, 0x7F69209E, 0x7F6A489E, 0x7F6B209E, 0x7F6C489E, 0x7F6D209E, 0x7F6E489E, 0x7F6F209E, 0x7F70489E, 0x7F71209E, 0x7F72489E, 0x7F73209E, 0x7F74489E, 0x7F75209E, 0x7F76489E, 0x7F77209E, 0x7F7A489E, 0x7F7B209E, 0x7F7F0078, 0x7F818806, 0x7F828808, 0x7F838806, 0x7F848809, 0x7F858806, 0x7F86880C, 0x7F88880E, 0x7F898810, 0x7F8A8812, 0x7F8B8814, 0x7F8C8816, 0x7F8D880C, 0x7F8E8818, 0x7F8F881A, 0x7F908806, 0x7F918860, 0x7F9E8806, 0x7F9F8837, 0x7FA18861, 0x7FAE8819, 0x7FB0880A, 0x7FB15009, 0x7FB25006, 0x7FB35071, 0x7FB85081, 0x7FB95071, 0x7FCF5081, 0x7FD05071, 0x7FE00078, 0x7FE15071, 0x7FE40078, 0x7FE55071, 0x7FE80078, 0x7FE95071, 0x7FEC0078, 0x7FED5071, 0x7FEF0078, 0x7FF08808, 0x7FF18819, 0x7FF28854, 0x7FF38808, 0x7FF45054, 0x7FF55019, 0x7FF75054, 0x7FF80078, 0x7FFD0141, 0x7FFE0054, 0x7FFF0078, 0x80000071, 0x80060078, 0x80070071, 0x801F0078, 0x80200071, 0x80270078, 0x80280071, 0x802F0078, 0x80400071, 0x807E0078, 0x80800097, 0x80810094, 0x80820078, 0x808400B6, 0x808500B7, 0x808600B8, 0x808700B9, 0x808800B0, 0x808900BA, 0x808A00BB, 0x808B00BC, 0x808C00BD, 0x808D0142, 0x808E0143, 0x808F0144, 0x80900145, 0x809100B1, 0x80920146, 0x80930147, 0x80940148, 0x80950149, 0x8096014A, 0x8097014B, 0x8098014C, 0x8099014D, 0x809A0078, 0x809C0094, 0x80A0014E, 0x80A1014F, 0x80A20150, 0x80A30151, 0x80A40152, 0x80A50150, 0x80A60153, 0x80A70151, 0x80A80154, 0x80A90155, 0x80AA0156, 0x80AB0157, 0x80AC014F, 0x80AE0158, 0x80B00154, 0x80B30150, 0x80B50155, 0x80B60153, 0x80B90151, 0x80BA0150, 0x80BB005F, 0x80BD0054, 0x80C500C3, 0x80C60078, 0x81800071, 0x819000AD, 0x819100B0, 0x81920078, 0x81980071, 0x81A50159, 0x81A60078, 0x81C00071, 0x81CF0078, 0x81D00071, 0x81E20078, 0x81E40071, 0x81E80094, 0x81E90158, 0x81EA015A, 0x81EB0078, 0x8200015B, 0x8214015C, 0x82280071, 0x824F0078, 0x825000A8, 0x825100A9, 0x825200AA, 0x825300AB, 0x825400AC, 0x82550078, 0x8400009B, 0x84030078, 0x8404009B, 0x841B0078, 0x841C009B, 0x841D0078, 0x841E009B, 0x841F0078, 0x8500009B, 0x85010083, 0x85020078, 0x85030083, 0x85040078, 0x85060083, 0x8508009B, 0x850A0078, 0x850B009B, 0x850C0078, 0x850D009B, 0x851A0078, 0x851C0083, 0x851E0078, 0x8520015D, 0x8521015E, 0x8522015F, 0x85230160, 0x85240078, 0x8528009A, 0x852D0078, 0xE8000094, 0xE87B0078, 0xE8800094, 0xE8940078, 0xE8950094, 0xE8AF0894, 0xE8B300A7, 0xE8B40083, 0xE8B50094, 0xE8B700A7, 0xE8BA0057, 0xE8BE0083, 0xE8C20094, 0xE8C30083, 0xE8C60094, 0xE8D50083, 0xE8D70094, 0xE8DE0894, 0xE8E10094, 0xE8EF0078, 0xE9000054, 0xE9210083, 0xE9230078, 0xE9800054, 0xE9AC0078, 0xEA002877, 0xEA0D2855, 0xEA1A2877, 0xEA272855, 0xEA342877, 0xEA412855, 0xEA4E2877, 0xEA500078, 0xEA512877, 0xEA520078, 0xEA532877, 0xEA540078, 0xEA552877, 0xEA5B2855, 0xEA5D0078, 0xEA5F2855, 0xEA620078, 0xEA632855, 0xEA682877, 0xEA752855, 0xEA822877, 0xEA830078, 0xEA842877, 0xEA860078, 0xEA872877, 0xEA8F2855, 0xEA9C2877, 0xEA9D0078, 0xEA9E2877, 0xEAA40078, 0xEAA52877, 0xEAA92855, 0xEAB62877, 0xEAC32855, 0xEAD02877, 0xEADD2855, 0xEAEA2877, 0xEAF72855, 0xEB042877, 0xEB112855, 0xEB1E2877, 0xEB2B2855, 0xEB382877, 0xEB452855, 0xEB530078, 0xEB542877, 0xEB612855, 0xEB712877, 0xEB7E2855, 0xEB8E2877, 0xEB9B2855, 0xEBAB2877, 0xEBB82855, 0xEBC82877, 0xEBD52855, 0xEBE50078, 0xEBE7280E, 0xEBE82810, 0xEBE92812, 0xEBEA2814, 0xEBEB2816, 0xEBEC280E, 0xEBED2810, 0xEBEE2812, 0xEBEF2814, 0xEBF02816, 0xEBF1280E, 0xEBF22810, 0xEBF32812, 0xEBF42814, 0xEBF52816, 0xEBF6280E, 0xEBF72810, 0xEBF82812, 0xEBF92814, 0xEBFA2816, 0xEBFB280E, 0xEBFC2810, 0xEBFD2812, 0xEBFE2814, 0xEBFF2816, 0xEC000078 ]; immutable uint[] a1 = [ 0x00000071, 0x536C0078, 0x7C000871, 0x7D0F0078 ]; immutable uint[] a7 = [ 0x00100057, 0x00400078, 0x00800083, 0x00F80078, 0x8000013F, 0xFFFF0078 ]; immutable uint[] a8 = [ 0x0000013F, 0x7FFF0078 ]; immutable uint[] a16 = [ 0x00800865, 0x00880065, 0x00890865, 0x00930065, 0x00940865, 0x00980161, 0x00991065, 0x009A0865, 0x009C0863, 0x009F1063, 0x00A00063, 0x00A10863, 0x00A41055, 0x00A50065, 0x00A60865, 0x00A90065, 0x00AA0865, 0x00B30065, 0x00B40865, 0x00BC0863, 0x00BF1162, 0x00C00163, 0x00C10065, 0x00C30063, 0x00C40068, 0x00C50063, 0x00C60055, 0x00C70164, 0x00C80063, 0x00C90068, 0x00CA0165, 0x00CB0166, 0x00CC0065, 0x00CD0055, 0x00CE0167, 0x00CF0168, 0x00D00865, 0x00D10065, 0x00D30063, 0x00D4006F, 0x00D50055, 0x00D60065, 0x00D70863, 0x00D80070, 0x00D90063, 0x00DB0169, 0x00DC0065, 0x00DD0071, 0x00DE0065, 0x00DF016A, 0x00E00071, 0x00E21074, 0x00E31072, 0x00E41073, 0x00E51074, 0x00E60863, 0x00EE016B, 0x00EF0865, 0x00F20065, 0x00F30865, 0x00F81072, 0x00F91073, 0x00FA0865, 0x00FB016C, 0x00FC0865, 0x010E0065, 0x010F0865, 0x01100055, 0x01110065, 0x01130865, 0x011A0055, 0x011D0063, 0x011E016D, 0x011F0055, 0x0120016E, 0x01210078, 0x01280055, 0x0129016F, 0x012A0055, 0x012B007A, 0x012C0170, 0x012D0171, 0x012E0055, 0x01310172, 0x01320055, 0x01340173, 0x01350055, 0x01370173, 0x01380055, 0x013A0174, 0x013B0055, 0x0141007D, 0x01420055, 0x0145007E, 0x01460055, 0x01587881, 0x015C0082, 0x015D0081, 0x01610037, 0x01630082, 0x01680081, 0x01690037, 0x016C1037, 0x016F0037, 0x01707881, 0x01720037, 0x01800083, 0x01A00883, 0x01A20175, 0x01A30083, 0x01B80078, 0x01BA0037, 0x01BB0078, 0x01C20837, 0x01C30806, 0x01C40885, 0x01C50078, 0x01C70887, 0x01C80060, 0x01D50860, 0x01D60889, 0x01D80061, 0x01E50861, 0x01E6088C, 0x01E70078, 0x01E81176, 0x01E90877, 0x01EA1177, 0x01EB0055, 0x01EC0065, 0x01F81093, 0x01F90055, 0x01FA1178, 0x01FB0063, 0x01FC10D8, 0x01FD0065, 0x01FE0077, 0x02000892, 0x02020092, 0x02030892, 0x02040092, 0x02060892, 0x02070092, 0x02080060, 0x020C0860, 0x020D0060, 0x02180061, 0x021C0861, 0x021D0061, 0x02280893, 0x022A0093, 0x022B0893, 0x022C0093, 0x022E0893, 0x022F0093, 0x02300065, 0x023B0865, 0x023C0065, 0x02410083, 0x02430078, 0x02440095, 0x02450065, 0x02600863, 0x02610063, 0x02670078, 0x02680865, 0x026A0065, 0x026B0865, 0x026C0065, 0x026D0865, 0x02700065, 0x02710865, 0x02740065, 0x02750865, 0x027B0065, 0x027C0865, 0x027D0078, 0x02800065, 0x02880078, 0x02980096, 0x02AB0078, 0x02AC0081, 0x02AD0097, 0x02B00098, 0x02C31055, 0x02C40097, 0x02C50078, 0x02C80083, 0x02E1009A, 0x02E20083, 0x02E40078, 0x02E8009B, 0x02F50078, 0x02F8009B, 0x02F9009A, 0x02FA0078, 0x0300009C, 0x03020078, 0x03050140, 0x0306009D, 0x03070054, 0x03080083, 0x030B0078, 0x030D009D, 0x030E0078, 0x030F009D, 0x0310009E, 0x0311089E, 0x0313009E, 0x031D0078, 0x0320009E, 0x03250083, 0x032F0078, 0x03300179, 0x0331017A, 0x0332017B, 0x0333017C, 0x0334017D, 0x033500A5, 0x0336009D, 0x0337009E, 0x033A109E, 0x033C009E, 0x0369089E, 0x036A009E, 0x036B0083, 0x036E009C, 0x036F0083, 0x0372009F, 0x03730083, 0x03740054, 0x03750083, 0x0377009E, 0x0378000F, 0x03790011, 0x037A0013, 0x037B0015, 0x037C0017, 0x037D009E, 0x037E00A6, 0x037F009E, 0x0380009D, 0x03870057, 0x03880083, 0x0389009E, 0x03980083, 0x03A50078, 0x03A6009E, 0x03B70078, 0x03C0009E, 0x03D30083, 0x03D8009E, 0x03D90078, 0x04800083, 0x048100A7, 0x04820071, 0x04940871, 0x04950071, 0x04980871, 0x04990071, 0x049D0078, 0x049E0071, 0x049F00A7, 0x04A00083, 0x04A400A7, 0x04A60083, 0x04A70078, 0x04A80083, 0x04AA0078, 0x04AC0871, 0x04B00071, 0x04B10083, 0x04B20097, 0x04B3017E, 0x04B4017F, 0x04B50180, 0x04B60181, 0x04B70182, 0x04B80078, 0x04BE0071, 0x04BF0078, 0x04C00083, 0x04C100A7, 0x04C20071, 0x04C60078, 0x04C70071, 0x04C80078, 0x04C90071, 0x04D40078, 0x04D50071, 0x04D80078, 0x04DB0071, 0x04DD0078, 0x04DE0071, 0x04DF00A7, 0x04E00083, 0x04E20078, 0x04E300A7, 0x04E40078, 0x04E508A7, 0x04E60083, 0x04E70078, 0x04EB00A7, 0x04EC0078, 0x04EE0871, 0x04F00071, 0x04F10083, 0x04F20078, 0x04F3017E, 0x04F4017F, 0x04F50180, 0x04F60181, 0x04F70182, 0x04F80071, 0x04F90008, 0x04FA00B6, 0x04FB00B7, 0x04FC0183, 0x04FD0078, 0x05000083, 0x050100A7, 0x05020071, 0x05050078, 0x05070071, 0x05080078, 0x05090071, 0x05140078, 0x05150071, 0x05180078, 0x05190871, 0x051A0071, 0x051B0078, 0x051C0071, 0x051D0078, 0x051F00A7, 0x05200083, 0x05210078, 0x05230083, 0x05240078, 0x05250083, 0x05270078, 0x052C0871, 0x052E0078, 0x0533017E, 0x0534017F, 0x05350180, 0x05360181, 0x05370182, 0x05380083, 0x05390071, 0x053A0078, 0x05400083, 0x054100A7, 0x05420071, 0x05540078, 0x05550071, 0x05580078, 0x05590071, 0x055D0078, 0x055E0071, 0x055F00A7, 0x05600083, 0x056400A7, 0x05660083, 0x05670078, 0x05700071, 0x05710083, 0x05720078, 0x0573017E, 0x0574017F, 0x05750180, 0x05760181, 0x05770182, 0x05780008, 0x05790078, 0x05800083, 0x058100A7, 0x05820071, 0x05860078, 0x05870071, 0x05880078, 0x05890071, 0x05940078, 0x05950071, 0x05980078, 0x05990071, 0x059D0078, 0x059E0071, 0x059F0083, 0x05A20078, 0x05A300A7, 0x05A40078, 0x05A508A7, 0x05A60083, 0x05A70078, 0x05AB00A7, 0x05AC0078, 0x05AE0871, 0x05AF0071, 0x05B10078, 0x05B3017E, 0x05B4017F, 0x05B50180, 0x05B60181, 0x05B70182, 0x05B80071, 0x05B90078, 0x05C10071, 0x05C50078, 0x05C70071, 0x05C80078, 0x05C90071, 0x05CB0078, 0x05CC0071, 0x05CD0078, 0x05CF0071, 0x05D00078, 0x05D10071, 0x05D20078, 0x05D40071, 0x05D50078, 0x05D70071, 0x05DD0078, 0x05DF00A7, 0x05E10078, 0x05E300A7, 0x05E40078, 0x05E508A7, 0x05E60083, 0x05E70078, 0x05EB00A7, 0x05EC0078, 0x05F3017E, 0x05F4017F, 0x05F50180, 0x05F60181, 0x05F70182, 0x05F80184, 0x05F90054, 0x05FC0008, 0x05FD0078, 0x060000A7, 0x06020071, 0x06060078, 0x06070071, 0x06080078, 0x06090071, 0x06140078, 0x06150071, 0x061D0078, 0x061F0083, 0x062000A7, 0x06220078, 0x06230083, 0x06240078, 0x06250083, 0x06270078, 0x062A0083, 0x062B0078, 0x06300071, 0x06310078, 0x0633017E, 0x0634017F, 0x06350180, 0x06360181, 0x06370182, 0x06380078, 0x064100A7, 0x06420071, 0x06460078, 0x06470071, 0x06480078, 0x06490071, 0x06540078, 0x06550071, 0x065D0078, 0x065E0071, 0x065F00B2, 0x066000A7, 0x06620078, 0x066308A7, 0x06640078, 0x066508A7, 0x06660083, 0x06670078, 0x066A00A7, 0x066B0078, 0x06700071, 0x06710078, 0x0673017E, 0x0674017F, 0x06750180, 0x06760181, 0x06770182, 0x06780078, 0x068100A7, 0x06820071, 0x06860078, 0x06870071, 0x06880078, 0x06890071, 0x06940078, 0x06950071, 0x069D0078, 0x069F00A7, 0x06A00083, 0x06A20078, 0x06A300A7, 0x06A40078, 0x06A508A7, 0x06A60083, 0x06A70078, 0x06AB00A7, 0x06AC0078, 0x06B00071, 0x06B10078, 0x06B3017E, 0x06B4017F, 0x06B50180, 0x06B60181, 0x06B70182, 0x06B80078, 0x06C100A7, 0x06C20071, 0x06CB0078, 0x06CD0071, 0x06DF0078, 0x06E00071, 0x06E30078, 0x06E700A7, 0x06E90083, 0x06EA0078, 0x06EC00A7, 0x06EE08A7, 0x06EF00A7, 0x06F00078, 0x06F900A7, 0x06FA0078, 0x07000071, 0x07180083, 0x07191071, 0x071A0083, 0x071D0078, 0x071F0008, 0x07200071, 0x07230083, 0x07270097, 0x0728017E, 0x0729017F, 0x072A0180, 0x072B0181, 0x072C0182, 0x072D0097, 0x072E0078, 0x07400071, 0x07410078, 0x07430071, 0x07440078, 0x07460071, 0x07470078, 0x074A0071, 0x07540078, 0x07550071, 0x07580083, 0x07591071, 0x075A0083, 0x075E0071, 0x075F0078, 0x07600071, 0x07620078, 0x07640083, 0x07670078, 0x0768017E, 0x0769017F, 0x076A0180, 0x076B0181, 0x076C0182, 0x076D0078, 0x076E1071, 0x076F0078, 0x07800094, 0x07820097, 0x07890094, 0x078C0083, 0x078D0094, 0x0790017E, 0x0791017F, 0x07920180, 0x07930181, 0x07940182, 0x079500B3, 0x079A0083, 0x079D00BF, 0x079F00A7, 0x07A00071, 0x07A10871, 0x07A20071, 0x07A60871, 0x07A70071, 0x07AB0871, 0x07AC0071, 0x07B40871, 0x07B50078, 0x07B80083, 0x07B90883, 0x07BB1083, 0x07BD0083, 0x07BF00A7, 0x07C00883, 0x07C10083, 0x07C20097, 0x07C30083, 0x07C40071, 0x07C60078, 0x07C80083, 0x07C90883, 0x07CA0083, 0x07CE0883, 0x07CF0083, 0x07D30883, 0x07D40083, 0x07DC0883, 0x07DD0083, 0x07DE0078, 0x07DF0094, 0x07E60078, 0x07E70094, 0x07E80097, 0x07E90078, 0x08000071, 0x08150078, 0x08160083, 0x081800A7, 0x08190078, 0x081B0083, 0x081D0078, 0x0820017E, 0x0821017F, 0x08220180, 0x08230181, 0x08240182, 0x08250097, 0x08280071, 0x082B00A7, 0x082C0083, 0x082D0078, 0x085000B5, 0x08630078, 0x08680071, 0x087D0097, 0x087E0078, 0x08800071, 0x08AD0078, 0x08AF0071, 0x08D10078, 0x08D40071, 0x08FD0078, 0x09000071, 0x09240078, 0x09250071, 0x09270078, 0x09280071, 0x092B0078, 0x092D0071, 0x092F0078, 0x09300071, 0x09440078, 0x09450071, 0x09470078, 0x09480071, 0x09580078, 0x09590071, 0x095B0078, 0x095C0071, 0x095F0078, 0x09610071, 0x09630078, 0x09640071, 0x096B0078, 0x096C0071, 0x09880078, 0x09890071, 0x098B0078, 0x098C0071, 0x09AD0078, 0x09AF0083, 0x09B00097, 0x09B400AD, 0x09B500AE, 0x09B6012D, 0x09B7012E, 0x09B8012F, 0x09B90185, 0x09BA0186, 0x09BB0187, 0x09BC0188, 0x09BD0184, 0x09BE0078, 0x09C00071, 0x09C80054, 0x09CD0078, 0x09D00071, 0x09FA0078, 0x0A000071, 0x0B360097, 0x0B370071, 0x0B3B0078, 0x0B400071, 0x0B4D00B4, 0x0B4E0078, 0x0B500071, 0x0B750097, 0x0B770189, 0x0B780078, 0x0B800071, 0x0B860078, 0x0B870071, 0x0B890083, 0x0B8A0078, 0x0B900071, 0x0B990083, 0x0B9A0097, 0x0B9B0078, 0x0BA00071, 0x0BA90083, 0x0BAA0078, 0x0BB00071, 0x0BB60078, 0x0BB70071, 0x0BB80078, 0x0BB90083, 0x0BBA0078, 0x0BC00071, 0x0BDA00C2, 0x0BDB0083, 0x0BDF00A7, 0x0BE40083, 0x0BEA0097, 0x0BEB0081, 0x0BEC0097, 0x0BED0008, 0x0BEE0083, 0x0BEF0078, 0x0BF0017E, 0x0BF1017F, 0x0BF20180, 0x0BF30181, 0x0BF40182, 0x0BF50078, 0x0BF80106, 0x0BF90107, 0x0BFA0108, 0x0BFB0109, 0x0BFC010A, 0x0BFD0078, 0x0C000006, 0x0C050083, 0x0C070078, 0x0C08017E, 0x0C09017F, 0x0C0A0180, 0x0C0B0181, 0x0C0C0182, 0x0C0D0078, 0x0C100071, 0x0C210081, 0x0C220071, 0x0C3C0078, 0x0C400071, 0x0C540083, 0x0C550078, 0x0C800071, 0x0C8E0078, 0x0C900083, 0x0C9100A7, 0x0C930083, 0x0C9400C8, 0x0C960078, 0x0C9800A7, 0x0C9C0083, 0x0C9E0078, 0x0CA20006, 0x0CA3017E, 0x0CA4017F, 0x0CA50180, 0x0CA60181, 0x0CA70182, 0x0CA80071, 0x0CB70078, 0x0CB80071, 0x0CBA0078, 0x0CC00071, 0x0CD50078, 0x0CD800A7, 0x0CE00071, 0x0CE400A7, 0x0CE50078, 0x0CE8017E, 0x0CE9017F, 0x0CEA0180, 0x0CEB0181, 0x0CEC0182, 0x0CED0078, 0x0CEF0006, 0x0CF00054, 0x0D000071, 0x0D0B0083, 0x0D0C00A7, 0x0D0E0078, 0x0D0F0097, 0x0D100078, 0x0E800055, 0x0E967881, 0x0E970081, 0x0E987881, 0x0E9D0081, 0x0E9E7881, 0x0EB17055, 0x0EB50055, 0x0ECD7881, 0x0EE00083, 0x0EE20078, 0x0F000865, 0x0F4B0855, 0x0F4D098A, 0x0F4E0078, 0x0F500865, 0x0F7D0078, 0x0F8008C9, 0x0F8408CA, 0x0F8808C9, 0x0F8B0078, 0x0F8C08CA, 0x0F8F0078, 0x0F9008C9, 0x0F9408CA, 0x0F9808C9, 0x0F9C08CA, 0x0FA008C9, 0x0FA30078, 0x0FA408CA, 0x0FA70078, 0x0FA808C9, 0x0FAC08CA, 0x0FB008C9, 0x0FB408CA, 0x0FB808CB, 0x0FB908CC, 0x0FBB08CD, 0x0FBC08CE, 0x0FBD08CF, 0x0FBE08D0, 0x0FBF0078, 0x0FC008C9, 0x0FC408D1, 0x0FC808C9, 0x0FCC08D1, 0x0FD008C9, 0x0FD408D1, 0x0FD808C9, 0x0FD9098B, 0x0FDA0078, 0x0FDB0855, 0x0FDC08CA, 0x0FDD08D2, 0x0FDE1037, 0x0FE00837, 0x0FE1098B, 0x0FE20078, 0x0FE30855, 0x0FE408D5, 0x0FE60837, 0x0FE808C9, 0x0FE90855, 0x0FEA0078, 0x0FEB0855, 0x0FEC08CA, 0x0FED08D6, 0x0FEE0837, 0x0FF008C9, 0x0FF10855, 0x0FF20890, 0x0FF30855, 0x0FF408CA, 0x0FF508D7, 0x0FF60837, 0x0FF80078, 0x0FF9098B, 0x0FFA0078, 0x0FFB0855, 0x0FFC08D9, 0x0FFD08DA, 0x0FFE0837, 0x0FFF0078, 0x10000805, 0x10011005, 0x10035805, 0x10041005, 0x10050057, 0x1007018C, 0x10085899, 0x10090099, 0x100B1006, 0x100C018D, 0x100D00DB, 0x100E018D, 0x100F00DB, 0x10100006, 0x10121006, 0x10130006, 0x1014018E, 0x1015018F, 0x10160190, 0x10175853, 0x10180007, 0x10191007, 0x101A0006, 0x101B1006, 0x101C0126, 0x101D0006, 0x101F0038, 0x10200006, 0x10220009, 0x10231006, 0x10250006, 0x102B1006, 0x102C0006, 0x102F1005, 0x10300057, 0x10320078, 0x10350057, 0x10387855, 0x10390078, 0x103A7910, 0x103B7911, 0x103C7912, 0x103D780B, 0x103E7809, 0x103F7855, 0x1040705D, 0x1041705B, 0x10427110, 0x10437111, 0x10447112, 0x1045700B, 0x10467009, 0x10470078, 0x10487081, 0x104A0078, 0x10500008, 0x105B0078, 0x10680083, 0x106E0095, 0x10700083, 0x10710095, 0x10720083, 0x10760078, 0x10801054, 0x10831077, 0x10841054, 0x10852877, 0x10872855, 0x10882877, 0x10892855, 0x108A2877, 0x108B0054, 0x108C2877, 0x108F0054, 0x10901054, 0x10910054, 0x10950991, 0x10962877, 0x10972855, 0x10982877, 0x109A1071, 0x109C2855, 0x109D1054, 0x109E2855, 0x109F2877, 0x10A00019, 0x10A22877, 0x10A32855, 0x10A50019, 0x10A60078, 0x10A9305F, 0x10AF3106, 0x10B01192, 0x10B11193, 0x10B21194, 0x10B31195, 0x10B41196, 0x10B51197, 0x10B61198, 0x10B71199, 0x10B8119A, 0x10B9119B, 0x10BA119C, 0x10BB119D, 0x10BC119E, 0x10BD119F, 0x10BE11A0, 0x10BF11A1, 0x10C001A2, 0x10C101A3, 0x10C20078, 0x10C80019, 0x10CA0054, 0x10CD0819, 0x10CE0054, 0x10D10019, 0x10D20054, 0x10E60854, 0x10E70819, 0x10E80054, 0x10FA0019, 0x110000E8, 0x11020019, 0x110408FB, 0x110500FC, 0x11070019, 0x110800E8, 0x11090059, 0x110A01A4, 0x110B0019, 0x110D00E8, 0x11110019, 0x111500E8, 0x111610E8, 0x111800E8, 0x111A0019, 0x111C00E8, 0x111E00FE, 0x111F00E8, 0x112008E8, 0x112101A5, 0x112200E8, 0x112308E8, 0x112500E8, 0x11260019, 0x112900FE, 0x112B0019, 0x112F00E8, 0x11300019, 0x113200FE, 0x11360819, 0x113708FE, 0x113900FE, 0x113A08FE, 0x113B00FE, 0x113C08FE, 0x113D00FE, 0x114008FE, 0x114100FE, 0x114208FE, 0x114300FE, 0x114408FE, 0x114500FE, 0x11460019, 0x114700FD, 0x11490019, 0x115100FE, 0x11520019, 0x115300E8, 0x115401A6, 0x115608E8, 0x115800FE, 0x115C0019, 0x115F00E8, 0x11600019, 0x116400FD, 0x116601A7, 0x11670019, 0x116800FE, 0x11690019, 0x116B00FE, 0x117008FE, 0x117200FE, 0x117508FE, 0x11770019, 0x117800FE, 0x11790102, 0x117A00E8, 0x117B0103, 0x117C00E8, 0x117D0104, 0x117E0105, 0x117F00E8, 0x11800054, 0x118400FE, 0x11860054, 0x119000E8, 0x11910054, 0x11940809, 0x11950054, 0x119B0094, 0x11BD0054, 0x11CA0094, 0x11CB0054, 0x11CD0019, 0x11DA00BF, 0x11DB0054, 0x11EE0078, 0x12000054, 0x12130078, 0x12200054, 0x12250078, 0x123018C4, 0x123118C5, 0x123218C6, 0x123318C7, 0x1234191F, 0x1235191A, 0x1236191B, 0x1237191C, 0x1238191D, 0x1239191E, 0x123A10C4, 0x123B10C5, 0x123C10C6, 0x123D10C7, 0x123E111F, 0x123F111A, 0x1240111B, 0x1241111C, 0x1242111D, 0x1243111E, 0x1244105A, 0x124510E3, 0x124610E4, 0x124710E5, 0x124811A8, 0x124911A9, 0x124A11AA, 0x124B11AB, 0x124C11AC, 0x124D11AD, 0x124E1094, 0x125B1918, 0x12681919, 0x1275010B, 0x1276010C, 0x1277010D, 0x1278010E, 0x1279010F, 0x127A0106, 0x127B0107, 0x127C0108, 0x127D0109, 0x127E010A, 0x127F00C3, 0x12800054, 0x12DB0019, 0x12DC0054, 0x12E00019, 0x12E10054, 0x12FC0019, 0x13000054, 0x13370019, 0x13380054, 0x134E0078, 0x13500054, 0x13590078, 0x13800054, 0x13820078, 0x13830054, 0x13850078, 0x13860054, 0x13A90078, 0x13AC0054, 0x13AF0078, 0x13B00054, 0x13B4000A, 0x13BB00C4, 0x13BC00C5, 0x13BD00C6, 0x13BE00C7, 0x13BF011F, 0x13C000C4, 0x13C100C5, 0x13C200C6, 0x13C300C7, 0x13C4011F, 0x13C500C4, 0x13C600C5, 0x13C700C6, 0x13C800C7, 0x13C9011F, 0x13CA0078, 0x13CC0054, 0x13DF0078, 0x13E00019, 0x13E100FD, 0x13E20009, 0x13E30078, 0x13E80019, 0x13E900E8, 0x13EA00FD, 0x13EB0019, 0x13EE00FD, 0x13EF0019, 0x13F100FE, 0x13F3000A, 0x13F60078, 0x13F80019, 0x14000094, 0x14800019, 0x14C10009, 0x14C601AE, 0x14C701AF, 0x14C80009, 0x14CC0019, 0x14CD00E8, 0x14D80019, 0x14E000FE, 0x14E100E8, 0x14E200FE, 0x14E30019, 0x14E400E8, 0x14E50019, 0x14E700FD, 0x14E90019, 0x14EA00FE, 0x14EB0019, 0x14EC000A, 0x14EE0019, 0x14F000E8, 0x14F30019, 0x14F400E8, 0x14F50019, 0x14FA01B0, 0x14FB00E8, 0x14FC00FE, 0x14FD0019, 0x14FE000A, 0x14FF0019, 0x150500E8, 0x150E0019, 0x150F00E8, 0x15110019, 0x151400E8, 0x151500FD, 0x15170019, 0x151A00FE, 0x151B0019, 0x151E00FE, 0x151F0019, 0x152B00E8, 0x152C0019, 0x153200FE, 0x15330019, 0x153500E8, 0x15380019, 0x153900E8, 0x153A1019, 0x153B0019, 0x153C00FD, 0x153D00E8, 0x153E00FD, 0x154200E8, 0x154500FD, 0x154600E8, 0x154800FD, 0x154E00E8, 0x155000FD, 0x155100E8, 0x15520019, 0x155300FE, 0x155700FD, 0x155800E8, 0x155900FD, 0x155A00E8, 0x155D00FD, 0x156300E8, 0x156600FD, 0x156B0019, 0x157101B1, 0x15730019, 0x157600FE, 0x15770019, 0x157900E8, 0x157A0019, 0x157B00FD, 0x157D00E8, 0x157F0019, 0x15800054, 0x158A0078, 0x16000096, 0x16170078, 0x16180098, 0x162F0078, 0x16400065, 0x16720054, 0x16750078, 0x167C0006, 0x167E005F, 0x167F0006, 0x16800125, 0x16930078, 0x16980071, 0x16B30078, 0x16B77881, 0x16B80078, 0x16C00071, 0x16CB0078, 0x16D00071, 0x16D30078, 0x16D40071, 0x16D70078, 0x16D80071, 0x16DB0078, 0x16DC0071, 0x16DF0078, 0x16E00071, 0x16E30078, 0x16E40071, 0x16E70078, 0x16E80071, 0x16EB0078, 0x16EC0071, 0x16EF0078, 0x17000006, 0x170100E0, 0x17030006, 0x17040126, 0x17050006, 0x170600E0, 0x17070006, 0x170B0099, 0x170C0078, 0x170E00E0, 0x170F0078, 0x17400054, 0x174F1054, 0x17500054, 0x17791054, 0x177A0078, 0x17801054, 0x17EB0078, 0x17F80054, 0x17FE0078, 0x18000006, 0x18020081, 0x180301B2, 0x1804000A, 0x18090054, 0x180A000A, 0x180E00B4, 0x180F00BF, 0x181001B3, 0x181101B4, 0x181201B5, 0x181301B6, 0x181401B7, 0x18150083, 0x18180081, 0x181B0054, 0x181C11B8, 0x181D0081, 0x181E0006, 0x181F0054, 0x18200071, 0x18320871, 0x18350071, 0x18380871, 0x183A0071, 0x183B0871, 0x183D0071, 0x183E0871, 0x183F0071, 0x184B0078, 0x184C0083, 0x184D1037, 0x184E0081, 0x184F8071, 0x18500071, 0x18620871, 0x18650071, 0x18680871, 0x186A0071, 0x186B0871, 0x186D0071, 0x186E0871, 0x186F0071, 0x187B0871, 0x187D0006, 0x187E0081, 0x187F8071, 0x18800078, 0x18820071, 0x18960078, 0x18981071, 0x18C70078, 0x18C80094, 0x18C978B6, 0x18CA78B7, 0x18CB7894, 0x18D00071, 0x18DC0078, 0x18E00054, 0x18E80078, 0x18F80071, 0x19001094, 0x190E1054, 0x190F0078, 0x191010B6, 0x191110B7, 0x191210B8, 0x191310B9, 0x191410B0, 0x19151094, 0x19220078, 0x192819B9, 0x192919BA, 0x192A19BB, 0x192B19BC, 0x192C19BD, 0x192D19BE, 0x192E19BF, 0x192F19C0, 0x19301894, 0x193E1854, 0x193F0094, 0x194018B6, 0x194118B7, 0x194218B8, 0x194318B9, 0x194418B0, 0x19451894, 0x195819C1, 0x195919C2, 0x195A19C3, 0x195B19C4, 0x195C19C5, 0x195D19C6, 0x195E19C7, 0x195F19C8, 0x19601094, 0x19666854, 0x19681894, 0x197F0078, 0x19806894, 0x19AC1094, 0x19B86894, 0x19BB6854, 0x19BD6894, 0x19EF6854, 0x19F01094, 0x19FF6854, 0x1A000071, 0x26DB0078, 0x26E00054, 0x27000071, 0x4FDE0078, 0x50000071, 0x500A0081, 0x500B0071, 0x52460078, 0x52480054, 0x52630078, 0x53800037, 0x538B0078, 0x54000071, 0x54050083, 0x54060071, 0x541100A7, 0x54120083, 0x541300A7, 0x54140054, 0x54160078, 0x56000071, 0x6BD20078, 0x6C00013E, 0x7000013F, 0x7C800871, 0x7D070071, 0x7D0A0871, 0x7D0F0071, 0x7D120871, 0x7D130071, 0x7D150871, 0x7D170078, 0x7D180871, 0x7D350078, 0x7D380871, 0x7D6D0078, 0x7D801055, 0x7D830078, 0x7D891055, 0x7D8C0078, 0x7D8E089B, 0x7D90289B, 0x7D94280B, 0x7D95089B, 0x7D9B0078, 0x7D9C089B, 0x7D9E0078, 0x7DA0089B, 0x7DA20078, 0x7DA3089B, 0x7DA7109B, 0x7DA8209E, 0x7DAA489E, 0x7DAB209E, 0x7DAC489E, 0x7DAD209E, 0x7DAE489E, 0x7DAF209E, 0x7DB0489E, 0x7DB1209E, 0x7DB2489E, 0x7DB3209E, 0x7DB4489E, 0x7DB5209E, 0x7DB6489E, 0x7DB7209E, 0x7DB8489E, 0x7DB9209E, 0x7DBA489E, 0x7DBB209E, 0x7DBC489E, 0x7DBD209E, 0x7DBE489E, 0x7DBF209E, 0x7DC0489E, 0x7DC1209E, 0x7DC8489E, 0x7DC9209E, 0x7DCA489E, 0x7DCB209E, 0x7DCC489E, 0x7DCD209E, 0x7DCE489E, 0x7DCF209E, 0x7DD1489E, 0x7DD2209E, 0x7DD4489E, 0x7DD5209E, 0x7DD6489E, 0x7DD7209E, 0x7DD90078, 0x7DE9409E, 0x7DEA389E, 0x7DEB409E, 0x7DEF209E, 0x7DF3489E, 0x7DF5209E, 0x7DFC409E, 0x7DFD389E, 0x7DFE209E, 0x7DFF489E, 0x7E00409E, 0x7E32209E, 0x7E4B389E, 0x7E6F489E, 0x7E7A409E, 0x7E88209E, 0x7E96389E, 0x7E9A489E, 0x7E9E409E, 0x7E9F00BF, 0x7EA00078, 0x7EA8209E, 0x7EA9389E, 0x7EAD209E, 0x7EAE389E, 0x7EAF209E, 0x7EB0389E, 0x7EB3209E, 0x7EB5389E, 0x7EB7209E, 0x7EB9389E, 0x7EBA209E, 0x7EBB389E, 0x7EBC209E, 0x7EBE389E, 0x7EBF209E, 0x7EC1389E, 0x7EC2209E, 0x7EC4389E, 0x7EC5209E, 0x7EC6389E, 0x7EC80078, 0x7EC9389E, 0x7ECB209E, 0x7ECE389E, 0x7ECF209E, 0x7EDA389E, 0x7EDB209E, 0x7EE1389E, 0x7EE3209E, 0x7EE40078, 0x7EF8409E, 0x7EFE0054, 0x7EFF0078, 0x7F000083, 0x7F088006, 0x7F0B80B4, 0x7F0C8006, 0x7F0D0078, 0x7F100083, 0x7F120078, 0x7F188099, 0x7F198038, 0x7F1A80B4, 0x7F220006, 0x7F2380B4, 0x7F241006, 0x7F261038, 0x7F286006, 0x7F290078, 0x7F2A600C, 0x7F2B6006, 0x7F2C60B4, 0x7F2F6007, 0x7F306006, 0x7F31600D, 0x7F326019, 0x7F330078, 0x7F346008, 0x7F356006, 0x7F360078, 0x7F38489E, 0x7F39009E, 0x7F3A0078, 0x7F3B489E, 0x7F40409E, 0x7F45389E, 0x7F46409E, 0x7F48389E, 0x7F49409E, 0x7F4B389E, 0x7F4C409E, 0x7F4D389E, 0x7F4E409E, 0x7F4F389E, 0x7F50409E, 0x7F51389E, 0x7F52409E, 0x7F53389E, 0x7F54409E, 0x7F59389E, 0x7F5A409E, 0x7F5B389E, 0x7F5C409E, 0x7F5D389E, 0x7F5E409E, 0x7F5F389E, 0x7F60409E, 0x7F61389E, 0x7F62409E, 0x7F63389E, 0x7F64409E, 0x7F65389E, 0x7F66409E, 0x7F67389E, 0x7F68409E, 0x7F69389E, 0x7F6A409E, 0x7F6B389E, 0x7F6C409E, 0x7F6D389E, 0x7F6E409E, 0x7F6F389E, 0x7F70409E, 0x7F71389E, 0x7F72409E, 0x7F73389E, 0x7F74409E, 0x7F75389E, 0x7F76409E, 0x7F79389E, 0x7F7A409E, 0x7F7E0078, 0x7F7F0057, 0x7F808806, 0x7F818807, 0x7F838806, 0x7F84880A, 0x7F85880B, 0x7F86880D, 0x7F87880C, 0x7F88880F, 0x7F898811, 0x7F8A8813, 0x7F8B8815, 0x7F8C8817, 0x7F8D8806, 0x7F8E8819, 0x7F8F8806, 0x7F908860, 0x7F9D8835, 0x7F9E8836, 0x7F9F8838, 0x7FA08861, 0x7FAD8835, 0x7FAE8836, 0x7FAF8809, 0x7FB05006, 0x7FB1500A, 0x7FB25006, 0x7FB35071, 0x7FCF5081, 0x7FD05071, 0x7FDF0078, 0x7FE15071, 0x7FE40078, 0x7FE55071, 0x7FE80078, 0x7FE95071, 0x7FEC0078, 0x7FED5071, 0x7FEE0078, 0x7FF08808, 0x7FF18837, 0x7FF28808, 0x7FF30078, 0x7FF45019, 0x7FF65054, 0x7FF70078, 0x7FFC0141, 0x7FFE0054, 0x7FFF0078, 0x80000071, 0x80130078, 0x80140071, 0x801D0078, 0x801E0071, 0x80270078, 0x80280071, 0x802F0078, 0x80400071, 0x807D0078, 0x80800006, 0x80810078, 0x808300AD, 0x808400AE, 0x8085012D, 0x8086012E, 0x8087012F, 0x80880185, 0x80890186, 0x808A0187, 0x808B0188, 0x808C0184, 0x808D01C9, 0x808E01CA, 0x808F01CB, 0x809001CC, 0x809101CD, 0x809201CE, 0x809301CF, 0x809401D0, 0x809500BE, 0x809601D1, 0x809701D2, 0x809801D3, 0x809901D4, 0x809A0078, 0x809B0094, 0x80A0014E, 0x80A10152, 0x80A20153, 0x80A30157, 0x80A40154, 0x80A50155, 0x80A60156, 0x80A70152, 0x80A80150, 0x80A90153, 0x80AA01D5, 0x80AB0154, 0x80AC014F, 0x80AD0158, 0x80AF0152, 0x80B00154, 0x80B201D6, 0x80B30150, 0x80B501D7, 0x80B60153, 0x80B80156, 0x80B90152, 0x80BA005F, 0x80BC0054, 0x80C50078, 0x81800071, 0x818F0078, 0x8190012D, 0x819100BB, 0x81920078, 0x81980071, 0x81A50078, 0x81C00071, 0x81CF0097, 0x81D00071, 0x81E20078, 0x81E40071, 0x81E8014F, 0x81E90154, 0x81EA0155, 0x81EB0078, 0x8200015B, 0x8214015C, 0x82280071, 0x824F0078, 0x8250017E, 0x8251017F, 0x82520180, 0x82530181, 0x82540182, 0x82550078, 0x8400009B, 0x84030078, 0x8405009B, 0x841C0078, 0x841F009B, 0x84200078, 0x85000083, 0x85030078, 0x85060083, 0x8508009B, 0x851A0078, 0x851C0083, 0x851D0078, 0x851F0083, 0x852001D8, 0x852101D9, 0x852201DA, 0x852301DB, 0x85240078, 0x8528009A, 0x852C0078, 0xE8000094, 0xE87B0078, 0xE8800094, 0xE8930078, 0xE8950094, 0xE8AF0894, 0xE8B200A7, 0xE8B30083, 0xE8B50094, 0xE8B600A7, 0xE8B90057, 0xE8BD0083, 0xE8C10094, 0xE8C20083, 0xE8C60094, 0xE8D50083, 0xE8D70094, 0xE8DD0894, 0xE8E00094, 0xE8EF0078, 0xE9000054, 0xE9210083, 0xE9220054, 0xE9230078, 0xE9800054, 0xE9AB0078, 0xEA002877, 0xEA0D2855, 0xEA1A2877, 0xEA272855, 0xEA2A0078, 0xEA2B2855, 0xEA342877, 0xEA412855, 0xEA4E0078, 0xEA4F2877, 0xEA500078, 0xEA522877, 0xEA530078, 0xEA542877, 0xEA560078, 0xEA572877, 0xEA5B2855, 0xEA682877, 0xEA752855, 0xEA822877, 0xEA850078, 0xEA862877, 0xEA8A0078, 0xEA8B2877, 0xEA8E0078, 0xEA8F2855, 0xEA9C2877, 0xEA9F0078, 0xEAA02877, 0xEAA20078, 0xEAA52877, 0xEAA80078, 0xEAA92855, 0xEAB62877, 0xEAC32855, 0xEAD02877, 0xEADD2855, 0xEAEA2877, 0xEAF72855, 0xEB042877, 0xEB112855, 0xEB1E2877, 0xEB2B2855, 0xEB382877, 0xEB452855, 0xEB530078, 0xEB542877, 0xEB6029DC, 0xEB612855, 0xEB6D29DC, 0xEB6E2855, 0xEB712877, 0xEB7D29DC, 0xEB7E2855, 0xEB8A29DC, 0xEB8B2855, 0xEB8E2877, 0xEB9A29DC, 0xEB9B2855, 0xEBA729DC, 0xEBA82855, 0xEBAB2877, 0xEBB729DC, 0xEBB82855, 0xEBC429DC, 0xEBC52855, 0xEBC82877, 0xEBD429DC, 0xEBD52855, 0xEBE129DC, 0xEBE22855, 0xEBE50078, 0xEBE7280F, 0xEBE82811, 0xEBE92813, 0xEBEA2815, 0xEBEB2817, 0xEBEC280F, 0xEBED2811, 0xEBEE2813, 0xEBEF2815, 0xEBF02817, 0xEBF1280F, 0xEBF22811, 0xEBF32813, 0xEBF42815, 0xEBF52817, 0xEBF6280F, 0xEBF72811, 0xEBF82813, 0xEBF92815, 0xEBFA2817, 0xEBFB280F, 0xEBFC2811, 0xEBFD2813, 0xEBFE2815, 0xEBFF2817, 0xEC000078 ]; immutable uint[] a17 = [ 0x00000071, 0x536B0078, 0x7C000871, 0x7D0F0078 ]; immutable uint[] a23 = [ 0x00000057, 0x00010078, 0x00100057, 0x00400078, 0x00800083, 0x00F80078, 0x8000013F, 0xFFFF0078 ]; immutable uint[] a24 = [ 0x0000013F, 0x7FFF0078 ]; // The full set of all arrays to be searched. immutable Range[] FULL_DATA = [ Range(a0.length / uint.sizeof, a0), Range(a1.sizeof / uint.sizeof, a1), Range(0, null), Range(0, null), Range(0, null), Range(0, null), Range(0, null), Range(a7.sizeof / uint.sizeof, a7), Range(a8.sizeof / uint.sizeof, a8), Range(0, null), Range(0, null), Range(0, null), Range(0, null), Range(0, null), Range(0, null), Range(0, null), Range(a16.sizeof / uint.sizeof, a16), Range(a17.sizeof / uint.sizeof, a17), Range(0, null), Range(0, null), Range(0, null), Range(0, null), Range(0, null), Range(a23.sizeof / uint.sizeof, a23), Range(a24.sizeof / uint.sizeof, a24), Range(0, null), Range(0, null), Range(0, null), Range(0, null), Range(0, null), Range(0, null), Range(0, null) ]; // Array of uppercase differences immutable short[] UCDIFF = [ 0, -32, 743, 121, -1, -232, -300, 97, 163, 130, 56, -2, -79, -210, -206, -205, -202, -203, -207, -209, -211, -213, -214, -218, -217, -219, -83, 84, -38, -37, -31, -64, -63, -62, -57, -47, -54, -86, -80, 7, -96, -48, -59, 8, 74, 86, 100, 128, 112, 126, 9, -7205, -16, -26, -7264, -40 ]; // Array of lowercase differences immutable short[] LCDIFF = [ 0, 32, 1, -199, -121, 210, 206, 205, 79, 202, 203, 207, 211, 209, 213, 214, 218, 217, 219, 2, -97, -56, -130, -163, 83, 38, 37, 64, 63, -60, -7, 80, 48, 7264, -8, -74, -9, -86, -100, -112, -128, -126, -7517, -8383, -8262, 16, 26, 40 ]; // Array of titlecase differences immutable short[] TCDIFF = [ 3, 1, 0, -1 ]; // Array of mirrored character differences immutable short[] MIRROR_DIFF = [ 0, 1, -1, 2, -2, 16, -16, 3, -3, 2016, 138, 1824, 2104, 2108, 2106, -138, 8, 7, -8, -7, -1824, -2016, -2104, -2106, -2108 ]; // Array of all possible numeric values immutable int[] NUMERICS = [ -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -2, 100, 1000, 40, 50, 60, 70, 80, 90, 10000, 500, 5000, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 200, 300, 400, 600, 700, 800, 900, 2000, 3000, 4000, 6000, 7000, 8000, 9000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000 ]; // All possible packed data values, no duplicates immutable uint[] PACKED_DATA = [ 0x00000000, 0x0000012F, 0x0000016F, 0x0000014F, 0x0000018F, 0x0000018C, 0x000001B8, 0x000000B8, 0x000000BA, 0x020005B5, 0x040005B6, 0x00000099, 0x000000F8, 0x00000094, 0x02000069, 0x04000069, 0x06000069, 0x08000069, 0x0A000069, 0x0C000069, 0x0E000069, 0x10000069, 0x12000069, 0x14000069, 0x060005B9, 0x000001B9, 0x080005B9, 0x16020001, 0x18020001, 0x1A020001, 0x1C020001, 0x1E020001, 0x20020001, 0x22020001, 0x24020001, 0x26020001, 0x28020001, 0x2A020001, 0x2C020001, 0x2E020001, 0x30020001, 0x32020001, 0x34020001, 0x36020001, 0x38020001, 0x3A020001, 0x3C020001, 0x3E020001, 0x40020001, 0x42020001, 0x44020001, 0x46020001, 0x48020001, 0x060005B5, 0x080005B6, 0x000001BB, 0x000001B7, 0x16000802, 0x18000802, 0x1A000802, 0x1C000802, 0x1E000802, 0x20000802, 0x22000802, 0x24000802, 0x26000802, 0x28000802, 0x2A000802, 0x2C000802, 0x2E000802, 0x30000802, 0x32000802, 0x34000802, 0x36000802, 0x38000802, 0x3A000802, 0x3C000802, 0x3E000802, 0x40000802, 0x42000802, 0x44000802, 0x46000802, 0x48000802, 0x000000EC, 0x000001BC, 0x00000002, 0x0A0005BD, 0x00000130, 0x000000BC, 0x000000B9, 0x0600006B, 0x0800006B, 0x00001002, 0x0400006B, 0x0C0005BE, 0x4A0001AB, 0x00020001, 0x00000802, 0x00001802, 0x00040001, 0x00060001, 0x00002002, 0x00080001, 0x000C0001, 0x000E0001, 0x00100001, 0x00140001, 0x00160001, 0x00180001, 0x00004002, 0x00004802, 0x00200001, 0x00220001, 0x00000005, 0x00A60001, 0x01805802, 0x01042003, 0x00280001, 0x002C0001, 0x00000001, 0x00000000, 0x00007002, 0x00007802, 0x00009802, 0x0000A802, 0x0000B802, 0x0000C002, 0x0000C802, 0x0000D002, 0x00000004, 0x000001A4, 0x00000106, 0x00320001, 0x00340001, 0x00360001, 0x00380001, 0x0000E002, 0x0000E802, 0x0000F002, 0x0000F802, 0x00010002, 0x00010802, 0x00012002, 0x00012802, 0x00013802, 0x003A0001, 0x003E0001, 0x00013002, 0x0000001C, 0x00000107, 0x00400001, 0x00000018, 0x00014802, 0x000001B4, 0x00000038, 0x00000025, 0x00000050, 0x00000058, 0x00000045, 0x00000044, 0x020000C9, 0x060000C9, 0x0A0000C9, 0x0E0000C9, 0x120000C9, 0x000000D8, 0x0000005C, 0x00000008, 0x02000009, 0x06000009, 0x0A000009, 0x0E000009, 0x12000009, 0x0400000B, 0x0800000B, 0x0000000B, 0x1600000B, 0x4E00000B, 0x00000006, 0x4A00000B, 0x000001B5, 0x00420001, 0x0600000B, 0x0A00000B, 0x0E00000B, 0x1200000B, 0x3E00000B, 0x5200000B, 0x5600000B, 0x5A00000B, 0x5C00000B, 0x000001B6, 0x2400000A, 0x2800000A, 0x00000010, 0x020001AB, 0x060001AB, 0x0A0001AB, 0x0E0001AB, 0x120001AB, 0x00000108, 0x00015802, 0x00440001, 0x00016002, 0x00016802, 0x00017002, 0x00017802, 0x00018002, 0x00018802, 0x00440003, 0x00460001, 0x00480003, 0x00019802, 0x004A0001, 0x004C0001, 0x004E0001, 0x003C0001, 0x00500001, 0x00520001, 0x000001BD, 0x0000018D, 0x000001D0, 0x00000250, 0x00000230, 0x040005BE, 0x000000F9, 0x0200006B, 0x0A00006B, 0x0E00006B, 0x1200006B, 0x00540001, 0x00560001, 0x000005B9, 0x045A000A, 0x085A000A, 0x0C5A000A, 0x105A000A, 0x145A000A, 0x185A000A, 0x525A000A, 0x5E5A000A, 0x0401A00A, 0x0801A00A, 0x0C01A00A, 0x1001A00A, 0x1401A00A, 0x1801A00A, 0x5201A00A, 0x5E01A00A, 0x4E00000A, 0x5C00000A, 0x0E0005B9, 0x100005B9, 0x020005B9, 0x040005B9, 0x160005B9, 0x180005B9, 0x1A0005B9, 0x200005B9, 0x220005B9, 0x240005B9, 0x260005B9, 0x040001AB, 0x080001AB, 0x0C0001AB, 0x100001AB, 0x140001AB, 0x180001AB, 0x1C0001AB, 0x200001AB, 0x240001AB, 0x280001AB, 0x0C00006B, 0x1000006B, 0x1400006B, 0x1800006B, 0x1C00006B, 0x2000006B, 0x2400006B, 0x2800006B, 0x005C001C, 0x0001A81C, 0x1A0001AB, 0x1E0001AB, 0x220001AB, 0x260001AB, 0x2A0001AB, 0x160001AB, 0x020005B6, 0x100005B6, 0x280005B9, 0x2C0005B9, 0x300005B9, 0x0001B002, 0x020005BD, 0x0600000A, 0x0A00000A, 0x0E00000A, 0x1200000A, 0x1600000A, 0x3E00000A, 0x0C00000B, 0x1000000B, 0x1400000B, 0x2E0001AB, 0x320001AB, 0x360001AB, 0x3A0001AB, 0x3E0001AB, 0x420001AB, 0x460001AB, 0x640001AB, 0x680001AB, 0x6A0001AB, 0x6E0001AB, 0x720001AB, 0x760001AB, 0x7A0001AB, 0x00000013, 0x00000012, 0x0000005A, 0x000001B0, 0x7C00000B, 0x8000000B, 0x8200000B, 0x8600000B, 0x8C00000B, 0x6000000B, 0x9200000B, 0x9600000B, 0x9800000B, 0x9C00000B, 0xA000000B, 0xA400000B, 0x4A0001AA, 0x040001AA, 0x520001AA, 0x600001AA, 0x0C0001AA, 0x5E0001AA, 0x160001AA, 0x4C0001AA, 0x4E0001AA, 0x9E0001AA, 0x060001AA, 0x8800000A, 0x2A0001AA, 0x005E0001, 0x0001B802, 0x0400002B, 0x0800002B, 0x1600002B, 0x4C00002B, 0x00002802, 0x00003002, 0x000A0001, 0x00120001, 0x00003802, 0x001A0001, 0x001C0001, 0x001E0001, 0x00240001, 0x00005002, 0x00006002, 0x002A0001, 0x002E0001, 0x00300001, 0x00006802, 0x00008002, 0x00008802, 0x00009002, 0x0000A002, 0x0000B002, 0x0000D906, 0x00011002, 0x00011802, 0x00014002, 0x040000C9, 0x080000C9, 0x0C0000C9, 0x100000C9, 0x140000C9, 0x04000009, 0x08000009, 0x0C000009, 0x10000009, 0x14000009, 0x2200000B, 0x4C00000B, 0x2A00000B, 0x5000000B, 0x5400000B, 0x5800000B, 0x2600000A, 0x00015002, 0x00019002, 0x00000030, 0x000001BE, 0x0000014E, 0x00000210, 0x000001F0, 0x00580001, 0x065A000A, 0x0A5A000A, 0x0E5A000A, 0x125A000A, 0x165A000A, 0x1A5A000A, 0x4C5A000A, 0x4E5A000A, 0x0601A00A, 0x0A01A00A, 0x0E01A00A, 0x1201A00A, 0x1601A00A, 0x1A01A00A, 0x4C01A00A, 0x4E01A00A, 0x6000000A, 0x0000000A, 0x120005B9, 0x140005B9, 0x1C0005B9, 0x1E0005B9, 0x1600006B, 0x1A00006B, 0x1E00006B, 0x2200006B, 0x2600006B, 0x2A00006B, 0x0E0005B5, 0x040005B5, 0x2A0005B9, 0x2E0005B9, 0x0200000A, 0x0400000A, 0x0800000A, 0x0C00000A, 0x1000000A, 0x1400000A, 0x2A00000A, 0x2C0001AB, 0x300001AB, 0x340001AB, 0x380001AB, 0x3C0001AB, 0x400001AB, 0x440001AB, 0x480001AB, 0x620001AB, 0x660001AB, 0x500001AB, 0x6C0001AB, 0x700001AB, 0x740001AB, 0x780001AB, 0x520001AB, 0x7E00000B, 0x5E00000B, 0x8400000B, 0x8800000B, 0x8A00000B, 0x8E00000B, 0x9000000B, 0x9400000B, 0x9A00000B, 0x9E00000B, 0xA200000B, 0xA600000B, 0x5C0001AA, 0x3E0001AA, 0x7E0001AA, 0x0600002B, 0x0A00002B, 0x2A00002B, 0x4E00002B, 0x00000019 ];