sdfp12 / fp12 /convert.py
aka7774's picture
Upload 11 files
91b7cdf verified
raw
history blame
101 kB
import torch
# 0000_1111_1111
FP12_MAX = 0.5 * (1+0.5+0.25+0.125+0.0625+0.03125)
# 0000_0000_0000
FP12_MIN = 2 ** (-15)
def to_fp12(data: torch.Tensor):
data = data.to(dtype=torch.float16)
assert (data.abs() <= FP12_MAX).all().item(), f'max value = {data.abs().max().item()}'
# fp16: sEEE_EEff_ffff_ffff
#
# fp12 type-a: sEEE_ffff_ffff
# where EEE != 000
# mantissa = E-12 = -5..-11
# fp12 type-b: s000_ffff_f0GG
# mantissa = G-15 = -12..-15
# fp12 type-c: s000_ffff_f1HH
# mantissa = H-4 = -1..-4
#
# * significant bits
# 0000_0000 = 1 + 0
# 1000_0000 = 1 + 0.5
# 0100_0000 = 1 + 0.25
# 0010_0000 = 1 + 0.125
# 0001_0000 = 1 + 0.0625
# 0000_1000 = 1 + 0.03125
# 0000_0100 = 1 + 0.015625
# 0000_0010 = 1 + 0.0078125
# 0000_0001 = 1 + 0.00390625
#
idata = data.view(dtype=torch.int16).view(size=(-1,))
#assert idata.numel() % 2 == 0
mask_s = 0b1000_0000_0000_0000
mask_e = 0b0111_1100_0000_0000
mask_f = 0b0000_0011_1111_1111
# sign
s = ((idata & mask_s) >> 12).to(dtype=torch.uint8) & 0b1000
# exponential
e = ((idata & mask_e) >> 10) - 15
e = e.clamp(-15, -1)
E_mask = torch.logical_and(-11 <= e, e <= -5)
E = (e + 12).to(dtype=torch.int8).view(dtype=torch.uint8)
E[~E_mask] = 0
E += s
E[::2] <<= 4
E[::2] += E[1::2]
E = E[::2]
# significants
f = idata & mask_f
F = (f >> 2).to(dtype=torch.uint8)
## significants of type-b
G_mask = e < -11
Ge = (e + 15).to(dtype=torch.int8).view(dtype=torch.uint8)
Ge = Ge.clamp(0, 3)
F[G_mask] = (F[G_mask] & 0b1111_1000) + Ge[G_mask]
## significants of type-c
H_mask = -5 < e
He = (e + 4).to(dtype=torch.int8).view(dtype=torch.uint8)
He = He.clamp(0, 3)
F[H_mask] = (F[H_mask] & 0b1111_1000) + He[H_mask] + 0b100
return E, F
def fp12_to_fp16_2(exp: torch.Tensor, frac: torch.Tensor):
assert exp.dtype == torch.uint8
assert frac.dtype == torch.uint8
assert exp.ndim == 1
assert frac.ndim == 1
assert exp.size(0) * 2 == frac.size(0)
FP16 = torch.zeros(frac.shape, dtype=torch.int16, device=frac.device)
exp = exp[..., None].expand(size=(-1,2)).contiguous().view((-1,))
exp[::2] >>= 4
exp[1::2] &= 0b0000_1111
# sign
FP16[:] = exp & 0b0000_1000
FP16 <<= 12
# exponential
exp_e = (exp & 0b0111).to(dtype=torch.int16)
exp_gh = ((frac >> 5) & 0b11).to(dtype=torch.int16)
E_mask = exp_e != 0
G_mask = torch.logical_and(exp_e == 0, (frac >> 7) == 0)
H_mask = torch.logical_and(exp_e == 0, (frac >> 7) == 1)
# EEE | EEE+3 | << 10 | e |
# --- | ----- | ------------------- | ------ |
# 001 | 0100 | s001_0000_0000_0000 | 00100 = 4 -> -11
# GG | << 10 | e |
# ---| ------------------- | ------ |
# 00 | s000_0000_0000_0000 | 00000 = 0 -> -15
# 01 | s000_0100_0000_0000 | 00001 = 1 -> -14
# 10 | s000_1000_0000_0000 | 00010 = 2 -> -13
# 11 | s000_1100_0000_0000 | 00011 = 3 -> -12
# HH | HH+11 | << 10 | e |
# ---| ---- | ------------------- | ------ |
# 00 | 1011 | s010_1100_0000_0000 | 01011 = 11 -> -4
# 01 | 1100 | s011_0000_0000_0000 | 01100 = 12 -> -3
# 10 | 1101 | s011_0100_0000_0000 | 01101 = 13 -> -2
# 11 | 1110 | s011_1000_0000_0000 | 01110 = 14 -> -1
FP16 += (
## type-a
E_mask * (exp_e + 3) +
# ^ EEE - 12 = -15 + a <=> a = EEE + 3
## type-b
G_mask * exp_gh +
# ^ GG - 15 = -15 + a <=> a = GG
## type-c
H_mask * (exp_gh + 11)
# ^ HH - 4 = -15 + a <=> a = HH + 11
) << 10
# significants
FP16 += (
## type-a
E_mask * frac +
## type-b and type-c
(G_mask + H_mask) * (frac << 3)
).to(dtype=torch.int16) << 2 # TODO pad random value?
return FP16.view(dtype=torch.float16)
# s_eee_fff (fp12) -> S_EEEEE (fp16)
#EXP_MAP = torch.tensor([
# # -15 -14 -13 -12 -4 -3 -2 -1
# # 0_000_000 0_000_001 0_000_010 0_000_011 0_000_100 0_000_101 0_000_110 0_000_111
# 0b0_00000, 0b0_00001, 0b0_00010, 0b0_00011, 0b0_01011, 0b0_01100, 0b0_01101, 0b0_01110,
#
# # -11
# # 0_001_000 0_001_001 0_001_010 0_001_011 0_001_100 0_001_101 0_001_110 0_001_111
# 0b0_00100, 0b0_00100, 0b0_00100, 0b0_00100, 0b0_00100, 0b0_00100, 0b0_00100, 0b0_00100,
#
# # -10
# # 0_010_000 0_010_001 0_010_010 0_010_011 0_010_100 0_010_101 0_010_110 0_010_111
# 0b0_00101, 0b0_00101, 0b0_00101, 0b0_00101, 0b0_00101, 0b0_00101, 0b0_00101, 0b0_00101,
#
# # -9
# # 0_011_000 0_011_001 0_011_010 0_011_011 0_011_100 0_011_101 0_011_110 0_011_111
# 0b0_00110, 0b0_00110, 0b0_00110, 0b0_00110, 0b0_00110, 0b0_00110, 0b0_00110, 0b0_00110,
#
# # -8
# # 0_100_000 0_100_001 0_100_010 0_100_011 0_100_100 0_100_101 0_100_110 0_100_111
# 0b0_00111, 0b0_00111, 0b0_00111, 0b0_00111, 0b0_00111, 0b0_00111, 0b0_00111, 0b0_00111,
#
# # -7
# # 0_101_000 0_101_001 0_101_010 0_101_011 0_101_100 0_101_101 0_101_110 0_101_111
# 0b0_01000, 0b0_01000, 0b0_01000, 0b0_01000, 0b0_01000, 0b0_01000, 0b0_01000, 0b0_01000,
#
# # -6
# # 0_110_000 0_110_001 0_110_010 0_110_011 0_110_100 0_110_101 0_110_110 0_110_111
# 0b0_01001, 0b0_01001, 0b0_01001, 0b0_01001, 0b0_01001, 0b0_01001, 0b0_01001, 0b0_01001,
#
# # -5
# # 0_111_000 0_111_001 0_111_010 0_111_011 0_111_100 0_111_101 0_111_110 0_111_111
# 0b0_01010, 0b0_01010, 0b0_01010, 0b0_01010, 0b0_01010, 0b0_01010, 0b0_01010, 0b0_01010,
#
# # -15 -14 -13 -12 -4 -3 -2 -1
# # 1_000_000 1_000_001 1_000_010 1_000_011 1_000_100 1_000_101 1_000_110 1_000_111
# 0b1_00000, 0b1_00001, 0b1_00010, 0b1_00011, 0b1_01011, 0b1_01100, 0b1_01101, 0b1_01110,
#
# # -11
# # 1_001_000 1_001_001 1_001_010 1_001_011 1_001_100 1_001_101 1_001_110 1_001_111
# 0b1_00100, 0b1_00100, 0b1_00100, 0b1_00100, 0b1_00100, 0b1_00100, 0b1_00100, 0b1_00100,
#
# # -10
# # 1_010_000 1_010_001 1_010_010 1_010_011 1_010_100 1_010_101 1_010_110 1_010_111
# 0b1_00101, 0b1_00101, 0b1_00101, 0b1_00101, 0b1_00101, 0b1_00101, 0b1_00101, 0b1_00101,
#
# # -9
# # 1_011_000 1_011_001 1_011_010 1_011_011 1_011_100 1_011_101 1_011_110 1_011_111
# 0b1_00110, 0b1_00110, 0b1_00110, 0b1_00110, 0b1_00110, 0b1_00110, 0b1_00110, 0b1_00110,
#
# # -8
# # 1_100_000 1_100_001 1_100_010 1_100_011 1_100_100 1_100_101 1_100_110 1_100_111
# 0b1_00111, 0b1_00111, 0b1_00111, 0b1_00111, 0b1_00111, 0b1_00111, 0b1_00111, 0b1_00111,
#
# # -7
# # 1_101_000 1_101_001 1_101_010 1_101_011 1_101_100 1_101_101 1_101_110 1_101_111
# 0b1_01000, 0b1_01000, 0b1_01000, 0b1_01000, 0b1_01000, 0b1_01000, 0b1_01000, 0b1_01000,
#
# # -6
# # 1_110_000 1_110_001 1_110_010 1_110_011 1_110_100 1_110_101 1_110_110 1_110_111
# 0b1_01001, 0b1_01001, 0b1_01001, 0b1_01001, 0b1_01001, 0b1_01001, 0b1_01001, 0b1_01001,
#
# # -5
# # 1_111_000 1_111_001 1_111_010 1_111_011 1_111_100 1_111_101 1_111_110 1_111_111
# 0b1_01010, 0b1_01010, 0b1_01010, 0b1_01010, 0b1_01010, 0b1_01010, 0b1_01010, 0b1_01010,
#], dtype=torch.int16) << 10
EXP_MASK = torch.tensor([
0b1111_0000,
0b0000_1111
], dtype=torch.uint8)
#def fp12_to_fp16_1(exp: torch.Tensor, frac: torch.Tensor):
# global EXP_MAP, EXP_MASK
#
# assert exp.dtype == torch.uint8
# assert frac.dtype == torch.uint8
# assert exp.ndim == 1
# assert frac.ndim == 1
# assert exp.size(0) * 2 == frac.size(0)
#
# if EXP_MAP.device != exp.device:
# EXP_MAP = EXP_MAP.to(exp.device)
# if EXP_MASK.device != exp.device:
# EXP_MASK = EXP_MASK.to(exp.device)
#
# exp = exp.repeat_interleave(2).view((-1,2))
# exp.bitwise_and_(EXP_MASK)
# exp[..., 0] >>= 1
# exp[..., 1] <<= 3
# exp = exp.view((-1,))
# # 0111_1000 0111_1000
#
# E_mask = torch.logical_and(exp != 0, exp != 0b0100_0000).to(dtype=torch.int16)
#
# # take upper 6-bits from bitmap
# exp = torch.take(EXP_MAP, (exp + (frac & 0b0000_0111)).long())
#
# f_mask = (0b0000_0111 * E_mask) + 0b1111_1000
# frac = frac.to(dtype=torch.int16)
# frac.bitwise_and_(f_mask)
# frac.bitwise_left_shift_(2)
#
# FP16 = exp.add_(frac)
#
# return FP16.view(dtype=torch.float16)
FP12_TO_FP16 = torch.tensor([
0b0_00000_0000000000, 0b0_00001_0000000000, 0b0_00010_0000000000, 0b0_00011_0000000000, 0b0_01011_0000000000, 0b0_01100_0000000000, 0b0_01101_0000000000, 0b0_01110_0000000000, 0b0_00000_0000100000, 0b0_00001_0000100000, 0b0_00010_0000100000, 0b0_00011_0000100000, 0b0_01011_0000100000, 0b0_01100_0000100000, 0b0_01101_0000100000, 0b0_01110_0000100000,
0b0_00000_0001000000, 0b0_00001_0001000000, 0b0_00010_0001000000, 0b0_00011_0001000000, 0b0_01011_0001000000, 0b0_01100_0001000000, 0b0_01101_0001000000, 0b0_01110_0001000000, 0b0_00000_0001100000, 0b0_00001_0001100000, 0b0_00010_0001100000, 0b0_00011_0001100000, 0b0_01011_0001100000, 0b0_01100_0001100000, 0b0_01101_0001100000, 0b0_01110_0001100000,
0b0_00000_0010000000, 0b0_00001_0010000000, 0b0_00010_0010000000, 0b0_00011_0010000000, 0b0_01011_0010000000, 0b0_01100_0010000000, 0b0_01101_0010000000, 0b0_01110_0010000000, 0b0_00000_0010100000, 0b0_00001_0010100000, 0b0_00010_0010100000, 0b0_00011_0010100000, 0b0_01011_0010100000, 0b0_01100_0010100000, 0b0_01101_0010100000, 0b0_01110_0010100000,
0b0_00000_0011000000, 0b0_00001_0011000000, 0b0_00010_0011000000, 0b0_00011_0011000000, 0b0_01011_0011000000, 0b0_01100_0011000000, 0b0_01101_0011000000, 0b0_01110_0011000000, 0b0_00000_0011100000, 0b0_00001_0011100000, 0b0_00010_0011100000, 0b0_00011_0011100000, 0b0_01011_0011100000, 0b0_01100_0011100000, 0b0_01101_0011100000, 0b0_01110_0011100000,
0b0_00000_0100000000, 0b0_00001_0100000000, 0b0_00010_0100000000, 0b0_00011_0100000000, 0b0_01011_0100000000, 0b0_01100_0100000000, 0b0_01101_0100000000, 0b0_01110_0100000000, 0b0_00000_0100100000, 0b0_00001_0100100000, 0b0_00010_0100100000, 0b0_00011_0100100000, 0b0_01011_0100100000, 0b0_01100_0100100000, 0b0_01101_0100100000, 0b0_01110_0100100000,
0b0_00000_0101000000, 0b0_00001_0101000000, 0b0_00010_0101000000, 0b0_00011_0101000000, 0b0_01011_0101000000, 0b0_01100_0101000000, 0b0_01101_0101000000, 0b0_01110_0101000000, 0b0_00000_0101100000, 0b0_00001_0101100000, 0b0_00010_0101100000, 0b0_00011_0101100000, 0b0_01011_0101100000, 0b0_01100_0101100000, 0b0_01101_0101100000, 0b0_01110_0101100000,
0b0_00000_0110000000, 0b0_00001_0110000000, 0b0_00010_0110000000, 0b0_00011_0110000000, 0b0_01011_0110000000, 0b0_01100_0110000000, 0b0_01101_0110000000, 0b0_01110_0110000000, 0b0_00000_0110100000, 0b0_00001_0110100000, 0b0_00010_0110100000, 0b0_00011_0110100000, 0b0_01011_0110100000, 0b0_01100_0110100000, 0b0_01101_0110100000, 0b0_01110_0110100000,
0b0_00000_0111000000, 0b0_00001_0111000000, 0b0_00010_0111000000, 0b0_00011_0111000000, 0b0_01011_0111000000, 0b0_01100_0111000000, 0b0_01101_0111000000, 0b0_01110_0111000000, 0b0_00000_0111100000, 0b0_00001_0111100000, 0b0_00010_0111100000, 0b0_00011_0111100000, 0b0_01011_0111100000, 0b0_01100_0111100000, 0b0_01101_0111100000, 0b0_01110_0111100000,
0b0_00000_1000000000, 0b0_00001_1000000000, 0b0_00010_1000000000, 0b0_00011_1000000000, 0b0_01011_1000000000, 0b0_01100_1000000000, 0b0_01101_1000000000, 0b0_01110_1000000000, 0b0_00000_1000100000, 0b0_00001_1000100000, 0b0_00010_1000100000, 0b0_00011_1000100000, 0b0_01011_1000100000, 0b0_01100_1000100000, 0b0_01101_1000100000, 0b0_01110_1000100000,
0b0_00000_1001000000, 0b0_00001_1001000000, 0b0_00010_1001000000, 0b0_00011_1001000000, 0b0_01011_1001000000, 0b0_01100_1001000000, 0b0_01101_1001000000, 0b0_01110_1001000000, 0b0_00000_1001100000, 0b0_00001_1001100000, 0b0_00010_1001100000, 0b0_00011_1001100000, 0b0_01011_1001100000, 0b0_01100_1001100000, 0b0_01101_1001100000, 0b0_01110_1001100000,
0b0_00000_1010000000, 0b0_00001_1010000000, 0b0_00010_1010000000, 0b0_00011_1010000000, 0b0_01011_1010000000, 0b0_01100_1010000000, 0b0_01101_1010000000, 0b0_01110_1010000000, 0b0_00000_1010100000, 0b0_00001_1010100000, 0b0_00010_1010100000, 0b0_00011_1010100000, 0b0_01011_1010100000, 0b0_01100_1010100000, 0b0_01101_1010100000, 0b0_01110_1010100000,
0b0_00000_1011000000, 0b0_00001_1011000000, 0b0_00010_1011000000, 0b0_00011_1011000000, 0b0_01011_1011000000, 0b0_01100_1011000000, 0b0_01101_1011000000, 0b0_01110_1011000000, 0b0_00000_1011100000, 0b0_00001_1011100000, 0b0_00010_1011100000, 0b0_00011_1011100000, 0b0_01011_1011100000, 0b0_01100_1011100000, 0b0_01101_1011100000, 0b0_01110_1011100000,
0b0_00000_1100000000, 0b0_00001_1100000000, 0b0_00010_1100000000, 0b0_00011_1100000000, 0b0_01011_1100000000, 0b0_01100_1100000000, 0b0_01101_1100000000, 0b0_01110_1100000000, 0b0_00000_1100100000, 0b0_00001_1100100000, 0b0_00010_1100100000, 0b0_00011_1100100000, 0b0_01011_1100100000, 0b0_01100_1100100000, 0b0_01101_1100100000, 0b0_01110_1100100000,
0b0_00000_1101000000, 0b0_00001_1101000000, 0b0_00010_1101000000, 0b0_00011_1101000000, 0b0_01011_1101000000, 0b0_01100_1101000000, 0b0_01101_1101000000, 0b0_01110_1101000000, 0b0_00000_1101100000, 0b0_00001_1101100000, 0b0_00010_1101100000, 0b0_00011_1101100000, 0b0_01011_1101100000, 0b0_01100_1101100000, 0b0_01101_1101100000, 0b0_01110_1101100000,
0b0_00000_1110000000, 0b0_00001_1110000000, 0b0_00010_1110000000, 0b0_00011_1110000000, 0b0_01011_1110000000, 0b0_01100_1110000000, 0b0_01101_1110000000, 0b0_01110_1110000000, 0b0_00000_1110100000, 0b0_00001_1110100000, 0b0_00010_1110100000, 0b0_00011_1110100000, 0b0_01011_1110100000, 0b0_01100_1110100000, 0b0_01101_1110100000, 0b0_01110_1110100000,
0b0_00000_1111000000, 0b0_00001_1111000000, 0b0_00010_1111000000, 0b0_00011_1111000000, 0b0_01011_1111000000, 0b0_01100_1111000000, 0b0_01101_1111000000, 0b0_01110_1111000000, 0b0_00000_1111100000, 0b0_00001_1111100000, 0b0_00010_1111100000, 0b0_00011_1111100000, 0b0_01011_1111100000, 0b0_01100_1111100000, 0b0_01101_1111100000, 0b0_01110_1111100000,
0b0_00100_0000000000, 0b0_00100_0000000100, 0b0_00100_0000001000, 0b0_00100_0000001100, 0b0_00100_0000010000, 0b0_00100_0000010100, 0b0_00100_0000011000, 0b0_00100_0000011100, 0b0_00100_0000100000, 0b0_00100_0000100100, 0b0_00100_0000101000, 0b0_00100_0000101100, 0b0_00100_0000110000, 0b0_00100_0000110100, 0b0_00100_0000111000, 0b0_00100_0000111100,
0b0_00100_0001000000, 0b0_00100_0001000100, 0b0_00100_0001001000, 0b0_00100_0001001100, 0b0_00100_0001010000, 0b0_00100_0001010100, 0b0_00100_0001011000, 0b0_00100_0001011100, 0b0_00100_0001100000, 0b0_00100_0001100100, 0b0_00100_0001101000, 0b0_00100_0001101100, 0b0_00100_0001110000, 0b0_00100_0001110100, 0b0_00100_0001111000, 0b0_00100_0001111100,
0b0_00100_0010000000, 0b0_00100_0010000100, 0b0_00100_0010001000, 0b0_00100_0010001100, 0b0_00100_0010010000, 0b0_00100_0010010100, 0b0_00100_0010011000, 0b0_00100_0010011100, 0b0_00100_0010100000, 0b0_00100_0010100100, 0b0_00100_0010101000, 0b0_00100_0010101100, 0b0_00100_0010110000, 0b0_00100_0010110100, 0b0_00100_0010111000, 0b0_00100_0010111100,
0b0_00100_0011000000, 0b0_00100_0011000100, 0b0_00100_0011001000, 0b0_00100_0011001100, 0b0_00100_0011010000, 0b0_00100_0011010100, 0b0_00100_0011011000, 0b0_00100_0011011100, 0b0_00100_0011100000, 0b0_00100_0011100100, 0b0_00100_0011101000, 0b0_00100_0011101100, 0b0_00100_0011110000, 0b0_00100_0011110100, 0b0_00100_0011111000, 0b0_00100_0011111100,
0b0_00100_0100000000, 0b0_00100_0100000100, 0b0_00100_0100001000, 0b0_00100_0100001100, 0b0_00100_0100010000, 0b0_00100_0100010100, 0b0_00100_0100011000, 0b0_00100_0100011100, 0b0_00100_0100100000, 0b0_00100_0100100100, 0b0_00100_0100101000, 0b0_00100_0100101100, 0b0_00100_0100110000, 0b0_00100_0100110100, 0b0_00100_0100111000, 0b0_00100_0100111100,
0b0_00100_0101000000, 0b0_00100_0101000100, 0b0_00100_0101001000, 0b0_00100_0101001100, 0b0_00100_0101010000, 0b0_00100_0101010100, 0b0_00100_0101011000, 0b0_00100_0101011100, 0b0_00100_0101100000, 0b0_00100_0101100100, 0b0_00100_0101101000, 0b0_00100_0101101100, 0b0_00100_0101110000, 0b0_00100_0101110100, 0b0_00100_0101111000, 0b0_00100_0101111100,
0b0_00100_0110000000, 0b0_00100_0110000100, 0b0_00100_0110001000, 0b0_00100_0110001100, 0b0_00100_0110010000, 0b0_00100_0110010100, 0b0_00100_0110011000, 0b0_00100_0110011100, 0b0_00100_0110100000, 0b0_00100_0110100100, 0b0_00100_0110101000, 0b0_00100_0110101100, 0b0_00100_0110110000, 0b0_00100_0110110100, 0b0_00100_0110111000, 0b0_00100_0110111100,
0b0_00100_0111000000, 0b0_00100_0111000100, 0b0_00100_0111001000, 0b0_00100_0111001100, 0b0_00100_0111010000, 0b0_00100_0111010100, 0b0_00100_0111011000, 0b0_00100_0111011100, 0b0_00100_0111100000, 0b0_00100_0111100100, 0b0_00100_0111101000, 0b0_00100_0111101100, 0b0_00100_0111110000, 0b0_00100_0111110100, 0b0_00100_0111111000, 0b0_00100_0111111100,
0b0_00100_1000000000, 0b0_00100_1000000100, 0b0_00100_1000001000, 0b0_00100_1000001100, 0b0_00100_1000010000, 0b0_00100_1000010100, 0b0_00100_1000011000, 0b0_00100_1000011100, 0b0_00100_1000100000, 0b0_00100_1000100100, 0b0_00100_1000101000, 0b0_00100_1000101100, 0b0_00100_1000110000, 0b0_00100_1000110100, 0b0_00100_1000111000, 0b0_00100_1000111100,
0b0_00100_1001000000, 0b0_00100_1001000100, 0b0_00100_1001001000, 0b0_00100_1001001100, 0b0_00100_1001010000, 0b0_00100_1001010100, 0b0_00100_1001011000, 0b0_00100_1001011100, 0b0_00100_1001100000, 0b0_00100_1001100100, 0b0_00100_1001101000, 0b0_00100_1001101100, 0b0_00100_1001110000, 0b0_00100_1001110100, 0b0_00100_1001111000, 0b0_00100_1001111100,
0b0_00100_1010000000, 0b0_00100_1010000100, 0b0_00100_1010001000, 0b0_00100_1010001100, 0b0_00100_1010010000, 0b0_00100_1010010100, 0b0_00100_1010011000, 0b0_00100_1010011100, 0b0_00100_1010100000, 0b0_00100_1010100100, 0b0_00100_1010101000, 0b0_00100_1010101100, 0b0_00100_1010110000, 0b0_00100_1010110100, 0b0_00100_1010111000, 0b0_00100_1010111100,
0b0_00100_1011000000, 0b0_00100_1011000100, 0b0_00100_1011001000, 0b0_00100_1011001100, 0b0_00100_1011010000, 0b0_00100_1011010100, 0b0_00100_1011011000, 0b0_00100_1011011100, 0b0_00100_1011100000, 0b0_00100_1011100100, 0b0_00100_1011101000, 0b0_00100_1011101100, 0b0_00100_1011110000, 0b0_00100_1011110100, 0b0_00100_1011111000, 0b0_00100_1011111100,
0b0_00100_1100000000, 0b0_00100_1100000100, 0b0_00100_1100001000, 0b0_00100_1100001100, 0b0_00100_1100010000, 0b0_00100_1100010100, 0b0_00100_1100011000, 0b0_00100_1100011100, 0b0_00100_1100100000, 0b0_00100_1100100100, 0b0_00100_1100101000, 0b0_00100_1100101100, 0b0_00100_1100110000, 0b0_00100_1100110100, 0b0_00100_1100111000, 0b0_00100_1100111100,
0b0_00100_1101000000, 0b0_00100_1101000100, 0b0_00100_1101001000, 0b0_00100_1101001100, 0b0_00100_1101010000, 0b0_00100_1101010100, 0b0_00100_1101011000, 0b0_00100_1101011100, 0b0_00100_1101100000, 0b0_00100_1101100100, 0b0_00100_1101101000, 0b0_00100_1101101100, 0b0_00100_1101110000, 0b0_00100_1101110100, 0b0_00100_1101111000, 0b0_00100_1101111100,
0b0_00100_1110000000, 0b0_00100_1110000100, 0b0_00100_1110001000, 0b0_00100_1110001100, 0b0_00100_1110010000, 0b0_00100_1110010100, 0b0_00100_1110011000, 0b0_00100_1110011100, 0b0_00100_1110100000, 0b0_00100_1110100100, 0b0_00100_1110101000, 0b0_00100_1110101100, 0b0_00100_1110110000, 0b0_00100_1110110100, 0b0_00100_1110111000, 0b0_00100_1110111100,
0b0_00100_1111000000, 0b0_00100_1111000100, 0b0_00100_1111001000, 0b0_00100_1111001100, 0b0_00100_1111010000, 0b0_00100_1111010100, 0b0_00100_1111011000, 0b0_00100_1111011100, 0b0_00100_1111100000, 0b0_00100_1111100100, 0b0_00100_1111101000, 0b0_00100_1111101100, 0b0_00100_1111110000, 0b0_00100_1111110100, 0b0_00100_1111111000, 0b0_00100_1111111100,
0b0_00101_0000000000, 0b0_00101_0000000100, 0b0_00101_0000001000, 0b0_00101_0000001100, 0b0_00101_0000010000, 0b0_00101_0000010100, 0b0_00101_0000011000, 0b0_00101_0000011100, 0b0_00101_0000100000, 0b0_00101_0000100100, 0b0_00101_0000101000, 0b0_00101_0000101100, 0b0_00101_0000110000, 0b0_00101_0000110100, 0b0_00101_0000111000, 0b0_00101_0000111100,
0b0_00101_0001000000, 0b0_00101_0001000100, 0b0_00101_0001001000, 0b0_00101_0001001100, 0b0_00101_0001010000, 0b0_00101_0001010100, 0b0_00101_0001011000, 0b0_00101_0001011100, 0b0_00101_0001100000, 0b0_00101_0001100100, 0b0_00101_0001101000, 0b0_00101_0001101100, 0b0_00101_0001110000, 0b0_00101_0001110100, 0b0_00101_0001111000, 0b0_00101_0001111100,
0b0_00101_0010000000, 0b0_00101_0010000100, 0b0_00101_0010001000, 0b0_00101_0010001100, 0b0_00101_0010010000, 0b0_00101_0010010100, 0b0_00101_0010011000, 0b0_00101_0010011100, 0b0_00101_0010100000, 0b0_00101_0010100100, 0b0_00101_0010101000, 0b0_00101_0010101100, 0b0_00101_0010110000, 0b0_00101_0010110100, 0b0_00101_0010111000, 0b0_00101_0010111100,
0b0_00101_0011000000, 0b0_00101_0011000100, 0b0_00101_0011001000, 0b0_00101_0011001100, 0b0_00101_0011010000, 0b0_00101_0011010100, 0b0_00101_0011011000, 0b0_00101_0011011100, 0b0_00101_0011100000, 0b0_00101_0011100100, 0b0_00101_0011101000, 0b0_00101_0011101100, 0b0_00101_0011110000, 0b0_00101_0011110100, 0b0_00101_0011111000, 0b0_00101_0011111100,
0b0_00101_0100000000, 0b0_00101_0100000100, 0b0_00101_0100001000, 0b0_00101_0100001100, 0b0_00101_0100010000, 0b0_00101_0100010100, 0b0_00101_0100011000, 0b0_00101_0100011100, 0b0_00101_0100100000, 0b0_00101_0100100100, 0b0_00101_0100101000, 0b0_00101_0100101100, 0b0_00101_0100110000, 0b0_00101_0100110100, 0b0_00101_0100111000, 0b0_00101_0100111100,
0b0_00101_0101000000, 0b0_00101_0101000100, 0b0_00101_0101001000, 0b0_00101_0101001100, 0b0_00101_0101010000, 0b0_00101_0101010100, 0b0_00101_0101011000, 0b0_00101_0101011100, 0b0_00101_0101100000, 0b0_00101_0101100100, 0b0_00101_0101101000, 0b0_00101_0101101100, 0b0_00101_0101110000, 0b0_00101_0101110100, 0b0_00101_0101111000, 0b0_00101_0101111100,
0b0_00101_0110000000, 0b0_00101_0110000100, 0b0_00101_0110001000, 0b0_00101_0110001100, 0b0_00101_0110010000, 0b0_00101_0110010100, 0b0_00101_0110011000, 0b0_00101_0110011100, 0b0_00101_0110100000, 0b0_00101_0110100100, 0b0_00101_0110101000, 0b0_00101_0110101100, 0b0_00101_0110110000, 0b0_00101_0110110100, 0b0_00101_0110111000, 0b0_00101_0110111100,
0b0_00101_0111000000, 0b0_00101_0111000100, 0b0_00101_0111001000, 0b0_00101_0111001100, 0b0_00101_0111010000, 0b0_00101_0111010100, 0b0_00101_0111011000, 0b0_00101_0111011100, 0b0_00101_0111100000, 0b0_00101_0111100100, 0b0_00101_0111101000, 0b0_00101_0111101100, 0b0_00101_0111110000, 0b0_00101_0111110100, 0b0_00101_0111111000, 0b0_00101_0111111100,
0b0_00101_1000000000, 0b0_00101_1000000100, 0b0_00101_1000001000, 0b0_00101_1000001100, 0b0_00101_1000010000, 0b0_00101_1000010100, 0b0_00101_1000011000, 0b0_00101_1000011100, 0b0_00101_1000100000, 0b0_00101_1000100100, 0b0_00101_1000101000, 0b0_00101_1000101100, 0b0_00101_1000110000, 0b0_00101_1000110100, 0b0_00101_1000111000, 0b0_00101_1000111100,
0b0_00101_1001000000, 0b0_00101_1001000100, 0b0_00101_1001001000, 0b0_00101_1001001100, 0b0_00101_1001010000, 0b0_00101_1001010100, 0b0_00101_1001011000, 0b0_00101_1001011100, 0b0_00101_1001100000, 0b0_00101_1001100100, 0b0_00101_1001101000, 0b0_00101_1001101100, 0b0_00101_1001110000, 0b0_00101_1001110100, 0b0_00101_1001111000, 0b0_00101_1001111100,
0b0_00101_1010000000, 0b0_00101_1010000100, 0b0_00101_1010001000, 0b0_00101_1010001100, 0b0_00101_1010010000, 0b0_00101_1010010100, 0b0_00101_1010011000, 0b0_00101_1010011100, 0b0_00101_1010100000, 0b0_00101_1010100100, 0b0_00101_1010101000, 0b0_00101_1010101100, 0b0_00101_1010110000, 0b0_00101_1010110100, 0b0_00101_1010111000, 0b0_00101_1010111100,
0b0_00101_1011000000, 0b0_00101_1011000100, 0b0_00101_1011001000, 0b0_00101_1011001100, 0b0_00101_1011010000, 0b0_00101_1011010100, 0b0_00101_1011011000, 0b0_00101_1011011100, 0b0_00101_1011100000, 0b0_00101_1011100100, 0b0_00101_1011101000, 0b0_00101_1011101100, 0b0_00101_1011110000, 0b0_00101_1011110100, 0b0_00101_1011111000, 0b0_00101_1011111100,
0b0_00101_1100000000, 0b0_00101_1100000100, 0b0_00101_1100001000, 0b0_00101_1100001100, 0b0_00101_1100010000, 0b0_00101_1100010100, 0b0_00101_1100011000, 0b0_00101_1100011100, 0b0_00101_1100100000, 0b0_00101_1100100100, 0b0_00101_1100101000, 0b0_00101_1100101100, 0b0_00101_1100110000, 0b0_00101_1100110100, 0b0_00101_1100111000, 0b0_00101_1100111100,
0b0_00101_1101000000, 0b0_00101_1101000100, 0b0_00101_1101001000, 0b0_00101_1101001100, 0b0_00101_1101010000, 0b0_00101_1101010100, 0b0_00101_1101011000, 0b0_00101_1101011100, 0b0_00101_1101100000, 0b0_00101_1101100100, 0b0_00101_1101101000, 0b0_00101_1101101100, 0b0_00101_1101110000, 0b0_00101_1101110100, 0b0_00101_1101111000, 0b0_00101_1101111100,
0b0_00101_1110000000, 0b0_00101_1110000100, 0b0_00101_1110001000, 0b0_00101_1110001100, 0b0_00101_1110010000, 0b0_00101_1110010100, 0b0_00101_1110011000, 0b0_00101_1110011100, 0b0_00101_1110100000, 0b0_00101_1110100100, 0b0_00101_1110101000, 0b0_00101_1110101100, 0b0_00101_1110110000, 0b0_00101_1110110100, 0b0_00101_1110111000, 0b0_00101_1110111100,
0b0_00101_1111000000, 0b0_00101_1111000100, 0b0_00101_1111001000, 0b0_00101_1111001100, 0b0_00101_1111010000, 0b0_00101_1111010100, 0b0_00101_1111011000, 0b0_00101_1111011100, 0b0_00101_1111100000, 0b0_00101_1111100100, 0b0_00101_1111101000, 0b0_00101_1111101100, 0b0_00101_1111110000, 0b0_00101_1111110100, 0b0_00101_1111111000, 0b0_00101_1111111100,
0b0_00110_0000000000, 0b0_00110_0000000100, 0b0_00110_0000001000, 0b0_00110_0000001100, 0b0_00110_0000010000, 0b0_00110_0000010100, 0b0_00110_0000011000, 0b0_00110_0000011100, 0b0_00110_0000100000, 0b0_00110_0000100100, 0b0_00110_0000101000, 0b0_00110_0000101100, 0b0_00110_0000110000, 0b0_00110_0000110100, 0b0_00110_0000111000, 0b0_00110_0000111100,
0b0_00110_0001000000, 0b0_00110_0001000100, 0b0_00110_0001001000, 0b0_00110_0001001100, 0b0_00110_0001010000, 0b0_00110_0001010100, 0b0_00110_0001011000, 0b0_00110_0001011100, 0b0_00110_0001100000, 0b0_00110_0001100100, 0b0_00110_0001101000, 0b0_00110_0001101100, 0b0_00110_0001110000, 0b0_00110_0001110100, 0b0_00110_0001111000, 0b0_00110_0001111100,
0b0_00110_0010000000, 0b0_00110_0010000100, 0b0_00110_0010001000, 0b0_00110_0010001100, 0b0_00110_0010010000, 0b0_00110_0010010100, 0b0_00110_0010011000, 0b0_00110_0010011100, 0b0_00110_0010100000, 0b0_00110_0010100100, 0b0_00110_0010101000, 0b0_00110_0010101100, 0b0_00110_0010110000, 0b0_00110_0010110100, 0b0_00110_0010111000, 0b0_00110_0010111100,
0b0_00110_0011000000, 0b0_00110_0011000100, 0b0_00110_0011001000, 0b0_00110_0011001100, 0b0_00110_0011010000, 0b0_00110_0011010100, 0b0_00110_0011011000, 0b0_00110_0011011100, 0b0_00110_0011100000, 0b0_00110_0011100100, 0b0_00110_0011101000, 0b0_00110_0011101100, 0b0_00110_0011110000, 0b0_00110_0011110100, 0b0_00110_0011111000, 0b0_00110_0011111100,
0b0_00110_0100000000, 0b0_00110_0100000100, 0b0_00110_0100001000, 0b0_00110_0100001100, 0b0_00110_0100010000, 0b0_00110_0100010100, 0b0_00110_0100011000, 0b0_00110_0100011100, 0b0_00110_0100100000, 0b0_00110_0100100100, 0b0_00110_0100101000, 0b0_00110_0100101100, 0b0_00110_0100110000, 0b0_00110_0100110100, 0b0_00110_0100111000, 0b0_00110_0100111100,
0b0_00110_0101000000, 0b0_00110_0101000100, 0b0_00110_0101001000, 0b0_00110_0101001100, 0b0_00110_0101010000, 0b0_00110_0101010100, 0b0_00110_0101011000, 0b0_00110_0101011100, 0b0_00110_0101100000, 0b0_00110_0101100100, 0b0_00110_0101101000, 0b0_00110_0101101100, 0b0_00110_0101110000, 0b0_00110_0101110100, 0b0_00110_0101111000, 0b0_00110_0101111100,
0b0_00110_0110000000, 0b0_00110_0110000100, 0b0_00110_0110001000, 0b0_00110_0110001100, 0b0_00110_0110010000, 0b0_00110_0110010100, 0b0_00110_0110011000, 0b0_00110_0110011100, 0b0_00110_0110100000, 0b0_00110_0110100100, 0b0_00110_0110101000, 0b0_00110_0110101100, 0b0_00110_0110110000, 0b0_00110_0110110100, 0b0_00110_0110111000, 0b0_00110_0110111100,
0b0_00110_0111000000, 0b0_00110_0111000100, 0b0_00110_0111001000, 0b0_00110_0111001100, 0b0_00110_0111010000, 0b0_00110_0111010100, 0b0_00110_0111011000, 0b0_00110_0111011100, 0b0_00110_0111100000, 0b0_00110_0111100100, 0b0_00110_0111101000, 0b0_00110_0111101100, 0b0_00110_0111110000, 0b0_00110_0111110100, 0b0_00110_0111111000, 0b0_00110_0111111100,
0b0_00110_1000000000, 0b0_00110_1000000100, 0b0_00110_1000001000, 0b0_00110_1000001100, 0b0_00110_1000010000, 0b0_00110_1000010100, 0b0_00110_1000011000, 0b0_00110_1000011100, 0b0_00110_1000100000, 0b0_00110_1000100100, 0b0_00110_1000101000, 0b0_00110_1000101100, 0b0_00110_1000110000, 0b0_00110_1000110100, 0b0_00110_1000111000, 0b0_00110_1000111100,
0b0_00110_1001000000, 0b0_00110_1001000100, 0b0_00110_1001001000, 0b0_00110_1001001100, 0b0_00110_1001010000, 0b0_00110_1001010100, 0b0_00110_1001011000, 0b0_00110_1001011100, 0b0_00110_1001100000, 0b0_00110_1001100100, 0b0_00110_1001101000, 0b0_00110_1001101100, 0b0_00110_1001110000, 0b0_00110_1001110100, 0b0_00110_1001111000, 0b0_00110_1001111100,
0b0_00110_1010000000, 0b0_00110_1010000100, 0b0_00110_1010001000, 0b0_00110_1010001100, 0b0_00110_1010010000, 0b0_00110_1010010100, 0b0_00110_1010011000, 0b0_00110_1010011100, 0b0_00110_1010100000, 0b0_00110_1010100100, 0b0_00110_1010101000, 0b0_00110_1010101100, 0b0_00110_1010110000, 0b0_00110_1010110100, 0b0_00110_1010111000, 0b0_00110_1010111100,
0b0_00110_1011000000, 0b0_00110_1011000100, 0b0_00110_1011001000, 0b0_00110_1011001100, 0b0_00110_1011010000, 0b0_00110_1011010100, 0b0_00110_1011011000, 0b0_00110_1011011100, 0b0_00110_1011100000, 0b0_00110_1011100100, 0b0_00110_1011101000, 0b0_00110_1011101100, 0b0_00110_1011110000, 0b0_00110_1011110100, 0b0_00110_1011111000, 0b0_00110_1011111100,
0b0_00110_1100000000, 0b0_00110_1100000100, 0b0_00110_1100001000, 0b0_00110_1100001100, 0b0_00110_1100010000, 0b0_00110_1100010100, 0b0_00110_1100011000, 0b0_00110_1100011100, 0b0_00110_1100100000, 0b0_00110_1100100100, 0b0_00110_1100101000, 0b0_00110_1100101100, 0b0_00110_1100110000, 0b0_00110_1100110100, 0b0_00110_1100111000, 0b0_00110_1100111100,
0b0_00110_1101000000, 0b0_00110_1101000100, 0b0_00110_1101001000, 0b0_00110_1101001100, 0b0_00110_1101010000, 0b0_00110_1101010100, 0b0_00110_1101011000, 0b0_00110_1101011100, 0b0_00110_1101100000, 0b0_00110_1101100100, 0b0_00110_1101101000, 0b0_00110_1101101100, 0b0_00110_1101110000, 0b0_00110_1101110100, 0b0_00110_1101111000, 0b0_00110_1101111100,
0b0_00110_1110000000, 0b0_00110_1110000100, 0b0_00110_1110001000, 0b0_00110_1110001100, 0b0_00110_1110010000, 0b0_00110_1110010100, 0b0_00110_1110011000, 0b0_00110_1110011100, 0b0_00110_1110100000, 0b0_00110_1110100100, 0b0_00110_1110101000, 0b0_00110_1110101100, 0b0_00110_1110110000, 0b0_00110_1110110100, 0b0_00110_1110111000, 0b0_00110_1110111100,
0b0_00110_1111000000, 0b0_00110_1111000100, 0b0_00110_1111001000, 0b0_00110_1111001100, 0b0_00110_1111010000, 0b0_00110_1111010100, 0b0_00110_1111011000, 0b0_00110_1111011100, 0b0_00110_1111100000, 0b0_00110_1111100100, 0b0_00110_1111101000, 0b0_00110_1111101100, 0b0_00110_1111110000, 0b0_00110_1111110100, 0b0_00110_1111111000, 0b0_00110_1111111100,
0b0_00111_0000000000, 0b0_00111_0000000100, 0b0_00111_0000001000, 0b0_00111_0000001100, 0b0_00111_0000010000, 0b0_00111_0000010100, 0b0_00111_0000011000, 0b0_00111_0000011100, 0b0_00111_0000100000, 0b0_00111_0000100100, 0b0_00111_0000101000, 0b0_00111_0000101100, 0b0_00111_0000110000, 0b0_00111_0000110100, 0b0_00111_0000111000, 0b0_00111_0000111100,
0b0_00111_0001000000, 0b0_00111_0001000100, 0b0_00111_0001001000, 0b0_00111_0001001100, 0b0_00111_0001010000, 0b0_00111_0001010100, 0b0_00111_0001011000, 0b0_00111_0001011100, 0b0_00111_0001100000, 0b0_00111_0001100100, 0b0_00111_0001101000, 0b0_00111_0001101100, 0b0_00111_0001110000, 0b0_00111_0001110100, 0b0_00111_0001111000, 0b0_00111_0001111100,
0b0_00111_0010000000, 0b0_00111_0010000100, 0b0_00111_0010001000, 0b0_00111_0010001100, 0b0_00111_0010010000, 0b0_00111_0010010100, 0b0_00111_0010011000, 0b0_00111_0010011100, 0b0_00111_0010100000, 0b0_00111_0010100100, 0b0_00111_0010101000, 0b0_00111_0010101100, 0b0_00111_0010110000, 0b0_00111_0010110100, 0b0_00111_0010111000, 0b0_00111_0010111100,
0b0_00111_0011000000, 0b0_00111_0011000100, 0b0_00111_0011001000, 0b0_00111_0011001100, 0b0_00111_0011010000, 0b0_00111_0011010100, 0b0_00111_0011011000, 0b0_00111_0011011100, 0b0_00111_0011100000, 0b0_00111_0011100100, 0b0_00111_0011101000, 0b0_00111_0011101100, 0b0_00111_0011110000, 0b0_00111_0011110100, 0b0_00111_0011111000, 0b0_00111_0011111100,
0b0_00111_0100000000, 0b0_00111_0100000100, 0b0_00111_0100001000, 0b0_00111_0100001100, 0b0_00111_0100010000, 0b0_00111_0100010100, 0b0_00111_0100011000, 0b0_00111_0100011100, 0b0_00111_0100100000, 0b0_00111_0100100100, 0b0_00111_0100101000, 0b0_00111_0100101100, 0b0_00111_0100110000, 0b0_00111_0100110100, 0b0_00111_0100111000, 0b0_00111_0100111100,
0b0_00111_0101000000, 0b0_00111_0101000100, 0b0_00111_0101001000, 0b0_00111_0101001100, 0b0_00111_0101010000, 0b0_00111_0101010100, 0b0_00111_0101011000, 0b0_00111_0101011100, 0b0_00111_0101100000, 0b0_00111_0101100100, 0b0_00111_0101101000, 0b0_00111_0101101100, 0b0_00111_0101110000, 0b0_00111_0101110100, 0b0_00111_0101111000, 0b0_00111_0101111100,
0b0_00111_0110000000, 0b0_00111_0110000100, 0b0_00111_0110001000, 0b0_00111_0110001100, 0b0_00111_0110010000, 0b0_00111_0110010100, 0b0_00111_0110011000, 0b0_00111_0110011100, 0b0_00111_0110100000, 0b0_00111_0110100100, 0b0_00111_0110101000, 0b0_00111_0110101100, 0b0_00111_0110110000, 0b0_00111_0110110100, 0b0_00111_0110111000, 0b0_00111_0110111100,
0b0_00111_0111000000, 0b0_00111_0111000100, 0b0_00111_0111001000, 0b0_00111_0111001100, 0b0_00111_0111010000, 0b0_00111_0111010100, 0b0_00111_0111011000, 0b0_00111_0111011100, 0b0_00111_0111100000, 0b0_00111_0111100100, 0b0_00111_0111101000, 0b0_00111_0111101100, 0b0_00111_0111110000, 0b0_00111_0111110100, 0b0_00111_0111111000, 0b0_00111_0111111100,
0b0_00111_1000000000, 0b0_00111_1000000100, 0b0_00111_1000001000, 0b0_00111_1000001100, 0b0_00111_1000010000, 0b0_00111_1000010100, 0b0_00111_1000011000, 0b0_00111_1000011100, 0b0_00111_1000100000, 0b0_00111_1000100100, 0b0_00111_1000101000, 0b0_00111_1000101100, 0b0_00111_1000110000, 0b0_00111_1000110100, 0b0_00111_1000111000, 0b0_00111_1000111100,
0b0_00111_1001000000, 0b0_00111_1001000100, 0b0_00111_1001001000, 0b0_00111_1001001100, 0b0_00111_1001010000, 0b0_00111_1001010100, 0b0_00111_1001011000, 0b0_00111_1001011100, 0b0_00111_1001100000, 0b0_00111_1001100100, 0b0_00111_1001101000, 0b0_00111_1001101100, 0b0_00111_1001110000, 0b0_00111_1001110100, 0b0_00111_1001111000, 0b0_00111_1001111100,
0b0_00111_1010000000, 0b0_00111_1010000100, 0b0_00111_1010001000, 0b0_00111_1010001100, 0b0_00111_1010010000, 0b0_00111_1010010100, 0b0_00111_1010011000, 0b0_00111_1010011100, 0b0_00111_1010100000, 0b0_00111_1010100100, 0b0_00111_1010101000, 0b0_00111_1010101100, 0b0_00111_1010110000, 0b0_00111_1010110100, 0b0_00111_1010111000, 0b0_00111_1010111100,
0b0_00111_1011000000, 0b0_00111_1011000100, 0b0_00111_1011001000, 0b0_00111_1011001100, 0b0_00111_1011010000, 0b0_00111_1011010100, 0b0_00111_1011011000, 0b0_00111_1011011100, 0b0_00111_1011100000, 0b0_00111_1011100100, 0b0_00111_1011101000, 0b0_00111_1011101100, 0b0_00111_1011110000, 0b0_00111_1011110100, 0b0_00111_1011111000, 0b0_00111_1011111100,
0b0_00111_1100000000, 0b0_00111_1100000100, 0b0_00111_1100001000, 0b0_00111_1100001100, 0b0_00111_1100010000, 0b0_00111_1100010100, 0b0_00111_1100011000, 0b0_00111_1100011100, 0b0_00111_1100100000, 0b0_00111_1100100100, 0b0_00111_1100101000, 0b0_00111_1100101100, 0b0_00111_1100110000, 0b0_00111_1100110100, 0b0_00111_1100111000, 0b0_00111_1100111100,
0b0_00111_1101000000, 0b0_00111_1101000100, 0b0_00111_1101001000, 0b0_00111_1101001100, 0b0_00111_1101010000, 0b0_00111_1101010100, 0b0_00111_1101011000, 0b0_00111_1101011100, 0b0_00111_1101100000, 0b0_00111_1101100100, 0b0_00111_1101101000, 0b0_00111_1101101100, 0b0_00111_1101110000, 0b0_00111_1101110100, 0b0_00111_1101111000, 0b0_00111_1101111100,
0b0_00111_1110000000, 0b0_00111_1110000100, 0b0_00111_1110001000, 0b0_00111_1110001100, 0b0_00111_1110010000, 0b0_00111_1110010100, 0b0_00111_1110011000, 0b0_00111_1110011100, 0b0_00111_1110100000, 0b0_00111_1110100100, 0b0_00111_1110101000, 0b0_00111_1110101100, 0b0_00111_1110110000, 0b0_00111_1110110100, 0b0_00111_1110111000, 0b0_00111_1110111100,
0b0_00111_1111000000, 0b0_00111_1111000100, 0b0_00111_1111001000, 0b0_00111_1111001100, 0b0_00111_1111010000, 0b0_00111_1111010100, 0b0_00111_1111011000, 0b0_00111_1111011100, 0b0_00111_1111100000, 0b0_00111_1111100100, 0b0_00111_1111101000, 0b0_00111_1111101100, 0b0_00111_1111110000, 0b0_00111_1111110100, 0b0_00111_1111111000, 0b0_00111_1111111100,
0b0_01000_0000000000, 0b0_01000_0000000100, 0b0_01000_0000001000, 0b0_01000_0000001100, 0b0_01000_0000010000, 0b0_01000_0000010100, 0b0_01000_0000011000, 0b0_01000_0000011100, 0b0_01000_0000100000, 0b0_01000_0000100100, 0b0_01000_0000101000, 0b0_01000_0000101100, 0b0_01000_0000110000, 0b0_01000_0000110100, 0b0_01000_0000111000, 0b0_01000_0000111100,
0b0_01000_0001000000, 0b0_01000_0001000100, 0b0_01000_0001001000, 0b0_01000_0001001100, 0b0_01000_0001010000, 0b0_01000_0001010100, 0b0_01000_0001011000, 0b0_01000_0001011100, 0b0_01000_0001100000, 0b0_01000_0001100100, 0b0_01000_0001101000, 0b0_01000_0001101100, 0b0_01000_0001110000, 0b0_01000_0001110100, 0b0_01000_0001111000, 0b0_01000_0001111100,
0b0_01000_0010000000, 0b0_01000_0010000100, 0b0_01000_0010001000, 0b0_01000_0010001100, 0b0_01000_0010010000, 0b0_01000_0010010100, 0b0_01000_0010011000, 0b0_01000_0010011100, 0b0_01000_0010100000, 0b0_01000_0010100100, 0b0_01000_0010101000, 0b0_01000_0010101100, 0b0_01000_0010110000, 0b0_01000_0010110100, 0b0_01000_0010111000, 0b0_01000_0010111100,
0b0_01000_0011000000, 0b0_01000_0011000100, 0b0_01000_0011001000, 0b0_01000_0011001100, 0b0_01000_0011010000, 0b0_01000_0011010100, 0b0_01000_0011011000, 0b0_01000_0011011100, 0b0_01000_0011100000, 0b0_01000_0011100100, 0b0_01000_0011101000, 0b0_01000_0011101100, 0b0_01000_0011110000, 0b0_01000_0011110100, 0b0_01000_0011111000, 0b0_01000_0011111100,
0b0_01000_0100000000, 0b0_01000_0100000100, 0b0_01000_0100001000, 0b0_01000_0100001100, 0b0_01000_0100010000, 0b0_01000_0100010100, 0b0_01000_0100011000, 0b0_01000_0100011100, 0b0_01000_0100100000, 0b0_01000_0100100100, 0b0_01000_0100101000, 0b0_01000_0100101100, 0b0_01000_0100110000, 0b0_01000_0100110100, 0b0_01000_0100111000, 0b0_01000_0100111100,
0b0_01000_0101000000, 0b0_01000_0101000100, 0b0_01000_0101001000, 0b0_01000_0101001100, 0b0_01000_0101010000, 0b0_01000_0101010100, 0b0_01000_0101011000, 0b0_01000_0101011100, 0b0_01000_0101100000, 0b0_01000_0101100100, 0b0_01000_0101101000, 0b0_01000_0101101100, 0b0_01000_0101110000, 0b0_01000_0101110100, 0b0_01000_0101111000, 0b0_01000_0101111100,
0b0_01000_0110000000, 0b0_01000_0110000100, 0b0_01000_0110001000, 0b0_01000_0110001100, 0b0_01000_0110010000, 0b0_01000_0110010100, 0b0_01000_0110011000, 0b0_01000_0110011100, 0b0_01000_0110100000, 0b0_01000_0110100100, 0b0_01000_0110101000, 0b0_01000_0110101100, 0b0_01000_0110110000, 0b0_01000_0110110100, 0b0_01000_0110111000, 0b0_01000_0110111100,
0b0_01000_0111000000, 0b0_01000_0111000100, 0b0_01000_0111001000, 0b0_01000_0111001100, 0b0_01000_0111010000, 0b0_01000_0111010100, 0b0_01000_0111011000, 0b0_01000_0111011100, 0b0_01000_0111100000, 0b0_01000_0111100100, 0b0_01000_0111101000, 0b0_01000_0111101100, 0b0_01000_0111110000, 0b0_01000_0111110100, 0b0_01000_0111111000, 0b0_01000_0111111100,
0b0_01000_1000000000, 0b0_01000_1000000100, 0b0_01000_1000001000, 0b0_01000_1000001100, 0b0_01000_1000010000, 0b0_01000_1000010100, 0b0_01000_1000011000, 0b0_01000_1000011100, 0b0_01000_1000100000, 0b0_01000_1000100100, 0b0_01000_1000101000, 0b0_01000_1000101100, 0b0_01000_1000110000, 0b0_01000_1000110100, 0b0_01000_1000111000, 0b0_01000_1000111100,
0b0_01000_1001000000, 0b0_01000_1001000100, 0b0_01000_1001001000, 0b0_01000_1001001100, 0b0_01000_1001010000, 0b0_01000_1001010100, 0b0_01000_1001011000, 0b0_01000_1001011100, 0b0_01000_1001100000, 0b0_01000_1001100100, 0b0_01000_1001101000, 0b0_01000_1001101100, 0b0_01000_1001110000, 0b0_01000_1001110100, 0b0_01000_1001111000, 0b0_01000_1001111100,
0b0_01000_1010000000, 0b0_01000_1010000100, 0b0_01000_1010001000, 0b0_01000_1010001100, 0b0_01000_1010010000, 0b0_01000_1010010100, 0b0_01000_1010011000, 0b0_01000_1010011100, 0b0_01000_1010100000, 0b0_01000_1010100100, 0b0_01000_1010101000, 0b0_01000_1010101100, 0b0_01000_1010110000, 0b0_01000_1010110100, 0b0_01000_1010111000, 0b0_01000_1010111100,
0b0_01000_1011000000, 0b0_01000_1011000100, 0b0_01000_1011001000, 0b0_01000_1011001100, 0b0_01000_1011010000, 0b0_01000_1011010100, 0b0_01000_1011011000, 0b0_01000_1011011100, 0b0_01000_1011100000, 0b0_01000_1011100100, 0b0_01000_1011101000, 0b0_01000_1011101100, 0b0_01000_1011110000, 0b0_01000_1011110100, 0b0_01000_1011111000, 0b0_01000_1011111100,
0b0_01000_1100000000, 0b0_01000_1100000100, 0b0_01000_1100001000, 0b0_01000_1100001100, 0b0_01000_1100010000, 0b0_01000_1100010100, 0b0_01000_1100011000, 0b0_01000_1100011100, 0b0_01000_1100100000, 0b0_01000_1100100100, 0b0_01000_1100101000, 0b0_01000_1100101100, 0b0_01000_1100110000, 0b0_01000_1100110100, 0b0_01000_1100111000, 0b0_01000_1100111100,
0b0_01000_1101000000, 0b0_01000_1101000100, 0b0_01000_1101001000, 0b0_01000_1101001100, 0b0_01000_1101010000, 0b0_01000_1101010100, 0b0_01000_1101011000, 0b0_01000_1101011100, 0b0_01000_1101100000, 0b0_01000_1101100100, 0b0_01000_1101101000, 0b0_01000_1101101100, 0b0_01000_1101110000, 0b0_01000_1101110100, 0b0_01000_1101111000, 0b0_01000_1101111100,
0b0_01000_1110000000, 0b0_01000_1110000100, 0b0_01000_1110001000, 0b0_01000_1110001100, 0b0_01000_1110010000, 0b0_01000_1110010100, 0b0_01000_1110011000, 0b0_01000_1110011100, 0b0_01000_1110100000, 0b0_01000_1110100100, 0b0_01000_1110101000, 0b0_01000_1110101100, 0b0_01000_1110110000, 0b0_01000_1110110100, 0b0_01000_1110111000, 0b0_01000_1110111100,
0b0_01000_1111000000, 0b0_01000_1111000100, 0b0_01000_1111001000, 0b0_01000_1111001100, 0b0_01000_1111010000, 0b0_01000_1111010100, 0b0_01000_1111011000, 0b0_01000_1111011100, 0b0_01000_1111100000, 0b0_01000_1111100100, 0b0_01000_1111101000, 0b0_01000_1111101100, 0b0_01000_1111110000, 0b0_01000_1111110100, 0b0_01000_1111111000, 0b0_01000_1111111100,
0b0_01001_0000000000, 0b0_01001_0000000100, 0b0_01001_0000001000, 0b0_01001_0000001100, 0b0_01001_0000010000, 0b0_01001_0000010100, 0b0_01001_0000011000, 0b0_01001_0000011100, 0b0_01001_0000100000, 0b0_01001_0000100100, 0b0_01001_0000101000, 0b0_01001_0000101100, 0b0_01001_0000110000, 0b0_01001_0000110100, 0b0_01001_0000111000, 0b0_01001_0000111100,
0b0_01001_0001000000, 0b0_01001_0001000100, 0b0_01001_0001001000, 0b0_01001_0001001100, 0b0_01001_0001010000, 0b0_01001_0001010100, 0b0_01001_0001011000, 0b0_01001_0001011100, 0b0_01001_0001100000, 0b0_01001_0001100100, 0b0_01001_0001101000, 0b0_01001_0001101100, 0b0_01001_0001110000, 0b0_01001_0001110100, 0b0_01001_0001111000, 0b0_01001_0001111100,
0b0_01001_0010000000, 0b0_01001_0010000100, 0b0_01001_0010001000, 0b0_01001_0010001100, 0b0_01001_0010010000, 0b0_01001_0010010100, 0b0_01001_0010011000, 0b0_01001_0010011100, 0b0_01001_0010100000, 0b0_01001_0010100100, 0b0_01001_0010101000, 0b0_01001_0010101100, 0b0_01001_0010110000, 0b0_01001_0010110100, 0b0_01001_0010111000, 0b0_01001_0010111100,
0b0_01001_0011000000, 0b0_01001_0011000100, 0b0_01001_0011001000, 0b0_01001_0011001100, 0b0_01001_0011010000, 0b0_01001_0011010100, 0b0_01001_0011011000, 0b0_01001_0011011100, 0b0_01001_0011100000, 0b0_01001_0011100100, 0b0_01001_0011101000, 0b0_01001_0011101100, 0b0_01001_0011110000, 0b0_01001_0011110100, 0b0_01001_0011111000, 0b0_01001_0011111100,
0b0_01001_0100000000, 0b0_01001_0100000100, 0b0_01001_0100001000, 0b0_01001_0100001100, 0b0_01001_0100010000, 0b0_01001_0100010100, 0b0_01001_0100011000, 0b0_01001_0100011100, 0b0_01001_0100100000, 0b0_01001_0100100100, 0b0_01001_0100101000, 0b0_01001_0100101100, 0b0_01001_0100110000, 0b0_01001_0100110100, 0b0_01001_0100111000, 0b0_01001_0100111100,
0b0_01001_0101000000, 0b0_01001_0101000100, 0b0_01001_0101001000, 0b0_01001_0101001100, 0b0_01001_0101010000, 0b0_01001_0101010100, 0b0_01001_0101011000, 0b0_01001_0101011100, 0b0_01001_0101100000, 0b0_01001_0101100100, 0b0_01001_0101101000, 0b0_01001_0101101100, 0b0_01001_0101110000, 0b0_01001_0101110100, 0b0_01001_0101111000, 0b0_01001_0101111100,
0b0_01001_0110000000, 0b0_01001_0110000100, 0b0_01001_0110001000, 0b0_01001_0110001100, 0b0_01001_0110010000, 0b0_01001_0110010100, 0b0_01001_0110011000, 0b0_01001_0110011100, 0b0_01001_0110100000, 0b0_01001_0110100100, 0b0_01001_0110101000, 0b0_01001_0110101100, 0b0_01001_0110110000, 0b0_01001_0110110100, 0b0_01001_0110111000, 0b0_01001_0110111100,
0b0_01001_0111000000, 0b0_01001_0111000100, 0b0_01001_0111001000, 0b0_01001_0111001100, 0b0_01001_0111010000, 0b0_01001_0111010100, 0b0_01001_0111011000, 0b0_01001_0111011100, 0b0_01001_0111100000, 0b0_01001_0111100100, 0b0_01001_0111101000, 0b0_01001_0111101100, 0b0_01001_0111110000, 0b0_01001_0111110100, 0b0_01001_0111111000, 0b0_01001_0111111100,
0b0_01001_1000000000, 0b0_01001_1000000100, 0b0_01001_1000001000, 0b0_01001_1000001100, 0b0_01001_1000010000, 0b0_01001_1000010100, 0b0_01001_1000011000, 0b0_01001_1000011100, 0b0_01001_1000100000, 0b0_01001_1000100100, 0b0_01001_1000101000, 0b0_01001_1000101100, 0b0_01001_1000110000, 0b0_01001_1000110100, 0b0_01001_1000111000, 0b0_01001_1000111100,
0b0_01001_1001000000, 0b0_01001_1001000100, 0b0_01001_1001001000, 0b0_01001_1001001100, 0b0_01001_1001010000, 0b0_01001_1001010100, 0b0_01001_1001011000, 0b0_01001_1001011100, 0b0_01001_1001100000, 0b0_01001_1001100100, 0b0_01001_1001101000, 0b0_01001_1001101100, 0b0_01001_1001110000, 0b0_01001_1001110100, 0b0_01001_1001111000, 0b0_01001_1001111100,
0b0_01001_1010000000, 0b0_01001_1010000100, 0b0_01001_1010001000, 0b0_01001_1010001100, 0b0_01001_1010010000, 0b0_01001_1010010100, 0b0_01001_1010011000, 0b0_01001_1010011100, 0b0_01001_1010100000, 0b0_01001_1010100100, 0b0_01001_1010101000, 0b0_01001_1010101100, 0b0_01001_1010110000, 0b0_01001_1010110100, 0b0_01001_1010111000, 0b0_01001_1010111100,
0b0_01001_1011000000, 0b0_01001_1011000100, 0b0_01001_1011001000, 0b0_01001_1011001100, 0b0_01001_1011010000, 0b0_01001_1011010100, 0b0_01001_1011011000, 0b0_01001_1011011100, 0b0_01001_1011100000, 0b0_01001_1011100100, 0b0_01001_1011101000, 0b0_01001_1011101100, 0b0_01001_1011110000, 0b0_01001_1011110100, 0b0_01001_1011111000, 0b0_01001_1011111100,
0b0_01001_1100000000, 0b0_01001_1100000100, 0b0_01001_1100001000, 0b0_01001_1100001100, 0b0_01001_1100010000, 0b0_01001_1100010100, 0b0_01001_1100011000, 0b0_01001_1100011100, 0b0_01001_1100100000, 0b0_01001_1100100100, 0b0_01001_1100101000, 0b0_01001_1100101100, 0b0_01001_1100110000, 0b0_01001_1100110100, 0b0_01001_1100111000, 0b0_01001_1100111100,
0b0_01001_1101000000, 0b0_01001_1101000100, 0b0_01001_1101001000, 0b0_01001_1101001100, 0b0_01001_1101010000, 0b0_01001_1101010100, 0b0_01001_1101011000, 0b0_01001_1101011100, 0b0_01001_1101100000, 0b0_01001_1101100100, 0b0_01001_1101101000, 0b0_01001_1101101100, 0b0_01001_1101110000, 0b0_01001_1101110100, 0b0_01001_1101111000, 0b0_01001_1101111100,
0b0_01001_1110000000, 0b0_01001_1110000100, 0b0_01001_1110001000, 0b0_01001_1110001100, 0b0_01001_1110010000, 0b0_01001_1110010100, 0b0_01001_1110011000, 0b0_01001_1110011100, 0b0_01001_1110100000, 0b0_01001_1110100100, 0b0_01001_1110101000, 0b0_01001_1110101100, 0b0_01001_1110110000, 0b0_01001_1110110100, 0b0_01001_1110111000, 0b0_01001_1110111100,
0b0_01001_1111000000, 0b0_01001_1111000100, 0b0_01001_1111001000, 0b0_01001_1111001100, 0b0_01001_1111010000, 0b0_01001_1111010100, 0b0_01001_1111011000, 0b0_01001_1111011100, 0b0_01001_1111100000, 0b0_01001_1111100100, 0b0_01001_1111101000, 0b0_01001_1111101100, 0b0_01001_1111110000, 0b0_01001_1111110100, 0b0_01001_1111111000, 0b0_01001_1111111100,
0b0_01010_0000000000, 0b0_01010_0000000100, 0b0_01010_0000001000, 0b0_01010_0000001100, 0b0_01010_0000010000, 0b0_01010_0000010100, 0b0_01010_0000011000, 0b0_01010_0000011100, 0b0_01010_0000100000, 0b0_01010_0000100100, 0b0_01010_0000101000, 0b0_01010_0000101100, 0b0_01010_0000110000, 0b0_01010_0000110100, 0b0_01010_0000111000, 0b0_01010_0000111100,
0b0_01010_0001000000, 0b0_01010_0001000100, 0b0_01010_0001001000, 0b0_01010_0001001100, 0b0_01010_0001010000, 0b0_01010_0001010100, 0b0_01010_0001011000, 0b0_01010_0001011100, 0b0_01010_0001100000, 0b0_01010_0001100100, 0b0_01010_0001101000, 0b0_01010_0001101100, 0b0_01010_0001110000, 0b0_01010_0001110100, 0b0_01010_0001111000, 0b0_01010_0001111100,
0b0_01010_0010000000, 0b0_01010_0010000100, 0b0_01010_0010001000, 0b0_01010_0010001100, 0b0_01010_0010010000, 0b0_01010_0010010100, 0b0_01010_0010011000, 0b0_01010_0010011100, 0b0_01010_0010100000, 0b0_01010_0010100100, 0b0_01010_0010101000, 0b0_01010_0010101100, 0b0_01010_0010110000, 0b0_01010_0010110100, 0b0_01010_0010111000, 0b0_01010_0010111100,
0b0_01010_0011000000, 0b0_01010_0011000100, 0b0_01010_0011001000, 0b0_01010_0011001100, 0b0_01010_0011010000, 0b0_01010_0011010100, 0b0_01010_0011011000, 0b0_01010_0011011100, 0b0_01010_0011100000, 0b0_01010_0011100100, 0b0_01010_0011101000, 0b0_01010_0011101100, 0b0_01010_0011110000, 0b0_01010_0011110100, 0b0_01010_0011111000, 0b0_01010_0011111100,
0b0_01010_0100000000, 0b0_01010_0100000100, 0b0_01010_0100001000, 0b0_01010_0100001100, 0b0_01010_0100010000, 0b0_01010_0100010100, 0b0_01010_0100011000, 0b0_01010_0100011100, 0b0_01010_0100100000, 0b0_01010_0100100100, 0b0_01010_0100101000, 0b0_01010_0100101100, 0b0_01010_0100110000, 0b0_01010_0100110100, 0b0_01010_0100111000, 0b0_01010_0100111100,
0b0_01010_0101000000, 0b0_01010_0101000100, 0b0_01010_0101001000, 0b0_01010_0101001100, 0b0_01010_0101010000, 0b0_01010_0101010100, 0b0_01010_0101011000, 0b0_01010_0101011100, 0b0_01010_0101100000, 0b0_01010_0101100100, 0b0_01010_0101101000, 0b0_01010_0101101100, 0b0_01010_0101110000, 0b0_01010_0101110100, 0b0_01010_0101111000, 0b0_01010_0101111100,
0b0_01010_0110000000, 0b0_01010_0110000100, 0b0_01010_0110001000, 0b0_01010_0110001100, 0b0_01010_0110010000, 0b0_01010_0110010100, 0b0_01010_0110011000, 0b0_01010_0110011100, 0b0_01010_0110100000, 0b0_01010_0110100100, 0b0_01010_0110101000, 0b0_01010_0110101100, 0b0_01010_0110110000, 0b0_01010_0110110100, 0b0_01010_0110111000, 0b0_01010_0110111100,
0b0_01010_0111000000, 0b0_01010_0111000100, 0b0_01010_0111001000, 0b0_01010_0111001100, 0b0_01010_0111010000, 0b0_01010_0111010100, 0b0_01010_0111011000, 0b0_01010_0111011100, 0b0_01010_0111100000, 0b0_01010_0111100100, 0b0_01010_0111101000, 0b0_01010_0111101100, 0b0_01010_0111110000, 0b0_01010_0111110100, 0b0_01010_0111111000, 0b0_01010_0111111100,
0b0_01010_1000000000, 0b0_01010_1000000100, 0b0_01010_1000001000, 0b0_01010_1000001100, 0b0_01010_1000010000, 0b0_01010_1000010100, 0b0_01010_1000011000, 0b0_01010_1000011100, 0b0_01010_1000100000, 0b0_01010_1000100100, 0b0_01010_1000101000, 0b0_01010_1000101100, 0b0_01010_1000110000, 0b0_01010_1000110100, 0b0_01010_1000111000, 0b0_01010_1000111100,
0b0_01010_1001000000, 0b0_01010_1001000100, 0b0_01010_1001001000, 0b0_01010_1001001100, 0b0_01010_1001010000, 0b0_01010_1001010100, 0b0_01010_1001011000, 0b0_01010_1001011100, 0b0_01010_1001100000, 0b0_01010_1001100100, 0b0_01010_1001101000, 0b0_01010_1001101100, 0b0_01010_1001110000, 0b0_01010_1001110100, 0b0_01010_1001111000, 0b0_01010_1001111100,
0b0_01010_1010000000, 0b0_01010_1010000100, 0b0_01010_1010001000, 0b0_01010_1010001100, 0b0_01010_1010010000, 0b0_01010_1010010100, 0b0_01010_1010011000, 0b0_01010_1010011100, 0b0_01010_1010100000, 0b0_01010_1010100100, 0b0_01010_1010101000, 0b0_01010_1010101100, 0b0_01010_1010110000, 0b0_01010_1010110100, 0b0_01010_1010111000, 0b0_01010_1010111100,
0b0_01010_1011000000, 0b0_01010_1011000100, 0b0_01010_1011001000, 0b0_01010_1011001100, 0b0_01010_1011010000, 0b0_01010_1011010100, 0b0_01010_1011011000, 0b0_01010_1011011100, 0b0_01010_1011100000, 0b0_01010_1011100100, 0b0_01010_1011101000, 0b0_01010_1011101100, 0b0_01010_1011110000, 0b0_01010_1011110100, 0b0_01010_1011111000, 0b0_01010_1011111100,
0b0_01010_1100000000, 0b0_01010_1100000100, 0b0_01010_1100001000, 0b0_01010_1100001100, 0b0_01010_1100010000, 0b0_01010_1100010100, 0b0_01010_1100011000, 0b0_01010_1100011100, 0b0_01010_1100100000, 0b0_01010_1100100100, 0b0_01010_1100101000, 0b0_01010_1100101100, 0b0_01010_1100110000, 0b0_01010_1100110100, 0b0_01010_1100111000, 0b0_01010_1100111100,
0b0_01010_1101000000, 0b0_01010_1101000100, 0b0_01010_1101001000, 0b0_01010_1101001100, 0b0_01010_1101010000, 0b0_01010_1101010100, 0b0_01010_1101011000, 0b0_01010_1101011100, 0b0_01010_1101100000, 0b0_01010_1101100100, 0b0_01010_1101101000, 0b0_01010_1101101100, 0b0_01010_1101110000, 0b0_01010_1101110100, 0b0_01010_1101111000, 0b0_01010_1101111100,
0b0_01010_1110000000, 0b0_01010_1110000100, 0b0_01010_1110001000, 0b0_01010_1110001100, 0b0_01010_1110010000, 0b0_01010_1110010100, 0b0_01010_1110011000, 0b0_01010_1110011100, 0b0_01010_1110100000, 0b0_01010_1110100100, 0b0_01010_1110101000, 0b0_01010_1110101100, 0b0_01010_1110110000, 0b0_01010_1110110100, 0b0_01010_1110111000, 0b0_01010_1110111100,
0b0_01010_1111000000, 0b0_01010_1111000100, 0b0_01010_1111001000, 0b0_01010_1111001100, 0b0_01010_1111010000, 0b0_01010_1111010100, 0b0_01010_1111011000, 0b0_01010_1111011100, 0b0_01010_1111100000, 0b0_01010_1111100100, 0b0_01010_1111101000, 0b0_01010_1111101100, 0b0_01010_1111110000, 0b0_01010_1111110100, 0b0_01010_1111111000, 0b0_01010_1111111100,
0b0_00000_0000000000, 0b0_00001_0000000000, 0b0_00010_0000000000, 0b0_00011_0000000000, 0b0_01011_0000000000, 0b0_01100_0000000000, 0b0_01101_0000000000, 0b0_01110_0000000000, 0b0_00000_0000100000, 0b0_00001_0000100000, 0b0_00010_0000100000, 0b0_00011_0000100000, 0b0_01011_0000100000, 0b0_01100_0000100000, 0b0_01101_0000100000, 0b0_01110_0000100000,
0b0_00000_0001000000, 0b0_00001_0001000000, 0b0_00010_0001000000, 0b0_00011_0001000000, 0b0_01011_0001000000, 0b0_01100_0001000000, 0b0_01101_0001000000, 0b0_01110_0001000000, 0b0_00000_0001100000, 0b0_00001_0001100000, 0b0_00010_0001100000, 0b0_00011_0001100000, 0b0_01011_0001100000, 0b0_01100_0001100000, 0b0_01101_0001100000, 0b0_01110_0001100000,
0b0_00000_0010000000, 0b0_00001_0010000000, 0b0_00010_0010000000, 0b0_00011_0010000000, 0b0_01011_0010000000, 0b0_01100_0010000000, 0b0_01101_0010000000, 0b0_01110_0010000000, 0b0_00000_0010100000, 0b0_00001_0010100000, 0b0_00010_0010100000, 0b0_00011_0010100000, 0b0_01011_0010100000, 0b0_01100_0010100000, 0b0_01101_0010100000, 0b0_01110_0010100000,
0b0_00000_0011000000, 0b0_00001_0011000000, 0b0_00010_0011000000, 0b0_00011_0011000000, 0b0_01011_0011000000, 0b0_01100_0011000000, 0b0_01101_0011000000, 0b0_01110_0011000000, 0b0_00000_0011100000, 0b0_00001_0011100000, 0b0_00010_0011100000, 0b0_00011_0011100000, 0b0_01011_0011100000, 0b0_01100_0011100000, 0b0_01101_0011100000, 0b0_01110_0011100000,
0b0_00000_0100000000, 0b0_00001_0100000000, 0b0_00010_0100000000, 0b0_00011_0100000000, 0b0_01011_0100000000, 0b0_01100_0100000000, 0b0_01101_0100000000, 0b0_01110_0100000000, 0b0_00000_0100100000, 0b0_00001_0100100000, 0b0_00010_0100100000, 0b0_00011_0100100000, 0b0_01011_0100100000, 0b0_01100_0100100000, 0b0_01101_0100100000, 0b0_01110_0100100000,
0b0_00000_0101000000, 0b0_00001_0101000000, 0b0_00010_0101000000, 0b0_00011_0101000000, 0b0_01011_0101000000, 0b0_01100_0101000000, 0b0_01101_0101000000, 0b0_01110_0101000000, 0b0_00000_0101100000, 0b0_00001_0101100000, 0b0_00010_0101100000, 0b0_00011_0101100000, 0b0_01011_0101100000, 0b0_01100_0101100000, 0b0_01101_0101100000, 0b0_01110_0101100000,
0b0_00000_0110000000, 0b0_00001_0110000000, 0b0_00010_0110000000, 0b0_00011_0110000000, 0b0_01011_0110000000, 0b0_01100_0110000000, 0b0_01101_0110000000, 0b0_01110_0110000000, 0b0_00000_0110100000, 0b0_00001_0110100000, 0b0_00010_0110100000, 0b0_00011_0110100000, 0b0_01011_0110100000, 0b0_01100_0110100000, 0b0_01101_0110100000, 0b0_01110_0110100000,
0b0_00000_0111000000, 0b0_00001_0111000000, 0b0_00010_0111000000, 0b0_00011_0111000000, 0b0_01011_0111000000, 0b0_01100_0111000000, 0b0_01101_0111000000, 0b0_01110_0111000000, 0b0_00000_0111100000, 0b0_00001_0111100000, 0b0_00010_0111100000, 0b0_00011_0111100000, 0b0_01011_0111100000, 0b0_01100_0111100000, 0b0_01101_0111100000, 0b0_01110_0111100000,
0b0_00000_1000000000, 0b0_00001_1000000000, 0b0_00010_1000000000, 0b0_00011_1000000000, 0b0_01011_1000000000, 0b0_01100_1000000000, 0b0_01101_1000000000, 0b0_01110_1000000000, 0b0_00000_1000100000, 0b0_00001_1000100000, 0b0_00010_1000100000, 0b0_00011_1000100000, 0b0_01011_1000100000, 0b0_01100_1000100000, 0b0_01101_1000100000, 0b0_01110_1000100000,
0b0_00000_1001000000, 0b0_00001_1001000000, 0b0_00010_1001000000, 0b0_00011_1001000000, 0b0_01011_1001000000, 0b0_01100_1001000000, 0b0_01101_1001000000, 0b0_01110_1001000000, 0b0_00000_1001100000, 0b0_00001_1001100000, 0b0_00010_1001100000, 0b0_00011_1001100000, 0b0_01011_1001100000, 0b0_01100_1001100000, 0b0_01101_1001100000, 0b0_01110_1001100000,
0b0_00000_1010000000, 0b0_00001_1010000000, 0b0_00010_1010000000, 0b0_00011_1010000000, 0b0_01011_1010000000, 0b0_01100_1010000000, 0b0_01101_1010000000, 0b0_01110_1010000000, 0b0_00000_1010100000, 0b0_00001_1010100000, 0b0_00010_1010100000, 0b0_00011_1010100000, 0b0_01011_1010100000, 0b0_01100_1010100000, 0b0_01101_1010100000, 0b0_01110_1010100000,
0b0_00000_1011000000, 0b0_00001_1011000000, 0b0_00010_1011000000, 0b0_00011_1011000000, 0b0_01011_1011000000, 0b0_01100_1011000000, 0b0_01101_1011000000, 0b0_01110_1011000000, 0b0_00000_1011100000, 0b0_00001_1011100000, 0b0_00010_1011100000, 0b0_00011_1011100000, 0b0_01011_1011100000, 0b0_01100_1011100000, 0b0_01101_1011100000, 0b0_01110_1011100000,
0b0_00000_1100000000, 0b0_00001_1100000000, 0b0_00010_1100000000, 0b0_00011_1100000000, 0b0_01011_1100000000, 0b0_01100_1100000000, 0b0_01101_1100000000, 0b0_01110_1100000000, 0b0_00000_1100100000, 0b0_00001_1100100000, 0b0_00010_1100100000, 0b0_00011_1100100000, 0b0_01011_1100100000, 0b0_01100_1100100000, 0b0_01101_1100100000, 0b0_01110_1100100000,
0b0_00000_1101000000, 0b0_00001_1101000000, 0b0_00010_1101000000, 0b0_00011_1101000000, 0b0_01011_1101000000, 0b0_01100_1101000000, 0b0_01101_1101000000, 0b0_01110_1101000000, 0b0_00000_1101100000, 0b0_00001_1101100000, 0b0_00010_1101100000, 0b0_00011_1101100000, 0b0_01011_1101100000, 0b0_01100_1101100000, 0b0_01101_1101100000, 0b0_01110_1101100000,
0b0_00000_1110000000, 0b0_00001_1110000000, 0b0_00010_1110000000, 0b0_00011_1110000000, 0b0_01011_1110000000, 0b0_01100_1110000000, 0b0_01101_1110000000, 0b0_01110_1110000000, 0b0_00000_1110100000, 0b0_00001_1110100000, 0b0_00010_1110100000, 0b0_00011_1110100000, 0b0_01011_1110100000, 0b0_01100_1110100000, 0b0_01101_1110100000, 0b0_01110_1110100000,
0b0_00000_1111000000, 0b0_00001_1111000000, 0b0_00010_1111000000, 0b0_00011_1111000000, 0b0_01011_1111000000, 0b0_01100_1111000000, 0b0_01101_1111000000, 0b0_01110_1111000000, 0b0_00000_1111100000, 0b0_00001_1111100000, 0b0_00010_1111100000, 0b0_00011_1111100000, 0b0_01011_1111100000, 0b0_01100_1111100000, 0b0_01101_1111100000, 0b0_01110_1111100000,
0b0_00100_0000000000, 0b0_00100_0000000100, 0b0_00100_0000001000, 0b0_00100_0000001100, 0b0_00100_0000010000, 0b0_00100_0000010100, 0b0_00100_0000011000, 0b0_00100_0000011100, 0b0_00100_0000100000, 0b0_00100_0000100100, 0b0_00100_0000101000, 0b0_00100_0000101100, 0b0_00100_0000110000, 0b0_00100_0000110100, 0b0_00100_0000111000, 0b0_00100_0000111100,
0b0_00100_0001000000, 0b0_00100_0001000100, 0b0_00100_0001001000, 0b0_00100_0001001100, 0b0_00100_0001010000, 0b0_00100_0001010100, 0b0_00100_0001011000, 0b0_00100_0001011100, 0b0_00100_0001100000, 0b0_00100_0001100100, 0b0_00100_0001101000, 0b0_00100_0001101100, 0b0_00100_0001110000, 0b0_00100_0001110100, 0b0_00100_0001111000, 0b0_00100_0001111100,
0b0_00100_0010000000, 0b0_00100_0010000100, 0b0_00100_0010001000, 0b0_00100_0010001100, 0b0_00100_0010010000, 0b0_00100_0010010100, 0b0_00100_0010011000, 0b0_00100_0010011100, 0b0_00100_0010100000, 0b0_00100_0010100100, 0b0_00100_0010101000, 0b0_00100_0010101100, 0b0_00100_0010110000, 0b0_00100_0010110100, 0b0_00100_0010111000, 0b0_00100_0010111100,
0b0_00100_0011000000, 0b0_00100_0011000100, 0b0_00100_0011001000, 0b0_00100_0011001100, 0b0_00100_0011010000, 0b0_00100_0011010100, 0b0_00100_0011011000, 0b0_00100_0011011100, 0b0_00100_0011100000, 0b0_00100_0011100100, 0b0_00100_0011101000, 0b0_00100_0011101100, 0b0_00100_0011110000, 0b0_00100_0011110100, 0b0_00100_0011111000, 0b0_00100_0011111100,
0b0_00100_0100000000, 0b0_00100_0100000100, 0b0_00100_0100001000, 0b0_00100_0100001100, 0b0_00100_0100010000, 0b0_00100_0100010100, 0b0_00100_0100011000, 0b0_00100_0100011100, 0b0_00100_0100100000, 0b0_00100_0100100100, 0b0_00100_0100101000, 0b0_00100_0100101100, 0b0_00100_0100110000, 0b0_00100_0100110100, 0b0_00100_0100111000, 0b0_00100_0100111100,
0b0_00100_0101000000, 0b0_00100_0101000100, 0b0_00100_0101001000, 0b0_00100_0101001100, 0b0_00100_0101010000, 0b0_00100_0101010100, 0b0_00100_0101011000, 0b0_00100_0101011100, 0b0_00100_0101100000, 0b0_00100_0101100100, 0b0_00100_0101101000, 0b0_00100_0101101100, 0b0_00100_0101110000, 0b0_00100_0101110100, 0b0_00100_0101111000, 0b0_00100_0101111100,
0b0_00100_0110000000, 0b0_00100_0110000100, 0b0_00100_0110001000, 0b0_00100_0110001100, 0b0_00100_0110010000, 0b0_00100_0110010100, 0b0_00100_0110011000, 0b0_00100_0110011100, 0b0_00100_0110100000, 0b0_00100_0110100100, 0b0_00100_0110101000, 0b0_00100_0110101100, 0b0_00100_0110110000, 0b0_00100_0110110100, 0b0_00100_0110111000, 0b0_00100_0110111100,
0b0_00100_0111000000, 0b0_00100_0111000100, 0b0_00100_0111001000, 0b0_00100_0111001100, 0b0_00100_0111010000, 0b0_00100_0111010100, 0b0_00100_0111011000, 0b0_00100_0111011100, 0b0_00100_0111100000, 0b0_00100_0111100100, 0b0_00100_0111101000, 0b0_00100_0111101100, 0b0_00100_0111110000, 0b0_00100_0111110100, 0b0_00100_0111111000, 0b0_00100_0111111100,
0b0_00100_1000000000, 0b0_00100_1000000100, 0b0_00100_1000001000, 0b0_00100_1000001100, 0b0_00100_1000010000, 0b0_00100_1000010100, 0b0_00100_1000011000, 0b0_00100_1000011100, 0b0_00100_1000100000, 0b0_00100_1000100100, 0b0_00100_1000101000, 0b0_00100_1000101100, 0b0_00100_1000110000, 0b0_00100_1000110100, 0b0_00100_1000111000, 0b0_00100_1000111100,
0b0_00100_1001000000, 0b0_00100_1001000100, 0b0_00100_1001001000, 0b0_00100_1001001100, 0b0_00100_1001010000, 0b0_00100_1001010100, 0b0_00100_1001011000, 0b0_00100_1001011100, 0b0_00100_1001100000, 0b0_00100_1001100100, 0b0_00100_1001101000, 0b0_00100_1001101100, 0b0_00100_1001110000, 0b0_00100_1001110100, 0b0_00100_1001111000, 0b0_00100_1001111100,
0b0_00100_1010000000, 0b0_00100_1010000100, 0b0_00100_1010001000, 0b0_00100_1010001100, 0b0_00100_1010010000, 0b0_00100_1010010100, 0b0_00100_1010011000, 0b0_00100_1010011100, 0b0_00100_1010100000, 0b0_00100_1010100100, 0b0_00100_1010101000, 0b0_00100_1010101100, 0b0_00100_1010110000, 0b0_00100_1010110100, 0b0_00100_1010111000, 0b0_00100_1010111100,
0b0_00100_1011000000, 0b0_00100_1011000100, 0b0_00100_1011001000, 0b0_00100_1011001100, 0b0_00100_1011010000, 0b0_00100_1011010100, 0b0_00100_1011011000, 0b0_00100_1011011100, 0b0_00100_1011100000, 0b0_00100_1011100100, 0b0_00100_1011101000, 0b0_00100_1011101100, 0b0_00100_1011110000, 0b0_00100_1011110100, 0b0_00100_1011111000, 0b0_00100_1011111100,
0b0_00100_1100000000, 0b0_00100_1100000100, 0b0_00100_1100001000, 0b0_00100_1100001100, 0b0_00100_1100010000, 0b0_00100_1100010100, 0b0_00100_1100011000, 0b0_00100_1100011100, 0b0_00100_1100100000, 0b0_00100_1100100100, 0b0_00100_1100101000, 0b0_00100_1100101100, 0b0_00100_1100110000, 0b0_00100_1100110100, 0b0_00100_1100111000, 0b0_00100_1100111100,
0b0_00100_1101000000, 0b0_00100_1101000100, 0b0_00100_1101001000, 0b0_00100_1101001100, 0b0_00100_1101010000, 0b0_00100_1101010100, 0b0_00100_1101011000, 0b0_00100_1101011100, 0b0_00100_1101100000, 0b0_00100_1101100100, 0b0_00100_1101101000, 0b0_00100_1101101100, 0b0_00100_1101110000, 0b0_00100_1101110100, 0b0_00100_1101111000, 0b0_00100_1101111100,
0b0_00100_1110000000, 0b0_00100_1110000100, 0b0_00100_1110001000, 0b0_00100_1110001100, 0b0_00100_1110010000, 0b0_00100_1110010100, 0b0_00100_1110011000, 0b0_00100_1110011100, 0b0_00100_1110100000, 0b0_00100_1110100100, 0b0_00100_1110101000, 0b0_00100_1110101100, 0b0_00100_1110110000, 0b0_00100_1110110100, 0b0_00100_1110111000, 0b0_00100_1110111100,
0b0_00100_1111000000, 0b0_00100_1111000100, 0b0_00100_1111001000, 0b0_00100_1111001100, 0b0_00100_1111010000, 0b0_00100_1111010100, 0b0_00100_1111011000, 0b0_00100_1111011100, 0b0_00100_1111100000, 0b0_00100_1111100100, 0b0_00100_1111101000, 0b0_00100_1111101100, 0b0_00100_1111110000, 0b0_00100_1111110100, 0b0_00100_1111111000, 0b0_00100_1111111100,
0b0_00101_0000000000, 0b0_00101_0000000100, 0b0_00101_0000001000, 0b0_00101_0000001100, 0b0_00101_0000010000, 0b0_00101_0000010100, 0b0_00101_0000011000, 0b0_00101_0000011100, 0b0_00101_0000100000, 0b0_00101_0000100100, 0b0_00101_0000101000, 0b0_00101_0000101100, 0b0_00101_0000110000, 0b0_00101_0000110100, 0b0_00101_0000111000, 0b0_00101_0000111100,
0b0_00101_0001000000, 0b0_00101_0001000100, 0b0_00101_0001001000, 0b0_00101_0001001100, 0b0_00101_0001010000, 0b0_00101_0001010100, 0b0_00101_0001011000, 0b0_00101_0001011100, 0b0_00101_0001100000, 0b0_00101_0001100100, 0b0_00101_0001101000, 0b0_00101_0001101100, 0b0_00101_0001110000, 0b0_00101_0001110100, 0b0_00101_0001111000, 0b0_00101_0001111100,
0b0_00101_0010000000, 0b0_00101_0010000100, 0b0_00101_0010001000, 0b0_00101_0010001100, 0b0_00101_0010010000, 0b0_00101_0010010100, 0b0_00101_0010011000, 0b0_00101_0010011100, 0b0_00101_0010100000, 0b0_00101_0010100100, 0b0_00101_0010101000, 0b0_00101_0010101100, 0b0_00101_0010110000, 0b0_00101_0010110100, 0b0_00101_0010111000, 0b0_00101_0010111100,
0b0_00101_0011000000, 0b0_00101_0011000100, 0b0_00101_0011001000, 0b0_00101_0011001100, 0b0_00101_0011010000, 0b0_00101_0011010100, 0b0_00101_0011011000, 0b0_00101_0011011100, 0b0_00101_0011100000, 0b0_00101_0011100100, 0b0_00101_0011101000, 0b0_00101_0011101100, 0b0_00101_0011110000, 0b0_00101_0011110100, 0b0_00101_0011111000, 0b0_00101_0011111100,
0b0_00101_0100000000, 0b0_00101_0100000100, 0b0_00101_0100001000, 0b0_00101_0100001100, 0b0_00101_0100010000, 0b0_00101_0100010100, 0b0_00101_0100011000, 0b0_00101_0100011100, 0b0_00101_0100100000, 0b0_00101_0100100100, 0b0_00101_0100101000, 0b0_00101_0100101100, 0b0_00101_0100110000, 0b0_00101_0100110100, 0b0_00101_0100111000, 0b0_00101_0100111100,
0b0_00101_0101000000, 0b0_00101_0101000100, 0b0_00101_0101001000, 0b0_00101_0101001100, 0b0_00101_0101010000, 0b0_00101_0101010100, 0b0_00101_0101011000, 0b0_00101_0101011100, 0b0_00101_0101100000, 0b0_00101_0101100100, 0b0_00101_0101101000, 0b0_00101_0101101100, 0b0_00101_0101110000, 0b0_00101_0101110100, 0b0_00101_0101111000, 0b0_00101_0101111100,
0b0_00101_0110000000, 0b0_00101_0110000100, 0b0_00101_0110001000, 0b0_00101_0110001100, 0b0_00101_0110010000, 0b0_00101_0110010100, 0b0_00101_0110011000, 0b0_00101_0110011100, 0b0_00101_0110100000, 0b0_00101_0110100100, 0b0_00101_0110101000, 0b0_00101_0110101100, 0b0_00101_0110110000, 0b0_00101_0110110100, 0b0_00101_0110111000, 0b0_00101_0110111100,
0b0_00101_0111000000, 0b0_00101_0111000100, 0b0_00101_0111001000, 0b0_00101_0111001100, 0b0_00101_0111010000, 0b0_00101_0111010100, 0b0_00101_0111011000, 0b0_00101_0111011100, 0b0_00101_0111100000, 0b0_00101_0111100100, 0b0_00101_0111101000, 0b0_00101_0111101100, 0b0_00101_0111110000, 0b0_00101_0111110100, 0b0_00101_0111111000, 0b0_00101_0111111100,
0b0_00101_1000000000, 0b0_00101_1000000100, 0b0_00101_1000001000, 0b0_00101_1000001100, 0b0_00101_1000010000, 0b0_00101_1000010100, 0b0_00101_1000011000, 0b0_00101_1000011100, 0b0_00101_1000100000, 0b0_00101_1000100100, 0b0_00101_1000101000, 0b0_00101_1000101100, 0b0_00101_1000110000, 0b0_00101_1000110100, 0b0_00101_1000111000, 0b0_00101_1000111100,
0b0_00101_1001000000, 0b0_00101_1001000100, 0b0_00101_1001001000, 0b0_00101_1001001100, 0b0_00101_1001010000, 0b0_00101_1001010100, 0b0_00101_1001011000, 0b0_00101_1001011100, 0b0_00101_1001100000, 0b0_00101_1001100100, 0b0_00101_1001101000, 0b0_00101_1001101100, 0b0_00101_1001110000, 0b0_00101_1001110100, 0b0_00101_1001111000, 0b0_00101_1001111100,
0b0_00101_1010000000, 0b0_00101_1010000100, 0b0_00101_1010001000, 0b0_00101_1010001100, 0b0_00101_1010010000, 0b0_00101_1010010100, 0b0_00101_1010011000, 0b0_00101_1010011100, 0b0_00101_1010100000, 0b0_00101_1010100100, 0b0_00101_1010101000, 0b0_00101_1010101100, 0b0_00101_1010110000, 0b0_00101_1010110100, 0b0_00101_1010111000, 0b0_00101_1010111100,
0b0_00101_1011000000, 0b0_00101_1011000100, 0b0_00101_1011001000, 0b0_00101_1011001100, 0b0_00101_1011010000, 0b0_00101_1011010100, 0b0_00101_1011011000, 0b0_00101_1011011100, 0b0_00101_1011100000, 0b0_00101_1011100100, 0b0_00101_1011101000, 0b0_00101_1011101100, 0b0_00101_1011110000, 0b0_00101_1011110100, 0b0_00101_1011111000, 0b0_00101_1011111100,
0b0_00101_1100000000, 0b0_00101_1100000100, 0b0_00101_1100001000, 0b0_00101_1100001100, 0b0_00101_1100010000, 0b0_00101_1100010100, 0b0_00101_1100011000, 0b0_00101_1100011100, 0b0_00101_1100100000, 0b0_00101_1100100100, 0b0_00101_1100101000, 0b0_00101_1100101100, 0b0_00101_1100110000, 0b0_00101_1100110100, 0b0_00101_1100111000, 0b0_00101_1100111100,
0b0_00101_1101000000, 0b0_00101_1101000100, 0b0_00101_1101001000, 0b0_00101_1101001100, 0b0_00101_1101010000, 0b0_00101_1101010100, 0b0_00101_1101011000, 0b0_00101_1101011100, 0b0_00101_1101100000, 0b0_00101_1101100100, 0b0_00101_1101101000, 0b0_00101_1101101100, 0b0_00101_1101110000, 0b0_00101_1101110100, 0b0_00101_1101111000, 0b0_00101_1101111100,
0b0_00101_1110000000, 0b0_00101_1110000100, 0b0_00101_1110001000, 0b0_00101_1110001100, 0b0_00101_1110010000, 0b0_00101_1110010100, 0b0_00101_1110011000, 0b0_00101_1110011100, 0b0_00101_1110100000, 0b0_00101_1110100100, 0b0_00101_1110101000, 0b0_00101_1110101100, 0b0_00101_1110110000, 0b0_00101_1110110100, 0b0_00101_1110111000, 0b0_00101_1110111100,
0b0_00101_1111000000, 0b0_00101_1111000100, 0b0_00101_1111001000, 0b0_00101_1111001100, 0b0_00101_1111010000, 0b0_00101_1111010100, 0b0_00101_1111011000, 0b0_00101_1111011100, 0b0_00101_1111100000, 0b0_00101_1111100100, 0b0_00101_1111101000, 0b0_00101_1111101100, 0b0_00101_1111110000, 0b0_00101_1111110100, 0b0_00101_1111111000, 0b0_00101_1111111100,
0b0_00110_0000000000, 0b0_00110_0000000100, 0b0_00110_0000001000, 0b0_00110_0000001100, 0b0_00110_0000010000, 0b0_00110_0000010100, 0b0_00110_0000011000, 0b0_00110_0000011100, 0b0_00110_0000100000, 0b0_00110_0000100100, 0b0_00110_0000101000, 0b0_00110_0000101100, 0b0_00110_0000110000, 0b0_00110_0000110100, 0b0_00110_0000111000, 0b0_00110_0000111100,
0b0_00110_0001000000, 0b0_00110_0001000100, 0b0_00110_0001001000, 0b0_00110_0001001100, 0b0_00110_0001010000, 0b0_00110_0001010100, 0b0_00110_0001011000, 0b0_00110_0001011100, 0b0_00110_0001100000, 0b0_00110_0001100100, 0b0_00110_0001101000, 0b0_00110_0001101100, 0b0_00110_0001110000, 0b0_00110_0001110100, 0b0_00110_0001111000, 0b0_00110_0001111100,
0b0_00110_0010000000, 0b0_00110_0010000100, 0b0_00110_0010001000, 0b0_00110_0010001100, 0b0_00110_0010010000, 0b0_00110_0010010100, 0b0_00110_0010011000, 0b0_00110_0010011100, 0b0_00110_0010100000, 0b0_00110_0010100100, 0b0_00110_0010101000, 0b0_00110_0010101100, 0b0_00110_0010110000, 0b0_00110_0010110100, 0b0_00110_0010111000, 0b0_00110_0010111100,
0b0_00110_0011000000, 0b0_00110_0011000100, 0b0_00110_0011001000, 0b0_00110_0011001100, 0b0_00110_0011010000, 0b0_00110_0011010100, 0b0_00110_0011011000, 0b0_00110_0011011100, 0b0_00110_0011100000, 0b0_00110_0011100100, 0b0_00110_0011101000, 0b0_00110_0011101100, 0b0_00110_0011110000, 0b0_00110_0011110100, 0b0_00110_0011111000, 0b0_00110_0011111100,
0b0_00110_0100000000, 0b0_00110_0100000100, 0b0_00110_0100001000, 0b0_00110_0100001100, 0b0_00110_0100010000, 0b0_00110_0100010100, 0b0_00110_0100011000, 0b0_00110_0100011100, 0b0_00110_0100100000, 0b0_00110_0100100100, 0b0_00110_0100101000, 0b0_00110_0100101100, 0b0_00110_0100110000, 0b0_00110_0100110100, 0b0_00110_0100111000, 0b0_00110_0100111100,
0b0_00110_0101000000, 0b0_00110_0101000100, 0b0_00110_0101001000, 0b0_00110_0101001100, 0b0_00110_0101010000, 0b0_00110_0101010100, 0b0_00110_0101011000, 0b0_00110_0101011100, 0b0_00110_0101100000, 0b0_00110_0101100100, 0b0_00110_0101101000, 0b0_00110_0101101100, 0b0_00110_0101110000, 0b0_00110_0101110100, 0b0_00110_0101111000, 0b0_00110_0101111100,
0b0_00110_0110000000, 0b0_00110_0110000100, 0b0_00110_0110001000, 0b0_00110_0110001100, 0b0_00110_0110010000, 0b0_00110_0110010100, 0b0_00110_0110011000, 0b0_00110_0110011100, 0b0_00110_0110100000, 0b0_00110_0110100100, 0b0_00110_0110101000, 0b0_00110_0110101100, 0b0_00110_0110110000, 0b0_00110_0110110100, 0b0_00110_0110111000, 0b0_00110_0110111100,
0b0_00110_0111000000, 0b0_00110_0111000100, 0b0_00110_0111001000, 0b0_00110_0111001100, 0b0_00110_0111010000, 0b0_00110_0111010100, 0b0_00110_0111011000, 0b0_00110_0111011100, 0b0_00110_0111100000, 0b0_00110_0111100100, 0b0_00110_0111101000, 0b0_00110_0111101100, 0b0_00110_0111110000, 0b0_00110_0111110100, 0b0_00110_0111111000, 0b0_00110_0111111100,
0b0_00110_1000000000, 0b0_00110_1000000100, 0b0_00110_1000001000, 0b0_00110_1000001100, 0b0_00110_1000010000, 0b0_00110_1000010100, 0b0_00110_1000011000, 0b0_00110_1000011100, 0b0_00110_1000100000, 0b0_00110_1000100100, 0b0_00110_1000101000, 0b0_00110_1000101100, 0b0_00110_1000110000, 0b0_00110_1000110100, 0b0_00110_1000111000, 0b0_00110_1000111100,
0b0_00110_1001000000, 0b0_00110_1001000100, 0b0_00110_1001001000, 0b0_00110_1001001100, 0b0_00110_1001010000, 0b0_00110_1001010100, 0b0_00110_1001011000, 0b0_00110_1001011100, 0b0_00110_1001100000, 0b0_00110_1001100100, 0b0_00110_1001101000, 0b0_00110_1001101100, 0b0_00110_1001110000, 0b0_00110_1001110100, 0b0_00110_1001111000, 0b0_00110_1001111100,
0b0_00110_1010000000, 0b0_00110_1010000100, 0b0_00110_1010001000, 0b0_00110_1010001100, 0b0_00110_1010010000, 0b0_00110_1010010100, 0b0_00110_1010011000, 0b0_00110_1010011100, 0b0_00110_1010100000, 0b0_00110_1010100100, 0b0_00110_1010101000, 0b0_00110_1010101100, 0b0_00110_1010110000, 0b0_00110_1010110100, 0b0_00110_1010111000, 0b0_00110_1010111100,
0b0_00110_1011000000, 0b0_00110_1011000100, 0b0_00110_1011001000, 0b0_00110_1011001100, 0b0_00110_1011010000, 0b0_00110_1011010100, 0b0_00110_1011011000, 0b0_00110_1011011100, 0b0_00110_1011100000, 0b0_00110_1011100100, 0b0_00110_1011101000, 0b0_00110_1011101100, 0b0_00110_1011110000, 0b0_00110_1011110100, 0b0_00110_1011111000, 0b0_00110_1011111100,
0b0_00110_1100000000, 0b0_00110_1100000100, 0b0_00110_1100001000, 0b0_00110_1100001100, 0b0_00110_1100010000, 0b0_00110_1100010100, 0b0_00110_1100011000, 0b0_00110_1100011100, 0b0_00110_1100100000, 0b0_00110_1100100100, 0b0_00110_1100101000, 0b0_00110_1100101100, 0b0_00110_1100110000, 0b0_00110_1100110100, 0b0_00110_1100111000, 0b0_00110_1100111100,
0b0_00110_1101000000, 0b0_00110_1101000100, 0b0_00110_1101001000, 0b0_00110_1101001100, 0b0_00110_1101010000, 0b0_00110_1101010100, 0b0_00110_1101011000, 0b0_00110_1101011100, 0b0_00110_1101100000, 0b0_00110_1101100100, 0b0_00110_1101101000, 0b0_00110_1101101100, 0b0_00110_1101110000, 0b0_00110_1101110100, 0b0_00110_1101111000, 0b0_00110_1101111100,
0b0_00110_1110000000, 0b0_00110_1110000100, 0b0_00110_1110001000, 0b0_00110_1110001100, 0b0_00110_1110010000, 0b0_00110_1110010100, 0b0_00110_1110011000, 0b0_00110_1110011100, 0b0_00110_1110100000, 0b0_00110_1110100100, 0b0_00110_1110101000, 0b0_00110_1110101100, 0b0_00110_1110110000, 0b0_00110_1110110100, 0b0_00110_1110111000, 0b0_00110_1110111100,
0b0_00110_1111000000, 0b0_00110_1111000100, 0b0_00110_1111001000, 0b0_00110_1111001100, 0b0_00110_1111010000, 0b0_00110_1111010100, 0b0_00110_1111011000, 0b0_00110_1111011100, 0b0_00110_1111100000, 0b0_00110_1111100100, 0b0_00110_1111101000, 0b0_00110_1111101100, 0b0_00110_1111110000, 0b0_00110_1111110100, 0b0_00110_1111111000, 0b0_00110_1111111100,
0b0_00111_0000000000, 0b0_00111_0000000100, 0b0_00111_0000001000, 0b0_00111_0000001100, 0b0_00111_0000010000, 0b0_00111_0000010100, 0b0_00111_0000011000, 0b0_00111_0000011100, 0b0_00111_0000100000, 0b0_00111_0000100100, 0b0_00111_0000101000, 0b0_00111_0000101100, 0b0_00111_0000110000, 0b0_00111_0000110100, 0b0_00111_0000111000, 0b0_00111_0000111100,
0b0_00111_0001000000, 0b0_00111_0001000100, 0b0_00111_0001001000, 0b0_00111_0001001100, 0b0_00111_0001010000, 0b0_00111_0001010100, 0b0_00111_0001011000, 0b0_00111_0001011100, 0b0_00111_0001100000, 0b0_00111_0001100100, 0b0_00111_0001101000, 0b0_00111_0001101100, 0b0_00111_0001110000, 0b0_00111_0001110100, 0b0_00111_0001111000, 0b0_00111_0001111100,
0b0_00111_0010000000, 0b0_00111_0010000100, 0b0_00111_0010001000, 0b0_00111_0010001100, 0b0_00111_0010010000, 0b0_00111_0010010100, 0b0_00111_0010011000, 0b0_00111_0010011100, 0b0_00111_0010100000, 0b0_00111_0010100100, 0b0_00111_0010101000, 0b0_00111_0010101100, 0b0_00111_0010110000, 0b0_00111_0010110100, 0b0_00111_0010111000, 0b0_00111_0010111100,
0b0_00111_0011000000, 0b0_00111_0011000100, 0b0_00111_0011001000, 0b0_00111_0011001100, 0b0_00111_0011010000, 0b0_00111_0011010100, 0b0_00111_0011011000, 0b0_00111_0011011100, 0b0_00111_0011100000, 0b0_00111_0011100100, 0b0_00111_0011101000, 0b0_00111_0011101100, 0b0_00111_0011110000, 0b0_00111_0011110100, 0b0_00111_0011111000, 0b0_00111_0011111100,
0b0_00111_0100000000, 0b0_00111_0100000100, 0b0_00111_0100001000, 0b0_00111_0100001100, 0b0_00111_0100010000, 0b0_00111_0100010100, 0b0_00111_0100011000, 0b0_00111_0100011100, 0b0_00111_0100100000, 0b0_00111_0100100100, 0b0_00111_0100101000, 0b0_00111_0100101100, 0b0_00111_0100110000, 0b0_00111_0100110100, 0b0_00111_0100111000, 0b0_00111_0100111100,
0b0_00111_0101000000, 0b0_00111_0101000100, 0b0_00111_0101001000, 0b0_00111_0101001100, 0b0_00111_0101010000, 0b0_00111_0101010100, 0b0_00111_0101011000, 0b0_00111_0101011100, 0b0_00111_0101100000, 0b0_00111_0101100100, 0b0_00111_0101101000, 0b0_00111_0101101100, 0b0_00111_0101110000, 0b0_00111_0101110100, 0b0_00111_0101111000, 0b0_00111_0101111100,
0b0_00111_0110000000, 0b0_00111_0110000100, 0b0_00111_0110001000, 0b0_00111_0110001100, 0b0_00111_0110010000, 0b0_00111_0110010100, 0b0_00111_0110011000, 0b0_00111_0110011100, 0b0_00111_0110100000, 0b0_00111_0110100100, 0b0_00111_0110101000, 0b0_00111_0110101100, 0b0_00111_0110110000, 0b0_00111_0110110100, 0b0_00111_0110111000, 0b0_00111_0110111100,
0b0_00111_0111000000, 0b0_00111_0111000100, 0b0_00111_0111001000, 0b0_00111_0111001100, 0b0_00111_0111010000, 0b0_00111_0111010100, 0b0_00111_0111011000, 0b0_00111_0111011100, 0b0_00111_0111100000, 0b0_00111_0111100100, 0b0_00111_0111101000, 0b0_00111_0111101100, 0b0_00111_0111110000, 0b0_00111_0111110100, 0b0_00111_0111111000, 0b0_00111_0111111100,
0b0_00111_1000000000, 0b0_00111_1000000100, 0b0_00111_1000001000, 0b0_00111_1000001100, 0b0_00111_1000010000, 0b0_00111_1000010100, 0b0_00111_1000011000, 0b0_00111_1000011100, 0b0_00111_1000100000, 0b0_00111_1000100100, 0b0_00111_1000101000, 0b0_00111_1000101100, 0b0_00111_1000110000, 0b0_00111_1000110100, 0b0_00111_1000111000, 0b0_00111_1000111100,
0b0_00111_1001000000, 0b0_00111_1001000100, 0b0_00111_1001001000, 0b0_00111_1001001100, 0b0_00111_1001010000, 0b0_00111_1001010100, 0b0_00111_1001011000, 0b0_00111_1001011100, 0b0_00111_1001100000, 0b0_00111_1001100100, 0b0_00111_1001101000, 0b0_00111_1001101100, 0b0_00111_1001110000, 0b0_00111_1001110100, 0b0_00111_1001111000, 0b0_00111_1001111100,
0b0_00111_1010000000, 0b0_00111_1010000100, 0b0_00111_1010001000, 0b0_00111_1010001100, 0b0_00111_1010010000, 0b0_00111_1010010100, 0b0_00111_1010011000, 0b0_00111_1010011100, 0b0_00111_1010100000, 0b0_00111_1010100100, 0b0_00111_1010101000, 0b0_00111_1010101100, 0b0_00111_1010110000, 0b0_00111_1010110100, 0b0_00111_1010111000, 0b0_00111_1010111100,
0b0_00111_1011000000, 0b0_00111_1011000100, 0b0_00111_1011001000, 0b0_00111_1011001100, 0b0_00111_1011010000, 0b0_00111_1011010100, 0b0_00111_1011011000, 0b0_00111_1011011100, 0b0_00111_1011100000, 0b0_00111_1011100100, 0b0_00111_1011101000, 0b0_00111_1011101100, 0b0_00111_1011110000, 0b0_00111_1011110100, 0b0_00111_1011111000, 0b0_00111_1011111100,
0b0_00111_1100000000, 0b0_00111_1100000100, 0b0_00111_1100001000, 0b0_00111_1100001100, 0b0_00111_1100010000, 0b0_00111_1100010100, 0b0_00111_1100011000, 0b0_00111_1100011100, 0b0_00111_1100100000, 0b0_00111_1100100100, 0b0_00111_1100101000, 0b0_00111_1100101100, 0b0_00111_1100110000, 0b0_00111_1100110100, 0b0_00111_1100111000, 0b0_00111_1100111100,
0b0_00111_1101000000, 0b0_00111_1101000100, 0b0_00111_1101001000, 0b0_00111_1101001100, 0b0_00111_1101010000, 0b0_00111_1101010100, 0b0_00111_1101011000, 0b0_00111_1101011100, 0b0_00111_1101100000, 0b0_00111_1101100100, 0b0_00111_1101101000, 0b0_00111_1101101100, 0b0_00111_1101110000, 0b0_00111_1101110100, 0b0_00111_1101111000, 0b0_00111_1101111100,
0b0_00111_1110000000, 0b0_00111_1110000100, 0b0_00111_1110001000, 0b0_00111_1110001100, 0b0_00111_1110010000, 0b0_00111_1110010100, 0b0_00111_1110011000, 0b0_00111_1110011100, 0b0_00111_1110100000, 0b0_00111_1110100100, 0b0_00111_1110101000, 0b0_00111_1110101100, 0b0_00111_1110110000, 0b0_00111_1110110100, 0b0_00111_1110111000, 0b0_00111_1110111100,
0b0_00111_1111000000, 0b0_00111_1111000100, 0b0_00111_1111001000, 0b0_00111_1111001100, 0b0_00111_1111010000, 0b0_00111_1111010100, 0b0_00111_1111011000, 0b0_00111_1111011100, 0b0_00111_1111100000, 0b0_00111_1111100100, 0b0_00111_1111101000, 0b0_00111_1111101100, 0b0_00111_1111110000, 0b0_00111_1111110100, 0b0_00111_1111111000, 0b0_00111_1111111100,
0b0_01000_0000000000, 0b0_01000_0000000100, 0b0_01000_0000001000, 0b0_01000_0000001100, 0b0_01000_0000010000, 0b0_01000_0000010100, 0b0_01000_0000011000, 0b0_01000_0000011100, 0b0_01000_0000100000, 0b0_01000_0000100100, 0b0_01000_0000101000, 0b0_01000_0000101100, 0b0_01000_0000110000, 0b0_01000_0000110100, 0b0_01000_0000111000, 0b0_01000_0000111100,
0b0_01000_0001000000, 0b0_01000_0001000100, 0b0_01000_0001001000, 0b0_01000_0001001100, 0b0_01000_0001010000, 0b0_01000_0001010100, 0b0_01000_0001011000, 0b0_01000_0001011100, 0b0_01000_0001100000, 0b0_01000_0001100100, 0b0_01000_0001101000, 0b0_01000_0001101100, 0b0_01000_0001110000, 0b0_01000_0001110100, 0b0_01000_0001111000, 0b0_01000_0001111100,
0b0_01000_0010000000, 0b0_01000_0010000100, 0b0_01000_0010001000, 0b0_01000_0010001100, 0b0_01000_0010010000, 0b0_01000_0010010100, 0b0_01000_0010011000, 0b0_01000_0010011100, 0b0_01000_0010100000, 0b0_01000_0010100100, 0b0_01000_0010101000, 0b0_01000_0010101100, 0b0_01000_0010110000, 0b0_01000_0010110100, 0b0_01000_0010111000, 0b0_01000_0010111100,
0b0_01000_0011000000, 0b0_01000_0011000100, 0b0_01000_0011001000, 0b0_01000_0011001100, 0b0_01000_0011010000, 0b0_01000_0011010100, 0b0_01000_0011011000, 0b0_01000_0011011100, 0b0_01000_0011100000, 0b0_01000_0011100100, 0b0_01000_0011101000, 0b0_01000_0011101100, 0b0_01000_0011110000, 0b0_01000_0011110100, 0b0_01000_0011111000, 0b0_01000_0011111100,
0b0_01000_0100000000, 0b0_01000_0100000100, 0b0_01000_0100001000, 0b0_01000_0100001100, 0b0_01000_0100010000, 0b0_01000_0100010100, 0b0_01000_0100011000, 0b0_01000_0100011100, 0b0_01000_0100100000, 0b0_01000_0100100100, 0b0_01000_0100101000, 0b0_01000_0100101100, 0b0_01000_0100110000, 0b0_01000_0100110100, 0b0_01000_0100111000, 0b0_01000_0100111100,
0b0_01000_0101000000, 0b0_01000_0101000100, 0b0_01000_0101001000, 0b0_01000_0101001100, 0b0_01000_0101010000, 0b0_01000_0101010100, 0b0_01000_0101011000, 0b0_01000_0101011100, 0b0_01000_0101100000, 0b0_01000_0101100100, 0b0_01000_0101101000, 0b0_01000_0101101100, 0b0_01000_0101110000, 0b0_01000_0101110100, 0b0_01000_0101111000, 0b0_01000_0101111100,
0b0_01000_0110000000, 0b0_01000_0110000100, 0b0_01000_0110001000, 0b0_01000_0110001100, 0b0_01000_0110010000, 0b0_01000_0110010100, 0b0_01000_0110011000, 0b0_01000_0110011100, 0b0_01000_0110100000, 0b0_01000_0110100100, 0b0_01000_0110101000, 0b0_01000_0110101100, 0b0_01000_0110110000, 0b0_01000_0110110100, 0b0_01000_0110111000, 0b0_01000_0110111100,
0b0_01000_0111000000, 0b0_01000_0111000100, 0b0_01000_0111001000, 0b0_01000_0111001100, 0b0_01000_0111010000, 0b0_01000_0111010100, 0b0_01000_0111011000, 0b0_01000_0111011100, 0b0_01000_0111100000, 0b0_01000_0111100100, 0b0_01000_0111101000, 0b0_01000_0111101100, 0b0_01000_0111110000, 0b0_01000_0111110100, 0b0_01000_0111111000, 0b0_01000_0111111100,
0b0_01000_1000000000, 0b0_01000_1000000100, 0b0_01000_1000001000, 0b0_01000_1000001100, 0b0_01000_1000010000, 0b0_01000_1000010100, 0b0_01000_1000011000, 0b0_01000_1000011100, 0b0_01000_1000100000, 0b0_01000_1000100100, 0b0_01000_1000101000, 0b0_01000_1000101100, 0b0_01000_1000110000, 0b0_01000_1000110100, 0b0_01000_1000111000, 0b0_01000_1000111100,
0b0_01000_1001000000, 0b0_01000_1001000100, 0b0_01000_1001001000, 0b0_01000_1001001100, 0b0_01000_1001010000, 0b0_01000_1001010100, 0b0_01000_1001011000, 0b0_01000_1001011100, 0b0_01000_1001100000, 0b0_01000_1001100100, 0b0_01000_1001101000, 0b0_01000_1001101100, 0b0_01000_1001110000, 0b0_01000_1001110100, 0b0_01000_1001111000, 0b0_01000_1001111100,
0b0_01000_1010000000, 0b0_01000_1010000100, 0b0_01000_1010001000, 0b0_01000_1010001100, 0b0_01000_1010010000, 0b0_01000_1010010100, 0b0_01000_1010011000, 0b0_01000_1010011100, 0b0_01000_1010100000, 0b0_01000_1010100100, 0b0_01000_1010101000, 0b0_01000_1010101100, 0b0_01000_1010110000, 0b0_01000_1010110100, 0b0_01000_1010111000, 0b0_01000_1010111100,
0b0_01000_1011000000, 0b0_01000_1011000100, 0b0_01000_1011001000, 0b0_01000_1011001100, 0b0_01000_1011010000, 0b0_01000_1011010100, 0b0_01000_1011011000, 0b0_01000_1011011100, 0b0_01000_1011100000, 0b0_01000_1011100100, 0b0_01000_1011101000, 0b0_01000_1011101100, 0b0_01000_1011110000, 0b0_01000_1011110100, 0b0_01000_1011111000, 0b0_01000_1011111100,
0b0_01000_1100000000, 0b0_01000_1100000100, 0b0_01000_1100001000, 0b0_01000_1100001100, 0b0_01000_1100010000, 0b0_01000_1100010100, 0b0_01000_1100011000, 0b0_01000_1100011100, 0b0_01000_1100100000, 0b0_01000_1100100100, 0b0_01000_1100101000, 0b0_01000_1100101100, 0b0_01000_1100110000, 0b0_01000_1100110100, 0b0_01000_1100111000, 0b0_01000_1100111100,
0b0_01000_1101000000, 0b0_01000_1101000100, 0b0_01000_1101001000, 0b0_01000_1101001100, 0b0_01000_1101010000, 0b0_01000_1101010100, 0b0_01000_1101011000, 0b0_01000_1101011100, 0b0_01000_1101100000, 0b0_01000_1101100100, 0b0_01000_1101101000, 0b0_01000_1101101100, 0b0_01000_1101110000, 0b0_01000_1101110100, 0b0_01000_1101111000, 0b0_01000_1101111100,
0b0_01000_1110000000, 0b0_01000_1110000100, 0b0_01000_1110001000, 0b0_01000_1110001100, 0b0_01000_1110010000, 0b0_01000_1110010100, 0b0_01000_1110011000, 0b0_01000_1110011100, 0b0_01000_1110100000, 0b0_01000_1110100100, 0b0_01000_1110101000, 0b0_01000_1110101100, 0b0_01000_1110110000, 0b0_01000_1110110100, 0b0_01000_1110111000, 0b0_01000_1110111100,
0b0_01000_1111000000, 0b0_01000_1111000100, 0b0_01000_1111001000, 0b0_01000_1111001100, 0b0_01000_1111010000, 0b0_01000_1111010100, 0b0_01000_1111011000, 0b0_01000_1111011100, 0b0_01000_1111100000, 0b0_01000_1111100100, 0b0_01000_1111101000, 0b0_01000_1111101100, 0b0_01000_1111110000, 0b0_01000_1111110100, 0b0_01000_1111111000, 0b0_01000_1111111100,
0b0_01001_0000000000, 0b0_01001_0000000100, 0b0_01001_0000001000, 0b0_01001_0000001100, 0b0_01001_0000010000, 0b0_01001_0000010100, 0b0_01001_0000011000, 0b0_01001_0000011100, 0b0_01001_0000100000, 0b0_01001_0000100100, 0b0_01001_0000101000, 0b0_01001_0000101100, 0b0_01001_0000110000, 0b0_01001_0000110100, 0b0_01001_0000111000, 0b0_01001_0000111100,
0b0_01001_0001000000, 0b0_01001_0001000100, 0b0_01001_0001001000, 0b0_01001_0001001100, 0b0_01001_0001010000, 0b0_01001_0001010100, 0b0_01001_0001011000, 0b0_01001_0001011100, 0b0_01001_0001100000, 0b0_01001_0001100100, 0b0_01001_0001101000, 0b0_01001_0001101100, 0b0_01001_0001110000, 0b0_01001_0001110100, 0b0_01001_0001111000, 0b0_01001_0001111100,
0b0_01001_0010000000, 0b0_01001_0010000100, 0b0_01001_0010001000, 0b0_01001_0010001100, 0b0_01001_0010010000, 0b0_01001_0010010100, 0b0_01001_0010011000, 0b0_01001_0010011100, 0b0_01001_0010100000, 0b0_01001_0010100100, 0b0_01001_0010101000, 0b0_01001_0010101100, 0b0_01001_0010110000, 0b0_01001_0010110100, 0b0_01001_0010111000, 0b0_01001_0010111100,
0b0_01001_0011000000, 0b0_01001_0011000100, 0b0_01001_0011001000, 0b0_01001_0011001100, 0b0_01001_0011010000, 0b0_01001_0011010100, 0b0_01001_0011011000, 0b0_01001_0011011100, 0b0_01001_0011100000, 0b0_01001_0011100100, 0b0_01001_0011101000, 0b0_01001_0011101100, 0b0_01001_0011110000, 0b0_01001_0011110100, 0b0_01001_0011111000, 0b0_01001_0011111100,
0b0_01001_0100000000, 0b0_01001_0100000100, 0b0_01001_0100001000, 0b0_01001_0100001100, 0b0_01001_0100010000, 0b0_01001_0100010100, 0b0_01001_0100011000, 0b0_01001_0100011100, 0b0_01001_0100100000, 0b0_01001_0100100100, 0b0_01001_0100101000, 0b0_01001_0100101100, 0b0_01001_0100110000, 0b0_01001_0100110100, 0b0_01001_0100111000, 0b0_01001_0100111100,
0b0_01001_0101000000, 0b0_01001_0101000100, 0b0_01001_0101001000, 0b0_01001_0101001100, 0b0_01001_0101010000, 0b0_01001_0101010100, 0b0_01001_0101011000, 0b0_01001_0101011100, 0b0_01001_0101100000, 0b0_01001_0101100100, 0b0_01001_0101101000, 0b0_01001_0101101100, 0b0_01001_0101110000, 0b0_01001_0101110100, 0b0_01001_0101111000, 0b0_01001_0101111100,
0b0_01001_0110000000, 0b0_01001_0110000100, 0b0_01001_0110001000, 0b0_01001_0110001100, 0b0_01001_0110010000, 0b0_01001_0110010100, 0b0_01001_0110011000, 0b0_01001_0110011100, 0b0_01001_0110100000, 0b0_01001_0110100100, 0b0_01001_0110101000, 0b0_01001_0110101100, 0b0_01001_0110110000, 0b0_01001_0110110100, 0b0_01001_0110111000, 0b0_01001_0110111100,
0b0_01001_0111000000, 0b0_01001_0111000100, 0b0_01001_0111001000, 0b0_01001_0111001100, 0b0_01001_0111010000, 0b0_01001_0111010100, 0b0_01001_0111011000, 0b0_01001_0111011100, 0b0_01001_0111100000, 0b0_01001_0111100100, 0b0_01001_0111101000, 0b0_01001_0111101100, 0b0_01001_0111110000, 0b0_01001_0111110100, 0b0_01001_0111111000, 0b0_01001_0111111100,
0b0_01001_1000000000, 0b0_01001_1000000100, 0b0_01001_1000001000, 0b0_01001_1000001100, 0b0_01001_1000010000, 0b0_01001_1000010100, 0b0_01001_1000011000, 0b0_01001_1000011100, 0b0_01001_1000100000, 0b0_01001_1000100100, 0b0_01001_1000101000, 0b0_01001_1000101100, 0b0_01001_1000110000, 0b0_01001_1000110100, 0b0_01001_1000111000, 0b0_01001_1000111100,
0b0_01001_1001000000, 0b0_01001_1001000100, 0b0_01001_1001001000, 0b0_01001_1001001100, 0b0_01001_1001010000, 0b0_01001_1001010100, 0b0_01001_1001011000, 0b0_01001_1001011100, 0b0_01001_1001100000, 0b0_01001_1001100100, 0b0_01001_1001101000, 0b0_01001_1001101100, 0b0_01001_1001110000, 0b0_01001_1001110100, 0b0_01001_1001111000, 0b0_01001_1001111100,
0b0_01001_1010000000, 0b0_01001_1010000100, 0b0_01001_1010001000, 0b0_01001_1010001100, 0b0_01001_1010010000, 0b0_01001_1010010100, 0b0_01001_1010011000, 0b0_01001_1010011100, 0b0_01001_1010100000, 0b0_01001_1010100100, 0b0_01001_1010101000, 0b0_01001_1010101100, 0b0_01001_1010110000, 0b0_01001_1010110100, 0b0_01001_1010111000, 0b0_01001_1010111100,
0b0_01001_1011000000, 0b0_01001_1011000100, 0b0_01001_1011001000, 0b0_01001_1011001100, 0b0_01001_1011010000, 0b0_01001_1011010100, 0b0_01001_1011011000, 0b0_01001_1011011100, 0b0_01001_1011100000, 0b0_01001_1011100100, 0b0_01001_1011101000, 0b0_01001_1011101100, 0b0_01001_1011110000, 0b0_01001_1011110100, 0b0_01001_1011111000, 0b0_01001_1011111100,
0b0_01001_1100000000, 0b0_01001_1100000100, 0b0_01001_1100001000, 0b0_01001_1100001100, 0b0_01001_1100010000, 0b0_01001_1100010100, 0b0_01001_1100011000, 0b0_01001_1100011100, 0b0_01001_1100100000, 0b0_01001_1100100100, 0b0_01001_1100101000, 0b0_01001_1100101100, 0b0_01001_1100110000, 0b0_01001_1100110100, 0b0_01001_1100111000, 0b0_01001_1100111100,
0b0_01001_1101000000, 0b0_01001_1101000100, 0b0_01001_1101001000, 0b0_01001_1101001100, 0b0_01001_1101010000, 0b0_01001_1101010100, 0b0_01001_1101011000, 0b0_01001_1101011100, 0b0_01001_1101100000, 0b0_01001_1101100100, 0b0_01001_1101101000, 0b0_01001_1101101100, 0b0_01001_1101110000, 0b0_01001_1101110100, 0b0_01001_1101111000, 0b0_01001_1101111100,
0b0_01001_1110000000, 0b0_01001_1110000100, 0b0_01001_1110001000, 0b0_01001_1110001100, 0b0_01001_1110010000, 0b0_01001_1110010100, 0b0_01001_1110011000, 0b0_01001_1110011100, 0b0_01001_1110100000, 0b0_01001_1110100100, 0b0_01001_1110101000, 0b0_01001_1110101100, 0b0_01001_1110110000, 0b0_01001_1110110100, 0b0_01001_1110111000, 0b0_01001_1110111100,
0b0_01001_1111000000, 0b0_01001_1111000100, 0b0_01001_1111001000, 0b0_01001_1111001100, 0b0_01001_1111010000, 0b0_01001_1111010100, 0b0_01001_1111011000, 0b0_01001_1111011100, 0b0_01001_1111100000, 0b0_01001_1111100100, 0b0_01001_1111101000, 0b0_01001_1111101100, 0b0_01001_1111110000, 0b0_01001_1111110100, 0b0_01001_1111111000, 0b0_01001_1111111100,
0b0_01010_0000000000, 0b0_01010_0000000100, 0b0_01010_0000001000, 0b0_01010_0000001100, 0b0_01010_0000010000, 0b0_01010_0000010100, 0b0_01010_0000011000, 0b0_01010_0000011100, 0b0_01010_0000100000, 0b0_01010_0000100100, 0b0_01010_0000101000, 0b0_01010_0000101100, 0b0_01010_0000110000, 0b0_01010_0000110100, 0b0_01010_0000111000, 0b0_01010_0000111100,
0b0_01010_0001000000, 0b0_01010_0001000100, 0b0_01010_0001001000, 0b0_01010_0001001100, 0b0_01010_0001010000, 0b0_01010_0001010100, 0b0_01010_0001011000, 0b0_01010_0001011100, 0b0_01010_0001100000, 0b0_01010_0001100100, 0b0_01010_0001101000, 0b0_01010_0001101100, 0b0_01010_0001110000, 0b0_01010_0001110100, 0b0_01010_0001111000, 0b0_01010_0001111100,
0b0_01010_0010000000, 0b0_01010_0010000100, 0b0_01010_0010001000, 0b0_01010_0010001100, 0b0_01010_0010010000, 0b0_01010_0010010100, 0b0_01010_0010011000, 0b0_01010_0010011100, 0b0_01010_0010100000, 0b0_01010_0010100100, 0b0_01010_0010101000, 0b0_01010_0010101100, 0b0_01010_0010110000, 0b0_01010_0010110100, 0b0_01010_0010111000, 0b0_01010_0010111100,
0b0_01010_0011000000, 0b0_01010_0011000100, 0b0_01010_0011001000, 0b0_01010_0011001100, 0b0_01010_0011010000, 0b0_01010_0011010100, 0b0_01010_0011011000, 0b0_01010_0011011100, 0b0_01010_0011100000, 0b0_01010_0011100100, 0b0_01010_0011101000, 0b0_01010_0011101100, 0b0_01010_0011110000, 0b0_01010_0011110100, 0b0_01010_0011111000, 0b0_01010_0011111100,
0b0_01010_0100000000, 0b0_01010_0100000100, 0b0_01010_0100001000, 0b0_01010_0100001100, 0b0_01010_0100010000, 0b0_01010_0100010100, 0b0_01010_0100011000, 0b0_01010_0100011100, 0b0_01010_0100100000, 0b0_01010_0100100100, 0b0_01010_0100101000, 0b0_01010_0100101100, 0b0_01010_0100110000, 0b0_01010_0100110100, 0b0_01010_0100111000, 0b0_01010_0100111100,
0b0_01010_0101000000, 0b0_01010_0101000100, 0b0_01010_0101001000, 0b0_01010_0101001100, 0b0_01010_0101010000, 0b0_01010_0101010100, 0b0_01010_0101011000, 0b0_01010_0101011100, 0b0_01010_0101100000, 0b0_01010_0101100100, 0b0_01010_0101101000, 0b0_01010_0101101100, 0b0_01010_0101110000, 0b0_01010_0101110100, 0b0_01010_0101111000, 0b0_01010_0101111100,
0b0_01010_0110000000, 0b0_01010_0110000100, 0b0_01010_0110001000, 0b0_01010_0110001100, 0b0_01010_0110010000, 0b0_01010_0110010100, 0b0_01010_0110011000, 0b0_01010_0110011100, 0b0_01010_0110100000, 0b0_01010_0110100100, 0b0_01010_0110101000, 0b0_01010_0110101100, 0b0_01010_0110110000, 0b0_01010_0110110100, 0b0_01010_0110111000, 0b0_01010_0110111100,
0b0_01010_0111000000, 0b0_01010_0111000100, 0b0_01010_0111001000, 0b0_01010_0111001100, 0b0_01010_0111010000, 0b0_01010_0111010100, 0b0_01010_0111011000, 0b0_01010_0111011100, 0b0_01010_0111100000, 0b0_01010_0111100100, 0b0_01010_0111101000, 0b0_01010_0111101100, 0b0_01010_0111110000, 0b0_01010_0111110100, 0b0_01010_0111111000, 0b0_01010_0111111100,
0b0_01010_1000000000, 0b0_01010_1000000100, 0b0_01010_1000001000, 0b0_01010_1000001100, 0b0_01010_1000010000, 0b0_01010_1000010100, 0b0_01010_1000011000, 0b0_01010_1000011100, 0b0_01010_1000100000, 0b0_01010_1000100100, 0b0_01010_1000101000, 0b0_01010_1000101100, 0b0_01010_1000110000, 0b0_01010_1000110100, 0b0_01010_1000111000, 0b0_01010_1000111100,
0b0_01010_1001000000, 0b0_01010_1001000100, 0b0_01010_1001001000, 0b0_01010_1001001100, 0b0_01010_1001010000, 0b0_01010_1001010100, 0b0_01010_1001011000, 0b0_01010_1001011100, 0b0_01010_1001100000, 0b0_01010_1001100100, 0b0_01010_1001101000, 0b0_01010_1001101100, 0b0_01010_1001110000, 0b0_01010_1001110100, 0b0_01010_1001111000, 0b0_01010_1001111100,
0b0_01010_1010000000, 0b0_01010_1010000100, 0b0_01010_1010001000, 0b0_01010_1010001100, 0b0_01010_1010010000, 0b0_01010_1010010100, 0b0_01010_1010011000, 0b0_01010_1010011100, 0b0_01010_1010100000, 0b0_01010_1010100100, 0b0_01010_1010101000, 0b0_01010_1010101100, 0b0_01010_1010110000, 0b0_01010_1010110100, 0b0_01010_1010111000, 0b0_01010_1010111100,
0b0_01010_1011000000, 0b0_01010_1011000100, 0b0_01010_1011001000, 0b0_01010_1011001100, 0b0_01010_1011010000, 0b0_01010_1011010100, 0b0_01010_1011011000, 0b0_01010_1011011100, 0b0_01010_1011100000, 0b0_01010_1011100100, 0b0_01010_1011101000, 0b0_01010_1011101100, 0b0_01010_1011110000, 0b0_01010_1011110100, 0b0_01010_1011111000, 0b0_01010_1011111100,
0b0_01010_1100000000, 0b0_01010_1100000100, 0b0_01010_1100001000, 0b0_01010_1100001100, 0b0_01010_1100010000, 0b0_01010_1100010100, 0b0_01010_1100011000, 0b0_01010_1100011100, 0b0_01010_1100100000, 0b0_01010_1100100100, 0b0_01010_1100101000, 0b0_01010_1100101100, 0b0_01010_1100110000, 0b0_01010_1100110100, 0b0_01010_1100111000, 0b0_01010_1100111100,
0b0_01010_1101000000, 0b0_01010_1101000100, 0b0_01010_1101001000, 0b0_01010_1101001100, 0b0_01010_1101010000, 0b0_01010_1101010100, 0b0_01010_1101011000, 0b0_01010_1101011100, 0b0_01010_1101100000, 0b0_01010_1101100100, 0b0_01010_1101101000, 0b0_01010_1101101100, 0b0_01010_1101110000, 0b0_01010_1101110100, 0b0_01010_1101111000, 0b0_01010_1101111100,
0b0_01010_1110000000, 0b0_01010_1110000100, 0b0_01010_1110001000, 0b0_01010_1110001100, 0b0_01010_1110010000, 0b0_01010_1110010100, 0b0_01010_1110011000, 0b0_01010_1110011100, 0b0_01010_1110100000, 0b0_01010_1110100100, 0b0_01010_1110101000, 0b0_01010_1110101100, 0b0_01010_1110110000, 0b0_01010_1110110100, 0b0_01010_1110111000, 0b0_01010_1110111100,
0b0_01010_1111000000, 0b0_01010_1111000100, 0b0_01010_1111001000, 0b0_01010_1111001100, 0b0_01010_1111010000, 0b0_01010_1111010100, 0b0_01010_1111011000, 0b0_01010_1111011100, 0b0_01010_1111100000, 0b0_01010_1111100100, 0b0_01010_1111101000, 0b0_01010_1111101100, 0b0_01010_1111110000, 0b0_01010_1111110100, 0b0_01010_1111111000, 0b0_01010_1111111100,
], dtype=torch.int16)
# torch does not have torch.uint16 (x_x)
FP12_TO_FP16 = FP12_TO_FP16.view((2,-1))
FP12_TO_FP16[1,:].bitwise_or_(0x8000)
FP12_TO_FP16 = FP12_TO_FP16.view((-1,))
def fp12_to_fp16(exp: torch.Tensor, frac: torch.Tensor):
global FP12_TO_FP16, EXP_MASK
assert exp.dtype == torch.uint8
assert frac.dtype == torch.uint8
assert exp.ndim == 1
assert frac.ndim == 1
assert exp.size(0) * 2 == frac.size(0)
if FP12_TO_FP16.device != exp.device:
FP12_TO_FP16 = FP12_TO_FP16.to(exp.device)
if EXP_MASK.device != exp.device:
EXP_MASK = EXP_MASK.to(exp.device)
exp = exp.repeat_interleave(2).view((-1,2))
exp.bitwise_and_(EXP_MASK)
indices = exp.to(dtype=torch.int16)
indices[..., 0] <<= 4 # 1111_0000 => 1111_0000_0000
indices[..., 1] <<= 8 # 0000_1111 => 1111_0000_0000
indices = indices.view((-1,))
indices.add_(frac)
FP16 = torch.take(FP12_TO_FP16, indices.long())
return FP16.view(dtype=torch.float16)