Added basic cn/gpu support.

This commit is contained in:
XMRig 2019-09-08 08:59:17 +07:00
parent 3d3a32087f
commit 859626cbe3
21 changed files with 1544 additions and 91 deletions

View file

@ -42,7 +42,17 @@ function cn_r()
} }
function cn_gpu()
{
const cn_gpu = addIncludes('cryptonight_gpu.cl', [ 'wolf-aes.cl', 'keccak.cl' ]);
//fs.writeFileSync('cryptonight_gpu_gen.cl', cn_gpu);
fs.writeFileSync('cryptonight_gpu_cl.h', text2h(cn_gpu, 'xmrig', 'cryptonight_gpu_cl'));
}
process.chdir(path.resolve('src/backend/opencl/cl/cn')); process.chdir(path.resolve('src/backend/opencl/cl/cn'));
cn(); cn();
cn_r(); cn_r();
cn_gpu();

View file

@ -38,6 +38,10 @@
# include "backend/opencl/runners/OclRxRunner.h" # include "backend/opencl/runners/OclRxRunner.h"
#endif #endif
#ifdef XMRIG_ALGO_CN_GPU
# include "backend/opencl/runners/OclRyoRunner.h"
#endif
#include <cassert> #include <cassert>
#include <thread> #include <thread>
@ -79,7 +83,15 @@ xmrig::OclWorker::OclWorker(size_t id, const OclLaunchData &data) :
break; break;
default: default:
m_runner = new OclCnRunner(id, data); # ifdef XMRIG_ALGO_CN_GPU
if (m_algorithm == Algorithm::CN_GPU) {
m_runner = new OclRyoRunner(id, data);
}
else
# endif
{
m_runner = new OclCnRunner(id, data);
}
break; break;
} }

View file

@ -23,16 +23,28 @@
*/ */
#include "backend/opencl/cl/cn/cryptonight_cl.h"
#include "backend/opencl/cl/OclSource.h" #include "backend/opencl/cl/OclSource.h"
#include "backend/opencl/cl/cn/cryptonight_cl.h"
#include "crypto/common/Algorithm.h" #include "crypto/common/Algorithm.h"
#ifdef XMRIG_ALGO_CN_GPU
# include "backend/opencl/cl/cn/cryptonight_gpu_cl.h"
#endif
const char *xmrig::OclSource::get(const Algorithm &algorithm) const char *xmrig::OclSource::get(const Algorithm &algorithm)
{ {
if (algorithm.family() == Algorithm::RANDOM_X) { if (algorithm.family() == Algorithm::RANDOM_X) {
return nullptr; // FIXME return nullptr; // FIXME
} }
# ifdef XMRIG_ALGO_CN_GPU
if (algorithm == Algorithm::CN_GPU) {
return cryptonight_gpu_cl;
}
# endif
return cryptonight_cl; return cryptonight_cl;
} }

View file

@ -1,4 +1,14 @@
R"===( #include "wolf-aes.cl"
#include "keccak.cl"
inline uint getIdx()
{
return get_global_id(0) - get_global_offset(0);
}
#define IDX(x) (x)
inline float4 _mm_add_ps(float4 a, float4 b) inline float4 _mm_add_ps(float4 a, float4 b)
@ -6,31 +16,37 @@ inline float4 _mm_add_ps(float4 a, float4 b)
return a + b; return a + b;
} }
inline float4 _mm_sub_ps(float4 a, float4 b) inline float4 _mm_sub_ps(float4 a, float4 b)
{ {
return a - b; return a - b;
} }
inline float4 _mm_mul_ps(float4 a, float4 b) inline float4 _mm_mul_ps(float4 a, float4 b)
{ {
return a * b; return a * b;
} }
inline float4 _mm_div_ps(float4 a, float4 b) inline float4 _mm_div_ps(float4 a, float4 b)
{ {
return a / b; return a / b;
} }
inline float4 _mm_and_ps(float4 a, int b) inline float4 _mm_and_ps(float4 a, int b)
{ {
return as_float4(as_int4(a) & (int4)(b)); return as_float4(as_int4(a) & (int4)(b));
} }
inline float4 _mm_or_ps(float4 a, int b) inline float4 _mm_or_ps(float4 a, int b)
{ {
return as_float4(as_int4(a) | (int4)(b)); return as_float4(as_int4(a) | (int4)(b));
} }
inline float4 _mm_fmod_ps(float4 v, float dc) inline float4 _mm_fmod_ps(float4 v, float dc)
{ {
float4 d = (float4)(dc); float4 d = (float4)(dc);
@ -40,16 +56,19 @@ inline float4 _mm_fmod_ps(float4 v, float dc)
return _mm_sub_ps(v, c); return _mm_sub_ps(v, c);
} }
inline int4 _mm_xor_si128(int4 a, int4 b) inline int4 _mm_xor_si128(int4 a, int4 b)
{ {
return a ^ b; return a ^ b;
} }
inline float4 _mm_xor_ps(float4 a, int b) inline float4 _mm_xor_ps(float4 a, int b)
{ {
return as_float4(as_int4(a) ^ (int4)(b)); return as_float4(as_int4(a) ^ (int4)(b));
} }
inline int4 _mm_alignr_epi8(int4 a, const uint rot) inline int4 _mm_alignr_epi8(int4 a, const uint rot)
{ {
const uint right = 8 * rot; const uint right = 8 * rot;
@ -63,7 +82,8 @@ inline int4 _mm_alignr_epi8(int4 a, const uint rot)
} }
inline global int4* scratchpad_ptr(uint idx, uint n, __global int *lpad) { return (__global int4*)((__global char*)lpad + (idx & 0x1FFFC0) + n * 16); } inline global int4* scratchpad_ptr(uint idx, uint n, __global int *lpad) { return (__global int4*)((__global char*)lpad + (idx & MASK) + n * 16); }
inline float4 fma_break(float4 x) inline float4 fma_break(float4 x)
{ {
@ -72,6 +92,7 @@ inline float4 fma_break(float4 x)
return _mm_or_ps(x, 0x00800000); return _mm_or_ps(x, 0x00800000);
} }
inline void sub_round(float4 n0, float4 n1, float4 n2, float4 n3, float4 rnd_c, float4* n, float4* d, float4* c) inline void sub_round(float4 n0, float4 n1, float4 n2, float4 n3, float4 rnd_c, float4* n, float4* d, float4* c)
{ {
n1 = _mm_add_ps(n1, *c); n1 = _mm_add_ps(n1, *c);
@ -96,6 +117,7 @@ inline void sub_round(float4 n0, float4 n1, float4 n2, float4 n3, float4 rnd_c,
} }
// 9*8 + 2 = 74 // 9*8 + 2 = 74
inline void round_compute(float4 n0, float4 n1, float4 n2, float4 n3, float4 rnd_c, float4* c, float4* r) inline void round_compute(float4 n0, float4 n1, float4 n2, float4 n3, float4 rnd_c, float4* c, float4* r)
{ {
@ -117,14 +139,16 @@ inline void round_compute(float4 n0, float4 n1, float4 n2, float4 n3, float4 rnd
*r =_mm_add_ps(*r, _mm_div_ps(n,d)); *r =_mm_add_ps(*r, _mm_div_ps(n,d));
} }
inline int4 single_comupte(float4 n0, float4 n1, float4 n2, float4 n3, float cnt, float4 rnd_c, __local float4* sum) inline int4 single_comupte(float4 n0, float4 n1, float4 n2, float4 n3, float cnt, float4 rnd_c, __local float4* sum)
{ {
float4 c= (float4)(cnt); float4 c= (float4)(cnt);
// 35 maths calls follow (140 FLOPS) // 35 maths calls follow (140 FLOPS)
float4 r = (float4)(0.0f); float4 r = (float4)(0.0f);
for(int i = 0; i < 4; ++i) for (int i = 0; i < 4; ++i) {
round_compute(n0, n1, n2, n3, rnd_c, &c, &r); round_compute(n0, n1, n2, n3, rnd_c, &c, &r);
}
// do a quick fmod by setting exp to 2 // do a quick fmod by setting exp to 2
r = _mm_and_ps(r, 0x807FFFFF); r = _mm_and_ps(r, 0x807FFFFF);
@ -135,6 +159,7 @@ inline int4 single_comupte(float4 n0, float4 n1, float4 n2, float4 n3, float cnt
return convert_int4_rte(r); return convert_int4_rte(r);
} }
inline void single_comupte_wrap(const uint rot, int4 v0, int4 v1, int4 v2, int4 v3, float cnt, float4 rnd_c, __local float4* sum, __local int4* out) inline void single_comupte_wrap(const uint rot, int4 v0, int4 v1, int4 v2, int4 v3, float cnt, float4 rnd_c, __local float4* sum, __local int4* out)
{ {
float4 n0 = convert_float4_rte(v0); float4 n0 = convert_float4_rte(v0);
@ -146,8 +171,6 @@ inline void single_comupte_wrap(const uint rot, int4 v0, int4 v1, int4 v2, int4
*out = rot == 0 ? r : _mm_alignr_epi8(r, rot); *out = rot == 0 ? r : _mm_alignr_epi8(r, rot);
} }
)==="
R"===(
static const __constant uint look[16][4] = { static const __constant uint look[16][4] = {
{0, 1, 2, 3}, {0, 1, 2, 3},
@ -171,6 +194,7 @@ static const __constant uint look[16][4] = {
{3, 0, 2, 1} {3, 0, 2, 1}
}; };
static const __constant float ccnt[16] = { static const __constant float ccnt[16] = {
1.34375f, 1.34375f,
1.28125f, 1.28125f,
@ -193,23 +217,18 @@ static const __constant float ccnt[16] = {
1.4609375f 1.4609375f
}; };
struct SharedMemChunk struct SharedMemChunk
{ {
int4 out[16]; int4 out[16];
float4 va[16]; float4 va[16];
}; };
__attribute__((reqd_work_group_size(WORKSIZE * 16, 1, 1))) __attribute__((reqd_work_group_size(WORKSIZE * 16, 1, 1)))
__kernel void cn1_cn_gpu(__global int *lpad_in, __global int *spad, uint numThreads) __kernel void cn1(__global int *lpad_in, __global int *spad, uint numThreads)
{ {
const uint gIdx = getIdx(); const uint gIdx = getIdx();
# if (COMP_MODE==1)
if (gIdx / 16 >= numThreads) {
return;
}
# endif
uint chunk = get_local_id(0) / 16; uint chunk = get_local_id(0) / 16;
__global int* lpad = (__global int*)((__global char*)lpad_in + MEMORY * (gIdx/16)); __global int* lpad = (__global int*)((__global char*)lpad_in + MEMORY * (gIdx/16));
@ -229,9 +248,8 @@ __kernel void cn1_cn_gpu(__global int *lpad_in, __global int *spad, uint numThre
const uint tidm = tid % 4; const uint tidm = tid % 4;
const uint block = tidd * 16 + tidm; const uint block = tidd * 16 + tidm;
#pragma unroll 1 #pragma unroll CN_UNROLL
for(size_t i = 0; i < 0xC000; i++) for (uint i = 0; i < ITERATIONS; i++) {
{
mem_fence(CLK_LOCAL_MEM_FENCE); mem_fence(CLK_LOCAL_MEM_FENCE);
int tmp = ((__global int*)scratchpad_ptr(s, tidd, lpad))[tidm]; int tmp = ((__global int*)scratchpad_ptr(s, tidd, lpad))[tidm];
((__local int*)(smem->out))[tid] = tmp; ((__local int*)(smem->out))[tid] = tmp;
@ -251,8 +269,9 @@ __kernel void cn1_cn_gpu(__global int *lpad_in, __global int *spad, uint numThre
mem_fence(CLK_LOCAL_MEM_FENCE); mem_fence(CLK_LOCAL_MEM_FENCE);
int outXor = ((__local int*)smem->out)[block]; int outXor = ((__local int*)smem->out)[block];
for(uint dd = block + 4; dd < (tidd + 1) * 16; dd += 4) for (uint dd = block + 4; dd < (tidd + 1) * 16; dd += 4) {
outXor ^= ((__local int*)smem->out)[dd]; outXor ^= ((__local int*)smem->out)[dd];
}
((__global int*)scratchpad_ptr(s, tidd, lpad))[tidm] = outXor ^ tmp; ((__global int*)scratchpad_ptr(s, tidd, lpad))[tidm] = outXor ^ tmp;
((__local int*)smem->out)[tid] = outXor; ((__local int*)smem->out)[tid] = outXor;
@ -281,56 +300,53 @@ __kernel void cn1_cn_gpu(__global int *lpad_in, __global int *spad, uint numThre
} }
} }
)==="
R"===(
static const __constant uint skip[3] = { static const __constant uint skip[3] = {
20,22,22 20,22,22
}; };
inline void generate_512(uint idx, __local ulong* in, __global ulong* out) inline void generate_512(uint idx, __local ulong* in, __global ulong* out)
{ {
ulong hash[25]; ulong hash[25];
hash[0] = in[0] ^ idx; hash[0] = in[0] ^ idx;
for(int i = 1; i < 25; ++i) for (int i = 1; i < 25; ++i) {
hash[i] = in[i]; hash[i] = in[i];
}
for(int a = 0; a < 3;++a) for (int a = 0; a < 3; ++a) {
{
keccakf1600_1(hash); keccakf1600_1(hash);
for(int i = 0; i < skip[a]; ++i) for (int i = 0; i < skip[a]; ++i) {
out[i] = hash[i]; out[i] = hash[i];
out+=skip[a]; }
out += skip[a];
} }
} }
__attribute__((reqd_work_group_size(8, 8, 1))) __attribute__((reqd_work_group_size(8, 8, 1)))
__kernel void cn0_cn_gpu(__global ulong *input, __global int *Scratchpad, __global ulong *states, uint Threads) __kernel void cn0(__global ulong *input, __global int *Scratchpad, __global ulong *states, uint Threads)
{ {
const uint gIdx = getIdx(); const uint gIdx = getIdx();
__local ulong State_buf[8 * 25]; __local ulong State_buf[8 * 25];
__local ulong* State = State_buf + get_local_id(0) * 25; __local ulong* State = State_buf + get_local_id(0) * 25;
# if (COMP_MODE==1)
// do not use early return here
if(gIdx < Threads)
# endif
{ {
states += 25 * gIdx; states += 25 * gIdx;
Scratchpad = (__global int*)((__global char*)Scratchpad + MEMORY * gIdx); Scratchpad = (__global int*)((__global char*)Scratchpad + MEMORY * gIdx);
if (get_local_id(1) == 0) if (get_local_id(1) == 0) {
{
// NVIDIA # ifdef __NV_CL_C_VERSION
#ifdef __NV_CL_C_VERSION
for(uint i = 0; i < 8; ++i) for(uint i = 0; i < 8; ++i)
State[i] = input[i]; State[i] = input[i];
#else # else
((__local ulong8 *)State)[0] = vload8(0, input); ((__local ulong8 *)State)[0] = vload8(0, input);
#endif # endif
State[8] = input[8]; State[8] = input[8];
State[9] = input[9]; State[9] = input[9];
State[10] = input[10]; State[10] = input[10];
@ -362,8 +378,9 @@ __kernel void cn0_cn_gpu(__global ulong *input, __global int *Scratchpad, __glob
} }
} }
__attribute__((reqd_work_group_size(64, 1, 1))) __attribute__((reqd_work_group_size(64, 1, 1)))
__kernel void cn00_cn_gpu(__global int *Scratchpad, __global ulong *states) __kernel void cn00(__global int *Scratchpad, __global ulong *states)
{ {
const uint gIdx = getIdx() / 64; const uint gIdx = getIdx() / 64;
__local ulong State[25]; __local ulong State[25];
@ -372,20 +389,20 @@ __kernel void cn00_cn_gpu(__global int *Scratchpad, __global ulong *states)
Scratchpad = (__global int*)((__global char*)Scratchpad + MEMORY * gIdx); Scratchpad = (__global int*)((__global char*)Scratchpad + MEMORY * gIdx);
for(int i = get_local_id(0); i < 25; i+=get_local_size(0)) for (int i = get_local_id(0); i < 25; i += get_local_size(0)) {
State[i] = states[i]; State[i] = states[i];
}
barrier(CLK_LOCAL_MEM_FENCE); barrier(CLK_LOCAL_MEM_FENCE);
for (uint i = get_local_id(0); i < MEMORY / 512; i += get_local_size(0)) {
for(uint i = get_local_id(0); i < MEMORY / 512; i += get_local_size(0)) generate_512(i, State, (__global ulong*)((__global uchar*)Scratchpad + i * 512));
{
generate_512(i, State, (__global ulong*)((__global uchar*)Scratchpad + i*512));
} }
} }
__attribute__((reqd_work_group_size(8, 8, 1))) __attribute__((reqd_work_group_size(8, 8, 1)))
__kernel void cn2_cn_gpu(__global uint4 *Scratchpad, __global ulong *states, __global uint *output, ulong Target, uint Threads) __kernel void cn2(__global uint4 *Scratchpad, __global ulong *states, __global uint *output, ulong Target, uint Threads)
{ {
__local uint AES0[256], AES1[256], AES2[256], AES3[256]; __local uint AES0[256], AES1[256], AES2[256], AES3[256];
uint ExpandedKey2[40]; uint ExpandedKey2[40];
@ -406,24 +423,16 @@ __kernel void cn2_cn_gpu(__global uint4 *Scratchpad, __global ulong *states, __g
__local uint4 xin1[8][8]; __local uint4 xin1[8][8];
__local uint4 xin2[8][8]; __local uint4 xin2[8][8];
# if (COMP_MODE==1)
// do not use early return here
if(gIdx < Threads)
# endif
{ {
states += 25 * gIdx; states += 25 * gIdx;
Scratchpad += gIdx * (MEMORY >> 4); Scratchpad += gIdx * (MEMORY >> 4);
#if defined(__Tahiti__) || defined(__Pitcairn__) #if defined(__Tahiti__) || defined(__Pitcairn__)
for(int i = 0; i < 4; ++i) ((ulong *)ExpandedKey2)[i] = states[i + 4]; for(int i = 0; i < 4; ++i) ((ulong *)ExpandedKey2)[i] = states[i + 4];
text = vload4(get_local_id(1) + 4, (__global uint *)states); text = vload4(get_local_id(1) + 4, (__global uint *)states);
#else #else
text = vload4(get_local_id(1) + 4, (__global uint *)states); text = vload4(get_local_id(1) + 4, (__global uint *)states);
((uint8 *)ExpandedKey2)[0] = vload8(1, (__global uint *)states); ((uint8 *)ExpandedKey2)[0] = vload8(1, (__global uint *)states);
#endif #endif
AESExpandKey256(ExpandedKey2); AESExpandKey256(ExpandedKey2);
@ -437,15 +446,10 @@ __kernel void cn2_cn_gpu(__global uint4 *Scratchpad, __global ulong *states, __g
__local uint4* xin2_load = &xin2[(get_local_id(1) + 1) % 8][get_local_id(0)]; __local uint4* xin2_load = &xin2[(get_local_id(1) + 1) % 8][get_local_id(0)];
*xin2_store = (uint4)(0, 0, 0, 0); *xin2_store = (uint4)(0, 0, 0, 0);
# if (COMP_MODE == 1)
// do not use early return here
if (gIdx < Threads)
# endif
{ {
#pragma unroll 2 #pragma unroll 2
for(int i = 0, i1 = get_local_id(1); i < (MEMORY >> 7); ++i, i1 = (i1 + 16) % (MEMORY >> 4)) for (int i = 0, i1 = get_local_id(1); i < (MEMORY >> 7); ++i, i1 = (i1 + 16) % (MEMORY >> 4)) {
{
text ^= Scratchpad[(uint)i1]; text ^= Scratchpad[(uint)i1];
barrier(CLK_LOCAL_MEM_FENCE); barrier(CLK_LOCAL_MEM_FENCE);
text ^= *xin2_load; text ^= *xin2_load;
@ -489,20 +493,12 @@ __kernel void cn2_cn_gpu(__global uint4 *Scratchpad, __global ulong *states, __g
} }
__local ulong State_buf[8 * 25]; __local ulong State_buf[8 * 25];
# if (COMP_MODE==1)
// do not use early return here
if(gIdx < Threads)
# endif
{ {
vstore2(as_ulong2(text), get_local_id(1) + 4, states); vstore2(as_ulong2(text), get_local_id(1) + 4, states);
} }
barrier(CLK_GLOBAL_MEM_FENCE); barrier(CLK_GLOBAL_MEM_FENCE);
# if (COMP_MODE==1)
// do not use early return here
if(gIdx < Threads)
# endif
{ {
if(!get_local_id(1)) if(!get_local_id(1))
{ {
@ -522,5 +518,3 @@ __kernel void cn2_cn_gpu(__global uint4 *Scratchpad, __global ulong *states, __g
} }
mem_fence(CLK_GLOBAL_MEM_FENCE); mem_fence(CLK_GLOBAL_MEM_FENCE);
} }
)==="

View file

@ -0,0 +1,880 @@
#pragma once
namespace xmrig {
static char cryptonight_gpu_cl[27898] = {
0x23,0x69,0x66,0x6e,0x64,0x65,0x66,0x20,0x57,0x4f,0x4c,0x46,0x5f,0x41,0x45,0x53,0x5f,0x43,0x4c,0x0a,0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x57,0x4f,0x4c,0x46,
0x5f,0x41,0x45,0x53,0x5f,0x43,0x4c,0x0a,0x0a,0x23,0x69,0x66,0x64,0x65,0x66,0x20,0x63,0x6c,0x5f,0x61,0x6d,0x64,0x5f,0x6d,0x65,0x64,0x69,0x61,0x5f,0x6f,0x70,0x73,
0x32,0x0a,0x23,0x20,0x20,0x20,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x4f,0x50,0x45,0x4e,0x43,0x4c,0x20,0x45,0x58,0x54,0x45,0x4e,0x53,0x49,0x4f,0x4e,0x20,0x63,0x6c,
0x5f,0x61,0x6d,0x64,0x5f,0x6d,0x65,0x64,0x69,0x61,0x5f,0x6f,0x70,0x73,0x32,0x20,0x3a,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x0a,0x0a,0x23,0x20,0x20,0x20,0x64,0x65,
0x66,0x69,0x6e,0x65,0x20,0x78,0x6d,0x72,0x69,0x67,0x5f,0x61,0x6d,0x64,0x5f,0x62,0x66,0x65,0x28,0x73,0x72,0x63,0x30,0x2c,0x20,0x73,0x72,0x63,0x31,0x2c,0x20,0x73,
0x72,0x63,0x32,0x29,0x20,0x61,0x6d,0x64,0x5f,0x62,0x66,0x65,0x28,0x73,0x72,0x63,0x30,0x2c,0x20,0x73,0x72,0x63,0x31,0x2c,0x20,0x73,0x72,0x63,0x32,0x29,0x0a,0x23,
0x65,0x6c,0x73,0x65,0x0a,0x2f,0x2a,0x20,0x74,0x61,0x6b,0x65,0x6e,0x20,0x66,0x72,0x6f,0x6d,0x3a,0x20,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,
0x6b,0x68,0x72,0x6f,0x6e,0x6f,0x73,0x2e,0x6f,0x72,0x67,0x2f,0x72,0x65,0x67,0x69,0x73,0x74,0x72,0x79,0x2f,0x4f,0x70,0x65,0x6e,0x43,0x4c,0x2f,0x65,0x78,0x74,0x65,
0x6e,0x73,0x69,0x6f,0x6e,0x73,0x2f,0x61,0x6d,0x64,0x2f,0x63,0x6c,0x5f,0x61,0x6d,0x64,0x5f,0x6d,0x65,0x64,0x69,0x61,0x5f,0x6f,0x70,0x73,0x32,0x2e,0x74,0x78,0x74,
0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x42,0x75,0x69,0x6c,0x74,0x2d,0x69,0x6e,0x20,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x0a,0x20,0x2a,0x20,0x20,0x20,
0x20,0x20,0x75,0x69,0x6e,0x74,0x6e,0x20,0x61,0x6d,0x64,0x5f,0x62,0x66,0x65,0x20,0x28,0x75,0x69,0x6e,0x74,0x6e,0x20,0x73,0x72,0x63,0x30,0x2c,0x20,0x75,0x69,0x6e,
0x74,0x6e,0x20,0x73,0x72,0x63,0x31,0x2c,0x20,0x75,0x69,0x6e,0x74,0x6e,0x20,0x73,0x72,0x63,0x32,0x29,0x0a,0x20,0x2a,0x20,0x20,0x20,0x44,0x65,0x73,0x63,0x72,0x69,
0x70,0x74,0x69,0x6f,0x6e,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x4e,0x4f,0x54,0x45,0x3a,0x20,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x20,0x3e,0x3e,0x20,0x62,
0x65,0x6c,0x6f,0x77,0x20,0x72,0x65,0x70,0x72,0x65,0x73,0x65,0x6e,0x74,0x20,0x6c,0x6f,0x67,0x69,0x63,0x61,0x6c,0x20,0x72,0x69,0x67,0x68,0x74,0x20,0x73,0x68,0x69,
0x66,0x74,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x3d,0x20,0x73,0x72,0x63,0x31,0x2e,0x73,0x30,0x20,0x26,0x20,0x33,0x31,0x3b,
0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x20,0x3d,0x20,0x73,0x72,0x63,0x32,0x2e,0x73,0x30,0x20,0x26,0x20,0x33,0x31,0x3b,0x0a,0x20,0x2a,
0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x77,0x69,0x64,0x74,0x68,0x20,0x3d,0x20,0x30,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x73,0x74,
0x2e,0x73,0x30,0x20,0x3d,0x20,0x30,0x3b,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x20,0x28,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,
0x2b,0x20,0x77,0x69,0x64,0x74,0x68,0x29,0x20,0x3c,0x20,0x33,0x32,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x73,0x74,0x2e,0x73,0x30,0x20,
0x3d,0x20,0x28,0x73,0x72,0x63,0x30,0x2e,0x73,0x30,0x20,0x3c,0x3c,0x20,0x28,0x33,0x32,0x20,0x2d,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x2d,0x20,0x77,0x69,0x64,
0x74,0x68,0x29,0x29,0x20,0x3e,0x3e,0x20,0x28,0x33,0x32,0x20,0x2d,0x20,0x77,0x69,0x64,0x74,0x68,0x29,0x3b,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,
0x65,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x73,0x74,0x2e,0x73,0x30,0x20,0x3d,0x20,0x73,0x72,0x63,0x30,0x2e,0x73,0x30,0x20,0x3e,0x3e,
0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x3b,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x73,0x69,0x6d,0x69,0x6c,0x61,0x72,0x20,0x6f,0x70,0x65,0x72,0x61,0x74,0x69,0x6f,
0x6e,0x20,0x61,0x70,0x70,0x6c,0x69,0x65,0x64,0x20,0x74,0x6f,0x20,0x6f,0x74,0x68,0x65,0x72,0x20,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x73,0x20,0x6f,0x66,
0x20,0x74,0x68,0x65,0x20,0x76,0x65,0x63,0x74,0x6f,0x72,0x73,0x0a,0x20,0x2a,0x2f,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x69,0x6e,0x74,0x20,0x78,0x6d,0x72,0x69,
0x67,0x5f,0x61,0x6d,0x64,0x5f,0x62,0x66,0x65,0x28,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x73,0x72,0x63,0x30,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,
0x20,0x75,0x69,0x6e,0x74,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x77,0x69,0x64,0x74,0x68,0x29,0x0a,
0x7b,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2a,0x20,0x63,0x61,0x73,0x74,0x73,0x20,0x61,0x72,0x65,0x20,0x72,0x65,0x6d,0x6f,0x76,0x65,0x64,0x20,0x62,0x65,0x63,0x61,0x75,
0x73,0x65,0x20,0x77,0x65,0x20,0x63,0x61,0x6e,0x20,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x20,0x65,0x76,0x65,0x72,0x79,0x74,0x68,0x69,0x6e,0x67,0x20,0x61,
0x73,0x20,0x75,0x69,0x6e,0x74,0x0a,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x69,0x6e,0x74,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x3d,0x20,0x73,0x72,0x63,0x31,0x3b,
0x0a,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x69,0x6e,0x74,0x20,0x77,0x69,0x64,0x74,0x68,0x20,0x3d,0x20,0x73,0x72,0x63,0x32,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x2a,
0x20,0x72,0x65,0x6d,0x6f,0x76,0x65,0x20,0x63,0x68,0x65,0x63,0x6b,0x20,0x66,0x6f,0x72,0x20,0x65,0x64,0x67,0x65,0x20,0x63,0x61,0x73,0x65,0x2c,0x20,0x74,0x68,0x69,
0x73,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x73,0x20,0x61,0x6c,0x77,0x61,0x79,0x73,0x20,0x63,0x61,0x6c,0x6c,0x65,0x64,0x20,0x77,0x69,0x74,0x68,
0x0a,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x60,0x77,0x69,0x64,0x74,0x68,0x3d,0x3d,0x38,0x60,0x0a,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x40,0x63,0x6f,0x64,0x65,0x0a,
0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x20,0x77,0x69,0x64,0x74,0x68,0x20,0x3d,0x3d,0x20,0x30,0x20,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,
0x2a,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x40,0x65,0x6e,0x64,0x63,0x6f,0x64,0x65,
0x0a,0x20,0x20,0x20,0x20,0x20,0x2a,0x2f,0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x28,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x2b,0x20,0x77,0x69,0x64,0x74,0x68,
0x29,0x20,0x3c,0x20,0x33,0x32,0x75,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x28,0x73,0x72,0x63,0x30,0x20,
0x3c,0x3c,0x20,0x28,0x33,0x32,0x75,0x20,0x2d,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x2d,0x20,0x77,0x69,0x64,0x74,0x68,0x29,0x29,0x20,0x3e,0x3e,0x20,0x28,0x33,
0x32,0x75,0x20,0x2d,0x20,0x77,0x69,0x64,0x74,0x68,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x73,
0x72,0x63,0x30,0x20,0x3e,0x3e,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x3b,0x0a,0x7d,0x0a,0x23,0x65,0x6e,0x64,0x69,0x66,0x0a,0x0a,0x0a,0x2f,0x2f,0x20,0x41,0x45,0x53,
0x20,0x74,0x61,0x62,0x6c,0x65,0x20,0x2d,0x20,0x74,0x68,0x65,0x20,0x6f,0x74,0x68,0x65,0x72,0x20,0x74,0x68,0x72,0x65,0x65,0x20,0x61,0x72,0x65,0x20,0x67,0x65,0x6e,
0x65,0x72,0x61,0x74,0x65,0x64,0x20,0x6f,0x6e,0x20,0x74,0x68,0x65,0x20,0x66,0x6c,0x79,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,
0x5f,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x41,0x45,0x53,0x30,0x5f,0x43,0x5b,0x32,0x35,0x36,0x5d,0x20,0x3d,0x0a,0x7b,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x41,0x35,0x36,0x33,0x36,0x33,0x43,0x36,0x55,0x2c,0x20,0x30,0x78,0x38,0x34,0x37,0x43,0x37,0x43,0x46,0x38,0x55,0x2c,0x20,0x30,0x78,
0x39,0x39,0x37,0x37,0x37,0x37,0x45,0x45,0x55,0x2c,0x20,0x30,0x78,0x38,0x44,0x37,0x42,0x37,0x42,0x46,0x36,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x44,
0x46,0x32,0x46,0x32,0x46,0x46,0x55,0x2c,0x20,0x30,0x78,0x42,0x44,0x36,0x42,0x36,0x42,0x44,0x36,0x55,0x2c,0x20,0x30,0x78,0x42,0x31,0x36,0x46,0x36,0x46,0x44,0x45,
0x55,0x2c,0x20,0x30,0x78,0x35,0x34,0x43,0x35,0x43,0x35,0x39,0x31,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x35,0x30,0x33,0x30,0x33,0x30,0x36,0x30,0x55,0x2c,
0x20,0x30,0x78,0x30,0x33,0x30,0x31,0x30,0x31,0x30,0x32,0x55,0x2c,0x20,0x30,0x78,0x41,0x39,0x36,0x37,0x36,0x37,0x43,0x45,0x55,0x2c,0x20,0x30,0x78,0x37,0x44,0x32,
0x42,0x32,0x42,0x35,0x36,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x31,0x39,0x46,0x45,0x46,0x45,0x45,0x37,0x55,0x2c,0x20,0x30,0x78,0x36,0x32,0x44,0x37,0x44,
0x37,0x42,0x35,0x55,0x2c,0x20,0x30,0x78,0x45,0x36,0x41,0x42,0x41,0x42,0x34,0x44,0x55,0x2c,0x20,0x30,0x78,0x39,0x41,0x37,0x36,0x37,0x36,0x45,0x43,0x55,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x34,0x35,0x43,0x41,0x43,0x41,0x38,0x46,0x55,0x2c,0x20,0x30,0x78,0x39,0x44,0x38,0x32,0x38,0x32,0x31,0x46,0x55,0x2c,0x20,0x30,0x78,
0x34,0x30,0x43,0x39,0x43,0x39,0x38,0x39,0x55,0x2c,0x20,0x30,0x78,0x38,0x37,0x37,0x44,0x37,0x44,0x46,0x41,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x31,0x35,
0x46,0x41,0x46,0x41,0x45,0x46,0x55,0x2c,0x20,0x30,0x78,0x45,0x42,0x35,0x39,0x35,0x39,0x42,0x32,0x55,0x2c,0x20,0x30,0x78,0x43,0x39,0x34,0x37,0x34,0x37,0x38,0x45,
0x55,0x2c,0x20,0x30,0x78,0x30,0x42,0x46,0x30,0x46,0x30,0x46,0x42,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x45,0x43,0x41,0x44,0x41,0x44,0x34,0x31,0x55,0x2c,
0x20,0x30,0x78,0x36,0x37,0x44,0x34,0x44,0x34,0x42,0x33,0x55,0x2c,0x20,0x30,0x78,0x46,0x44,0x41,0x32,0x41,0x32,0x35,0x46,0x55,0x2c,0x20,0x30,0x78,0x45,0x41,0x41,
0x46,0x41,0x46,0x34,0x35,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x42,0x46,0x39,0x43,0x39,0x43,0x32,0x33,0x55,0x2c,0x20,0x30,0x78,0x46,0x37,0x41,0x34,0x41,
0x34,0x35,0x33,0x55,0x2c,0x20,0x30,0x78,0x39,0x36,0x37,0x32,0x37,0x32,0x45,0x34,0x55,0x2c,0x20,0x30,0x78,0x35,0x42,0x43,0x30,0x43,0x30,0x39,0x42,0x55,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x32,0x42,0x37,0x42,0x37,0x37,0x35,0x55,0x2c,0x20,0x30,0x78,0x31,0x43,0x46,0x44,0x46,0x44,0x45,0x31,0x55,0x2c,0x20,0x30,0x78,
0x41,0x45,0x39,0x33,0x39,0x33,0x33,0x44,0x55,0x2c,0x20,0x30,0x78,0x36,0x41,0x32,0x36,0x32,0x36,0x34,0x43,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x35,0x41,
0x33,0x36,0x33,0x36,0x36,0x43,0x55,0x2c,0x20,0x30,0x78,0x34,0x31,0x33,0x46,0x33,0x46,0x37,0x45,0x55,0x2c,0x20,0x30,0x78,0x30,0x32,0x46,0x37,0x46,0x37,0x46,0x35,
0x55,0x2c,0x20,0x30,0x78,0x34,0x46,0x43,0x43,0x43,0x43,0x38,0x33,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x35,0x43,0x33,0x34,0x33,0x34,0x36,0x38,0x55,0x2c,
0x20,0x30,0x78,0x46,0x34,0x41,0x35,0x41,0x35,0x35,0x31,0x55,0x2c,0x20,0x30,0x78,0x33,0x34,0x45,0x35,0x45,0x35,0x44,0x31,0x55,0x2c,0x20,0x30,0x78,0x30,0x38,0x46,
0x31,0x46,0x31,0x46,0x39,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x39,0x33,0x37,0x31,0x37,0x31,0x45,0x32,0x55,0x2c,0x20,0x30,0x78,0x37,0x33,0x44,0x38,0x44,
0x38,0x41,0x42,0x55,0x2c,0x20,0x30,0x78,0x35,0x33,0x33,0x31,0x33,0x31,0x36,0x32,0x55,0x2c,0x20,0x30,0x78,0x33,0x46,0x31,0x35,0x31,0x35,0x32,0x41,0x55,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x43,0x30,0x34,0x30,0x34,0x30,0x38,0x55,0x2c,0x20,0x30,0x78,0x35,0x32,0x43,0x37,0x43,0x37,0x39,0x35,0x55,0x2c,0x20,0x30,0x78,
0x36,0x35,0x32,0x33,0x32,0x33,0x34,0x36,0x55,0x2c,0x20,0x30,0x78,0x35,0x45,0x43,0x33,0x43,0x33,0x39,0x44,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x32,0x38,
0x31,0x38,0x31,0x38,0x33,0x30,0x55,0x2c,0x20,0x30,0x78,0x41,0x31,0x39,0x36,0x39,0x36,0x33,0x37,0x55,0x2c,0x20,0x30,0x78,0x30,0x46,0x30,0x35,0x30,0x35,0x30,0x41,
0x55,0x2c,0x20,0x30,0x78,0x42,0x35,0x39,0x41,0x39,0x41,0x32,0x46,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x39,0x30,0x37,0x30,0x37,0x30,0x45,0x55,0x2c,
0x20,0x30,0x78,0x33,0x36,0x31,0x32,0x31,0x32,0x32,0x34,0x55,0x2c,0x20,0x30,0x78,0x39,0x42,0x38,0x30,0x38,0x30,0x31,0x42,0x55,0x2c,0x20,0x30,0x78,0x33,0x44,0x45,
0x32,0x45,0x32,0x44,0x46,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x32,0x36,0x45,0x42,0x45,0x42,0x43,0x44,0x55,0x2c,0x20,0x30,0x78,0x36,0x39,0x32,0x37,0x32,
0x37,0x34,0x45,0x55,0x2c,0x20,0x30,0x78,0x43,0x44,0x42,0x32,0x42,0x32,0x37,0x46,0x55,0x2c,0x20,0x30,0x78,0x39,0x46,0x37,0x35,0x37,0x35,0x45,0x41,0x55,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x31,0x42,0x30,0x39,0x30,0x39,0x31,0x32,0x55,0x2c,0x20,0x30,0x78,0x39,0x45,0x38,0x33,0x38,0x33,0x31,0x44,0x55,0x2c,0x20,0x30,0x78,
0x37,0x34,0x32,0x43,0x32,0x43,0x35,0x38,0x55,0x2c,0x20,0x30,0x78,0x32,0x45,0x31,0x41,0x31,0x41,0x33,0x34,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x32,0x44,
0x31,0x42,0x31,0x42,0x33,0x36,0x55,0x2c,0x20,0x30,0x78,0x42,0x32,0x36,0x45,0x36,0x45,0x44,0x43,0x55,0x2c,0x20,0x30,0x78,0x45,0x45,0x35,0x41,0x35,0x41,0x42,0x34,
0x55,0x2c,0x20,0x30,0x78,0x46,0x42,0x41,0x30,0x41,0x30,0x35,0x42,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x46,0x36,0x35,0x32,0x35,0x32,0x41,0x34,0x55,0x2c,
0x20,0x30,0x78,0x34,0x44,0x33,0x42,0x33,0x42,0x37,0x36,0x55,0x2c,0x20,0x30,0x78,0x36,0x31,0x44,0x36,0x44,0x36,0x42,0x37,0x55,0x2c,0x20,0x30,0x78,0x43,0x45,0x42,
0x33,0x42,0x33,0x37,0x44,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x37,0x42,0x32,0x39,0x32,0x39,0x35,0x32,0x55,0x2c,0x20,0x30,0x78,0x33,0x45,0x45,0x33,0x45,
0x33,0x44,0x44,0x55,0x2c,0x20,0x30,0x78,0x37,0x31,0x32,0x46,0x32,0x46,0x35,0x45,0x55,0x2c,0x20,0x30,0x78,0x39,0x37,0x38,0x34,0x38,0x34,0x31,0x33,0x55,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x46,0x35,0x35,0x33,0x35,0x33,0x41,0x36,0x55,0x2c,0x20,0x30,0x78,0x36,0x38,0x44,0x31,0x44,0x31,0x42,0x39,0x55,0x2c,0x20,0x30,0x78,
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x55,0x2c,0x20,0x30,0x78,0x32,0x43,0x45,0x44,0x45,0x44,0x43,0x31,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x36,0x30,
0x32,0x30,0x32,0x30,0x34,0x30,0x55,0x2c,0x20,0x30,0x78,0x31,0x46,0x46,0x43,0x46,0x43,0x45,0x33,0x55,0x2c,0x20,0x30,0x78,0x43,0x38,0x42,0x31,0x42,0x31,0x37,0x39,
0x55,0x2c,0x20,0x30,0x78,0x45,0x44,0x35,0x42,0x35,0x42,0x42,0x36,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x42,0x45,0x36,0x41,0x36,0x41,0x44,0x34,0x55,0x2c,
0x20,0x30,0x78,0x34,0x36,0x43,0x42,0x43,0x42,0x38,0x44,0x55,0x2c,0x20,0x30,0x78,0x44,0x39,0x42,0x45,0x42,0x45,0x36,0x37,0x55,0x2c,0x20,0x30,0x78,0x34,0x42,0x33,
0x39,0x33,0x39,0x37,0x32,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x45,0x34,0x41,0x34,0x41,0x39,0x34,0x55,0x2c,0x20,0x30,0x78,0x44,0x34,0x34,0x43,0x34,
0x43,0x39,0x38,0x55,0x2c,0x20,0x30,0x78,0x45,0x38,0x35,0x38,0x35,0x38,0x42,0x30,0x55,0x2c,0x20,0x30,0x78,0x34,0x41,0x43,0x46,0x43,0x46,0x38,0x35,0x55,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x36,0x42,0x44,0x30,0x44,0x30,0x42,0x42,0x55,0x2c,0x20,0x30,0x78,0x32,0x41,0x45,0x46,0x45,0x46,0x43,0x35,0x55,0x2c,0x20,0x30,0x78,
0x45,0x35,0x41,0x41,0x41,0x41,0x34,0x46,0x55,0x2c,0x20,0x30,0x78,0x31,0x36,0x46,0x42,0x46,0x42,0x45,0x44,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x35,
0x34,0x33,0x34,0x33,0x38,0x36,0x55,0x2c,0x20,0x30,0x78,0x44,0x37,0x34,0x44,0x34,0x44,0x39,0x41,0x55,0x2c,0x20,0x30,0x78,0x35,0x35,0x33,0x33,0x33,0x33,0x36,0x36,
0x55,0x2c,0x20,0x30,0x78,0x39,0x34,0x38,0x35,0x38,0x35,0x31,0x31,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x46,0x34,0x35,0x34,0x35,0x38,0x41,0x55,0x2c,
0x20,0x30,0x78,0x31,0x30,0x46,0x39,0x46,0x39,0x45,0x39,0x55,0x2c,0x20,0x30,0x78,0x30,0x36,0x30,0x32,0x30,0x32,0x30,0x34,0x55,0x2c,0x20,0x30,0x78,0x38,0x31,0x37,
0x46,0x37,0x46,0x46,0x45,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x46,0x30,0x35,0x30,0x35,0x30,0x41,0x30,0x55,0x2c,0x20,0x30,0x78,0x34,0x34,0x33,0x43,0x33,
0x43,0x37,0x38,0x55,0x2c,0x20,0x30,0x78,0x42,0x41,0x39,0x46,0x39,0x46,0x32,0x35,0x55,0x2c,0x20,0x30,0x78,0x45,0x33,0x41,0x38,0x41,0x38,0x34,0x42,0x55,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x46,0x33,0x35,0x31,0x35,0x31,0x41,0x32,0x55,0x2c,0x20,0x30,0x78,0x46,0x45,0x41,0x33,0x41,0x33,0x35,0x44,0x55,0x2c,0x20,0x30,0x78,
0x43,0x30,0x34,0x30,0x34,0x30,0x38,0x30,0x55,0x2c,0x20,0x30,0x78,0x38,0x41,0x38,0x46,0x38,0x46,0x30,0x35,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x41,0x44,
0x39,0x32,0x39,0x32,0x33,0x46,0x55,0x2c,0x20,0x30,0x78,0x42,0x43,0x39,0x44,0x39,0x44,0x32,0x31,0x55,0x2c,0x20,0x30,0x78,0x34,0x38,0x33,0x38,0x33,0x38,0x37,0x30,
0x55,0x2c,0x20,0x30,0x78,0x30,0x34,0x46,0x35,0x46,0x35,0x46,0x31,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x46,0x42,0x43,0x42,0x43,0x36,0x33,0x55,0x2c,
0x20,0x30,0x78,0x43,0x31,0x42,0x36,0x42,0x36,0x37,0x37,0x55,0x2c,0x20,0x30,0x78,0x37,0x35,0x44,0x41,0x44,0x41,0x41,0x46,0x55,0x2c,0x20,0x30,0x78,0x36,0x33,0x32,
0x31,0x32,0x31,0x34,0x32,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x33,0x30,0x31,0x30,0x31,0x30,0x32,0x30,0x55,0x2c,0x20,0x30,0x78,0x31,0x41,0x46,0x46,0x46,
0x46,0x45,0x35,0x55,0x2c,0x20,0x30,0x78,0x30,0x45,0x46,0x33,0x46,0x33,0x46,0x44,0x55,0x2c,0x20,0x30,0x78,0x36,0x44,0x44,0x32,0x44,0x32,0x42,0x46,0x55,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x34,0x43,0x43,0x44,0x43,0x44,0x38,0x31,0x55,0x2c,0x20,0x30,0x78,0x31,0x34,0x30,0x43,0x30,0x43,0x31,0x38,0x55,0x2c,0x20,0x30,0x78,
0x33,0x35,0x31,0x33,0x31,0x33,0x32,0x36,0x55,0x2c,0x20,0x30,0x78,0x32,0x46,0x45,0x43,0x45,0x43,0x43,0x33,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x45,0x31,
0x35,0x46,0x35,0x46,0x42,0x45,0x55,0x2c,0x20,0x30,0x78,0x41,0x32,0x39,0x37,0x39,0x37,0x33,0x35,0x55,0x2c,0x20,0x30,0x78,0x43,0x43,0x34,0x34,0x34,0x34,0x38,0x38,
0x55,0x2c,0x20,0x30,0x78,0x33,0x39,0x31,0x37,0x31,0x37,0x32,0x45,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x35,0x37,0x43,0x34,0x43,0x34,0x39,0x33,0x55,0x2c,
0x20,0x30,0x78,0x46,0x32,0x41,0x37,0x41,0x37,0x35,0x35,0x55,0x2c,0x20,0x30,0x78,0x38,0x32,0x37,0x45,0x37,0x45,0x46,0x43,0x55,0x2c,0x20,0x30,0x78,0x34,0x37,0x33,
0x44,0x33,0x44,0x37,0x41,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x41,0x43,0x36,0x34,0x36,0x34,0x43,0x38,0x55,0x2c,0x20,0x30,0x78,0x45,0x37,0x35,0x44,0x35,
0x44,0x42,0x41,0x55,0x2c,0x20,0x30,0x78,0x32,0x42,0x31,0x39,0x31,0x39,0x33,0x32,0x55,0x2c,0x20,0x30,0x78,0x39,0x35,0x37,0x33,0x37,0x33,0x45,0x36,0x55,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x41,0x30,0x36,0x30,0x36,0x30,0x43,0x30,0x55,0x2c,0x20,0x30,0x78,0x39,0x38,0x38,0x31,0x38,0x31,0x31,0x39,0x55,0x2c,0x20,0x30,0x78,
0x44,0x31,0x34,0x46,0x34,0x46,0x39,0x45,0x55,0x2c,0x20,0x30,0x78,0x37,0x46,0x44,0x43,0x44,0x43,0x41,0x33,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x36,0x36,
0x32,0x32,0x32,0x32,0x34,0x34,0x55,0x2c,0x20,0x30,0x78,0x37,0x45,0x32,0x41,0x32,0x41,0x35,0x34,0x55,0x2c,0x20,0x30,0x78,0x41,0x42,0x39,0x30,0x39,0x30,0x33,0x42,
0x55,0x2c,0x20,0x30,0x78,0x38,0x33,0x38,0x38,0x38,0x38,0x30,0x42,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x41,0x34,0x36,0x34,0x36,0x38,0x43,0x55,0x2c,
0x20,0x30,0x78,0x32,0x39,0x45,0x45,0x45,0x45,0x43,0x37,0x55,0x2c,0x20,0x30,0x78,0x44,0x33,0x42,0x38,0x42,0x38,0x36,0x42,0x55,0x2c,0x20,0x30,0x78,0x33,0x43,0x31,
0x34,0x31,0x34,0x32,0x38,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x37,0x39,0x44,0x45,0x44,0x45,0x41,0x37,0x55,0x2c,0x20,0x30,0x78,0x45,0x32,0x35,0x45,0x35,
0x45,0x42,0x43,0x55,0x2c,0x20,0x30,0x78,0x31,0x44,0x30,0x42,0x30,0x42,0x31,0x36,0x55,0x2c,0x20,0x30,0x78,0x37,0x36,0x44,0x42,0x44,0x42,0x41,0x44,0x55,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x33,0x42,0x45,0x30,0x45,0x30,0x44,0x42,0x55,0x2c,0x20,0x30,0x78,0x35,0x36,0x33,0x32,0x33,0x32,0x36,0x34,0x55,0x2c,0x20,0x30,0x78,
0x34,0x45,0x33,0x41,0x33,0x41,0x37,0x34,0x55,0x2c,0x20,0x30,0x78,0x31,0x45,0x30,0x41,0x30,0x41,0x31,0x34,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x42,
0x34,0x39,0x34,0x39,0x39,0x32,0x55,0x2c,0x20,0x30,0x78,0x30,0x41,0x30,0x36,0x30,0x36,0x30,0x43,0x55,0x2c,0x20,0x30,0x78,0x36,0x43,0x32,0x34,0x32,0x34,0x34,0x38,
0x55,0x2c,0x20,0x30,0x78,0x45,0x34,0x35,0x43,0x35,0x43,0x42,0x38,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x35,0x44,0x43,0x32,0x43,0x32,0x39,0x46,0x55,0x2c,
0x20,0x30,0x78,0x36,0x45,0x44,0x33,0x44,0x33,0x42,0x44,0x55,0x2c,0x20,0x30,0x78,0x45,0x46,0x41,0x43,0x41,0x43,0x34,0x33,0x55,0x2c,0x20,0x30,0x78,0x41,0x36,0x36,
0x32,0x36,0x32,0x43,0x34,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x41,0x38,0x39,0x31,0x39,0x31,0x33,0x39,0x55,0x2c,0x20,0x30,0x78,0x41,0x34,0x39,0x35,0x39,
0x35,0x33,0x31,0x55,0x2c,0x20,0x30,0x78,0x33,0x37,0x45,0x34,0x45,0x34,0x44,0x33,0x55,0x2c,0x20,0x30,0x78,0x38,0x42,0x37,0x39,0x37,0x39,0x46,0x32,0x55,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x33,0x32,0x45,0x37,0x45,0x37,0x44,0x35,0x55,0x2c,0x20,0x30,0x78,0x34,0x33,0x43,0x38,0x43,0x38,0x38,0x42,0x55,0x2c,0x20,0x30,0x78,
0x35,0x39,0x33,0x37,0x33,0x37,0x36,0x45,0x55,0x2c,0x20,0x30,0x78,0x42,0x37,0x36,0x44,0x36,0x44,0x44,0x41,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x38,0x43,
0x38,0x44,0x38,0x44,0x30,0x31,0x55,0x2c,0x20,0x30,0x78,0x36,0x34,0x44,0x35,0x44,0x35,0x42,0x31,0x55,0x2c,0x20,0x30,0x78,0x44,0x32,0x34,0x45,0x34,0x45,0x39,0x43,
0x55,0x2c,0x20,0x30,0x78,0x45,0x30,0x41,0x39,0x41,0x39,0x34,0x39,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x42,0x34,0x36,0x43,0x36,0x43,0x44,0x38,0x55,0x2c,
0x20,0x30,0x78,0x46,0x41,0x35,0x36,0x35,0x36,0x41,0x43,0x55,0x2c,0x20,0x30,0x78,0x30,0x37,0x46,0x34,0x46,0x34,0x46,0x33,0x55,0x2c,0x20,0x30,0x78,0x32,0x35,0x45,
0x41,0x45,0x41,0x43,0x46,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x41,0x46,0x36,0x35,0x36,0x35,0x43,0x41,0x55,0x2c,0x20,0x30,0x78,0x38,0x45,0x37,0x41,0x37,
0x41,0x46,0x34,0x55,0x2c,0x20,0x30,0x78,0x45,0x39,0x41,0x45,0x41,0x45,0x34,0x37,0x55,0x2c,0x20,0x30,0x78,0x31,0x38,0x30,0x38,0x30,0x38,0x31,0x30,0x55,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x35,0x42,0x41,0x42,0x41,0x36,0x46,0x55,0x2c,0x20,0x30,0x78,0x38,0x38,0x37,0x38,0x37,0x38,0x46,0x30,0x55,0x2c,0x20,0x30,0x78,
0x36,0x46,0x32,0x35,0x32,0x35,0x34,0x41,0x55,0x2c,0x20,0x30,0x78,0x37,0x32,0x32,0x45,0x32,0x45,0x35,0x43,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x32,0x34,
0x31,0x43,0x31,0x43,0x33,0x38,0x55,0x2c,0x20,0x30,0x78,0x46,0x31,0x41,0x36,0x41,0x36,0x35,0x37,0x55,0x2c,0x20,0x30,0x78,0x43,0x37,0x42,0x34,0x42,0x34,0x37,0x33,
0x55,0x2c,0x20,0x30,0x78,0x35,0x31,0x43,0x36,0x43,0x36,0x39,0x37,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x32,0x33,0x45,0x38,0x45,0x38,0x43,0x42,0x55,0x2c,
0x20,0x30,0x78,0x37,0x43,0x44,0x44,0x44,0x44,0x41,0x31,0x55,0x2c,0x20,0x30,0x78,0x39,0x43,0x37,0x34,0x37,0x34,0x45,0x38,0x55,0x2c,0x20,0x30,0x78,0x32,0x31,0x31,
0x46,0x31,0x46,0x33,0x45,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x44,0x34,0x42,0x34,0x42,0x39,0x36,0x55,0x2c,0x20,0x30,0x78,0x44,0x43,0x42,0x44,0x42,
0x44,0x36,0x31,0x55,0x2c,0x20,0x30,0x78,0x38,0x36,0x38,0x42,0x38,0x42,0x30,0x44,0x55,0x2c,0x20,0x30,0x78,0x38,0x35,0x38,0x41,0x38,0x41,0x30,0x46,0x55,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x39,0x30,0x37,0x30,0x37,0x30,0x45,0x30,0x55,0x2c,0x20,0x30,0x78,0x34,0x32,0x33,0x45,0x33,0x45,0x37,0x43,0x55,0x2c,0x20,0x30,0x78,
0x43,0x34,0x42,0x35,0x42,0x35,0x37,0x31,0x55,0x2c,0x20,0x30,0x78,0x41,0x41,0x36,0x36,0x36,0x36,0x43,0x43,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x38,
0x34,0x38,0x34,0x38,0x39,0x30,0x55,0x2c,0x20,0x30,0x78,0x30,0x35,0x30,0x33,0x30,0x33,0x30,0x36,0x55,0x2c,0x20,0x30,0x78,0x30,0x31,0x46,0x36,0x46,0x36,0x46,0x37,
0x55,0x2c,0x20,0x30,0x78,0x31,0x32,0x30,0x45,0x30,0x45,0x31,0x43,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x41,0x33,0x36,0x31,0x36,0x31,0x43,0x32,0x55,0x2c,
0x20,0x30,0x78,0x35,0x46,0x33,0x35,0x33,0x35,0x36,0x41,0x55,0x2c,0x20,0x30,0x78,0x46,0x39,0x35,0x37,0x35,0x37,0x41,0x45,0x55,0x2c,0x20,0x30,0x78,0x44,0x30,0x42,
0x39,0x42,0x39,0x36,0x39,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x39,0x31,0x38,0x36,0x38,0x36,0x31,0x37,0x55,0x2c,0x20,0x30,0x78,0x35,0x38,0x43,0x31,0x43,
0x31,0x39,0x39,0x55,0x2c,0x20,0x30,0x78,0x32,0x37,0x31,0x44,0x31,0x44,0x33,0x41,0x55,0x2c,0x20,0x30,0x78,0x42,0x39,0x39,0x45,0x39,0x45,0x32,0x37,0x55,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x33,0x38,0x45,0x31,0x45,0x31,0x44,0x39,0x55,0x2c,0x20,0x30,0x78,0x31,0x33,0x46,0x38,0x46,0x38,0x45,0x42,0x55,0x2c,0x20,0x30,0x78,
0x42,0x33,0x39,0x38,0x39,0x38,0x32,0x42,0x55,0x2c,0x20,0x30,0x78,0x33,0x33,0x31,0x31,0x31,0x31,0x32,0x32,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x42,0x42,
0x36,0x39,0x36,0x39,0x44,0x32,0x55,0x2c,0x20,0x30,0x78,0x37,0x30,0x44,0x39,0x44,0x39,0x41,0x39,0x55,0x2c,0x20,0x30,0x78,0x38,0x39,0x38,0x45,0x38,0x45,0x30,0x37,
0x55,0x2c,0x20,0x30,0x78,0x41,0x37,0x39,0x34,0x39,0x34,0x33,0x33,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x42,0x36,0x39,0x42,0x39,0x42,0x32,0x44,0x55,0x2c,
0x20,0x30,0x78,0x32,0x32,0x31,0x45,0x31,0x45,0x33,0x43,0x55,0x2c,0x20,0x30,0x78,0x39,0x32,0x38,0x37,0x38,0x37,0x31,0x35,0x55,0x2c,0x20,0x30,0x78,0x32,0x30,0x45,
0x39,0x45,0x39,0x43,0x39,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x34,0x39,0x43,0x45,0x43,0x45,0x38,0x37,0x55,0x2c,0x20,0x30,0x78,0x46,0x46,0x35,0x35,0x35,
0x35,0x41,0x41,0x55,0x2c,0x20,0x30,0x78,0x37,0x38,0x32,0x38,0x32,0x38,0x35,0x30,0x55,0x2c,0x20,0x30,0x78,0x37,0x41,0x44,0x46,0x44,0x46,0x41,0x35,0x55,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x38,0x46,0x38,0x43,0x38,0x43,0x30,0x33,0x55,0x2c,0x20,0x30,0x78,0x46,0x38,0x41,0x31,0x41,0x31,0x35,0x39,0x55,0x2c,0x20,0x30,0x78,
0x38,0x30,0x38,0x39,0x38,0x39,0x30,0x39,0x55,0x2c,0x20,0x30,0x78,0x31,0x37,0x30,0x44,0x30,0x44,0x31,0x41,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x41,
0x42,0x46,0x42,0x46,0x36,0x35,0x55,0x2c,0x20,0x30,0x78,0x33,0x31,0x45,0x36,0x45,0x36,0x44,0x37,0x55,0x2c,0x20,0x30,0x78,0x43,0x36,0x34,0x32,0x34,0x32,0x38,0x34,
0x55,0x2c,0x20,0x30,0x78,0x42,0x38,0x36,0x38,0x36,0x38,0x44,0x30,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x33,0x34,0x31,0x34,0x31,0x38,0x32,0x55,0x2c,
0x20,0x30,0x78,0x42,0x30,0x39,0x39,0x39,0x39,0x32,0x39,0x55,0x2c,0x20,0x30,0x78,0x37,0x37,0x32,0x44,0x32,0x44,0x35,0x41,0x55,0x2c,0x20,0x30,0x78,0x31,0x31,0x30,
0x46,0x30,0x46,0x31,0x45,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x42,0x42,0x30,0x42,0x30,0x37,0x42,0x55,0x2c,0x20,0x30,0x78,0x46,0x43,0x35,0x34,0x35,
0x34,0x41,0x38,0x55,0x2c,0x20,0x30,0x78,0x44,0x36,0x42,0x42,0x42,0x42,0x36,0x44,0x55,0x2c,0x20,0x30,0x78,0x33,0x41,0x31,0x36,0x31,0x36,0x32,0x43,0x55,0x0a,0x7d,
0x3b,0x0a,0x0a,0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x42,0x59,0x54,0x45,0x28,0x78,0x2c,0x20,0x79,0x29,0x20,0x28,0x78,0x6d,0x72,0x69,0x67,0x5f,0x61,0x6d,0x64,
0x5f,0x62,0x66,0x65,0x28,0x28,0x78,0x29,0x2c,0x20,0x28,0x79,0x29,0x20,0x3c,0x3c,0x20,0x33,0x55,0x2c,0x20,0x38,0x55,0x29,0x29,0x0a,0x0a,0x23,0x69,0x66,0x20,0x28,
0x41,0x4c,0x47,0x4f,0x20,0x3d,0x3d,0x20,0x41,0x4c,0x47,0x4f,0x5f,0x43,0x4e,0x5f,0x48,0x45,0x41,0x56,0x59,0x5f,0x54,0x55,0x42,0x45,0x29,0x0a,0x69,0x6e,0x6c,0x69,
0x6e,0x65,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x41,0x45,0x53,0x5f,0x52,0x6f,0x75,0x6e,0x64,0x5f,0x62,0x69,0x74,0x74,0x75,0x62,0x65,0x32,0x28,0x63,0x6f,0x6e,0x73,
0x74,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x41,0x45,0x53,0x30,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x6c,0x6f,
0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x41,0x45,0x53,0x31,0x2c,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x78,0x2c,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x6b,
0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x78,0x20,0x3d,0x20,0x7e,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x2e,0x73,0x30,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30,
0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x30,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x31,
0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x32,0x2c,0x20,0x32,
0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x33,0x2c,0x20,0x33,0x29,0x5d,0x2c,0x20,0x31,0x36,0x55,0x29,0x3b,0x0a,
0x20,0x20,0x20,0x20,0x78,0x2e,0x73,0x30,0x20,0x5e,0x3d,0x20,0x6b,0x2e,0x73,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x2e,0x73,0x31,0x20,0x5e,0x3d,0x20,0x41,0x45,
0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x31,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,
0x73,0x32,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x33,0x2c,
0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x30,0x2c,0x20,0x33,0x29,0x5d,0x2c,0x20,0x31,0x36,0x55,0x29,
0x3b,0x0a,0x20,0x20,0x20,0x20,0x78,0x2e,0x73,0x31,0x20,0x5e,0x3d,0x20,0x6b,0x2e,0x73,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x2e,0x73,0x32,0x20,0x5e,0x3d,0x20,
0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x32,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,
0x78,0x2e,0x73,0x33,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,
0x30,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x31,0x2c,0x20,0x33,0x29,0x5d,0x2c,0x20,0x31,0x36,
0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x78,0x2e,0x73,0x32,0x20,0x5e,0x3d,0x20,0x6b,0x2e,0x73,0x32,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x2e,0x73,0x33,0x20,0x5e,
0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x33,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,
0x45,0x28,0x78,0x2e,0x73,0x30,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,
0x2e,0x73,0x31,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x32,0x2c,0x20,0x33,0x29,0x5d,0x2c,0x20,
0x31,0x36,0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x3b,0x0a,0x7d,0x0a,0x23,0x65,0x6e,0x64,0x69,0x66,0x0a,0x0a,0x75,0x69,
0x6e,0x74,0x34,0x20,0x41,0x45,0x53,0x5f,0x52,0x6f,0x75,0x6e,0x64,0x28,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,
0x20,0x2a,0x41,0x45,0x53,0x30,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x41,0x45,0x53,0x31,
0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x41,0x45,0x53,0x32,0x2c,0x20,0x63,0x6f,0x6e,0x73,
0x74,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x41,0x45,0x53,0x33,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,
0x34,0x20,0x58,0x2c,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x6b,0x65,0x79,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x65,0x79,0x2e,0x73,0x30,0x20,0x5e,0x3d,0x20,
0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x30,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,
0x58,0x2e,0x73,0x31,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x32,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x32,0x2c,0x20,0x32,0x29,0x5d,0x20,
0x5e,0x20,0x41,0x45,0x53,0x33,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x33,0x2c,0x20,0x33,0x29,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x65,0x79,0x2e,0x73,
0x31,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x31,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,
0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x32,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x32,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x33,0x2c,
0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x33,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x30,0x2c,0x20,0x33,0x29,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,
0x6b,0x65,0x79,0x2e,0x73,0x32,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x32,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,
0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x33,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x32,0x5b,0x42,0x59,0x54,0x45,0x28,
0x58,0x2e,0x73,0x30,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x33,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x31,0x2c,0x20,0x33,0x29,0x5d,0x3b,
0x0a,0x20,0x20,0x20,0x20,0x6b,0x65,0x79,0x2e,0x73,0x33,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x33,0x2c,0x20,0x30,
0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x30,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x32,0x5b,
0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x31,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x33,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x32,0x2c,
0x20,0x33,0x29,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x65,0x79,0x3b,0x0a,0x7d,0x0a,0x0a,0x75,0x69,0x6e,0x74,0x34,0x20,
0x41,0x45,0x53,0x5f,0x52,0x6f,0x75,0x6e,0x64,0x5f,0x54,0x77,0x6f,0x5f,0x54,0x61,0x62,0x6c,0x65,0x73,0x28,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x6c,0x6f,0x63,
0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x41,0x45,0x53,0x30,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,
0x74,0x20,0x2a,0x41,0x45,0x53,0x31,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x58,0x2c,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x6b,0x65,
0x79,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x65,0x79,0x2e,0x73,0x30,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,
0x30,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x31,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x72,
0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x32,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,
0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x33,0x2c,0x20,0x33,0x29,0x5d,0x2c,0x20,0x31,0x36,0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x65,0x79,0x2e,0x73,
0x31,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x31,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,
0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x32,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,
0x45,0x28,0x58,0x2e,0x73,0x33,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x30,0x2c,0x20,0x33,0x29,
0x5d,0x2c,0x20,0x31,0x36,0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x65,0x79,0x2e,0x73,0x32,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,
0x28,0x58,0x2e,0x73,0x32,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x33,0x2c,0x20,0x31,0x29,0x5d,
0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x30,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,
0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x31,0x2c,0x20,0x33,0x29,0x5d,0x2c,0x20,0x31,0x36,0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b,
0x65,0x79,0x2e,0x73,0x33,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x33,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,
0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x30,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30,
0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x31,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x32,
0x2c,0x20,0x33,0x29,0x5d,0x2c,0x20,0x31,0x36,0x55,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x65,0x79,0x3b,0x0a,0x7d,0x0a,
0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x75,0x63,0x68,0x61,0x72,0x20,
0x72,0x63,0x6f,0x6e,0x5b,0x38,0x5d,0x20,0x3d,0x20,0x7b,0x20,0x30,0x78,0x38,0x64,0x2c,0x20,0x30,0x78,0x30,0x31,0x2c,0x20,0x30,0x78,0x30,0x32,0x2c,0x20,0x30,0x78,
0x30,0x34,0x2c,0x20,0x30,0x78,0x30,0x38,0x2c,0x20,0x30,0x78,0x31,0x30,0x2c,0x20,0x30,0x78,0x32,0x30,0x2c,0x20,0x30,0x78,0x34,0x30,0x20,0x7d,0x3b,0x0a,0x0a,0x0a,
0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x75,0x63,0x68,0x61,0x72,0x20,0x73,0x62,
0x6f,0x78,0x5b,0x32,0x35,0x36,0x5d,0x20,0x3d,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x36,0x33,0x2c,0x20,0x30,0x78,0x37,0x43,0x2c,0x20,0x30,0x78,0x37,0x37,
0x2c,0x20,0x30,0x78,0x37,0x42,0x2c,0x20,0x30,0x78,0x46,0x32,0x2c,0x20,0x30,0x78,0x36,0x42,0x2c,0x20,0x30,0x78,0x36,0x46,0x2c,0x20,0x30,0x78,0x43,0x35,0x2c,0x20,
0x30,0x78,0x33,0x30,0x2c,0x20,0x30,0x78,0x30,0x31,0x2c,0x20,0x30,0x78,0x36,0x37,0x2c,0x20,0x30,0x78,0x32,0x42,0x2c,0x20,0x30,0x78,0x46,0x45,0x2c,0x20,0x30,0x78,
0x44,0x37,0x2c,0x20,0x30,0x78,0x41,0x42,0x2c,0x20,0x30,0x78,0x37,0x36,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x41,0x2c,0x20,0x30,0x78,0x38,0x32,0x2c,0x20,
0x30,0x78,0x43,0x39,0x2c,0x20,0x30,0x78,0x37,0x44,0x2c,0x20,0x30,0x78,0x46,0x41,0x2c,0x20,0x30,0x78,0x35,0x39,0x2c,0x20,0x30,0x78,0x34,0x37,0x2c,0x20,0x30,0x78,
0x46,0x30,0x2c,0x20,0x30,0x78,0x41,0x44,0x2c,0x20,0x30,0x78,0x44,0x34,0x2c,0x20,0x30,0x78,0x41,0x32,0x2c,0x20,0x30,0x78,0x41,0x46,0x2c,0x20,0x30,0x78,0x39,0x43,
0x2c,0x20,0x30,0x78,0x41,0x34,0x2c,0x20,0x30,0x78,0x37,0x32,0x2c,0x20,0x30,0x78,0x43,0x30,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x42,0x37,0x2c,0x20,0x30,0x78,
0x46,0x44,0x2c,0x20,0x30,0x78,0x39,0x33,0x2c,0x20,0x30,0x78,0x32,0x36,0x2c,0x20,0x30,0x78,0x33,0x36,0x2c,0x20,0x30,0x78,0x33,0x46,0x2c,0x20,0x30,0x78,0x46,0x37,
0x2c,0x20,0x30,0x78,0x43,0x43,0x2c,0x20,0x30,0x78,0x33,0x34,0x2c,0x20,0x30,0x78,0x41,0x35,0x2c,0x20,0x30,0x78,0x45,0x35,0x2c,0x20,0x30,0x78,0x46,0x31,0x2c,0x20,
0x30,0x78,0x37,0x31,0x2c,0x20,0x30,0x78,0x44,0x38,0x2c,0x20,0x30,0x78,0x33,0x31,0x2c,0x20,0x30,0x78,0x31,0x35,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x34,
0x2c,0x20,0x30,0x78,0x43,0x37,0x2c,0x20,0x30,0x78,0x32,0x33,0x2c,0x20,0x30,0x78,0x43,0x33,0x2c,0x20,0x30,0x78,0x31,0x38,0x2c,0x20,0x30,0x78,0x39,0x36,0x2c,0x20,
0x30,0x78,0x30,0x35,0x2c,0x20,0x30,0x78,0x39,0x41,0x2c,0x20,0x30,0x78,0x30,0x37,0x2c,0x20,0x30,0x78,0x31,0x32,0x2c,0x20,0x30,0x78,0x38,0x30,0x2c,0x20,0x30,0x78,
0x45,0x32,0x2c,0x20,0x30,0x78,0x45,0x42,0x2c,0x20,0x30,0x78,0x32,0x37,0x2c,0x20,0x30,0x78,0x42,0x32,0x2c,0x20,0x30,0x78,0x37,0x35,0x2c,0x0a,0x20,0x20,0x20,0x20,
0x30,0x78,0x30,0x39,0x2c,0x20,0x30,0x78,0x38,0x33,0x2c,0x20,0x30,0x78,0x32,0x43,0x2c,0x20,0x30,0x78,0x31,0x41,0x2c,0x20,0x30,0x78,0x31,0x42,0x2c,0x20,0x30,0x78,
0x36,0x45,0x2c,0x20,0x30,0x78,0x35,0x41,0x2c,0x20,0x30,0x78,0x41,0x30,0x2c,0x20,0x30,0x78,0x35,0x32,0x2c,0x20,0x30,0x78,0x33,0x42,0x2c,0x20,0x30,0x78,0x44,0x36,
0x2c,0x20,0x30,0x78,0x42,0x33,0x2c,0x20,0x30,0x78,0x32,0x39,0x2c,0x20,0x30,0x78,0x45,0x33,0x2c,0x20,0x30,0x78,0x32,0x46,0x2c,0x20,0x30,0x78,0x38,0x34,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x35,0x33,0x2c,0x20,0x30,0x78,0x44,0x31,0x2c,0x20,0x30,0x78,0x30,0x30,0x2c,0x20,0x30,0x78,0x45,0x44,0x2c,0x20,0x30,0x78,0x32,0x30,
0x2c,0x20,0x30,0x78,0x46,0x43,0x2c,0x20,0x30,0x78,0x42,0x31,0x2c,0x20,0x30,0x78,0x35,0x42,0x2c,0x20,0x30,0x78,0x36,0x41,0x2c,0x20,0x30,0x78,0x43,0x42,0x2c,0x20,
0x30,0x78,0x42,0x45,0x2c,0x20,0x30,0x78,0x33,0x39,0x2c,0x20,0x30,0x78,0x34,0x41,0x2c,0x20,0x30,0x78,0x34,0x43,0x2c,0x20,0x30,0x78,0x35,0x38,0x2c,0x20,0x30,0x78,
0x43,0x46,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x30,0x2c,0x20,0x30,0x78,0x45,0x46,0x2c,0x20,0x30,0x78,0x41,0x41,0x2c,0x20,0x30,0x78,0x46,0x42,0x2c,0x20,
0x30,0x78,0x34,0x33,0x2c,0x20,0x30,0x78,0x34,0x44,0x2c,0x20,0x30,0x78,0x33,0x33,0x2c,0x20,0x30,0x78,0x38,0x35,0x2c,0x20,0x30,0x78,0x34,0x35,0x2c,0x20,0x30,0x78,
0x46,0x39,0x2c,0x20,0x30,0x78,0x30,0x32,0x2c,0x20,0x30,0x78,0x37,0x46,0x2c,0x20,0x30,0x78,0x35,0x30,0x2c,0x20,0x30,0x78,0x33,0x43,0x2c,0x20,0x30,0x78,0x39,0x46,
0x2c,0x20,0x30,0x78,0x41,0x38,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x35,0x31,0x2c,0x20,0x30,0x78,0x41,0x33,0x2c,0x20,0x30,0x78,0x34,0x30,0x2c,0x20,0x30,0x78,
0x38,0x46,0x2c,0x20,0x30,0x78,0x39,0x32,0x2c,0x20,0x30,0x78,0x39,0x44,0x2c,0x20,0x30,0x78,0x33,0x38,0x2c,0x20,0x30,0x78,0x46,0x35,0x2c,0x20,0x30,0x78,0x42,0x43,
0x2c,0x20,0x30,0x78,0x42,0x36,0x2c,0x20,0x30,0x78,0x44,0x41,0x2c,0x20,0x30,0x78,0x32,0x31,0x2c,0x20,0x30,0x78,0x31,0x30,0x2c,0x20,0x30,0x78,0x46,0x46,0x2c,0x20,
0x30,0x78,0x46,0x33,0x2c,0x20,0x30,0x78,0x44,0x32,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x44,0x2c,0x20,0x30,0x78,0x30,0x43,0x2c,0x20,0x30,0x78,0x31,0x33,
0x2c,0x20,0x30,0x78,0x45,0x43,0x2c,0x20,0x30,0x78,0x35,0x46,0x2c,0x20,0x30,0x78,0x39,0x37,0x2c,0x20,0x30,0x78,0x34,0x34,0x2c,0x20,0x30,0x78,0x31,0x37,0x2c,0x20,
0x30,0x78,0x43,0x34,0x2c,0x20,0x30,0x78,0x41,0x37,0x2c,0x20,0x30,0x78,0x37,0x45,0x2c,0x20,0x30,0x78,0x33,0x44,0x2c,0x20,0x30,0x78,0x36,0x34,0x2c,0x20,0x30,0x78,
0x35,0x44,0x2c,0x20,0x30,0x78,0x31,0x39,0x2c,0x20,0x30,0x78,0x37,0x33,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x36,0x30,0x2c,0x20,0x30,0x78,0x38,0x31,0x2c,0x20,
0x30,0x78,0x34,0x46,0x2c,0x20,0x30,0x78,0x44,0x43,0x2c,0x20,0x30,0x78,0x32,0x32,0x2c,0x20,0x30,0x78,0x32,0x41,0x2c,0x20,0x30,0x78,0x39,0x30,0x2c,0x20,0x30,0x78,
0x38,0x38,0x2c,0x20,0x30,0x78,0x34,0x36,0x2c,0x20,0x30,0x78,0x45,0x45,0x2c,0x20,0x30,0x78,0x42,0x38,0x2c,0x20,0x30,0x78,0x31,0x34,0x2c,0x20,0x30,0x78,0x44,0x45,
0x2c,0x20,0x30,0x78,0x35,0x45,0x2c,0x20,0x30,0x78,0x30,0x42,0x2c,0x20,0x30,0x78,0x44,0x42,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x45,0x30,0x2c,0x20,0x30,0x78,
0x33,0x32,0x2c,0x20,0x30,0x78,0x33,0x41,0x2c,0x20,0x30,0x78,0x30,0x41,0x2c,0x20,0x30,0x78,0x34,0x39,0x2c,0x20,0x30,0x78,0x30,0x36,0x2c,0x20,0x30,0x78,0x32,0x34,
0x2c,0x20,0x30,0x78,0x35,0x43,0x2c,0x20,0x30,0x78,0x43,0x32,0x2c,0x20,0x30,0x78,0x44,0x33,0x2c,0x20,0x30,0x78,0x41,0x43,0x2c,0x20,0x30,0x78,0x36,0x32,0x2c,0x20,
0x30,0x78,0x39,0x31,0x2c,0x20,0x30,0x78,0x39,0x35,0x2c,0x20,0x30,0x78,0x45,0x34,0x2c,0x20,0x30,0x78,0x37,0x39,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x45,0x37,
0x2c,0x20,0x30,0x78,0x43,0x38,0x2c,0x20,0x30,0x78,0x33,0x37,0x2c,0x20,0x30,0x78,0x36,0x44,0x2c,0x20,0x30,0x78,0x38,0x44,0x2c,0x20,0x30,0x78,0x44,0x35,0x2c,0x20,
0x30,0x78,0x34,0x45,0x2c,0x20,0x30,0x78,0x41,0x39,0x2c,0x20,0x30,0x78,0x36,0x43,0x2c,0x20,0x30,0x78,0x35,0x36,0x2c,0x20,0x30,0x78,0x46,0x34,0x2c,0x20,0x30,0x78,
0x45,0x41,0x2c,0x20,0x30,0x78,0x36,0x35,0x2c,0x20,0x30,0x78,0x37,0x41,0x2c,0x20,0x30,0x78,0x41,0x45,0x2c,0x20,0x30,0x78,0x30,0x38,0x2c,0x0a,0x20,0x20,0x20,0x20,
0x30,0x78,0x42,0x41,0x2c,0x20,0x30,0x78,0x37,0x38,0x2c,0x20,0x30,0x78,0x32,0x35,0x2c,0x20,0x30,0x78,0x32,0x45,0x2c,0x20,0x30,0x78,0x31,0x43,0x2c,0x20,0x30,0x78,
0x41,0x36,0x2c,0x20,0x30,0x78,0x42,0x34,0x2c,0x20,0x30,0x78,0x43,0x36,0x2c,0x20,0x30,0x78,0x45,0x38,0x2c,0x20,0x30,0x78,0x44,0x44,0x2c,0x20,0x30,0x78,0x37,0x34,
0x2c,0x20,0x30,0x78,0x31,0x46,0x2c,0x20,0x30,0x78,0x34,0x42,0x2c,0x20,0x30,0x78,0x42,0x44,0x2c,0x20,0x30,0x78,0x38,0x42,0x2c,0x20,0x30,0x78,0x38,0x41,0x2c,0x0a,
0x20,0x20,0x20,0x20,0x30,0x78,0x37,0x30,0x2c,0x20,0x30,0x78,0x33,0x45,0x2c,0x20,0x30,0x78,0x42,0x35,0x2c,0x20,0x30,0x78,0x36,0x36,0x2c,0x20,0x30,0x78,0x34,0x38,
0x2c,0x20,0x30,0x78,0x30,0x33,0x2c,0x20,0x30,0x78,0x46,0x36,0x2c,0x20,0x30,0x78,0x30,0x45,0x2c,0x20,0x30,0x78,0x36,0x31,0x2c,0x20,0x30,0x78,0x33,0x35,0x2c,0x20,
0x30,0x78,0x35,0x37,0x2c,0x20,0x30,0x78,0x42,0x39,0x2c,0x20,0x30,0x78,0x38,0x36,0x2c,0x20,0x30,0x78,0x43,0x31,0x2c,0x20,0x30,0x78,0x31,0x44,0x2c,0x20,0x30,0x78,
0x39,0x45,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x45,0x31,0x2c,0x20,0x30,0x78,0x46,0x38,0x2c,0x20,0x30,0x78,0x39,0x38,0x2c,0x20,0x30,0x78,0x31,0x31,0x2c,0x20,
0x30,0x78,0x36,0x39,0x2c,0x20,0x30,0x78,0x44,0x39,0x2c,0x20,0x30,0x78,0x38,0x45,0x2c,0x20,0x30,0x78,0x39,0x34,0x2c,0x20,0x30,0x78,0x39,0x42,0x2c,0x20,0x30,0x78,
0x31,0x45,0x2c,0x20,0x30,0x78,0x38,0x37,0x2c,0x20,0x30,0x78,0x45,0x39,0x2c,0x20,0x30,0x78,0x43,0x45,0x2c,0x20,0x30,0x78,0x35,0x35,0x2c,0x20,0x30,0x78,0x32,0x38,
0x2c,0x20,0x30,0x78,0x44,0x46,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x38,0x43,0x2c,0x20,0x30,0x78,0x41,0x31,0x2c,0x20,0x30,0x78,0x38,0x39,0x2c,0x20,0x30,0x78,
0x30,0x44,0x2c,0x20,0x30,0x78,0x42,0x46,0x2c,0x20,0x30,0x78,0x45,0x36,0x2c,0x20,0x30,0x78,0x34,0x32,0x2c,0x20,0x30,0x78,0x36,0x38,0x2c,0x20,0x30,0x78,0x34,0x31,
0x2c,0x20,0x30,0x78,0x39,0x39,0x2c,0x20,0x30,0x78,0x32,0x44,0x2c,0x20,0x30,0x78,0x30,0x46,0x2c,0x20,0x30,0x78,0x42,0x30,0x2c,0x20,0x30,0x78,0x35,0x34,0x2c,0x20,
0x30,0x78,0x42,0x42,0x2c,0x20,0x30,0x78,0x31,0x36,0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x53,0x75,0x62,0x57,0x6f,0x72,0x64,0x28,
0x69,0x6e,0x77,0x29,0x20,0x28,0x28,0x73,0x62,0x6f,0x78,0x5b,0x42,0x59,0x54,0x45,0x28,0x69,0x6e,0x77,0x2c,0x20,0x33,0x29,0x5d,0x20,0x3c,0x3c,0x20,0x32,0x34,0x29,
0x20,0x7c,0x20,0x28,0x73,0x62,0x6f,0x78,0x5b,0x42,0x59,0x54,0x45,0x28,0x69,0x6e,0x77,0x2c,0x20,0x32,0x29,0x5d,0x20,0x3c,0x3c,0x20,0x31,0x36,0x29,0x20,0x7c,0x20,
0x28,0x73,0x62,0x6f,0x78,0x5b,0x42,0x59,0x54,0x45,0x28,0x69,0x6e,0x77,0x2c,0x20,0x31,0x29,0x5d,0x20,0x3c,0x3c,0x20,0x38,0x29,0x20,0x7c,0x20,0x73,0x62,0x6f,0x78,
0x5b,0x42,0x59,0x54,0x45,0x28,0x69,0x6e,0x77,0x2c,0x20,0x30,0x29,0x5d,0x29,0x0a,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x41,0x45,0x53,0x45,0x78,0x70,0x61,0x6e,0x64,
0x4b,0x65,0x79,0x32,0x35,0x36,0x28,0x75,0x69,0x6e,0x74,0x20,0x2a,0x6b,0x65,0x79,0x62,0x75,0x66,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2f,0x23,0x70,0x72,
0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x34,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x75,0x69,0x6e,0x74,0x20,0x63,0x20,0x3d,0x20,
0x38,0x2c,0x20,0x69,0x20,0x3d,0x20,0x31,0x3b,0x20,0x63,0x20,0x3c,0x20,0x34,0x30,0x3b,0x20,0x2b,0x2b,0x63,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x2f,0x2f,0x20,0x46,0x6f,0x72,0x20,0x32,0x35,0x36,0x2d,0x62,0x69,0x74,0x20,0x6b,0x65,0x79,0x73,0x2c,0x20,0x61,0x6e,0x20,0x73,0x62,0x6f,0x78,0x20,0x70,0x65,
0x72,0x6d,0x75,0x74,0x61,0x74,0x69,0x6f,0x6e,0x20,0x69,0x73,0x20,0x64,0x6f,0x6e,0x65,0x20,0x65,0x76,0x65,0x72,0x79,0x20,0x6f,0x74,0x68,0x65,0x72,0x20,0x34,0x74,
0x68,0x20,0x75,0x69,0x6e,0x74,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,0x74,0x65,0x64,0x2c,0x20,0x41,0x4e,0x44,0x20,0x65,0x76,0x65,0x72,0x79,0x20,0x38,0x74,0x68,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x75,0x69,0x6e,0x74,0x20,0x74,0x20,0x3d,0x20,0x28,0x28,0x21,0x28,0x63,0x20,0x26,0x20,0x37,0x29,0x29,0x20,0x7c,0x7c,0x20,
0x28,0x28,0x63,0x20,0x26,0x20,0x37,0x29,0x20,0x3d,0x3d,0x20,0x34,0x29,0x29,0x20,0x3f,0x20,0x53,0x75,0x62,0x57,0x6f,0x72,0x64,0x28,0x6b,0x65,0x79,0x62,0x75,0x66,
0x5b,0x63,0x20,0x2d,0x20,0x31,0x5d,0x29,0x20,0x3a,0x20,0x6b,0x65,0x79,0x62,0x75,0x66,0x5b,0x63,0x20,0x2d,0x20,0x31,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x2f,0x2f,0x20,0x49,0x66,0x20,0x74,0x68,0x65,0x20,0x75,0x69,0x6e,0x74,0x20,0x77,0x65,0x27,0x72,0x65,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,0x74,0x69,
0x6e,0x67,0x20,0x68,0x61,0x73,0x20,0x61,0x6e,0x20,0x69,0x6e,0x64,0x65,0x78,0x20,0x74,0x68,0x61,0x74,0x20,0x69,0x73,0x20,0x61,0x20,0x6d,0x75,0x6c,0x74,0x69,0x70,
0x6c,0x65,0x20,0x6f,0x66,0x20,0x38,0x2c,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x20,0x61,0x6e,0x64,0x20,0x58,0x4f,0x52,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65,
0x20,0x72,0x6f,0x75,0x6e,0x64,0x20,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x74,0x68,0x65,0x6e,
0x20,0x58,0x4f,0x52,0x20,0x74,0x68,0x69,0x73,0x20,0x77,0x69,0x74,0x68,0x20,0x70,0x72,0x65,0x76,0x69,0x6f,0x75,0x73,0x6c,0x79,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,
0x74,0x65,0x64,0x20,0x75,0x69,0x6e,0x74,0x2e,0x20,0x49,0x66,0x20,0x69,0x74,0x27,0x73,0x20,0x34,0x20,0x61,0x66,0x74,0x65,0x72,0x20,0x61,0x20,0x6d,0x75,0x6c,0x74,
0x69,0x70,0x6c,0x65,0x20,0x6f,0x66,0x20,0x38,0x2c,0x20,0x6f,0x6e,0x6c,0x79,0x20,0x74,0x68,0x65,0x20,0x73,0x62,0x6f,0x78,0x20,0x70,0x65,0x72,0x6d,0x75,0x74,0x61,
0x74,0x69,0x6f,0x6e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x69,0x73,0x20,0x64,0x6f,0x6e,0x65,0x2c,0x20,0x66,0x6f,0x6c,0x6c,0x6f,0x77,0x65,
0x64,0x20,0x62,0x79,0x20,0x74,0x68,0x65,0x20,0x58,0x4f,0x52,0x2e,0x20,0x49,0x66,0x20,0x6e,0x65,0x69,0x74,0x68,0x65,0x72,0x20,0x61,0x72,0x65,0x20,0x74,0x72,0x75,
0x65,0x2c,0x20,0x6f,0x6e,0x6c,0x79,0x20,0x74,0x68,0x65,0x20,0x58,0x4f,0x52,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65,0x20,0x70,0x72,0x65,0x76,0x69,0x6f,0x75,
0x73,0x6c,0x79,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,0x74,0x65,0x64,0x20,0x75,0x69,0x6e,0x74,0x20,0x69,0x73,0x20,0x64,0x6f,0x6e,0x65,0x2e,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x6b,0x65,0x79,0x62,0x75,0x66,0x5b,0x63,0x5d,0x20,0x3d,0x20,0x6b,0x65,0x79,0x62,0x75,0x66,0x5b,0x63,0x20,0x2d,0x20,0x38,0x5d,0x20,0x5e,0x20,
0x28,0x28,0x21,0x28,0x63,0x20,0x26,0x20,0x37,0x29,0x29,0x20,0x3f,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x74,0x2c,0x20,0x32,0x34,0x55,0x29,0x20,0x5e,0x20,0x61,
0x73,0x5f,0x75,0x69,0x6e,0x74,0x28,0x28,0x75,0x63,0x68,0x61,0x72,0x34,0x29,0x28,0x72,0x63,0x6f,0x6e,0x5b,0x69,0x2b,0x2b,0x5d,0x2c,0x20,0x30,0x55,0x2c,0x20,0x30,
0x55,0x2c,0x20,0x30,0x55,0x29,0x29,0x20,0x3a,0x20,0x74,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x23,0x65,0x6e,0x64,0x69,0x66,0x0a,0x0a,0x23,
0x69,0x66,0x6e,0x64,0x65,0x66,0x20,0x58,0x4d,0x52,0x49,0x47,0x5f,0x4b,0x45,0x43,0x43,0x41,0x4b,0x5f,0x43,0x4c,0x0a,0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x58,
0x4d,0x52,0x49,0x47,0x5f,0x4b,0x45,0x43,0x43,0x41,0x4b,0x5f,0x43,0x4c,0x0a,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,
0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x72,0x6e,0x64,0x63,0x5b,0x32,0x34,0x5d,0x20,
0x3d,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x2c,0x20,0x30,0x78,0x30,0x30,
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x38,0x32,0x2c,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,
0x38,0x61,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x2c,0x20,0x30,0x78,0x30,0x30,
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x38,0x62,0x2c,0x20,0x30,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x30,0x30,
0x30,0x31,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x38,0x30,0x38,0x31,0x2c,0x20,0x30,0x78,0x38,0x30,
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x39,0x2c,0x20,0x30,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0x38,0x61,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x38,0x2c,0x20,0x30,0x78,0x30,0x30,
0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x38,0x30,0x30,0x39,0x2c,0x20,0x30,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x30,0x30,
0x30,0x61,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x38,0x30,0x38,0x62,0x2c,0x20,0x30,0x78,0x38,0x30,
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x62,0x2c,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,
0x38,0x39,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x33,0x2c,0x20,0x30,0x78,0x38,0x30,
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x32,0x2c,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0x38,0x30,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x61,0x2c,0x20,0x30,0x78,0x38,0x30,
0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x61,0x2c,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x38,0x30,
0x38,0x31,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x38,0x30,0x2c,0x20,0x30,0x78,0x30,0x30,
0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x2c,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x38,0x30,
0x30,0x38,0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,
0x75,0x69,0x6e,0x74,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x72,0x6f,0x74,0x63,0x5b,0x32,0x34,0x5d,0x20,0x3d,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x31,0x2c,
0x20,0x20,0x33,0x2c,0x20,0x20,0x36,0x2c,0x20,0x20,0x31,0x30,0x2c,0x20,0x31,0x35,0x2c,0x20,0x32,0x31,0x2c,0x20,0x32,0x38,0x2c,0x20,0x33,0x36,0x2c,0x20,0x34,0x35,
0x2c,0x20,0x35,0x35,0x2c,0x20,0x32,0x2c,0x20,0x20,0x31,0x34,0x2c,0x0a,0x20,0x20,0x20,0x20,0x32,0x37,0x2c,0x20,0x34,0x31,0x2c,0x20,0x35,0x36,0x2c,0x20,0x38,0x2c,
0x20,0x20,0x32,0x35,0x2c,0x20,0x34,0x33,0x2c,0x20,0x36,0x32,0x2c,0x20,0x31,0x38,0x2c,0x20,0x33,0x39,0x2c,0x20,0x36,0x31,0x2c,0x20,0x32,0x30,0x2c,0x20,0x34,0x34,
0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x75,0x69,
0x6e,0x74,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x70,0x69,0x6c,0x6e,0x5b,0x32,0x34,0x5d,0x20,0x3d,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x31,0x30,0x2c,0x20,
0x37,0x2c,0x20,0x20,0x31,0x31,0x2c,0x20,0x31,0x37,0x2c,0x20,0x31,0x38,0x2c,0x20,0x33,0x2c,0x20,0x35,0x2c,0x20,0x20,0x31,0x36,0x2c,0x20,0x38,0x2c,0x20,0x20,0x32,
0x31,0x2c,0x20,0x32,0x34,0x2c,0x20,0x34,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x35,0x2c,0x20,0x32,0x33,0x2c,0x20,0x31,0x39,0x2c,0x20,0x31,0x33,0x2c,0x20,0x31,0x32,
0x2c,0x20,0x32,0x2c,0x20,0x32,0x30,0x2c,0x20,0x31,0x34,0x2c,0x20,0x32,0x32,0x2c,0x20,0x39,0x2c,0x20,0x20,0x36,0x2c,0x20,0x20,0x31,0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,
0x76,0x6f,0x69,0x64,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x31,0x36,0x30,0x30,0x5f,0x31,0x28,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x2a,0x73,0x74,0x29,0x0a,0x7b,0x0a,
0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x20,0x69,0x2c,0x20,0x72,0x6f,0x75,0x6e,0x64,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x74,0x2c,0x20,0x62,
0x63,0x5b,0x35,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20,0x20,0x20,
0x66,0x6f,0x72,0x20,0x28,0x72,0x6f,0x75,0x6e,0x64,0x20,0x3d,0x20,0x30,0x3b,0x20,0x72,0x6f,0x75,0x6e,0x64,0x20,0x3c,0x20,0x32,0x34,0x3b,0x20,0x2b,0x2b,0x72,0x6f,
0x75,0x6e,0x64,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x54,0x68,0x65,0x74,0x61,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x62,0x63,0x5b,0x30,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x30,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x35,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x30,0x5d,0x20,0x5e,
0x20,0x73,0x74,0x5b,0x31,0x35,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x31,0x5d,0x20,
0x3d,0x20,0x73,0x74,0x5b,0x31,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x36,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x31,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x36,
0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x32,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x32,
0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x37,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x32,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x37,0x5d,0x20,0x5e,0x20,0x73,0x74,
0x5b,0x32,0x32,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x33,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x33,0x5d,0x20,0x5e,0x20,0x73,0x74,
0x5b,0x38,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x33,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x38,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x33,0x5d,0x3b,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x34,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x34,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x39,0x5d,0x20,0x5e,0x20,
0x73,0x74,0x5b,0x31,0x34,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x39,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x34,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,
0x28,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x35,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x74,0x20,0x3d,0x20,0x62,0x63,0x5b,0x28,0x69,0x20,0x2b,0x20,0x34,0x29,0x20,0x25,0x20,0x35,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x62,
0x63,0x5b,0x28,0x69,0x20,0x2b,0x20,0x31,0x29,0x20,0x25,0x20,0x35,0x5d,0x2c,0x20,0x31,0x55,0x4c,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x73,0x74,0x5b,0x69,0x20,0x20,0x20,0x20,0x20,0x5d,0x20,0x5e,0x3d,0x20,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,
0x74,0x5b,0x69,0x20,0x2b,0x20,0x20,0x35,0x5d,0x20,0x5e,0x3d,0x20,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69,
0x20,0x2b,0x20,0x31,0x30,0x5d,0x20,0x5e,0x3d,0x20,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,
0x31,0x35,0x5d,0x20,0x5e,0x3d,0x20,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x32,0x30,0x5d,
0x20,0x5e,0x3d,0x20,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x52,0x68,0x6f,
0x20,0x50,0x69,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x20,0x3d,0x20,0x73,0x74,0x5b,0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,
0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x20,0x3d,
0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x34,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,
0x63,0x5b,0x30,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x70,0x69,0x6c,0x6e,0x5b,0x69,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x70,0x69,0x6c,0x6e,0x5b,0x69,0x5d,0x5d,0x20,0x3d,0x20,0x72,0x6f,
0x74,0x61,0x74,0x65,0x28,0x74,0x2c,0x20,0x28,0x75,0x6c,0x6f,0x6e,0x67,0x29,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x72,0x6f,0x74,0x63,0x5b,0x69,0x5d,0x29,0x3b,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x20,0x3d,0x20,0x62,0x63,0x5b,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x35,0x3b,0x20,0x69,0x20,0x2b,0x3d,
0x20,0x35,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x74,0x6d,0x70,0x5b,0x35,0x5d,0x3b,0x0a,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x78,0x20,0x3d,0x20,0x30,0x3b,0x20,0x78,0x20,0x3c,0x20,0x35,0x3b,
0x20,0x2b,0x2b,0x78,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x6d,0x70,0x5b,0x78,0x5d,0x20,0x3d,
0x20,0x62,0x69,0x74,0x73,0x65,0x6c,0x65,0x63,0x74,0x28,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x78,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x28,0x28,
0x78,0x20,0x2b,0x20,0x32,0x29,0x20,0x25,0x20,0x35,0x29,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x78,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,
0x28,0x28,0x78,0x20,0x2b,0x20,0x31,0x29,0x20,0x25,0x20,0x35,0x29,0x5d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x78,0x20,0x3d,0x20,0x30,0x3b,0x20,0x78,0x20,0x3c,0x20,0x35,0x3b,0x20,
0x2b,0x2b,0x78,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x78,0x5d,
0x20,0x3d,0x20,0x74,0x6d,0x70,0x5b,0x78,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x20,0x49,0x6f,0x74,0x61,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,
0x30,0x5d,0x20,0x5e,0x3d,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x72,0x6e,0x64,0x63,0x5b,0x72,0x6f,0x75,0x6e,0x64,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,
0x0a,0x7d,0x0a,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x31,0x36,0x30,0x30,0x5f,0x32,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,
0x75,0x6c,0x6f,0x6e,0x67,0x20,0x2a,0x73,0x74,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x20,0x69,0x2c,0x20,0x72,0x6f,0x75,0x6e,0x64,0x3b,0x0a,0x20,
0x20,0x20,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x74,0x2c,0x20,0x62,0x63,0x5b,0x35,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,
0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x72,0x6f,0x75,0x6e,0x64,0x20,0x3d,0x20,0x30,0x3b,0x20,0x72,0x6f,0x75,
0x6e,0x64,0x20,0x3c,0x20,0x32,0x34,0x3b,0x20,0x2b,0x2b,0x72,0x6f,0x75,0x6e,0x64,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x30,
0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x30,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x35,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x30,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,
0x31,0x35,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x30,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x73,0x74,0x5b,0x32,0x5d,0x20,0x5e,0x20,0x73,0x74,
0x5b,0x37,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x32,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x37,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x32,0x5d,0x2c,0x20,
0x31,0x55,0x4c,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x31,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x31,0x5d,0x20,0x5e,0x20,0x73,0x74,
0x5b,0x36,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x31,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x36,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x31,0x5d,0x20,0x5e,
0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x73,0x74,0x5b,0x33,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x38,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x33,0x5d,0x20,0x5e,
0x20,0x73,0x74,0x5b,0x31,0x38,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x33,0x5d,0x2c,0x20,0x31,0x55,0x4c,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x62,0x63,0x5b,0x32,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x32,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x37,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x32,0x5d,0x20,0x5e,
0x20,0x73,0x74,0x5b,0x31,0x37,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x32,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x73,0x74,0x5b,0x34,0x5d,0x20,
0x5e,0x20,0x73,0x74,0x5b,0x39,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x34,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x39,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,
0x34,0x5d,0x2c,0x20,0x31,0x55,0x4c,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x33,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x33,0x5d,0x20,
0x5e,0x20,0x73,0x74,0x5b,0x38,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x33,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x38,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,
0x33,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x73,0x74,0x5b,0x30,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x35,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,
0x30,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x35,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x30,0x5d,0x2c,0x20,0x31,0x55,0x4c,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x34,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x34,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x39,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,
0x34,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x39,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x34,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x73,0x74,
0x5b,0x31,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x36,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x31,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x36,0x5d,0x20,0x5e,0x20,
0x73,0x74,0x5b,0x32,0x31,0x5d,0x2c,0x20,0x31,0x55,0x4c,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x30,0x5d,0x20,0x20,0x5e,0x3d,
0x20,0x62,0x63,0x5b,0x34,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x35,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x34,0x5d,0x3b,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x31,0x30,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x34,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x73,0x74,0x5b,0x31,0x35,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x34,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x32,0x30,
0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x34,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x31,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,
0x63,0x5b,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x36,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x30,0x5d,0x3b,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x31,0x31,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x73,0x74,0x5b,0x31,0x36,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x32,0x31,0x5d,0x20,
0x5e,0x3d,0x20,0x62,0x63,0x5b,0x30,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x32,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,
0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x37,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x31,0x32,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,
0x5b,0x31,0x37,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x32,0x32,0x5d,0x20,0x5e,0x3d,
0x20,0x62,0x63,0x5b,0x31,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x33,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x32,0x5d,
0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x38,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x32,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x73,0x74,0x5b,0x31,0x33,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x32,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x31,
0x38,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x32,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x32,0x33,0x5d,0x20,0x5e,0x3d,0x20,0x62,
0x63,0x5b,0x32,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x34,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x33,0x5d,0x3b,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x39,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x33,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x73,0x74,0x5b,0x31,0x34,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x33,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x31,0x39,0x5d,
0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x33,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x32,0x34,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,
0x33,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x52,0x68,0x6f,0x20,0x50,0x69,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,
0x20,0x3d,0x20,0x73,0x74,0x5b,0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,
0x20,0x31,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x34,0x3b,0x20,0x2b,
0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x30,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x6b,0x65,0x63,
0x63,0x61,0x6b,0x66,0x5f,0x70,0x69,0x6c,0x6e,0x5b,0x69,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x6b,0x65,
0x63,0x63,0x61,0x6b,0x66,0x5f,0x70,0x69,0x6c,0x6e,0x5b,0x69,0x5d,0x5d,0x20,0x3d,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x74,0x2c,0x20,0x28,0x75,0x6c,0x6f,0x6e,
0x67,0x29,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x72,0x6f,0x74,0x63,0x5b,0x69,0x5d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x74,0x20,0x3d,0x20,0x62,0x63,0x5b,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x70,
0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,
0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x35,0x3b,0x20,0x69,0x20,0x2b,0x3d,0x20,0x35,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x74,0x6d,0x70,0x31,0x20,0x3d,0x20,0x73,0x74,0x5b,0x69,0x5d,0x2c,0x20,0x74,0x6d,0x70,0x32,0x20,0x3d,0x20,
0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x31,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69,0x5d,0x20,0x3d,0x20,
0x62,0x69,0x74,0x73,0x65,0x6c,0x65,0x63,0x74,0x28,0x73,0x74,0x5b,0x69,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x32,0x5d,0x2c,0x20,0x73,0x74,0x5b,
0x69,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x31,0x5d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69,
0x20,0x2b,0x20,0x31,0x5d,0x20,0x3d,0x20,0x62,0x69,0x74,0x73,0x65,0x6c,0x65,0x63,0x74,0x28,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x31,0x5d,0x20,0x5e,0x20,0x73,0x74,
0x5b,0x69,0x20,0x2b,0x20,0x33,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x31,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x32,0x5d,0x29,0x3b,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x32,0x5d,0x20,0x3d,0x20,0x62,0x69,0x74,0x73,0x65,0x6c,0x65,0x63,
0x74,0x28,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x32,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x34,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,
0x32,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x33,0x5d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69,
0x20,0x2b,0x20,0x33,0x5d,0x20,0x3d,0x20,0x62,0x69,0x74,0x73,0x65,0x6c,0x65,0x63,0x74,0x28,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x33,0x5d,0x20,0x5e,0x20,0x74,0x6d,
0x70,0x31,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x33,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x34,0x5d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x34,0x5d,0x20,0x3d,0x20,0x62,0x69,0x74,0x73,0x65,0x6c,0x65,0x63,0x74,0x28,0x73,0x74,0x5b,
0x69,0x20,0x2b,0x20,0x34,0x5d,0x20,0x5e,0x20,0x74,0x6d,0x70,0x32,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x34,0x5d,0x2c,0x20,0x74,0x6d,0x70,0x31,0x29,0x3b,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x20,0x49,0x6f,0x74,0x61,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x30,0x5d,0x20,0x5e,0x3d,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x72,0x6e,0x64,0x63,0x5b,0x72,0x6f,0x75,0x6e,0x64,
0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x0a,0x23,0x65,0x6e,0x64,0x69,0x66,0x0a,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x75,0x69,
0x6e,0x74,0x20,0x67,0x65,0x74,0x49,0x64,0x78,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x67,0x65,0x74,0x5f,0x67,0x6c,0x6f,
0x62,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x20,0x2d,0x20,0x67,0x65,0x74,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x5f,0x6f,0x66,0x66,0x73,0x65,0x74,0x28,0x30,0x29,
0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x49,0x44,0x58,0x28,0x78,0x29,0x20,0x28,0x78,0x29,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,
0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x61,0x2c,0x20,0x66,0x6c,
0x6f,0x61,0x74,0x34,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x20,0x2b,0x20,0x62,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,
0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x73,0x75,0x62,0x5f,0x70,0x73,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,
0x61,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x20,0x2d,0x20,0x62,0x3b,
0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x66,0x6c,
0x6f,0x61,0x74,0x34,0x20,0x61,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,
0x20,0x2a,0x20,0x62,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x64,0x69,0x76,0x5f,
0x70,0x73,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x61,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,
0x75,0x72,0x6e,0x20,0x61,0x20,0x2f,0x20,0x62,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d,
0x5f,0x61,0x6e,0x64,0x5f,0x70,0x73,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x61,0x2c,0x20,0x69,0x6e,0x74,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,
0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x73,0x5f,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x61,0x73,0x5f,0x69,0x6e,0x74,0x34,0x28,0x61,0x29,0x20,0x26,0x20,0x28,0x69,0x6e,
0x74,0x34,0x29,0x28,0x62,0x29,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x6f,
0x72,0x5f,0x70,0x73,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x61,0x2c,0x20,0x69,0x6e,0x74,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,
0x72,0x6e,0x20,0x61,0x73,0x5f,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x61,0x73,0x5f,0x69,0x6e,0x74,0x34,0x28,0x61,0x29,0x20,0x7c,0x20,0x28,0x69,0x6e,0x74,0x34,0x29,
0x28,0x62,0x29,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x66,0x6d,0x6f,0x64,
0x5f,0x70,0x73,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x76,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x63,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,
0x6f,0x61,0x74,0x34,0x20,0x64,0x20,0x3d,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x29,0x28,0x64,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,
0x34,0x20,0x63,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x64,0x69,0x76,0x5f,0x70,0x73,0x28,0x76,0x2c,0x20,0x64,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x20,0x3d,0x20,
0x74,0x72,0x75,0x6e,0x63,0x28,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x63,0x2c,0x20,
0x64,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x5f,0x6d,0x6d,0x5f,0x73,0x75,0x62,0x5f,0x70,0x73,0x28,0x76,0x2c,0x20,0x63,0x29,0x3b,
0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x69,0x6e,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x78,0x6f,0x72,0x5f,0x73,0x69,0x31,0x32,0x38,0x28,0x69,
0x6e,0x74,0x34,0x20,0x61,0x2c,0x20,0x69,0x6e,0x74,0x34,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x20,0x5e,0x20,
0x62,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x78,0x6f,0x72,0x5f,0x70,0x73,0x28,
0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x61,0x2c,0x20,0x69,0x6e,0x74,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x73,
0x5f,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x61,0x73,0x5f,0x69,0x6e,0x74,0x34,0x28,0x61,0x29,0x20,0x5e,0x20,0x28,0x69,0x6e,0x74,0x34,0x29,0x28,0x62,0x29,0x29,0x3b,
0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x69,0x6e,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x6c,0x69,0x67,0x6e,0x72,0x5f,0x65,0x70,0x69,0x38,
0x28,0x69,0x6e,0x74,0x34,0x20,0x61,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x72,0x6f,0x74,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x63,
0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x72,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x38,0x20,0x2a,0x20,0x72,0x6f,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,
0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x6c,0x65,0x66,0x74,0x20,0x3d,0x20,0x28,0x33,0x32,0x20,0x2d,0x20,0x38,0x20,0x2a,0x20,0x72,0x6f,0x74,0x29,0x3b,
0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x28,0x69,0x6e,0x74,0x34,0x29,0x28,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x75,0x69,
0x6e,0x74,0x29,0x61,0x2e,0x78,0x20,0x3e,0x3e,0x20,0x72,0x69,0x67,0x68,0x74,0x29,0x20,0x7c,0x20,0x28,0x20,0x61,0x2e,0x79,0x20,0x3c,0x3c,0x20,0x6c,0x65,0x66,0x74,
0x20,0x29,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x75,0x69,0x6e,0x74,0x29,0x61,0x2e,0x79,0x20,0x3e,0x3e,0x20,0x72,0x69,0x67,0x68,0x74,0x29,
0x20,0x7c,0x20,0x28,0x20,0x61,0x2e,0x7a,0x20,0x3c,0x3c,0x20,0x6c,0x65,0x66,0x74,0x20,0x29,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x75,0x69,
0x6e,0x74,0x29,0x61,0x2e,0x7a,0x20,0x3e,0x3e,0x20,0x72,0x69,0x67,0x68,0x74,0x29,0x20,0x7c,0x20,0x28,0x20,0x61,0x2e,0x77,0x20,0x3c,0x3c,0x20,0x6c,0x65,0x66,0x74,
0x20,0x29,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x75,0x69,0x6e,0x74,0x29,0x61,0x2e,0x77,0x20,0x3e,0x3e,0x20,0x72,0x69,0x67,0x68,0x74,0x29,
0x20,0x7c,0x20,0x28,0x20,0x61,0x2e,0x78,0x20,0x3c,0x3c,0x20,0x6c,0x65,0x66,0x74,0x20,0x29,0x0a,0x20,0x20,0x20,0x20,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,
0x6c,0x69,0x6e,0x65,0x20,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x34,0x2a,0x20,0x73,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x5f,0x70,0x74,0x72,
0x28,0x75,0x69,0x6e,0x74,0x20,0x69,0x64,0x78,0x2c,0x20,0x75,0x69,0x6e,0x74,0x20,0x6e,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x20,
0x2a,0x6c,0x70,0x61,0x64,0x29,0x20,0x7b,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x34,0x2a,0x29,
0x28,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x63,0x68,0x61,0x72,0x2a,0x29,0x6c,0x70,0x61,0x64,0x20,0x2b,0x20,0x28,0x69,0x64,0x78,0x20,0x26,0x20,0x4d,
0x41,0x53,0x4b,0x29,0x20,0x2b,0x20,0x6e,0x20,0x2a,0x20,0x31,0x36,0x29,0x3b,0x20,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,
0x34,0x20,0x66,0x6d,0x61,0x5f,0x62,0x72,0x65,0x61,0x6b,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x78,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x42,
0x72,0x65,0x61,0x6b,0x20,0x74,0x68,0x65,0x20,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x79,0x20,0x63,0x68,0x61,0x69,0x6e,0x20,0x62,0x79,0x20,0x73,0x65,0x74,
0x69,0x74,0x6e,0x67,0x20,0x74,0x68,0x65,0x20,0x65,0x78,0x70,0x20,0x74,0x6f,0x20,0x3f,0x3f,0x3f,0x3f,0x3f,0x30,0x31,0x0a,0x20,0x20,0x20,0x20,0x78,0x20,0x3d,0x20,
0x5f,0x6d,0x6d,0x5f,0x61,0x6e,0x64,0x5f,0x70,0x73,0x28,0x78,0x2c,0x20,0x30,0x78,0x46,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,
0x65,0x74,0x75,0x72,0x6e,0x20,0x5f,0x6d,0x6d,0x5f,0x6f,0x72,0x5f,0x70,0x73,0x28,0x78,0x2c,0x20,0x30,0x78,0x30,0x30,0x38,0x30,0x30,0x30,0x30,0x30,0x29,0x3b,0x0a,
0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x76,0x6f,0x69,0x64,0x20,0x73,0x75,0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,
0x20,0x6e,0x30,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x31,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x32,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,
0x34,0x20,0x6e,0x33,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x2a,0x20,0x6e,0x2c,0x20,0x66,
0x6c,0x6f,0x61,0x74,0x34,0x2a,0x20,0x64,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x2a,0x20,0x63,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6e,0x31,0x20,0x3d,0x20,
0x5f,0x6d,0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x6e,0x31,0x2c,0x20,0x2a,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,
0x6e,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x6e,0x30,0x2c,0x20,0x2a,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6e,0x6e,0x20,0x3d,
0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x6e,0x31,0x2c,0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x6e,0x6e,0x2c,0x6e,0x6e,
0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6e,0x6e,0x20,0x3d,0x20,0x66,0x6d,0x61,0x5f,0x62,0x72,0x65,0x61,0x6b,0x28,0x6e,0x6e,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,
0x2a,0x6e,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x2a,0x6e,0x2c,0x20,0x6e,0x6e,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x6e,0x33,
0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x73,0x75,0x62,0x5f,0x70,0x73,0x28,0x6e,0x33,0x2c,0x20,0x2a,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,
0x34,0x20,0x64,0x64,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x6e,0x32,0x2c,0x20,0x2a,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x64,
0x64,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x6e,0x33,0x2c,0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x64,0x64,
0x2c,0x64,0x64,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x64,0x64,0x20,0x3d,0x20,0x66,0x6d,0x61,0x5f,0x62,0x72,0x65,0x61,0x6b,0x28,0x64,0x64,0x29,0x3b,0x0a,0x20,
0x20,0x20,0x20,0x2a,0x64,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x2a,0x64,0x2c,0x20,0x64,0x64,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,
0x20,0x2f,0x2f,0x43,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x66,0x65,0x65,0x64,0x62,0x61,0x63,0x6b,0x0a,0x20,0x20,0x20,0x20,0x2a,0x63,0x20,0x3d,0x20,0x5f,0x6d,
0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x2a,0x63,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x2a,0x63,0x20,0x3d,0x20,0x5f,0x6d,
0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x2a,0x63,0x2c,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x29,0x28,0x30,0x2e,0x37,0x33,0x34,0x33,0x37,0x35,0x66,0x29,
0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x72,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x6e,0x6e,0x2c,
0x20,0x64,0x64,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x6e,0x64,0x5f,0x70,0x73,0x28,0x72,0x2c,0x20,0x30,0x78,0x38,0x30,
0x37,0x46,0x46,0x46,0x46,0x46,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x6f,0x72,0x5f,0x70,0x73,0x28,0x72,0x2c,0x20,0x30,0x78,
0x34,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x2a,0x63,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x2a,
0x63,0x2c,0x20,0x72,0x29,0x3b,0x0a,0x0a,0x7d,0x0a,0x0a,0x0a,0x2f,0x2f,0x20,0x39,0x2a,0x38,0x20,0x2b,0x20,0x32,0x20,0x3d,0x20,0x37,0x34,0x0a,0x69,0x6e,0x6c,0x69,
0x6e,0x65,0x20,0x76,0x6f,0x69,0x64,0x20,0x72,0x6f,0x75,0x6e,0x64,0x5f,0x63,0x6f,0x6d,0x70,0x75,0x74,0x65,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x30,0x2c,
0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x31,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x32,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x33,
0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x2a,0x20,0x63,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,
0x34,0x2a,0x20,0x72,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x20,0x3d,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x29,0x28,
0x30,0x2e,0x30,0x66,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x64,0x20,0x3d,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x29,0x28,0x30,
0x2e,0x30,0x66,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x73,0x75,0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x30,0x2c,0x20,0x6e,0x31,0x2c,0x20,0x6e,0x32,0x2c,
0x20,0x6e,0x33,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x26,0x6e,0x2c,0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x75,0x62,0x5f,
0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x31,0x2c,0x20,0x6e,0x32,0x2c,0x20,0x6e,0x33,0x2c,0x20,0x6e,0x30,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x26,0x6e,0x2c,
0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x75,0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x32,0x2c,0x20,0x6e,0x33,0x2c,0x20,0x6e,
0x30,0x2c,0x20,0x6e,0x31,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x26,0x6e,0x2c,0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x75,
0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x33,0x2c,0x20,0x6e,0x30,0x2c,0x20,0x6e,0x31,0x2c,0x20,0x6e,0x32,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x26,
0x6e,0x2c,0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x75,0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x33,0x2c,0x20,0x6e,0x32,0x2c,
0x20,0x6e,0x31,0x2c,0x20,0x6e,0x30,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x26,0x6e,0x2c,0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,
0x73,0x75,0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x32,0x2c,0x20,0x6e,0x31,0x2c,0x20,0x6e,0x30,0x2c,0x20,0x6e,0x33,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,
0x20,0x26,0x6e,0x2c,0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x75,0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x31,0x2c,0x20,0x6e,
0x30,0x2c,0x20,0x6e,0x33,0x2c,0x20,0x6e,0x32,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x26,0x6e,0x2c,0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x20,0x20,
0x20,0x20,0x73,0x75,0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x30,0x2c,0x20,0x6e,0x33,0x2c,0x20,0x6e,0x32,0x2c,0x20,0x6e,0x31,0x2c,0x20,0x72,0x6e,0x64,0x5f,
0x63,0x2c,0x20,0x26,0x6e,0x2c,0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x4d,0x61,0x6b,0x65,0x20,0x73,0x75,0x72,0x65,
0x20,0x61,0x62,0x73,0x28,0x64,0x29,0x20,0x3e,0x20,0x32,0x2e,0x30,0x20,0x2d,0x20,0x74,0x68,0x69,0x73,0x20,0x70,0x72,0x65,0x76,0x65,0x6e,0x74,0x73,0x20,0x64,0x69,
0x76,0x69,0x73,0x69,0x6f,0x6e,0x20,0x62,0x79,0x20,0x7a,0x65,0x72,0x6f,0x20,0x61,0x6e,0x64,0x20,0x61,0x63,0x63,0x69,0x64,0x65,0x6e,0x74,0x61,0x6c,0x20,0x6f,0x76,
0x65,0x72,0x66,0x6c,0x6f,0x77,0x73,0x20,0x62,0x79,0x20,0x64,0x69,0x76,0x69,0x73,0x69,0x6f,0x6e,0x20,0x62,0x79,0x20,0x3c,0x20,0x31,0x2e,0x30,0x0a,0x20,0x20,0x20,
0x20,0x64,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x6e,0x64,0x5f,0x70,0x73,0x28,0x64,0x2c,0x20,0x30,0x78,0x46,0x46,0x37,0x46,0x46,0x46,0x46,0x46,0x29,0x3b,0x0a,
0x20,0x20,0x20,0x20,0x64,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x6f,0x72,0x5f,0x70,0x73,0x28,0x64,0x2c,0x20,0x30,0x78,0x34,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x29,
0x3b,0x0a,0x20,0x20,0x20,0x20,0x2a,0x72,0x20,0x3d,0x5f,0x6d,0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x2a,0x72,0x2c,0x20,0x5f,0x6d,0x6d,0x5f,0x64,0x69,0x76,
0x5f,0x70,0x73,0x28,0x6e,0x2c,0x64,0x29,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x69,0x6e,0x74,0x34,0x20,0x73,0x69,0x6e,0x67,0x6c,
0x65,0x5f,0x63,0x6f,0x6d,0x75,0x70,0x74,0x65,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x30,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x31,0x2c,0x20,
0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x32,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x33,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x63,0x6e,0x74,0x2c,
0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x2a,0x20,0x73,
0x75,0x6d,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x3d,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x29,0x28,0x63,0x6e,0x74,
0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x33,0x35,0x20,0x6d,0x61,0x74,0x68,0x73,0x20,0x63,0x61,0x6c,0x6c,0x73,0x20,0x66,0x6f,0x6c,0x6c,0x6f,0x77,0x20,
0x28,0x31,0x34,0x30,0x20,0x46,0x4c,0x4f,0x50,0x53,0x29,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x72,0x20,0x3d,0x20,0x28,0x66,0x6c,0x6f,0x61,
0x74,0x34,0x29,0x28,0x30,0x2e,0x30,0x66,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,
0x69,0x20,0x3c,0x20,0x34,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x6f,0x75,0x6e,0x64,0x5f,0x63,0x6f,0x6d,0x70,
0x75,0x74,0x65,0x28,0x6e,0x30,0x2c,0x20,0x6e,0x31,0x2c,0x20,0x6e,0x32,0x2c,0x20,0x6e,0x33,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x26,0x63,0x2c,0x20,0x26,
0x72,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x64,0x6f,0x20,0x61,0x20,0x71,0x75,0x69,0x63,0x6b,0x20,0x66,0x6d,0x6f,
0x64,0x20,0x62,0x79,0x20,0x73,0x65,0x74,0x74,0x69,0x6e,0x67,0x20,0x65,0x78,0x70,0x20,0x74,0x6f,0x20,0x32,0x0a,0x20,0x20,0x20,0x20,0x72,0x20,0x3d,0x20,0x5f,0x6d,
0x6d,0x5f,0x61,0x6e,0x64,0x5f,0x70,0x73,0x28,0x72,0x2c,0x20,0x30,0x78,0x38,0x30,0x37,0x46,0x46,0x46,0x46,0x46,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x20,0x3d,
0x20,0x5f,0x6d,0x6d,0x5f,0x6f,0x72,0x5f,0x70,0x73,0x28,0x72,0x2c,0x20,0x30,0x78,0x34,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x2a,
0x73,0x75,0x6d,0x20,0x3d,0x20,0x72,0x3b,0x20,0x2f,0x2f,0x20,0x33,0x34,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x78,0x20,0x3d,0x20,0x28,0x66,
0x6c,0x6f,0x61,0x74,0x34,0x29,0x28,0x35,0x33,0x36,0x38,0x37,0x30,0x38,0x38,0x30,0x2e,0x30,0x66,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x20,0x3d,0x20,0x5f,0x6d,
0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x72,0x2c,0x20,0x78,0x29,0x3b,0x20,0x2f,0x2f,0x20,0x33,0x35,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,
0x20,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,0x5f,0x69,0x6e,0x74,0x34,0x5f,0x72,0x74,0x65,0x28,0x72,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,
0x20,0x76,0x6f,0x69,0x64,0x20,0x73,0x69,0x6e,0x67,0x6c,0x65,0x5f,0x63,0x6f,0x6d,0x75,0x70,0x74,0x65,0x5f,0x77,0x72,0x61,0x70,0x28,0x63,0x6f,0x6e,0x73,0x74,0x20,
0x75,0x69,0x6e,0x74,0x20,0x72,0x6f,0x74,0x2c,0x20,0x69,0x6e,0x74,0x34,0x20,0x76,0x30,0x2c,0x20,0x69,0x6e,0x74,0x34,0x20,0x76,0x31,0x2c,0x20,0x69,0x6e,0x74,0x34,
0x20,0x76,0x32,0x2c,0x20,0x69,0x6e,0x74,0x34,0x20,0x76,0x33,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x63,0x6e,0x74,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,
0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x2a,0x20,0x73,0x75,0x6d,0x2c,0x20,0x5f,0x5f,0x6c,0x6f,
0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x34,0x2a,0x20,0x6f,0x75,0x74,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x30,0x20,0x3d,
0x20,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,0x5f,0x66,0x6c,0x6f,0x61,0x74,0x34,0x5f,0x72,0x74,0x65,0x28,0x76,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,
0x61,0x74,0x34,0x20,0x6e,0x31,0x20,0x3d,0x20,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,0x5f,0x66,0x6c,0x6f,0x61,0x74,0x34,0x5f,0x72,0x74,0x65,0x28,0x76,0x31,0x29,0x3b,
0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x32,0x20,0x3d,0x20,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,0x5f,0x66,0x6c,0x6f,0x61,0x74,0x34,0x5f,
0x72,0x74,0x65,0x28,0x76,0x32,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x33,0x20,0x3d,0x20,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,
0x5f,0x66,0x6c,0x6f,0x61,0x74,0x34,0x5f,0x72,0x74,0x65,0x28,0x76,0x33,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x34,0x20,0x72,0x20,0x3d,0x20,0x73,
0x69,0x6e,0x67,0x6c,0x65,0x5f,0x63,0x6f,0x6d,0x75,0x70,0x74,0x65,0x28,0x6e,0x30,0x2c,0x20,0x6e,0x31,0x2c,0x20,0x6e,0x32,0x2c,0x20,0x6e,0x33,0x2c,0x20,0x63,0x6e,
0x74,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x73,0x75,0x6d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x2a,0x6f,0x75,0x74,0x20,0x3d,0x20,0x72,0x6f,0x74,0x20,0x3d,
0x3d,0x20,0x30,0x20,0x3f,0x20,0x72,0x20,0x3a,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x6c,0x69,0x67,0x6e,0x72,0x5f,0x65,0x70,0x69,0x38,0x28,0x72,0x2c,0x20,0x72,0x6f,0x74,
0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x75,
0x69,0x6e,0x74,0x20,0x6c,0x6f,0x6f,0x6b,0x5b,0x31,0x36,0x5d,0x5b,0x34,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x7b,0x30,0x2c,0x20,0x31,0x2c,0x20,0x32,
0x2c,0x20,0x33,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x30,0x2c,0x20,0x32,0x2c,0x20,0x33,0x2c,0x20,0x31,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x30,0x2c,0x20,
0x33,0x2c,0x20,0x31,0x2c,0x20,0x32,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x30,0x2c,0x20,0x33,0x2c,0x20,0x32,0x2c,0x20,0x31,0x7d,0x2c,0x0a,0x0a,0x20,0x20,0x20,
0x20,0x7b,0x31,0x2c,0x20,0x30,0x2c,0x20,0x32,0x2c,0x20,0x33,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x31,0x2c,0x20,0x32,0x2c,0x20,0x33,0x2c,0x20,0x30,0x7d,0x2c,
0x0a,0x20,0x20,0x20,0x20,0x7b,0x31,0x2c,0x20,0x33,0x2c,0x20,0x30,0x2c,0x20,0x32,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x31,0x2c,0x20,0x33,0x2c,0x20,0x32,0x2c,
0x20,0x30,0x7d,0x2c,0x0a,0x0a,0x20,0x20,0x20,0x20,0x7b,0x32,0x2c,0x20,0x31,0x2c,0x20,0x30,0x2c,0x20,0x33,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x32,0x2c,0x20,
0x30,0x2c,0x20,0x33,0x2c,0x20,0x31,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x32,0x2c,0x20,0x33,0x2c,0x20,0x31,0x2c,0x20,0x30,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,
0x7b,0x32,0x2c,0x20,0x33,0x2c,0x20,0x30,0x2c,0x20,0x31,0x7d,0x2c,0x0a,0x0a,0x20,0x20,0x20,0x20,0x7b,0x33,0x2c,0x20,0x31,0x2c,0x20,0x32,0x2c,0x20,0x30,0x7d,0x2c,
0x0a,0x20,0x20,0x20,0x20,0x7b,0x33,0x2c,0x20,0x32,0x2c,0x20,0x30,0x2c,0x20,0x31,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x33,0x2c,0x20,0x30,0x2c,0x20,0x31,0x2c,
0x20,0x32,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x33,0x2c,0x20,0x30,0x2c,0x20,0x32,0x2c,0x20,0x31,0x7d,0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,
0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x63,0x63,0x6e,0x74,0x5b,0x31,0x36,
0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x34,0x33,0x37,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x32,0x38,0x31,0x32,0x35,0x66,
0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x35,0x39,0x33,0x37,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x36,0x37,0x31,0x38,0x37,0x35,0x66,0x2c,
0x0a,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x39,0x38,0x34,0x33,0x37,0x35,0x66,
0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x38,0x32,0x38,0x31,0x32,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x30,0x34,0x36,0x38,0x37,0x35,0x66,
0x2c,0x0a,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x34,0x31,0x34,0x30,0x36,0x32,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x32,0x37,0x33,0x34,0x33,0x37,0x35,
0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x32,0x35,0x37,0x38,0x31,0x32,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x32,0x38,0x39,0x30,0x36,0x32,0x35,
0x66,0x2c,0x0a,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x32,0x30,0x33,0x31,0x32,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x35,0x31,0x35,0x36,0x32,
0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x33,0x35,0x39,0x33,0x37,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x34,0x36,0x30,0x39,0x33,0x37,
0x35,0x66,0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x68,0x61,0x72,0x65,0x64,0x4d,0x65,0x6d,0x43,0x68,0x75,0x6e,0x6b,0x0a,0x7b,0x0a,
0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x34,0x20,0x6f,0x75,0x74,0x5b,0x31,0x36,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x76,0x61,0x5b,
0x31,0x36,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,0x5f,0x5f,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x5f,0x5f,0x28,0x28,0x72,0x65,0x71,0x64,0x5f,0x77,0x6f,
0x72,0x6b,0x5f,0x67,0x72,0x6f,0x75,0x70,0x5f,0x73,0x69,0x7a,0x65,0x28,0x57,0x4f,0x52,0x4b,0x53,0x49,0x5a,0x45,0x20,0x2a,0x20,0x31,0x36,0x2c,0x20,0x31,0x2c,0x20,
0x31,0x29,0x29,0x29,0x0a,0x5f,0x5f,0x6b,0x65,0x72,0x6e,0x65,0x6c,0x20,0x76,0x6f,0x69,0x64,0x20,0x63,0x6e,0x31,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,
0x69,0x6e,0x74,0x20,0x2a,0x6c,0x70,0x61,0x64,0x5f,0x69,0x6e,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x20,0x2a,0x73,0x70,0x61,0x64,
0x2c,0x20,0x75,0x69,0x6e,0x74,0x20,0x6e,0x75,0x6d,0x54,0x68,0x72,0x65,0x61,0x64,0x73,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,
0x69,0x6e,0x74,0x20,0x67,0x49,0x64,0x78,0x20,0x3d,0x20,0x67,0x65,0x74,0x49,0x64,0x78,0x28,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x69,0x6e,0x74,0x20,0x63,0x68,
0x75,0x6e,0x6b,0x20,0x3d,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x20,0x2f,0x20,0x31,0x36,0x3b,0x0a,0x0a,0x20,0x20,0x20,
0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x20,0x6c,0x70,0x61,0x64,0x20,0x3d,0x20,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,
0x69,0x6e,0x74,0x2a,0x29,0x28,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x63,0x68,0x61,0x72,0x2a,0x29,0x6c,0x70,0x61,0x64,0x5f,0x69,0x6e,0x20,0x2b,0x20,
0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x2a,0x20,0x28,0x67,0x49,0x64,0x78,0x2f,0x31,0x36,0x29,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,
0x6c,0x20,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x68,0x61,0x72,0x65,0x64,0x4d,0x65,0x6d,0x43,0x68,0x75,0x6e,0x6b,0x20,0x73,0x6d,0x65,0x6d,0x5f,0x69,0x6e,0x5b,
0x57,0x4f,0x52,0x4b,0x53,0x49,0x5a,0x45,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x68,
0x61,0x72,0x65,0x64,0x4d,0x65,0x6d,0x43,0x68,0x75,0x6e,0x6b,0x2a,0x20,0x73,0x6d,0x65,0x6d,0x20,0x3d,0x20,0x73,0x6d,0x65,0x6d,0x5f,0x69,0x6e,0x20,0x2b,0x20,0x63,
0x68,0x75,0x6e,0x6b,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x75,0x69,0x6e,0x74,0x20,0x74,0x69,0x64,0x20,0x3d,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,
0x69,0x64,0x28,0x30,0x29,0x20,0x25,0x20,0x31,0x36,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x75,0x69,0x6e,0x74,0x20,0x69,0x64,0x78,0x48,0x61,0x73,0x68,0x20,0x3d,0x20,
0x67,0x49,0x64,0x78,0x2f,0x31,0x36,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x69,0x6e,0x74,0x20,0x73,0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,
0x20,0x75,0x69,0x6e,0x74,0x2a,0x29,0x73,0x70,0x61,0x64,0x29,0x5b,0x69,0x64,0x78,0x48,0x61,0x73,0x68,0x20,0x2a,0x20,0x35,0x30,0x5d,0x20,0x3e,0x3e,0x20,0x38,0x3b,
0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x76,0x73,0x20,0x3d,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x29,0x28,0x30,0x29,0x3b,0x0a,0x0a,0x20,
0x20,0x20,0x20,0x2f,0x2f,0x20,0x74,0x69,0x64,0x20,0x64,0x69,0x76,0x69,0x64,0x65,0x64,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,
0x20,0x74,0x69,0x64,0x64,0x20,0x3d,0x20,0x74,0x69,0x64,0x20,0x2f,0x20,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x74,0x69,0x64,0x20,0x6d,0x6f,0x64,0x75,
0x6c,0x6f,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x74,0x69,0x64,0x6d,0x20,0x3d,0x20,0x74,0x69,0x64,0x20,0x25,0x20,0x34,
0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x62,0x6c,0x6f,0x63,0x6b,0x20,0x3d,0x20,0x74,0x69,0x64,0x64,0x20,0x2a,0x20,
0x31,0x36,0x20,0x2b,0x20,0x74,0x69,0x64,0x6d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x43,
0x4e,0x5f,0x55,0x4e,0x52,0x4f,0x4c,0x4c,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x75,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,
0x3c,0x20,0x49,0x54,0x45,0x52,0x41,0x54,0x49,0x4f,0x4e,0x53,0x3b,0x20,0x69,0x2b,0x2b,0x29,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6d,
0x65,0x6d,0x5f,0x66,0x65,0x6e,0x63,0x65,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x20,0x74,0x6d,0x70,0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,
0x29,0x73,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x5f,0x70,0x74,0x72,0x28,0x73,0x2c,0x20,0x74,0x69,0x64,0x64,0x2c,0x20,0x6c,0x70,0x61,0x64,0x29,0x29,0x5b,
0x74,0x69,0x64,0x6d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x28,0x73,
0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x29,0x29,0x5b,0x74,0x69,0x64,0x5d,0x20,0x3d,0x20,0x74,0x6d,0x70,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6d,
0x65,0x6d,0x5f,0x66,0x65,0x6e,0x63,0x65,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x69,0x6e,0x67,0x6c,0x65,0x5f,0x63,0x6f,0x6d,
0x75,0x70,0x74,0x65,0x5f,0x77,0x72,0x61,0x70,0x28,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x69,0x64,0x6d,0x2c,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x28,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x20,0x2b,0x20,0x6c,
0x6f,0x6f,0x6b,0x5b,0x74,0x69,0x64,0x5d,0x5b,0x30,0x5d,0x29,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x28,
0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x20,0x2b,0x20,0x6c,0x6f,0x6f,0x6b,0x5b,0x74,0x69,0x64,0x5d,0x5b,0x31,0x5d,0x29,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x28,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x20,0x2b,0x20,0x6c,0x6f,0x6f,0x6b,0x5b,0x74,0x69,
0x64,0x5d,0x5b,0x32,0x5d,0x29,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x28,0x73,0x6d,0x65,0x6d,0x2d,0x3e,
0x6f,0x75,0x74,0x20,0x2b,0x20,0x6c,0x6f,0x6f,0x6b,0x5b,0x74,0x69,0x64,0x5d,0x5b,0x33,0x5d,0x29,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x63,0x63,0x6e,0x74,0x5b,0x74,0x69,0x64,0x5d,0x2c,0x20,0x76,0x73,0x2c,0x20,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x20,0x2b,0x20,0x74,
0x69,0x64,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x20,0x2b,0x20,
0x74,0x69,0x64,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x6d,0x65,0x6d,0x5f,0x66,0x65,0x6e,0x63,0x65,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,
0x43,0x45,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x20,0x6f,0x75,0x74,0x58,0x6f,0x72,0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x6c,
0x6f,0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x29,0x5b,0x62,0x6c,0x6f,0x63,0x6b,0x5d,0x3b,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x75,0x69,0x6e,0x74,0x20,0x64,0x64,0x20,0x3d,0x20,0x62,0x6c,0x6f,0x63,0x6b,0x20,0x2b,0x20,0x34,0x3b,0x20,0x64,
0x64,0x20,0x3c,0x20,0x28,0x74,0x69,0x64,0x64,0x20,0x2b,0x20,0x31,0x29,0x20,0x2a,0x20,0x31,0x36,0x3b,0x20,0x64,0x64,0x20,0x2b,0x3d,0x20,0x34,0x29,0x20,0x7b,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x58,0x6f,0x72,0x20,0x5e,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,
0x69,0x6e,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x29,0x5b,0x64,0x64,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x73,0x63,0x72,0x61,0x74,0x63,0x68,0x70,
0x61,0x64,0x5f,0x70,0x74,0x72,0x28,0x73,0x2c,0x20,0x74,0x69,0x64,0x64,0x2c,0x20,0x6c,0x70,0x61,0x64,0x29,0x29,0x5b,0x74,0x69,0x64,0x6d,0x5d,0x20,0x3d,0x20,0x6f,
0x75,0x74,0x58,0x6f,0x72,0x20,0x5e,0x20,0x74,0x6d,0x70,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x69,
0x6e,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x29,0x5b,0x74,0x69,0x64,0x5d,0x20,0x3d,0x20,0x6f,0x75,0x74,0x58,0x6f,0x72,0x3b,0x0a,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x31,0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,
0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29,0x5b,0x62,0x6c,0x6f,0x63,0x6b,0x5d,0x20,0x2b,0x20,0x28,0x28,0x5f,0x5f,0x6c,
0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29,0x5b,0x62,0x6c,0x6f,0x63,0x6b,0x20,0x2b,0x20,0x34,0x5d,
0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x32,0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,
0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29,0x5b,0x62,0x6c,0x6f,0x63,0x6b,0x2b,0x20,0x38,0x5d,0x20,0x2b,
0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29,0x5b,0x62,0x6c,0x6f,0x63,
0x6b,0x20,0x2b,0x20,0x31,0x32,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,
0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29,0x5b,0x74,0x69,0x64,0x5d,0x20,0x3d,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x31,0x20,0x2b,0x20,0x76,0x61,0x5f,
0x74,0x6d,0x70,0x32,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6d,0x65,0x6d,0x5f,0x66,0x65,0x6e,0x63,0x65,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,
0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x20,0x6f,0x75,0x74,0x32,
0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x29,0x5b,0x74,0x69,0x64,
0x5d,0x20,0x5e,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x29,0x5b,0x74,0x69,
0x64,0x20,0x2b,0x20,0x34,0x20,0x5d,0x20,0x5e,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,
0x75,0x74,0x29,0x5b,0x74,0x69,0x64,0x20,0x2b,0x20,0x38,0x5d,0x20,0x5e,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x73,0x6d,
0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x29,0x5b,0x74,0x69,0x64,0x20,0x2b,0x20,0x31,0x32,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x61,0x5f,0x74,
0x6d,0x70,0x31,0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29,
0x5b,0x62,0x6c,0x6f,0x63,0x6b,0x5d,0x20,0x2b,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,
0x3e,0x76,0x61,0x29,0x5b,0x62,0x6c,0x6f,0x63,0x6b,0x20,0x2b,0x20,0x34,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x32,
0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29,0x5b,0x62,0x6c,
0x6f,0x63,0x6b,0x20,0x2b,0x20,0x38,0x5d,0x20,0x2b,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,
0x2d,0x3e,0x76,0x61,0x29,0x5b,0x62,0x6c,0x6f,0x63,0x6b,0x20,0x2b,0x20,0x31,0x32,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x61,0x5f,0x74,0x6d,
0x70,0x31,0x20,0x3d,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x31,0x20,0x2b,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x32,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x76,0x61,0x5f,0x74,0x6d,0x70,0x31,0x20,0x3d,0x20,0x66,0x61,0x62,0x73,0x28,0x76,0x61,0x5f,0x74,0x6d,0x70,0x31,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x78,0x78,0x20,0x3d,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x31,0x20,0x2a,0x20,0x31,0x36,0x37,0x37,0x37,0x32,0x31,0x36,0x2e,
0x30,0x66,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x20,0x78,0x78,0x5f,0x69,0x6e,0x74,0x20,0x3d,0x20,0x28,0x69,0x6e,0x74,0x29,0x78,0x78,
0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,
0x75,0x74,0x29,0x5b,0x74,0x69,0x64,0x5d,0x20,0x3d,0x20,0x6f,0x75,0x74,0x32,0x20,0x5e,0x20,0x78,0x78,0x5f,0x69,0x6e,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29,0x5b,0x74,0x69,0x64,
0x5d,0x20,0x3d,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x31,0x20,0x2f,0x20,0x36,0x34,0x2e,0x30,0x66,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6d,0x65,
0x6d,0x5f,0x66,0x65,0x6e,0x63,0x65,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x73,0x20,0x3d,0x20,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x5b,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x73,0x20,0x3d,0x20,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x5b,0x30,0x5d,0x2e,0x78,0x20,0x5e,0x20,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x5b,
0x30,0x5d,0x2e,0x79,0x20,0x5e,0x20,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x5b,0x30,0x5d,0x2e,0x7a,0x20,0x5e,0x20,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,
0x74,0x5b,0x30,0x5d,0x2e,0x77,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,
0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x73,0x6b,0x69,0x70,0x5b,0x33,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x32,
0x30,0x2c,0x32,0x32,0x2c,0x32,0x32,0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x76,0x6f,0x69,0x64,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,0x74,
0x65,0x5f,0x35,0x31,0x32,0x28,0x75,0x69,0x6e,0x74,0x20,0x69,0x64,0x78,0x2c,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x2a,0x20,0x69,
0x6e,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x2a,0x20,0x6f,0x75,0x74,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x75,0x6c,
0x6f,0x6e,0x67,0x20,0x68,0x61,0x73,0x68,0x5b,0x32,0x35,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x68,0x61,0x73,0x68,0x5b,0x30,0x5d,0x20,0x3d,0x20,0x69,0x6e,0x5b,
0x30,0x5d,0x20,0x5e,0x20,0x69,0x64,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x31,0x3b,0x20,0x69,0x20,
0x3c,0x20,0x32,0x35,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x61,0x73,0x68,0x5b,0x69,0x5d,0x20,0x3d,0x20,0x69,
0x6e,0x5b,0x69,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x61,0x20,0x3d,0x20,0x30,0x3b,
0x20,0x61,0x20,0x3c,0x20,0x33,0x3b,0x20,0x2b,0x2b,0x61,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x31,0x36,
0x30,0x30,0x5f,0x31,0x28,0x68,0x61,0x73,0x68,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,
0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x73,0x6b,0x69,0x70,0x5b,0x61,0x5d,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x5b,0x69,0x5d,0x20,0x3d,0x20,0x68,0x61,0x73,0x68,0x5b,0x69,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x20,0x2b,0x3d,0x20,0x73,0x6b,0x69,0x70,0x5b,0x61,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,
0x0a,0x0a,0x0a,0x5f,0x5f,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x5f,0x5f,0x28,0x28,0x72,0x65,0x71,0x64,0x5f,0x77,0x6f,0x72,0x6b,0x5f,0x67,0x72,0x6f,0x75,
0x70,0x5f,0x73,0x69,0x7a,0x65,0x28,0x38,0x2c,0x20,0x38,0x2c,0x20,0x31,0x29,0x29,0x29,0x0a,0x5f,0x5f,0x6b,0x65,0x72,0x6e,0x65,0x6c,0x20,0x76,0x6f,0x69,0x64,0x20,
0x63,0x6e,0x30,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x2a,0x69,0x6e,0x70,0x75,0x74,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f,
0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x20,0x2a,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x6c,
0x6f,0x6e,0x67,0x20,0x2a,0x73,0x74,0x61,0x74,0x65,0x73,0x2c,0x20,0x75,0x69,0x6e,0x74,0x20,0x54,0x68,0x72,0x65,0x61,0x64,0x73,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,
0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x67,0x49,0x64,0x78,0x20,0x3d,0x20,0x67,0x65,0x74,0x49,0x64,0x78,0x28,0x29,0x3b,0x0a,0x20,0x20,0x20,
0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x53,0x74,0x61,0x74,0x65,0x5f,0x62,0x75,0x66,0x5b,0x38,0x20,0x2a,0x20,0x32,0x35,0x5d,
0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x2a,0x20,0x53,0x74,0x61,0x74,0x65,0x20,0x3d,0x20,0x53,0x74,0x61,
0x74,0x65,0x5f,0x62,0x75,0x66,0x20,0x2b,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x20,0x2a,0x20,0x32,0x35,0x3b,0x0a,0x0a,
0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x20,0x2b,0x3d,0x20,0x32,0x35,0x20,0x2a,0x20,0x67,0x49,0x64,
0x78,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x20,0x3d,0x20,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,
0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x28,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x63,0x68,0x61,0x72,0x2a,0x29,0x53,0x63,0x72,0x61,0x74,0x63,0x68,
0x70,0x61,0x64,0x20,0x2b,0x20,0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x2a,0x20,0x67,0x49,0x64,0x78,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,
0x66,0x20,0x28,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x20,0x3d,0x3d,0x20,0x30,0x29,0x20,0x7b,0x0a,0x0a,0x23,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x64,0x65,0x66,0x20,0x5f,0x5f,0x4e,0x56,0x5f,0x43,0x4c,0x5f,0x43,0x5f,0x56,0x45,0x52,0x53,0x49,0x4f,0x4e,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x28,0x75,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,
0x38,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74,0x61,0x74,0x65,0x5b,0x69,0x5d,
0x20,0x3d,0x20,0x69,0x6e,0x70,0x75,0x74,0x5b,0x69,0x5d,0x3b,0x0a,0x23,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x38,0x20,0x2a,0x29,0x53,0x74,0x61,
0x74,0x65,0x29,0x5b,0x30,0x5d,0x20,0x3d,0x20,0x76,0x6c,0x6f,0x61,0x64,0x38,0x28,0x30,0x2c,0x20,0x69,0x6e,0x70,0x75,0x74,0x29,0x3b,0x0a,0x23,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x6e,0x64,0x69,0x66,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74,0x61,0x74,0x65,0x5b,
0x38,0x5d,0x20,0x20,0x3d,0x20,0x69,0x6e,0x70,0x75,0x74,0x5b,0x38,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74,0x61,0x74,
0x65,0x5b,0x39,0x5d,0x20,0x20,0x3d,0x20,0x69,0x6e,0x70,0x75,0x74,0x5b,0x39,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74,
0x61,0x74,0x65,0x5b,0x31,0x30,0x5d,0x20,0x3d,0x20,0x69,0x6e,0x70,0x75,0x74,0x5b,0x31,0x30,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x29,0x53,0x74,0x61,0x74,0x65,0x29,0x5b,0x39,0x5d,0x20,0x20,0x26,0x3d,
0x20,0x30,0x78,0x30,0x30,0x46,0x46,0x46,0x46,0x46,0x46,0x55,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,
0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x29,0x53,0x74,0x61,0x74,0x65,0x29,0x5b,0x39,0x5d,0x20,0x20,0x7c,0x3d,0x20,0x28,0x28,0x28,0x75,0x69,0x6e,0x74,
0x29,0x67,0x65,0x74,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x29,0x20,0x26,0x20,0x30,0x78,0x46,0x46,0x29,0x20,0x3c,0x3c,0x20,0x32,0x34,
0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x29,0x53,
0x74,0x61,0x74,0x65,0x29,0x5b,0x31,0x30,0x5d,0x20,0x26,0x3d,0x20,0x30,0x78,0x46,0x46,0x30,0x30,0x30,0x30,0x30,0x30,0x55,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2a,0x20,0x65,0x78,0x70,0x6c,0x69,0x63,0x69,0x74,0x20,0x63,0x61,0x73,0x74,0x20,0x74,0x6f,0x20,0x60,0x75,0x69,0x6e,0x74,0x60,
0x20,0x69,0x73,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x20,0x62,0x65,0x63,0x61,0x75,0x73,0x65,0x20,0x73,0x6f,0x6d,0x65,0x20,0x4f,0x70,0x65,0x6e,0x43,0x4c,
0x20,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x73,0x20,0x28,0x65,0x2e,0x67,0x2e,0x20,0x4e,0x56,0x49,0x44,0x49,0x41,0x29,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x68,0x61,0x6e,0x64,0x6c,0x65,0x20,0x67,0x65,0x74,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x5f,
0x69,0x64,0x20,0x61,0x6e,0x64,0x20,0x67,0x65,0x74,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x5f,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x61,0x73,0x20,0x73,0x69,0x67,0x6e,
0x65,0x64,0x20,0x6c,0x6f,0x6e,0x67,0x20,0x6c,0x6f,0x6e,0x67,0x20,0x69,0x6e,0x74,0x20,0x61,0x6e,0x64,0x20,0x61,0x64,0x64,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x30,0x78,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x2e,0x2e,0x2e,0x20,0x74,0x6f,0x20,0x60,0x67,0x65,0x74,0x5f,0x67,0x6c,
0x6f,0x62,0x61,0x6c,0x5f,0x69,0x64,0x60,0x20,0x69,0x66,0x20,0x77,0x65,0x20,0x73,0x65,0x74,0x20,0x6f,0x6e,0x20,0x68,0x6f,0x73,0x74,0x20,0x73,0x69,0x64,0x65,0x20,
0x61,0x20,0x33,0x32,0x62,0x69,0x74,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x77,0x68,0x65,0x72,0x65,0x20,0x74,0x68,0x65,0x20,0x66,0x69,0x72,0x73,0x74,0x20,0x62,
0x69,0x74,0x20,0x69,0x73,0x20,0x60,0x31,0x60,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x28,0x65,0x76,0x65,0x6e,0x20,0x69,
0x66,0x20,0x69,0x74,0x20,0x69,0x73,0x20,0x63,0x6f,0x72,0x72,0x65,0x63,0x74,0x20,0x63,0x61,0x73,0x74,0x65,0x64,0x20,0x74,0x6f,0x20,0x75,0x6e,0x73,0x69,0x67,0x6e,
0x65,0x64,0x20,0x6f,0x6e,0x20,0x74,0x68,0x65,0x20,0x68,0x6f,0x73,0x74,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x2f,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x29,0x53,0x74,0x61,
0x74,0x65,0x29,0x5b,0x31,0x30,0x5d,0x20,0x7c,0x3d,0x20,0x28,0x28,0x28,0x75,0x69,0x6e,0x74,0x29,0x67,0x65,0x74,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x5f,0x69,0x64,
0x28,0x30,0x29,0x20,0x3e,0x3e,0x20,0x38,0x29,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,
0x74,0x20,0x69,0x20,0x3d,0x20,0x31,0x31,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x35,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74,0x61,0x74,0x65,0x5b,0x69,0x5d,0x20,0x3d,0x20,0x30,0x78,0x30,0x30,0x55,0x4c,0x3b,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x4c,0x61,0x73,0x74,0x20,0x62,
0x69,0x74,0x20,0x6f,0x66,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74,0x61,0x74,0x65,0x5b,
0x31,0x36,0x5d,0x20,0x3d,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x55,0x4c,0x3b,0x0a,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x31,0x36,0x30,0x30,0x5f,0x32,0x28,0x53,0x74,0x61,0x74,0x65,0x29,0x3b,0x0a,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x35,0x3b,0x20,0x2b,
0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x5b,0x69,0x5d,0x20,
0x3d,0x20,0x53,0x74,0x61,0x74,0x65,0x5b,0x69,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x0a,0x5f,0x5f,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x5f,0x5f,0x28,0x28,0x72,0x65,0x71,
0x64,0x5f,0x77,0x6f,0x72,0x6b,0x5f,0x67,0x72,0x6f,0x75,0x70,0x5f,0x73,0x69,0x7a,0x65,0x28,0x36,0x34,0x2c,0x20,0x31,0x2c,0x20,0x31,0x29,0x29,0x29,0x0a,0x5f,0x5f,
0x6b,0x65,0x72,0x6e,0x65,0x6c,0x20,0x76,0x6f,0x69,0x64,0x20,0x63,0x6e,0x30,0x30,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x20,0x2a,0x53,
0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x2a,0x73,0x74,0x61,0x74,0x65,
0x73,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x67,0x49,0x64,0x78,0x20,0x3d,0x20,0x67,0x65,0x74,0x49,0x64,
0x78,0x28,0x29,0x20,0x2f,0x20,0x36,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x53,0x74,0x61,0x74,
0x65,0x5b,0x32,0x35,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x20,0x2b,0x3d,0x20,0x32,0x35,0x20,0x2a,0x20,0x67,0x49,0x64,0x78,0x3b,
0x0a,0x0a,0x20,0x20,0x20,0x20,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x20,0x3d,0x20,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,
0x2a,0x29,0x28,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x63,0x68,0x61,0x72,0x2a,0x29,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x20,0x2b,0x20,
0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x2a,0x20,0x67,0x49,0x64,0x78,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,
0x3d,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x35,0x3b,0x20,0x69,0x20,0x2b,0x3d,0x20,
0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x73,0x69,0x7a,0x65,0x28,0x30,0x29,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74,0x61,
0x74,0x65,0x5b,0x69,0x5d,0x20,0x3d,0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x5b,0x69,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x62,0x61,
0x72,0x72,0x69,0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,
0x20,0x66,0x6f,0x72,0x20,0x28,0x75,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x3b,0x20,
0x69,0x20,0x3c,0x20,0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x2f,0x20,0x35,0x31,0x32,0x3b,0x20,0x69,0x20,0x2b,0x3d,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,
0x5f,0x73,0x69,0x7a,0x65,0x28,0x30,0x29,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,0x74,0x65,0x5f,0x35,0x31,0x32,
0x28,0x69,0x2c,0x20,0x53,0x74,0x61,0x74,0x65,0x2c,0x20,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x2a,0x29,0x28,0x28,0x5f,0x5f,
0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x63,0x68,0x61,0x72,0x2a,0x29,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x20,0x2b,0x20,0x69,0x20,0x2a,0x20,0x35,
0x31,0x32,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x0a,0x5f,0x5f,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x5f,0x5f,0x28,0x28,0x72,
0x65,0x71,0x64,0x5f,0x77,0x6f,0x72,0x6b,0x5f,0x67,0x72,0x6f,0x75,0x70,0x5f,0x73,0x69,0x7a,0x65,0x28,0x38,0x2c,0x20,0x38,0x2c,0x20,0x31,0x29,0x29,0x29,0x0a,0x5f,
0x5f,0x6b,0x65,0x72,0x6e,0x65,0x6c,0x20,0x76,0x6f,0x69,0x64,0x20,0x63,0x6e,0x32,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,
0x2a,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x2a,0x73,0x74,0x61,
0x74,0x65,0x73,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x6f,0x75,0x74,0x70,0x75,0x74,0x2c,0x20,0x75,0x6c,0x6f,0x6e,
0x67,0x20,0x54,0x61,0x72,0x67,0x65,0x74,0x2c,0x20,0x75,0x69,0x6e,0x74,0x20,0x54,0x68,0x72,0x65,0x61,0x64,0x73,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,
0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x41,0x45,0x53,0x30,0x5b,0x32,0x35,0x36,0x5d,0x2c,0x20,0x41,0x45,0x53,0x31,0x5b,0x32,0x35,0x36,0x5d,0x2c,
0x20,0x41,0x45,0x53,0x32,0x5b,0x32,0x35,0x36,0x5d,0x2c,0x20,0x41,0x45,0x53,0x33,0x5b,0x32,0x35,0x36,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x69,0x6e,0x74,0x20,
0x45,0x78,0x70,0x61,0x6e,0x64,0x65,0x64,0x4b,0x65,0x79,0x32,0x5b,0x34,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x74,0x65,0x78,0x74,
0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x67,0x49,0x64,0x78,0x20,0x3d,0x20,0x67,0x65,0x74,0x49,0x64,0x78,0x28,
0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,
0x64,0x28,0x31,0x29,0x20,0x2a,0x20,0x38,0x20,0x2b,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x3b,0x20,0x69,0x20,0x3c,0x20,
0x32,0x35,0x36,0x3b,0x20,0x69,0x20,0x2b,0x3d,0x20,0x38,0x20,0x2a,0x20,0x38,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,
0x20,0x75,0x69,0x6e,0x74,0x20,0x74,0x6d,0x70,0x20,0x3d,0x20,0x41,0x45,0x53,0x30,0x5f,0x43,0x5b,0x69,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x41,
0x45,0x53,0x30,0x5b,0x69,0x5d,0x20,0x3d,0x20,0x74,0x6d,0x70,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x41,0x45,0x53,0x31,0x5b,0x69,0x5d,0x20,0x3d,0x20,
0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x74,0x6d,0x70,0x2c,0x20,0x38,0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x41,0x45,0x53,0x32,0x5b,0x69,0x5d,
0x20,0x3d,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x74,0x6d,0x70,0x2c,0x20,0x31,0x36,0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x41,0x45,0x53,
0x33,0x5b,0x69,0x5d,0x20,0x3d,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x74,0x6d,0x70,0x2c,0x20,0x32,0x34,0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,
0x20,0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69,0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,
0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x78,0x69,0x6e,0x31,0x5b,0x38,0x5d,0x5b,0x38,0x5d,0x3b,
0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x78,0x69,0x6e,0x32,0x5b,0x38,0x5d,0x5b,0x38,0x5d,0x3b,0x0a,0x0a,
0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x20,0x2b,0x3d,0x20,0x32,0x35,0x20,0x2a,0x20,0x67,0x49,0x64,
0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x20,0x2b,0x3d,0x20,0x67,0x49,0x64,0x78,0x20,0x2a,0x20,
0x28,0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x3e,0x3e,0x20,0x34,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x69,0x66,0x20,0x64,0x65,0x66,0x69,
0x6e,0x65,0x64,0x28,0x5f,0x5f,0x54,0x61,0x68,0x69,0x74,0x69,0x5f,0x5f,0x29,0x20,0x7c,0x7c,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x28,0x5f,0x5f,0x50,0x69,0x74,
0x63,0x61,0x69,0x72,0x6e,0x5f,0x5f,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,
0x69,0x20,0x3c,0x20,0x34,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x28,0x28,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x2a,0x29,0x45,0x78,0x70,0x61,0x6e,0x64,0x65,0x64,0x4b,0x65,
0x79,0x32,0x29,0x5b,0x69,0x5d,0x20,0x3d,0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x5b,0x69,0x20,0x2b,0x20,0x34,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x74,0x65,0x78,0x74,0x20,0x3d,0x20,0x76,0x6c,0x6f,0x61,0x64,0x34,0x28,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x20,0x2b,0x20,
0x34,0x2c,0x20,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x29,0x73,0x74,0x61,0x74,0x65,0x73,0x29,0x3b,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x23,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x3d,0x20,0x76,0x6c,0x6f,0x61,0x64,0x34,
0x28,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x20,0x2b,0x20,0x34,0x2c,0x20,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,
0x75,0x69,0x6e,0x74,0x20,0x2a,0x29,0x73,0x74,0x61,0x74,0x65,0x73,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x75,0x69,0x6e,0x74,0x38,0x20,
0x2a,0x29,0x45,0x78,0x70,0x61,0x6e,0x64,0x65,0x64,0x4b,0x65,0x79,0x32,0x29,0x5b,0x30,0x5d,0x20,0x3d,0x20,0x76,0x6c,0x6f,0x61,0x64,0x38,0x28,0x31,0x2c,0x20,0x28,
0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x29,0x73,0x74,0x61,0x74,0x65,0x73,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x23,0x65,0x6e,0x64,0x69,0x66,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x41,0x45,0x53,0x45,0x78,0x70,0x61,0x6e,0x64,0x4b,0x65,0x79,0x32,0x35,0x36,
0x28,0x45,0x78,0x70,0x61,0x6e,0x64,0x65,0x64,0x4b,0x65,0x79,0x32,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69,
0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,
0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x34,0x2a,0x20,0x78,0x69,0x6e,0x31,0x5f,0x73,0x74,0x6f,0x72,0x65,0x20,0x3d,0x20,0x26,0x78,0x69,0x6e,0x31,0x5b,
0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x5d,0x5b,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,
0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x34,0x2a,0x20,0x78,0x69,0x6e,0x31,0x5f,0x6c,0x6f,0x61,0x64,0x20,
0x3d,0x20,0x26,0x78,0x69,0x6e,0x31,0x5b,0x28,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x20,0x2b,0x20,0x31,0x29,0x20,0x25,0x20,
0x38,0x5d,0x5b,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,
0x20,0x75,0x69,0x6e,0x74,0x34,0x2a,0x20,0x78,0x69,0x6e,0x32,0x5f,0x73,0x74,0x6f,0x72,0x65,0x20,0x3d,0x20,0x26,0x78,0x69,0x6e,0x32,0x5b,0x67,0x65,0x74,0x5f,0x6c,
0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x5d,0x5b,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x5d,0x3b,0x0a,0x20,0x20,
0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x34,0x2a,0x20,0x78,0x69,0x6e,0x32,0x5f,0x6c,0x6f,0x61,0x64,0x20,0x3d,0x20,0x26,0x78,0x69,
0x6e,0x32,0x5b,0x28,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x20,0x2b,0x20,0x31,0x29,0x20,0x25,0x20,0x38,0x5d,0x5b,0x67,0x65,
0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x2a,0x78,0x69,0x6e,0x32,0x5f,0x73,0x74,0x6f,0x72,0x65,0x20,
0x3d,0x20,0x28,0x75,0x69,0x6e,0x74,0x34,0x29,0x28,0x30,0x2c,0x20,0x30,0x2c,0x20,0x30,0x2c,0x20,0x30,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x32,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x2c,0x20,0x69,0x31,0x20,0x3d,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,
0x64,0x28,0x31,0x29,0x3b,0x20,0x69,0x20,0x3c,0x20,0x28,0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x3e,0x3e,0x20,0x37,0x29,0x3b,0x20,0x2b,0x2b,0x69,0x2c,0x20,0x69,0x31,
0x20,0x3d,0x20,0x28,0x69,0x31,0x20,0x2b,0x20,0x31,0x36,0x29,0x20,0x25,0x20,0x28,0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x3e,0x3e,0x20,0x34,0x29,0x29,0x20,0x7b,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x5e,0x3d,0x20,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x5b,0x28,
0x75,0x69,0x6e,0x74,0x29,0x69,0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69,0x65,0x72,0x28,0x43,0x4c,
0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x74,0x65,0x78,0x74,0x20,0x5e,0x3d,0x20,0x2a,0x78,0x69,0x6e,0x32,0x5f,0x6c,0x6f,0x61,0x64,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x30,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,
0x6f,0x72,0x28,0x69,0x6e,0x74,0x20,0x6a,0x20,0x3d,0x20,0x30,0x3b,0x20,0x6a,0x20,0x3c,0x20,0x31,0x30,0x3b,0x20,0x2b,0x2b,0x6a,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x3d,0x20,0x41,0x45,0x53,0x5f,0x52,0x6f,0x75,0x6e,0x64,0x28,0x41,0x45,0x53,0x30,
0x2c,0x20,0x41,0x45,0x53,0x31,0x2c,0x20,0x41,0x45,0x53,0x32,0x2c,0x20,0x41,0x45,0x53,0x33,0x2c,0x20,0x74,0x65,0x78,0x74,0x2c,0x20,0x28,0x28,0x75,0x69,0x6e,0x74,
0x34,0x20,0x2a,0x29,0x45,0x78,0x70,0x61,0x6e,0x64,0x65,0x64,0x4b,0x65,0x79,0x32,0x29,0x5b,0x6a,0x5d,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x2a,0x78,0x69,0x6e,0x31,0x5f,0x73,0x74,0x6f,0x72,0x65,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x5e,0x3d,0x20,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x5b,0x28,0x75,0x69,0x6e,0x74,0x29,0x69,0x31,
0x20,0x2b,0x20,0x38,0x75,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69,0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f,
0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,
0x78,0x74,0x20,0x5e,0x3d,0x20,0x2a,0x78,0x69,0x6e,0x31,0x5f,0x6c,0x6f,0x61,0x64,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,
0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x30,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,
0x28,0x69,0x6e,0x74,0x20,0x6a,0x20,0x3d,0x20,0x30,0x3b,0x20,0x6a,0x20,0x3c,0x20,0x31,0x30,0x3b,0x20,0x2b,0x2b,0x6a,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x3d,0x20,0x41,0x45,0x53,0x5f,0x52,0x6f,0x75,0x6e,0x64,0x28,0x41,0x45,0x53,0x30,0x2c,0x20,
0x41,0x45,0x53,0x31,0x2c,0x20,0x41,0x45,0x53,0x32,0x2c,0x20,0x41,0x45,0x53,0x33,0x2c,0x20,0x74,0x65,0x78,0x74,0x2c,0x20,0x28,0x28,0x75,0x69,0x6e,0x74,0x34,0x20,
0x2a,0x29,0x45,0x78,0x70,0x61,0x6e,0x64,0x65,0x64,0x4b,0x65,0x79,0x32,0x29,0x5b,0x6a,0x5d,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x2a,0x78,0x69,0x6e,0x32,0x5f,0x73,0x74,0x6f,0x72,0x65,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69,0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,
0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x5e,0x3d,0x20,0x2a,0x78,0x69,0x6e,0x32,0x5f,0x6c,0x6f,0x61,
0x64,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2a,0x20,0x41,0x6c,0x73,0x6f,0x20,0x6c,0x65,0x66,0x74,0x20,0x6f,0x76,0x65,0x72,0x20,
0x74,0x68,0x72,0x65,0x61,0x64,0x73,0x20,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x65,0x20,0x74,0x68,0x69,0x73,0x20,0x6c,0x6f,0x6f,0x70,0x2e,0x0a,0x20,0x20,0x20,0x20,
0x20,0x2a,0x20,0x54,0x68,0x65,0x20,0x6c,0x65,0x66,0x74,0x20,0x6f,0x76,0x65,0x72,0x20,0x74,0x68,0x72,0x65,0x61,0x64,0x20,0x72,0x65,0x73,0x75,0x6c,0x74,0x73,0x20,
0x77,0x69,0x6c,0x6c,0x20,0x62,0x65,0x20,0x69,0x67,0x6e,0x6f,0x72,0x65,0x64,0x0a,0x20,0x20,0x20,0x20,0x20,0x2a,0x2f,0x0a,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,
0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x36,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x28,0x73,0x69,0x7a,0x65,0x5f,0x74,0x20,0x69,0x20,0x3d,
0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x31,0x36,0x3b,0x20,0x69,0x2b,0x2b,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,
0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x30,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,
0x74,0x20,0x6a,0x20,0x3d,0x20,0x30,0x3b,0x20,0x6a,0x20,0x3c,0x20,0x31,0x30,0x3b,0x20,0x2b,0x2b,0x6a,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x3d,0x20,0x41,0x45,0x53,0x5f,0x52,0x6f,0x75,0x6e,0x64,0x28,0x41,0x45,0x53,0x30,0x2c,0x20,0x41,0x45,0x53,0x31,0x2c,
0x20,0x41,0x45,0x53,0x32,0x2c,0x20,0x41,0x45,0x53,0x33,0x2c,0x20,0x74,0x65,0x78,0x74,0x2c,0x20,0x28,0x28,0x75,0x69,0x6e,0x74,0x34,0x20,0x2a,0x29,0x45,0x78,0x70,
0x61,0x6e,0x64,0x65,0x64,0x4b,0x65,0x79,0x32,0x29,0x5b,0x6a,0x5d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69,0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x78,0x69,0x6e,0x31,0x5f,0x73,0x74,0x6f,0x72,0x65,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x3b,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69,0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,
0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x5e,0x3d,0x20,0x2a,0x78,0x69,0x6e,0x31,0x5f,0x6c,0x6f,0x61,0x64,0x3b,0x0a,0x20,
0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x53,0x74,0x61,0x74,0x65,0x5f,0x62,0x75,
0x66,0x5b,0x38,0x20,0x2a,0x20,0x32,0x35,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x73,0x74,0x6f,0x72,0x65,0x32,
0x28,0x61,0x73,0x5f,0x75,0x6c,0x6f,0x6e,0x67,0x32,0x28,0x74,0x65,0x78,0x74,0x29,0x2c,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,
0x29,0x20,0x2b,0x20,0x34,0x2c,0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69,
0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x7b,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x28,0x21,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x29,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,
0x67,0x2a,0x20,0x53,0x74,0x61,0x74,0x65,0x20,0x3d,0x20,0x53,0x74,0x61,0x74,0x65,0x5f,0x62,0x75,0x66,0x20,0x2b,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,
0x5f,0x69,0x64,0x28,0x30,0x29,0x20,0x2a,0x20,0x32,0x35,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x28,0x69,0x6e,
0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x35,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x53,0x74,0x61,0x74,0x65,0x5b,0x69,0x5d,0x20,0x3d,
0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x5b,0x69,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,
0x31,0x36,0x30,0x30,0x5f,0x32,0x28,0x53,0x74,0x61,0x74,0x65,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x28,0x53,
0x74,0x61,0x74,0x65,0x5b,0x33,0x5d,0x20,0x3c,0x3d,0x20,0x54,0x61,0x72,0x67,0x65,0x74,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x6f,0x75,0x74,0x49,0x64,0x78,0x20,0x3d,0x20,
0x61,0x74,0x6f,0x6d,0x69,0x63,0x5f,0x69,0x6e,0x63,0x28,0x6f,0x75,0x74,0x70,0x75,0x74,0x20,0x2b,0x20,0x30,0x78,0x46,0x46,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x28,0x6f,0x75,0x74,0x49,0x64,0x78,0x20,0x3c,0x20,0x30,0x78,0x46,0x46,0x29,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x70,0x75,0x74,0x5b,0x6f,0x75,0x74,0x49,0x64,0x78,0x5d,0x20,
0x3d,0x20,0x67,0x65,0x74,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x6d,0x65,0x6d,0x5f,0x66,0x65,0x6e,0x63,0x65,0x28,
0x43,0x4c,0x4b,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x7d,0x0a,0x00
};
} // namespace xmrig

View file

@ -0,0 +1,43 @@
/* XMRig
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "backend/opencl/kernels/Cn00RyoKernel.h"
#include "backend/opencl/wrappers/OclLib.h"
bool xmrig::Cn00RyoKernel::enqueue(cl_command_queue queue, size_t threads)
{
const size_t gthreads = threads * 64;
const size_t lthreads = 64;
return enqueueNDRange(queue, 1, nullptr, &gthreads, &lthreads);
}
// __kernel void cn00(__global int *Scratchpad, __global ulong *states)
bool xmrig::Cn00RyoKernel::setArgs(cl_mem scratchpads, cl_mem states)
{
return setArg(0, sizeof(cl_mem), &scratchpads) && setArg(1, sizeof(cl_mem), &states);
}

View file

@ -0,0 +1,48 @@
/* XMRig
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef XMRIG_CN00RYOKERNEL_H
#define XMRIG_CN00RYOKERNEL_H
#include "backend/opencl/wrappers/OclKernel.h"
namespace xmrig {
class Cn00RyoKernel : public OclKernel
{
public:
inline Cn00RyoKernel(cl_program program) : OclKernel(program, "cn00") {}
bool enqueue(cl_command_queue queue, size_t threads);
bool setArgs(cl_mem scratchpads, cl_mem states);
};
} // namespace xmrig
#endif /* XMRIG_CN00RYOKERNEL_H */

View file

@ -27,11 +27,6 @@
#include "backend/opencl/wrappers/OclLib.h" #include "backend/opencl/wrappers/OclLib.h"
xmrig::Cn0Kernel::Cn0Kernel(cl_program program) : OclKernel(program, "cn0")
{
}
bool xmrig::Cn0Kernel::enqueue(cl_command_queue queue, uint32_t nonce, size_t threads) bool xmrig::Cn0Kernel::enqueue(cl_command_queue queue, uint32_t nonce, size_t threads)
{ {
const size_t offset[2] = { nonce, 1 }; const size_t offset[2] = { nonce, 1 };

View file

@ -35,7 +35,8 @@ namespace xmrig {
class Cn0Kernel : public OclKernel class Cn0Kernel : public OclKernel
{ {
public: public:
Cn0Kernel(cl_program program); inline Cn0Kernel(cl_program program) : OclKernel(program, "cn0") {}
bool enqueue(cl_command_queue queue, uint32_t nonce, size_t threads); bool enqueue(cl_command_queue queue, uint32_t nonce, size_t threads);
bool setArgs(cl_mem input, cl_mem scratchpads, cl_mem states, uint32_t threads); bool setArgs(cl_mem input, cl_mem scratchpads, cl_mem states, uint32_t threads);
}; };

View file

@ -37,6 +37,7 @@ class Cn1Kernel : public OclKernel
public: public:
Cn1Kernel(cl_program program); Cn1Kernel(cl_program program);
Cn1Kernel(cl_program program, uint64_t height); Cn1Kernel(cl_program program, uint64_t height);
bool enqueue(cl_command_queue queue, uint32_t nonce, size_t threads, size_t worksize); bool enqueue(cl_command_queue queue, uint32_t nonce, size_t threads, size_t worksize);
bool setArgs(cl_mem input, cl_mem scratchpads, cl_mem states, uint32_t threads); bool setArgs(cl_mem input, cl_mem scratchpads, cl_mem states, uint32_t threads);
}; };

View file

@ -0,0 +1,48 @@
/* XMRig
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <string>
#include "backend/opencl/kernels/Cn1RyoKernel.h"
#include "backend/opencl/wrappers/OclLib.h"
bool xmrig::Cn1RyoKernel::enqueue(cl_command_queue queue, size_t threads, size_t worksize)
{
const size_t gthreads = threads * 16;
const size_t lthreads = worksize * 16;
return enqueueNDRange(queue, 1, nullptr, &gthreads, &lthreads);
}
// __kernel void cn1(__global int *lpad_in, __global int *spad, uint numThreads)
bool xmrig::Cn1RyoKernel::setArgs(cl_mem scratchpads, cl_mem states, uint32_t threads)
{
return setArg(0, sizeof(cl_mem), &scratchpads) &&
setArg(1, sizeof(cl_mem), &states) &&
setArg(2, sizeof(uint32_t), &threads);
}

View file

@ -0,0 +1,48 @@
/* XMRig
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef XMRIG_CN1RYOKERNEL_H
#define XMRIG_CN1RYOKERNEL_H
#include "backend/opencl/wrappers/OclKernel.h"
namespace xmrig {
class Cn1RyoKernel : public OclKernel
{
public:
inline Cn1RyoKernel(cl_program program) : OclKernel(program, "cn1") {}
bool enqueue(cl_command_queue queue, size_t threads, size_t worksize);
bool setArgs(cl_mem scratchpads, cl_mem states, uint32_t threads);
};
} // namespace xmrig
#endif /* XMRIG_CN1RYOKERNEL_H */

View file

@ -27,11 +27,6 @@
#include "backend/opencl/wrappers/OclLib.h" #include "backend/opencl/wrappers/OclLib.h"
xmrig::Cn2Kernel::Cn2Kernel(cl_program program) : OclKernel(program, "cn2")
{
}
bool xmrig::Cn2Kernel::enqueue(cl_command_queue queue, uint32_t nonce, size_t threads) bool xmrig::Cn2Kernel::enqueue(cl_command_queue queue, uint32_t nonce, size_t threads)
{ {
const size_t offset[2] = { nonce, 1 }; const size_t offset[2] = { nonce, 1 };

View file

@ -35,7 +35,8 @@ namespace xmrig {
class Cn2Kernel : public OclKernel class Cn2Kernel : public OclKernel
{ {
public: public:
Cn2Kernel(cl_program program); inline Cn2Kernel(cl_program program) : OclKernel(program, "cn2") {}
bool enqueue(cl_command_queue queue, uint32_t nonce, size_t threads); bool enqueue(cl_command_queue queue, uint32_t nonce, size_t threads);
bool setArgs(cl_mem scratchpads, cl_mem states, const std::vector<cl_mem> &branches, uint32_t threads); bool setArgs(cl_mem scratchpads, cl_mem states, const std::vector<cl_mem> &branches, uint32_t threads);
}; };

View file

@ -0,0 +1,48 @@
/* XMRig
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "backend/opencl/kernels/Cn2RyoKernel.h"
#include "backend/opencl/wrappers/OclLib.h"
bool xmrig::Cn2RyoKernel::enqueue(cl_command_queue queue, uint32_t nonce, size_t threads)
{
const size_t offset[2] = { nonce, 1 };
const size_t gthreads[2] = { threads, 8 };
static const size_t lthreads[2] = { 8, 8 };
return enqueueNDRange(queue, 2, offset, gthreads, lthreads);
}
// __kernel void cn2(__global uint4 *Scratchpad, __global ulong *states, __global uint *output, ulong Target, uint Threads)
bool xmrig::Cn2RyoKernel::setArgs(cl_mem scratchpads, cl_mem states, cl_mem output, uint64_t target, uint32_t threads)
{
return setArg(0, sizeof(cl_mem), &scratchpads) &&
setArg(1, sizeof(cl_mem), &states) &&
setArg(2, sizeof(cl_mem), &output) &&
setArg(3, sizeof(cl_ulong), &target) &&
setArg(4, sizeof(uint32_t), &threads);
}

View file

@ -0,0 +1,48 @@
/* XMRig
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef XMRIG_CN2RYOKERNEL_H
#define XMRIG_CN2RYOKERNEL_H
#include "backend/opencl/wrappers/OclKernel.h"
namespace xmrig {
class Cn2RyoKernel : public OclKernel
{
public:
inline Cn2RyoKernel(cl_program program) : OclKernel(program, "cn2") {}
bool enqueue(cl_command_queue queue, uint32_t nonce, size_t threads);
bool setArgs(cl_mem scratchpads, cl_mem states, cl_mem output, uint64_t target, uint32_t threads);
};
} // namespace xmrig
#endif /* XMRIG_CN2RYOKERNEL_H */

View file

@ -69,6 +69,22 @@ if (WITH_OPENCL)
list(APPEND SOURCES_BACKEND_OPENCL src/backend/opencl/runners/OclRxRunner.cpp) list(APPEND SOURCES_BACKEND_OPENCL src/backend/opencl/runners/OclRxRunner.cpp)
endif() endif()
if (WITH_CN_GPU AND CMAKE_SIZEOF_VOID_P EQUAL 8)
list(APPEND HEADERS_BACKEND_OPENCL
src/backend/opencl/kernels/Cn00RyoKernel.h
src/backend/opencl/kernels/Cn1RyoKernel.h
src/backend/opencl/kernels/Cn2RyoKernel.h
src/backend/opencl/runners/OclRyoRunner.h
)
list(APPEND SOURCES_BACKEND_OPENCL
src/backend/opencl/kernels/Cn00RyoKernel.cpp
src/backend/opencl/kernels/Cn1RyoKernel.cpp
src/backend/opencl/kernels/Cn2RyoKernel.cpp
src/backend/opencl/runners/OclRyoRunner.cpp
)
endif()
if (WITH_STRICT_CACHE) if (WITH_STRICT_CACHE)
add_definitions(/DXMRIG_STRICT_OPENCL_CACHE) add_definitions(/DXMRIG_STRICT_OPENCL_CACHE)
else() else()

View file

@ -81,12 +81,6 @@ xmrig::OclCnRunner::OclCnRunner(size_t index, const OclLaunchData &data) : OclBa
m_options += " -DALGO_BASE=" + std::to_string(CnAlgo<>::base(m_algorithm)); m_options += " -DALGO_BASE=" + std::to_string(CnAlgo<>::base(m_algorithm));
m_options += " -DALGO_FAMILY=" + std::to_string(m_algorithm.family()); m_options += " -DALGO_FAMILY=" + std::to_string(m_algorithm.family());
m_options += " -DCN_UNROLL=" + std::to_string(data.thread.unrollFactor()); m_options += " -DCN_UNROLL=" + std::to_string(data.thread.unrollFactor());
# ifdef XMRIG_ALGO_CN_GPU
if (data.algorithm == Algorithm::CN_GPU) {
m_options += " -cl-fp32-correctly-rounded-divide-sqrt";
}
# endif
} }

View file

@ -0,0 +1,185 @@
/* XMRig
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "backend/opencl/runners/OclRyoRunner.h"
#include "backend/opencl/kernels/Cn00RyoKernel.h"
#include "backend/opencl/kernels/Cn0Kernel.h"
#include "backend/opencl/kernels/Cn1RyoKernel.h"
#include "backend/opencl/kernels/Cn2RyoKernel.h"
#include "backend/opencl/kernels/CnBranchKernel.h"
#include "backend/opencl/OclLaunchData.h"
#include "backend/opencl/wrappers/OclLib.h"
#include "base/io/log/Log.h"
#include "base/net/stratum/Job.h"
#include "crypto/cn/CnAlgo.h"
xmrig::OclRyoRunner::OclRyoRunner(size_t index, const OclLaunchData &data) : OclBaseRunner(index, data)
{
if (m_queue == nullptr) {
return;
}
const size_t g_thd = data.thread.intensity();
cl_int ret;
m_scratchpads = OclLib::createBuffer(m_ctx, CL_MEM_READ_WRITE, data.algorithm.l3() * g_thd, nullptr, &ret);
if (ret != CL_SUCCESS) {
return;
}
m_states = OclLib::createBuffer(m_ctx, CL_MEM_READ_WRITE, 200 * g_thd, nullptr, &ret);
if (ret != CL_SUCCESS) {
return;
}
m_options += " -DITERATIONS=" + std::to_string(CnAlgo<>::iterations(m_algorithm)) + "U";
m_options += " -DMASK=" + std::to_string(CnAlgo<>::mask(m_algorithm)) + "U";
m_options += " -DWORKSIZE=" + std::to_string(data.thread.worksize()) + "U";
m_options += " -DMEMORY=" + std::to_string(m_algorithm.l3()) + "LU";
m_options += " -DCN_UNROLL=" + std::to_string(data.thread.unrollFactor());
m_options += " -cl-fp32-correctly-rounded-divide-sqrt";
}
xmrig::OclRyoRunner::~OclRyoRunner()
{
delete m_cn00;
delete m_cn0;
delete m_cn1;
delete m_cn2;
OclLib::release(m_scratchpads);
OclLib::release(m_states);
}
bool xmrig::OclRyoRunner::isReadyToBuild() const
{
return OclBaseRunner::isReadyToBuild() &&
m_scratchpads != nullptr &&
m_states != nullptr;
}
bool xmrig::OclRyoRunner::run(uint32_t nonce, uint32_t *hashOutput)
{
static const cl_uint zero = 0;
const size_t g_intensity = data().thread.intensity();
const size_t w_size = data().thread.worksize();
const size_t g_thd = ((g_intensity + w_size - 1u) / w_size) * w_size;
assert(g_thd % w_size == 0);
if (OclLib::enqueueWriteBuffer(m_queue, m_output, CL_FALSE, sizeof(cl_uint) * 0xFF, sizeof(cl_uint), &zero, 0, nullptr, nullptr) != CL_SUCCESS) {
return false;
}
if (!m_cn0->enqueue(m_queue, nonce, g_thd)) {
return false;
}
if (!m_cn00->enqueue(m_queue, g_thd)) {
return false;
}
if (!m_cn1->enqueue(m_queue, g_thd, w_size)) {
return false;
}
if (!m_cn2->enqueue(m_queue, nonce, g_thd)) {
return false;
}
if (OclLib::enqueueReadBuffer(m_queue, m_output, CL_TRUE, 0, sizeof(cl_uint) * 0x100, hashOutput, 0, nullptr, nullptr) != CL_SUCCESS) {
return false;
}
uint32_t &results = hashOutput[0xFF];
if (results > 0xFF) {
results = 0xFF;
}
return true;
}
bool xmrig::OclRyoRunner::selfTest() const
{
return OclBaseRunner::selfTest() && m_cn0->isValid() && m_cn00->isValid() && m_cn1->isValid() && m_cn2->isValid();
}
bool xmrig::OclRyoRunner::set(const Job &job, uint8_t *blob)
{
if (job.size() > (Job::kMaxBlobSize - 4)) {
return false;
}
blob[job.size()] = 0x01;
memset(blob + job.size() + 1, 0, Job::kMaxBlobSize - job.size() - 1);
if (OclLib::enqueueWriteBuffer(m_queue, m_input, CL_TRUE, 0, Job::kMaxBlobSize, blob, 0, nullptr, nullptr) != CL_SUCCESS) {
return false;
}
const uint32_t intensity = data().thread.intensity();
if (!m_cn00->setArgs(m_scratchpads, m_states)) {
return false;
}
if (!m_cn0->setArgs(m_input, m_scratchpads, m_states, intensity)) {
return false;
}
if (!m_cn1->setArgs(m_scratchpads, m_states, intensity)) {
return false;
}
if (!m_cn2->setArgs(m_scratchpads, m_states, m_output, job.target(), intensity)) {
return false;
}
return true;
}
void xmrig::OclRyoRunner::build()
{
OclBaseRunner::build();
if (!m_program) {
return;
}
m_cn00 = new Cn00RyoKernel(m_program);
m_cn0 = new Cn0Kernel(m_program);
m_cn1 = new Cn1RyoKernel(m_program);
m_cn2 = new Cn2RyoKernel(m_program);
}

View file

@ -0,0 +1,74 @@
/* XMRig
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef XMRIG_OCLRYORUNNER_H
#define XMRIG_OCLRYORUNNER_H
#include "backend/opencl/runners/OclBaseRunner.h"
namespace xmrig {
class Cn00RyoKernel;
class Cn0Kernel;
class Cn1RyoKernel;
class Cn2RyoKernel;
class OclRyoRunner : public OclBaseRunner
{
public:
OclRyoRunner() = delete;
OclRyoRunner(const OclRyoRunner &other) = delete;
OclRyoRunner(OclRyoRunner &&other) = delete;
OclRyoRunner(size_t index, const OclLaunchData &data);
~OclRyoRunner() override;
OclRyoRunner &operator=(const OclRyoRunner &other) = delete;
OclRyoRunner &operator=(OclRyoRunner &&other) = delete;
protected:
bool isReadyToBuild() const override;
bool run(uint32_t nonce, uint32_t *hashOutput) override;
bool selfTest() const override;
bool set(const Job &job, uint8_t *blob) override;
void build() override;
private:
cl_mem m_scratchpads = nullptr;
cl_mem m_states = nullptr;
Cn00RyoKernel *m_cn00 = nullptr;
Cn0Kernel *m_cn0 = nullptr;
Cn1RyoKernel *m_cn1 = nullptr;
Cn2RyoKernel *m_cn2 = nullptr;
};
} /* namespace xmrig */
#endif // XMRIG_OCLRYORUNNER_H

View file

@ -29,10 +29,10 @@
#include "base/tools/String.h" #include "base/tools/String.h"
typedef struct _cl_command_queue *cl_command_queue; using cl_command_queue = struct _cl_command_queue *;
typedef struct _cl_kernel *cl_kernel; using cl_kernel = struct _cl_kernel *;
typedef struct _cl_mem *cl_mem; using cl_mem = struct _cl_mem *;
typedef struct _cl_program *cl_program; using cl_program = struct _cl_program *;
namespace xmrig { namespace xmrig {