{
"packages": [
"numpy",
"scipy",
"pillow",
"matplotlib"
]
}
# RUST+.py
# https://github.com/olijeffers0n/rustplus
import math
from math import radians, tan
import random
from typing import Union, Tuple, List, Any, Dict
import numpy as np
from scipy.spatial import ConvexHull
from PIL import Image, ImageDraw, ImageFont
from matplotlib import font_manager
LOOKUP_CONSTANTS = [51, 36, 143, 3, 60, 60, 144, 59, 79, 58, 157, 85, 119, 65, 134, 73, 52, 23, 90, 44, 29, 72, 122, 45, 12, 6, 136, 80, 25, 53, 8, 37, 134, 7, 76, 2, 2, 35, 43, 78, 134, 2, 98, 19, 90, 21, 125, 67, 12, 48, 43, 24, 143, 24, 83, 17, 53, 3, 82, 17, 49, 21, 4, 63, 101, 64, 151, 74, 75, 2, 62, 45, 100, 19, 86, 50, 97, 6, 138, 11, 152, 27, 132, 10, 104, 78, 8, 79, 111, 54, 72, 41, 7, 0, 102, 69, 99, 10, 145, 63, 53, 67, 13, 16, 92, 38, 51, 20, 12, 37, 41, 3, 91, 77, 83, 55, 79, 59, 139, 69, 108, 10, 115, 75, 108, 42, 0, 37, 21, 31, 82, 68, 104, 53, 145, 81, 80, 87, 128, 20, 34, 48, 123, 31, 80, 48, 83, 34, 27, 61, 146, 18, 136, 30, 65, 9, 14, 1, 150, 23, 11, 31, 129, 35, 65, 78, 47, 72, 67, 8, 41, 70, 28, 32, 54, 60, 94, 74, 155, 52, 155, 18, 71, 22, 76, 45, 112, 28, 73, 49, 124, 8, 81, 84, 45, 29, 82, 88, 38, 55, 140, 6, 11, 49, 14, 55, 144, 50, 75, 70, 10, 21, 109, 86, 48, 52, 137, 19, 74, 2, 18, 47, 51, 12, 62, 56, 77, 26, 0, 78, 8, 80, 143, 87, 92, 3, 136, 20, 128, 85, 45, 61, 102, 19, 5, 68, 153, 33, 56, 23, 35, 45, 73, 30, 29, 39, 57, 88, 17, 65, 48, 39, 124, 59, 105, 87, 148, 89, 45, 30, 57, 83, 13, 2, 105, 75, 150, 38, 143, 9, 122, 15, 29, 66, 29, 12, 87, 5, 21, 2, 106, 83, 16, 23, 50, 45, 56, 62, 142, 7, 56, 60, 136, 34, 65, 5, 70, 9, 31, 64, 2, 18, 102, 7, 159, 47, 7, 26, 67, 66, 150, 35, 2, 27, 89, 40, 81, 41, 115, 48, 155, 50, 81, 27, 133, 42, 131, 77, 142, 87, 157, 59, 129, 30, 90, 4, 39, 20, 138, 61, 150, 78, 107, 79, 115, 9, 1, 76, 45, 42, 143, 2, 24, 15, 24, 78, 119, 47, 110, 9, 12, 29, 140, 77, 31, 50, 43, 80, 127, 39, 139, 65, 79, 80, 151, 36, 34, 60, 77, 78, 110, 34, 97, 24, 132, 87, 53, 66, 27, 45, 96, 56, 56, 1, 9, 62, 12, 72, 128, 28, 108, 73, 70, 43, 88, 36, 51, 29, 119, 41, 115, 66, 17, 16, 62, 20, 110, 11, 136, 18, 5, 37, 26, 45, 16, 47, 117, 47, 38, 29, 131, 23, 13, 45, 131, 26, 112, 46, 42, 55, 147, 82, 71, 59, 145, 5, 117, 37, 92, 64, 83, 82, 102, 40, 145, 76, 120, 75, 65, 38, 74, 39, 121, 10, 105, 54, 54, 32, 133, 57, 42, 66, 59, 53, 143, 47, 16, 48, 88, 44, 46, 87, 17, 3, 65, 16, 111, 24, 4, 25, 120, 64, 68, 40, 94, 65, 74, 37, 117, 15, 23, 50, 82, 45, 148, 82, 110, 51, 49, 19, 92, 31, 3, 75, 158, 68, 62, 69, 47, 58, 159, 6, 103, 9, 157, 88, 89, 21, 76, 72, 150, 31, 10, 60, 15, 52, 93, 27, 149, 29, 3, 35, 19, 56, 74, 71, 45, 41, 120, 19, 147, 52, 35, 74, 120, 63, 26, 1, 153, 71, 85, 64, 5, 64, 4, 79, 35, 58, 152, 62, 112, 4, 38, 71, 108, 5, 93, 2, 59, 30, 111, 5, 87, 1, 149, 87, 47, 32, 156, 46, 115, 19, 127, 76, 46, 40, 109, 36, 117, 84, 20, 27, 8, 24, 101, 69, 22, 59, 60, 44, 111, 11, 18, 55, 141, 70, 104, 0, 86, 6, 146, 79, 159, 61, 67, 28, 37, 20, 50, 0, 90, 24, 31, 11, 26, 53, 98, 14, 97, 84, 99, 24, 52, 73, 89, 86, 124, 1, 19, 19, 120, 37, 37, 65, 49, 15, 81, 89, 143, 64, 75, 10, 55, 39, 117, 17, 88, 31, 130, 20, 139, 43, 106, 48, 71, 89, 126, 29, 81, 73, 23, 65, 33, 35, 58, 55, 36, 32, 93, 16, 80, 14, 157, 41, 76, 15, 17, 82, 133, 11, 2, 87, 24, 38, 140, 49, 92, 77, 66, 29, 101, 23, 152, 5, 121, 77, 85, 62, 76, 73, 46, 78, 57, 77, 61, 44, 156, 15, 84, 25, 87, 45, 66, 3, 69, 84, 92, 12, 96, 66, 155, 75, 98, 72, 28, 71, 106, 81, 100, 55, 98, 64, 65, 86, 133, 1, 28, 88, 68, 14, 116, 79, 36, 81, 129, 27, 69, 69, 141, 14, 39, 57, 72, 61, 21, 16, 112, 79, 151, 24, 133, 16, 115, 84, 19, 82, 110, 83, 108, 3, 22, 88, 140, 51, 63, 12, 23, 69, 35, 10, 90, 47, 135, 56, 120, 18, 147, 88, 104, 5, 149, 4, 16, 75, 131, 16, 109, 16, 33, 80, 21, 86, 146, 75, 128, 11, 92, 66, 12, 36, 60, 50, 106, 61, 29, 59, 18, 8, 75, 87, 148, 52, 41, 80, 36, 54, 11, 27, 158, 13, 68, 30, 96, 49, 148, 8, 70, 41, 22, 16, 74, 49, 132, 34, 16, 84, 158, 55, 93, 75, 37, 47, 117, 64, 42, 85, 35, 6, 0, 19, 104, 42, 156, 13, 88, 80, 69, 47, 61, 65, 107, 58, 25, 29, 61, 17, 137, 8, 34, 46, 74, 19, 6, 61, 38, 32, 74, 27, 47, 2, 142, 56, 26, 60, 23, 26, 68, 26, 60, 28, 130, 44, 115, 76, 139, 15, 136, 42, 119, 54, 56, 51, 120, 42, 71, 73, 123, 28, 91, 43, 124, 66, 51, 87, 141, 76, 19, 1, 19, 44, 134, 23, 102, 80, 61, 28, 73, 18, 68, 86, 150, 1, 136, 63, 74, 66, 60, 61, 92, 45, 141, 11, 122, 25, 94, 14, 69, 8, 12, 12, 58, 14, 72, 38, 98, 63, 99, 1, 15, 27, 83, 6, 122, 69, 30, 74, 58, 81, 8, 84, 36, 88, 30, 63, 159, 18, 82, 73, 40, 22, 37, 46, 112, 37, 68, 2, 157, 11, 54, 28, 149, 73, 113, 61, 18, 43, 48, 9, 104, 61, 17, 7, 73, 41, 95, 50, 69, 75, 96, 83, 103, 6, 87, 7, 18, 84, 54, 64, 3, 22, 2, 40, 50, 22, 57, 4, 111, 80, 107, 84, 22, 34, 21, 9, 45, 67, 2, 70, 84, 43, 50, 52, 49, 74, 138, 79, 103, 34, 53, 5, 41, 25, 43, 87, 157, 1, 56, 64, 57, 28, 50, 51, 113, 17, 44, 14, 21, 44, 80, 42, 35, 14, 147, 43, 3, 24, 136, 49, 35, 67, 148, 74, 159, 37, 144, 16, 32, 39, 16, 66, 82, 77, 30, 36, 2, 47, 136, 66, 61, 48, 115, 29, 109, 34, 114, 31, 19, 65, 68, 73, 132, 5, 92, 14, 17, 38, 104, 72, 23, 10, 32, 45, 11, 4, 35, 4, 159, 0, 109, 82, 2, 65, 23, 81, 94, 51, 57, 75, 59, 49, 16, 88, 35, 49, 65, 32, 124, 35, 51, 2, 2, 4, 49, 13, 111, 7, 94, 24, 68, 12, 38, 20, 13, 33, 130, 80, 130, 5, 117, 0, 89, 33, 121, 42, 9, 78, 150, 57, 79, 37, 11, 73, 0, 64, 65, 75, 140, 72, 17, 89, 128, 41, 15, 83, 75, 81, 157, 13, 118, 89, 8, 18, 102, 53, 51, 23, 22, 14, 99, 30, 81, 52, 75, 6, 15, 25, 139, 29, 70, 23, 33, 41, 128, 47, 16, 78, 54, 55, 150, 48, 21, 74, 9, 29, 6, 33, 84, 7, 17, 78, 35, 61, 99, 77, 32, 5, 83, 37, 108, 26, 140, 3, 153, 59, 61, 5, 1, 56, 135, 26, 101, 71, 145, 35, 2, 34, 122, 14, 91, 35, 11, 85, 77, 84, 71, 45, 76, 25, 41, 33, 134, 29, 139, 22, 29, 47, 46, 37, 150, 43, 128, 34, 34, 28, 53, 75, 4, 34, 113, 41, 90, 53, 153, 61, 49, 79, 90, 8, 62, 52, 98, 47, 38, 52, 17, 5, 136, 24, 100, 81, 75, 50, 13, 42, 47, 56, 6, 85, 136, 87, 10, 63, 54, 58, 104, 77, 104, 84, 153, 42, 125, 5, 123, 69, 100, 86, 77, 2, 48, 24, 24, 72, 96, 0, 73, 56, 48, 81, 128, 57, 52, 26, 76, 66, 141, 38, 89, 81, 46, 0, 42, 60, 152, 7, 21, 26, 153, 50, 156, 44, 16, 59, 54, 43, 16, 11, 10, 33, 24, 58, 22, 24, 37, 51, 142, 43, 139, 54, 105, 12, 37, 81, 98, 66, 78, 87, 83, 42, 7, 37, 78, 56, 62, 63, 158, 19, 1, 20, 133, 60, 29, 0, 65, 69, 157, 60, 62, 5, 138, 40, 29, 86, 138, 65, 74, 48, 127, 84, 41, 45, 23, 47, 153, 3, 35, 57, 33, 44, 100, 40, 20, 29, 129, 79, 119, 86, 34, 69, 6, 60, 19, 63, 149, 80, 68, 11, 66, 28, 13, 49, 99, 37, 103, 75, 84, 74, 95, 60, 19, 28, 77, 7, 74, 16, 28, 24, 19, 47, 64, 28, 12, 68, 79, 21, 18, 83, 62, 81, 142, 41, 39, 48, 78, 23, 126, 83, 14, 9, 43, 34, 79, 76, 16, 49, 87, 46, 0, 75, 125, 14, 96, 74, 58, 0, 55, 16, 125, 26, 45, 20, 62, 44, 4, 49, 28, 67, 97, 14, 29, 55, 21, 64, 20, 40, 96, 85, 148, 65, 101, 77, 126, 1, 116, 28, 40, 29, 149, 11, 99, 11, 46, 80, 78, 26, 93, 49, 19, 77, 84, 80, 12, 8, 42, 47, 127, 19, 147, 80, 39, 1, 62, 26, 95, 19, 45, 8, 32, 10, 93, 7, 148, 70, 108, 44, 89, 12, 53, 57, 76, 18, 77, 25, 101, 63, 5, 18, 38, 69, 118, 38, 145, 44, 4, 42, 57, 63, 94, 47, 92, 5, 59, 55, 46, 61, 92, 23, 134, 79, 70, 22, 124, 56, 14, 64, 96, 64, 110, 41, 147, 51, 25, 2, 117, 27, 116, 76, 123, 18, 37, 25, 59, 36, 143, 6, 138, 55, 137, 43, 70, 89, 135, 3, 53, 12, 105, 53, 146, 84, 108, 48, 65, 20, 27, 5, 158, 29, 65, 39, 94, 28, 33, 77, 123, 17, 63, 33, 36, 66, 1, 78, 0, 59, 144, 67, 132, 41, 19, 22, 95, 47, 49, 66, 105, 32, 28, 83, 152, 66, 37, 33, 110, 35, 122, 85, 65, 67, 128, 43, 90, 76, 84, 57, 23, 76, 97, 18, 33, 3, 95, 54, 155, 26, 71, 65, 90, 26, 106, 6, 141, 45, 149, 47, 91, 28, 59, 61, 99, 59, 0, 18, 92, 89, 108, 34, 62, 3, 62, 10, 92, 36, 78, 59, 106, 29, 74, 57, 112, 15, 129, 81, 141, 52, 96, 9, 30, 59, 151, 11, 81, 13, 105, 0, 17, 37, 145, 31, 141, 44, 125, 18, 62, 87, 125, 68, 99, 9, 145, 38, 45, 69, 100, 16, 60, 68, 26, 10, 2, 77, 133, 84, 22, 58, 76, 27, 122, 43, 132, 25, 32, 52, 41, 13, 33, 19, 35, 66, 116, 14, 41, 59, 112, 85, 26, 0, 130, 55, 8, 78, 141, 53, 122, 30, 153, 35, 96, 48, 15, 19, 134, 6, 16, 65, 4, 6, 133, 34, 31, 46, 0, 34, 55, 13, 65, 70, 67, 23, 45, 64, 68, 67, 76, 36, 17, 23, 40, 38, 156, 79, 30, 27, 107, 59, 28, 57, 89, 20, 147, 25, 142, 9, 128, 15, 43, 50, 70, 71, 49, 41, 47, 84, 18, 79, 84, 9, 21, 78, 47, 65, 6, 68, 79, 69, 68, 8, 70, 61, 120, 55, 3, 23, 72, 55, 60, 57, 72, 68, 37, 40, 90, 33, 129, 37, 57, 41, 80, 13, 97, 34, 47, 71, 52, 15, 153, 79, 131, 58, 65, 45, 20, 67, 70, 78, 150, 5, 154, 8, 45, 49, 136, 62, 148, 66, 103, 36, 125, 70, 6, 23, 111, 16, 151, 37, 69, 87, 10, 79, 103, 38, 156, 9, 49, 67, 95, 24, 92, 76, 72, 10, 3, 79, 48, 69, 59, 10, 14, 0, 147, 83, 134, 20, 13, 74, 30, 71, 127, 58, 11, 14, 110, 3, 5, 53, 114, 83, 129, 68, 56, 21, 83, 18, 67, 83, 76, 4, 146, 55, 127, 0, 76, 74, 141, 83, 142, 13, 64, 66, 61, 63, 55, 57, 130, 43, 149, 22, 57, 47, 104, 63, 37, 38, 77, 37, 43, 5, 30, 73, 50, 34, 18, 59, 43, 15, 44, 4, 110, 40, 43, 49, 101, 8, 111, 81, 42, 43, 124, 43, 138, 70, 74, 78, 4, 36, 43, 3, 50, 70, 53, 31, 28, 22, 151, 35, 61, 25, 113, 57, 37, 29, 64, 86, 94, 38, 65, 47, 132, 17, 54, 18, 78, 38, 31, 31, 22, 40, 156, 0, 65, 29, 110, 5, 38, 40, 107, 2, 152, 87, 11, 25, 80, 81, 50, 66, 18, 71, 86, 19, 134, 53, 79, 75, 82, 55, 24, 75, 112, 61, 102, 72, 150, 0, 148, 57, 8, 14, 36, 52, 34, 41, 126, 56, 40, 26, 17, 0, 42, 82, 60, 30, 26, 62, 16, 42, 95, 12, 18, 61, 145, 82, 89, 17, 80, 22, 30, 20, 142, 40, 35, 72, 114, 21, 151, 50, 139, 87, 106, 5, 148, 49, 140, 35, 50, 50, 78, 45, 21, 68, 14, 7, 156, 57, 39, 68, 75, 30, 94, 21, 108, 41, 52, 40, 50, 65, 100, 6, 131, 13, 3, 20, 76, 9, 156, 25, 138, 26, 138, 18, 52, 32, 10, 44, 152, 54, 130, 33, 105, 74, 1, 57, 93, 9, 107, 15, 120, 86, 80, 8, 78, 9, 100, 23, 37, 85, 102, 2, 116, 51, 96, 75, 101, 18, 97, 54, 78, 76, 143, 88, 38, 44, 109, 39, 98, 10, 100, 69, 12, 84, 92, 22, 102, 62, 7, 52, 159, 19, 124, 37, 112, 86, 65, 2, 130, 79, 3, 39, 135, 87, 101, 67, 106, 52, 113, 0, 140, 50, 49, 3, 111, 87, 98, 58, 102, 57, 48, 16, 150, 80, 9, 53, 127, 68, 125, 55, 87, 64, 91, 66, 43, 7, 81, 47, 79, 87, 146, 58, 87, 53, 28, 26, 13, 6, 96, 69, 110, 18, 4, 45, 52, 19, 15, 28, 123, 4, 92, 11, 12, 4, 34, 14, 137, 35, 145, 55, 8, 17, 78, 21, 59, 67, 42, 4, 26, 86, 136, 33, 89, 1, 47, 41, 107, 4, 149, 21, 2, 74, 77, 59, 146, 78, 129, 58, 76, 53, 8, 44, 48, 86, 114, 13, 2, 55, 29, 51, 100, 45, 148, 56, 24, 56, 106, 26, 14, 54, 94, 36, 35, 2, 110, 70, 58, 78, 19, 37, 109, 17, 30, 39, 88, 15, 144, 40, 36, 51, 49, 11, 58, 80, 149, 35, 19, 54, 99, 83, 108, 45, 151, 49, 6, 6, 34, 70, 72, 12, 87, 43, 66, 60, 132, 4, 39, 81, 145, 33, 158, 16, 107, 13, 104, 81, 13, 70, 140, 17, 151, 21, 46, 59, 157, 12, 102, 64, 110, 28, 82, 49, 4, 66, 73, 10, 22, 74, 36, 14, 51, 47, 98, 53, 54, 41, 67, 17, 126, 55, 39, 47, 7, 58, 134, 25, 140, 2, 12, 20, 159, 36, 111, 68, 36, 43, 59, 62, 98, 75, 53, 45, 80, 79, 156, 62, 126, 25, 158, 71, 94, 61, 142, 30, 33, 42, 56, 63, 0, 45, 67, 53, 106, 31, 32, 20, 24, 79, 23, 67, 152, 85, 145, 16, 138, 42, 48, 27, 131, 60, 4, 62, 110, 88, 98, 80, 56, 7, 76, 67, 77, 82, 98, 65, 43, 86, 127, 13, 154, 35, 30, 23, 48, 79, 75, 7, 68, 52, 79, 67, 152, 69, 116, 20, 140, 18, 25, 51, 95, 83, 86, 18, 86, 86, 29, 81, 63, 32, 117, 36, 7, 47, 118, 54, 110, 4, 38, 6, 126, 43, 77, 0, 114, 49, 144, 51, 86, 14, 59, 82, 131, 41, 54, 82, 36, 75, 31, 39, 126, 34, 99, 50, 145, 46, 131, 4, 13, 35, 53, 77, 35, 16, 72, 40, 22, 61, 115, 31, 60, 65, 103, 69, 121, 79, 145, 4, 44, 3, 92, 21, 157, 78, 105, 81, 128, 87, 77, 19, 70, 27, 122, 62, 146, 68, 61, 12, 156, 11, 62, 34, 93, 13, 129, 10, 27, 1, 67, 46, 123, 73, 32, 22, 78, 35, 72, 32, 80, 55, 110, 16, 64, 60, 53, 76, 157, 0, 93, 86, 1, 77, 85, 25, 50, 64, 142, 49, 141, 37, 106, 9, 158, 49, 78, 16, 90, 42, 63, 59, 121, 70, 13, 48, 42, 63, 85, 68, 32, 77, 134, 37, 122, 19, 137, 1, 131, 86, 86, 5, 116, 0, 51, 73, 142, 63, 6, 32, 151, 39, 28, 75, 11, 87, 62, 13, 19, 8, 78, 54, 108, 51, 139, 34, 84, 35, 129, 20, 70, 64, 39, 11, 10, 36, 38, 35, 4, 16, 37, 55, 45, 10, 47, 21, 4, 30, 92, 46, 153, 15, 124, 7, 89, 41, 84, 2, 157, 43, 66, 36, 137, 10, 11, 26, 33, 16, 119, 5, 128, 42, 145, 2, 120, 12, 117, 7, 98, 29, 29, 61, 116, 21, 19, 23, 24, 55, 125, 25, 15, 39, 149, 36, 89, 60, 42, 27, 63, 58, 82, 2, 153, 16, 99, 35, 34, 26, 107, 33, 150, 36, 17, 86, 40, 12, 33, 69, 61, 40, 5, 35, 61, 61, 132, 42, 52, 79, 137, 17, 126, 68, 74, 80, 66, 68, 78, 10, 71, 64, 79, 52, 74, 54, 33, 11, 125, 83, 35, 73, 124, 76, 0, 69, 29, 79, 119, 89, 92, 65, 14, 63, 40, 77, 73, 45, 112, 32, 121, 60, 9, 36, 86, 11, 21, 67, 122, 5, 65, 24, 27, 75, 92, 58, 15, 10, 6, 70, 102, 81, 39, 9, 126, 85, 133, 0, 47, 26, 19, 20, 24, 54, 97, 62, 2, 21, 40, 51, 139, 51, 1, 43, 22, 46, 2, 68, 105, 5, 119, 83, 109, 6, 19, 51, 70, 17, 33, 0, 80, 6, 111, 9, 93, 14, 79, 81, 86, 78, 64, 89, 118, 34, 70, 38, 76, 52, 46, 24, 125, 24, 2, 9, 62, 66, 73, 25, 136, 21, 88, 78, 84, 39, 150, 59, 88, 18, 38, 5, 4, 86, 111, 13, 21, 63, 45, 58, 128, 59, 16, 87, 59, 42, 96, 45, 113, 9, 155, 79, 11, 17, 115, 72, 121, 47, 112, 31, 94, 5, 155, 73, 44, 34, 16, 69, 148, 50, 5, 89, 75, 3, 53, 1, 153, 53, 146, 83, 14, 72, 15, 43, 24, 50, 150, 15, 3, 54, 149, 5, 67, 88, 114, 56, 66, 22, 144, 55, 1, 26, 14, 52, 94, 19, 72, 24, 148, 40, 72, 8, 21, 34, 134, 31, 111, 19, 118, 72, 4, 43, 58, 15, 72, 47, 109, 31, 24, 63, 14, 79, 102, 44, 101, 19, 51, 56, 121, 85, 24, 6, 33, 61, 98, 73, 128, 31, 43, 36, 77, 72, 131, 40, 137, 77, 44, 83, 122, 86, 16, 25, 107, 85, 16, 63, 97, 85, 46, 46, 148, 37, 38, 46, 155, 4, 68, 46, 49, 73, 37, 68, 19, 62, 157, 16, 144, 87, 81, 53, 64, 52, 52, 49, 87, 68, 5, 6, 86, 15, 96, 31, 151, 54, 140, 69, 135, 36, 91, 3, 130, 84, 8, 6, 54, 88, 90, 30, 153, 48, 122, 22, 60, 33, 156, 36, 46, 22, 52, 31, 83, 8, 141, 24, 24, 39, 0, 8, 139, 57, 118, 43, 135, 54, 26, 9, 76, 38, 107, 62, 59, 51, 4, 44, 87, 40, 97, 0, 90, 56, 99, 15, 73, 14, 29, 18, 135, 27, 108, 86, 80, 5, 71, 77, 131, 76, 136, 25, 10, 53, 10, 87, 100, 53, 126, 24, 58, 51, 143, 75, 29, 9, 8, 49, 37, 58, 85, 89, 80, 49, 142, 62, 57, 66, 155, 23, 56, 75, 108, 46, 75, 38, 153, 76, 143, 38, 150, 84, 137, 56, 148, 2, 42, 13, 66, 70, 34, 38, 67, 57, 155, 54, 39, 25, 86, 28, 30, 32, 114, 58, 64, 9, 128, 33, 132, 68, 0, 25, 29, 54, 159, 4, 83, 3, 131, 38, 12, 47, 83, 87, 7, 63, 102, 41, 114, 53, 153, 23, 11, 86, 74, 58, 23, 78, 132, 47, 0, 38, 88, 75, 75, 9, 146, 21, 77, 9, 58, 29, 135, 19, 101, 39, 103, 84, 158, 12, 117, 35, 72, 7, 81, 2, 13, 55, 56, 17, 147, 27, 159, 76, 94, 52, 36, 84, 134, 3, 32, 59, 98, 89, 153, 63, 154, 2, 25, 11, 90, 49, 100, 48, 41, 78, 56, 27, 99, 75, 0, 73, 18, 15, 71, 63, 66, 71, 97, 47, 29, 19, 69, 30, 138, 2, 34, 45, 18, 33, 7, 73, 104, 50, 62, 2, 85, 35, 7, 21, 32, 27, 70, 21, 0, 55, 144, 2, 93, 65, 14, 76, 87, 75, 4, 35, 137, 37, 105, 24, 55, 89, 43, 11, 39, 29, 82, 52, 80, 35, 52, 54, 56, 86, 33, 66, 25, 3, 116, 81, 59, 19, 145, 61, 14, 83, 125, 71, 34, 42, 65, 10, 149, 78, 131, 62, 81, 51, 51, 66, 60, 18, 66, 14, 58, 35, 41, 81, 140, 5, 151, 40, 32, 63, 84, 85, 144, 57, 93, 40, 116, 57, 51, 28, 56, 48, 102, 45, 151, 16, 135, 84, 9, 27, 155, 2, 0, 71, 28, 27, 27, 71, 126, 28, 130, 64, 10, 23, 34, 76, 128, 88, 95, 16, 87, 29, 82, 20, 34, 77, 43, 48, 140, 25, 86, 31, 39, 63, 139, 84, 49, 52, 126, 2, 96, 72, 4, 85, 132, 63, 141, 5, 142, 37, 82, 11, 77, 15, 40, 3, 58, 86, 133, 12, 16, 35, 55, 18, 76, 23, 130, 39, 99, 76, 153, 18, 89, 74, 128, 3, 11, 7, 58, 1, 26, 72, 15, 6, 51, 52, 20, 73, 37, 2, 115, 68, 78, 14, 70, 3, 130, 62, 81, 82, 147, 24, 80, 32, 116, 22, 146, 9, 50, 49, 44, 47, 124, 32, 71, 16, 57, 65, 103, 77, 77, 39, 155, 83, 32, 82, 46, 12, 28, 84, 29, 4, 65, 43, 135, 6, 155, 87, 17, 33, 2, 22, 106, 10, 78, 22, 29, 71, 20, 7, 133, 54, 21, 71, 30, 87, 14, 80, 122, 73, 16, 71, 137, 54, 83, 85, 82, 4, 78, 55, 63, 18, 3, 41, 30, 82, 40, 86, 153, 39, 52, 5, 79, 28, 11, 47, 123, 67, 122, 60, 123, 0, 144, 25, 59, 24, 111, 74, 153, 87, 35, 47, 51, 15, 114, 26, 28, 36, 95, 27, 61, 6, 83, 35, 159, 75, 12, 5, 30, 57, 136, 75, 52, 34, 51, 61, 116, 53, 61, 43, 103, 14, 93, 44, 8, 85, 86, 45, 9, 83, 132, 9, 121, 38, 4, 80, 71, 70, 10, 45, 111, 66, 143, 25, 75, 76, 119, 71, 135, 23, 81, 37, 0, 40, 121, 57, 49, 24, 31, 69, 52, 70, 26, 49, 54, 69, 74, 53, 89, 62, 6, 84, 77, 12, 40, 59, 46, 51, 120, 61, 93, 57, 129, 42, 122, 27, 7, 7, 61, 1, 35, 84, 19, 72, 97, 13, 53, 15, 113, 8, 116, 73, 58, 63, 57, 38, 115, 78, 113, 31, 78, 62, 115, 35, 50, 88, 57, 17, 93, 82, 70, 1, 66, 49, 87, 80, 0, 3, 74, 55, 69, 74, 47, 27, 83, 65, 143, 1, 158, 89, 25, 77, 94, 18, 114, 50, 22, 20, 20, 75, 77, 11, 14, 38, 75, 65, 15, 68, 5, 88, 60, 49, 69, 68, 155, 19, 76, 31, 64, 19, 150, 69, 127, 79, 95, 88, 144, 17, 13, 32, 115, 8, 14, 10, 46, 13, 152, 20, 27, 58, 132, 66, 80, 82, 28, 64, 39, 7, 50, 55, 97, 7, 61, 76, 27, 11, 116, 15, 153, 89, 159, 53, 141, 49, 35, 85, 37, 82, 31, 77, 9, 9, 66, 43, 9, 60, 142, 86, 11, 55, 42, 45, 51, 69, 61, 73, 34, 63, 144, 86, 90, 3, 123, 54, 128, 38, 73, 4, 126, 86, 108, 49, 67, 75, 152, 11, 22, 65, 139, 19, 89, 73, 110, 81, 15, 0, 1, 46, 91, 57, 19, 39, 59, 0, 133, 63, 49, 8, 9, 64, 124, 38, 144, 1, 20, 6, 86, 80, 46, 49, 7, 16, 113, 16, 69, 27, 153, 17, 78, 0, 134, 52, 66, 25, 59, 72, 42, 35, 150, 88, 17, 55, 54, 80, 93, 77, 86, 35, 8, 67, 122, 40, 154, 28, 114, 73, 24, 27, 125, 69, 76, 47, 74, 56, 123, 89, 48, 21, 12, 89, 84, 49, 31, 21, 106, 23, 28, 82, 68, 18, 100, 89, 42, 77, 33, 52, 133, 71, 44, 62, 67, 11, 43, 89, 20, 82, 64, 17, 61, 41, 116, 82, 99, 58, 38, 59, 15, 46, 150, 87, 127, 35, 78, 64, 64, 20, 153, 54, 94, 6, 118, 86, 55, 34, 24, 71, 63, 50, 69, 71, 56, 40, 117, 10, 55, 29, 93, 15, 53, 60, 117, 48, 103, 5, 58, 70, 4, 23, 95, 33, 14, 28, 107, 86, 11, 18, 38, 74, 39, 60, 88, 42, 71, 47, 80, 9, 31, 37, 159, 39, 111, 60, 97, 8, 44, 25, 92, 56, 81, 86, 42, 53, 40, 2, 42, 28, 80, 1, 22, 7, 122, 32, 95, 45, 41, 50, 41, 23, 139, 72, 30, 11, 7, 22, 8, 89, 3, 84, 56, 16, 19, 32, 123, 60, 138, 64, 18, 30, 147, 40, 86, 66, 45, 59, 51, 27, 97, 59, 85, 30, 9, 22, 132, 19, 66, 73, 97, 86, 76, 58, 65, 81, 20, 81, 66, 87, 13, 87, 131, 64, 123, 84, 158, 38, 99, 20, 125, 27, 90, 87, 156, 58, 88, 82, 141, 68, 94, 46, 96, 82, 89, 0, 121, 41, 17, 6, 17, 49, 159, 70, 111, 34, 157, 65, 152, 13, 51, 88, 54, 11, 121, 23, 38, 34, 46, 33, 57, 78, 1, 73, 5, 14, 110, 23, 155, 21, 142, 64, 97, 68, 3, 77, 15, 48, 36, 50, 27, 29, 130, 75, 41, 49, 145, 34, 11, 35, 55, 88, 153, 78, 23, 6, 72, 27, 17, 73, 38, 73, 9, 59, 111, 18, 79, 57, 145, 30, 93, 46, 28, 87, 152, 81, 6, 31, 27, 42, 7, 77, 88, 39, 145, 80, 89, 78, 60, 17, 93, 26, 46, 16, 26, 64, 74, 51, 97, 58, 135, 77, 74, 50, 97, 78, 123, 56, 1, 82, 18, 12, 51, 48, 15, 9, 99, 80, 7, 74, 56, 44, 106, 37, 3, 63, 89, 28, 113, 24, 75, 40, 0, 10, 151, 45, 107, 40, 41, 8, 21, 5, 120, 41, 5, 24, 118, 16, 143, 68, 101, 5, 12, 28, 50, 5, 154, 80, 145, 77, 83, 72, 115, 82, 156, 80, 132, 1, 65, 1, 27, 18, 154, 48, 70, 19, 8, 42, 99, 41, 2, 19, 8, 22, 129, 62, 85, 85, 33, 83, 79, 64, 79, 77, 149, 31, 16, 53, 21, 72, 53, 47, 149, 15, 61, 50, 18, 7, 89, 76, 159, 3, 60, 11, 12, 43, 45, 15, 5, 38, 8, 65, 145, 67, 16, 7, 79, 38, 98, 0, 60, 21, 15, 38, 97, 77, 114, 86, 49, 17, 45, 71, 73, 80, 18, 65, 111, 86, 153, 82, 49, 56, 88, 74, 96, 44, 134, 40, 137, 50, 109, 49, 42, 86, 143, 61, 156, 38, 58, 43, 77, 14, 64, 36, 140, 63, 72, 88, 31, 85, 90, 11, 75, 32, 22, 11, 23, 8, 45, 18, 114, 66, 63, 24, 12, 10, 119, 50, 15, 22, 74, 9, 96, 77, 53, 62, 79, 27, 150, 54, 142, 35, 6, 0, 17, 20, 105, 30, 129, 40, 120, 33, 64, 65, 47, 64, 132, 3, 139, 4, 152, 0, 32, 61, 129, 45, 29, 69, 86, 79, 127, 25, 21, 77, 31, 40, 8, 0, 122, 53, 146, 66, 53, 8, 151, 72, 90, 13, 49, 32, 135, 7, 9, 31, 71, 82, 151, 12, 56, 89, 95, 68, 123, 47, 42, 61, 126, 13, 134, 76, 50, 80, 120, 74, 14, 41, 136, 70, 95, 75, 105, 41, 57, 71, 4, 89, 19, 17, 51, 60, 98, 34, 93, 48, 74, 76, 86, 34, 156, 66, 116, 26, 89, 32, 151, 9, 98, 71, 49, 70, 99, 68, 32, 24, 37, 19, 58, 4, 6, 43, 143, 78, 151, 26, 73, 26, 23, 80, 19, 74, 130, 82, 130, 40, 57, 58, 29, 42, 43, 51, 134, 34, 61, 38, 24, 48, 91, 16, 73, 43, 38, 77, 136, 84, 151, 17, 6, 73, 6, 44, 146, 27, 72, 18, 45, 27, 73, 51, 132, 89, 40, 10, 6, 3, 30, 40, 141, 77, 116, 52, 40, 78, 157, 86, 67, 0, 33, 75, 108, 32, 80, 75, 155, 1, 149, 72, 13, 18, 31, 43, 90, 45, 35, 68, 129, 76, 20, 2, 44, 56, 126, 11, 124, 34, 158, 14, 0, 54, 55, 20, 63, 20, 123, 71, 29, 27, 36, 83, 60, 39, 98, 15, 88, 1, 74, 87, 64, 83, 66, 37, 18, 37, 35, 82, 77, 49, 119, 43, 154, 9, 48, 18, 117, 73, 91, 36, 115, 14, 156, 60, 155, 66, 0, 28, 56, 61, 116, 58, 151, 79, 125, 84, 18, 44, 36, 37, 155, 22, 120, 27, 127, 64, 138, 76, 71, 21, 32, 89, 113, 2, 44, 45, 52, 2, 9, 84, 82, 33, 156, 56, 77, 68, 118, 40, 148, 15, 102, 5, 19, 87, 4, 40, 21, 66, 11, 64, 69, 79, 151, 61, 124, 72, 121, 73, 35, 28, 111, 28, 104, 10, 73, 63, 1, 44, 38, 25, 135, 52, 156, 1, 131, 52, 37, 26, 86, 8, 12, 7, 114, 54, 43, 33, 145, 19, 155, 14, 44, 89, 1, 15, 97, 52, 34, 1, 62, 6, 42, 42, 42, 73, 94, 87, 1, 71, 95, 9, 56, 19, 79, 3, 138, 80, 117, 30, 28, 47, 73, 5, 16, 31, 145, 32, 133, 49, 16, 12, 70, 6, 39, 32, 153, 73, 103, 10, 124, 52, 68, 42, 119, 51, 43, 42, 58, 38, 146, 70, 117, 89, 88, 67, 137, 42, 83, 45, 37, 13, 159, 25, 85, 6, 30, 75, 72, 52, 52, 77, 149, 2, 119, 26, 115, 87, 36, 63, 44, 68, 32, 40, 17, 46, 94, 3, 62, 30, 122, 49, 10, 76, 17, 34, 50, 69, 30, 43, 64, 1, 135, 61, 92, 1, 23, 9, 138, 38, 22, 5, 136, 53, 38, 2, 28, 54, 48, 61, 84, 41, 48, 55, 132, 36, 78, 88, 159, 28, 7, 30, 129, 60, 158, 79, 0, 49, 148, 19, 140, 66, 128, 14, 30, 47, 0, 72, 48, 80, 25, 52, 91, 31, 144, 29, 55, 12, 72, 30, 115, 3, 62, 82, 87, 50, 39, 84, 95, 49, 25, 83, 151, 51, 75, 80, 98, 43, 28, 0, 72, 67, 42, 8, 21, 20, 120, 44, 101, 56, 8, 77, 40, 36, 74, 68, 18, 87, 157, 68, 109, 41, 31, 12, 15, 36, 151, 20, 105, 23, 20, 26, 110, 6, 69, 51, 142, 78, 82, 44, 145, 53, 80, 70, 113, 15, 25, 56, 153, 12, 92, 48, 150, 42, 51, 8, 19, 67, 33, 73, 72, 13, 44, 61, 140, 73, 96, 43, 96, 87, 32, 12, 110, 7, 51, 1, 19, 2, 106, 74, 146, 20, 51, 75, 10, 80, 34, 18, 104, 59, 99, 66, 74, 25, 113, 68, 157, 37, 140, 12, 60, 46, 67, 1, 11, 1, 17, 28, 15, 17, 121, 29, 44, 6, 54, 7, 116, 83, 123, 25, 130, 86, 66, 42, 81, 56, 59, 34, 46, 79, 148, 79, 129, 85, 152, 12, 129, 61, 86, 55, 7, 41, 15, 37, 98, 81, 28, 51, 41, 48, 125, 44, 57, 36, 110, 68, 94, 81, 36, 29, 83, 68, 38, 89, 122, 4, 3, 62, 22, 15, 96, 27, 77, 24, 127, 26, 34, 44, 34, 52, 75, 71, 121, 68, 48, 60, 46, 44, 77, 29, 101, 25, 116, 3, 122, 68, 37, 42, 6, 62, 118, 21, 149, 56, 157, 14, 138, 30, 19, 41, 145, 20, 52, 53, 102, 50, 6, 55, 59, 28, 89, 66, 124, 33, 106, 25, 106, 7, 97, 42, 88, 63, 79, 39, 86, 37, 133, 75, 113, 28, 17, 74, 117, 78, 3, 81, 46, 62, 61, 11, 49, 25, 55, 70, 4, 58, 0, 20, 72, 79, 90, 60, 85, 67, 9, 72, 31, 20, 71, 51, 133, 22, 140, 10, 154, 73, 93, 45, 24, 64, 134, 58, 113, 69, 157, 22, 7, 4, 23, 63, 109, 62, 86, 38, 119, 21, 126, 44, 145, 0, 2, 7, 30, 51, 127, 71, 77, 58, 15, 58, 67, 31, 38, 27, 14, 6, 84, 70, 157, 61, 18, 89, 133, 39, 120, 20, 145, 47, 63, 72, 28, 49, 56, 65, 24, 82, 84, 55, 138, 52, 95, 73, 144, 37, 55, 17, 134, 22, 57, 5, 48, 43, 107, 57, 63, 7, 3, 70, 121, 16, 120, 34, 52, 82, 64, 6, 118, 22, 128, 67, 62, 38, 90, 18, 117, 32, 14, 70, 117, 24, 59, 7, 154, 34, 158, 64, 106, 42, 0, 50, 44, 1, 154, 54, 60, 42, 14, 78, 0, 36, 143, 45, 141, 59, 146, 65, 13, 1, 84, 21, 41, 51, 97, 87, 45, 55, 84, 46, 20, 24, 126, 14, 46, 21, 17, 56, 114, 9, 102, 82, 138, 33, 62, 16, 90, 82, 86, 88, 95, 72, 94, 71, 83, 30, 6, 49, 106, 3, 65, 80, 24, 25, 28, 81, 108, 87, 131, 33, 117, 63, 123, 14, 127, 42, 53, 38, 116, 88, 76, 42, 61, 82, 41, 14, 31, 26, 34, 79, 127, 1, 152, 82, 95, 46, 40, 0, 131, 49, 29, 32, 126, 63, 98, 11, 79, 78, 41, 30, 121, 5, 123, 59, 87, 41, 83, 7, 45, 89, 11, 82, 73, 23, 73, 3, 99, 73, 29, 44, 127, 40, 98, 20, 93, 78, 54, 21, 72, 4, 94, 35, 72, 36, 59, 32, 76, 10, 96, 39, 134, 43, 24, 21, 129, 6, 50, 24, 132, 65, 50, 83, 132, 44, 148, 11, 65, 7, 50, 18, 47, 5, 75, 85, 62, 68, 136, 19, 62, 53, 136, 43, 59, 27, 11, 22, 105, 44, 50, 46, 90, 72, 14, 14, 7, 88, 142, 27, 50, 32, 28, 15, 136, 9, 112, 27, 141, 25, 108, 19, 121, 64, 72, 74, 132, 80, 3, 21, 19, 64, 2, 84, 150, 71, 133, 87, 130, 72, 66, 46, 38, 83, 63, 80, 159, 84, 155, 68, 25, 71, 55, 48, 70, 2, 67, 4, 48, 71, 41, 43, 56, 85, 24, 74, 108, 74, 92, 86, 144, 77, 77, 54, 25, 37, 76, 0, 63, 2, 37, 53, 52, 35, 129, 71, 60, 26, 74, 18, 126, 84, 44, 51, 117, 2, 80, 17, 97, 88, 135, 45, 102, 74, 88, 76, 52, 16, 85, 33, 136, 26, 150, 73, 11, 44, 3, 0, 153, 37, 55, 25, 105, 45, 87, 8, 10, 14, 58, 11, 47, 86, 114, 27, 146, 1, 59, 77, 66, 83, 92, 2, 22, 26, 81, 48, 117, 72, 19, 89, 42, 5, 7, 27, 125, 32, 17, 85, 39, 53, 83, 70, 86, 46, 45, 6, 140, 40, 65, 31, 139, 30, 105, 37, 73, 76, 147, 8, 31, 9, 91, 14, 93, 24, 81, 21, 131, 18, 44, 59, 95, 78, 2, 49, 142, 1, 119, 30, 43, 72, 71, 42, 124, 81, 113, 89, 99, 38, 74, 63, 45, 23, 32, 74, 81, 83, 135, 59, 56, 35, 71, 79, 101, 42, 141, 64, 106, 39, 95, 37, 18, 0, 59, 33, 16, 57, 2, 2, 63, 23, 130, 46, 141, 23, 54, 3, 96, 18, 112, 29, 52, 13, 5, 33, 0, 52, 132, 15, 102, 14, 128, 12, 60, 79, 55, 38, 147, 1, 9, 50, 112, 33, 0, 29, 132, 57, 120, 22, 24, 24, 3, 49, 136, 74, 88, 6, 116, 11, 104, 21, 100, 20, 138, 54, 45, 1, 131, 12, 150, 81, 7, 48, 84, 32, 19, 12, 54, 39, 131, 74, 48, 3, 148, 71, 1, 24, 18, 58, 157, 44, 20, 35, 4, 65, 128, 24, 5, 59, 119, 36, 129, 64, 121, 69, 99, 7, 26, 30, 4, 53, 133, 44, 40, 41, 67, 18, 34, 54, 123, 2, 65, 23, 82, 12, 48, 40, 17, 9, 88, 59, 90, 23, 109, 28, 140, 55, 14, 67, 124, 31, 154, 24, 64, 37, 144, 13, 71, 30, 7, 36, 38, 81, 44, 37, 74, 77, 60, 2, 84, 63, 99, 48, 154, 20, 91, 17, 94, 59, 78, 66, 108, 4, 127, 14, 32, 58, 118, 70, 129, 19, 149, 60, 115, 39, 103, 24, 118, 3, 48, 74, 145, 70, 130, 52, 31, 88, 135, 22, 158, 72, 144, 9, 79, 12, 144, 78, 78, 31, 69, 6, 58, 61, 152, 16, 43, 18, 40, 20, 93, 18, 101, 10, 157, 4, 13, 19, 114, 7, 106, 15, 85, 43, 74, 0, 47, 11, 46, 43, 37, 31, 120, 7, 48, 41, 18, 16, 36, 69, 59, 56, 77, 34, 156, 74, 151, 68, 5, 47, 152, 56, 154, 75, 15, 76, 72, 35, 85, 63, 27, 50, 88, 83, 106, 76, 66, 76, 148, 54, 95, 39, 116, 87, 71, 24, 46, 81, 41, 83, 114, 14, 148, 27, 159, 87, 82, 14, 60, 73, 71, 33, 34, 16, 105, 58, 8, 71, 111, 4, 33, 84, 76, 55, 98, 16, 33, 33, 135, 85, 28, 44, 89, 23, 1, 59, 54, 25, 67, 67, 23, 86, 101, 55, 131, 39, 104, 40, 56, 66, 87, 65, 36, 71, 103, 29, 13, 80, 152, 65, 27, 65, 58, 79, 105, 67, 87, 82, 157, 49, 119, 84, 15, 59, 5, 13, 31, 87, 79, 20, 118, 88, 53, 27, 78, 52, 82, 1, 154, 4, 79, 42, 12, 15, 39, 52, 54, 51, 15, 61, 10, 31, 54, 56, 134, 80, 138, 4, 112, 45, 5, 71, 107, 69, 33, 87, 134, 13, 119, 74, 26, 67, 73, 72, 122, 36, 20, 41, 5, 1, 41, 0, 17, 43, 120, 50, 143, 5, 87, 2, 159, 54, 4, 67, 75, 24, 113, 25, 60, 69, 55, 79, 71, 46, 54, 6, 109, 54, 45, 82, 139, 55, 57, 29, 75, 35, 80, 38, 49, 42, 39, 0, 53, 2, 104, 52, 41, 47, 143, 85, 147, 4, 46, 10, 143, 4, 68, 50, 107, 45, 149, 46, 28, 58, 61, 34, 129, 66, 158, 51, 63, 14, 75, 23, 122, 89, 73, 16, 49, 81, 58, 88, 141, 1, 63, 56, 150, 11, 69, 67, 77, 28, 43, 14, 25, 57, 73, 11, 81, 75, 61, 39, 8, 25, 72, 81, 57, 72, 33, 29, 140, 38, 17, 80, 135, 80, 138, 12, 40, 45, 135, 16, 51, 17, 74, 8, 110, 75, 80, 88, 108, 66, 60, 74, 116, 13, 121, 43, 8, 59, 158, 33, 39, 61, 32, 50, 108, 69, 115, 51, 45, 83, 80, 74, 57, 0, 64, 31, 76, 39, 39, 59, 12, 42, 95, 85, 35, 30, 154, 72, 68, 36, 99, 28, 103, 33, 147, 16, 84, 16, 123, 43, 40, 81, 34, 81, 64, 42, 74, 5, 154, 89, 126, 4, 147, 13, 35, 62, 134, 57, 127, 3, 25, 61, 35, 13, 120, 81, 20, 3, 83, 69, 104, 13, 31, 7, 132, 81, 104, 67, 144, 72, 99, 67, 121, 84, 57, 62, 138, 51, 131, 8, 122, 72, 74, 83, 140, 31, 102, 68, 29, 60, 153, 60, 76, 89, 71, 85, 27, 52, 92, 73, 95, 23, 156, 24, 104, 70, 124, 14, 9, 24, 42, 49, 109, 40, 91, 44, 101, 26, 78, 20, 90, 61, 65, 49, 155, 63, 133, 4, 71, 12, 136, 45, 65, 77, 56, 53, 67, 14, 95, 53, 33, 12, 138, 66, 114, 77, 26, 47, 9, 66, 157, 30, 128, 77, 139, 33, 27, 24, 59, 78, 84, 33, 33, 24, 46, 38, 122, 79, 98, 33, 107, 60, 91, 34, 104, 43, 154, 50, 79, 71, 69, 40, 88, 88, 103, 56, 36, 56, 46, 85, 139, 24, 98, 21, 0, 53, 153, 28, 42, 24, 40, 31, 129, 54, 93, 33, 37, 48, 129, 21, 45, 4, 151, 27, 145, 84, 115, 52, 57, 68, 34, 64, 89, 67, 26, 88, 76, 6, 7, 59, 39, 42, 80, 31, 50, 67, 147, 37, 31, 79, 21, 43, 15, 41, 47, 77, 113, 70, 39, 24, 62, 23, 36, 21, 32, 47, 153, 9, 19, 84, 78, 8, 34, 8, 108, 88, 2, 89, 107, 26, 39, 54, 16, 70, 107, 37, 3, 11, 54, 72, 39, 66, 26, 68, 95, 56, 142, 68, 88, 21, 20, 30, 117, 60, 40, 84, 86, 59, 83, 71, 124, 40, 3, 50, 128, 82, 114, 79, 159, 56, 136, 61, 58, 10, 104, 47, 155, 40, 20, 65, 143, 23, 106, 21, 36, 34, 14, 50, 66, 62, 34, 15, 11, 32, 98, 84, 10, 77, 75, 25, 150, 30, 99, 26, 2, 32, 116, 66, 106, 27, 101, 6, 25, 0, 61, 32, 136, 68, 48, 25, 19, 25, 10, 3, 156, 21, 85, 73, 21, 10, 116, 18, 63, 73, 50, 81, 138, 46, 109, 65, 54, 40, 87, 31, 108, 9, 13, 50, 80, 83, 9, 58, 140, 79, 115, 32, 14, 19, 42, 64, 58, 39, 153, 58, 123, 63, 86, 3, 53, 22, 111, 21, 103, 35, 110, 86, 114, 25, 143, 36, 56, 26, 31, 29, 127, 27, 113, 22, 132, 14, 88, 7, 126, 78, 89, 29, 76, 78, 92, 72, 49, 38, 34, 36, 77, 86, 65, 22, 53, 87, 100, 34, 143, 11, 123, 16, 158, 73, 59, 18, 121, 4, 94, 41, 21, 32, 18, 23, 47, 35, 69, 50, 119, 79, 34, 20, 12, 16, 16, 60, 56, 84, 69, 4, 23, 79, 145, 52, 153, 85, 149, 19, 50, 9, 4, 50, 85, 4, 48, 20, 57, 9, 114, 11, 43, 4, 31, 78, 57, 18, 87, 3, 62, 29, 13, 77, 15, 12, 92, 50, 145, 50, 101, 74, 103, 17, 110, 37, 54, 73, 105, 49, 93, 71, 60, 20, 140, 82, 133, 28, 156, 3, 146, 89, 72, 0, 9, 85, 28, 18, 95, 51, 32, 33, 47, 18, 9, 75, 68, 71, 86, 2, 123, 7, 99, 0, 137, 40, 23, 20, 155, 15, 34, 83, 82, 51, 125, 62, 93, 35, 150, 10, 23, 27, 43, 73, 5, 29, 18, 42, 89, 31, 31, 82, 9, 34, 156, 54, 148, 30, 72, 37, 124, 79, 41, 46, 34, 9, 141, 80, 1, 80, 158, 61, 30, 29, 118, 61, 51, 24, 128, 86, 151, 78, 126, 12, 110, 63, 54, 27, 133, 21, 64, 71, 85, 7, 102, 21, 135, 21, 119, 22, 122, 24, 57, 86, 75, 61, 138, 78, 138, 22, 150, 19, 131, 37, 121, 32, 134, 0, 24, 22, 84, 48, 70, 5, 91, 30, 28, 6, 51, 83, 157, 6, 108, 8, 93, 10, 119, 64, 63, 13, 3, 2, 54, 13, 71, 74, 118, 29, 68, 38, 109, 37, 140, 32, 115, 57, 84, 68, 118, 53, 121, 1, 130, 70, 151, 1, 144, 48, 72, 50, 55, 80, 20, 48, 59, 43, 4, 17, 107, 71, 3, 44, 138, 5, 75, 12, 129, 80, 72, 51, 71, 3, 4, 8, 33, 5, 43, 8, 86, 64, 123, 20, 14, 33, 49, 27, 55, 52, 157, 5, 3, 9, 158, 22, 118, 59, 111, 51, 126, 10, 147, 30, 34, 53, 59, 40, 59, 21, 117, 1, 98, 62, 117, 9, 27, 68, 65, 21, 103, 30, 24, 53, 88, 84, 33, 58, 154, 83, 117, 52, 108, 59, 33, 47, 12, 66, 101, 9, 150, 58, 137, 3, 86, 10, 80, 77, 140, 33, 154, 66, 142, 18, 108, 80, 89, 4, 29, 74, 92, 17, 2, 25, 69, 37, 3, 15, 131, 82, 7, 13, 56, 77, 68, 5, 2, 61, 146, 62, 26, 36, 148, 4, 11, 11, 56, 8, 14, 66, 10, 72, 141, 71, 132, 67, 97, 37, 71, 37, 91, 51, 59, 70, 32, 7, 64, 34, 89, 70, 106, 13, 131, 75, 79, 60, 48, 62, 71, 52, 50, 15, 121, 61, 1, 50, 11, 38, 98, 3, 90, 74, 106, 14, 152, 86, 127, 75, 79, 18, 47, 49, 144, 54, 142, 21, 5, 23, 141, 81, 16, 62, 51, 39, 144, 70, 101, 73, 24, 26, 40, 67, 140, 62, 47, 33, 22, 87, 36, 18, 57, 55, 62, 61, 88, 72, 121, 26, 98, 44, 131, 25, 139, 5, 44, 35, 57, 34, 5, 34, 86, 39, 40, 8, 148, 81, 21, 47, 75, 18, 6, 51, 81, 7, 81, 18, 45, 68, 129, 13, 116, 42, 82, 46, 112, 25, 82, 61, 38, 63, 54, 5, 33, 86, 131, 73, 52, 86, 24, 28, 150, 21, 123, 11, 59, 63, 91, 78, 108, 11, 71, 32, 134, 14, 64, 57, 80, 2, 118, 58, 114, 42, 82, 5, 133, 82, 31, 62, 1, 42, 21, 83, 65, 82, 152, 55, 54, 14, 157, 84, 88, 60, 124, 30, 93, 70, 41, 12, 23, 83, 12, 54, 157, 87, 17, 47, 44, 44, 40, 5, 42, 11, 155, 38, 1, 3, 118, 20, 41, 9, 103, 83, 135, 60, 83, 19, 102, 32, 123, 40, 141, 65, 81, 31, 148, 75, 155, 85, 135, 51, 118, 23, 7, 38, 98, 79, 10, 13, 74, 84, 87, 37, 35, 79, 145, 73, 96, 19, 2, 67, 132, 83, 42, 80, 74, 1, 45, 70, 107, 50, 66, 12, 87, 58, 54, 87, 2, 0, 121, 14, 108, 31, 106, 30, 8, 38, 129, 31, 152, 73, 115, 5, 148, 77, 9, 39, 101, 68, 81, 78, 118, 31, 10, 86, 41, 54, 115, 69, 53, 79, 29, 3, 15, 63, 147, 19, 54, 84, 86, 87, 148, 87, 77, 50, 42, 65, 68, 64, 66, 30, 115, 88, 48, 48, 16, 3, 148, 69, 61, 14, 45, 84, 35, 75, 107, 54, 138, 67, 113, 29, 45, 54, 80, 40, 20, 88, 57, 43, 29, 10, 150, 82, 16, 61, 13, 68, 74, 73, 69, 34, 70, 37, 25, 24, 141, 54, 151, 32, 14, 86, 140, 23, 69, 83, 152, 8, 92, 42, 154, 78, 149, 75, 55, 30, 72, 86, 155, 65, 66, 77, 45, 22, 15, 82, 5, 50, 2, 23, 19, 38, 103, 88, 52, 68, 37, 78, 111, 84, 85, 55, 106, 18, 19, 0, 33, 14, 61, 75, 84, 1, 77, 13, 81, 26, 67, 51, 157, 81, 53, 71, 98, 82, 18, 74, 39, 87, 92, 9, 18, 41, 67, 40, 137, 71, 113, 40, 48, 58, 106, 33, 145, 86, 159, 5, 109, 23, 89, 57, 96, 30, 6, 79, 117, 88, 84, 69, 14, 42, 111, 44, 126, 62, 99, 86, 16, 36, 21, 18, 127, 85, 89, 7, 12, 3, 132, 51, 52, 44, 40, 43, 114, 67, 104, 1, 40, 74, 139, 60, 129, 15, 100, 3, 136, 59, 55, 43, 96, 46, 33, 70, 122, 67, 114, 69, 7, 54, 61, 52, 54, 0, 19, 4, 95, 15, 156, 14, 44, 39, 57, 21, 144, 38, 137, 11, 150, 61, 20, 83, 95, 0, 36, 1, 117, 16, 24, 49, 68, 62, 57, 42, 28, 30, 159, 83, 107, 49, 45, 11, 55, 78, 12, 30, 45, 76, 39, 22, 159, 58, 48, 82, 18, 31, 50, 89, 87, 9, 128, 27, 64, 18, 59, 71, 24, 57, 2, 57, 107, 52, 118, 79, 35, 21, 103, 67, 37, 10, 38, 41, 152, 35, 84, 23, 67, 38, 31, 52, 104, 26, 128, 52, 142, 89, 11, 21, 41, 20, 33, 26, 1, 66, 3, 72, 107, 74, 27, 56, 30, 70, 19, 27, 97, 61, 127, 60, 110, 52, 131, 68, 27, 51, 63, 86, 39, 85, 5, 60, 141, 84, 37, 23, 63, 49, 77, 51, 29, 28, 69, 57, 56, 34, 50, 21, 36, 31, 24, 2, 11, 13, 0, 16, 10, 47, 125, 79, 47, 23, 39, 51, 126, 36, 93, 8, 133, 85, 8, 31, 111, 85, 152, 41, 128, 29, 6, 87, 105, 26, 72, 60, 43, 37, 139, 0, 85, 72, 19, 55, 85, 21, 141, 75, 98, 59, 111, 82, 34, 85, 48, 76, 92, 53, 86, 17, 85, 31, 22, 33, 47, 51, 7, 84, 61, 88, 88, 70, 79, 44, 22, 68, 124, 85, 150, 64, 138, 69, 125, 20, 129, 4, 74, 89, 147, 9, 138, 44, 7, 75, 108, 62, 59, 89, 143, 33, 73, 84, 52, 67, 28, 40, 77, 74, 67, 12, 78, 61, 72, 29, 73, 47, 52, 28, 130, 76, 109, 80, 44, 49, 76, 35, 9, 80, 79, 29, 129, 9, 136, 82, 44, 52, 62, 12, 132, 40, 20, 46, 139, 74, 32, 55, 50, 13, 67, 39, 143, 27, 73, 81, 125, 50, 8, 10, 133, 83, 141, 56, 137, 80, 113, 43, 148, 7, 95, 89, 132, 33, 135, 82, 140, 45, 24, 19, 70, 80, 80, 85, 147, 38, 105, 72, 63, 43, 72, 84, 105, 86, 89, 14, 110, 0, 119, 12, 21, 23, 8, 61, 114, 63, 72, 83, 82, 65, 52, 41, 90, 88, 73, 40, 40, 16, 35, 22, 41, 38, 84, 10, 32, 49, 121, 3, 82, 87, 105, 52, 126, 73, 94, 69, 21, 29, 120, 11, 137, 86, 44, 65, 159, 21, 11, 57, 147, 46, 26, 43, 27, 9, 105, 80, 50, 63, 121, 11, 69, 48, 73, 89, 78, 67, 14, 75, 43, 9, 46, 77, 115, 17, 103, 82, 125, 64, 96, 59, 120, 39, 121, 7, 39, 62, 102, 85, 150, 66, 114, 23, 142, 71, 12, 44, 30, 38, 24, 67, 115, 27, 7, 15, 102, 27, 107, 64, 23, 23, 55, 83, 116, 69, 156, 63, 85, 16, 145, 42, 1, 33, 54, 35, 136, 60, 50, 82, 150, 25, 152, 2, 140, 22, 56, 80, 82, 39, 104, 54, 95, 17, 64, 79, 46, 25, 19, 49, 87, 57, 128, 49, 63, 6, 65, 59, 40, 61, 25, 84, 120, 67, 135, 28, 83, 12, 106, 69, 122, 54, 83, 47, 138, 24, 109, 58, 120, 73, 90, 22, 119, 60, 59, 3, 93, 5, 119, 42, 108, 29, 61, 31, 123, 24, 57, 64, 9, 79, 88, 86, 97, 33, 61, 42, 157, 45, 82, 27, 27, 22, 73, 0, 122, 55, 38, 61, 47, 42, 22, 81, 41, 40, 83, 43, 66, 21, 152, 43, 9, 2, 81, 45, 153, 49, 105, 79, 92, 52, 94, 11, 140, 44, 109, 53, 121, 15, 69, 3, 134, 85, 84, 28, 23, 85, 46, 20, 60, 27, 127, 10, 48, 0, 121, 89, 134, 36, 146, 13, 38, 68, 98, 9, 72, 3, 86, 53, 68, 35, 122, 52, 0, 67, 146, 74, 31, 61, 127, 9, 35, 54, 54, 48, 24, 52, 115, 34, 32, 76, 114, 89, 59, 8, 72, 65, 61, 45, 52, 58, 10, 70, 47, 68, 79, 63, 73, 83, 134, 69, 23, 87, 51, 84, 23, 32, 33, 65, 126, 23, 53, 85, 45, 85, 55, 82, 131, 72, 129, 33, 148, 13, 96, 11, 62, 22, 76, 56, 25, 25, 131, 56, 152, 23, 152, 46, 9, 7, 64, 73, 31, 28, 55, 69, 10, 81, 126, 15, 114, 51, 39, 76, 66, 8, 1, 23, 95, 3, 127, 72, 47, 59, 104, 8, 81, 54, 6, 34, 38, 22, 132, 70, 117, 22, 103, 73, 44, 64, 128, 48, 73, 29, 82, 85, 135, 1, 40, 23, 131, 69, 112, 63, 137, 51, 61, 66, 2, 85, 117, 29, 85, 75, 52, 1, 23, 53, 158, 74, 98, 69, 114, 17, 154, 32, 31, 36, 25, 14, 10, 38, 124, 65, 82, 7, 53, 52, 83, 32, 13, 58, 37, 88, 63, 48, 37, 3, 106, 79, 0, 27, 159, 79, 16, 34, 99, 25, 94, 23, 7, 2, 4, 83, 107, 24, 146, 15, 59, 6, 6, 14, 77, 55, 103, 57, 2, 78, 101, 33, 46, 45, 51, 59, 21, 0, 62, 0, 18, 51, 6, 24, 8, 36, 51, 51, 48, 47, 111, 12, 29, 16, 120, 57, 112, 68, 78, 74, 65, 51, 50, 86, 155, 78, 152, 77, 2, 8, 133, 53, 96, 5, 46, 86, 33, 21, 110, 77, 23, 61, 98, 35, 101, 75, 139, 9, 43, 20, 26, 66, 124, 3, 148, 58, 105, 20, 60, 8, 136, 38, 154, 31, 110, 38, 53, 18, 48, 87, 6, 57, 156, 26, 38, 56, 113, 27, 130, 31, 74, 10, 69, 58, 28, 45, 29, 83, 25, 88, 45, 43, 77, 64, 125, 43, 77, 1, 60, 24, 73, 78, 109, 47, 66, 75, 62, 39, 155, 49, 137, 64, 59, 14, 89, 46, 113, 78, 110, 39, 66, 66, 92, 63, 103, 89, 79, 82, 96, 65, 136, 22, 36, 33, 96, 57, 39, 64, 117, 12, 99, 79, 27, 30, 31, 65, 157, 66, 0, 30, 38, 3, 39, 50, 123, 88, 71, 48, 104, 88, 94, 22, 55, 0, 34, 51, 49, 0, 38, 64, 28, 34, 112, 66, 34, 74, 137, 36, 22, 3, 7, 79, 90, 20, 66, 40, 3, 26, 100, 17, 127, 6, 11, 58, 117, 62, 79, 74, 67, 44, 122, 56, 82, 19, 6, 25, 116, 63, 68, 55, 35, 15, 101, 49, 130, 9, 108, 50, 140, 70, 27, 19, 103, 81, 0, 13, 117, 23, 97, 56, 68, 58, 52, 78, 35, 12, 134, 84, 71, 35, 71, 27, 59, 57, 81, 66, 30, 56, 108, 71, 127, 78, 109, 35, 153, 14, 13, 83, 55, 58, 24, 18, 51, 31, 128, 46, 137, 5, 115, 25, 115, 45, 57, 33, 135, 70, 114, 38, 122, 76, 85, 32, 112, 14, 17, 21, 152, 4, 67, 13, 89, 22, 15, 50, 114, 47, 144, 68, 61, 64, 58, 73, 75, 55, 150, 47, 99, 31, 50, 60, 12, 64, 29, 57, 148, 6, 112, 10, 10, 0, 149, 58, 159, 26, 46, 71, 84, 52, 21, 36, 82, 63, 99, 39, 4, 14, 147, 20, 139, 7, 78, 13, 2, 50, 41, 19, 100, 78, 32, 80, 78, 43, 45, 44, 21, 3, 86, 81, 95, 5, 138, 58, 87, 20, 32, 53, 109, 33, 158, 65, 146, 47, 1, 48, 148, 80, 141, 18, 6, 76, 36, 78, 48, 46, 156, 75, 158, 28, 31, 86, 91, 80, 46, 41, 130, 8, 150, 27, 106, 12, 132, 78, 158, 47, 118, 75, 53, 40, 7, 14, 15, 84, 118, 41, 151, 19, 126, 66, 87, 38, 113, 6, 126, 20, 13, 47, 147, 14, 68, 63, 6, 47, 113, 37, 68, 29, 91, 0, 90, 37, 45, 77, 122, 70, 105, 8, 61, 57, 112, 42, 56, 71, 46, 88, 134, 59, 94, 70, 103, 4, 18, 45, 32, 30, 107, 28, 141, 6, 49, 72, 158, 15, 32, 71, 102, 38, 49, 28, 113, 50, 26, 55, 11, 20, 71, 2, 31, 8, 2, 56, 88, 38, 114, 37, 20, 64, 5, 20, 69, 33, 122, 84, 111, 76, 57, 16, 87, 44, 12, 24, 81, 38, 78, 3, 144, 75, 149, 28, 23, 41, 100, 76, 54, 10, 14, 73, 136, 78, 134, 28, 54, 24, 71, 88, 77, 62, 19, 3, 5, 63, 40, 68, 108, 57, 96, 63, 158, 24, 146, 34, 130, 77, 60, 13, 118, 2, 54, 86, 86, 84, 159, 8, 128, 55, 37, 34, 114, 34, 28, 55, 157, 28, 148, 62, 90, 69, 33, 76, 29, 23, 126, 52, 82, 80, 15, 73, 6, 64, 90, 43, 105, 21, 12, 63, 142, 23, 83, 38, 34, 12, 75, 79, 85, 42, 134, 33, 58, 26, 68, 17, 65, 33, 71, 75, 83, 4, 135, 58, 129, 39, 4, 74, 30, 16, 81, 61, 88, 69, 125, 11, 88, 71, 13, 3, 119, 45, 50, 8, 68, 81, 50, 76, 59, 2, 20, 25, 156, 43, 141, 42, 12, 60, 45, 5, 75, 26, 96, 76, 53, 10, 50, 6, 112, 34, 38, 37, 93, 74, 48, 30, 61, 26, 21, 45, 62, 72, 122, 57, 4, 20, 76, 14, 13, 53, 53, 51, 45, 12, 15, 15, 139, 40, 86, 89, 58, 53, 0, 47, 22, 52, 101, 51, 151, 69, 128, 73, 135, 86, 21, 87, 23, 19, 104, 65, 120, 16, 40, 44, 66, 74, 151, 64, 19, 61, 113, 11, 127, 86, 29, 76, 23, 62, 99, 6, 104, 38, 58, 25, 97, 49, 131, 30, 92, 80, 1, 88, 62, 57, 104, 76, 95, 41, 72, 31, 100, 88, 135, 72, 91, 75, 52, 0, 44, 57, 74, 29, 121, 78, 156, 2, 130, 38, 44, 38, 61, 4, 75, 31, 146, 77, 8, 12, 120, 76, 75, 56, 36, 38, 28, 25, 83, 40, 40, 70, 116, 5, 127, 32, 109, 8, 15, 32, 48, 73, 87, 49, 67, 22, 18, 53, 39, 16, 79, 61, 144, 39, 24, 23, 64, 74, 63, 26, 52, 36, 68, 1, 158, 63, 48, 8, 124, 51, 70, 16, 81, 72, 87, 66, 75, 8, 7, 82, 151, 70, 100, 52, 136, 44, 63, 10, 118, 55, 71, 36, 141, 32, 44, 10, 117, 83, 117, 39, 115, 55, 137, 81, 115, 70, 147, 66, 142, 77, 147, 63, 2, 48, 101, 80, 7, 12, 156, 85, 122, 82, 58, 30, 87, 71, 124, 29, 106, 75, 99, 56, 2, 41, 104, 85, 36, 11, 90, 27, 120, 35, 7, 61, 128, 76, 8, 4, 66, 81, 80, 51, 148, 85, 38, 43, 154, 40, 19, 21, 130, 81, 118, 76, 102, 73, 108, 72, 76, 19, 79, 45, 123, 64, 105, 62, 9, 20, 65, 15, 95, 79, 151, 42, 130, 15, 74, 67, 63, 47, 83, 63, 140, 71, 147, 45, 88, 89, 12, 13, 159, 10, 42, 78, 1, 4, 110, 32, 123, 36, 51, 67, 35, 46, 87, 52, 104, 23, 45, 21, 137, 26, 19, 48, 134, 88, 84, 37, 114, 59, 82, 31, 148, 68, 130, 48, 56, 10, 74, 4, 30, 7, 15, 80, 156, 41, 56, 32, 0, 65, 99, 87, 119, 70, 75, 33, 0, 51, 139, 75, 159, 49, 125, 53, 12, 27, 90, 39, 75, 69, 127, 8, 22, 12, 77, 81, 69, 39, 126, 58, 76, 37, 92, 32, 63, 16, 20, 21, 33, 38, 5, 73, 12, 23, 121, 37, 105, 14, 96, 58, 111, 3, 137, 75, 92, 74, 10, 66, 44, 85, 27, 63, 124, 71, 107, 44, 15, 74, 78, 80, 93, 6, 102, 76, 153, 11, 58, 3, 93, 62, 34, 86, 24, 76, 139, 21, 60, 67, 152, 32, 124, 88, 125, 78, 55, 73, 144, 74, 97, 63, 121, 65, 92, 37, 103, 65, 154, 55, 89, 37, 22, 49, 36, 30, 137, 14, 1, 7, 141, 9, 54, 89, 69, 54, 76, 34, 30, 26, 150, 52, 47, 29, 53, 25, 10, 54, 129, 83, 44, 82, 124, 2, 40, 52, 153, 44, 121, 17, 143, 70, 129, 59, 133, 73, 37, 76, 121, 22, 33, 78, 83, 29, 119, 39, 142, 17, 123, 1, 124, 78, 81, 3, 87, 62, 79, 55, 50, 68, 20, 12, 5, 87, 23, 28, 27, 15, 37, 49, 1, 40, 106, 62, 71, 40, 18, 78, 83, 11, 105, 64, 101, 7, 132, 39, 6, 40, 114, 64, 67, 30, 63, 3, 120, 38, 3, 80, 111, 1, 45, 73, 124, 58, 64, 32, 148, 32, 118, 27, 52, 33, 3, 48, 25, 50, 96, 54, 46, 58, 19, 50, 66, 32, 2, 29, 147, 23, 84, 29, 21, 7, 33, 81, 60, 23, 153, 2, 27, 8, 63, 53, 67, 61, 22, 51, 153, 7, 28, 3, 103, 64, 150, 72, 90, 46, 31, 75, 19, 35, 60, 80, 109, 87, 12, 87, 148, 5, 16, 89, 13, 86, 53, 9, 46, 70, 134, 68, 1, 27, 72, 17, 102, 52, 32, 88, 136, 50, 77, 10, 96, 40, 124, 74, 103, 72, 104, 83, 117, 13, 119, 73, 129, 0, 42, 67, 136, 13, 29, 48, 25, 60, 4, 48, 148, 72, 85, 44, 146, 81, 130, 13, 38, 33, 82, 15, 88, 54, 74, 7, 46, 1, 114, 33, 94, 83, 13, 30, 158, 1, 34, 32, 157, 34, 2, 58, 37, 87, 24, 10, 79, 15, 148, 18, 1, 8, 129, 46, 73, 39, 118, 10, 10, 25, 88, 14, 123, 68, 85, 14, 147, 47, 68, 51, 126, 41, 158, 31, 118, 19, 57, 27, 88, 16, 87, 55, 72, 75, 58, 56, 108, 89, 125, 15, 44, 8, 44, 71, 54, 71, 80, 57, 10, 4, 49, 48, 14, 81, 130, 28, 152, 68, 70, 51, 104, 11, 6, 66, 129, 52, 97, 60, 154, 30, 62, 83, 84, 4, 66, 31, 155, 84, 11, 71, 8, 33, 67, 58, 31, 59, 99, 14, 139, 49, 73, 55, 145, 66, 117, 26, 18, 76, 115, 65, 95, 52, 71, 83, 81, 33, 54, 1, 61, 81, 36, 48, 129, 11, 6, 18, 134, 19, 8, 13, 24, 34, 135, 75, 158, 75, 24, 1, 117, 49, 141, 43, 150, 51, 68, 74, 58, 18, 24, 59, 41, 61, 81, 44, 8, 83, 76, 86, 8, 74, 27, 80, 75, 14, 13, 41, 137, 49, 123, 86, 39, 4, 64, 0, 140, 78, 20, 78, 72, 5, 38, 87, 41, 15, 4, 24, 71, 50, 98, 12, 22, 50, 12, 82, 57, 79, 37, 77, 143, 31, 93, 4, 57, 35, 132, 59, 145, 69, 10, 15, 83, 28, 95, 7, 139, 44, 58, 28, 27, 26, 74, 12, 97, 80, 136, 47, 94, 60, 89, 48, 68, 37, 80, 65, 99, 49, 148, 42, 76, 63, 109, 19, 126, 77, 159, 14, 12, 21, 135, 71, 99, 60, 74, 3, 84, 45, 83, 54, 128, 8, 101, 88, 107, 47, 106, 66, 3, 67, 33, 2, 27, 86, 90, 52, 61, 79, 8, 75, 15, 86, 32, 70, 140, 9, 43, 32, 142, 60, 127, 69, 7, 76, 103, 87, 49, 9, 34, 88, 127, 57, 4, 88, 82, 59, 51, 7, 78, 1, 142, 65, 117, 28, 38, 57, 110, 64, 107, 21, 142, 14, 33, 40, 106, 1, 30, 60, 26, 34, 16, 18, 69, 44, 11, 16, 22, 57, 58, 41, 145, 6, 9, 76, 90, 36, 58, 21, 33, 53, 67, 74, 91, 89, 14, 26, 94, 44, 146, 2, 14, 53, 29, 67, 55, 11, 13, 36, 6, 75, 11, 29, 22, 48, 144, 8, 48, 14, 116, 24, 85, 87, 74, 15, 107, 23, 39, 6, 21, 73, 65, 0, 90, 64, 47, 46, 99, 63, 13, 10, 44, 87, 23, 29, 125, 6, 68, 53, 12, 49, 84, 65, 34, 21, 77, 69, 30, 78, 125, 28, 139, 18, 144, 60, 42, 68, 100, 8, 67, 70, 124, 17, 50, 72, 86, 23, 38, 72, 159, 60, 24, 73, 122, 2, 148, 60, 117, 71, 12, 83, 97, 53, 113, 3, 14, 60, 87, 67, 13, 15, 149, 20, 151, 15, 70, 20, 124, 36, 38, 47, 86, 52, 41, 5, 52, 88, 45, 32, 3, 74, 121, 9, 159, 63, 38, 18, 143, 32, 125, 10, 39, 17, 70, 59, 120, 5, 151, 31, 52, 51, 101, 20, 124, 18, 119, 14, 151, 75, 95, 30, 35, 40, 40, 47, 5, 49, 66, 64, 101, 32, 129, 24, 125, 75, 45, 35, 48, 31, 25, 75, 143, 37, 118, 9, 62, 50, 36, 39, 25, 55, 101, 16, 5, 9, 105, 27, 135, 83, 152, 72, 82, 74, 35, 86, 142, 70, 123, 33, 3, 18, 39, 2, 118, 35, 48, 19, 104, 57, 17, 40, 159, 86, 74, 40, 83, 2, 107, 77, 97, 38, 102, 70, 129, 26, 118, 42, 29, 1, 149, 26, 2, 36, 131, 29, 10, 18, 41, 71, 128, 70, 157, 48, 55, 72, 111, 70, 110, 50, 0, 14, 122, 64, 56, 39, 107, 16, 1, 32, 147, 85, 132, 8, 118, 71, 127, 46, 101, 60, 98, 5, 147, 2, 39, 19, 14, 58, 14, 82, 134, 30, 144, 26, 143, 22, 85, 46, 21, 17, 63, 89, 78, 83, 104, 39, 13, 84, 79, 53, 106, 47, 74, 69, 27, 87, 108, 33, 64, 8, 22, 83, 69, 26, 68, 61, 106, 82, 80, 84, 122, 37, 71, 61, 62, 31, 63, 66, 47, 45, 3, 34, 76, 8, 65, 73, 19, 6, 61, 77, 79, 4, 9, 56, 16, 79, 17, 84, 67, 5, 78, 82, 154, 1, 158, 69, 60, 5, 127, 7, 46, 84, 18, 80, 16, 46, 154, 77, 93, 72, 23, 17, 151, 0, 107, 29, 110, 8, 45, 60, 19, 68, 41, 10, 93, 88, 49, 60, 137, 73, 76, 85, 71, 87, 0, 57, 99, 8, 130, 22, 137, 15, 109, 67, 141, 82, 43, 56, 32, 43, 69, 11, 21, 76, 109, 18, 152, 51, 28, 85, 120, 79, 156, 40, 47, 75, 1, 10, 131, 1, 141, 72, 9, 3, 134, 67, 90, 15, 83, 0, 143, 30, 19, 86, 46, 63, 38, 82, 17, 32, 19, 71, 86, 4, 55, 1, 74, 70, 8, 50, 141, 66, 96, 13, 63, 8, 106, 28, 123, 26, 9, 8, 37, 18, 137, 6, 113, 64, 38, 9, 61, 78, 127, 30, 157, 7, 21, 53, 20, 33, 43, 88, 23, 22, 56, 24, 157, 76, 68, 7, 13, 75, 1, 70, 20, 70, 102, 24, 149, 55, 145, 87, 103, 27, 85, 45, 60, 22, 70, 35, 24, 80, 159, 72, 103, 13, 31, 83, 143, 17, 26, 32, 145, 51, 153, 5, 19, 88, 131, 53, 114, 1, 34, 23, 134, 70, 15, 40, 118, 85, 144, 4, 151, 30, 8, 81, 94, 1, 25, 80, 113, 65, 31, 35, 53, 84, 127, 56, 20, 19, 41, 16, 9, 87, 67, 56, 136, 58, 155, 34, 124, 6, 65, 8, 10, 61, 0, 24, 21, 52, 139, 86, 70, 81, 148, 36, 30, 48, 129, 43, 81, 28, 119, 72, 75, 74, 70, 52, 49, 46, 153, 55, 147, 6, 35, 34, 73, 53, 4, 52, 62, 60, 7, 49, 84, 81, 105, 60, 95, 84, 13, 28, 151, 62, 146, 30, 9, 77, 6, 12, 87, 13, 155, 74, 27, 21, 89, 53, 130, 0, 104, 16, 130, 41, 143, 76, 122, 0, 102, 89, 72, 77, 67, 82, 72, 11, 68, 9, 157, 82, 27, 47, 69, 1, 131, 83, 64, 29, 117, 56, 56, 57, 48, 57, 92, 8, 83, 16, 108, 77, 94, 43, 28, 2, 53, 16, 31, 4, 105, 50, 113, 20, 131, 20, 67, 9, 112, 9, 110, 62, 117, 55, 101, 65, 60, 29, 149, 81, 78, 17, 45, 56, 50, 71, 61, 68, 98, 1, 47, 31, 27, 23, 139, 8, 47, 55, 77, 79, 81, 64, 112, 8, 157, 63, 91, 47, 101, 45, 74, 74, 96, 70, 139, 83, 119, 52, 2, 63, 136, 51, 6, 16, 67, 20, 12, 17, 121, 44, 94, 33, 159, 51, 103, 45, 55, 22, 70, 50, 12, 81, 86, 40, 120, 68, 86, 51, 60, 76, 70, 85, 84, 59, 67, 80, 72, 39, 157, 40, 154, 5, 41, 60, 49, 39, 23, 44, 39, 21, 70, 62, 127, 53, 60, 55, 157, 79, 20, 14, 11, 75, 25, 70, 146, 67, 29, 31, 34, 19, 96, 15, 135, 33, 5, 77, 88, 85, 26, 54, 60, 84, 31, 60, 5, 81, 31, 48, 19, 24, 144, 32, 120, 70, 142, 45, 96, 50, 157, 51, 86, 24, 30, 77, 146, 56, 9, 68, 147, 0, 89, 18, 144, 89, 139, 61, 27, 88, 108, 83, 84, 27, 43, 29, 146, 24, 43, 85, 149, 32, 106, 63, 36, 35, 136, 3, 156, 7, 97, 2, 91, 18, 21, 46, 105, 82, 8, 15, 66, 86, 122, 39, 157, 53, 124, 55, 114, 12, 35, 42, 136, 10, 70, 57, 8, 34, 106, 51, 5, 57, 97, 21, 61, 85, 106, 32, 113, 52, 150, 28, 117, 54, 149, 12, 40, 17, 77, 80, 72, 57, 104, 34, 82, 75, 133, 8, 124, 45, 134, 32, 59, 5, 112, 20, 47, 87, 30, 10, 41, 55, 17, 10, 155, 69, 28, 60, 142, 54, 75, 67, 119, 20, 58, 66, 61, 47, 154, 36, 155, 62, 9, 17, 94, 42, 136, 12, 142, 42, 63, 88, 142, 47, 33, 54, 56, 28, 20, 59, 10, 8, 125, 29, 78, 77, 104, 36, 28, 41, 59, 29, 97, 46, 90, 28, 158, 77, 117, 77, 145, 64, 31, 70, 56, 47, 112, 73, 24, 86, 8, 32, 106, 55, 53, 33, 119, 33, 27, 20, 106, 41, 126, 54, 12, 9, 147, 60, 130, 45, 133, 79, 125, 47, 13, 69, 80, 46, 11, 9, 5, 74, 45, 39, 139, 79, 112, 62, 111, 25, 90, 83, 140, 36, 115, 60, 20, 87, 50, 56, 157, 2, 20, 23, 127, 88, 100, 87, 97, 12, 20, 52, 49, 23, 26, 51, 111, 14, 109, 61, 87, 74, 114, 44, 24, 0, 106, 0, 103, 25, 141, 0, 37, 66, 37, 39, 16, 19, 14, 4, 94, 13, 144, 7, 72, 14, 14, 12, 42, 15, 36, 65, 7, 8, 107, 38, 130, 51, 43, 58, 49, 26, 137, 47, 118, 15, 97, 74, 139, 28, 113, 63, 2, 17, 103, 80, 97, 27, 15, 35, 154, 33, 151, 86, 58, 60, 88, 11, 89, 85, 99, 18, 62, 51, 96, 78, 78, 36, 156, 84, 38, 10, 24, 87, 125, 16, 36, 61, 124, 64, 16, 28, 25, 34, 42, 50, 102, 20, 138, 75, 78, 81, 96, 32, 60, 16, 43, 76, 83, 24, 144, 53, 88, 4, 14, 8, 15, 64, 66, 23, 133, 14, 1, 1, 74, 41, 64, 41, 20, 63, 62, 49, 138, 1, 91, 64, 101, 57, 138, 87, 46, 26, 38, 53, 17, 1, 115, 42, 144, 14, 2, 39, 140, 87, 108, 27, 63, 21, 20, 0, 18, 20, 13, 8, 7, 83, 149, 27, 59, 4, 83, 64, 87, 42, 57, 15, 123, 51, 133, 5, 102, 33, 20, 68, 145, 18, 118, 8, 4, 84, 116, 80, 126, 81, 87, 23, 128, 45, 140, 7, 101, 24, 108, 78, 69, 60, 155, 46, 44, 9, 27, 34, 64, 51, 136, 35, 14, 2, 10, 40, 53, 23, 144, 10, 89, 77, 26, 5, 31, 23, 145, 75, 41, 42, 52, 30, 39, 41, 151, 46, 46, 19, 42, 19, 13, 56, 89, 83, 27, 48, 34, 49, 82, 28, 30, 25, 103, 68, 95, 40, 137, 85, 71, 25, 121, 53, 76, 70, 115, 30, 122, 59, 146, 23, 7, 71, 30, 18, 153, 41, 69, 81, 88, 5, 37, 24, 15, 14, 139, 48, 139, 81, 94, 9, 27, 67, 41, 79, 135, 40, 94, 58, 37, 64, 49, 43, 158, 11, 78, 71, 154, 81, 58, 68, 58, 57, 126, 0, 19, 26, 39, 14, 32, 78, 149, 9, 83, 14, 25, 87, 30, 89, 145, 41, 39, 27, 50, 11, 55, 77, 85, 5, 40, 42, 107, 61, 141, 19, 154, 17, 49, 2, 155, 11, 62, 1, 119, 6, 123, 41, 31, 10, 125, 74, 137, 55, 79, 22, 142, 34, 103, 3, 98, 32, 86, 26, 47, 6, 74, 14, 155, 32, 94, 15, 155, 41, 44, 73, 64, 49, 150, 18, 13, 63, 100, 47, 129, 87, 60, 4, 8, 51, 29, 40, 109, 12, 134, 74, 34, 89, 100, 27, 89, 16, 101, 28, 74, 17, 152, 78, 23, 77, 32, 19, 68, 21, 51, 65, 133, 68, 104, 74, 26, 39, 19, 60, 156, 55, 116, 23, 18, 24, 72, 2, 129, 88, 43, 19, 158, 36, 18, 77, 46, 9, 136, 76, 102, 63, 0, 56, 156, 4, 119, 3, 84, 82, 55, 19, 105, 56, 0, 35, 132, 29, 96, 33, 15, 87, 147, 89, 9, 12, 127, 31, 1, 52, 51, 30, 141, 16, 26, 23, 48, 49, 105, 68, 135, 5, 112, 81, 57, 26, 114, 70, 61, 37, 32, 36, 2, 53, 109, 20, 13, 59, 106, 38, 71, 43, 57, 80, 34, 5, 69, 49, 121, 50, 45, 45, 135, 35, 25, 48, 5, 83, 132, 13, 115, 10, 154, 11, 71, 55, 37, 57, 69, 46, 24, 89, 77, 4, 133, 40, 8, 73, 45, 50, 24, 42, 17, 42, 56, 87, 79, 50, 32, 68, 133, 86, 64, 47, 151, 85, 5, 26, 94, 37, 152, 39, 20, 54, 98, 42, 156, 64, 43, 81, 144, 3, 119, 76, 123, 74, 17, 87, 113, 80, 8, 8, 36, 46, 65, 41, 53, 42, 37, 16, 80, 59, 105, 73, 33, 82, 96, 14, 136, 39, 9, 82, 147, 62, 59, 46, 120, 9, 157, 67, 66, 26, 44, 2, 124, 12, 147, 76, 90, 65, 139, 71, 138, 15, 20, 47, 102, 37, 127, 4, 1, 69, 50, 37, 122, 9, 4, 28, 44, 69, 153, 88, 89, 19, 27, 78, 34, 55, 52, 83, 128, 40, 88, 17, 69, 88, 29, 50, 80, 78, 66, 84, 155, 70, 35, 1, 31, 30, 37, 15, 36, 89, 155, 56, 144, 0, 108, 64, 18, 1, 0, 86, 49, 63, 153, 52, 22, 60, 128, 80, 80, 39, 120, 80, 68, 32, 31, 66, 117, 82, 144, 52, 112, 19, 131, 5, 105, 84, 44, 29, 129, 1, 46, 42, 101, 72, 88, 51, 22, 4, 37, 0, 75, 15, 104, 69, 84, 66, 67, 34, 159, 38, 65, 40, 36, 28, 28, 76, 122, 18, 18, 39, 50, 84, 13, 79, 121, 59, 79, 34, 14, 49, 78, 40, 142, 11, 31, 63, 124, 53, 88, 45, 87, 22, 12, 71, 83, 46, 6, 13, 121, 45, 136, 2, 37, 70, 112, 57, 18, 18, 10, 5, 39, 43, 37, 60, 87, 11, 154, 61, 120, 53, 44, 63, 91, 68, 67, 15, 12, 53, 10, 52, 139, 17, 121, 74, 153, 46, 11, 81, 81, 69, 26, 79, 64, 23, 3, 5, 106, 11, 144, 69, 91, 41, 128, 65, 53, 14, 10, 29, 110, 60, 37, 59, 104, 45, 83, 23, 28, 8, 34, 59, 92, 7, 119, 10, 105, 6, 27, 62, 108, 18, 102, 51, 149, 66, 5, 67, 37, 21, 25, 28, 148, 35, 155, 67, 68, 49, 36, 87, 76, 33, 132, 55, 125, 51, 21, 6, 80, 36, 72, 46, 1, 85, 18, 13, 21, 24, 61, 67, 67, 47, 119, 78, 30, 44, 98, 50, 7, 51, 123, 57, 53, 80, 91, 5, 107, 8, 29, 35, 57, 53, 133, 6, 49, 57, 100, 13, 64, 38, 32, 6, 19, 13, 156, 81, 136, 17, 77, 71, 57, 54, 0, 22, 69, 25, 90, 10, 130, 60, 122, 61, 59, 52, 134, 61, 141, 67, 24, 35, 127, 11, 115, 74, 14, 74, 135, 50, 139, 32, 39, 28, 81, 23, 109, 14, 97, 41, 5, 40, 93, 59, 40, 49, 23, 31, 157, 20, 102, 26, 59, 76, 34, 40, 143, 14, 130, 6, 74, 22, 3, 37, 60, 31, 97, 28, 104, 33, 70, 15, 51, 57, 70, 74, 150, 75, 146, 50, 109, 83, 105, 88, 100, 72, 44, 28, 49, 5, 132, 86, 25, 72, 11, 24, 30, 24, 136, 36, 27, 53, 93, 55, 6, 63, 58, 37, 5, 61, 101, 61, 30, 86, 118, 82, 114, 29, 102, 61, 40, 18, 65, 61, 52, 69, 17, 70, 134, 17, 110, 89, 152, 17, 26, 19, 121, 36, 138, 89, 136, 32, 42, 46, 58, 64, 112, 11, 140, 85, 59, 9, 121, 18, 108, 38, 39, 86, 29, 89, 12, 33, 7, 23, 64, 30, 120, 88, 67, 50, 131, 43, 117, 81, 99, 88, 85, 24, 103, 86, 80, 25, 53, 39, 101, 81, 109, 85, 85, 17, 64, 68, 159, 80, 29, 62, 130, 14, 0, 32, 16, 10, 74, 20, 75, 16, 155, 17, 100, 10, 0, 62, 109, 48, 104, 48, 19, 10, 30, 84, 146, 41, 148, 67, 5, 7, 156, 8, 128, 62, 16, 27, 0, 43, 87, 48, 66, 79, 21, 56, 145, 58, 22, 37, 151, 77, 120, 60, 23, 1, 46, 68, 50, 57, 104, 44, 90, 34, 19, 66, 140, 46, 11, 40, 147, 41, 137, 59, 21, 80, 66, 24, 28, 17, 119, 0, 91, 87, 49, 34, 23, 82, 5, 21, 59, 88, 93, 39, 142, 55, 52, 63, 107, 36, 113, 71, 90, 14, 139, 6, 72, 49, 70, 69, 154, 52, 48, 84, 11, 72, 27, 14, 69, 80, 109, 55, 48, 72, 94, 31, 87, 59, 91, 23, 86, 76, 67, 52, 47, 57, 129, 50, 55, 7, 60, 82, 121, 56, 49, 71, 57, 85, 90, 6, 117, 31, 6, 46, 76, 13, 138, 32, 52, 43, 68, 41, 109, 21, 60, 43, 19, 5, 24, 31, 146, 11, 56, 4, 96, 42, 120, 8, 64, 88, 7, 81, 58, 46, 145, 68, 153, 8, 147, 59, 5, 84, 139, 82, 67, 33, 28, 38, 19, 11, 139, 77, 11, 79, 159, 2, 118, 74, 23, 88, 83, 15, 132, 58, 78, 85, 17, 71, 80, 33, 112, 35, 30, 45, 48, 50, 94, 10, 28, 52, 138, 34, 63, 29, 31, 81, 58, 58, 85, 34, 96, 22, 98, 23, 78, 27, 59, 50, 132, 0, 127, 41, 19, 31, 98, 28, 142, 80, 22, 25, 92, 69, 141, 12, 146, 59, 85, 39, 70, 55, 28, 14, 149, 54, 13, 57, 32, 14, 86, 57, 86, 42, 97, 29, 100, 24, 58, 87, 30, 3, 110, 73, 15, 56, 79, 43, 78, 79, 2, 30, 26, 52, 84, 34, 69, 42, 25, 20, 90, 41, 104, 64, 148, 43, 109, 81, 51, 64, 84, 84, 96, 20, 58, 62, 156, 10, 72, 48, 117, 45, 74, 52, 25, 73, 8, 2, 145, 10, 91, 61, 149, 0, 155, 61, 5, 8, 138, 35, 25, 59, 156, 39, 42, 74, 8, 86, 61, 2, 138, 31, 9, 69, 114, 84, 121, 51, 22, 17, 47, 16, 109, 77, 90, 12, 107, 82, 8, 47, 102, 87, 155, 76, 117, 58, 112, 44, 123, 87, 66, 6, 27, 49, 156, 22, 55, 8, 91, 58, 89, 42, 33, 37, 93, 56, 1, 17, 64, 54, 141, 30, 9, 61, 54, 76, 57, 49, 110, 15, 3, 76, 108, 58, 31, 25, 127, 38, 77, 75, 110, 24, 93, 31, 56, 36, 28, 43, 59, 26, 2, 28, 81, 29, 117, 87, 159, 74, 42, 76, 58, 2, 115, 2, 154, 74, 143, 72, 149, 84, 61, 0, 158, 53, 71, 8, 0, 79, 155, 72, 95, 43, 76, 77, 66, 88, 22, 38, 15, 21, 12, 22, 36, 9, 53, 17, 27, 12, 103, 31, 157, 89, 89, 72, 107, 35, 33, 60, 138, 83, 45, 25, 100, 58, 44, 0, 6, 37, 159, 1, 150, 65, 15, 75, 55, 36, 143, 81, 141, 48, 122, 29, 150, 14, 103, 32, 25, 58, 18, 63, 12, 74, 147, 70, 115, 23, 125, 34, 52, 38, 117, 5, 54, 26, 32, 18, 0, 60, 149, 7, 9, 40, 138, 13, 77, 47, 10, 7, 79, 41, 151, 56, 128, 53, 109, 44, 12, 56, 88, 23, 110, 27, 103, 70, 67, 6, 106, 19, 23, 7, 121, 12, 38, 8, 93, 1, 88, 52, 7, 31, 155, 43, 92, 84, 81, 43, 109, 52, 53, 24, 11, 80, 33, 27, 129, 3, 152, 89, 26, 56, 113, 48, 83, 25, 79, 7, 127, 49, 11, 41, 58, 5, 121, 33, 0, 48, 130, 1, 53, 35, 146, 73, 94, 78, 149, 42, 73, 73, 144, 81, 140, 0, 61, 89, 126, 70, 42, 57, 69, 78, 24, 13, 50, 27, 131, 84, 106, 70, 16, 83, 43, 69, 1, 31, 100, 35, 91, 37, 152, 44, 111, 20, 10, 82, 109, 69, 153, 75, 107, 27, 149, 63, 65, 25, 51, 76, 60, 85, 97, 31, 109, 78, 52, 59, 124, 89, 10, 89, 95, 20, 88, 28, 121, 88, 53, 55, 129, 55, 147, 15, 10, 73, 99, 16, 63, 85, 56, 18, 155, 16, 23, 84, 53, 21, 103, 40, 85, 38, 28, 11, 112, 16, 149, 77, 113, 1, 95, 74, 105, 13, 118, 17, 6, 78, 62, 54, 69, 9, 90, 5, 123, 8, 148, 61, 135, 73, 140, 54, 47, 70, 85, 53, 2, 5, 102, 58, 88, 49, 16, 4, 17, 35, 20, 44, 55, 4, 150, 37, 142, 5, 7, 1, 32, 0, 82, 30, 137, 60, 137, 84, 91, 60, 27, 70, 135, 55, 126, 45, 3, 13, 129, 56, 120, 89, 157, 38, 2, 6, 150, 8, 116, 16, 158, 50, 9, 57, 2, 62, 35, 32, 52, 60, 104, 15, 73, 85, 129, 29, 107, 39, 125, 21, 105, 40, 104, 7, 154, 43, 15, 77, 131, 36, 50, 26, 158, 41, 119, 62, 51, 58, 73, 75, 32, 15, 32, 83, 91, 45, 148, 22, 75, 48, 159, 55, 103, 76, 73, 17, 30, 65, 157, 3, 110, 33, 34, 24, 94, 7, 44, 42, 48, 88, 58, 9, 81, 11, 70, 73, 70, 75, 21, 14, 107, 70, 7, 35, 121, 48, 156, 65, 57, 56, 133, 61, 136, 31, 101, 0, 117, 80, 130, 89, 142, 46, 111, 46, 82, 62, 50, 39, 0, 31, 59, 31, 13, 89, 22, 79, 39, 39, 22, 0, 84, 86, 105, 66, 101, 58, 5, 58, 54, 17, 121, 66, 46, 32, 66, 65, 67, 77, 113, 5, 45, 87, 53, 43, 132, 49, 129, 36, 152, 18, 32, 44, 30, 69, 92, 41, 159, 65, 49, 14, 90, 80, 111, 27, 38, 88, 135, 66, 64, 81, 49, 76, 73, 64, 93, 38, 134, 18, 145, 36, 125, 57, 36, 36, 108, 22, 34, 75, 123, 53, 50, 77, 83, 57, 75, 21, 35, 83, 89, 8, 126, 88, 46, 53, 42, 62, 73, 69, 132, 88, 17, 39, 155, 25, 83, 60, 21, 69, 119, 68, 141, 26, 12, 85, 135, 64, 111, 55, 41, 65, 133, 31, 23, 72, 115, 89, 146, 31, 53, 26, 31, 33, 17, 83, 134, 82, 58, 7, 150, 67, 33, 67, 147, 39, 23, 46, 8, 70, 86, 63, 98, 22, 123, 12, 96, 52, 158, 2, 152, 15, 46, 36, 36, 19, 119, 75, 88, 64, 66, 1, 71, 56, 145, 3, 60, 47, 20, 56, 93, 60, 65, 71, 41, 28, 60, 10, 66, 4, 26, 2, 158, 56, 25, 9, 91, 22, 8, 26, 126, 79, 30, 31, 107, 89, 46, 31, 23, 13, 112, 17, 109, 72, 51, 42, 27, 64, 153, 51, 127, 55, 155, 80, 57, 70, 85, 19, 62, 89, 118, 12, 20, 51, 27, 60, 70, 79, 119, 87, 113, 83, 140, 34, 148, 26, 97, 1, 123, 49, 62, 19, 92, 19, 133, 17, 37, 8, 52, 80, 6, 88, 115, 12, 22, 28, 22, 76, 114, 60, 20, 61, 107, 53, 32, 13, 47, 13, 69, 53, 143, 26, 18, 36, 3, 73, 23, 40, 9, 21, 123, 34, 5, 80, 91, 8, 132, 52, 36, 16, 126, 59, 66, 47, 88, 19, 45, 36, 72, 15, 66, 52, 88, 20, 71, 62, 50, 58, 153, 6, 2, 80, 135, 31, 9, 5, 91, 2, 108, 0, 26, 37, 25, 86, 42, 40, 54, 67, 73, 79, 100, 9, 14, 34, 36, 6, 65, 85, 132, 12, 42, 89, 47, 76, 2, 51, 92, 29, 49, 64, 8, 64, 47, 8, 72, 53, 42, 21, 18, 35, 130, 71, 27, 41, 111, 40, 76, 76, 94, 25, 80, 52, 52, 3, 69, 70, 130, 17, 4, 56, 121, 80, 0, 42, 83, 67, 114, 76, 122, 12, 35, 7, 77, 32, 30, 80, 155, 5, 143, 7, 47, 83, 17, 79, 27, 83, 20, 72, 33, 79, 77, 48, 98, 74, 148, 16, 137, 13, 65, 76, 20, 15, 39, 8, 42, 10, 70, 88, 12, 41, 64, 63, 44, 40, 64, 44, 140, 52, 113, 76, 87, 35, 146, 16, 134, 48, 137, 82, 65, 26, 107, 9, 17, 88, 30, 14, 4, 4, 145, 37, 114, 28, 30, 53, 109, 60, 125, 82, 1, 49, 149, 53, 132, 48, 37, 71, 144, 28, 118, 6, 31, 27, 24, 40, 96, 38, 111, 89, 70, 72, 147, 64, 106, 71, 55, 9, 13, 67, 125, 42, 120, 29, 36, 41, 126, 21, 34, 47, 148, 64, 78, 84, 7, 86, 157, 50, 27, 85, 62, 75, 143, 10, 52, 61, 113, 85, 52, 84, 60, 86, 69, 41, 100, 36, 101, 66, 61, 18, 69, 28, 58, 77, 109, 30, 31, 18, 92, 68, 50, 10, 147, 54, 103, 21, 138, 41, 62, 84, 83, 83, 138, 63, 153, 27, 25, 36, 36, 20, 137, 20, 119, 13, 32, 11, 46, 30, 79, 36, 15, 8, 125, 45, 120, 30, 157, 10, 120, 46, 98, 87, 75, 62, 5, 30, 82, 54, 89, 82, 150, 46, 105, 42, 105, 34, 77, 20, 120, 65, 128, 60, 102, 67, 127, 29, 53, 59, 148, 39, 152, 63, 4, 61, 35, 55, 33, 46, 32, 32, 59, 64, 55, 40, 125, 30, 93, 64, 38, 7, 19, 69, 93, 36, 94, 32, 57, 7, 15, 55, 149, 71, 57, 81, 152, 24, 100, 77, 91, 53, 114, 85, 54, 65, 55, 50, 151, 55, 38, 60, 95, 21, 154, 18, 54, 37, 103, 23, 109, 63, 144, 79, 17, 66, 105, 71, 16, 15, 50, 44, 144, 83, 40, 72, 144, 62, 134, 54, 1, 84, 57, 8, 117, 6, 35, 78, 58, 85, 4, 81, 68, 15, 92, 18, 40, 54, 116, 29, 99, 62, 56, 59, 48, 89, 135, 12, 13, 46, 137, 46, 1, 35, 73, 36, 76, 12, 76, 46, 143, 84, 51, 18, 70, 28, 159, 20, 12, 51, 114, 46, 138, 17, 68, 34, 57, 44, 142, 61, 43, 77, 141, 2, 22, 18, 37, 43, 17, 68, 81, 63, 17, 54, 133, 7, 142, 28, 80, 20, 7, 55, 25, 12, 42, 3, 103, 43, 157, 29, 51, 63, 156, 37, 18, 86, 140, 47, 129, 65, 147, 48, 63, 67, 102, 0, 70, 84, 3, 16, 48, 11, 68, 79, 103, 15, 79, 13, 73, 31, 158, 23, 86, 69, 128, 58, 104, 24, 1, 86, 39, 55, 80, 19, 4, 10, 108, 65, 117, 53, 59, 23, 89, 47, 12, 78, 5, 75, 60, 78, 44, 66, 127, 51, 71, 1, 47, 62, 45, 33, 106, 24, 43, 39, 120, 0, 64, 11, 33, 64, 120, 1, 67, 60, 51, 86, 109, 75, 2, 10, 138, 73, 9, 10, 132, 71, 112, 80, 88, 2, 79, 65, 85, 49, 38, 80, 49, 86, 39, 18, 77, 73, 143, 44, 39, 58, 145, 13, 102, 31, 136, 40, 127, 37, 141, 86, 10, 42, 136, 73, 127, 54, 48, 6, 148, 0, 21, 84, 86, 13, 65, 84, 43, 47, 73, 58, 85, 41, 66, 54, 29, 30, 32, 79, 68, 85, 47, 17, 30, 5, 67, 16, 56, 25, 153, 84, 119, 8, 97, 55, 13, 40, 4, 82, 113, 42, 32, 64, 110, 61, 153, 67, 138, 9, 110, 76, 149, 68, 69, 77, 6, 19, 69, 35, 106, 16, 85, 60, 84, 40, 133, 72, 131, 34, 15, 69, 12, 2, 137, 88, 47, 54, 113, 55, 25, 16, 119, 53, 111, 50, 75, 49, 30, 76, 125, 12, 55, 64, 98, 24, 81, 16, 145, 11, 104, 79, 98, 36, 89, 68, 154, 29, 83, 21, 23, 36, 151, 71, 7, 89, 31, 51, 123, 83, 87, 24, 143, 71, 159, 66, 67, 79, 76, 16, 107, 55, 97, 43, 108, 53, 48, 67, 5, 25, 107, 66, 106, 67, 35, 18, 1, 13, 94, 49, 0, 33, 28, 66, 96, 8, 44, 70, 126, 5, 22, 23, 119, 38, 146, 88, 12, 19, 134, 49, 6, 89, 22, 21, 92, 70, 110, 85, 92, 25, 75, 44, 127, 65, 66, 15, 92, 82, 109, 68, 84, 12, 158, 80, 38, 79, 102, 36, 82, 60, 159, 57, 121, 86, 101, 34, 23, 66, 0, 12, 94, 63, 106, 50, 12, 88, 100, 71, 134, 60, 137, 69, 79, 35, 130, 74, 35, 63, 54, 77, 147, 50, 122, 66, 26, 18, 149, 76, 134, 78, 35, 51, 73, 70, 48, 34, 84, 54, 158, 0, 159, 7, 146, 7, 78, 7, 132, 24, 70, 14, 113, 35, 85, 88, 54, 42, 107, 46, 77, 52, 84, 60, 43, 79, 105, 59, 45, 34, 98, 88, 10, 62, 141, 35, 17, 27, 55, 10, 0, 82, 56, 2, 102, 17, 106, 56, 26, 83, 142, 75, 138, 28, 98, 51, 134, 10, 3, 53, 69, 76, 56, 42, 124, 42, 146, 87, 12, 57, 123, 70, 129, 38, 59, 65, 50, 4, 12, 38, 107, 41, 29, 36, 101, 38, 22, 35, 156, 30, 132, 11, 29, 52, 56, 79, 109, 1, 152, 48, 130, 61, 52, 21, 1, 21, 82, 48, 116, 67, 74, 38, 9, 16, 115, 83, 43, 67, 16, 41, 62, 9, 70, 40, 150, 41, 152, 57, 23, 39, 8, 39, 90, 70, 131, 65, 113, 56, 34, 0, 68, 47, 105, 18, 100, 63, 98, 70, 88, 34, 109, 13, 10, 78, 50, 47, 102, 34, 125, 81, 6, 28, 149, 83, 62, 36, 143, 21, 27, 54, 94, 64, 57, 6, 79, 89, 157, 46, 123, 52, 14, 39, 3, 47, 124, 87, 4, 47, 94, 29, 68, 39, 138, 85, 67, 73, 108, 61, 146, 26, 110, 57, 146, 28, 140, 59, 91, 62, 135, 11, 88, 37, 43, 75, 47, 14, 101, 11, 87, 81, 41, 88, 82, 71, 18, 70, 123, 72, 58, 44, 120, 10, 26, 35, 95, 4, 89, 34, 63, 79, 101, 54, 136, 88, 20, 34, 124, 19, 4, 11, 147, 74, 113, 60, 138, 49, 64, 82, 34, 17, 47, 61, 143, 73, 134, 42, 15, 18, 121, 24, 32, 72, 63, 31, 44, 15, 47, 37, 153, 0, 70, 32, 123, 79, 87, 70, 32, 29, 9, 43, 6, 83, 21, 37, 111, 61, 22, 42, 153, 34, 69, 45, 57, 45, 52, 87, 87, 10, 111, 45, 86, 48, 61, 60, 18, 40, 158, 87, 100, 4, 26, 80, 95, 31, 74, 82, 62, 85, 45, 14, 43, 0, 35, 24, 75, 37, 6, 8, 159, 13, 37, 73, 47, 50, 44, 88, 59, 81, 108, 1, 151, 48, 106, 2, 143, 39, 60, 1, 103, 58, 2, 3, 111, 38, 110, 46, 38, 76, 18, 21, 25, 32, 58, 52, 56, 33, 78, 58, 78, 15, 155, 53, 40, 37, 43, 22, 51, 32, 27, 36, 86, 25, 5, 54, 71, 11, 143, 74, 115, 26, 45, 0, 143, 43, 48, 22, 126, 69, 99, 32, 28, 53, 11, 88, 36, 73, 62, 43, 158, 25, 53, 48, 9, 37, 57, 76, 108, 84, 159, 82, 125, 89, 117, 41, 114, 24, 29, 26, 40, 71, 62, 55, 77, 40, 121, 49, 118, 60, 76, 24, 60, 88, 128, 69, 156, 61, 153, 57, 34, 66, 86, 56, 22, 82, 147, 56, 122, 13, 19, 33, 2, 76, 44, 18, 106, 20, 18, 73, 157, 58, 52, 81, 123, 77, 13, 31, 84, 62, 136, 52, 5, 27, 115, 36, 129, 14, 46, 82, 159, 67, 100, 67, 18, 68, 16, 50, 27, 55, 1, 68, 109, 79, 26, 81, 67, 45, 55, 65, 67, 69, 29, 45, 83, 86, 26, 17, 14, 44, 139, 42, 36, 10, 47, 52, 55, 2, 64, 40, 148, 73, 64, 64, 109, 24, 124, 50, 115, 63, 25, 67, 151, 76, 60, 64, 114, 10, 122, 51, 126, 8, 7, 6, 144, 84, 11, 46, 128, 61, 158, 46, 77, 31, 52, 37, 129, 75, 3, 69, 45, 40, 89, 71, 141, 63, 96, 84, 128, 39, 102, 65, 105, 36, 72, 85, 154, 58, 144, 73, 111, 48, 64, 33, 15, 62, 86, 70, 28, 63, 144, 30, 92, 61, 113, 59, 60, 35, 56, 41, 144, 24, 5, 56, 41, 63, 87, 21, 102, 22, 112, 77, 80, 30, 85, 28, 31, 49, 98, 25, 132, 56, 20, 5, 73, 62, 95, 48, 156, 72, 62, 71, 134, 26, 113, 77, 69, 65, 36, 70, 35, 77, 138, 48, 11, 0, 47, 34, 142, 2, 43, 61, 26, 85, 44, 21, 76, 68, 148, 63, 47, 85, 10, 71, 131, 66, 139, 67, 121, 6, 134, 51, 144, 85, 109, 70, 44, 16, 36, 24, 30, 6, 80, 29, 84, 87, 61, 33, 93, 83, 110, 56, 8, 55, 28, 46, 159, 17, 87, 19, 53, 88, 83, 59, 115, 47, 28, 23, 117, 43, 18, 5, 109, 26, 136, 23, 22, 71, 92, 35, 83, 33, 81, 19, 131, 14, 113, 36, 4, 27, 140, 13, 35, 41, 99, 52, 31, 13, 122, 47, 32, 16, 114, 65, 44, 67, 85, 40, 143, 79, 146, 80, 0, 9, 101, 78, 12, 86, 89, 38, 68, 78, 132, 35, 143, 34, 61, 20, 127, 47, 4, 9, 131, 2, 122, 81, 11, 69, 50, 38, 6, 7, 100, 37, 26, 61, 2, 60, 101, 17, 156, 17, 101, 84, 1, 81, 119, 85, 2, 54, 142, 3, 112, 53, 15, 88, 17, 52, 16, 44, 67, 55, 7, 29, 136, 55, 125, 77, 95, 77, 159, 33, 24, 14, 36, 60, 150, 24, 116, 77, 82, 18, 146, 40, 154, 60, 89, 65, 81, 65, 98, 78, 143, 0, 49, 40, 70, 47, 152, 3, 119, 56, 40, 60, 154, 59, 56, 83, 105, 9, 112, 30, 29, 64, 139, 50, 132, 45, 33, 85, 51, 43, 136, 15, 147, 67, 29, 29, 130, 66, 29, 88, 21, 59, 46, 28, 104, 2, 54, 38, 109, 38, 17, 75, 46, 69, 4, 46, 79, 49, 135, 34, 94, 73, 6, 42, 12, 35, 23, 58, 125, 76, 123, 22, 118, 11, 68, 84, 23, 75, 129, 17, 51, 5, 74, 79, 48, 32, 105, 11, 152, 14, 91, 65, 155, 20, 132, 16, 36, 17, 31, 56, 80, 61, 8, 82, 15, 47, 157, 72, 114, 22, 51, 44, 25, 85, 123, 81, 74, 23, 134, 72, 11, 3, 47, 89, 29, 7, 52, 11, 2, 13, 130, 63, 116, 49, 148, 55, 103, 12, 11, 36, 147, 71, 118, 69, 47, 30, 16, 1, 93, 47, 72, 1, 1, 63, 151, 5, 48, 51, 116, 45, 37, 22, 78, 73, 30, 52, 51, 35, 47, 67, 152, 49, 76, 44, 39, 12, 21, 57, 112, 67, 99, 53, 93, 54, 43, 41, 109, 42, 36, 64, 4, 31, 73, 66, 87, 84, 50, 42, 100, 38, 29, 34, 131, 80, 84, 53, 110, 13, 118, 14, 146, 8, 77, 5, 51, 6, 158, 30, 132, 27, 50, 54, 13, 85, 96, 47, 89, 59, 5, 45, 53, 61, 89, 35, 69, 32, 148, 33, 4, 21, 10, 35, 123, 6, 63, 71, 107, 12, 33, 18, 34, 33, 2, 83, 13, 29, 126, 9, 108, 17, 63, 65, 144, 19, 94, 4, 68, 6, 77, 88, 55, 66, 123, 80, 150, 60, 155, 58, 91, 46, 146, 86, 69, 66, 156, 19, 86, 20, 112, 6, 75, 54, 75, 29, 56, 58, 123, 27, 27, 76, 83, 48, 98, 31, 69, 36, 90, 17, 40, 32, 154, 10, 140, 20, 147, 11, 119, 31, 56, 46, 143, 53, 142, 24, 68, 23, 64, 50, 119, 63, 0, 84, 91, 1, 47, 38, 159, 44, 128, 79, 1, 16, 16, 77, 140, 4, 120, 66, 111, 69, 112, 47, 40, 62, 26, 25, 78, 47, 42, 18, 117, 18, 137, 72, 137, 68, 13, 88, 15, 89, 9, 88, 41, 29, 26, 82, 31, 76, 49, 58, 57, 46, 82, 22, 120, 31, 66, 67, 61, 83, 139, 39, 85, 57, 158, 44, 19, 18, 78, 19, 113, 49, 0, 68, 128, 83, 56, 73, 77, 53, 10, 2, 43, 52, 99, 22, 97, 73, 37, 6, 34, 25, 61, 19, 24, 69, 85, 51, 79, 88, 94, 55, 10, 43, 94, 30, 40, 88, 149, 10, 87, 12, 4, 68, 39, 78, 125, 23, 85, 0, 6, 52, 25, 19, 118, 26, 150, 32, 25, 22, 22, 27, 45, 9, 46, 15, 88, 56, 96, 62, 37, 12, 95, 38, 37, 11, 147, 81, 57, 57, 56, 70, 78, 32, 103, 28, 80, 27, 139, 46, 146, 33, 96, 61, 38, 70, 28, 59, 81, 40, 141, 27, 59, 16, 131, 7, 141, 47, 141, 20, 35, 35, 87, 36, 121, 71, 85, 78, 76, 79, 83, 20, 2, 52, 88, 47, 96, 3, 23, 21, 87, 4, 49, 50, 135, 24, 70, 63, 141, 3, 24, 88, 71, 15, 134, 64, 28, 50, 19, 9, 21, 4, 51, 77, 98, 37, 121, 35, 133, 41, 58, 83, 6, 58, 121, 82, 16, 0, 128, 13, 11, 45, 143, 50, 131, 51, 89, 63, 136, 89, 149, 43, 130, 10, 43, 16, 84, 5, 94, 48, 139, 10, 46, 75, 53, 4, 10, 12, 126, 18, 149, 25, 134, 38, 143, 51, 124, 20, 159, 71, 58, 6, 50, 62, 136, 27, 16, 6, 119, 1, 42, 87, 108, 35, 130, 53, 46, 3, 28, 12, 90, 63, 80, 47, 56, 52, 8, 63, 0, 15, 155, 9, 40, 76, 20, 43, 40, 63, 56, 78, 42, 51, 24, 46, 0, 44, 39, 83, 115, 22, 146, 17, 158, 3, 132, 32, 54, 9, 91, 11, 0, 63, 75, 59, 101, 15, 141, 62, 100, 21, 93, 34, 63, 30, 122, 48, 148, 88, 154, 51, 59, 12, 151, 4, 14, 45, 139, 3, 22, 84, 8, 19, 124, 73, 138, 50, 10, 39, 158, 70, 114, 3, 99, 82, 124, 86, 62, 79, 66, 17, 80, 50, 36, 79, 141, 78, 10, 30, 74, 64, 128, 89, 69, 15, 45, 75, 113, 88, 39, 3, 86, 72, 95, 10, 111, 10, 16, 30, 54, 53, 42, 34, 100, 5, 81, 14, 44, 79, 124, 5, 86, 73, 105, 29, 38, 15, 82, 35, 64, 22, 79, 0, 123, 3, 137, 41, 12, 67, 35, 70, 147, 21, 95, 32, 157, 27, 112, 5, 74, 30, 6, 56, 130, 54, 106, 77, 158, 7, 100, 74, 30, 85, 158, 40, 144, 36, 81, 46, 32, 26, 102, 71, 4, 12, 30, 9, 29, 73, 26, 8, 80, 54, 40, 39, 140, 75, 34, 43, 75, 4, 153, 64, 124, 26, 35, 81, 20, 85, 154, 45, 107, 56, 114, 87, 138, 37, 139, 2, 126, 53, 73, 13, 103, 63, 30, 12, 2, 73, 28, 9, 82, 40, 11, 89, 78, 86, 76, 30, 138, 81, 6, 20, 15, 45, 58, 74, 119, 4, 45, 13, 56, 56, 154, 69, 14, 20, 118, 67, 30, 30, 29, 84, 120, 36, 142, 81, 133, 51, 119, 44, 39, 72, 104, 17, 99, 2, 85, 27, 17, 12, 135, 57, 81, 25, 110, 21, 43, 30, 137, 38, 102, 54, 68, 43, 43, 54, 3, 88, 138, 74, 95, 86, 152, 76, 22, 64, 98, 56, 7, 43, 74, 65, 101, 52, 58, 47, 148, 3, 112, 88, 90, 51, 137, 66, 77, 27, 42, 17, 108, 15, 5, 4, 1, 11, 138, 82, 3, 25, 74, 44, 13, 71, 145, 25, 60, 6, 91, 48, 39, 89, 42, 83, 100, 60, 70, 7, 136, 54, 42, 2, 133, 55, 22, 6, 136, 71, 6, 1, 16, 9, 139, 1, 68, 57, 73, 33, 49, 85, 103, 66, 132, 31, 128, 6, 1, 14, 148, 47, 14, 65, 9, 42, 59, 58, 126, 27, 97, 17, 111, 77, 15, 65, 133, 9, 121, 76, 97, 75, 42, 7, 70, 86, 49, 37, 4, 78, 156, 76, 117, 38, 131, 61, 20, 42, 52, 17, 23, 14, 98, 52, 108, 68, 22, 39, 93, 0, 41, 17, 111, 39, 156, 83, 117, 20, 87, 16, 8, 57, 116, 17, 70, 49, 154, 57, 135, 4, 136, 16, 159, 42, 70, 87, 29, 14, 15, 79, 112, 82, 124, 0, 86, 49, 21, 49, 1, 36, 34, 73, 156, 35, 16, 82, 56, 3, 26, 38, 25, 76, 109, 73, 49, 82, 68, 89, 38, 0, 82, 47, 42, 58, 152, 88, 36, 7, 80, 23, 113, 79, 5, 15, 159, 22, 96, 10, 94, 89, 63, 76, 155, 86, 61, 84, 89, 50, 128, 9, 110, 71, 10, 50, 47, 81, 6, 38, 4, 22, 51, 25, 62, 77, 56, 38, 107, 42, 111, 53, 118, 32, 80, 63, 17, 17, 23, 73, 129, 53, 60, 19, 27, 74, 90, 1, 128, 81, 4, 60, 85, 23, 6, 39, 64, 69, 76, 87, 19, 14, 81, 9, 108, 25, 135, 48, 48, 53, 82, 32, 147, 49, 144, 65, 7, 65, 49, 30, 42, 72, 88, 58, 126, 50, 75, 60, 114, 40, 78, 2, 71, 7, 22, 13, 6, 35, 120, 14, 4, 39, 100, 85, 145, 23, 115, 81, 59, 11, 119, 32, 83, 53, 154, 26, 1, 55, 52, 66, 92, 60, 41, 58, 88, 0, 47, 24, 55, 6, 96, 80, 135, 37, 82, 42, 85, 58, 134, 45, 79, 72, 47, 20, 84, 8, 73, 19, 77, 21, 62, 41, 109, 32, 18, 82, 79, 86, 135, 89, 40, 75, 76, 54, 24, 66, 33, 15, 42, 20, 76, 1, 14, 47, 145, 83, 157, 23, 135, 41, 113, 30, 96, 28, 103, 19, 26, 16, 77, 61, 152, 19, 8, 69, 21, 75, 95, 22, 5, 11, 93, 61, 106, 85, 63, 34, 31, 5, 152, 25, 100, 2, 109, 51, 45, 46, 122, 80, 130, 78, 61, 80, 58, 59, 78, 63, 78, 6, 73, 12, 17, 22, 151, 57, 72, 9, 52, 20, 145, 89, 50, 19, 64, 13, 70, 82, 11, 33, 43, 2, 94, 54, 107, 76, 115, 21, 133, 67, 45, 57, 84, 73, 131, 24, 3, 59, 21, 27, 123, 5, 34, 67, 109, 10, 9, 35, 95, 34, 132, 72, 142, 16, 126, 47, 66, 69, 61, 24, 67, 86, 56, 29, 1, 62, 148, 21, 101, 14, 27, 59, 79, 84, 137, 87, 157, 52, 8, 53, 96, 1, 40, 73, 91, 19, 107, 5, 157, 74, 10, 28, 61, 21, 119, 81, 61, 54, 112, 12, 17, 36, 112, 52, 37, 37, 127, 87, 67, 24, 24, 9, 69, 17, 113, 39, 108, 60, 83, 77, 139, 16, 4, 73, 142, 51, 53, 32, 153, 45, 36, 85, 155, 37, 25, 7, 94, 39, 8, 3, 127, 80, 97, 26, 49, 45, 131, 9, 128, 36, 101, 27, 84, 61, 131, 81, 29, 25, 61, 15, 93, 89, 3, 28, 103, 50, 18, 66, 141, 29, 12, 79, 78, 65, 158, 4, 155, 31, 153, 56, 49, 29, 144, 63, 25, 54, 34, 87, 39, 69, 135, 88, 21, 65, 144, 6, 85, 2, 27, 73, 30, 15, 142, 84, 16, 52, 158, 39, 56, 68, 98, 27, 26, 24, 20, 76, 127, 33, 142, 88, 157, 24, 90, 7, 80, 89, 55, 47, 4, 37, 145, 56, 76, 59, 83, 88, 50, 85, 97, 67, 113, 73, 8, 52, 87, 0, 131, 17, 119, 23, 121, 25, 48, 4, 114, 61, 20, 50, 10, 24, 147, 17, 122, 28, 79, 14, 12, 61, 65, 55, 48, 54, 152, 45, 124, 48, 43, 55, 87, 30, 140, 39, 94, 0, 23, 55, 137, 89, 9, 15, 142, 31, 12, 80, 158, 10, 129, 74, 55, 21, 26, 31, 74, 62, 53, 44, 110, 48, 16, 72, 88, 26, 41, 85, 26, 74, 34, 37, 67, 29, 35, 52, 31, 68, 41, 26, 46, 66, 123, 15, 73, 6, 29, 20, 92, 85, 55, 27, 20, 11, 156, 6, 3, 31, 134, 44, 89, 45, 156, 53, 4, 55, 35, 3, 158, 57, 59, 66, 152, 22, 142, 79, 79, 30, 139, 80, 17, 57, 102, 42, 73, 28, 47, 40, 17, 53, 23, 48, 135, 43, 91, 86, 65, 88, 21, 48, 52, 10, 114, 80, 33, 8, 141, 15, 74, 11, 131, 15, 111, 33, 83, 27, 100, 33, 149, 69, 87, 83, 131, 46, 46, 27, 153, 68, 104, 87, 61, 72, 40, 53, 62, 18, 72, 19, 51, 46, 156, 82, 108, 76, 71, 72, 153, 66, 62, 74, 3, 66, 138, 27, 102, 75, 61, 8, 71, 38, 117, 25, 95, 8, 77, 57, 33, 17, 0, 6, 70, 42, 36, 57, 125, 61, 44, 43, 36, 74, 57, 22, 1, 19, 119, 19, 68, 88, 0, 39, 91, 50, 129, 22, 157, 21, 52, 9, 122, 63, 94, 2, 64, 48, 141, 73, 84, 6, 147, 5, 93, 17, 60, 15, 144, 56, 107, 18, 87, 51, 52, 42, 152, 36, 114, 4, 70, 12, 25, 68, 38, 23, 68, 70, 131, 78, 111, 64, 0, 61, 100, 70, 116, 19, 16, 43, 1, 2, 26, 58, 118, 44, 83, 81, 63, 45, 127, 67, 130, 25, 152, 50, 56, 55, 33, 56, 133, 46, 68, 20, 131, 45, 108, 70, 116, 37, 137, 79, 42, 38, 22, 31, 139, 53, 20, 58, 66, 7, 86, 22, 87, 69, 26, 70, 142, 74, 28, 80, 23, 25, 88, 53, 92, 57, 95, 62, 102, 48, 118, 62, 63, 83, 14, 24, 35, 39, 58, 40, 59, 60, 8, 23, 64, 4, 60, 71, 58, 23, 148, 48, 125, 37, 143, 58, 104, 30, 112, 38, 145, 48, 71, 5, 50, 43, 157, 70, 120, 6, 120, 77, 82, 6, 104, 22, 118, 68, 122, 11, 105, 31, 118, 37, 48, 75, 33, 51, 157, 83, 149, 23, 133, 80, 120, 28, 134, 66, 25, 79, 146, 46, 100, 15, 23, 37, 5, 44, 151, 43, 96, 55, 33, 32, 141, 88, 152, 83, 130, 50, 59, 80, 128, 18, 112, 41, 66, 10, 13, 66, 29, 5, 18, 62, 67, 27, 77, 23, 110, 10, 79, 32, 44, 48, 79, 68, 86, 27, 42, 37, 133, 18, 31, 6, 147, 44, 123, 9, 149, 86, 107, 30, 102, 23, 48, 85, 159, 31, 150, 76, 130, 11, 70, 25, 79, 8, 52, 72, 99, 71, 99, 81, 151, 33, 131, 28, 105, 61, 50, 36, 134, 24, 76, 32, 139, 14, 92, 54, 11, 30, 89, 24, 54, 70, 24, 37, 147, 31, 142, 53, 102, 77, 153, 4, 132, 46, 103, 49, 59, 75, 25, 82, 143, 55, 102, 30, 46, 2, 117, 65, 122, 38, 45, 19, 107, 11, 41, 21, 53, 50, 97, 83, 115, 64, 44, 80, 36, 3, 149, 48, 62, 24, 53, 65, 7, 70, 111, 65, 135, 13, 146, 42, 63, 55, 49, 83, 60, 63, 132, 20, 133, 20, 63, 77, 39, 40, 69, 59, 3, 7, 23, 43, 21, 89, 25, 21, 88, 9, 11, 68, 32, 21, 39, 33, 64, 67, 21, 25, 39, 45, 88, 3, 84, 79, 7, 11, 140, 81, 91, 72, 10, 46, 116, 55, 69, 85, 159, 62, 122, 34, 108, 21, 100, 22, 55, 15, 110, 29, 34, 57, 46, 55, 124, 44, 54, 59, 70, 10, 13, 20, 24, 81, 156, 67, 13, 37, 128, 25, 25, 15, 15, 1, 33, 23, 91, 13, 143, 18, 114, 52, 46, 52, 11, 37, 55, 41, 86, 0, 146, 29, 57, 67, 93, 53, 133, 69, 70, 26, 61, 13, 14, 30, 60, 58, 81, 74, 155, 81, 81, 55, 140, 16, 136, 65, 145, 1, 22, 22, 69, 62, 65, 35, 122, 7, 121, 62, 16, 24, 80, 62, 36, 55, 60, 25, 75, 1, 89, 6, 70, 24, 117, 4, 88, 22, 81, 87, 39, 5, 59, 25, 136, 86, 91, 27, 120, 32, 28, 20, 20, 8, 85, 47, 87, 17, 76, 49, 123, 82, 32, 84, 22, 53, 143, 89, 158, 82, 92, 87, 28, 1, 159, 45, 146, 5, 75, 52, 68, 28, 7, 17, 25, 23, 40, 21, 137, 0, 98, 46, 73, 86, 125, 7, 66, 51, 72, 73, 38, 42, 148, 78, 84, 0, 104, 28, 4, 69, 106, 86, 31, 42, 101, 44, 147, 79, 148, 23, 156, 59, 115, 54, 121, 39, 26, 4, 22, 36, 95, 58, 105, 57, 31, 80, 70, 31, 80, 68, 2, 71, 64, 5, 28, 86, 135, 39, 79, 11, 47, 82, 74, 35, 159, 78, 102, 46, 63, 74, 26, 26, 49, 49, 141, 21, 121, 75, 149, 37, 53, 46, 136, 77, 125, 49, 6, 11, 47, 25, 23, 64, 80, 10, 154, 42, 9, 52, 152, 58, 130, 21, 138, 36, 87, 61, 97, 32, 119, 37, 91, 74, 136, 64, 66, 57, 21, 8, 40, 25, 154, 7, 115, 85, 148, 84, 18, 38, 42, 71, 29, 46, 133, 59, 60, 72, 89, 55, 89, 54, 155, 13, 39, 82, 46, 35, 142, 19, 81, 79, 105, 16, 78, 42, 126, 7, 98, 38, 101, 50, 67, 25, 113, 58, 7, 64, 21, 40, 49, 6, 4, 33, 33, 10, 154, 82, 98, 60, 32, 54, 20, 74, 45, 26, 65, 42, 70, 70, 22, 69, 127, 44, 113, 81, 112, 22, 130, 47, 126, 80, 95, 55, 147, 75, 106, 58, 123, 75, 101, 22, 3, 6, 20, 16, 151, 38, 69, 2, 127, 12, 17, 11, 59, 86, 14, 51, 134, 50, 100, 84, 141, 74, 66, 11, 92, 10, 45, 47, 8, 72, 120, 62, 35, 19, 19, 57, 26, 7, 157, 36, 90, 2, 149, 30, 73, 68, 117, 33, 135, 30, 32, 9, 43, 28, 88, 13, 134, 39, 83, 52, 53, 82, 154, 3, 59, 73, 109, 25, 23, 60, 58, 13, 60, 59, 140, 41, 83, 56, 134, 15, 100, 43, 124, 75, 159, 12, 84, 17, 75, 34, 87, 60, 56, 69, 112, 74, 126, 40, 133, 47, 111, 23, 27, 39, 54, 20, 105, 38, 137, 9, 64, 72, 142, 0, 70, 53, 87, 26, 89, 51, 40, 13, 127, 22, 120, 43, 15, 11, 91, 24, 41, 2, 5, 16, 141, 55, 90, 25, 61, 10, 121, 20, 85, 80, 51, 4, 94, 84, 137, 76, 154, 79, 85, 37, 28, 78, 157, 75, 53, 7, 85, 82, 102, 12, 153, 40, 157, 25, 119, 11, 103, 39, 112, 71, 55, 75, 70, 39, 101, 41, 39, 15, 93, 58, 69, 86, 76, 7, 78, 53, 55, 56, 116, 65, 76, 11, 91, 54, 81, 59, 120, 72, 39, 88, 109, 29, 141, 79, 123, 35, 18, 54, 13, 60, 16, 73, 88, 30, 14, 62, 44, 33, 3, 82, 139, 23, 78, 30, 105, 25, 40, 14, 42, 0, 75, 66, 95, 44, 40, 46, 147, 68, 54, 8, 108, 16, 146, 44, 80, 45, 116, 41, 31, 58, 13, 21, 124, 4, 84, 3, 91, 49, 81, 88, 36, 82, 45, 63, 142, 33, 62, 59, 43, 43, 101, 31, 52, 76, 48, 35, 116, 84, 81, 57, 43, 45, 71, 4, 88, 33, 107, 1, 73, 37, 135, 2, 126, 22, 98, 48, 158, 6, 110, 78, 101, 70, 122, 35, 16, 76, 138, 53, 122, 31, 98, 83, 91, 85, 106, 8, 25, 47, 40, 1, 99, 5, 15, 29, 125, 22, 120, 84, 120, 4, 132, 64, 60, 41, 51, 16, 156, 68, 70, 65, 127, 74, 62, 27, 43, 74, 59, 47, 25, 38, 144, 41, 82, 64, 124, 21, 99, 64, 87, 15, 1, 37, 59, 74, 159, 35, 80, 12, 150, 70, 59, 17, 83, 22, 30, 37, 113, 10, 94, 88, 88, 65, 34, 78, 23, 57, 19, 80, 35, 33, 83, 89, 90, 19, 68, 25, 8, 11, 46, 83, 112, 56, 65, 64, 93, 19, 35, 20, 135, 62, 148, 41, 23, 34, 118, 63, 109, 84, 36, 8, 99, 34, 151, 10, 36, 68, 31, 55, 62, 21, 52, 6, 133, 38, 100, 12, 92, 81, 102, 4, 71, 6, 73, 65, 55, 35, 129, 12, 45, 24, 54, 30, 73, 71, 77, 18, 96, 24, 96, 26, 54, 52, 73, 50, 10, 51, 24, 16, 96, 73, 150, 13, 102, 55, 84, 36, 34, 29, 64, 27, 112, 59, 41, 87, 112, 50, 132, 30, 43, 17, 79, 25, 131, 85, 101, 35, 93, 67, 79, 56, 123, 78, 40, 55, 132, 28, 92, 33, 99, 43, 55, 62, 34, 30, 20, 57, 59, 68, 150, 49, 96, 60, 126, 87, 1, 30, 92, 20, 7, 33, 126, 75, 153, 86, 153, 77, 156, 27, 116, 59, 115, 4, 29, 11, 79, 40, 115, 44, 54, 54, 49, 75, 92, 55, 137, 58, 114, 35, 40, 6, 151, 84, 99, 61, 104, 14, 58, 84, 119, 61, 114, 41, 55, 14, 25, 49, 159, 24, 151, 81, 54, 85, 117, 74, 89, 56, 140, 83, 36, 15, 120, 69, 22, 43, 143, 80, 95, 76, 4, 77, 28, 42, 149, 88, 90, 77, 49, 54, 138, 39, 139, 66, 151, 63, 7, 72, 75, 27, 95, 13, 46, 5, 64, 12, 116, 74, 83, 79, 65, 44, 39, 37, 116, 75, 78, 24, 50, 17, 19, 79, 39, 30, 4, 7, 85, 65, 98, 6, 54, 29, 27, 25, 48, 7, 110, 45, 92, 44, 75, 64, 132, 75, 142, 44, 56, 30, 75, 22, 17, 4, 87, 85, 145, 71, 44, 54, 132, 76, 75, 78, 29, 63, 9, 86, 124, 68, 11, 83, 60, 37, 0, 5, 146, 37, 21, 60, 107, 22, 151, 65, 57, 52, 115, 18, 58, 27, 15, 66, 148, 38, 41, 86, 85, 13, 135, 65, 73, 54, 51, 81, 0, 26, 153, 81, 152, 64, 103, 41, 52, 8, 69, 13, 24, 44, 86, 1, 136, 29, 45, 38, 83, 51, 85, 26, 33, 88, 146, 60, 37, 5, 46, 54, 155, 8, 74, 6, 54, 79, 103, 11, 103, 2, 74, 26, 151, 73, 150, 29, 83, 76, 93, 29, 27, 44, 33, 72, 115, 56, 111, 52, 130, 36, 55, 63, 104, 56, 118, 84, 145, 45, 22, 63, 137, 44, 128, 21, 4, 32, 133, 30, 127, 66, 128, 64, 83, 80, 123, 46, 84, 71, 11, 77, 59, 1, 111, 47, 35, 5, 8, 76, 135, 79, 137, 70, 156, 42, 30, 55, 64, 24, 86, 16, 143, 82, 4, 38, 75, 45, 7, 60, 90, 38, 51, 10, 19, 81, 113, 12, 88, 73, 40, 80, 118, 46, 132, 7, 35, 11, 122, 88, 138, 21, 112, 1, 110, 36, 31, 15, 132, 21, 50, 87, 89, 75, 136, 57, 25, 89, 105, 1, 154, 38, 41, 62, 6, 69, 53, 36, 16, 56, 54, 34, 105, 63, 147, 53, 100, 25, 14, 68, 69, 63, 41, 11, 65, 58, 37, 54, 3, 12, 37, 74, 69, 56, 25, 78, 141, 41, 5, 0, 100, 80, 8, 30, 123, 32, 47, 12, 87, 87, 101, 89, 112, 48, 133, 88, 41, 73, 32, 87, 34, 68, 71, 10, 19, 40, 44, 77, 37, 56, 130, 29, 5, 79, 150, 2, 6, 29, 75, 68, 61, 59, 71, 41, 120, 54, 74, 61, 97, 23, 80, 44, 150, 34, 31, 38, 66, 18, 124, 62, 77, 33, 136, 6, 84, 18, 47, 4, 60, 66, 11, 6, 26, 87, 112, 83, 56, 45, 110, 25, 79, 79, 123, 10, 33, 13, 74, 72, 90, 31, 39, 44, 48, 64, 18, 6, 57, 82, 124, 49, 41, 34, 82, 41, 87, 18, 133, 36, 63, 36, 15, 33, 122, 77, 99, 17, 93, 42, 124, 13, 31, 17, 0, 88, 84, 42, 13, 14, 121, 87, 46, 18, 143, 49, 143, 86, 90, 0, 6, 81, 67, 49, 150, 22, 147, 22, 84, 19, 103, 78, 137, 32, 154, 62, 66, 85, 106, 57, 70, 48, 132, 61, 94, 82, 11, 61, 114, 82, 15, 67, 62, 28, 140, 29, 140, 14, 81, 17, 18, 72, 86, 44, 7, 45, 144, 23, 34, 22, 120, 82, 148, 51, 14, 59, 20, 86, 42, 30, 137, 39, 16, 80, 69, 89, 158, 17, 5, 41, 23, 42, 64, 59, 61, 46, 75, 47, 13, 61, 138, 86, 90, 54, 91, 73, 62, 73, 147, 86, 99, 54, 127, 48, 37, 28, 144, 35, 128, 74, 28, 73, 158, 37, 92, 26, 24, 84, 148, 25, 78, 12, 43, 6, 5, 42, 140, 53, 89, 25, 38, 66, 56, 82, 32, 81, 86, 58, 92, 34, 19, 30, 29, 78, 131, 35, 98, 13, 63, 1, 109, 3, 60, 87, 102, 59, 81, 35, 55, 71, 15, 72, 62, 65, 114, 48, 101, 12, 3, 89, 138, 20, 52, 18, 104, 66, 88, 41, 111, 26, 76, 81, 0, 81, 62, 25, 44, 50, 64, 43, 66, 13, 40, 57, 119, 80, 130, 16, 2, 75, 92, 47, 5, 52, 2, 43, 140, 65, 75, 39, 35, 37, 132, 22, 62, 32, 140, 24, 92, 71, 112, 78, 63, 69, 80, 43, 36, 44, 142, 8, 129, 82, 24, 51, 142, 50, 155, 77, 87, 73, 106, 53, 137, 18, 78, 4, 116, 46, 37, 7, 151, 14, 72, 87, 97, 4, 23, 30, 79, 19, 89, 27, 11, 34, 70, 58, 77, 6, 34, 58, 157, 42, 141, 40, 140, 61, 128, 16, 6, 26, 85, 20, 53, 73, 35, 31, 119, 82, 94, 76, 15, 42, 64, 10, 155, 44, 24, 85, 21, 54, 11, 59, 123, 85, 13, 65, 50, 78, 16, 8, 88, 77, 157, 33, 145, 17, 126, 42, 31, 16, 72, 70, 49, 84, 7, 34, 119, 88, 127, 77, 130, 32, 82, 57, 109, 56, 28, 39, 18, 32, 99, 72, 123, 58, 143, 35, 57, 60, 17, 31, 67, 7, 51, 80, 80, 37, 133, 52, 154, 86, 119, 35, 16, 45, 78, 51, 80, 16, 9, 65, 27, 2, 143, 54, 72, 71, 63, 62, 49, 62, 54, 78, 43, 66, 156, 69, 105, 19, 104, 18, 130, 2, 9, 30, 150, 77, 31, 54, 13, 24, 153, 22, 54, 16, 111, 6, 1, 39, 139, 35, 154, 85, 24, 70, 70, 13, 97, 50, 102, 15, 116, 85, 114, 30, 41, 4, 96, 79, 93, 69, 72, 26, 155, 45, 87, 77, 100, 50, 91, 25, 29, 21, 6, 5, 118, 57, 43, 35, 33, 57, 91, 15, 51, 13, 36, 26, 108, 14, 30, 41, 3, 36, 147, 78, 134, 5, 55, 61, 33, 45, 92, 24, 144, 33, 22, 56, 134, 8, 7, 56, 37, 84, 82, 79, 22, 45, 56, 20, 105, 2, 134, 89, 66, 20, 145, 15, 138, 45, 152, 40, 63, 11, 123, 66, 113, 53, 111, 78, 83, 41, 73, 27, 65, 79, 18, 57, 26, 44, 77, 60, 48, 17, 51, 78, 157, 77, 106, 60, 156, 29, 119, 49, 136, 48, 34, 65, 92, 83, 140, 68, 48, 78, 8, 40, 79, 5, 17, 76, 85, 71, 4, 71, 156, 70, 19, 29, 22, 66, 125, 85, 145, 85, 3, 57, 155, 42, 101, 83, 134, 77, 31, 53, 147, 69, 150, 7, 109, 0, 83, 49, 63, 42, 133, 89, 149, 49, 149, 13, 19, 59, 115, 43, 50, 73, 82, 36, 75, 20, 93, 22, 111, 22, 134, 81, 118, 51, 149, 50, 55, 53, 22, 75, 131, 71, 11, 62, 2, 66, 151, 13, 70, 0, 47, 78, 40, 4, 131, 6, 46, 56, 14, 37, 106, 36, 151, 88, 2, 37, 41, 77, 138, 16, 25, 4, 84, 15, 30, 4, 41, 35, 152, 38, 125, 31, 55, 46, 90, 73, 76, 75, 30, 66, 69, 29, 148, 53, 94, 26, 68, 80, 7, 39, 14, 5, 110, 69, 153, 25, 118, 33, 149, 41, 118, 83, 58, 89, 150, 79, 88, 12, 99, 84, 11, 15, 45, 48, 14, 22, 45, 88, 79, 46, 106, 34, 7, 78, 110, 84, 105, 89, 146, 52, 119, 24, 18, 46, 69, 23, 7, 68, 152, 71, 85, 12, 76, 26, 85, 83, 37, 30, 113, 44, 146, 57, 112, 69, 7, 40, 103, 44, 38, 67, 17, 29, 102, 56, 147, 28, 100, 56, 122, 58, 159, 27, 133, 48, 30, 79, 128, 32, 21, 82, 136, 1, 71, 53, 73, 8, 98, 54, 21, 38, 48, 45, 64, 75, 131, 32, 66, 59, 78, 33, 91, 79, 86, 41, 137, 27, 36, 4, 94, 80, 76, 3, 16, 51, 153, 1, 43, 25, 71, 60, 156, 89, 121, 21, 36, 53, 55, 45, 34, 82, 118, 47, 84, 75, 25, 64, 82, 43, 68, 31, 129, 25, 96, 88, 8, 48, 64, 84, 20, 1, 79, 54, 44, 86, 136, 81, 72, 16, 46, 72, 71, 68, 91, 12, 101, 40, 74, 31, 138, 77, 120, 26, 23, 15, 97, 9, 106, 87, 132, 38, 140, 84, 108, 6, 94, 53, 6, 4, 54, 68, 130, 35, 23, 12, 141, 17, 19, 76, 85, 56, 100, 79, 91, 59, 96, 7, 119, 7, 66, 0, 17, 25, 67, 81, 143, 19, 100, 41, 35, 64, 144, 71, 83, 75, 25, 6, 109, 9, 3, 87, 76, 29, 25, 10, 137, 25, 128, 23, 15, 54, 0, 66, 28, 35, 17, 45, 21, 33, 114, 57, 154, 16, 30, 21, 99, 45, 41, 32, 132, 77, 150, 53, 6, 27, 101, 87, 124, 82, 24, 65, 101, 79, 139, 56, 15, 57, 24, 62, 144, 49, 126, 72, 149, 18, 152, 31, 107, 14, 32, 17, 28, 28, 124, 54, 72, 89, 74, 85, 4, 64, 57, 14, 129, 7, 74, 42, 59, 54, 93, 30, 58, 22, 84, 26, 70, 83, 48, 66, 124, 47, 134, 21, 63, 19, 26, 75, 27, 3, 111, 75, 91, 82, 1, 83, 16, 5, 156, 50, 53, 6, 5, 48, 65, 83, 113, 51, 132, 84, 3, 29, 99, 55, 71, 58, 140, 15, 132, 50, 51, 82, 93, 51, 25, 5, 61, 27, 81, 12, 125, 46, 83, 62, 93, 23, 12, 52, 147, 36, 97, 89, 129, 70, 130, 49, 112, 58, 27, 13, 50, 61, 35, 76, 135, 76, 44, 30, 13, 62, 20, 60, 155, 71, 33, 1, 49, 36, 83, 78, 119, 46, 75, 63, 105, 48, 154, 53, 65, 62, 74, 86, 38, 12, 42, 14, 59, 45, 49, 12, 71, 13, 44, 31, 142, 52, 155, 6, 22, 8, 35, 29, 18, 10, 72, 25, 77, 77, 145, 88, 13, 44, 13, 12, 123, 44, 110, 44, 97, 20, 4, 51, 94, 62, 63, 28, 54, 31, 156, 20, 136, 7, 83, 1, 60, 45, 110, 53, 159, 41, 4, 15, 20, 37, 3, 52, 121, 28, 103, 62, 106, 64, 25, 63, 8, 54, 142, 22, 102, 29, 42, 1, 25, 62, 13, 9, 150, 12, 86, 71, 84, 51, 111, 73, 13, 72, 54, 33, 138, 43, 34, 11, 14, 31, 17, 19, 68, 3, 67, 10, 106, 17, 28, 72, 80, 60, 62, 15, 105, 17, 89, 61, 142, 48, 112, 64, 124, 28, 65, 17, 149, 34, 66, 16, 104, 4, 59, 44, 31, 2, 11, 2, 129, 2, 122, 42, 39, 56, 150, 4, 38, 49, 81, 67, 9, 18, 79, 1, 63, 0, 35, 17, 18, 34, 103, 60, 84, 78, 9, 25, 109, 59, 32, 75, 93, 20, 136, 46, 72, 66, 106, 73, 72, 45, 58, 34, 125, 39, 10, 34, 20, 89, 72, 33, 135, 49, 46, 23, 36, 40, 60, 52, 85, 77, 42, 31, 19, 78, 75, 5, 99, 65, 106, 49, 149, 74, 131, 50, 2, 14, 30, 33, 54, 57, 125, 9, 39, 31, 116, 27, 85, 52, 14, 16, 154, 56, 15, 85, 13, 34, 147, 33, 52, 48, 129, 8, 135, 10, 18, 81, 119, 15, 55, 86, 49, 18, 12, 76, 93, 28, 154, 25, 26, 3, 65, 18, 38, 17, 18, 56, 61, 30, 109, 7, 140, 67, 103, 55, 75, 58, 43, 60, 61, 29, 72, 63, 77, 70, 25, 65, 125, 0, 50, 7, 53, 54, 85, 29, 113, 75, 100, 57, 141, 58, 51, 3, 109, 11, 78, 37, 130, 18, 110, 43, 104, 31, 75, 17, 73, 7, 159, 43, 126, 32, 7, 53, 91, 55, 17, 50, 42, 88, 44, 84, 37, 32, 33, 31, 77, 76, 139, 59, 64, 56, 52, 89, 118, 49, 5, 39, 125, 2, 122, 87, 145, 72, 73, 77, 36, 5, 36, 27, 141, 13, 109, 76, 110, 30, 44, 7, 65, 28, 74, 81, 36, 45, 13, 43, 23, 5, 157, 73, 129, 34, 101, 59, 89, 84, 152, 29, 31, 74, 156, 73, 54, 83, 27, 6, 115, 49, 139, 36, 118, 64, 140, 30, 51, 14, 42, 23, 30, 68, 47, 3, 10, 27, 91, 33, 7, 62, 128, 37, 93, 76, 58, 19, 158, 86, 17, 58, 50, 2, 43, 13, 126, 76, 27, 27, 108, 63, 87, 56, 25, 18, 146, 32, 126, 39, 144, 64, 112, 26, 141, 85, 4, 13, 159, 16, 85, 3, 40, 35, 91, 39, 10, 88, 40, 28, 108, 28, 60, 40, 57, 3, 82, 10, 45, 72, 41, 37, 83, 31, 23, 24, 2, 20, 72, 64, 116, 64, 116, 89, 67, 84, 122, 8, 157, 39, 11, 53, 144, 21, 157, 54, 113, 47, 94, 27, 118, 25, 157, 26, 121, 8, 120, 51, 42, 32, 59, 87, 39, 34, 103, 53, 132, 23, 61, 74, 111, 41, 49, 22, 158, 21, 31, 34, 135, 0, 96, 37, 99, 13, 17, 18, 44, 75, 154, 21, 73, 48, 90, 62, 48, 37, 129, 51, 122, 78, 154, 27, 16, 40, 5, 55, 38, 14, 125, 38, 144, 15, 12, 50, 151, 44, 13, 64, 125, 63, 67, 41, 60, 83, 0, 74, 73, 20, 69, 38, 125, 56, 112, 70, 35, 23, 80, 71, 72, 22, 43, 57, 59, 85, 143, 63, 5, 32, 47, 28, 141, 10, 52, 22, 21, 21, 151, 3, 34, 3, 45, 31, 47, 10, 133, 37, 3, 86, 26, 71, 134, 12, 85, 1, 137, 45, 72, 44, 30, 34, 146, 76, 73, 1, 120, 3, 56, 11, 119, 34, 157, 56, 37, 63, 29, 87, 9, 63, 145, 78, 24, 29, 52, 12, 54, 19, 84, 30, 99, 19, 38, 11, 40, 30, 27, 0, 22, 10, 44, 26, 64, 45, 24, 77, 29, 15, 153, 20, 152, 59, 78, 78, 30, 8, 119, 28, 103, 16, 82, 72, 108, 36, 156, 28, 64, 21, 100, 59, 119, 27, 90, 40, 6, 65, 4, 0, 155, 51, 98, 41, 9, 32, 83, 26, 29, 65, 51, 70, 26, 22, 91, 38, 92, 67, 17, 67, 130, 58, 77, 67, 146, 43, 142, 72, 64, 58, 76, 80, 74, 32, 112, 54, 31, 57, 11, 76, 1, 12, 106, 68, 125, 35, 19, 43, 110, 17, 116, 68, 4, 3, 65, 68, 61, 51, 53, 56, 100, 44, 128, 1, 143, 46, 48, 12, 116, 10, 51, 33, 101, 62, 0, 0, 101, 76, 42, 69, 37, 44, 89, 15, 26, 63, 26, 78, 107, 3, 51, 21, 21, 15, 107, 67, 0, 21, 75, 89, 130, 30, 13, 27, 71, 23, 104, 12, 159, 52, 128, 68, 12, 69, 141, 22, 21, 62, 110, 74, 2, 59, 62, 33, 59, 13, 114, 88, 68, 56, 155, 82, 117, 61, 12, 59, 89, 30, 58, 36, 123, 48, 81, 34, 28, 69, 101, 82, 81, 70, 52, 24, 113, 74, 58, 72, 110, 1, 1, 6, 15, 5, 106, 54, 146, 4, 82, 89, 38, 28, 75, 43, 101, 4, 54, 12, 138, 25, 1, 72, 38, 62, 86, 82, 55, 33, 99, 21, 23, 54, 136, 4, 58, 82, 111, 71, 63, 84, 9, 67, 25, 31, 77, 3, 49, 47, 44, 58, 9, 81, 49, 35, 155, 64, 95, 29, 40, 27, 42, 56, 27, 40, 147, 42, 117, 75, 5, 12, 45, 2, 84, 89, 68, 59, 49, 68, 110, 82, 53, 58, 43, 64, 95, 66, 25, 17, 68, 22, 154, 49, 31, 45, 134, 86, 13, 82, 56, 67, 12, 34, 90, 9, 13, 0, 65, 19, 92, 49, 149, 3, 20, 45, 20, 28, 35, 27, 5, 3, 12, 55, 101, 85, 110, 55, 108, 43, 66, 82, 26, 76, 21, 58, 32, 4, 111, 36, 9, 38, 9, 48, 149, 1, 105, 77, 94, 50, 48, 68, 109, 88, 110, 72, 80, 15, 122, 17, 57, 87, 52, 45, 91, 63, 55, 54, 69, 10, 3, 17, 71, 20, 123, 30, 121, 27, 126, 33, 54, 66, 66, 78, 145, 14, 60, 36, 116, 72, 145, 40, 95, 11, 16, 81, 65, 27, 45, 7, 74, 24, 94, 67, 81, 58, 111, 43, 96, 6, 73, 35, 143, 48, 20, 84, 76, 60, 127, 52, 146, 0, 57, 40, 127, 70, 132, 26, 95, 1, 25, 35, 116, 8, 87, 89, 63, 37, 24, 11, 117, 42, 73, 21, 104, 9, 38, 50, 9, 47, 134, 4, 140, 1, 25, 13, 135, 15, 47, 60, 145, 22, 23, 33, 21, 42, 45, 66, 16, 32, 109, 89, 72, 54, 140, 80, 80, 24, 47, 48, 65, 48, 151, 60, 101, 21, 39, 49, 35, 56, 1, 79, 63, 4, 82, 69, 134, 35, 65, 34, 155, 35, 6, 71, 32, 85, 138, 0, 23, 38, 12, 31, 73, 44, 76, 64, 26, 15, 64, 78, 55, 37, 10, 58, 123, 55, 106, 44, 37, 89, 74, 21, 130, 85, 49, 7, 108, 23, 96, 36, 62, 64, 100, 0, 12, 70, 113, 38, 17, 30, 10, 65, 109, 15, 56, 72, 146, 12, 65, 72, 62, 35, 155, 55, 126, 19, 70, 46, 41, 18, 30, 49, 90, 85, 23, 74, 108, 40, 135, 8, 138, 56, 137, 57, 38, 39, 79, 2, 82, 76, 132, 82, 8, 66, 111, 72, 3, 51, 13, 78, 62, 7, 16, 38, 136, 69, 59, 79, 151, 23, 139, 88, 54, 75, 27, 81, 108, 55, 30, 22, 57, 13, 33, 89, 94, 66, 72, 72, 147, 12, 22, 80, 117, 59, 3, 55, 75, 0, 102, 79, 60, 9, 43, 26, 107, 63, 23, 56, 14, 48, 85, 81, 28, 5, 94, 17, 159, 15, 89, 13, 16, 20, 58, 65, 100, 66, 55, 28, 53, 63, 66, 56, 101, 53, 108, 12, 30, 64, 86, 61, 49, 55, 148, 59, 14, 69, 6, 9, 94, 72, 146, 48, 35, 80, 7, 69, 61, 36, 36, 23, 67, 37, 75, 83, 80, 66, 96, 17, 20, 20, 48, 70, 59, 15, 70, 29, 68, 60, 67, 76, 51, 22, 77, 63, 9, 70, 116, 31, 126, 35, 114, 43, 70, 66, 100, 30, 130, 42, 52, 62, 57, 51, 140, 88, 27, 16, 56, 22, 59, 41, 27, 38, 116, 36, 64, 35, 124, 77, 11, 10, 8, 35, 100, 18, 35, 25, 133, 26, 122, 33, 117, 57, 17, 62, 11, 12, 158, 35, 63, 82, 91, 29, 26, 57, 82, 9, 92, 88, 115, 58, 71, 28, 113, 34, 141, 89, 148, 34, 124, 25, 4, 19, 114, 62, 149, 85, 150, 89, 67, 26, 76, 83, 97, 65, 19, 45, 146, 51, 153, 10, 6, 21, 105, 46, 111, 8, 45, 86, 16, 29, 27, 17, 143, 20, 56, 13, 128, 51, 116, 60, 68, 44, 138, 84, 143, 65, 99, 12, 153, 70, 10, 55, 136, 41, 119, 69, 125, 48, 33, 28, 135, 25, 100, 73, 53, 13, 8, 5, 81, 22, 57, 19, 137, 2, 122, 83, 145, 43, 43, 65, 58, 24, 90, 57, 75, 41, 20, 18, 147, 77, 73, 67, 55, 3, 85, 48, 3, 19, 1, 58, 52, 46, 112, 60, 22, 2, 113, 82, 118, 65, 110, 58, 56, 43, 60, 75, 100, 82, 137, 21, 41, 66, 79, 62, 90, 32, 40, 15, 32, 25, 7, 5, 143, 16, 20, 77, 118, 50, 76, 88, 99, 89, 138, 10, 140, 86, 81, 30, 138, 72, 159, 89, 3, 33, 36, 86, 36, 42, 114, 78, 71, 66, 67, 87, 118, 73, 112, 3, 119, 18, 32, 3, 28, 31, 53, 69, 32, 62, 126, 67, 108, 75, 89, 69, 29, 24, 68, 33, 132, 2, 87, 6, 125, 52, 98, 45, 1, 41, 109, 2, 4, 26, 152, 33, 9, 14, 9, 1, 42, 81, 70, 44, 27, 69, 16, 22, 17, 63, 117, 40, 123, 21, 18, 50, 91, 71, 27, 82, 88, 35, 17, 41, 138, 62, 135, 68, 136, 0, 116, 2, 66, 44, 149, 8, 97, 5, 127, 43, 63, 61, 115, 33, 51, 49, 126, 46, 140, 43, 125, 1, 104, 20, 49, 1, 118, 13, 102, 60, 153, 30, 126, 16, 131, 48, 0, 2, 93, 68, 121, 52, 140, 28, 13, 23, 157, 15, 117, 66, 4, 76, 133, 10, 40, 7, 138, 8, 107, 65, 27, 66, 52, 85, 110, 31, 102, 83, 135, 46, 69, 21, 118, 30, 83, 61, 36, 58, 88, 10, 0, 89, 131, 88, 110, 12, 46, 64, 46, 65, 40, 87, 57, 50, 84, 20, 8, 20, 12, 32, 130, 87, 83, 36, 82, 70, 116, 54, 73, 15, 35, 44, 119, 66, 130, 37, 119, 29, 145, 54, 64, 14, 93, 80, 5, 31, 143, 62, 149, 62, 102, 10, 147, 35, 142, 36, 78, 5, 62, 4, 85, 69, 147, 32, 133, 64, 89, 11, 121, 55, 113, 26, 90, 16, 97, 76, 139, 68, 115, 7, 59, 39, 61, 7, 22, 47, 115, 37, 78, 75, 45, 52, 18, 3, 15, 34, 106, 45, 97, 22, 39, 67, 86, 33, 50, 20, 134, 62, 131, 21, 130, 19, 116, 32, 77, 35, 66, 63, 71, 26, 158, 9, 135, 18, 115, 50, 87, 25, 114, 74, 105, 22, 88, 27, 146, 6, 69, 20, 50, 25, 141, 60, 148, 29, 11, 8, 38, 31, 111, 62, 132, 53, 33, 39, 46, 11, 73, 24, 1, 67, 18, 69, 22, 89, 116, 35, 103, 79, 37, 4, 64, 26, 140, 57, 142, 39, 134, 11, 37, 52, 50, 33, 139, 70, 143, 69, 35, 50, 9, 4, 24, 20, 36, 59, 103, 20, 109, 22, 29, 80, 107, 73, 120, 59, 154, 87, 92, 59, 65, 50, 135, 67, 14, 89, 27, 46, 90, 84, 67, 59, 38, 16, 79, 23, 145, 49, 23, 70, 146, 72, 53, 74, 100, 7, 36, 80, 119, 17, 131, 10, 6, 30, 137, 12, 4, 5, 58, 31, 49, 61, 13, 7, 57, 1, 143, 13, 110, 20, 107, 72, 137, 29, 42, 59, 81, 77, 102, 78, 130, 65, 96, 2, 143, 40, 87, 72, 146, 35, 155, 59, 38, 48, 62, 46, 141, 87, 48, 29, 137, 63, 54, 49, 13, 22, 141, 33, 153, 36, 80, 18, 142, 73, 81, 50, 146, 49, 9, 54, 65, 53, 71, 78, 101, 86, 22, 44, 26, 12, 89, 3, 122, 71, 56, 74, 110, 19, 106, 78, 92, 4, 119, 59, 24, 68, 151, 66, 98, 40, 154, 84, 81, 85, 74, 46, 43, 63, 0, 85, 150, 6, 48, 2, 103, 51, 18, 4, 151, 53, 97, 35, 66, 5, 107, 78, 96, 68, 98, 18, 108, 20, 10, 69, 8, 87, 123, 37, 74, 36, 152, 28, 13, 73, 104, 75, 81, 15, 112, 49, 23, 35, 37, 75, 113, 7, 32, 86, 91, 21, 100, 61, 60, 48, 69, 19, 10, 64, 114, 8, 129, 48, 58, 8, 157, 80, 152, 75, 107, 34, 71, 14, 159, 81, 84, 47, 62, 40, 91, 40, 152, 10, 80, 69, 15, 2, 93, 43, 78, 25, 16, 54, 139, 37, 129, 84, 96, 23, 135, 42, 66, 80, 89, 87, 100, 54, 96, 81, 12, 77, 79, 16, 150, 40, 43, 23, 127, 18, 95, 80, 132, 69, 156, 5, 82, 53, 128, 84, 38, 30, 36, 12, 140, 89, 131, 42, 1, 0, 2, 72, 106, 84, 37, 72, 103, 7, 4, 87, 19, 75, 16, 55, 22, 41, 106, 89, 116, 56, 44, 55, 151, 29, 127, 62, 159, 48, 19, 15, 87, 14, 102, 49, 47, 0, 107, 48, 133, 56, 55, 59, 127, 59, 6, 72, 149, 6, 132, 54, 74, 28, 159, 73, 148, 14, 4, 57, 104, 49, 142, 15, 14, 29, 133, 3, 59, 22, 77, 22, 43, 21, 117, 70, 3, 32, 21, 55, 152, 21, 39, 13, 56, 76, 48, 38, 2, 1, 129, 41, 30, 67, 89, 88, 40, 56, 15, 31, 56, 5, 32, 73, 102, 28, 133, 81, 139, 52, 122, 20, 104, 19, 58, 69, 97, 57, 151, 59, 71, 80, 68, 87, 151, 47, 69, 61, 44, 46, 71, 9, 105, 69, 66, 89, 64, 80, 50, 12, 117, 19, 107, 31, 132, 85, 77, 66, 9, 44, 132, 62, 49, 69, 101, 30, 11, 70, 39, 35, 147, 26, 61, 9, 114, 45, 117, 86, 90, 86, 103, 54, 148, 10, 9, 74, 109, 27, 25, 33, 23, 2, 103, 74, 104, 37, 64, 61, 29, 8, 11, 60, 8, 9, 145, 59, 43, 38, 134, 56, 57, 37, 155, 30, 94, 20, 85, 79, 99, 44, 8, 7, 36, 76, 9, 41, 122, 50, 55, 44, 15, 16, 114, 72, 144, 12, 75, 73, 112, 72, 81, 81, 155, 28, 108, 52, 96, 51, 74, 34, 10, 49, 88, 24, 147, 87, 151, 34, 63, 9, 7, 80, 17, 81, 79, 66, 48, 13, 21, 85, 141, 31, 100, 31, 10, 19, 26, 42, 36, 25, 70, 18, 58, 33, 138, 88, 132, 6, 91, 7, 114, 19, 66, 33, 102, 86, 84, 83, 72, 20, 83, 39, 151, 41, 44, 53, 77, 17, 123, 76, 33, 22, 103, 8, 20, 55, 0, 7, 121, 40, 100, 26, 97, 36, 97, 45, 86, 74, 128, 10, 8, 62, 78, 46, 75, 42, 11, 66, 35, 9, 156, 49, 77, 65, 28, 62, 45, 81, 122, 46, 113, 18, 152, 1, 153, 62, 121, 2, 70, 54, 104, 58, 146, 39, 133, 2, 107, 81, 128, 44, 71, 81, 34, 39, 58, 20, 5, 28, 62, 76, 120, 71, 130, 69, 69, 12, 23, 51, 28, 29, 76, 82, 137, 78, 116, 33, 35, 65, 30, 19, 1, 5, 60, 32, 3, 83, 150, 45, 1, 87, 88, 46, 153, 32, 17, 26, 127, 63, 42, 36, 95, 26, 13, 52, 9, 0, 116, 78, 6, 36, 10, 22, 89, 79, 12, 65, 102, 88, 119, 9, 70, 67, 90, 58, 49, 88, 102, 25, 78, 39, 140, 76, 58, 16, 155, 3, 56, 14, 70, 33, 147, 7, 29, 82, 114, 20, 44, 23, 145, 27, 137, 62, 136, 11, 41, 22, 6, 77, 15, 71, 54, 22, 10, 75, 154, 19, 34, 34, 39, 79, 141, 7, 53, 30, 149, 14, 49, 59, 100, 42, 32, 60, 72, 42, 32, 46, 16, 85, 79, 33, 15, 81, 75, 28, 115, 13, 82, 21, 37, 67, 159, 34, 3, 27, 96, 16, 50, 31, 153, 38, 98, 55, 62, 8, 80, 53, 54, 46, 109, 50, 30, 54, 12, 62, 147, 10, 15, 23, 21, 51, 109, 45, 52, 27, 68, 54, 103, 48, 97, 11, 96, 71, 81, 20, 1, 53, 66, 39, 85, 9, 14, 36, 108, 54, 109, 46, 113, 62, 7, 87, 38, 19, 148, 24, 49, 65, 25, 26, 30, 61, 32, 1, 50, 29, 54, 63, 33, 63, 89, 80, 64, 85, 119, 67, 115, 62, 67, 63, 74, 33, 72, 58, 93, 11, 41, 74, 142, 12, 95, 61, 71, 71, 126, 71, 108, 85, 120, 15, 113, 23, 22, 29, 32, 23, 5, 69, 102, 9, 101, 1, 118, 18, 114, 0, 117, 69, 76, 84, 34, 31, 10, 9, 116, 7, 144, 45, 36, 47, 5, 86, 152, 79, 108, 30, 17, 61, 27, 28, 126, 38, 144, 58, 31, 41, 26, 48, 48, 28, 99, 36, 98, 67, 54, 15, 63, 5, 87, 88, 42, 29, 106, 40, 67, 89, 105, 15, 60, 7, 115, 77, 139, 26, 15, 49, 114, 55, 135, 9, 118, 78, 131, 31, 83, 84, 147, 72, 18, 14, 82, 83, 112, 89, 65, 6, 68, 76, 43, 10, 67, 54, 139, 12, 116, 38, 138, 19, 44, 60, 139, 20, 76, 5, 85, 18, 68, 19, 135, 53, 154, 44, 126, 60, 95, 35, 69, 0, 57, 69, 109, 4, 92, 28, 70, 30, 117, 85, 22, 77, 65, 74, 6, 45, 91, 70, 123, 19, 120, 2, 70, 77, 53, 64, 140, 21, 32, 51, 97, 51, 60, 54, 95, 87, 96, 35, 131, 47, 18, 22, 104, 68, 131, 27, 65, 52, 133, 43, 143, 60, 115, 86, 124, 23, 81, 42, 55, 85, 147, 57, 42, 16, 124, 60, 102, 11, 48, 15, 73, 88, 17, 51, 92, 6, 69, 7, 139, 11, 129, 77, 150, 33, 148, 9, 35, 0, 26, 46, 26, 59, 104, 71, 69, 5, 98, 57, 93, 32, 78, 34, 46, 60, 156, 77, 68, 77, 128, 26, 125, 86, 8, 1, 3, 68, 57, 2, 47, 44, 95, 59, 35, 59, 48, 83, 4, 41, 112, 75, 41, 24, 49, 10, 26, 41, 2, 24, 0, 4, 38, 1, 102, 16, 50, 28, 26, 14, 22, 78, 116, 86, 159, 69, 121, 83, 66, 27, 45, 62, 108, 7, 104, 82, 144, 20, 142, 25, 25, 44, 129, 78, 150, 86, 144, 31, 128, 75, 24, 61, 43, 1, 152, 70, 145, 28, 77, 30, 35, 38, 95, 63, 116, 70, 113, 87, 59, 48, 129, 69, 20, 38, 5, 43, 139, 64, 17, 13, 51, 68, 129, 32, 130, 68, 109, 43, 0, 41, 121, 67, 26, 11, 7, 20, 118, 24, 63, 35, 116, 40, 115, 59, 56, 50, 3, 4, 43, 46, 21, 88, 92, 51, 113, 84, 67, 3, 71, 49, 62, 14, 31, 89, 151, 82, 48, 23, 34, 80, 39, 38, 7, 24, 119, 25, 147, 61, 87, 47, 123, 42, 10, 83, 41, 7, 0, 46, 89, 2, 11, 54, 42, 79, 113, 13, 80, 3, 151, 22, 113, 66, 58, 48, 51, 37, 82, 58, 151, 28, 154, 65, 14, 43, 119, 58, 40, 33, 107, 20, 127, 17, 118, 1, 26, 27, 93, 87, 118, 48, 124, 39, 128, 22, 154, 68, 73, 59, 141, 46, 49, 20, 30, 83, 2, 86, 53, 86, 3, 14, 133, 77, 142, 32, 67, 72, 54, 81, 24, 5, 41, 27, 82, 56, 112, 0, 31, 73, 107, 88, 35, 69, 80, 4, 28, 33, 137, 83, 140, 8, 8, 43, 38, 65, 54, 36, 7, 57, 111, 42, 5, 2, 152, 67, 54, 23, 69, 31, 126, 6, 114, 6, 105, 7, 21, 11, 40, 34, 149, 45, 83, 58, 113, 32, 141, 69, 51, 85, 104, 6, 36, 77, 142, 83, 145, 39, 99, 3, 102, 18, 111, 58, 149, 79, 9, 23, 127, 20, 16, 68, 84, 56, 115, 0, 0, 83, 85, 59, 1, 60, 128, 2, 8, 68, 124, 83, 29, 22, 116, 39, 89, 5, 156, 12, 156, 87, 150, 83, 128, 54, 82, 29, 130, 4, 44, 13, 42, 48, 107, 68, 56, 54, 3, 65, 129, 47, 11, 51, 111, 67, 105, 33, 53, 0, 87, 54, 0, 76, 111, 0, 133, 23, 18, 29, 68, 72, 14, 18, 158, 34, 53, 68, 84, 22, 33, 49, 82, 23, 60, 51, 90, 50, 55, 51, 102, 84, 27, 32, 85, 8, 87, 28, 58, 67, 120, 52, 5, 66, 10, 56, 113, 21, 39, 36, 3, 71, 89, 44, 144, 82, 152, 61, 67, 64, 110, 49, 100, 29, 157, 32, 140, 58, 73, 42, 133, 29, 5, 46, 99, 70, 107, 32, 27, 72, 44, 17, 105, 35, 159, 85, 5, 62, 134, 87, 112, 51, 130, 34, 147, 29, 22, 54, 158, 52, 50, 48, 154, 6, 101, 47, 97, 10, 143, 15, 78, 18, 146, 38, 112, 43, 158, 42, 102, 47, 77, 45, 57, 73, 64, 70, 135, 74, 117, 21, 52, 52, 98, 86, 52, 14, 62, 86, 73, 38, 29, 68, 53, 81, 130, 56, 57, 84, 64, 76, 134, 9, 45, 16, 9, 49, 150, 20, 68, 75, 29, 38, 80, 58, 72, 43, 73, 9, 102, 3, 6, 74, 97, 69, 25, 43, 158, 27, 142, 82, 71, 31, 12, 40, 69, 82, 31, 22, 6, 59, 115, 53, 153, 69, 155, 33, 75, 13, 10, 41, 28, 19, 22, 9, 96, 4, 131, 44, 97, 72, 136, 28, 149, 61, 123, 62, 152, 34, 27, 33, 79, 83, 4, 59, 55, 42, 1, 18, 26, 69, 66, 9, 65, 63, 85, 50, 153, 74, 140, 27, 139, 41, 1, 61, 43, 84, 40, 9, 149, 51, 49, 33, 129, 86, 137, 48, 144, 61, 17, 60, 53, 78, 158, 54, 156, 18, 122, 10, 63, 60, 61, 87, 1, 89, 87, 34, 134, 47, 39, 70, 115, 41, 117, 76, 51, 38, 80, 26, 51, 74, 128, 30, 4, 70, 12, 39, 18, 19, 90, 68, 31, 67, 66, 53, 35, 26, 53, 41, 136, 14, 99, 85, 148, 44, 7, 44, 133, 27, 40, 89, 122, 26, 15, 3, 65, 54, 48, 5, 87, 63, 102, 35, 77, 85, 15, 4, 37, 14, 131, 57, 2, 88, 135, 44, 152, 9, 108, 39, 128, 78, 50, 40, 93, 52, 153, 24, 45, 37, 91, 88, 50, 23, 55, 81, 129, 72, 137, 16, 47, 36, 125, 87, 135, 20, 123, 65, 54, 62, 99, 51, 0, 11, 126, 57, 41, 57, 34, 71, 132, 18, 132, 74, 135, 17, 158, 48, 6, 80, 156, 78, 38, 54, 61, 53, 116, 71, 34, 84, 68, 10, 76, 69, 86, 85, 9, 13, 127, 81, 120, 47, 79, 85, 116, 48, 37, 17, 140, 64, 142, 59, 158, 83, 138, 6, 93, 66, 18, 52, 153, 26, 137, 34, 88, 40, 103, 47, 20, 22, 115, 40, 90, 35, 41, 53, 139, 13, 13, 39, 108, 81, 129, 49, 24, 17, 137, 24, 89, 89, 72, 6, 21, 81, 27, 31, 146, 61, 55, 24, 11, 63, 139, 45, 100, 64, 112, 7, 127, 50, 115, 15, 98, 8, 2, 26, 14, 85, 73, 2, 2, 31, 117, 3, 47, 7, 73, 22, 145, 21, 133, 24, 157, 57, 81, 4, 14, 32, 116, 4, 8, 46, 156, 47, 29, 49, 97, 66, 66, 48, 133, 25, 150, 55, 158, 66, 113, 72, 5, 17, 81, 32, 70, 8, 8, 45, 37, 83, 14, 35, 136, 8, 78, 69, 31, 44, 108, 47, 112, 18, 63, 57, 48, 1, 124, 41, 24, 7, 21, 39, 94, 85, 107, 6, 37, 45, 87, 33, 47, 80, 93, 79, 60, 70, 126, 37, 29, 2, 32, 67, 114, 5, 96, 53, 18, 11, 0, 17, 143, 41, 47, 22, 117, 34, 61, 55, 82, 67, 60, 3, 125, 73, 31, 1, 149, 67, 114, 18, 74, 13, 50, 74, 111, 31, 125, 8, 37, 27, 82, 66, 111, 29, 58, 32, 43, 68, 155, 89, 54, 74, 73, 82, 15, 7, 50, 75, 155, 29, 103, 26, 14, 11, 124, 80, 2, 11, 13, 26, 152, 52, 62, 88, 30, 81, 86, 83, 119, 77, 118, 45, 157, 19, 92, 16, 16, 17, 149, 38, 47, 88, 135, 29, 3, 30, 153, 21, 33, 25, 120, 21, 35, 8, 139, 47, 99, 69, 45, 78, 102, 8, 118, 36, 11, 65, 6, 2, 3, 58, 24, 30, 32, 56, 150, 85, 10, 85, 42, 44, 78, 49, 80, 67, 14, 17, 23, 45, 109, 64, 154, 39, 128, 17, 51, 19, 81, 49, 53, 29, 124, 61, 156, 33, 28, 79, 73, 46, 22, 72, 14, 84, 159, 59, 158, 81, 40, 65, 59, 38, 47, 39, 75, 84, 142, 38, 10, 48, 18, 64, 93, 41, 42, 54, 41, 36, 153, 83, 67, 36, 71, 84, 38, 13, 159, 9, 118, 5, 111, 17, 50, 35, 116, 44, 141, 28, 132, 43, 1, 54, 150, 74, 70, 11, 63, 87, 2, 44, 18, 49, 143, 42, 32, 35, 141, 36, 151, 6, 131, 63, 104, 89, 60, 38, 14, 77, 58, 42, 92, 62, 75, 75, 49, 78, 11, 39, 4, 1, 146, 45, 8, 28, 16, 37, 80, 56, 92, 39, 22, 70, 148, 86, 2, 79, 97, 71, 121, 30, 45, 53, 149, 64, 100, 39, 95, 70, 95, 28, 154, 70, 24, 12, 11, 78, 32, 57, 86, 30, 145, 12, 14, 88, 85, 11, 38, 86, 43, 12, 116, 25, 32, 48, 103, 61, 143, 77, 121, 19, 158, 76, 81, 1, 7, 85, 117, 44, 122, 65, 152, 84, 95, 36, 67, 85, 158, 84, 100, 1, 65, 37, 130, 59, 117, 68, 41, 41, 46, 34, 39, 46, 67, 78, 6, 67, 86, 12, 111, 32, 33, 30, 148, 83, 113, 14, 91, 83, 97, 48, 64, 3, 32, 37, 105, 47, 126, 48, 99, 27, 29, 33, 72, 62, 103, 42, 119, 2, 77, 36, 116, 50, 111, 35, 55, 23, 129, 63, 97, 44, 3, 8, 64, 7, 125, 40, 126, 31, 96, 29, 136, 5, 75, 36, 126, 49, 26, 33, 64, 53, 71, 76, 17, 44, 139, 38, 49, 4, 131, 11, 68, 24, 51, 41, 47, 79, 47, 53, 10, 68, 113, 86, 100, 14, 15, 53, 143, 56, 121, 72, 80, 73, 52, 71, 65, 57, 12, 11, 68, 27, 59, 35, 141, 4, 45, 3, 143, 57, 103, 1, 108, 67, 42, 75, 156, 52, 108, 82, 89, 43, 148, 45, 57, 74, 111, 2, 78, 50, 23, 11, 159, 29, 145, 60, 83, 5, 21, 1, 35, 87, 82, 82, 57, 10, 87, 76, 120, 25, 115, 71, 41, 89, 123, 45, 56, 31, 34, 6, 2, 64, 122, 3, 23, 59, 88, 57, 115, 16, 94, 12, 19, 42, 31, 47, 148, 12, 106, 22, 51, 50, 141, 51, 154, 71, 38, 36, 66, 58, 128, 0, 12, 0, 63, 54, 125, 36, 118, 81, 52, 7, 148, 31, 64, 16, 133, 19, 126, 82, 69, 55, 58, 71, 40, 58, 156, 16, 127, 89, 16, 67, 93, 3, 20, 17, 92, 43, 11, 23, 137, 52, 60, 53, 32, 65, 51, 89, 110, 14, 87, 27, 43, 40, 19, 52, 124, 67, 89, 9, 3, 78, 155, 10, 137, 53, 127, 82, 70, 76, 152, 37, 31, 32, 138, 57, 63, 64, 99, 23, 50, 79, 154, 67, 144, 44, 159, 46, 42, 39, 120, 23, 104, 35, 102, 43, 2, 38, 115, 46, 131, 54, 65, 13, 78, 60, 139, 31, 55, 5, 143, 29, 51, 34, 140, 19, 24, 60, 101, 46, 44, 22, 67, 71, 61, 70, 40, 66, 66, 38, 13, 17, 27, 84, 76, 28, 7, 46, 29, 70, 138, 71, 11, 48, 63, 70, 33, 6, 68, 65, 98, 2, 45, 65, 91, 20, 41, 31, 57, 11, 110, 22, 66, 41, 85, 10, 137, 74, 105, 10, 150, 9, 46, 17, 99, 74, 109, 74, 98, 61, 41, 68, 97, 25, 128, 5, 144, 42, 82, 0, 37, 86, 133, 13, 139, 89, 99, 42, 1, 51, 9, 71, 157, 62, 77, 8, 28, 48, 112, 39, 39, 80, 128, 35, 83, 74, 6, 54, 63, 27, 143, 8, 45, 74, 44, 74, 11, 50, 130, 24, 131, 19, 77, 89, 156, 88, 16, 26, 92, 78, 51, 0, 71, 86, 48, 63, 87, 32, 18, 75, 10, 6, 17, 48, 59, 37, 4, 2, 79, 24, 151, 2, 115, 28, 28, 16, 9, 51, 30, 42, 94, 8, 57, 61, 147, 55, 60, 12, 103, 0, 27, 35, 80, 7, 156, 48, 30, 28, 135, 69, 92, 79, 28, 21, 127, 23, 113, 67, 142, 26, 75, 77, 48, 33, 63, 81, 25, 46, 79, 6, 133, 66, 153, 43, 26, 20, 4, 29, 129, 5, 104, 51, 131, 3, 83, 44, 159, 64, 63, 46, 4, 54, 79, 31, 147, 34, 90, 89, 128, 63, 20, 32, 53, 83, 29, 17, 62, 58, 2, 46, 82, 3, 39, 10, 75, 86, 90, 29, 55, 60, 151, 87, 86, 9, 90, 75, 7, 25, 28, 65, 33, 48, 34, 27, 138, 14, 47, 74, 64, 77, 134, 55, 105, 70, 15, 13, 143, 28, 6, 48, 65, 12, 78, 57, 130, 7, 127, 5, 128, 72, 46, 4, 116, 47, 72, 56, 36, 2, 34, 13, 10, 32, 120, 58, 112, 13, 106, 65, 63, 15, 146, 53, 24, 4, 110, 66, 54, 47, 78, 70, 75, 88, 32, 2, 6, 50, 75, 72, 119, 40, 149, 89, 58, 75, 10, 59, 81, 0, 34, 61, 55, 87, 39, 71, 63, 51, 67, 48, 97, 19, 94, 56, 8, 41, 57, 23, 20, 36, 148, 28, 133, 65, 27, 79, 117, 8, 142, 10, 24, 33, 38, 21, 81, 36, 128, 71, 121, 0, 32, 28, 92, 27, 69, 72, 132, 37, 38, 45, 14, 57, 117, 67, 35, 43, 20, 79, 95, 65, 42, 22, 50, 14, 27, 43, 92, 30, 113, 45, 134, 16, 18, 26, 62, 78, 65, 46, 97, 40, 47, 1, 54, 45, 38, 78, 26, 77, 22, 62, 108, 13, 112, 55, 106, 59, 122, 1, 145, 74, 32, 42, 16, 33, 81, 5, 154, 12, 13, 11, 96, 12, 103, 22, 53, 34, 33, 34, 64, 55, 84, 88, 84, 58, 28, 89, 63, 68, 104, 55, 127, 45, 3, 40, 19, 58, 57, 59, 7, 3, 76, 62, 84, 14, 3, 85, 107, 19, 93, 85, 155, 24, 66, 19, 26, 21, 46, 6, 22, 86, 87, 86, 144, 46, 155, 88, 84, 50, 155, 57, 55, 84, 126, 64, 70, 68, 111, 15, 153, 72, 86, 7, 125, 72, 72, 80, 27, 77, 158, 58, 63, 40, 98, 17, 33, 71, 85, 76, 24, 36, 23, 3, 129, 89, 113, 19, 30, 13, 54, 2, 157, 31, 122, 6, 114, 16, 26, 65, 71, 44, 90, 71, 17, 8, 32, 31, 14, 15, 131, 89, 77, 38, 147, 65, 63, 75, 75, 19, 153, 47, 7, 42, 120, 45, 157, 18, 54, 61, 135, 81, 95, 82, 58, 54, 38, 85, 96, 67, 85, 74, 12, 25, 51, 72, 106, 35, 85, 54, 138, 59, 73, 74, 78, 72, 111, 57, 75, 53, 60, 14, 37, 41, 61, 3, 122, 41, 146, 3, 64, 39, 128, 50, 28, 77, 11, 19, 137, 7, 25, 66, 94, 68, 59, 84, 105, 3, 21, 19, 25, 42, 30, 62, 12, 75, 101, 13, 103, 59, 82, 25, 137, 4, 155, 47, 36, 72, 124, 10, 65, 89, 35, 71, 33, 7, 116, 12, 43, 71, 53, 72, 91, 6, 141, 50, 33, 36, 31, 24, 65, 30, 86, 29, 0, 70, 118, 0, 17, 2, 138, 3, 79, 10, 3, 43, 143, 12, 99, 33, 126, 89, 26, 40, 52, 55, 77, 83, 81, 39, 56, 88, 30, 46, 61, 16, 60, 34, 51, 26, 44, 32, 64, 25, 10, 84, 118, 7, 137, 31, 126, 26, 58, 45, 76, 41, 1, 34, 16, 74, 30, 72, 81, 80, 65, 65, 68, 4, 146, 82, 150, 39, 112, 65, 159, 40, 72, 21, 50, 53, 154, 88, 26, 84, 29, 75, 114, 71, 125, 60, 52, 39, 153, 29, 102, 6, 34, 2, 108, 37, 77, 16, 40, 48, 58, 49, 38, 51, 55, 49, 22, 55, 109, 5, 57, 12, 63, 39, 152, 80, 52, 64, 65, 3, 122, 75, 61, 86, 23, 16, 105, 65, 152, 30, 33, 20, 140, 11, 86, 47, 154, 14, 43, 59, 97, 81, 98, 77, 1, 47, 119, 55, 158, 26, 142, 67, 101, 37, 117, 50, 139, 78, 136, 85, 124, 15, 119, 57, 125, 80, 63, 38, 42, 33, 158, 67, 158, 62, 79, 17, 6, 86, 69, 43, 15, 44, 141, 8, 53, 37, 118, 56, 130, 67, 90, 48, 28, 13, 159, 23, 79, 26, 52, 74, 80, 86, 5, 82, 37, 69, 86, 54, 73, 34, 107, 0, 4, 75, 20, 66, 73, 60, 34, 10, 71, 18, 84, 24, 110, 79, 125, 4, 128, 56, 60, 89, 95, 64, 110, 2, 159, 30, 137, 22, 154, 37, 110, 42, 114, 75, 150, 63, 133, 33, 104, 60, 73, 52, 104, 3, 142, 85, 118, 66, 39, 26, 14, 23, 13, 4, 6, 41, 30, 58, 131, 59, 40, 19, 127, 73, 15, 24, 60, 77, 157, 64, 29, 43, 31, 72, 96, 41, 4, 18, 74, 59, 60, 0, 5, 78, 62, 17, 104, 46, 10, 10, 93, 73, 100, 46, 42, 84, 110, 87, 106, 43, 23, 18, 51, 53, 91, 4, 39, 65, 79, 48, 16, 14, 2, 42, 6, 53, 87, 78, 110, 65, 157, 9, 130, 3, 144, 88, 5, 51, 103, 46, 70, 4, 156, 31, 62, 70, 132, 60, 157, 55, 51, 71, 64, 62, 93, 37, 40, 40, 25, 1, 91, 10, 28, 61, 112, 87, 125, 65, 139, 63, 87, 39, 12, 73, 14, 3, 151, 67, 29, 13, 149, 17, 22, 32, 99, 40, 39, 74, 25, 27, 151, 8, 60, 62, 116, 6, 100, 62, 43, 44, 2, 82, 144, 5, 35, 53, 137, 67, 47, 43, 48, 10, 150, 16, 140, 56, 93, 81, 34, 62, 23, 68, 112, 84, 91, 52, 71, 69, 115, 24, 9, 46, 35, 48, 104, 29, 159, 32, 51, 54, 1, 28, 58, 50, 118, 80, 88, 55, 82, 37, 138, 7, 146, 54, 6, 82, 98, 49, 11, 56, 155, 48, 143, 83, 158, 59, 103, 37, 148, 1, 37, 36, 106, 4, 96, 86, 11, 52, 125, 66, 20, 80, 147, 58, 94, 34, 18, 27, 46, 67, 66, 55, 48, 65, 61, 56, 46, 48, 115, 6, 92, 0, 78, 44, 5, 36, 95, 18, 40, 64, 95, 71, 117, 14, 20, 49, 63, 25, 90, 79, 126, 3, 42, 70, 76, 22, 68, 69, 82, 38, 14, 56, 44, 20, 104, 27, 130, 73, 40, 50, 63, 17, 12, 45, 154, 0, 18, 25, 112, 23, 145, 62, 90, 81, 15, 26, 68, 0, 51, 11, 28, 37, 158, 43, 134, 46, 111, 49, 91, 32, 65, 4, 32, 69, 144, 18, 99, 4, 22, 19, 108, 79, 44, 41, 137, 28, 15, 51, 76, 40, 33, 74, 86, 77, 68, 13, 82, 13, 20, 10, 49, 77, 85, 84, 76, 50, 126, 30, 18, 9, 3, 61, 24, 41, 145, 29, 5, 10, 123, 50, 53, 20, 90, 78, 112, 36, 42, 25, 31, 0, 37, 61, 146, 69, 44, 19, 25, 69, 115, 79, 139, 27, 21, 61, 142, 6, 134, 71, 96, 25, 84, 77, 3, 46, 85, 15, 42, 26, 44, 11, 81, 71, 115, 80, 10, 11, 137, 23, 89, 49, 133, 50, 126, 17, 85, 22, 124, 9, 125, 58, 76, 65, 118, 77, 41, 76, 149, 59, 86, 68, 125, 59, 137, 33, 123, 13, 89, 10, 5, 19, 47, 15, 12, 1, 123, 23, 48, 59, 120, 87, 88, 62, 50, 3, 64, 46, 22, 30, 152, 60, 12, 46, 146, 25, 126, 61, 51, 79, 53, 19, 109, 71, 16, 16, 67, 2, 124, 27, 82, 24, 122, 23, 145, 24, 154, 13, 22, 67, 149, 33, 19, 70, 7, 67, 56, 0, 96, 34, 81, 68, 84, 72, 154, 22, 100, 49, 148, 76, 41, 69, 14, 13, 67, 42, 66, 34, 121, 81, 49, 16, 63, 41, 95, 25, 23, 52, 5, 72, 80, 72, 93, 63, 98, 26, 59, 59, 74, 88, 79, 73, 82, 26, 89, 64, 26, 50, 52, 75, 31, 71, 49, 53, 134, 27, 1, 45, 93, 12, 11, 67, 110, 54, 149, 52, 10, 26, 80, 41, 24, 45, 117, 51, 86, 75, 80, 0, 155, 39, 143, 52, 6, 15, 142, 4, 25, 45, 21, 41, 140, 26, 51, 9, 77, 44, 46, 7, 5, 76, 48, 26, 127, 28, 17, 15, 46, 29, 124, 84, 86, 36, 61, 49, 121, 58, 48, 42, 9, 45, 25, 39, 101, 43, 46, 8, 69, 64, 97, 64, 80, 80, 49, 80, 17, 64, 109, 57, 25, 40, 97, 15, 21, 28, 51, 40, 29, 85, 142, 20, 13, 54, 12, 26, 133, 15, 144, 27, 5, 22, 76, 71, 112, 76, 129, 16, 116, 43, 40, 24, 33, 50, 130, 27, 151, 25, 79, 51, 36, 62, 86, 43, 7, 28, 16, 21, 27, 4, 45, 28, 10, 57, 157, 8, 49, 89, 2, 69, 117, 46, 66, 61, 1, 22, 113, 33, 121, 13, 1, 38, 42, 12, 147, 3, 67, 65, 21, 22, 55, 76, 131, 79, 16, 86, 135, 78, 71, 57, 72, 59, 101, 48, 74, 45, 138, 60, 94, 45, 54, 44, 97, 70, 150, 68, 104, 41, 25, 74, 13, 81, 16, 64, 104, 32, 125, 19, 113, 46, 85, 36, 39, 23, 40, 79, 100, 51, 62, 37, 86, 65, 123, 61, 54, 4, 146, 14, 116, 30, 89, 58, 10, 67, 107, 83, 61, 23, 65, 14, 159, 88, 0, 87, 6, 22, 80, 11, 29, 53, 63, 78, 61, 22, 10, 20, 95, 57, 88, 87, 85, 66, 149, 39, 99, 29, 58, 17, 44, 24, 124, 11, 99, 47, 30, 17, 41, 67, 37, 50, 150, 62, 76, 21, 118, 52, 127, 16, 13, 5, 101, 3, 130, 83, 154, 41, 71, 54, 121, 34, 145, 26, 46, 47, 41, 84, 0, 80, 8, 16, 129, 23, 24, 43, 16, 13, 89, 39, 129, 57, 64, 15, 137, 30, 158, 45, 153, 80, 17, 77, 80, 76, 41, 39, 32, 8, 1, 9, 94, 40, 114, 2, 17, 59, 21, 50, 103, 52, 143, 67, 81, 76, 68, 83, 79, 47, 88, 43, 147, 84, 30, 88, 120, 48, 83, 9, 60, 56, 32, 41, 24, 3, 45, 51, 1, 29, 83, 66, 131, 0, 14, 25, 81, 60, 107, 43, 105, 78, 152, 53, 95, 67, 120, 56, 136, 79, 18, 48, 142, 76, 34, 50, 57, 24, 91, 42, 3, 38, 152, 47, 8, 27, 144, 47, 145, 9, 127, 61, 133, 58, 52, 57, 29, 41, 46, 73, 57, 89, 14, 27, 117, 79, 15, 78, 68, 45, 63, 22, 59, 69, 152, 74, 6, 10, 151, 58, 126, 65, 56, 6, 37, 80, 61, 62, 77, 56, 82, 86, 111, 37, 41, 82, 142, 29, 44, 78, 158, 18, 49, 87, 130, 88, 88, 32, 19, 85, 128, 19, 133, 78, 17, 14, 145, 7, 72, 23, 54, 50, 119, 48, 19, 46, 94, 16, 118, 4, 127, 21, 148, 46, 66, 35, 104, 86, 107, 7, 59, 83, 115, 1, 38, 84, 38, 58, 9, 11, 148, 17, 135, 47, 28, 4, 106, 72, 10, 17, 112, 24, 123, 38, 12, 18, 63, 63, 50, 30, 118, 87, 95, 69, 37, 79, 65, 66, 31, 84, 151, 18, 14, 71, 70, 36, 101, 2, 55, 55, 10, 37, 149, 65, 100, 83, 65, 11, 85, 86, 16, 58, 68, 66, 91, 9, 110, 67, 102, 1, 129, 67, 135, 32, 129, 44, 89, 26, 47, 9, 142, 66, 127, 83, 57, 25, 72, 82, 91, 56, 25, 41, 149, 82, 148, 20, 116, 62, 33, 4, 109, 66, 120, 49, 53, 11, 44, 36, 13, 51, 9, 55, 53, 49, 84, 44, 52, 29, 70, 56, 158, 20, 21, 13, 122, 21, 120, 83, 88, 66, 150, 3, 18, 2, 156, 23, 125, 54, 139, 62, 121, 46, 84, 64, 10, 1, 19, 34, 71, 17, 84, 13, 91, 26, 16, 39, 24, 8, 20, 62, 110, 26, 3, 1, 57, 30, 104, 62, 44, 27, 18, 85, 150, 17, 5, 5, 10, 16, 146, 19, 144, 80, 56, 15, 125, 33, 132, 79, 147, 18, 66, 45, 53, 70, 84, 11, 31, 14, 73, 87, 67, 35, 49, 51, 47, 66, 75, 57, 13, 25, 52, 47, 111, 83, 5, 70, 153, 65, 81, 62, 91, 81, 56, 37, 105, 4, 28, 7, 42, 52, 127, 36, 6, 17, 18, 67, 83, 73, 13, 38, 27, 37, 8, 56, 88, 81, 150, 26, 133, 74, 145, 8, 26, 13, 130, 23, 111, 79, 134, 1, 45, 17, 107, 25, 24, 47, 98, 39, 125, 17, 159, 50, 26, 29, 110, 59, 78, 28, 5, 65, 156, 51, 71, 39, 67, 62, 131, 22, 52, 4, 86, 60, 91, 76, 38, 4, 26, 73, 150, 56, 84, 76, 46, 14, 8, 21, 115, 20, 43, 83, 48, 77, 81, 8, 82, 84, 107, 17, 58, 76, 65, 60, 83, 13, 75, 82, 140, 48, 41, 1, 67, 68, 124, 22, 46, 89, 67, 21, 16, 2, 107, 87, 146, 10, 47, 63, 9, 89, 21, 70, 21, 30, 27, 7, 124, 24, 125, 41, 154, 64, 146, 63, 95, 2, 0, 77, 32, 34, 81, 6, 21, 35, 104, 73, 9, 6, 121, 63, 106, 80, 93, 25, 100, 65, 32, 38, 45, 79, 17, 72, 137, 61, 50, 1, 27, 89, 154, 76, 72, 69, 158, 32, 144, 11, 15, 30, 110, 80, 53, 53, 128, 7, 69, 52, 66, 72, 118, 39, 44, 5, 77, 46, 159, 11, 33, 43, 43, 53, 91, 67, 7, 32, 145, 65, 12, 58, 39, 73, 80, 64, 139, 76, 120, 78, 94, 57, 152, 42, 97, 30, 138, 47, 106, 88, 1, 74, 0, 23, 91, 69, 154, 47, 0, 1, 46, 74, 135, 38, 139, 58, 2, 81, 132, 73, 133, 35, 64, 87, 7, 19, 4, 72, 3, 45, 105, 28, 62, 48, 2, 15, 138, 29, 7, 50, 117, 11, 50, 59, 155, 36, 90, 59, 99, 46, 42, 6, 48, 44, 97, 16, 55, 26, 113, 4, 36, 22, 53, 28, 149, 70, 150, 44, 122, 44, 105, 55, 157, 47, 9, 26, 105, 76, 55, 74, 105, 39, 10, 74, 97, 79, 59, 20, 76, 61, 24, 83, 74, 75, 47, 47, 140, 74, 115, 67, 129, 28, 57, 48, 120, 24, 43, 27, 78, 48, 42, 9, 153, 19, 20, 9, 86, 32, 3, 3, 144, 66, 71, 67, 68, 16, 93, 50, 154, 15, 41, 56, 155, 12, 112, 21, 78, 11, 71, 0, 19, 16, 115, 11, 105, 43, 69, 14, 154, 23, 68, 82, 80, 21, 72, 76, 8, 58, 114, 32, 82, 50, 58, 12, 62, 62, 23, 0, 67, 19, 3, 60, 128, 66, 14, 87, 52, 50, 107, 51, 153, 13, 149, 16, 92, 40, 14, 21, 111, 56, 37, 62, 49, 31, 122, 16, 71, 34, 136, 37, 52, 56, 95, 6, 88, 79, 104, 25, 154, 46, 43, 82, 142, 69, 128, 4, 155, 7, 141, 39, 82, 8, 72, 78, 92, 15, 76, 57, 41, 75, 158, 5, 22, 1, 13, 13, 156, 71, 26, 89, 25, 81, 134, 83, 18, 28, 1, 65, 102, 13, 147, 73, 136, 83, 142, 58, 43, 31, 28, 10, 29, 56, 61, 35, 141, 61, 154, 63, 84, 38, 2, 45, 14, 40, 68, 48, 124, 57, 124, 70, 140, 37, 90, 67, 68, 68, 115, 61, 142, 57, 44, 12, 95, 14, 98, 68, 99, 78, 86, 21, 89, 52, 7, 9, 85, 70, 134, 41, 14, 46, 90, 55, 19, 36, 73, 57, 111, 30, 134, 65, 69, 73, 60, 81, 29, 58, 38, 26, 157, 17, 107, 10, 90, 66, 62, 11, 115, 38, 27, 57, 85, 61, 97, 3, 19, 53, 70, 60, 50, 16, 78, 29, 156, 45, 119, 16, 80, 34, 94, 79, 37, 1, 40, 85, 98, 76, 92, 75, 29, 37, 152, 6, 11, 5, 158, 88, 23, 49, 158, 85, 120, 13, 30, 0, 127, 2, 88, 25, 108, 56, 87, 79, 111, 88, 61, 58, 55, 68, 83, 50, 44, 76, 130, 26, 23, 89, 18, 88, 100, 32, 136, 56, 8, 60, 96, 89, 76, 51, 105, 83, 40, 69, 152, 26, 157, 69, 127, 34, 114, 68, 151, 83, 33, 68, 56, 49, 155, 0, 48, 56, 99, 57, 8, 88, 100, 28, 103, 71, 17, 69, 129, 18, 15, 20, 138, 23, 20, 13, 159, 68, 135, 63, 67, 32, 156, 34, 31, 19, 46, 57, 42, 41, 116, 61, 26, 6, 79, 70, 36, 13, 41, 64, 21, 12, 98, 4, 11, 28, 133, 32, 155, 60, 131, 87, 9, 33, 124, 16, 129, 73, 138, 68, 35, 60, 66, 2, 33, 62, 116, 1, 157, 71, 67, 43, 112, 2, 75, 46, 145, 57, 40, 11, 79, 9, 73, 61, 22, 85, 23, 4, 78, 68, 29, 77, 145, 79, 120, 85, 105, 51, 120, 40, 94, 86, 21, 79, 35, 88, 3, 56, 7, 18, 94, 77, 41, 44, 37, 35, 133, 45, 151, 52, 97, 39, 57, 32, 36, 49, 88, 48, 65, 36, 15, 60, 55, 67, 77, 87, 70, 45, 74, 60, 47, 69, 46, 50, 94, 75, 120, 17, 51, 55, 146, 85, 57, 20, 3, 42, 2, 12, 78, 41, 77, 43, 82, 16, 34, 7, 98, 7, 47, 19, 86, 67, 100, 68, 144, 76, 103, 85, 156, 86, 69, 22, 3, 10, 122, 74, 116, 34, 63, 52, 107, 75, 127, 15, 56, 12, 158, 60, 18, 17, 130, 12, 136, 72, 20, 39, 158, 8, 40, 83, 157, 35, 133, 62, 102, 39, 108, 2, 49, 44, 114, 81, 88, 8, 140, 60, 19, 83, 1, 25, 92, 13, 156, 32, 81, 10, 71, 29, 73, 32, 115, 73, 13, 76, 53, 89, 62, 47, 63, 44, 15, 70, 84, 67, 141, 57, 57, 39, 131, 70, 1, 64, 159, 77, 34, 4, 150, 50, 121, 54, 70, 34, 82, 78, 101, 29, 141, 34, 18, 60, 29, 6, 69, 18, 95, 81, 11, 74, 140, 42, 3, 64, 93, 84, 74, 47, 88, 29, 20, 71, 88, 50, 158, 78, 146, 22, 72, 34, 76, 17, 7, 66, 84, 31, 114, 15, 57, 31, 30, 50, 153, 31, 135, 14, 75, 51, 114, 36, 38, 75, 61, 69, 25, 8, 144, 22, 139, 73, 17, 24, 151, 89, 107, 80, 25, 30, 66, 50, 143, 59, 9, 28, 146, 36, 20, 53, 143, 66, 131, 67, 134, 75, 41, 72, 71, 19, 43, 62, 55, 31, 118, 28, 146, 71, 55, 32, 108, 24, 77, 42, 123, 39, 101, 36, 33, 59, 144, 43, 30, 2, 64, 2, 14, 61, 127, 24, 131, 55, 144, 34, 149, 40, 88, 61, 34, 35, 1, 75, 19, 73, 113, 54, 65, 56, 52, 25, 48, 36, 134, 63, 32, 66, 33, 9, 139, 85, 56, 81, 38, 24, 12, 14, 155, 27, 133, 70, 34, 72, 75, 11, 9, 19, 40, 82, 130, 57, 35, 36, 103, 18, 30, 35, 137, 65, 111, 63, 124, 63, 98, 85, 31, 3, 28, 68, 136, 67, 125, 88, 102, 66, 95, 42, 76, 43, 89, 36, 93, 21, 62, 42, 91, 84, 69, 16, 149, 24, 34, 56, 114, 39, 23, 71, 5, 85, 81, 24, 41, 6, 151, 7, 126, 51, 11, 84, 20, 4, 7, 10, 46, 76, 51, 62, 149, 57, 62, 67, 51, 45, 121, 31, 151, 80, 86, 62, 41, 52, 46, 39, 39, 77, 11, 43, 116, 9, 11, 42, 26, 28, 78, 89, 100, 11, 24, 32, 98, 30, 76, 48, 36, 67, 33, 55, 30, 1, 74, 43, 146, 64, 72, 28, 36, 0, 28, 74, 20, 69, 52, 65, 69, 24, 28, 56, 27, 10, 82, 81, 39, 75, 0, 58, 47, 73, 125, 13, 2, 33, 112, 40, 56, 9, 149, 44, 65, 87, 82, 34, 20, 31, 124, 69, 2, 16, 96, 21, 133, 76, 100, 75, 80, 28, 106, 46, 22, 73, 124, 46, 83, 10, 28, 70, 126, 74, 8, 29, 111, 59, 9, 73, 88, 68, 45, 80, 77, 41, 61, 71, 37, 9, 38, 38, 43, 70, 105, 85, 125, 3, 35, 89, 62, 80, 50, 41, 97, 82, 139, 25, 123, 29, 110, 47, 44, 81, 76, 20, 104, 80, 44, 72, 19, 7]
SCIENTIST_COLOUR = "#3098f2"
PLAYER_COLOUR = "#fa2828"
TREE_COLOUR = "#03ad15"
class Entity:
def __init__(self, entity_data) -> None:
self.entity_id: int = entity_data.entityId
self.type: int = entity_data.type
self.position: Vector3 = Vector3(entity_data.position)
self.rotation: Vector3 = Vector3(entity_data.rotation)
self.size: Vector3 = Vector3(entity_data.size)
self.name: str = entity_data.name
def __str__(self) -> str:
return (
f"Entity(entity_id={self.entity_id}, type={self.type}, position={self.position}, "
f"rotation={self.rotation}, size={self.size}, name={self.name})"
)
def __repr__(self):
return self.__str__()
class Vector3:
def __init__(self, vector3=None, x=None, y=None, z=None) -> None:
self.x: float = vector3.x if x is None else x
self.y: float = vector3.y if y is None else y
self.z: float = vector3.z if z is None else z
def __eq__(self, other):
if not isinstance(other, Vector3):
return False
return self.x == other.x and self.y == other.y and self.z == other.z
def __hash__(self):
return hash((self.x, self.y, self.z))
def __str__(self) -> str:
return f"Vector3(x={self.x}, y={self.y}, z={self.z})"
class Parser:
def __init__(self, width: int, height: int) -> None:
self.width = width
self.height = height
self.data_pointer = 0
self._rays = None
self._ray_lookback = [[0 for _ in range(3)] for _ in range(64)]
self._sample_offset = 0
self.colours = [
(127, 127, 127),
(204, 178, 178),
(76, 178, 255),
(153, 153, 153),
(178, 178, 178),
(204, 153, 102),
(255, 102, 102),
(255, 25, 25),
]
self.scale_factor = 1
self.colour_output = None
self.depth_output = None
self.reset_output()
self.entities = []
self.last_fov = 0
self.font = font_manager.FontProperties(family='sans-serif', weight='bold')
self.font = font_manager.findfont(self.font)
def reset_output(self) -> None:
self.colour_output = np.full(
(self.width * self.scale_factor, self.height * self.scale_factor, 3),
np.array([208, 230, 252]),
)
self.depth_output = np.zeros(
(self.width * self.scale_factor, self.height * self.scale_factor)
)
def handle_camera_ray_data(self, data) -> None:
if data is None:
return
self._rays = data
self.data_pointer = 0
self._sample_offset = 2 * data.sample_offset
while self._sample_offset >= 2 * self.width * self.height:
self._sample_offset -= 2 * self.width * self.height
self._ray_lookback = [[0 for _ in range(3)] for _ in range(64)]
def step(self) -> None:
if self._rays is None:
return
while True:
if self.process_rays_batch():
self._rays = None
break
def process_rays_batch(self) -> bool:
if self._rays is None:
return True
for h in range(100):
if self.data_pointer >= len(self._rays.ray_data) - 1:
return True
ray = self.next_ray(self._rays.ray_data)
while self._sample_offset >= 2 * self.width * self.height:
self._sample_offset -= 2 * self.width * self.height
distance = ray[0]
alignment = ray[1]
material = ray[2]
index1 = LOOKUP_CONSTANTS[self._sample_offset]
self._sample_offset += 1
index2 = int(LOOKUP_CONSTANTS[self._sample_offset] * self.width + index1)
self._sample_offset += 1
x = (index2 % self.width) * self.scale_factor
y = (
(self.width * self.height - 1 - index2) // self.width
) * self.scale_factor
if (
not (distance == 1 and alignment == 0 and material == 0)
and material != 7
):
self.colour_output[
x : x + self.scale_factor, y : y + self.scale_factor
] = MathUtils._convert_colour(
(
(colour := self.colours[material])[0],
colour[1],
colour[2],
alignment,
)
)
else:
self.colour_output[
x : x + self.scale_factor, y : y + self.scale_factor
] = (208, 230, 252)
distance = float("inf")
self.depth_output[
x : x + self.scale_factor, y : y + self.scale_factor
] = distance
return False
def next_ray(self, ray_data) -> List[Union[float, int]]:
byte = ray_data[self.data_pointer]
self.data_pointer += 1
if byte == 255:
second_byte = ray_data[self.data_pointer]
self.data_pointer += 1
third_byte = ray_data[self.data_pointer]
self.data_pointer += 1
fourth_byte = ray_data[self.data_pointer]
self.data_pointer += 1
t = (second_byte << 2) | (third_byte >> 6)
r = 63 & third_byte
i = fourth_byte
u = (3 * (int(t / 128) | 0) + 5 * (int(r / 16) | 0) + 7 * i) & 63
self._ray_lookback[u][0] = t
self._ray_lookback[u][1] = r
self._ray_lookback[u][2] = i
else:
c = 192 & byte
if c == 0:
h = 63 & byte
y = self._ray_lookback[h]
t = y[0]
r = y[1]
i = y[2]
elif c == 64:
p = 63 & byte
v = self._ray_lookback[p]
b = v[0]
w = v[1]
x = v[2]
g = ray_data[self.data_pointer]
self.data_pointer += 1
t = b + ((g >> 3) - 15)
r = w + ((7 & g) - 3)
i = x
elif c == 128:
R = 63 & byte
C = self._ray_lookback[R]
I = C[0]
P = C[1]
k = C[2]
t = I + (ray_data[self.data_pointer] - 127)
self.data_pointer += 1
r = P
i = k
else:
A = ray_data[self.data_pointer]
self.data_pointer += 1
F = ray_data[self.data_pointer]
self.data_pointer += 1
t = (A << 2) | (F >> 6)
r = 63 & F
i = 63 & byte
D = (3 * (int(t / 128) | 0) + 5 * (int(r / 16) | 0) + 7 * i) & 63
self._ray_lookback[D][0] = t
self._ray_lookback[D][1] = r
self._ray_lookback[D][2] = i
return [t / 1023, r / 63, i]
def handle_entities(
self,
image_draw: ImageDraw,
image_data: Any,
entities: List[Entity],
cam_fov: float,
depth_data: Any,
far_plane: float,
width: int,
height: int,
entity_render_distance: float,
max_entity_amount: int,
) -> Any:
image_data = np.array(image_data)
players = [player for player in entities if player.type == 2]
trees = [tree for tree in entities if tree.type == 1]
tree_amount = max_entity_amount - len(players)
target_trees = []
if len(trees) < tree_amount:
target_trees = trees
else:
if self.last_fov == cam_fov:
for entity in self.entities:
# Entity is an entity id and we should try and find it in the trees list
for tree in trees:
if tree.entity_id == entity:
target_trees.append(tree)
break
if len(target_trees) < tree_amount:
random.shuffle(trees)
target_trees += trees[: tree_amount - len(target_trees)]
self.entities = [tree.entity_id for tree in target_trees]
self.last_fov = cam_fov
entities = players + target_trees
entities.sort(key=lambda e: e.position.z, reverse=True)
# position, rotation, size of camera
cam_pos = np.array([0, 0, 0])
cam_rot = np.array([0, 0, 0])
cam_near = 0.01
cam_far = 1000
# aspect ratio of the image
aspect_ratio = width / height
view_matrix = MathUtils.camera_matrix(cam_pos, cam_rot)
projection_matrix = MathUtils.perspective_matrix(
cam_fov, aspect_ratio, cam_near, cam_far
)
text = set()
for entity in entities:
if entity.position.z > entity_render_distance and entity.type == 1:
continue
Parser.handle_entity(
entity,
image_draw,
cam_pos,
projection_matrix,
view_matrix,
image_data,
depth_data,
width,
height,
cam_near,
cam_far,
far_plane,
cam_fov,
aspect_ratio,
text,
self.font,
)
return text, image_data
@staticmethod
def handle_entity(
entity,
image_draw,
cam_pos,
projection_matrix,
view_matrix,
image_data,
depth_data,
width,
height,
cam_near,
cam_far,
far_plane,
cam_fov,
aspect_ratio,
text,
font,
) -> None:
entity.size.x = min(entity.size.x, 5)
entity.size.y = min(entity.size.y, 5)
entity.size.z = min(entity.size.z, 5)
entity_pos = np.array(
[
entity.position.x,
entity.position.y + (2 if entity.type == 1 else 0),
entity.position.z,
0,
]
)
entity_rot = np.array(
[entity.rotation.x, entity.rotation.y, entity.rotation.z, 0]
)
entity_size = np.array([entity.size.x, entity.size.y, entity.size.z, 0])
vertices = (
MathUtils.get_player_vertices(entity.size)
if entity.type == 2
else MathUtils.get_tree_vertices(entity.size)
)
# Add the position for the name tag to the vertices
vertices = np.append(vertices, [np.array([0, 1.3, 0, 1])], axis=0)
model_matrix = np.matmul(
np.matmul(
MathUtils.translation_matrix(entity_pos),
MathUtils.rotation_matrix(entity_rot),
),
MathUtils.scale_matrix(entity_size),
)
# Add rotation to face the camera
cam_direction = cam_pos - entity_pos[:3]
cam_direction[1] = 0
cam_angle = np.arctan2(cam_direction[2], cam_direction[0])
cam_rotation_matrix = MathUtils.rotation_matrix([0, cam_angle, 0, 0])
model_matrix = np.matmul(model_matrix, cam_rotation_matrix)
mvp_matrix = np.matmul(np.matmul(projection_matrix, view_matrix), model_matrix)
# Calculate the transformed vertices
transformed_vertices = np.matmul(mvp_matrix, vertices.T).T
# Normalize the transformed vertices and calculate pixel coordinates
pixel_coords = tuple(
map(
tuple,
np.round(
(
(transformed_vertices[:, :2] / transformed_vertices[:, 3, None])
* np.array([width, -height])
/ 2
)
+ np.array([width, height]) / 2
).astype(np.int32),
)
)
# Remove the last element of the pixel_coords array
name_place = pixel_coords[-1]
pixel_coords = pixel_coords[:-1]
colour = (
(PLAYER_COLOUR if not entity.name.isdigit() else SCIENTIST_COLOUR)
if entity.type == 2
else MathUtils.get_slightly_random_colour(TREE_COLOUR, entity.position)
)
MathUtils.set_polygon_with_depth(
MathUtils.gift_wrap_algorithm(pixel_coords),
image_data,
depth_data,
math.sqrt(
entity.position.x**2 + entity.position.y**2 + entity.position.z**2
),
colour,
width,
height,
far_plane,
)
if entity.type == 2:
font_size = min(
16,
max(
MathUtils.get_font_size(
entity.position.z, 250, cam_near, cam_far, aspect_ratio, cam_fov
),
1,
)
)
# The font size should be proportional to the size of the entity as it gets further away
font_obj = ImageFont.truetype(font, font_size)
size = image_draw.textsize(entity.name, font=font_obj)
name_place1 = (
name_place[0] - size[0] // 2,
name_place[1] - size[1] // 2,
)
text.add((name_place1, entity.name, font_obj))
def render(
self,
render_entities: bool,
entities: List[Entity],
fov: float,
far_plane: float,
entity_render_distance: float,
max_entity_amount: int,
) -> Image.Image:
# We have the output array filled with RayData objects
# We can get the material at each pixel and use that to get the colour
# We can then use the alignment to get the alpha value
image = Image.new(
"RGBA",
(self.width * self.scale_factor, self.height * self.scale_factor),
(0, 0, 0),
)
draw = ImageDraw.Draw(image)
if not render_entities:
entities = []
text, image_data = self.handle_entities(
draw,
self.colour_output,
entities,
fov,
self.depth_output,
far_plane,
image.size[0],
image.size[1],
entity_render_distance,
max_entity_amount,
)
image_data = image_data.astype("uint8")
# transpose the array
transposed_arr = image_data.transpose((1, 0, 2))
# This doesn't work:
image = Image.fromarray(transposed_arr, "RGB")
draw = ImageDraw.Draw(image)
for pos, name, font in text:
draw.text(pos, name, font=font, fill="black")
return image
class MathUtils:
VERTEX_CACHE: Dict[Vector3, np.ndarray] = {}
COLOUR_CACHE: Dict[Tuple[float, float, float, float], Tuple[int, int, int]] = {}
@staticmethod
def camera_matrix(position, rotation) -> np.ndarray:
matrix = np.matmul(
MathUtils.rotation_matrix(rotation), MathUtils.translation_matrix(-position)
)
return np.linalg.inv(matrix)
@staticmethod
def scale_matrix(size) -> np.ndarray:
return np.array(
[[size[0], 0, 0, 0], [0, size[1], 0, 0], [0, 0, size[2], 0], [0, 0, 0, 1]]
)
@staticmethod
def rotation_matrix(rotation) -> np.ndarray:
pitch = rotation[0]
yaw = rotation[1]
roll = rotation[2]
rotation_x = np.array(
[
[1, 0, 0, 0],
[0, np.cos(pitch), -np.sin(pitch), 0],
[0, np.sin(pitch), np.cos(pitch), 0],
[0, 0, 0, 1],
]
)
rotation_y = np.array(
[
[np.cos(yaw), 0, np.sin(yaw), 0],
[0, 1, 0, 0],
[-np.sin(yaw), 0, np.cos(yaw), 0],
[0, 0, 0, 1],
]
)
rotation_z = np.array(
[
[np.cos(roll), -np.sin(roll), 0, 0],
[np.sin(roll), np.cos(roll), 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1],
]
)
return np.matmul(np.matmul(rotation_x, rotation_y), rotation_z)
@staticmethod
def translation_matrix(position) -> np.ndarray:
return np.array(
[
[1, 0, 0, position[0]],
[0, 1, 0, position[1]],
[0, 0, 1, -position[2]],
[0, 0, 0, 1],
]
)
@staticmethod
def perspective_matrix(fov, aspect_ratio, near, far) -> np.ndarray:
f = 1 / tan(radians(fov) / 2)
return np.array(
[
[f / aspect_ratio, 0, 0, 0],
[0, f, 0, 0],
[0, 0, (far + near) / (near - far), 2 * far * near / (near - far)],
[0, 0, -1, 0],
]
)
@staticmethod
def gift_wrap_algorithm(vertices) -> List[Tuple[float, float]]:
data = np.array(vertices)
# Check that the min and max are not the same
if (
data.max(axis=0)[0] == data.min(axis=0)[0]
or data.max(axis=0)[1] == data.min(axis=0)[1]
):
return []
# use convex hull algorithm to find the convex hull from scipy
hull = ConvexHull(data)
# get the vertices of the convex hull
return [tuple(data[i]) for i in hull.vertices]
@classmethod
def _convert_colour(
cls,
colour: Tuple[float, float, float, float],
) -> Tuple[int, int, int]:
if colour in cls.COLOUR_CACHE:
return cls.COLOUR_CACHE[colour]
colour = (
int(colour[3] * colour[0]),
int(colour[3] * colour[1]),
int(colour[3] * colour[2]),
)
cls.COLOUR_CACHE[colour] = colour
return colour
@staticmethod
def solve_quadratic(a: float, b: float, c: float, larger: bool) -> float:
"""
Solves a quadratic equation but only returns either the larger or smaller root depending on the larger parameter
"""
if a == 0:
return -c / b
discriminant = b**2 - 4 * a * c
if discriminant < 0:
return 0
if larger:
return (-b + math.sqrt(discriminant)) / (2 * a)
else:
return (-b - math.sqrt(discriminant)) / (2 * a)
@classmethod
def get_tree_vertices(cls, size) -> np.ndarray:
size = Vector3(size)
if size in cls.VERTEX_CACHE:
return cls.VERTEX_CACHE[size]
number_of_segments = 14
segment_angle = (2 * math.pi) / number_of_segments
vertex_list = []
for x_value in [size.y / 8, -size.y / 8]:
for i in range(number_of_segments):
angle = segment_angle * i
z = math.sin(angle) * abs(x_value)
new_x = math.cos(angle) * abs(x_value)
vertex_list.append([new_x, 0, z, 1])
vertex_list.append([0, size.y / 2, 0, 1])
vertices = np.array(vertex_list)
cls.VERTEX_CACHE[size] = vertices
return vertices
@classmethod
def get_player_vertices(cls, size) -> np.ndarray:
size = Vector3(size)
if size in cls.VERTEX_CACHE:
return cls.VERTEX_CACHE[size]
number_of_segments = 14
segment_angle = (2 * math.pi) / number_of_segments
vertex_list1 = []
vertex_list2 = []
# The vertices of the pill
height = size.y + 0.3
width = 0.5 * size.x**size.z
increment = 0.1
x = 0
while x <= width:
for offset in range(-1, 2, 2):
x_value = x * offset
# Use the quadratic formula to find the y values of the top and bottom of the pill
y1 = MathUtils.solve_quadratic(
1, -2 * 0.5, x_value**2 + 0.5**2 - 0.5**2, False
)
y2 = MathUtils.solve_quadratic(
1,
-2 * (height - 0.5),
x_value**2 + (height - 0.5) ** 2 - 0.5**2,
True,
)
if y1 == 0 or y2 == 0:
x_value += increment
continue
for i in range(number_of_segments):
angle = segment_angle * i
z = math.sin(angle) * abs(x_value)
new_x = math.cos(angle) * abs(x_value)
vertex_list1.append([new_x, y1 / 2, z, 1])
vertex_list2.append([new_x, y2 / 2, z, 1])
# when x is greater than 4/5 of the width, decrease the increment
if x > 0.8 * width:
increment = 0.001
x += increment
vertices = np.array(vertex_list1 + vertex_list2[::-1])
cls.VERTEX_CACHE[size] = vertices
return vertices
@staticmethod
def get_slightly_random_colour(colour: str, entity_pos: Vector3) -> str:
# Create an algorithm will slightly vary the colour based on the distance from the origin
# This is to make it easier to distinguish between entities
distance_squared = entity_pos.x**2 + entity_pos.y**2 + 2 * entity_pos.z**2
r, g, b = int(colour[1:3], 16), int(colour[3:5], 16), int(colour[5:7], 16)
r += int(distance_squared * 0.0003) % 10
g += int(distance_squared * 0.0003) % 10
b += int(distance_squared * 0.0003) % 10
return f"#{r}{g}{b}"
@staticmethod
def get_font_size(distance, font_size, near, far, aspect_ratio, fov) -> int:
"""
Given the distance from the screen, uses perspective projection matrix to return a font size for some text.
Args:
distance (float): Distance from the screen in meters
text (str): Text to calculate font size for
font_size (int): Base font size in pixels
screen_width (int): Width of the screen in pixels
screen_height (int): Height of the screen in pixels
Returns:
int: Font size in pixels
"""
f = 1.0 / np.tan(np.deg2rad(fov / 2.0))
projection_matrix = np.array(
[
[f / aspect_ratio, 0.0, 0.0, 0.0],
[0.0, f, 0.0, 0.0],
[
0.0,
0.0,
(far + near) / (near - far),
2.0 * far * near / (near - far),
],
[0.0, 0.0, -1.0, 0.0],
]
)
# Define the modelview matrix based on the distance from the screen
modelview_matrix = np.array(
[
[1.0, 0.0, 0.0, 0.0],
[0.0, 1.0, 0.0, 0.0],
[0.0, 0.0, 1.0, -distance],
[0.0, 0.0, 0.0, 1.0],
]
)
# Calculate the projection of the text onto the screen
text_projection = projection_matrix @ modelview_matrix
projected_text = np.array([font_size, 0, 0, 1]) @ text_projection
projected_text /= projected_text[3]
projected_size = projected_text[0]
return int(projected_size)
@staticmethod
def set_polygon_with_depth(
vertices, image_data, depth_data, depth, colour, width, height, far_plane
) -> None:
if len(vertices) <= 1:
return
colour = MathUtils.convert_colour_to_tuple(colour)
pixels = MathUtils.get_vertices_in_polygon(vertices, width, height)
if len(pixels) == 0:
return
pixels = pixels[
(pixels[:, 0] >= 0)
& (pixels[:, 0] < depth_data.shape[0])
& (pixels[:, 1] >= 0)
& (pixels[:, 1] < depth_data.shape[1])
]
# Get all pixels where depth_data[x, y] * far_plane > depth is true
pixels = pixels[
depth_data[pixels[:, 0], pixels[:, 1]] * far_plane > depth - 0.5
]
# Set the pixels to the colour
image_data[pixels[:, 0], pixels[:, 1]] = colour
@staticmethod
def convert_colour_to_tuple(colour) -> Tuple[int, int, int]:
"""
Converts a colour in the form
#RRGGBB
to a tuple of the form
(R, G, B)
"""
return int(colour[1:3], 16), int(colour[3:5], 16), int(colour[5:7], 16)
@staticmethod
def get_vertices_in_polygon(vertices, width, height) -> np.ndarray:
"""
Takes a list of vertices and returns the vertices that are inside the polygon defined by the vertices
vertices is a list of vertices in the form [x, y]
width and height specify the size of the bounding box around the polygon
"""
# Create an image mask for the polygon
mask = Image.new("L", (width, height), 0)
ImageDraw.Draw(mask).polygon(vertices, outline=1, fill=1)
# Convert the mask to a NumPy array
mask_arr = np.array(mask)
# Find the indices of the non-zero values in the mask array
y, x = np.nonzero(mask_arr)
# Return the vertices that correspond to the non-zero indices
return np.array(list(zip(x, y)))
from js import ImageData, Uint8ClampedArray, CanvasRenderingContext2D as Context2d, createObject, pyready
from pyodide.ffi import to_js, create_proxy
createObject(create_proxy(globals()), "pyodideGlobals")
imgWidth = 160
imgHeight = 90
parser = Parser(imgWidth, imgHeight)
def init_img(width, height):
imgWidth = width
imgHeight = height
parser = Parser(imgWidth, imgHeight)
def get_img(data):
for i in range(len(data)):
parser.handle_camera_ray_data(data[i])
parser.step()
last_packet = data[-1]
far_plane = 250
entity_render_distance = float("inf")
img = parser.render(
True,
last_packet.entities,
last_packet.vertical_fov,
far_plane,
entity_render_distance,
len(last_packet.entities),
)
return to_js(img.convert('RGBA').tobytes())
def draw_img(ctx, data):
data = Uint8ClampedArray.new(get_img(data))
image_data = ImageData.new(data, imgWidth, imgHeight)
ctx.putImageData(image_data, 0, 0)
import asyncio
async def main():
_ = await asyncio.gather(
pyready()
)
asyncio.ensure_future(main())