2015-09-06 09:04:02 +04:00

1371 lines
102 KiB
C#

//! \file KiriKiriCx.cs
//! \date Sun Sep 07 06:50:11 2014
//! \brief KiriKiri Cx encryption scheme implementation.
//
// Copyright (C) 2014-2015 by morkt
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//
using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace GameRes.Formats.KiriKiri
{
public class CxProgramException : ApplicationException
{
public CxProgramException (string message) : base (message)
{
}
}
internal abstract class CxEncryption : ICrypt
{
private uint m_mask;
private uint m_offset;
protected byte[] PrologOrder { get; set; }
protected byte[] OddBranchOrder { get; set; }
protected byte[] EvenBranchOrder { get; set; }
protected abstract uint[] ControlBlock { get; }
public CxEncryption (uint mask, uint offset)
{
m_mask = mask;
m_offset = offset;
PrologOrder = new byte[] { 0, 1, 2 };
OddBranchOrder = new byte[] { 0, 1, 2, 3, 4, 5 };
EvenBranchOrder = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
}
uint GetBaseOffset (uint hash)
{
return (hash & m_mask) + m_offset;
}
public override byte Decrypt (Xp3Entry entry, long offset, byte value)
{
uint key = entry.Hash;
uint base_offset = GetBaseOffset (key);
if (offset >= base_offset)
{
key = (key >> 16) ^ key;
}
var buffer = new byte[1] { value };
Decode (key, offset, buffer, 0, 1);
return buffer[0];
}
public override void Decrypt (Xp3Entry entry, long offset, byte[] buffer, int pos, int count)
{
uint key = entry.Hash;
uint base_offset = GetBaseOffset (key);
if (offset < base_offset)
{
int base_length = Math.Min ((int)(base_offset - offset), count);
Decode (key, offset, buffer, pos, base_length);
offset += base_length;
pos += base_length;
count -= base_length;
}
if (count > 0)
{
key = (key >> 16) ^ key;
Decode (key, offset, buffer, pos, count);
}
}
void Decode (uint key, long offset, byte[] buffer, int pos, int count)
{
Tuple<uint, uint> ret = ExecuteXCode (key);
uint key1 = ret.Item2 >> 16;
uint key2 = ret.Item2 & 0xffff;
byte key3 = (byte)(ret.Item1);
if (key1 == key2)
key2 = (key2+1) & 0xffff;
if (0 == key3)
key3 = 1;
// Trace.WriteLine (string.Format ("[offset:{3:x4}] [key1:{0:x4}] [key2:{1:x4}] [key3:{2:x6}]", key1, key2, key3, offset));
if ((key2 >= offset) && (key2 < offset + count))
buffer[pos + key2 - offset] ^= (byte)(ret.Item1 >> 16);
if ((key1 >= offset) && (key1 < offset + count))
buffer[pos + key1 - offset] ^= (byte)(ret.Item1 >> 8);
for (int i = 0; i < count; ++i)
buffer[pos + i] ^= key3;
}
public override void Encrypt (Xp3Entry entry, long offset, byte[] values, int pos, int count)
{
Decrypt (entry, offset, values, pos, count);
}
CxProgram[] m_program_list = new CxProgram[0x80];
Tuple<uint, uint> ExecuteXCode (uint hash)
{
uint seed = hash & 0x7f;
if (null == m_program_list[seed])
{
m_program_list[seed] = GenerateProgram (seed);
}
hash >>= 7;
uint ret1 = m_program_list[seed].Execute (hash);
uint ret2 = m_program_list[seed].Execute (~hash);
return new Tuple<uint, uint> (ret1, ret2);
}
CxProgram GenerateProgram (uint seed)
{
var program = new CxProgram (seed, ControlBlock);
for (int stage = 5; stage > 0; --stage)
{
if (EmitCode (program, stage))
return program;
// Trace.WriteLine (string.Format ("stage {0} failed for seed {1}", stage, seed), "GenerateProgram");
program.Clear();
}
throw new CxProgramException ("Overly large CxEncryption bytecode");
}
bool EmitCode (CxProgram program, int stage)
{
return program.EmitNop (5) // 0x57 0x56 0x53 0x51 0x52
&& program.Emit (CxByteCode.MOV_EDI_ARG, 4) // 0x8b 0x7c 0x24 0x18
&& EmitBody (program, stage)
&& program.EmitNop (5) // 0x5a 0x59 0x5b 0x5e 0x5f
&& program.Emit (CxByteCode.RETN); // 0xc3
}
bool EmitBody (CxProgram program, int stage)
{
if (1 == stage)
return EmitProlog (program);
if (!program.Emit (CxByteCode.PUSH_EBX)) // 0x53
return false;
if (0 != (program.GetRandom() & 1))
{
if (!EmitBody (program, stage - 1))
return false;
}
else if (!EmitBody2 (program, stage - 1))
return false;
if (!program.Emit (CxByteCode.MOV_EBX_EAX, 2)) // 0x89 0xc3
return false;
if (0 != (program.GetRandom() & 1))
{
if (!EmitBody (program, stage - 1))
return false;
}
else if (!EmitBody2 (program, stage - 1))
return false;
return EmitOddBranch (program) && program.Emit (CxByteCode.POP_EBX); // 0x5b
}
bool EmitBody2 (CxProgram program, int stage)
{
if (1 == stage)
return EmitProlog (program);
bool rc = true;
if (0 != (program.GetRandom() & 1))
rc = EmitBody (program, stage - 1);
else
rc = EmitBody2 (program, stage - 1);
return rc && EmitEvenBranch (program);
}
bool EmitProlog (CxProgram program)
{
bool rc = true;
switch (PrologOrder[program.GetRandom() % 3])
{
case 2:
// MOV EAX, (Random() & 0x3ff)
// MOV EAX, EncryptionControlBlock[EAX]
rc = program.EmitNop (5) // 0xbe
&& program.Emit (CxByteCode.MOV_EAX_IMMED, 2) // 0x8b 0x86
&& program.EmitUInt32 (program.GetRandom() & 0x3ff)
&& program.Emit (CxByteCode.MOV_EAX_INDIRECT, 0);
break;
case 1:
rc = program.Emit (CxByteCode.MOV_EAX_EDI, 2); // 0x8b 0xc7
break;
case 0:
// MOV EAX, Random()
rc = program.Emit (CxByteCode.MOV_EAX_IMMED) // 0xb8
&& program.EmitRandom();
break;
}
return rc;
}
bool EmitEvenBranch (CxProgram program)
{
bool rc = true;
switch (EvenBranchOrder[program.GetRandom() & 7])
{
case 0:
rc = program.Emit (CxByteCode.NOT_EAX, 2); // 0xf7 0xd0
break;
case 1:
rc = program.Emit (CxByteCode.DEC_EAX); // 0x48
break;
case 2:
rc = program.Emit (CxByteCode.NEG_EAX, 2); // 0xf7 0xd8
break;
case 3:
rc = program.Emit (CxByteCode.INC_EAX); // 0x40
break;
case 4:
rc = program.EmitNop (5) // 0xbe
&& program.Emit (CxByteCode.AND_EAX_IMMED) // 0x25
&& program.EmitUInt32 (0x3ff)
&& program.Emit (CxByteCode.MOV_EAX_INDIRECT, 3); // 0x8b 0x04 0x86
break;
case 5:
rc = program.Emit (CxByteCode.PUSH_EBX) // 0x53
&& program.Emit (CxByteCode.MOV_EBX_EAX, 2) // 0x89 0xc3
&& program.Emit (CxByteCode.AND_EBX_IMMED, 2) // 0x81 0xe3
&& program.EmitUInt32 (0xaaaaaaaa)
&& program.Emit (CxByteCode.AND_EAX_IMMED) // 0x25
&& program.EmitUInt32 (0x55555555)
&& program.Emit (CxByteCode.SHR_EBX_1, 2) // 0xd1 0xeb
&& program.Emit (CxByteCode.SHL_EAX_1, 2) // 0xd1 0xe0
&& program.Emit (CxByteCode.OR_EAX_EBX, 2) // 0x09 0xd8
&& program.Emit (CxByteCode.POP_EBX); // 0x5b
break;
case 6:
rc = program.Emit (CxByteCode.XOR_EAX_IMMED) // 0x35
&& program.EmitRandom();
break;
case 7:
if (0 != (program.GetRandom() & 1))
rc = program.Emit (CxByteCode.ADD_EAX_IMMED); // 0x05
else
rc = program.Emit (CxByteCode.SUB_EAX_IMMED); // 0x2d
rc = rc && program.EmitRandom();
break;
}
return rc;
}
bool EmitOddBranch (CxProgram program)
{
bool rc = true;
switch (OddBranchOrder[program.GetRandom() % 6])
{
case 0:
rc = program.Emit (CxByteCode.PUSH_ECX) // 0x51
&& program.Emit (CxByteCode.MOV_ECX_EBX, 2) // 0x89 0xd9
&& program.Emit (CxByteCode.AND_ECX_0F, 3) // 0x83 0xe1 0x0f
&& program.Emit (CxByteCode.SHR_EAX_CL, 2) // 0xd3 0xe8
&& program.Emit (CxByteCode.POP_ECX); // 0x59
break;
case 1:
rc = program.Emit (CxByteCode.PUSH_ECX) // 0x51
&& program.Emit (CxByteCode.MOV_ECX_EBX, 2) // 0x89 0xd9
&& program.Emit (CxByteCode.AND_ECX_0F, 3) // 0x83 0xe1 0x0f
&& program.Emit (CxByteCode.SHL_EAX_CL, 2) // 0xd3 0xe0
&& program.Emit (CxByteCode.POP_ECX); // 0x59
break;
case 2:
rc = program.Emit (CxByteCode.ADD_EAX_EBX, 2); // 0x01 0xd8
break;
case 3:
rc = program.Emit (CxByteCode.NEG_EAX, 2) // 0xf7 0xd8
&& program.Emit (CxByteCode.ADD_EAX_EBX, 2); // 0x01 0xd8
break;
case 4:
rc = program.Emit (CxByteCode.IMUL_EAX_EBX, 3); // 0x0f 0xaf 0xc3
break;
case 5:
rc = program.Emit (CxByteCode.SUB_EAX_EBX, 2); // 0x29 0xd8
break;
}
return rc;
}
}
enum CxByteCode
{
NOP,
RETN,
MOV_EDI_ARG,
PUSH_EBX,
POP_EBX,
PUSH_ECX,
POP_ECX,
MOV_EAX_EBX,
MOV_EBX_EAX,
MOV_ECX_EBX,
MOV_EAX_CONTROL_BLOCK,
MOV_EAX_EDI,
MOV_EAX_INDIRECT,
ADD_EAX_EBX,
SUB_EAX_EBX,
IMUL_EAX_EBX,
AND_ECX_0F,
SHR_EBX_1,
SHL_EAX_1,
SHR_EAX_CL,
SHL_EAX_CL,
OR_EAX_EBX,
NOT_EAX,
NEG_EAX,
DEC_EAX,
INC_EAX,
IMMED = 0x100,
MOV_EAX_IMMED,
AND_EBX_IMMED,
AND_EAX_IMMED,
XOR_EAX_IMMED,
ADD_EAX_IMMED,
SUB_EAX_IMMED,
}
internal class CxProgram
{
public const int LengthLimit = 0x80;
private List<uint> m_code = new List<uint> (LengthLimit);
private uint[] m_ControlBlock;
private int m_length;
private uint m_seed;
class Context
{
public uint eax;
public uint ebx;
public uint ecx;
public uint edi;
public Stack<uint> stack = new Stack<uint>();
}
public CxProgram (uint seed, uint[] control_block)
{
m_seed = seed;
m_length = 0;
m_ControlBlock = control_block;
}
public uint Execute (uint hash)
{
var context = new Context();
var iterator = m_code.GetEnumerator();
uint immed = 0;
while (iterator.MoveNext())
{
var bytecode = (CxByteCode)iterator.Current;
if (CxByteCode.IMMED == (bytecode & CxByteCode.IMMED))
{
if (!iterator.MoveNext())
throw new CxProgramException ("Incomplete IMMED bytecode in CxEncryption program");
immed = iterator.Current;
}
switch (bytecode)
{
case CxByteCode.NOP: break;
case CxByteCode.IMMED: break;
case CxByteCode.MOV_EDI_ARG: context.edi = hash; break;
case CxByteCode.PUSH_EBX: context.stack.Push (context.ebx); break;
case CxByteCode.POP_EBX: context.ebx = context.stack.Pop(); break;
case CxByteCode.PUSH_ECX: context.stack.Push (context.ecx); break;
case CxByteCode.POP_ECX: context.ecx = context.stack.Pop(); break;
case CxByteCode.MOV_EBX_EAX: context.ebx = context.eax; break;
case CxByteCode.MOV_EAX_EDI: context.eax = context.edi; break;
case CxByteCode.MOV_ECX_EBX: context.ecx = context.ebx; break;
case CxByteCode.MOV_EAX_EBX: context.eax = context.ebx; break;
case CxByteCode.AND_ECX_0F: context.ecx &= 0x0f; break;
case CxByteCode.SHR_EBX_1: context.ebx >>= 1; break;
case CxByteCode.SHL_EAX_1: context.eax <<= 1; break;
case CxByteCode.SHR_EAX_CL: context.eax >>= (int)context.ecx; break;
case CxByteCode.SHL_EAX_CL: context.eax <<= (int)context.ecx; break;
case CxByteCode.OR_EAX_EBX: context.eax |= context.ebx; break;
case CxByteCode.NOT_EAX: context.eax = ~context.eax; break;
case CxByteCode.NEG_EAX: context.eax = (uint)-context.eax; break;
case CxByteCode.DEC_EAX: context.eax--; break;
case CxByteCode.INC_EAX: context.eax++; break;
case CxByteCode.ADD_EAX_EBX: context.eax += context.ebx; break;
case CxByteCode.SUB_EAX_EBX: context.eax -= context.ebx; break;
case CxByteCode.IMUL_EAX_EBX: context.eax *= context.ebx; break;
case CxByteCode.ADD_EAX_IMMED: context.eax += immed; break;
case CxByteCode.SUB_EAX_IMMED: context.eax -= immed; break;
case CxByteCode.AND_EBX_IMMED: context.ebx &= immed; break;
case CxByteCode.AND_EAX_IMMED: context.eax &= immed; break;
case CxByteCode.XOR_EAX_IMMED: context.eax ^= immed; break;
case CxByteCode.MOV_EAX_IMMED: context.eax = immed; break;
case CxByteCode.MOV_EAX_INDIRECT:
if (context.eax >= m_ControlBlock.Length)
throw new CxProgramException ("Index out of bounds in CxEncryption program");
context.eax = ~m_ControlBlock[context.eax];
break;
case CxByteCode.RETN:
if (context.stack.Count > 0)
throw new CxProgramException ("Imbalanced stack in CxEncryption program");
return context.eax;
default:
throw new CxProgramException ("Invalid bytecode in CxEncryption program");
}
}
throw new CxProgramException ("CxEncryption program without RETN bytecode");
}
public void Clear ()
{
m_length = 0;
m_code.Clear();
}
public bool EmitNop (int count)
{
if (m_length + count > LengthLimit)
return false;
m_length += count;
return true;
}
public bool Emit (CxByteCode code, int length = 1)
{
if (m_length + length > LengthLimit)
return false;
m_length += length;
m_code.Add ((uint)code);
return true;
}
public bool EmitUInt32 (uint x)
{
if (m_length + 4 > LengthLimit)
return false;
m_length += 4;
m_code.Add (x);
return true;
}
public bool EmitRandom ()
{
return EmitUInt32 (GetRandom());
}
public uint GetRandom ()
{
uint seed = m_seed;
m_seed = 1103515245 * seed + 12345;
return m_seed ^ (seed << 16) ^ (seed >> 16);
}
}
internal class FateHACrypt : CxEncryption
{
public FateHACrypt () : base (0x143, 0x787)
{
}
protected override uint[] ControlBlock { get { return FateControlBlock; } }
static readonly uint[] FateControlBlock = new uint[] {
0x9c91badf, 0x8b8f868d, 0xdf919096, 0x8b91909c, 0xdf93908d, 0x9c90939d, 0xd2d2df94, 0x9e8bacdf,
0x9e9c968b, 0xdf869393, 0x9bdf8d90, 0x929e9186, 0x939e9c96, 0xdfd38693, 0x9a8d969b, 0x86938b9c,
0xdf8d90df, 0x969b9196, 0x8b9c9a8d, 0xdfd38693, 0x91968c8a, 0x978bdf98, 0x8fdf8c96, 0x8d98908d,
0x9edf929e, 0x90d09b91, 0x939ddf8d, 0xdf949c90, 0x92908d99, 0x978b90df, 0x8fdf8d9a, 0x8d98908d,
0xdf8c929e, 0x93939688, 0xdf9a9ddf, 0x9a939396, 0xdf939e98, 0x8bdf869d, 0x93df9a97, 0x919a9c96,
0x9edf9a8c, 0x9a9a8d98, 0x8b919a92, 0x4e7ddfd1, 0x897c337d, 0xb07c727c, 0x7f7c767c, 0x8a7c1d7d,
0x9d7c727c, 0x0f7db17c, 0x3c6fbe7e, 0x3a7db66c, 0x157d5f7d, 0xb66c516c, 0x5f7d3a7d, 0xbe7e157d,
0x256f436d, 0x3a7db66c, 0x157d5f7d, 0x256f2b75, 0x3a7db66c, 0x157d5f7d, 0x436ebe7e, 0x897c337d,
0xb07c727c, 0x7f7c767c, 0x187d567d, 0x5d7d8f68, 0x4e7d167d, 0x327d397d, 0xbc7c767c, 0x6c7ca57c,
0x367da77c, 0x177d197d, 0x497d2974, 0x157d187d, 0x5d7d3b7d, 0x487d237d, 0x71f5bd7e, 0x7d116e56,
0x7dbe7436, 0x69397d16, 0x7d557d7a, 0x7d4e7d36, 0x7d4e7d36, 0x703b7d4a, 0x7d827390, 0x7d3b7d59,
0x7d157d52, 0xf5bd7e16, 0x53708a7e, 0x337d4f6d, 0x2e6b8a1f, 0x207d9374, 0xa37c0f7d, 0xa57ca47e,
0xa87ca47e, 0x8968337d, 0x3a7d3368, 0x157d1d7d, 0x92df317d, 0x869e938f, 0x557d8d9a, 0x496f3b72,
0x157d4c7d, 0x1a6ebe7e, 0x6571337d, 0x377d367d, 0x427d3e7d, 0x2b6e0c70, 0x337d3a7d, 0xa870be7e,
0x377d9c6d, 0x567d0e7d, 0x377d306a, 0x497d4b75, 0x2074367d, 0x0c705d7d, 0x3a7d2b6e, 0xa47e327d,
0x6ef5897e, 0x7d306a75, 0x7d187d12, 0x7d427647, 0x7d41730f, 0x7d3b7d3e, 0x7d337d16, 0x7d127d56,
0x7d187d56, 0x7d5d7d37, 0x7dbe7e55, 0x7d2b7d42, 0x7d93690e, 0x7342750f, 0x7d4a7d82, 0x7d527d3b,
0x7d3b7d15, 0x7d167d5d, 0x7d417d33, 0x7e5b7d14, 0x70216bbd, 0x7d327d68, 0x7d367d37, 0x7d1d7d18,
0x7d157d5b, 0x7d4f7d4a, 0x7d8a7e36, 0x7d167d20, 0x7d327d32, 0x7d327d20, 0x7e507d15, 0x7d157db4,
0x7d157d50, 0x7d157d50, 0x7d327d15, 0x7d327d15, 0x7d157d32, 0x7d147d20, 0x7e147d20, 0x73397d89,
0x7d5d7d41, 0x7d557d37, 0x69be7e18, 0x75337d93, 0x70397d6c, 0x7d7a6d1c, 0x7d0c710f, 0x7d197150,
0x7e427d3e, 0x6bf5f5bd, 0x7d687021, 0x7d4e7d55, 0x7d377d5b, 0x7d3b7d3e, 0x7d237d4a, 0x7d427d3e,
0x7d327d33, 0x7d4a7d42, 0x7c157756, 0x6e717369, 0x7d417db0, 0x7d427d3e, 0x7d147d41, 0x7e567d5b,
0x7d7a69bd, 0x68406832, 0x7d796d62, 0x7d4e7d36, 0x7d377d0e, 0x7d397d4e, 0x6e04730f, 0x7d3e7d69,
0xf5bd7e42, 0x51758a7e, 0x367dac6e, 0x207d1d68, 0x187d427d, 0x4472be7e, 0x0f7d636c, 0x98cacedf,
0x597d3e76, 0xbe7e3b7d, 0x556a436b, 0x187d527d, 0x53725d7d, 0x3e7d4b7d, 0x397d427d, 0x147d4e7d,
0xbe7e3a7d, 0x2e6b8a1f, 0x6c7cab7c, 0xbe7e327d, 0x5b7d1f7d, 0xb0710e6c, 0x3a7d936f, 0x897e487d,
0x7d9369f5, 0x7d5f7d32, 0x7d3b7d12, 0x6840683b, 0x7d0f7d62, 0x7d207d1d, 0x7e467d4c, 0x70216bbe,
0x740f7d68, 0x7d237d87, 0x7e427d46, 0x7d7a69bd, 0x73427632, 0x6a567133, 0x68557d55, 0x7d626840,
0x7d1d7d0f, 0x7d4c7d20, 0x7d187d46, 0x7d427d15, 0x68567d33, 0x7d0f7662, 0x7d547d3a, 0x7d5d7d37,
0x7d5b7d19, 0x70a36a37, 0x7d417d11, 0x7d427d3e, 0x7dbe7e55, 0x77157d44, 0x7e776837, 0x70216bbe,
0x73337d68, 0x7d8b6841, 0x76626832, 0x6b8c6a0f, 0x7d367da3, 0x7d3e7d37, 0xf5bd7e42, 0x70216bf5,
0x73327d68, 0x7d3e7d41, 0x7d5d7d3b, 0x7d4e7d16, 0x77557d39, 0x6a5e692c, 0x7d41698c, 0x7d417d37,
0x7e3a7d50, 0x728971be, 0x6e567193, 0x7d327d33, 0x7d397d23, 0x7d377d1f, 0x7d5b7d19, 0x7d337d37,
0x72be7e3a, 0x7d20743a, 0x7d5f7d32, 0x69177d23, 0x741f7d93, 0x7d367dbc, 0x7d3b7d4a, 0x7d377d5d,
0x7dbd7e5d, 0x7d397d1f, 0x77397d1f, 0x7d576a3f, 0x7d567d41, 0x7dbe7e18, 0x7d5d7d39, 0x7d337d5b,
0x7d5f7d1f, 0x7dbd7e16, 0x7d3e7d39, 0x71367d52, 0x7d42690a, 0x7d207632, 0x7d3b7d53, 0x7d167d5d,
0x7d507d12, 0x7e4a7d41, 0x684068be, 0x69156f62, 0x7c337d1a, 0x7c6c7cbe, 0x7c727c97, 0x7d977cbc,
0x71397636, 0x6bac6e69, 0x7d0f7d35, 0x7d187d1d, 0x7d3b7d46, 0x7d167d5d, 0x7d417d0e, 0x76187d56,
0x76766a20, 0x7d557d28, 0x7d567d56, 0x7d3b7d3e, 0x7d337d16, 0x7d556a32, 0x7d3e7d56, 0x7d5d7d3b,
0xf5bd7e16, 0x7d397df5, 0x7d417332, 0x7d3b7d3e, 0x7e9c7e1f, 0x7e9c7e9c, 0x684068bd, 0x7d796d62,
0x7d8a7e36, 0x711f7d3a, 0x7c1f7d17, 0x7c907c93, 0x7e907c93, 0x7d3d7d9f, 0x7d3a7d5d, 0x7dbc7136,
0x7c427d3e, 0x7caa7cb2, 0x7caa7cb2, 0x7c767c8b, 0x7c8f7cbc, 0x7c1f7d6c, 0x7c907c93, 0x7e907c93,
0x7d3d7d9f, 0x7d3a7d5d, 0x7dbc7136, 0x7c427d3e, 0x7caa7cb2, 0x7caa7cb2, 0x7c767c8b, 0x7c8f7cbc,
0x7c1f7d6c, 0x7c907c93, 0x7e907c93, 0x7d3d7d9f, 0x7d3a7d5d, 0x7dbc7136, 0x7c427d3e, 0x7caa7cb2,
0x7caa7cb2, 0x7c767c8b, 0x7c8f7cbc, 0x7c1f7d6c, 0x7c907c93, 0x7e907c93, 0x7d3d7d9f, 0x7d3a7d5d,
0x7dbc7136, 0x7c427d3e, 0x7caa7cb2, 0x7caa7cb2, 0x7c767c8b, 0x7c8f7cbc, 0x7c1f7d6c, 0x7c907c93,
0x7e907c93, 0x7d3d7d9f, 0x7d3a7d5d, 0x7dbc7136, 0x7c427d3e, 0x7caa7cb2, 0x7caa7cb2, 0x7c767c8b,
0x7c8f7cbc, 0x7c1f7d6c, 0x7c907c93, 0x7e907c93, 0x7d3d7d9f, 0x7d3a7d5d, 0x7dbc7136, 0x7c427d3e,
0x7caa7cb2, 0x7caa7cb2, 0x7c767c8b, 0x7c8f7cbc, 0x7c1f7d6c, 0x7c907c93, 0x7e907c93, 0x7d3d7d9f,
0x7d3a7d5d, 0x7dbc7136, 0x7c427d3e, 0x7caa7cb2, 0x7caa7cb2, 0x7c767c8b, 0x7c8f7cbc, 0x7c1f7d6c,
0x7c907c93, 0x7e907c93, 0x7d3d7d9f, 0x7d3a7d5d, 0x7dbc7136, 0x7c427d3e, 0x7caa7cb2, 0x7caa7cb2,
0x7c767c8b, 0x7c8f7cbc, 0x7c1f7d6c, 0x7c907c93, 0x7e907c93, 0x7d897e9f, 0x6a567d39, 0x723376bf,
0x7d497d53, 0x763a7d17, 0x7d127d33, 0x7d167d15, 0x7dbe7e39, 0x7d3e7d5d, 0x765d7d42, 0x6f0f7d42,
0x7d127db7, 0x7d157d4c, 0x7d337d16, 0x700e6b56, 0x6a367d12, 0x7d3f778c, 0x7d377d36, 0xf5bd7e16,
0xccad251c, 0x01804437, 0xacf8d91d, 0xf4f495a3, 0xc07183e4, 0x617c1459, 0x279d2e94, 0x697cc3b8,
0x6f05547d, 0x97227782, 0xe5248bd1, 0xb5ebbdcc, 0x82a1cb76, 0x64687a74, 0xce35c18b, 0xe8905e50,
0xafffd2ce, 0x3612af4c, 0xf4bc0fcd, 0x64856fff, 0xead50cc7, 0x5066ed91, 0x7b0f0acf, 0x10cbc0d4,
0xa958c6fc, 0xe4707008, 0xd312636a, 0xd40c3361, 0xaf06d42d, 0x3f6808d2, 0xce796be4, 0x8b709456,
0xfae59248, 0xb6dddb98, 0xb7f56869, 0x14b68dbd, 0x5e5bd9ac, 0xdc8cd143, 0x41846e8e, 0xbf86a321,
0x18b857b3, 0x4db38b85, 0x53a083cc, 0x51336b61, 0x862243e1, 0xe047fbe1, 0xcdd48d79, 0xae3ab3be,
0x6524ddbb, 0xe64899da, 0x0367c27d, 0xdfa3b943, 0xf09ce1e4, 0x1b0f23cd, 0x25ff6afe, 0x82ea0625,
0xc011def6, 0x17600b48, 0xd3dd0e93, 0x548ddf45, 0x4fee40df, 0x3c26652e, 0xe99396f2, 0xa7dd4872,
0xb4a6ecaa, 0xa6da9022, 0xf6d10dd3, 0x2ef86186, 0x46c02be3, 0x9db7d8cf, 0xf410cc59, 0xf1c55546,
0xc7c9c416, 0x527dc4e1, 0x202ba1ea, 0x59d6de93, 0x2ea2c560, 0x138c7c6a, 0x1f8b369c, 0xf1d3f1e8,
0xee767328, 0x989440fe, 0x6ec3d8c5, 0xab83f151, 0xe41110ad, 0x33d88275, 0x9ed82668, 0xe6238d3e,
0xf4e9b036, 0xdfcf1a1c, 0x596aadbb, 0xb75bb192, 0x9b37c762, 0x78cd0322, 0xc0d8acd1, 0xa76d8757,
0xa71a0d57, 0xfe4c50cc, 0xd82f44cf, 0x8ea223e6, 0x73e8e602, 0x4f074710, 0x0f9715c9, 0x4b513841,
0x8c9b590a, 0xb22811da, 0x1bcb3180, 0xebbaf518, 0x8ab58fbb, 0x0c8effb7, 0x16fed8ab, 0x62f3f635,
0x966c212c, 0x2ae9a4cc, 0x42a4b17b, 0xe56fc4ad, 0xa7dca536, 0xc2e8597e, 0x07a05b93, 0x29ab3356,
0x24864a83, 0x7bffbc18, 0xd58fbd55, 0x2e8dd69c, 0xc145444c, 0x31840086, 0xc2cd2b55, 0x0bd3cb87,
0x01d4e666, 0xfc0d9c8c, 0x4af78c64, 0x0498df30, 0xf696e76e, 0xb1f13dad, 0x51824703, 0x9caeda64,
0xe3258725, 0xfc59f066, 0x838680e5, 0x36928f25, 0x16a1e088, 0x58a4be3f, 0x3e16541a, 0x9d9ca177,
0x6dcb242b, 0x786d809b, 0xcd736875, 0xaaea1072, 0x97604118, 0x3a14f5df, 0xfd0eb775, 0xfc68a624,
0xfe80b891, 0x177a10e1, 0xb221bc1a, 0x22a87b49, 0x6e0fd8b3, 0x9471faa0, 0xdc781156, 0xd1d955bb,
0xf06be41d, 0xae5f61d8, 0x3a4de399, 0x8ec113cb, 0xcd131c8a, 0x516825cf, 0xa7242dc1, 0xb27336c9,
0x7bdf287d, 0x3eb6d0ca, 0x1361ef6e, 0xd9298871, 0xd02c758e, 0x06123a76, 0xe6f7c422, 0x71e7d097,
0xc05bbc9e, 0xf2472301, 0x1d84add8, 0x2abbb422, 0x00c6f197, 0xc6a2948d, 0x0ec6b993, 0x49bfa4dc,
0x601a1b59, 0xa302e36f, 0xe107a92f, 0x9442e001, 0x518d0fad, 0x60ba8fb3, 0x7de05d29, 0x660220a6,
0x2305e532, 0xd4193ca6, 0x9669c8e2, 0x99844e6d, 0xa523f6d0, 0x3d768288, 0xff84aaa6, 0xdbb65d74,
0xd22caba8, 0x86e51c5f, 0x9ce3cba3, 0xa031be31, 0xc7eb8c81, 0x732e2e54, 0x1bd70a36, 0xabb9e07c,
0x1f6026ea, 0xf56c5ed4, 0x515d305d, 0xd2688e75, 0xf272f3e9, 0x5669847f, 0xd77f90c4, 0xc1655cb5,
0x981cff0e, 0xca2172e9, 0x80e68137, 0x04c28018, 0x17a1f61e, 0x5305dc98, 0x120b8ca4, 0xc8966d81,
0x48b88869, 0x99e34b6c, 0xcd813746, 0xa2c59dfd, 0xac8dcf74, 0x03debe30, 0x95788a09, 0xe5fc2c69,
0x76b5cf3d, 0x618c56e9, 0xda92dff8, 0xd961919d, 0x4806e3a8, 0x0ed09bff, 0xaced410e, 0x6878b0f9,
0x55d2a073, 0x5fe3eaa9, 0x86840ba7, 0x5106fa6e, 0xb90b8455, 0x470d632b, 0xc83fd88f, 0xd0a4fa65,
0x834c7227, 0x7d1a0d61, 0x9aa6746d, 0xdb0d9da5, 0x70c42d80, 0x99778095, 0x0a7e9b9e, 0x4619b7ce,
0x0b99295b, 0xbc912d1f, 0x4c397dcc, 0xf96b7ed0, 0x1096976d, 0xb1a978dc, 0x3b664a8f, 0x1edb01c1,
0x655cd150, 0xde516adf, 0x3da50d73, 0xd4018fe9, 0xe393b949, 0xb5bc6e0b, 0x575eca9e, 0x598a1ef6,
0xf2166833, 0x20224959, 0x4aff9f0d, 0x44ae2727, 0x34f63270, 0xf6b600d5, 0xfebdbf67, 0xa62f3e23,
0xd0ef945a, 0x6875d000, 0x4f1c9d74, 0x4c3b62fd, 0x076c9136, 0x73b7186e, 0x52bf8a6b, 0xded440a7,
0x9dd0e71c, 0x4c6a8036, 0x01c87ce8, 0x6a5c80cc, 0xff858cef, 0xd64bcfe4, 0x2d24b76f, 0xd36c6bd1,
0x9c4ca179, 0x8cdac4b6, 0x003ff1ea, 0xddc5b34c, 0x15d64b1a, 0xf5fa141f, 0x5812bf1f, 0x9bd50759,
0xc220bc8c, 0x934eb6f5, 0x6cd508e6, 0xc862d424, 0xc35b9d50, 0x538a1855, 0x871d4354, 0x2f6d55a3,
0xadcbf11f, 0xfba75a6c, 0x0d9d2bf1, 0x414f7db8, 0x3e7cc157, 0x9dba44fa, 0xd9d556e4, 0x7c7b0191,
0xa9f120f4, 0x56c2e1a7, 0xda660052, 0xc57e3127, 0x761f1df3, 0xfeb92f5b, 0x59b933d0, 0x5431e7af,
0x2a661b4d, 0x774d66b3, 0x74186a34, 0xc2e28dfb, 0xd99758e0, 0x5d4e8d31, 0x00ac0104, 0x7b404a77,
0xa5b9dbe6, 0x485d01d8, 0x78daf586, 0x8debafeb, 0x30ced20c, 0x0a2d79f2, 0x809695ac, 0x1cc31d1c,
0x79a647a8, 0x61a4c9ba, 0x41101d1d, 0xbae0aeaa, 0x5fed997a, 0x4688d100, 0x8cc6fe5c, 0xa0c23dc1,
0xdf13f396, 0x1942ee68, 0x953587fe, 0x89370d97, 0x85aba55d, 0xb87b9869, 0x2df88986, 0x6ec182e2,
0x0e232d62, 0xad503b2e, 0x5636c5a7, 0xd3a17cae, 0x426a9c64, 0x7a8e14b7, 0x5a14ad86, 0x96afc436,
0xfaa68137, 0x1b56f995, 0x3f7695c4, 0xb14d9592, 0xdc648fb9, 0x0bc7f21f, 0x8a2e4f76, 0x5619c3f5,
0x8047a43d, 0x0c76ed90, 0x0c4bf0ec, 0xb5d5f16a, 0xca043902, 0x2b16fc44, 0xda97feab, 0x97f3ed6d,
0x6cdcbcca, 0x423fc66f, 0x016e0ef3, 0xa0ed2304, 0xaaef9592, 0x9307f834, 0xe6cab837, 0xefb51bed,
0x7579964e, 0x3e09b1ed, 0x629ed018, 0xdc375c19, 0x1a765758, 0xaa132aa7, 0x37efa297, 0x9d8a54fd,
0x8b2d6de4, 0xfdaf5803, 0x4c7f84f7, 0x4f51e520, 0x25c791ed, 0xb4ae3f55, 0x30eb21a6, 0x10218782,
0xa1f328a6, 0x26600064, 0xf8222315, 0xa09386cd, 0x2c39af68, 0x8b09139e, 0x30ce56a6, 0x6112544c,
0xff62eaa6, 0x8f7d06b2, 0xdb4815b8, 0x0b868340, 0x1231da0b, 0x9bd1ebd1, 0x54840c1b, 0x248e42e9,
0xdbcd1327, 0x379e4966, 0xe9586a5d, 0xfb090b72, 0xf252c604, 0xdd9f0af7, 0x22a5fc71, 0x2db6d821,
0xebc4ddd4, 0x4a8d21e9, 0xbef971c2, 0x99797b4a, 0xd7d918bf, 0xe0272f88, 0x908488c2, 0xe6a697aa,
0x09f15f95, 0x21ead25e, 0x257f333e, 0x773219eb, 0xb4ee8710, 0x1388b5d4, 0x7df20323, 0x6ae56ce3,
0xc5ba6c40, 0x8e544d26, 0x926598c1, 0x1668a8b4, 0x6b67d1fc, 0x11e2e018, 0xb3fce656, 0xdde6f22a,
0x52469404, 0x2536ee5c, 0x2868e1ff, 0x5f4ce971, 0x47c4a8af, 0xefbbb6cf, 0xecd91b07, 0x929aad88,
0xe35010fd, 0xdf660e0a, 0x346c0adf, 0x2c0e0695, 0xd142aec4, 0x0007122f, 0xcb1db521, 0xf5dbcfa3,
0x1986d784, 0xa6590191, 0x8004d00b, 0x3cb5d898, 0x109b6212, 0x82b90029, 0xae090378, 0x2fa37649,
0xec0c9ede, 0x4eea87c2, 0x127e1796, 0x11c75395, 0x63f6685b, 0xa0add61c, 0xf3189340, 0x66533a49,
0xd548747a, 0x97f58fa9, 0xdc5581ef, 0xa7c8d34a, 0x9590eb0d, 0xee2a68c1, 0x21f39b12, 0x1d9ab21a,
0x0549c2c4, 0xac426ebf, 0x3b5eedf1, 0xa313c69a, 0x72e8f693, 0x4177233f, 0x6c6d41ca, 0xeda75e23,
0x9cc72f26, 0xf7b32b24, 0x791a1535, 0xd9b3046b, 0xed381a83, 0x96c212f6, 0x3298d4fc, 0xb2006d03,
0x236da0b4, 0x0d15b5fc, 0xcbc90ebc, 0xca6dff19, 0x28d410de, 0x0729bb85, 0x81ae90fb, 0x8f58f849,
0x93fca36d, 0x1b03aa91, 0x5524aab6, 0x1fb32602, 0xedcc6b65, 0xea4521f6, 0x8f98dd84, 0xe84fc42b,
0x1cf33210, 0x8f15111b, 0xa2537850, 0xaf5267dd, 0x87717c41, 0x111ab1af, 0x11fa5e31, 0x39f083e0,
0xf0ddf573, 0x523d6e0e, 0xfc16b1e0, 0x80139739, 0x7a285147, 0xfcc98900, 0xf6a57404, 0x5cc492c8,
0x18724e8b, 0xf799c3ca, 0xabebcb28, 0x8d8dbba8, 0x37c8a37d, 0x54de2b79, 0x9ac4abc2, 0xa40c3bb0,
0x09c5de57, 0xbf842d0b, 0xcfdc79aa, 0x9542c1b3, 0x4ca1174d, 0x6f611ce3, 0x76b07b17, 0x25bc42d2,
0xb9149fd7, 0x9506b278, 0xf5a249d0, 0x6e4ec763, 0x9f41fd64, 0x9e985bf4, 0x5b7b885c, 0x0b1b6a90,
0x445cb520, 0xe2ff9975, 0x294c23b1, 0x1abbd21a, 0xe461e3d8, 0x7274020d, 0x69b7e2e7, 0x2ef3614d,
0x7743c977, 0xcbcfd022, 0x9ecaae13, 0x5b0f9715, 0xa09791eb, 0x153fc68d, 0x0eb044b9, 0x7588ff16,
};
}
internal class ImoutoStyleCrypt : CxEncryption
{
public ImoutoStyleCrypt () : base (0x278, 0xd7)
{
PrologOrder = new byte[] { 2, 1, 0 };
OddBranchOrder = new byte[] { 1, 2, 4, 0, 5, 3 };
EvenBranchOrder = new byte[] { 7, 5, 1, 3, 6, 4, 2, 0 };
}
protected override uint[] ControlBlock { get { return ImoutoControlBlock; } }
static readonly uint[] ImoutoControlBlock = new uint[] {
0x9c91badf, 0x8b8f868d, 0xdf919096, 0x8b91909c, 0xdf93908d, 0x9c90939d, 0xd2d2df94, 0x9e8bacdf,
0x9e9c968b, 0xdf869393, 0x9bdf8d90, 0x929e9186, 0x939e9c96, 0xdfd38693, 0x9a8d969b, 0x86938b9c,
0xdf8d90df, 0x969b9196, 0x8b9c9a8d, 0xdfd38693, 0x91968c8a, 0x978bdf98, 0x8fdf8c96, 0x8d98908d,
0x9edf929e, 0x90d09b91, 0x939ddf8d, 0xdf949c90, 0x92908d99, 0x978b90df, 0x8fdf8d9a, 0x8d98908d,
0xdf8c929e, 0x93939688, 0xdf9a9ddf, 0x9a939396, 0xdf939e98, 0x8bdf869d, 0x93df9a97, 0x919a9c96,
0x9edf9a8c, 0x9a9a8d98, 0x8b919a92, 0x4e7ddfd1, 0x897c337d, 0xb07c727c, 0x7f7c767c, 0x8a7c1d7d,
0x9d7c727c, 0x0f7db17c, 0x3c6fbe7e, 0x3a7db66c, 0x157d5f7d, 0xb66c516c, 0x5f7d3a7d, 0xbe7e157d,
0x256f436d, 0x3a7db66c, 0x157d5f7d, 0x256f2b75, 0x3a7db66c, 0x157d5f7d, 0x436ebe7e, 0x897c337d,
0xb07c727c, 0x7f7c767c, 0x187d567d, 0x5d7d8f68, 0x4e7d167d, 0x327d397d, 0xbc7c767c, 0x6c7ca57c,
0x367da77c, 0x177d197d, 0x497d2974, 0x157d187d, 0x5d7d3b7d, 0x487d237d, 0x7ef5bd7e, 0x69d6bc96,
0x7ca77c7a, 0x7cbc7ca1, 0x72586f74, 0x77307713, 0xdf10760a, 0xcececfcd, 0x4473f5f5, 0x056c1c6e,
0xbe7e8469, 0x916da169, 0x8c6c046a, 0xbd7e8c71, 0x727e72f5, 0x7d39761d, 0x7dbe7e32, 0x7da57357,
0x7d1e7d40, 0xca397d0e, 0x337d936f, 0x557d7a69, 0x217da570, 0x39761a6e, 0xbd7e4f6e, 0x5f7df5f5,
0x056c167d, 0xbc75be7e, 0x3a7db075, 0x69719b71, 0x487d0f7d, 0x4368167d, 0x567d9a6f, 0xbe7e187d,
0x0e7d377d, 0xb67e397d, 0x73577df5, 0x7d407da5, 0x770e7d1e, 0x7db07537, 0x77ac6e32, 0x75bc750a,
0x77367db0, 0x7da57025, 0x7d377d4a, 0x7e5d7d4c, 0x397df5b6, 0x577d337d, 0x4a7dbd6d, 0x547d557d,
0x337d427d, 0xbd7e417d, 0x346cf5f5, 0x337dad6e, 0x85760777, 0x166f4a7d, 0x367d4173, 0x1d727e72,
0x327d3976, 0x646e1a6e, 0x367d537d, 0xf5f5bd7e, 0xa573577d, 0x1e7d407d, 0x337d0e7d, 0x50689c71,
0x7edf327d, 0x7d956d8a, 0x774a7d41, 0x6a936f15, 0x7d187d16, 0x7d4a7d4a, 0x7d1f7d3b, 0x725d7d5d,
0x7d78725f, 0x7d417d5d, 0x7e187d56, 0x417ddf89, 0x5b7d447d, 0xa37e3a7d, 0xf5f5a37e, 0x557d417d,
0x4e7dbe7e, 0x367d157d, 0x3e7d5d72, 0x337d427d, 0x6fca327d, 0x69337d93, 0x7d427d7a, 0xf5bd7e40,
0x7d7a69f5, 0x7d407d42, 0x77ac6e32, 0xf5be7e0a, 0xa573577d, 0x1e7d407d, 0x557d0e7d, 0x417dbe7e,
0x417d5d7d, 0x417d5d7d, 0xa47ea47e, 0x5d7da47e, 0x547d487d, 0x7df5667e, 0x7d3e7d41, 0x7d567d42,
0x7d3a7d18, 0xf5bd7e48, 0x73577df5, 0x7d407da5, 0x7d0e7d1e, 0x69056c0f, 0x7d367d84, 0x7d397d2f,
0x7d9c7117, 0x7d3b7d4a, 0x7d527d57, 0x7d507d12, 0x7d327d36, 0x7d567d5d, 0x7e5d7d37, 0x7b71f5be,
0x9c711f7d, 0xb67e167d, 0x7d5f7df5, 0x7d4a7d42, 0x7d9c7155, 0x7e337d16, 0x397df5b6, 0x7d936fca,
0x7d7a6933, 0x7e127d55, 0x7e127da4, 0x7d547da4, 0x7da47e1e, 0x7e1e7d54, 0x6e337da4, 0x7d646e1a,
0xf5bd7e53, 0x7d487df5, 0x7d427d3e, 0x7d0e7d1f, 0x7d337d41, 0x7e597d48, 0x577df5be, 0x407da573,
0x0e7d1e7d, 0x577d337d, 0x9d675d6f, 0x397da873, 0x3b7d4a7d, 0x397d2f7d, 0x417d177d, 0x056c507d,
0x367d8469, 0x3e7d9c71, 0x1f7d3b7d, 0x5d7d5d7d, 0x397d4e7d, 0xb67e367d, 0x447df5f5, 0x3b7d4a7d,
0xb16dbe7e, 0x9c71557d, 0x337d167d, 0xb77e567d, 0x7d387df5, 0x7d7a6933, 0x7d9c7155, 0x7e567d16,
0x327df5b7, 0x577dbe7e, 0x407da573, 0x0e7d1e7d, 0x7773557d, 0x167d207d, 0x397d4e7d, 0xbd7e367d,
0x327df5f5, 0x4a7d427d, 0x9c713b7d, 0x427d3e7d, 0x397d7a69, 0xa573577d, 0x1e7d407d, 0x337d0e7d,
0xa8732975, 0x5d7d327d, 0x427d3e7d, 0x387d5d7d, 0x377d5b7d, 0x337d167d, 0x4a7d3a7d, 0x5b7d1a7d,
0xb77e567d, 0x917cf5f5, 0x987ca47e, 0x747c8b7c, 0x977cba7e, 0x907ca17c, 0xba7ea17c, 0x767c7a69,
0x667e8a7c, 0x987ca77c, 0x757ca47e, 0x337da47e, 0x7469b575, 0x487d3a7d, 0xf5f5b67e, 0x9c7e9c7e,
0x3e7d5f7d, 0x8168be7e, 0x177d5c6d, 0x577d377d, 0x407da573, 0x0e7d1e7d, 0x61691f7d, 0x337d546e,
0xa47e917c, 0x7f7c737c, 0xa47e747c, 0x1f7d987c, 0x167d5f7d, 0x187d567d, 0xb67e347d, 0xbdbc72f5,
0x45cebcd0, 0xbbd86f7c, 0x0c89acb3, 0x719234f9, 0x500456ec, 0xbf9c5033, 0xc5cdeb7c, 0x57776569,
0x15759c7e, 0xce764abc, 0xb08f0f38, 0x02fd9979, 0x01c1c1d8, 0xb3a0450c, 0x3ad2e0ad, 0xf282a28b,
0x9d4da002, 0x45f7fdc1, 0xa6ac2c9a, 0x8daf7a97, 0xffa843df, 0x0c2a8f16, 0x271c25e9, 0x22164799,
0xa92332a7, 0xdeef4be3, 0x28e596a8, 0xe42833b1, 0x87e9d493, 0x3727307e, 0xc4360c52, 0x141a1c55,
0xb2eebdf8, 0x989f9528, 0x2ebfdb1c, 0x72641c8f, 0x0e362bc2, 0x4fae1791, 0xc8ab8f0e, 0x8fa115ee,
0xada212d8, 0xdac32301, 0xec18485d, 0xbc8ce6f5, 0x79962be5, 0x69814c94, 0x96efead6, 0x69e8e3be,
0x3a6e7485, 0xead7bf5b, 0x04ea533e, 0x887470a5, 0x552f91b3, 0x975f44cc, 0x7ad282d4, 0xf6d9b38c,
0xe76f1cfd, 0xf5706c21, 0xefeccf0e, 0x849dd4c9, 0xade2474f, 0x1b45f369, 0x7e21976e, 0xa10c9eca,
0x2d5d85f7, 0x6accdbd8, 0x65d2bb19, 0x8c325bbc, 0xb90ef4f4, 0xcc18b595, 0x19649633, 0x8341d8d7,
0x2f195257, 0xa0ed9621, 0x1d7953c5, 0xf7daa4c1, 0x9bbcea5f, 0x30aed22a, 0x9c91a871, 0xb368800c,
0x1016536e, 0x9cb72499, 0xe46d7de4, 0x977ccf49, 0xb1f2a544, 0x4c4493d8, 0x950972b2, 0x7169b541,
0x9ceec5b7, 0xde848c5a, 0x85e34c07, 0x6f184730, 0xc8a2e2c6, 0x1c072811, 0xdee6885a, 0x1c6c7fb8,
0x8b597fe9, 0x9412a96a, 0x0b0f42e8, 0x6557e34e, 0x861905b3, 0x4c0c2dff, 0xad4462f9, 0x8ab4d260,
0x537b147a, 0xd35f0ac9, 0xd85f457d, 0xa62616f9, 0xfda1d245, 0xf028be7b, 0x9317fd1e, 0x242d9f12,
0xd532263a, 0x7296f576, 0xbce041fb, 0xf354bc22, 0x7cbf3560, 0xddda6048, 0x9fbebcc0, 0x6b034357,
0x9c5d00d3, 0xb1792e0b, 0x42f68570, 0xa9a6b353, 0x0e67dad9, 0x023c04d5, 0x8b187287, 0xf94b051e,
0xb332cc2e, 0xfb8c65bb, 0xe40553c7, 0x36c6bf95, 0x7a74e52c, 0xe5a6497d, 0xfb5c9bff, 0xabd7abd8,
0xcdd35cf0, 0x6b4ab439, 0x43ab6526, 0x019bc4ee, 0xf332b913, 0xa06c7649, 0x52af60ba, 0x1477e66f,
0xbee3c1e7, 0x825fe633, 0x81f3b272, 0x8e3c104d, 0x0956e686, 0xc58c13ab, 0xae01266f, 0x87d551b9,
0xfe2ab79f, 0x039d6ac1, 0xeaa3ddb8, 0x8ad73c9f, 0x3401d424, 0x0132d093, 0x1932ff32, 0x713585ba,
0x0b73d762, 0x1988732a, 0x3480e775, 0x23d9e24c, 0xad41997d, 0x2f838c6c, 0x7876d7d4, 0x5a1b885e,
0xd5c0e254, 0x9cccdb9e, 0xd42778cd, 0xafaaf2db, 0xe61008ca, 0xa566900e, 0x9e8648e4, 0x58047ac1,
0xd0322bf3, 0x92112b4b, 0x2bd479a5, 0xf05f0c69, 0x3f22edb2, 0x665990fe, 0x98507599, 0x7e1ce769,
0x49c33e7b, 0x6a3e565b, 0xf37bfd1c, 0x6838ba13, 0x71ac8605, 0x5f854028, 0xafb1c299, 0xf738570a,
0xe76c4166, 0xd1d5bb14, 0xd411c2ae, 0x8120f274, 0xa4892784, 0x3d543dab, 0x6af3ab34, 0x9d2a1040,
0x1fe14b56, 0x5e8036d6, 0xb334c47e, 0x527f288e, 0x3bc560e5, 0x1448108c, 0x3c4a1978, 0xc6810326,
0x24c0e9dd, 0x57ac0eff, 0xaeaf2bb4, 0x21fc89e2, 0xd49383e3, 0x278f3ecf, 0xf1d7f02e, 0xf4e87a53,
0x81659a34, 0xfc2a7769, 0x22f947db, 0x18d6f29e, 0x7bd778cc, 0x34e63b74, 0x4327837b, 0x43b23f4a,
0x2faaf555, 0x080f21d8, 0xd883ab31, 0x28f7e548, 0x961e15de, 0x27b56217, 0xa9313edf, 0x4c75e7ba,
0x9441cc74, 0xe617288f, 0xf2fe905a, 0xa58a2a26, 0xc770ac96, 0x057c8dee, 0x042bca16, 0x35ad73bb,
0xbefb0221, 0x989b124b, 0x0183dcfb, 0x93a22db8, 0x7e964b97, 0xff7d84ad, 0x61468d1c, 0x41c58016,
0xbd6022c7, 0xcfafe4e6, 0xd04c6664, 0x71c039ac, 0x08bf2e43, 0x4672f5d3, 0xcc5d8794, 0x4a1345fc,
0xc9fd140f, 0xb8678dd4, 0x1867e8bd, 0x6c4ec398, 0x878ab83a, 0x02c2900e, 0xf97cf590, 0x6c5a671b,
0x8681ecdc, 0x2bfd1a87, 0xbb65a1ee, 0xcbf781c2, 0xa2013ff6, 0x8c026ee2, 0x8ad5524c, 0xfa46551f,
0xd5507bbf, 0x6a5d00ee, 0x1a60b69b, 0x4edeceda, 0x25992ecc, 0x236fc615, 0x8fcab1c1, 0x084380cf,
0xd3723c02, 0xfa1bb4e0, 0x41703b91, 0xc884373d, 0x4db4af4c, 0x4876b7d6, 0x3e6663a5, 0xc3372d5a,
0x8af05730, 0x43f96565, 0x280870dd, 0x258300b2, 0x0f1ff948, 0xe5addfbe, 0xd133f857, 0xf2b45133,
0xddbfe3ab, 0xe0e3706d, 0x3235bd77, 0xe9b6effe, 0x1fe4ef36, 0x8fd89928, 0x27279626, 0xeb799df0,
0x1e2d5bb4, 0x64415ae5, 0xefc24d6e, 0xda6fb0e3, 0x1c8a4ece, 0x8ab56b95, 0x0e91d30a, 0x02ef3eea,
0xd9073f45, 0x113c6ab7, 0x6c77bf54, 0xa52f90bd, 0x01f280b4, 0x83c1b5f7, 0x423d4069, 0x22adcd65,
0x58537598, 0x91930d6a, 0xdff6a6b3, 0x287243d2, 0x33e92ca2, 0xe593d4e6, 0x2636aad3, 0x64f5fe3c,
0x4f875310, 0xceb3e06c, 0xedcdab02, 0xb872fd7a, 0xd7baa454, 0x866ba43c, 0x9e6e8bc5, 0xdf04f14b,
0x5081a7fe, 0x1cc6eaef, 0xf657b595, 0x29012cf3, 0x4a58e4ff, 0x694dd93c, 0xb74938e8, 0xd457436a,
0x560eafdc, 0x2ce09ec8, 0x465de8e9, 0x7ca0ec1b, 0xd93829c7, 0xbca12446, 0x6b60b1a0, 0x9f027d58,
0x9ab391e3, 0x9853ec40, 0x527e834a, 0x198c317a, 0xf985d777, 0x988fb533, 0xefcf3410, 0x9ac81387,
0x93f87488, 0x3b1eb146, 0x12dbb1b0, 0xab1cef83, 0x9e8c014c, 0x56eb135d, 0x35097903, 0x2aa776d0,
0xefba659b, 0xd8576489, 0xa44e176c, 0xf5d417a8, 0x66f0a62b, 0xb7a4f687, 0x1d6f27b4, 0xd30983b9,
0xcdc46346, 0x605567a2, 0x944f9b8e, 0xd3456f55, 0x0d542ee5, 0xa8e34d20, 0x5fdefe07, 0x2fc58135,
0x26e09472, 0xbe691ac6, 0x5aafcbe2, 0x322d4063, 0x77148178, 0x15d30784, 0x21de79cd, 0x999c36b1,
0xdd31ccc4, 0x5c9019a7, 0x98be930e, 0xfb604ed7, 0x0bfcef1f, 0x9544feba, 0x45a65682, 0x240e539b,
0x13451d89, 0xcdf37d73, 0xf1548863, 0xb075b59f, 0x554038cf, 0x28372884, 0x68136660, 0xa51373f7,
0xd87941d0, 0xc3694841, 0x2ecbff33, 0x807c415a, 0xd10347ab, 0x0ed7e4e5, 0x16363adc, 0x89d33036,
0x6016a160, 0x19f19a5a, 0x8956c6b7, 0x1731780f, 0xb4212ec0, 0x72fa92b6, 0x33c32348, 0x56d08e8a,
0xe4be93dd, 0x2739fe6d, 0x2541e828, 0x4daedcc3, 0x7376c3c8, 0xd9f44afe, 0x9272061d, 0x23f7aeca,
0x429152c7, 0xc2697d28, 0x51179d67, 0x62735ef7, 0x6d37d2eb, 0xb55655c3, 0xbfb33ada, 0x02839c8f,
0x49ea2059, 0x6be959b5, 0xda6278b4, 0x5a538796, 0x5c8497f8, 0x36499ff2, 0x85620f5e, 0xa11be0dc,
0xb113a10d, 0x0d398359, 0x3802b809, 0x1e8b4d3a, 0xe67de6af, 0xc3235a27, 0x1bc9930d, 0xd740c0cd,
0x5e3e6b85, 0xd2054645, 0x4d44571e, 0x4532a3e6, 0xeee9d279, 0x87fbde6b, 0x609c8075, 0x7b21adfd,
0x320b8d52, 0xccb86869, 0xbbc67e56, 0x138cb7cd, 0x94422afb, 0xc2cdb1bf, 0x35fbeafd, 0x0f98f183,
0xb985532f, 0xbea5b0da, 0x8d8ffe7f, 0x37d8e708, 0x6325d619, 0x510745a4, 0xa275914a, 0xaf7bd793,
0xed263795, 0x93dfbc22, 0x7a7f9995, 0x1d1665b2, 0x90b2fde0, 0x20fe2705, 0x4e80f43e, 0x745ca349,
0x019e0c38, 0x532456ef, 0xb876f67e, 0x9b2a66de, 0x5043034b, 0x16c5507b, 0x09d1bb96, 0x0439f550,
0x18a1d128, 0x824a0731, 0x258fc0ce, 0x36ec993f, 0x80cf64fe, 0x356c8638, 0xa39bbbb9, 0x22ffeac0,
0x7d39c4d0, 0x32e95341, 0x8d0187d3, 0x6c99079f, 0xec240adc, 0xa9af8c5a, 0x94b8065e, 0x28009b4a,
0xfa5b4c58, 0x8f12a9e1, 0xa95ecd98, 0xe9603646, 0xcc12dc04, 0x50f5fd0f, 0xc334d966, 0x32d07ccd,
0x8300fca5, 0x6001e499, 0x5b838ad5, 0xf5562cca, 0x30232d6f, 0xed01a56f, 0xd1409b8d, 0x137efc62,
0xabc2a7c7, 0xab208ec1, 0x841ef72d, 0xd152c5ec, 0xe81bb7f3, 0x850187aa, 0x9c40f47d, 0x5ff50c62,
0x2b724688, 0x2e8557e4, 0xb135f8ed, 0x4fa38d46, 0x0f3eb921, 0x847159f2, 0xefbeb40a, 0x4339f17f,
0xbf8483f2, 0x6770b2d8, 0x576acb52, 0xda464833, 0x9d295648, 0x86ba73f3, 0xbe44d7c4, 0x868c2115,
0x9aecc2ea, 0x3fce381f, 0x5d4bdac2, 0x7863bbf7, 0x6395a2e2, 0x209c7342, 0x7d9718fb, 0x7f2f4b02,
0x6edc122d, 0x7a39b294, 0xd0a34d11, 0x6d4d9472, 0xb1775b56, 0x66099ca5, 0xc898dba5, 0xff094e89,
0x49eee138, 0xc74554d4, 0xbebb78bd, 0x68069f7f, 0xd143e934, 0x16ea614a, 0x5b03b028, 0x7433b06e,
0x112ac5c4, 0x93c63bb1, 0xddb35880, 0x45398ff9, 0x8a14734a, 0x09e8208e, 0x18109716, 0xf73db871,
0xad841334, 0xb77606af, 0x539aaa53, 0x5b3f9aa2, 0x81b7cd23, 0x4795a0b6, 0xe534763a, 0x1d76556b,
0x7c5c9a58, 0xb7003bec, 0xfd4c55d8, 0x7d9bac3c, 0xb11ef2f5, 0xd17229b8, 0x4e20b59f, 0x274aa421,
0x5cfd682d, 0x13794dee, 0xaa0feb1e, 0xab4e6384, 0x67ef1f62, 0x25686df1, 0x4c0222aa, 0x744c2e19,
0x561f35e9, 0xf8e22c4c, 0x4f863ce0, 0x4f15b253, 0x2bf4b937, 0xf09e873e, 0x96627d1a, 0x5b51e77e,
0x10e61481, 0xfd28b58a, 0xe34fc314, 0x12160d1b, 0xddf8d02f, 0xc56b1376, 0xce64ae6c, 0x4295c0ed,
0x58b1c5c7, 0xf7f5adc3, 0x03c5a5a0, 0x8769e34d, 0x4e01b5b0, 0x793a96dd, 0x4169c9db, 0xadc496aa,
0x7d5dc5e4, 0x286d5a0f, 0x6c307a00, 0x9e8a7f57, 0x8880e20b, 0x4938b163, 0x3acea0cb, 0x36f331ba,
0xf66f3c41, 0xfa626b07, 0x0541bb30, 0xb0b72590, 0x83542c3f, 0xd00c7261, 0x2d9b31dc, 0xb8a6d50b,
0x2a1e7c82, 0x8752abdc, 0x3498e8a6, 0xd7da1c7e, 0x5f451585, 0x13896231, 0x7e8623ec, 0x47c934a6,
0x38c898f7, 0xd265d1a8, 0x563fe6c7, 0x94f4fe90, 0xbf8bdb54, 0xd62f47a5, 0xfaeedc35, 0xb6076992,
0xfe7acb2b, 0x1c7012c9, 0xc82c8820, 0x18c81963, 0x6ac638cc, 0xc728e32e, 0x1931ef4b, 0x7287bf52,
0xc569fde8, 0x12f65cc0, 0x44c44e2e, 0x8d907180, 0xca04d47e, 0x404d63d6, 0x5499167d, 0x039a27d4,
0xb1cb5251, 0x0b231cd2, 0x5b536196, 0x4c350a6a, 0xee0eef22, 0x966f1225, 0x4b474c5b, 0x7fbfd5b3,
0xd3101a66, 0x0dcfa92b, 0x6de5ab3b, 0x974c54a3, 0x69ac86de, 0x1d1f241f, 0x8c5f359c, 0xf9a024f5,
0x784302e2, 0x86d17895, 0x17820cbd, 0x6e955717, 0xc27ea685, 0xd4084ab2, 0xe13c54e7, 0x9c131d1d,
0x284be1be, 0xa4bae6d4, 0x515ad718, 0x3cfc0b5e, 0x049005d4, 0xd580a4c9, 0x00a7540a, 0x431bb5a8,
0x5b8ccb1e, 0x0086d12b, 0xfecef3a1, 0x9899627d, 0xde70b335, 0xe41b39cf, 0xfc562045, 0xc2354b34,
};
}
internal class ComyuCrypt : CxEncryption
{
public ComyuCrypt () : base (0x1a3, 0xb6)
{
OddBranchOrder = new byte[] { 4, 3, 2, 1, 5, 0 };
EvenBranchOrder = new byte[] { 0, 7, 5, 6, 3, 1, 4, 2 };
}
protected override uint[] ControlBlock { get { return ComyuControlBlock; } }
static readonly uint[] ComyuControlBlock = new uint[] {
0x9c91badf, 0x8b8f868d, 0xdf919096, 0x8b91909c, 0xdf93908d, 0x9c90939d, 0xd2d2df94, 0x9e8bacdf,
0x9e9c968b, 0xdf869393, 0x9bdf8d90, 0x929e9186, 0x939e9c96, 0xdfd38693, 0x9a8d969b, 0x86938b9c,
0xdf8d90df, 0x969b9196, 0x8b9c9a8d, 0xdfd38693, 0x91968c8a, 0x978bdf98, 0x8fdf8c96, 0x8d98908d,
0x9edf929e, 0x90d09b91, 0x939ddf8d, 0xdf949c90, 0x92908d99, 0x978b90df, 0x8fdf8d9a, 0x8d98908d,
0xdf8c929e, 0x93939688, 0xdf9a9ddf, 0x9a939396, 0xdf939e98, 0x8bdf869d, 0x93df9a97, 0x919a9c96,
0x9edf9a8c, 0x9a9a8d98, 0x8b919a92, 0x4e7ddfd1, 0x897c337d, 0xb07c727c, 0x7f7c767c, 0x8a7c1d7d,
0x9d7c727c, 0x0f7db17c, 0x3c6fbe7e, 0x3a7db66c, 0x157d5f7d, 0xb66c516c, 0x5f7d3a7d, 0xbe7e157d,
0x256f436d, 0x3a7db66c, 0x157d5f7d, 0x256f2b75, 0x3a7db66c, 0x157d5f7d, 0x436ebe7e, 0x897c337d,
0xb07c727c, 0x7f7c767c, 0x187d567d, 0x5d7d8f68, 0x4e7d167d, 0x327d397d, 0xbc7c767c, 0x6c7ca57c,
0x367da77c, 0x177d197d, 0x497d2974, 0x157d187d, 0x5d7d3b7d, 0x487d237d, 0xbcf5bd7e, 0x8d868f90,
0x8b979896, 0xdfd6bcd7, 0xc6cfcfcd, 0xa83a74df, 0xacb4adb0, 0x93bedfd1, 0x968ddf93, 0x8c8b9798,
0x8c9a8ddf, 0x9a898d9a, 0xf5f5d19b, 0x4b768a7e, 0x407d427d, 0x9f7c327d, 0x7f7ca47e, 0xbd7e417d,
0x7dbf7ef5, 0x7d397d42, 0x73576959, 0x7d367d71, 0x7d326c32, 0x7d377d56, 0x6a2b755d, 0x7d3a7d40,
0xf5bd7e1f, 0x6768bf7e, 0x337dae75, 0x896d1577, 0x74733a7d, 0x3d7d2e7d, 0xbd7e527d, 0x76bf7ef5,
0x744269a1, 0x6e506c5b, 0x7d377d33, 0x6f357d18, 0x74496e49, 0x6e506c5b, 0x7ea37e33, 0x7ea37ea3,
0x72f5f589, 0x718e6e7d, 0x6ca96f8c, 0x7eac6f8c, 0x6973f5bd, 0x397d646e, 0xb67c937c, 0x337d6c7c,
0x3b655165, 0x5f7d3a7d, 0x1669167d, 0xa775337d, 0xbe7e367d, 0x3d7d1577, 0x9f6c337d, 0x557d1f6f,
0x3e7d5f7d, 0xbd7e427d, 0x447df5f5, 0x327d157d, 0x1669be7e, 0x397d4d7d, 0x5b7d3376, 0x337d4973,
0xaf6a3376, 0x5270987e, 0x7ebe6870, 0x6c337d97, 0x6c8c718c, 0x7e1f6f9f, 0x7df5f5bd, 0x76337d44,
0x7d4269a1, 0x7e166933, 0xf5a37ea3, 0x7d4a6cf5, 0x7d796d33, 0x7d447336, 0x7e167d15, 0x70527098,
0x977ebe68, 0x4e6c367d, 0x157d567d, 0x6ff5be7e, 0x714e6e25, 0x7d397d2d, 0x753b7d4a, 0x7d3e6f90,
0x6f427d4a, 0xdf9e676f, 0x936f3a74, 0xbe7e327d, 0x658f6bf5, 0x6d337d2f, 0x733a7d47, 0x7d926d56,
0x7e357d18, 0x69506c98, 0x7d977eba, 0x7d407d42, 0x76907039, 0x7e5b7d10, 0xf5f5f5bd, 0x786d8a7e,
0x497d2b75, 0x377d1e7d, 0x337d5d7d, 0x897eb77e, 0x836dbf7e, 0x72df3276, 0x7e707098, 0x6f987ea1,
0x7d9f744c, 0x6a5e6933, 0xf5977e04, 0x6c8a7ef5, 0x74547d99, 0x7d557dbc, 0x7d167d48, 0x6f387d26,
0x708b703d, 0x7e5d7db3, 0x68bf7e89, 0xdf2b76b2, 0x1e6fa16f, 0x987ea17e, 0x447d5b7d, 0x547d3d7d,
0xf5f5977e, 0x7e6e8a7e, 0xbe74527d, 0x427d177d, 0x197d5d7d, 0x597d347d, 0xbf7e897e, 0x056c8b70,
0x70df6b6a, 0x7ea17e8b, 0x7caa7498, 0x7cbc7c7e, 0xf5977e97, 0x7c8a7ef5, 0x6ca87c97, 0x7d227d5a,
0x7d557d1d, 0x7d427d3e, 0x7dba7118, 0x7e437d48, 0x77bf7e89, 0xdf0d6e36, 0xa17e746b, 0x9f7c987e,
0x8c7c6c7c, 0x977e767c, 0x70f5f5f5, 0x7d207d76, 0x7690703b, 0x7d3e7d10, 0x936fca42, 0x2b75337d,
0x327d367d, 0xb968be7e, 0x1f7d1170, 0xb26fbe7e, 0x1f7d7568, 0x4276be7e, 0x377d1f7d, 0xbd7e5d7d,
0x417df5f5, 0xbd7e557d, 0x6fcaf5f5, 0x6f337d93, 0x714e6e25, 0x7d567d2d, 0x7d377d18, 0x70987e16,
0x7e9c6da8, 0x7cad7c8c, 0x7e7a7c81, 0x7d977e8b, 0xf5be7e32, 0x0f7d3268, 0x127d7872, 0x167d467d,
0x397d4e7d, 0xbe7e3a7d, 0x1a6e6f74, 0x987e377d, 0x337d8372, 0x576a0976, 0xbe7c8c7e, 0xa17c907c,
0x8b7ea47e, 0x0f7d977e, 0x337d2c77, 0x237d237d, 0x7f6e367d, 0x4e7d167d, 0x557d397d, 0xa36b3d76,
0x377d367d, 0xbd7e167d, 0x4271f5f5, 0x337d6a72, 0x907cbe7c, 0xa47ea17c, 0x907c987e, 0x727c8d7c,
0x977e6c7c, 0x256f397d, 0x4c7d4e6e, 0xbe7e157d, 0x1a6e5274, 0x4c68377d, 0x3268337d, 0x17710f7d,
0x4a7d367d, 0x447d427d, 0x056c337d, 0x187d567d, 0x74f5be7e, 0x7d936f3a, 0x7d407d42, 0x7db06e33,
0x7db46936, 0x7e167d15, 0x7e8d72be, 0x7d4a7da7, 0x6c0e6b54, 0x7e127005, 0xf5f5f5bd, 0x0f7d4c68,
0x5b7da06e, 0x576a0976, 0x407d427d, 0x466fbe7e, 0x9271ad74, 0x7768337d, 0xbe7eb469, 0x4a7d447d,
0x9a6b3b7d, 0x337d5b76, 0x576fad73, 0xa37ea37e, 0x7df5f5f5, 0x7d157d44, 0x936fca32, 0xbe7e0f7d,
0x926d936f, 0x357d157d, 0xad7c987e, 0x7a7c817c, 0x5d6f337d, 0x8c7eba75, 0x817cad7c, 0x937c7a7c,
0x987c9d7c, 0x977e8b7e, 0x397d297d, 0x3e7daa68, 0xbd7e427d, 0x447df5f5, 0x3b7d4a7d, 0x936f3a74,
0x926d327d, 0xbd7e167d, 0x7d3268f5, 0x6e327d36, 0x7d61701c, 0x68b46a55, 0x7d417d89, 0x7e427d3e,
0x7cf5f5bd, 0x7c907cbe, 0x7da47ea1, 0x7d3a6955, 0x7d397d2b, 0xf5be7e54, 0x4e6e256f, 0x157d4c7d,
0x987e427d, 0x9c6da870, 0xad7c8c7e, 0x7a7c817c, 0x977e8b7e, 0x237d1f7d, 0xbe7e427d, 0x2b7d3a69,
0xf5f5bd7e, 0x7d447df5, 0x69a17633, 0x69337d42, 0x7ea37e16, 0xf5f5f5a3, 0x0f708c6a, 0x367d6268,
0x557d8e73, 0x427d157d, 0x936f3a74, 0xbe7e327d, 0x72987ef5, 0x69337d6a, 0x7e68707d, 0x6c1b6b97,
0xdfbb6f21, 0xac7cb57c, 0x337d7e7c, 0x0f7d3268, 0x177d2771, 0xbe7e3b7d, 0x7d237df5, 0x7d567341,
0x755d6f35, 0x68367dba, 0x73407d58, 0x7d567d03, 0xf5bd7e5b, 0x8a7ef5f5, 0x157d447d, 0x1f7d3a7d,
0x427d4b76, 0x327d407d, 0xa47e9f7c, 0x417d7f7c, 0x7ef5bd7e, 0x7d427dbf, 0x76597d39, 0x7d427d4b,
0x730f7d40, 0x7d517d8e, 0x7e557d33, 0x7d4e7dbe, 0x7d837233, 0x7d447633, 0x7d576a50, 0x7d507d41,
0x7d397d41, 0x7d3b7d4a, 0xf5897e1f, 0x466cf5f5, 0x397d4476, 0x68707d69, 0x6fcb397d, 0x6d337d93,
0x7e2b7578, 0x7cad7c8c, 0x7e7a7c81, 0x7e337d8b, 0x7d486dbe, 0x7d48685d, 0x7d917155, 0x7e167d23,
0xf5f5f5bd, 0x7ea37ef5, 0x7d4c7da3, 0x72be7e5f, 0x7d16695e, 0x7d577d33, 0x67537d39, 0x7d0f7d9d,
0x7d497d32, 0x7d197d20, 0x22c3f55b, 0x1fe1bca5, 0x296d327f, 0xbf4655bb, 0x271bfd84, 0x9dc9f775,
0x6a396019, 0xbb316b08, 0x7d4ccbf5, 0xef612dc2, 0x4e7cb1a1, 0xefc091a2, 0x0c4095b7, 0x4dcd0f8f,
0x09fe386e, 0x8f83fce6, 0xaf8b737b, 0x4db8803a, 0xc7d3e004, 0xedd446ee, 0xe18f337f, 0xb467401c,
0x11c025fa, 0x0ed6322f, 0x7f493793, 0xa2b52008, 0x35a038c4, 0x4a640e05, 0xe9b611d3, 0x26fa62ce,
0xcef2d932, 0xa2f2ba50, 0x2fcac91c, 0xbcd22555, 0xa02a089a, 0xacbc800e, 0x550f8e29, 0x62c73a93,
0x897f08c6, 0xf3799463, 0x6fd0cc73, 0xed4411f4, 0x7e2321fb, 0xaad6aec5, 0x036078b2, 0x25494cd5,
0xc2d3bfd1, 0xd5ea81fc, 0x0886894d, 0x6cff2667, 0x41fccddb, 0xd396d716, 0x2a9d5a09, 0xe638827b,
0xadf4635c, 0xc6003fef, 0x31454acc, 0xe1500dda, 0x46cf53d5, 0x750cd529, 0xfda3aa39, 0x4b7877a7,
0x53d05d5a, 0x01332627, 0x1dd10160, 0x9e609da4, 0xd6f5a7b6, 0x8b382dc0, 0x004d88b4, 0x545a4018,
0xba980aaa, 0xeea43a3d, 0xb91b3fe4, 0xa0965c99, 0x3731d8f0, 0xe8c0644a, 0x9e72955e, 0xab59a0e7,
0x6b23cb98, 0x1fe4fad6, 0xa37f3f8e, 0x2214b7cb, 0x9c621ea9, 0x8d89f543, 0xe0d49701, 0xb9ac412a,
0x403925dd, 0xe42d1546, 0xcf873ac1, 0x0aa7dae5, 0x21e332aa, 0x39378fd4, 0xbae1f8d7, 0xe2498f35,
0x16c9c11c, 0xb8a652f7, 0x2fa5130b, 0x1a0a5cbf, 0x608d77c0, 0xd313f4bd, 0x9df44553, 0xf8005ec4,
0xc8816b32, 0x41a1f393, 0xb44a9a77, 0x402201bd, 0xe0a33bf0, 0xf05a98fe, 0xe59490e9, 0x34fc3083,
0x057cf4ff, 0x63afcc41, 0xa6e5db4c, 0xa6c33972, 0x109409ab, 0x63ed6914, 0x5b339232, 0xd0a43407,
0x306e5208, 0xae194901, 0xcdcb1d3d, 0xf1695d07, 0x5f3b59d0, 0xa921d2a4, 0xc43e6ffa, 0xf09d7f22,
0xe2086b83, 0x0c887070, 0xed0395e8, 0x854d8765, 0xa770cc28, 0x686f3803, 0xd12289b4, 0x55376b55,
0x347ae04d, 0x13cd8867, 0x21fcd359, 0x6f6838a2, 0x5d878268, 0x081230b0, 0x4e650001, 0x27feb637,
0x2a5a0d75, 0x98b98e8a, 0x37a3d205, 0x9bd9a16b, 0x626f4633, 0x1aff66d5, 0x73775d2d, 0x943acf9f,
0x63bfbdae, 0x690441be, 0xb461c91f, 0x1c31ec2f, 0x15b44e96, 0x5a88b44a, 0xf50a5482, 0x2b90d060,
0x6aed13b0, 0xc367c97e, 0x9aba2ed8, 0xc628c155, 0x0e5cbe5a, 0x41277292, 0x43f59984, 0x3f7e3bf8,
0x487e1fe9, 0xfb462b23, 0xda4f6038, 0x9764f5f1, 0x15ec6247, 0x7659232c, 0xcdd0bb54, 0x5bc0d691,
0xefcc30e6, 0xa35e5432, 0x7dbb9ab6, 0x3937f5c4, 0x49d309fd, 0x477e3255, 0x69a0206f, 0x2850cb81,
0x406ecd8c, 0x8e2af5ac, 0xf8175347, 0x91615d3a, 0xc9ac2788, 0xf57b4d62, 0x0e7f004d, 0xb9d0f4cb,
0x15a46dc1, 0x24e323d0, 0x40690307, 0x0218c53a, 0xae7f20f6, 0x25dc07d6, 0x1a8a4d22, 0x9ed1266b,
0xb8cd5f73, 0x0c69a346, 0x34e036c3, 0x5c95bf6b, 0xee4f4379, 0x7f092573, 0x6a57d5e0, 0xd50f659f,
0xd931e110, 0xab0e36a4, 0x1c1878ef, 0x852a0c8b, 0x7a1c0945, 0x932795e1, 0x9769d174, 0x74811abb,
0xab256a5e, 0xffcb49e9, 0x40aa9400, 0x57938786, 0x41d1eb77, 0xde98b089, 0xe8ee38a6, 0x505c73c0,
0x49ed3142, 0xf4083254, 0xa22c2a55, 0xa14c3606, 0x8b060b88, 0x89688eff, 0xf9006b5c, 0x4830826f,
0xb9e5258a, 0x6f57089e, 0xf3cdcc27, 0x737a1d1d, 0x4e3ef76e, 0xea922ff0, 0x6a6776b4, 0xea6989ef,
0xff16a4c3, 0x1587c95e, 0x3b28c5ad, 0x07fe3b4d, 0x3c297bdc, 0x11b84448, 0x5353674d, 0x9dad7729,
0x0cc568f5, 0x352323c2, 0xb29acf5b, 0x73f73e82, 0x82624fee, 0xbcedf56f, 0x27a5f16e, 0xf5e3a22f,
0xebf59351, 0x48e36eb9, 0x48a2ca0e, 0xf8613963, 0xbbb1532f, 0xd36d1b78, 0x8975b60f, 0xc39823ad,
0x1304073b, 0x396aeeac, 0xefb59893, 0x958f8346, 0x9bc8e713, 0x7ce3f522, 0x549c45cc, 0x829a7a8f,
0x78f8933c, 0x0806232f, 0x80ecc61e, 0xc313d91a, 0xc4d8177e, 0x086f84d8, 0x604bd645, 0x0b70533b,
0x482a2cdb, 0xf472fa55, 0xc2a2c923, 0x3a3d288b, 0xd48cd88c, 0xf4b831b2, 0xf460a283, 0xe1800a44,
0x316acade, 0x49950c6a, 0x769ad791, 0xdb0587c2, 0xa4fb0fd8, 0x79f84441, 0xef0687e9, 0x140761e6,
0xcaa68da5, 0xffc4ebd9, 0x4e049033, 0x6522f813, 0x3beac8d7, 0xfc576d57, 0x1d16d6d8, 0x72035c0e,
0x476701e9, 0x687a5a66, 0x92cf6fbf, 0x40b7bc7e, 0x488791ea, 0x3f3c9d5f, 0x473e966e, 0xe12be8d0,
0xc5b220e3, 0x83f5b5d1, 0xf8425ce8, 0x147ffdfe, 0x3c2e9f70, 0xae377b6d, 0xf2ef4032, 0x37e31d6f,
0xe38a8d07, 0x0bab8299, 0x35d0fa8c, 0xb3b7134f, 0x2d261472, 0x729470d9, 0x1f532499, 0xc17c11d9,
0xa75bebb5, 0xe93f4826, 0x66bbaab8, 0x1a1283c2, 0x63630227, 0x30decdde, 0x3a408005, 0x40708778,
0x03c00538, 0x2d4005cf, 0x1540871f, 0x8336b988, 0x0f13206e, 0x4a7a432a, 0xccab4d42, 0x88f8a974,
0xea3c1597, 0x286a36d3, 0x4a379af7, 0x56ed62cc, 0x00a527a7, 0xcdf6e8d2, 0x496e4258, 0xad0963dc,
0x35849058, 0xd5318630, 0x471347de, 0xd5f41679, 0x6c5dfa1c, 0xa2e3962b, 0xa2a9d0cd, 0x51f389b2,
0x2c32d7d9, 0x0bcbb660, 0xfcc65c4d, 0xebae9861, 0xdb306771, 0xddb68d04, 0x349dd702, 0x41601e5c,
0x45e0a6e6, 0x4d47b8b9, 0xb13de5bd, 0x9470a646, 0x4f8d79c8, 0x5198bd57, 0x464f0f41, 0xa3b94eb5,
0x9ba67548, 0xda8ef82a, 0x5e4f5ddf, 0x87362e51, 0xa54fa800, 0x7a170efd, 0x9eaf1ed6, 0xcba3327b,
0x0eb40a70, 0x6c485e61, 0xb5816353, 0x153a356e, 0xe6ce9561, 0x00401a68, 0xed446533, 0x4aeca02f,
0x23a60800, 0x7cd87f07, 0x66449ba2, 0xfd73ef7f, 0x585f6023, 0xca4e9196, 0x7f9703fb, 0x5ca05a49,
0x8fd8e743, 0x2ccc8bf2, 0x0a344fc5, 0xa8820b45, 0x6def5335, 0x6955a016, 0x0caa83f9, 0xe989cb22,
0x404d2481, 0xfca15ea3, 0xa85a37ec, 0xac76359c, 0x418b2607, 0x1825b50c, 0x49eb49f6, 0x474b902a,
0xd449e36e, 0x96fc5196, 0x7539f749, 0xdd08949c, 0xb1bafce2, 0x83cc94fc, 0xa6f5a778, 0xb164ab0f,
0x40f8b398, 0xe241b707, 0xca525e65, 0x06dffc5a, 0xbf7f22ab, 0x3c02be16, 0x904e2b6e, 0x6890df7d,
0xf923628c, 0x730e1349, 0x4813ba35, 0xe4cb5c64, 0x1fcae404, 0x58ee3503, 0x61771f68, 0x1248d918,
0xef90f892, 0x87e0cedc, 0xb19301af, 0x4c0dcf89, 0xed85398c, 0xd05f11ad, 0x8df2b9ca, 0x4430f3c4,
0x3b826d5e, 0x9a8c1301, 0x7a57976f, 0x4e8cecb0, 0xb49a840b, 0x90619865, 0x72d85bcb, 0x8d5800ff,
0x3923dd0e, 0x5325f55d, 0x818f9c43, 0x3defc69e, 0xf80c6347, 0x7bc18ded, 0x702d62ec, 0xeafc05a3,
0x99d0e9af, 0x054be68a, 0x10581c9d, 0x7f191f91, 0xac7a6274, 0x64212eed, 0xcf38d90a, 0xc213eb86,
0x2ccd58b9, 0xbf09bf04, 0x6e7b4f74, 0x6b97d008, 0x2c7ee79c, 0xb782e7ce, 0x4114e61d, 0xfbd160bb,
0x8c0c905e, 0xbd041c0c, 0xcdab6825, 0x5363e19a, 0xd331c54b, 0x9ca28ca4, 0xf98cd90a, 0xe34976be,
0xd4e91fd1, 0xe4e2808b, 0x4d98c9ea, 0xc623d50a, 0x67160a46, 0x4af9b11c, 0x133681f1, 0x37e36ffc,
0x753e969b, 0xd9f11a04, 0x07713bfa, 0x7eb82b2a, 0xc9de023f, 0x222c5422, 0x98a7a7f0, 0x60483a49,
0x8ee12ab3, 0xeb5a1739, 0x834d7849, 0x60c2def7, 0x46a2b355, 0x61ced01e, 0x0b8c93ce, 0x70deadb9,
0xfcc5828f, 0xc5052168, 0x33f1e2b5, 0x40bb1886, 0x282b920f, 0x6f99e8a2, 0x5fae6602, 0xb932618a,
0x17437ece, 0x3d170b7a, 0x858cdb89, 0xd9779b2d, 0xf42c6ce5, 0x7287a3ef, 0xefd61b2b, 0xb7915615,
0xa1fabb8b, 0x67dc4585, 0xd54b6efa, 0xe809553d, 0xacd3fb38, 0x3b4eec6f, 0x13453165, 0x9085b8f1,
0x7cabc3cf, 0xd1913b48, 0xe8d8927c, 0x12bf3231, 0xbf4f37d6, 0x774e5f3a, 0x1229983c, 0x2bf06330,
0xf1daf9fc, 0xf99c1801, 0x33f8ac7f, 0xe9934bb2, 0xb534d378, 0xff559112, 0xcbdec792, 0x96121910,
0xc974af73, 0xf3205eac, 0xd0084acd, 0xaceb2095, 0x83c8ee13, 0x685a9636, 0x8aa9d8c8, 0x3f675f7c,
0xb781f150, 0x12fccd5b, 0x1f677a9a, 0xc3d87358, 0x9c39831b, 0xc2442b23, 0x99cd89fb, 0xbb291f8a,
0xdb08099a, 0xe93ba3cf, 0x23ed731d, 0x56a9efa9, 0x5e64f72b, 0x5c232c3f, 0xfb89bbb4, 0xe1b8f5fb,
0xd08bab44, 0x9e55b788, 0x105ed931, 0x37e86bdf, 0x110eef10, 0xaf751d5e, 0x6338d467, 0x80e8740e,
};
}
internal class HaruiroCrypt : CxEncryption
{
public HaruiroCrypt () : base (0x101, 0x31D)
{
PrologOrder = new byte[] { 0, 2, 1 };
OddBranchOrder = new byte[] { 5, 2, 3, 0, 1, 4 };
EvenBranchOrder = new byte[] { 5, 0, 2, 1, 7, 3, 6, 4 };
}
protected override uint[] ControlBlock { get { return s_ControlBlock; } }
static readonly uint[] s_ControlBlock = {
0x9C91BADF, 0x8B8F868D, 0xDF919096, 0x8B91909C, 0xDF93908D, 0x9C90939D, 0xD2D2DF94, 0x9E8BACDF,
0x9E9C968B, 0xDF869393, 0x9BDF8D90, 0x929E9186, 0x939E9C96, 0xDFD38693, 0x9A8D969B, 0x86938B9C,
0xDF8D90DF, 0x969B9196, 0x8B9C9A8D, 0xDFD38693, 0x91968C8A, 0x978BDF98, 0x8FDF8C96, 0x8D98908D,
0x9EDF929E, 0x90D09B91, 0x939DDF8D, 0xDF949C90, 0x92908D99, 0x978B90DF, 0x8FDF8D9A, 0x8D98908D,
0xDF8C929E, 0x93939688, 0xDF9A9DDF, 0x9A939396, 0xDF939E98, 0x8BDF869D, 0x93DF9A97, 0x919A9C96,
0x9EDF9A8C, 0x9A9A8D98, 0x8B919A92, 0x4E7DDFD1, 0x897C337D, 0xB07C727C, 0x7F7C767C, 0x8A7C1D7D,
0x9D7C727C, 0x0F7DB17C, 0x3C6FBE7E, 0x3A7DB66C, 0x157D5F7D, 0xB66C516C, 0x5F7D3A7D, 0xBE7E157D,
0x256F436D, 0x3A7DB66C, 0x157D5F7D, 0x256F2B75, 0x3A7DB66C, 0x157D5F7D, 0x436EBE7E, 0x897C337D,
0xB07C727C, 0x7F7C767C, 0x187D567D, 0x5D7D8F68, 0x4E7D167D, 0x327D397D, 0xBC7C767C, 0x6C7CA57C,
0x367DA77C, 0x177D197D, 0x497D2974, 0x157D187D, 0x5D7D3B7D, 0x487D237D, 0x7EF5BD7E, 0x6D9473BF,
0x7D7776B5, 0x72337D5D, 0x705D7D28, 0x7D9E7353, 0x7DB76D0F, 0x7D7B7116, 0x7D956933, 0x70BE7E0F,
0x7D187DA0, 0x69377D56, 0x7D8B70B9, 0x7D686A33, 0x7D706A55, 0x7D3B7D3A, 0x7E527D5D, 0x0872F5BD,
0x6E6A337D, 0xAA715D7D, 0x447D167D, 0x6376337D, 0xBE7E367D, 0x3E7D2F7D, 0x177D447D, 0x3767397D,
0x5B7D237D, 0x4C7D4C7D, 0x567D1D7D, 0x4876377D, 0x97700D6F, 0x447DBD7E, 0x367D4E7D, 0x9C7E9C7E,
0x557D216B, 0x167D7074, 0xF5F5B67E, 0x7B71BF7E, 0x7173BE7E, 0x8B70786C, 0xBD7E7E72, 0x711C77F5,
0x690F7D8B, 0x7D887125, 0x6C3B7D4A, 0x7D10768C, 0x72887533, 0x693A7DA5, 0x74286A2D, 0x7E796D52,
0x9A67F5BD, 0x1F7D2569, 0x187D2C7D, 0x9C7E477D, 0x397D9C7E, 0x5D7D4173, 0x5D7D427D, 0xAD7C987C,
0x0E7D377D, 0x507D417D, 0xBE7E387D, 0x3E7D1D7D, 0x177D307D, 0x417D7B71, 0x3B7D3E7D, 0x5F72B16B,
0x6870337D, 0x8E71337D, 0xBC74BE7E, 0x377D367D, 0x956D167D, 0x8E71337D, 0x2F7D337D, 0x177D397D,
0x187D527D, 0x327D5D7D, 0x167D5D7D, 0xBD7E127D, 0x7D3A7DF5, 0x7D447D1F, 0x7D3D7D5D, 0x7D427D3E,
0x7D1F7D18, 0x7242765B, 0x7D597D93, 0x7D167D3B, 0x7D567D33, 0x7D567D12, 0x7D377D0E, 0x7EB67E5D,
0x7D5F7DBF, 0x7D377D0E, 0x70557D33, 0x71337D68, 0x6F367D8E, 0x7DBC7493, 0x7D167D5F, 0x7D0E7D37,
0x7E347D3B, 0xB17CF5BD, 0x747CA47E, 0xBF7EB77E, 0x367D7B71, 0x127D4173, 0x177D467D, 0x4C691E7D,
0x7A6D256C, 0x417D377D, 0x197D507D, 0x5F7DBD7E, 0x3D7D5D7D, 0x827C337D, 0x867CBC7C, 0xA77CA47E,
0x47733E76, 0x327D367D, 0x367D556C, 0x407D7768, 0x5B7D1E7D, 0xF5F5BD7E, 0x447DBF7E, 0x377D0E7D,
0x557D216B, 0x3976BE7E, 0x8C6C337D, 0x3A7D7872, 0xA5728875, 0x71740F7D, 0x4E7D167D, 0x367D397D,
0x3E7D377D, 0xBD7E427D, 0x7D397DF5, 0x7D5F7D17, 0x6F477D59, 0x7D356F9A, 0x7D567D41, 0x7D0E7D37,
0x7D567D41, 0x7D1D7D55, 0x7D3B7D3E, 0x719C6C16, 0x68337D36, 0x7D267548, 0x7D986F36, 0x7D0E750F,
0x7D167D46, 0x7D4A7D18, 0xF5BD7E5D, 0x367D216B, 0x177DAA6F, 0x4C7D0E76, 0x167D157D, 0xA77E056C,
0x346C327D, 0xB670AD6E, 0x177D127D, 0x6F720F7D, 0x427D4F7D, 0x7B71BD7E, 0x2F7D327D, 0x527D387D,
0x9768516C, 0x3B7D4A7D, 0x9C7E9C7E, 0x387D2F7D, 0x41735D7D, 0x3A7D8B68, 0x5D7D5F7D, 0x397D3D7D,
0x157D356A, 0x4A7D3B7D, 0x3E7D237D, 0xBD7E427D, 0x7D7B71F5, 0x7D216B55, 0x7D417336, 0x7D427D5D,
0x7D3E7D56, 0x7D337D42, 0x7D447D32, 0x73377D0E, 0x7D8B6841, 0x7D1E7D49, 0x7D567D37, 0x7D427D3E,
0x7E367D33, 0x7E9C7E9C, 0x7EF5F5BD, 0x7D447DBF, 0x703B7D4A, 0x7D87748B, 0x71BE7E22, 0x77327D7B,
0x730F7D2C, 0x7D4A7D77, 0x6848683B, 0x7D3E7D58, 0xF5BD7E42, 0x557D216B, 0x187D166A, 0xAD71487D,
0x337D2B75, 0x0D6F4876, 0x297D9770, 0xF5F5BD7E, 0x5D7D5F7D, 0x397D3D7D, 0x5B7D1F7D, 0x876C1577,
0x8B684173, 0x0F730F7D, 0x487D127D, 0x207D427D, 0xBD7E367D, 0x7D447DF5, 0x7E3B7D4A, 0x719C7E9C,
0x74337D7B, 0x7D6271BC, 0x750F7D40, 0x7D567D92, 0x7D167D20, 0x7D207D42, 0xF5B67E36, 0xD2D2F5F5,
0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2,
0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2,
0xD2D2D2D2, 0xD2D2D2D2, 0x647EF5D2, 0x6C7173DF, 0x70BF7E78, 0x7E7E728B, 0x7D967EBF, 0x7D547D3D,
0x7E237D4A, 0x7D327DBF, 0xD0567D16, 0x948A8CAB, 0x96978C96, 0xB7DF9E92, 0x948A8D9E, 0xDF957E9E,
0x6EF5DFF5, 0x7D1372B0, 0x7C8E7C33, 0x7CBC7C72, 0x73BE7E6C, 0x6F786C71, 0x7D3B7618, 0x7E7A6933,
0x71F5F5BD, 0x7C337D90, 0x7C827C72, 0x7DA77C6C, 0x7D4D6C36, 0x7D3B7D15, 0x7D167D5D, 0x7D417D33,
0x71BE7E55, 0x6F397D90, 0x6E426B4C, 0xF5337D31, 0x9C7CB37C, 0x546F5D7D, 0x557D9675, 0x4A7D2F76,
0xBE7E3B7D, 0xBC7C827C, 0xA47E867C, 0x377DA77C, 0x936F1A71, 0x367D0973, 0x4A7D316E, 0x327D3B7D,
0x237D5D7D, 0x407D5D7D, 0x436D996E, 0x377D367D, 0x547D177D, 0x377D157D, 0xBD7E5D7D, 0xAF7CF5F5,
0xB57C6C7C, 0x157D356A, 0x3B7D4A7D, 0x237D4A7D, 0x427D3E7D, 0x936F1A71, 0x0F7D0973, 0x347DB469,
0x68F53B7D, 0x7D267548, 0x7D1D7D36, 0x7D3B7D3E, 0x7E167D52, 0xDFF5DFBD, 0xD2D2F5F5, 0xD2D2D2D2,
0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2,
0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2,
0xD2D2D2D2, 0x647EF5D2, 0x6B3E76DF, 0x7EAD7103, 0x7E296DBF, 0x7D967EBF, 0x7D227D56, 0x7E237D1D,
0x7D3D7DBF, 0x7E547D31, 0x929EB4A1, 0x929E8696, 0x8CABDF9E, 0x949E9D8A, 0xDF957E96, 0x6AF5DFF5,
0x7D9A6F15, 0x7D5F7D33, 0x7D207D1D, 0x7D5B7439, 0x75486836, 0x6F0F7D26, 0x6F177D27, 0x7D177D48,
0xF5167D48, 0x936F1A71, 0x337D0973, 0x166C9C68, 0x227D0A6F, 0xF5F5BD7E, 0x4E7D387D, 0x4D6B567D,
0x3B7D507D, 0x167D5D7D, 0x1D7D5F7D, 0x0F7D207D, 0xB77C8B7C, 0xA47E727C, 0xBE7E4A7D, 0x3B7DAC6E,
0x7DF50F7D, 0x7D3D7D44, 0x71527D37, 0x7D247217, 0x7D527D19, 0x7D377D4E, 0x7D3B7D4A, 0x7E527D5D,
0x754868BE, 0x6E337D26, 0x6D6A721A, 0xF5BD7E73, 0x417D427D, 0x8E74256F, 0x876C2B6E, 0x507D417D,
0x4C69327D, 0x856E5B77, 0xF5DFBD7E, 0xD2F5F5DF, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2,
0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2,
0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0x7EF5D2D2, 0x3E76DF64,
0xAD71036B, 0x5F7DBF7E, 0x207D1D7D, 0x967EBF7E, 0x227D567D, 0x237D1D7D, 0x5F7DBF7E, 0x207D1D7D,
0x9EB4A17E, 0x9E869692, 0xBEDF9E92, 0x9A929E86, 0xF5DF957E, 0x4169F5F5, 0x527D167D, 0x317D4C7D,
0x427D507D, 0x9675546F, 0x036B337D, 0x6870936F, 0xBD7E5470, 0x1A71F5F5, 0x0973936F, 0x4E7D337D,
0x0F7D397D, 0x237DBE7E, 0x3A7D167D, 0x8E71586E, 0x197D337D, 0x367D5B7D, 0x5B773D76, 0x3E7D557D,
0x527D3B7D, 0x3B7D157D, 0x167D5D7D, 0xF5F5BD7E, 0xAD6EA96C, 0x3A7D9173, 0x3569BE7E, 0x5673836C,
0x3868327D, 0x557D5D7D, 0x367D6171, 0x0F7D4276, 0x597D9372, 0x5D7D3B7D, 0x337D167D, 0x446B567D,
0x377D187D, 0x936F5D7D, 0xF5DFBD7E, 0xD2F5F5DF, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2,
0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2,
0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0x7EF5D2D2, 0x8176DF64,
0x64718C72, 0xA604BF7E, 0xBF7E8E71, 0x597D967E, 0x537D0E7D, 0x5B7D1A7D, 0xBF7E497D, 0x5B7D197D,
0xA17E4E7D, 0x869891BA, 0x96958A90, 0x8A90A6DF, 0x957E9094, 0x71F5F5DF, 0x7D0373AD, 0x7D5B7D4E,
0x7C7E7C33, 0x7E7C7CA8, 0x76377DA4, 0x750D6F48, 0x773A7DA7, 0x7D2B6B15, 0x7C757C33, 0x7CA47EA2,
0x7C857C98, 0x7D747C9A, 0x70577D33, 0x7E936813, 0x6F1A71BD, 0x7D097393, 0x6C9C6833, 0x7D0A6F16,
0x7D3A7D22, 0x7D5F7D1F, 0xF5BD7E16, 0x6CBB68F5, 0x7D496F66, 0x7D5D7D3A, 0x7C1F7D3D, 0x7C767CB1,
0x710F7DA7, 0x7D276F9B, 0x7D3B7D3E, 0x7D427D5D, 0x7E207D42, 0x744D6EBE, 0x7D4A7D39, 0x7E1F7D3B,
0x7730778A, 0x7E486D0A, 0x73397D89, 0x7D317D3B, 0x7D3B7D15, 0x7E167D5D, 0xDFF5DFBD, 0xD2D2F5F5,
0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2,
0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2, 0xD2D2D2D2,
0xD2D2D2D2, 0xD2D2D2D2, 0x647EF5D2, 0x6F226CDF, 0x15BF7E13, 0x7EAB6B5F, 0x7D967EBF, 0x7D2B7D36,
0x7E127D56, 0x7D237DBF, 0x7E337D54, 0x9D96B1A1, 0x889E948A, 0x9EB2DF9E, 0x90919694, 0xF5DF957E,
0x6F4876F5, 0x68367D0D, 0x7DBD6DB9, 0x72486839, 0x68367D8C, 0x7D3B7D77, 0x6C167D5D, 0x7D617473,
0x71687033, 0x6F1A6E8E, 0xF5BD7E49, 0x7D3F71F5, 0x6A1A6E32, 0x6A377D30, 0x7168707A, 0x6F337D8E,
0xF5BD7E93, 0x856E3069, 0x507D417D, 0x536F3A7D, 0x6873886E, 0x3A7D237D, 0x3E7D417D, 0x0D6B3B7D,
0x3A7D0E7D, 0x507D5D7D, 0xBD7E167D, 0x987DF5F5, 0x926D337D, 0x327D5071, 0x876AB369, 0x557D417D,
0x046ABE7E, 0x546F0373, 0x4169327D, 0x567D187D, 0x2B75367D, 0x3E7D1E77, 0x5D7D3B7D, 0xBD7E167D,
0xF5DFF5DF, 0xD8BC801A, 0x7054615E, 0xC328FFDF, 0xDA125C58, 0xE29F76AE, 0x3E985EC9, 0xD68942BB,
0xACF447D9, 0x34A0EC16, 0x1774BA75, 0x6C8C73E8, 0x67F6D63C, 0x0DD99ED2, 0x325664BE, 0x0CB32A77,
0xDA949E84, 0xBC3E8E3E, 0x22C0F818, 0xD352F14E, 0x85E442D5, 0x7BB08649, 0x327D6652, 0x34D2AC9A,
0xB9525C54, 0x5E4D743A, 0x6461F214, 0xE5E044DF, 0xD7F67227, 0x5BDA6038, 0xE6666190, 0xD25A79B2,
0x83876738, 0xEF5EE84A, 0x6B2CAB32, 0x3D877003, 0x3E2EE6D3, 0x0B381E70, 0xB0822C81, 0x69AB1A74,
0x2EF5D5D2, 0xF402AFEC, 0xEEA7A289, 0x61D5E690, 0x465147E5, 0xD5949B1C, 0x31541D66, 0x148184F4,
0x6C1CE67A, 0xDC42ED2B, 0x93BC139A, 0xD3933356, 0x670BEB65, 0x7DAB5094, 0x63D8C733, 0xD903AD70,
0x4D670639, 0xC227AC3D, 0xAA98D504, 0x12FABF63, 0xC5352399, 0xC65E8E6D, 0x6AA6D630, 0x021531E5,
0x39ED9C6F, 0xAE937934, 0x40D1EACE, 0x3AE7BEF1, 0xF02500F2, 0x5D11F536, 0xEF02A224, 0xF9575EF9,
0x5573CEFB, 0x54C3877F, 0x20A894FF, 0x803C3314, 0x235C2CBA, 0x1D4FF3BB, 0xFB2D1256, 0x7056267E,
0x05265C89, 0xA1C309B7, 0xED8FFA88, 0x1502F98C, 0x07C6FA3B, 0xC8904F76, 0x4D943763, 0xFD477F04,
0xD5F33030, 0xC4DC9F81, 0xA95B87C7, 0x2AAD0AD7, 0x708F000B, 0x228B6CBA, 0x098CBD66, 0x55E149C7,
0xC231F621, 0x42AE3F42, 0x10261C48, 0x5822CAEF, 0xEC4BEA29, 0x69E16806, 0xD5AE0EFA, 0xA703BADE,
0xEF63BFFB, 0x4FC961F5, 0x9C72FB3B, 0xB61C58B9, 0x4AEC93B2, 0x755C6398, 0xFEF78F90, 0xA1F78D8B,
0x6F090D0A, 0x1B773587, 0x706CFC97, 0x56955335, 0x004EE05F, 0xBC475257, 0x7E1503C8, 0x5B78B3CD,
0x814E4BC2, 0xC1715B5B, 0xEFBFB8F6, 0x6854031F, 0xF30CE6D4, 0x2E1718D6, 0xD06045FD, 0x9B660A1F,
0x9CC8A258, 0x5897DB15, 0xB6C3C2A4, 0xB57C5D74, 0x3278D081, 0x3B5D98E7, 0x039B6E88, 0x0E24DF39,
0x7ACD36A8, 0xF44AAB04, 0x3DE85824, 0x838781C6, 0xBAA78A54, 0x3B54D906, 0x97C9152C, 0x943DE77F,
0xF99A08C0, 0x46942D51, 0x5A1BE77B, 0x16738C96, 0x32967A15, 0x3536E659, 0x9754C8C9, 0xF428132E,
0x6B4DB3E3, 0x971D7E51, 0x1C5B8614, 0x9BB28962, 0xFE1DB239, 0x18B88247, 0xCBD5D9A9, 0xF24A5632,
0x46691056, 0x2F353918, 0x52BCC5FA, 0xEE39D964, 0x3F81F0EF, 0x520A0E5E, 0xD5912E95, 0x4FB17933,
0x74B6F3C7, 0x532ED363, 0xF46FF821, 0x55A55E80, 0x71459FE5, 0xCEBC430C, 0xB5378EC0, 0x37ECB083,
0x83305B82, 0x31CFAD9C, 0xE7E4097C, 0xC230B646, 0xB95655B4, 0x11B2DBE7, 0x2435B74A, 0x8330B2A0,
0xC31446BA, 0xF3E427EA, 0x3C750CE8, 0x93BEE8B6, 0x404C5410, 0xBCA348C4, 0x9AE3AACF, 0xF8215AC7,
0xBE3AEC25, 0xC4DB481F, 0x71A8582F, 0x22B3EA36, 0x113D0A98, 0x6C826BF2, 0x3BC44E56, 0x052136DF,
0x5A94202F, 0xE7C7C837, 0xAEFFAA96, 0x481C1C2E, 0xBB6BE06C, 0x3B19DEFF, 0x95D97AD1, 0x08FA7AF9,
0x595114F5, 0x3960066E, 0xD7F9FECF, 0xC6F3CB6C, 0xF6827F92, 0x2F21BB23, 0xE2D06DB3, 0xD8A459E7,
0xB8DD726D, 0x96DEE22B, 0x8F41FC78, 0x0A6D7FB0, 0xD46D787F, 0xC8C17671, 0xCCBE2555, 0xCA93F523,
0x3260A587, 0x582375FE, 0xA1EC6529, 0x6F2E3FE2, 0x2600C9A4, 0x05471CA9, 0xA2FA1B00, 0x516844D3,
0xACEC7F36, 0xBF7E7736, 0xC8CD3AEA, 0xFC01E996, 0x79EF5BDE, 0x80837A48, 0x7544A7F6, 0xF52DC05B,
0x48F29041, 0x3D7AF54D, 0xE7A2F6DC, 0xA3324B9E, 0x845308F4, 0x6D6B59F5, 0x1107B7E9, 0x41DB9A4A,
0x664C17F0, 0x2D90801A, 0x5187C18A, 0xD1B6AE77, 0x6B088EAC, 0x7DE5AA05, 0x1CDEF8A3, 0x8895F28C,
0x3E126806, 0x96DFE11E, 0x8100EC01, 0x73EF054A, 0x7DA2ED37, 0xDE911008, 0xE84A955B, 0x4EFCD2B7,
0x67C61BA1, 0xEB08CE97, 0xB1D0F803, 0x5D2CF37D, 0x78759FB0, 0x2B4DD43A, 0xC60EE346, 0xEBDCB11E,
0xB19A3E8B, 0x9C56B73F, 0xD6279055, 0x9463C4A0, 0xC2BCCA31, 0x28E33F02, 0xEED5B252, 0x7B6B410F,
0xAD3640CB, 0x14FF0C8C, 0x41DD0B23, 0x050FBFF0, 0x801173BE, 0x06750586, 0x19F790EC, 0x01CF32C9,
0x124426E5, 0x2C2716A2, 0xED496C38, 0xCBCEEBE7, 0x1379B4F9, 0xF316B595, 0x2B4A27EB, 0x1CD50E1F,
0xD7973546, 0xE69B0AFE, 0x57BDE2C7, 0x6CB0B82A, 0x35B6B86B, 0x1A91DAAB, 0x614DFCC4, 0x6BCC4AA6,
0x611DFD79, 0x32289B49, 0xE0BA9884, 0x1BFD823A, 0x4E75B8A0, 0xBFF03DB2, 0x369D0ED4, 0x85AADDAD,
0x28F34CF4, 0x2CC4D6EA, 0xEC57778C, 0xF5ED1342, 0xC50F04DA, 0x43A9127A, 0x63511EF9, 0xEE53619F,
0xAB2F892B, 0xDAD134F4, 0x865CD0E7, 0x16911E2F, 0x6559CB8E, 0x840B78D7, 0xC9C051F9, 0x28682422,
0x5E64F8CB, 0xBF1FFC23, 0x980BE59C, 0x1534C6E2, 0xFE576703, 0xDCA27A83, 0xB7174088, 0x60741B9B,
};
}
internal class ZecchouCrypt : CxEncryption
{
public ZecchouCrypt () : base (0x1EC, 0x787)
{
PrologOrder = new byte[] { 2, 0, 1 };
OddBranchOrder = new byte[] { 0, 4, 3, 1, 2, 5 };
EvenBranchOrder = new byte[] { 3, 4, 0, 5, 7, 2, 1, 6 };
}
protected override uint[] ControlBlock { get { return s_ControlBlock; } }
static readonly uint[] s_ControlBlock = {
0x9270F55C, 0xB6862F50, 0xCBEE2F3C, 0xB3819E81, 0xFE27C837, 0x0B196E88, 0x4884FC7D, 0xFEB4A2E5,
0x991A44E9, 0x70452B25, 0x8BB83161, 0x87AC6FB8, 0x4D9251EA, 0xB35C674A, 0x18F437D4, 0x3DB344CF,
0x79994177, 0xB9AE14D5, 0x3D014374, 0xB24F96E1, 0x5C2515E8, 0x93FD6325, 0xB903664F, 0xC97BC457,
0x6CA42179, 0xB4C25E64, 0xE4A9DADD, 0x3B14D037, 0xBCACA4C9, 0x97798BD9, 0xDD8F1A4F, 0x87E240E0,
0xDE767108, 0x9AB2A99C, 0x47657059, 0xBB44019B, 0x5C6B4FC8, 0x0E01A6D3, 0xA0646531, 0x0C599669,
0xDE6591C8, 0xC6740F94, 0x7945082C, 0x9E411FF8, 0x4B2F880F, 0x0A5BE1F8, 0xF23A3A7C, 0x29E612DA,
0xFDCA8201, 0x106AADE3, 0x8E1F60CD, 0xC51D484F, 0x66750FBE, 0x6B926CC4, 0x78522E0F, 0x2BDF7E2C,
0x7682A508, 0x02EC77A3, 0x5F9E25DD, 0xF0D7280E, 0x3CA52490, 0x68AA732F, 0x5E669638, 0x8BE3E7D7,
0x52D32A49, 0x0B2D4D08, 0x753DC3A8, 0xE8B71148, 0x232A52AB, 0xF2903DE7, 0xA79B15DC, 0x971134CA,
0x5F1B535B, 0xB7DFCCC6, 0x6CE21BF2, 0xCA08B73B, 0x31824771, 0xD5F6DAD2, 0xFFC6CD89, 0xA712BDF1,
0x8F91EBB9, 0x316A0AA1, 0x3DB53BEE, 0x15803411, 0xBA61E60D, 0x2B2ECC5E, 0x7C3FCB9F, 0x16F8EDFD,
0x5BD8EC08, 0x5A574D63, 0xE3EADD33, 0xF0707487, 0x491CC7EF, 0xA28D0BD7, 0x34F7AF33, 0x5B5BFD9A,
0xAE51DEBC, 0xCD35BD18, 0xADD568A3, 0x4AFF54DB, 0x16FBAD5E, 0x972EAAE0, 0xA756D9EA, 0x5DFA6FE6,
0xAEBC6099, 0x2D17DE69, 0x771E96B6, 0x02561A66, 0xC2D01B3F, 0x843459DB, 0x992F7899, 0x0526E411,
0x2FDF7C17, 0xFEB029D6, 0xD2439AE8, 0x2088904B, 0x328562F8, 0x62FDD7FB, 0x6C51C1DE, 0xCB24ADC7,
0xD3DD7784, 0xA27DC0BD, 0xBAB39B06, 0x99664B04, 0x4B47270B, 0x3004E5C7, 0x2109062B, 0xB62619D1,
0xD2B3A2A7, 0x8E177435, 0x9E87C141, 0x16EDB804, 0xEFB118D7, 0x48547395, 0xEA4420D9, 0x113C3E10,
0x82A1D55F, 0xC0D1B347, 0xE99E3F16, 0xAE1056B6, 0x70E7C756, 0x26BB5BE4, 0xA4F5DE57, 0xF2304702,
0xF3BEE3F9, 0xC12DE4E5, 0x5FAB7070, 0xC2396F00, 0xDA2E2763, 0x0D67EAD6, 0x842434DB, 0xF2287493,
0x139B632C, 0xD31AE186, 0xBE21F391, 0x0F04AD74, 0x760E3D8B, 0x6FD4AB0C, 0x9F506610, 0x6FFAE6E8,
0x6D53455B, 0x5DE866A7, 0x3211718B, 0x2F0E1FB8, 0x6D579EF7, 0x6E41F401, 0x9533E737, 0xB23CBE44,
0xC0F3C6E4, 0x4631C54B, 0xFE6CC1FB, 0xD1567AA8, 0x24524BA3, 0x06301DE1, 0x09A3BFD4, 0x08FFE284,
0x32FD6D39, 0x43D5EF08, 0x449C17B0, 0x6930A066, 0x9B04D47C, 0xE5A536C3, 0x7A295350, 0x6CBC2188,
0x806D8EE5, 0x58C3C762, 0x334606B6, 0x81512651, 0x8400513A, 0x7FB90824, 0x27CB40E6, 0xE8E2BF1E,
0x815D76B9, 0x01A9AA15, 0xCA54128E, 0xCBF55453, 0x4AA5015F, 0xFF6457B8, 0xC66002D5, 0xAD9E485E,
0x894B9EBF, 0x1877BCF5, 0xB0A5D55B, 0x0918A78B, 0xDC8E4F3E, 0x783D3AEC, 0x5A968FC8, 0xA25B6672,
0xEA419133, 0xBB49AD06, 0xCBB54C31, 0x817CAED7, 0xDCA456DE, 0x66CBF223, 0x0BE19BE2, 0x8DD0CC43,
0x7A562E48, 0xADCC9AA4, 0x9F937AE1, 0x3A290B93, 0xA99553FB, 0x6D45CC1E, 0x086F108E, 0x3DF2DD54,
0x7210DE52, 0xF0FCE1D0, 0x359E0E55, 0x001C5D92, 0x171D6AF1, 0xC7271B28, 0x67B88D5F, 0xE26F0853,
0x4CB7BE31, 0x5AE6C6A5, 0xEABC5EB9, 0x89212E43, 0x59208A14, 0xE6B96C15, 0xD10525A4, 0x56667092,
0xA6395218, 0x1069D219, 0x36AAF7E4, 0xAFC507C8, 0xBF83159D, 0xF9D19AAC, 0xF1E9A556, 0x77BBCAAC,
0xB1F4C79D, 0xD15721E7, 0x2F6F1103, 0xA9D42681, 0x75A61F30, 0xFF3E9FB1, 0x74399AE7, 0xA1FFE22C,
0x28864699, 0xA66F4198, 0x7B52E6EA, 0x3487BEA4, 0xC9F9E82F, 0x995F7249, 0x054A04B5, 0x490886D0,
0x1C6941E2, 0x1FFE1313, 0xE9FA70F8, 0x2FFB8BA6, 0xACF7271F, 0x7EDBCD42, 0xCEA3AE90, 0x86D20A4A,
0xF7F9ACBF, 0x865FFE08, 0x2D1541C9, 0xE418439C, 0x5CA169EA, 0x95CEB34F, 0x52F079D3, 0x2CC683FE,
0xC4422599, 0x2A2CC1FC, 0x3F308992, 0x72DC3141, 0x02C34D6E, 0xACD97273, 0xE4395318, 0xA256FCE4,
0x5AAD1F02, 0xE50C02F0, 0x5E47F15A, 0x37CBD054, 0x3A202641, 0x6BC6DBCD, 0x3E39017D, 0x558C86C2,
0x1C6CAC5F, 0x6C52FC13, 0x6A56788A, 0xA95900AA, 0x3BF53A24, 0x6AA72441, 0xE001FC31, 0xE086780F,
0xF331A63B, 0xA84CB9AA, 0xD2FA19E9, 0x3D27E008, 0xB97F3FE6, 0x6ACF6534, 0xDA4FF671, 0x7E9B71E2,
0x7B94AA6F, 0x4CA404D3, 0x0F0D430A, 0xFAF767BC, 0xF594274D, 0x4B450810, 0xD40A4F42, 0x1CF7CBDA,
0x60AB016E, 0x90228816, 0x42C03FB3, 0xC1BF0A28, 0xD38BB39D, 0x03E22FC1, 0x00EA557F, 0x2AC33A59,
0xF3DDE16D, 0xB7837409, 0xF3B643C0, 0x26D31B78, 0x41FBC6F1, 0x9295988D, 0x3BE6B767, 0x2285E0A5,
0xD9FB8861, 0x48AC486C, 0xF68CD9DB, 0xDF3CD901, 0xDAB67306, 0x7FE5EB09, 0x10B86AC2, 0x8CAB3002,
0x0DFEC9FE, 0x399A347B, 0xC2129291, 0x1E39F57B, 0x7A9FA43A, 0xAD0C508D, 0x42F2298D, 0x7379139E,
0x94E54601, 0x07F02928, 0x24A5AB2D, 0xB2C84154, 0x12FC0050, 0x3155D5CE, 0xE1874881, 0x212C217A,
0x616F12F3, 0x3B70ACBA, 0x2975F280, 0xFAC6823A, 0x35F56E57, 0x3BEF7B6F, 0x537B3850, 0xB6D065A5,
0xA2EB4C68, 0x4CB7E715, 0x82A27532, 0x6275AC85, 0x7FFEC38F, 0x688F1404, 0x6AA26DF7, 0xC70ACD80,
0xBA0A7258, 0x7E89CE68, 0xECF582AA, 0xD9A031D4, 0x1C7CA117, 0x242FE683, 0x52C66C4B, 0xA6F47C5A,
0x6394301C, 0x97E085C4, 0xD530351E, 0xE7BE1F0A, 0xF394E9A9, 0x2CDFCD2C, 0x9E45C5D0, 0xD9BBC0C5,
0xBE2B008C, 0x2CC11084, 0x76F241F3, 0x8EDE62AD, 0x71FC5FAF, 0x1E63AF01, 0x390D8007, 0xB5B8365E,
0x6A38B215, 0x7D73F53B, 0x1A4DA747, 0xE5E0C4BD, 0x5ADB5E8E, 0x15800E9D, 0x6883557E, 0x0BD8B04A,
0x7FC16BB6, 0xB7C0C613, 0x560F4264, 0x90CBEB83, 0xBF754442, 0x7AB9C45D, 0xBC629AE9, 0xD814C4C4,
0xE11468C4, 0x856E9F0C, 0x257E9EF7, 0x11E12E28, 0xB372A0FC, 0xED24089E, 0x2CD13FA1, 0x270DA0C4,
0xB02A2E71, 0x2D9126AE, 0x1C4367AA, 0x216EC6BF, 0x9996D214, 0x0F7DB47F, 0xEB678F06, 0x59825E13,
0xE4AA1FB7, 0xA100D8EC, 0x24190CAD, 0xC2AB661D, 0x1B97A351, 0x1D36029B, 0x6507B8CF, 0x5D584C5B,
0x1E6676F5, 0x98177D11, 0x9AC0D28E, 0x8208A12E, 0xDC1207F0, 0xBFCCDA43, 0x3F1CD63F, 0x49D23890,
0xB1777585, 0x9C4E9BD5, 0xDDF710F6, 0x23160493, 0xD913FB31, 0xC515E622, 0xF483128B, 0x61F3BF2E,
0x751A2797, 0xB2B093B9, 0x4EA13F28, 0xE46E324E, 0x029509C1, 0x8CB4460F, 0xBEA15A37, 0x7700207F,
0xA57412F9, 0x0883D935, 0x453B9DC8, 0xD53ADFA0, 0xAFF4FDB0, 0xB1B86FDE, 0x57D11FD9, 0xBF4611A5,
0x32419C89, 0x19535C60, 0x91FE8B49, 0xECCAC288, 0xA80BC4DA, 0x91C950E7, 0x220764A2, 0xE5ACFA83,
0xF2084145, 0x58FB667D, 0x4C938932, 0x1C2701C4, 0xE2B9A3D5, 0x7BC777F0, 0x9D800459, 0xEC5A23EA,
0xD968C81D, 0xA6D03890, 0x6C369684, 0xCDA7E91D, 0xD2F04633, 0xE7632868, 0xE6373A8D, 0xF03D3A43,
0x3AB1F137, 0x9E989421, 0xE8604080, 0xE2A54C4F, 0xD87F6535, 0xE972BF2B, 0x77A96E1D, 0x0BFBB602,
0x839590CD, 0x32003F39, 0x3820E913, 0xD1375906, 0xC4EEFB78, 0x04A51627, 0xD1612DB4, 0xA0D72CC4,
0xE5F36021, 0x55838820, 0x380ADCA8, 0x41F33E77, 0x5995E0B9, 0x204AAADF, 0x941ED08A, 0x5940B193,
0x54D5DE7F, 0x2C9D0E08, 0x6A99ED29, 0x8669BF46, 0x788428F0, 0x8FA2C173, 0x3269D3DF, 0xFE8AA1B8,
0x767BF63A, 0x6794DE8D, 0x17B0C542, 0x50217DF8, 0xF3314021, 0xA5C066F2, 0xEF5424BD, 0x87E33E5C,
0x39EA028B, 0x0F8DB8F3, 0xF0587767, 0xDC17DD25, 0x0D4DCFFA, 0xB691C585, 0xF0FE755F, 0xFD1D1C2D,
0x827AFEC7, 0x0236DB4A, 0x74D6725F, 0x0F8E0B62, 0xCA2F8EBD, 0x927C07C4, 0x4D240BA6, 0x7451F975,
0x4D2F21AB, 0x9F1F1879, 0xE7893491, 0x92D3CA97, 0xB4FC4E4E, 0x279A6216, 0x2DEF215B, 0x783991D3,
0x1FAC97B9, 0xAD96C9B5, 0x22CB8FE7, 0x6EEB78B9, 0x2A4D0F38, 0xBDB1643D, 0xDBF09299, 0xE392A586,
0x7E660D9E, 0x2216ED36, 0x6572751F, 0xF38599DE, 0x3A467EA0, 0xC6795CA9, 0x4AD044B3, 0x82CB59F7,
0xF02376BE, 0xC0711A8D, 0x1A7C8670, 0xAD4AF7DF, 0xD6500F2D, 0x22C2A8AD, 0x9C663A5F, 0x5D73768D,
0xD9EE73CD, 0x047E1533, 0xECB910DB, 0xFDF2645C, 0x761C80CF, 0x24EC3B7B, 0x772B89A3, 0x6DE2BD5C,
0x8F6666D1, 0x2291E961, 0x235B6635, 0xE82D3A68, 0xDCA52C6F, 0xD2BF0617, 0xCA2CD768, 0xD83CAF80,
0x97308EC9, 0xCCD0882D, 0x6F4483DD, 0x5546026B, 0xCD3982C2, 0x4EDBB490, 0x150B2684, 0x0ED54971,
0x3B8F24DE, 0xDC86531E, 0x001EED75, 0x1C0BEC91, 0x1D171CE7, 0xC8D24D9D, 0x4D798200, 0x70B0F4F6,
0x3DC6CD4B, 0xECF5D3D9, 0x9CBB5B72, 0x33DE4F41, 0x90CED478, 0x5FD36868, 0x1FB23723, 0x40DDCC71,
0xD8712397, 0x745D9EB1, 0xC87BDAC8, 0x2B95A8A0, 0x50143C35, 0x274CFF72, 0x17F1ED1D, 0xD2FF3744,
0xAF4C4F48, 0x302165B1, 0xF03D5489, 0x41376BFE, 0xC1EF54B8, 0x1D09B9EC, 0x34E9DD09, 0xBAC7A594,
0x0752E96F, 0x7165005A, 0x38D14E60, 0x203A3661, 0x8EEAE1E9, 0x3BD33A6D, 0xD943B0FC, 0xD8EAF601,
0xA0FD332A, 0x206B03E1, 0x2C70D472, 0x875F68E1, 0xCBB802A4, 0x58ADE48C, 0x4C20AF9D, 0x17BB5E21,
0x36A492CF, 0x1030D7D2, 0x90DCD297, 0x2F7A9352, 0xB029252C, 0x7A05CF9D, 0x551E2CB2, 0x891D2B43,
0x1A17FADF, 0x15B3B985, 0xC6058A53, 0x4FE824CA, 0x8F4E012B, 0xA4C8855C, 0xC7A1E221, 0x36B254DE,
0x9EB5BBE7, 0x22E7354F, 0x7156BAA2, 0xE77AB5D4, 0xDD86ABD9, 0x58CCD168, 0xBB41A85D, 0x0F2EAC84,
0xB6412B9D, 0x0237D93F, 0x1EF229A9, 0xC7301842, 0x3DB32AEA, 0x4DFCF9BA, 0x6021C869, 0x2AD00EA7,
0x4E631C02, 0x0F0B877A, 0xE4D9EB17, 0x132B9EB3, 0x18A5BC60, 0x1E6ADDD9, 0x5CACAF44, 0x9C042275,
0x70746C87, 0x85523E54, 0x9A3EA645, 0x35FB4558, 0x2F67B4AD, 0x73F4A2BB, 0x05F436CF, 0xE9A0C8B7,
0xD21B864A, 0x54AB17BD, 0xE38B0C47, 0x79A39EE0, 0xBF04CB35, 0x5B27F2D9, 0xA26C0F5A, 0x023FE871,
0xADBB1C8D, 0x28A11B64, 0xE1302E70, 0x2725B3EE, 0xCD53962A, 0x4CB14D5A, 0x5DCF5926, 0xF0422432,
0x10BC250F, 0xB42FC381, 0xEF74D666, 0x645B605A, 0x5C9644F7, 0x2F520956, 0x022E456E, 0x938A54FA,
0x02295E3F, 0x2274FFF1, 0xD6482A4E, 0x2ED0D289, 0xB4910F2A, 0x7C2844BF, 0x57E43DB2, 0x0CF0BB92,
0x4C4A6551, 0x10484461, 0xB83C1DC1, 0xAEAC9F3E, 0xBFFD4DD9, 0xEDC2ADBB, 0x9CCA5BBD, 0x38C9FEF9,
0x7366F30A, 0xD2C0253C, 0x4FE44654, 0x32BA9535, 0x15C11484, 0x83621217, 0x07B51233, 0xC42D5EE2,
0x2B5A92B5, 0x2E0322EE, 0xBC90A537, 0x1F76BDD0, 0x821F1E60, 0xBB5E2A97, 0xAB9E91BB, 0x61C6B775,
0x3E0811A1, 0xA0EC4696, 0xBD98758F, 0x0F09EBAB, 0xA45FEE55, 0x0C97E07B, 0x97E83B29, 0xA140D735,
0x4ED5A2A8, 0xF25AFCDA, 0xD599F5BA, 0xD9811EA0, 0x259798B8, 0x1DC27987, 0xDADDE453, 0x44155F12,
0x15FFD7D2, 0xE5AD7B75, 0x81689720, 0x3002B9C6, 0x3FFD0479, 0x921A4C33, 0x07613253, 0xD729DEB7,
0xB1453181, 0x8EAE4454, 0x687945CB, 0xC9066E24, 0xEF740136, 0x3E480CC9, 0x595E537F, 0xCC96D88E,
0x7D3E276A, 0x86CC6BB3, 0x442659B7, 0x2AF9FCA1, 0x49A093E0, 0x6FAF85D3, 0xF8F363CB, 0xA6E9AC53,
0x5A4B85F6, 0xBE80C019, 0xE1885E08, 0x09C7BCD3, 0xE742E00B, 0xBBC8886A, 0xB71AE97C, 0x69FC4DE6,
0x07B3E838, 0xF1E769A0, 0x83077273, 0x73389D3B, 0xED478AF8, 0xFED38179, 0x65F99CD4, 0x23397FAE,
0x1194665A, 0x7895A7EC, 0xB7FF6CA3, 0x1A16415B, 0x0C71A4FA, 0x37291B64, 0xD893C03B, 0x06E491E7,
0x68CE71E0, 0x832E6457, 0xC13E3E58, 0xDE5E3EEA, 0x752955C9, 0x901487DD, 0x571F9234, 0xD35FDAD2,
0x86EBC300, 0x886D856C, 0xF4395FDC, 0x40CB706D, 0x716CA9CA, 0xF8E9E161, 0xE7CFFC60, 0x878CE2AA,
0xB0247CE7, 0x0AF6795A, 0x1CD6D24D, 0x9660CE91, 0x2896C734, 0x43E51A9F, 0xAA50E2B6, 0x0170BB89,
0x0A7BD881, 0x488D056C, 0x96127C2D, 0xF2A28577, 0x3C250228, 0xA8CBDC64, 0x002BE31D, 0x210E3ECF,
0xE4C6B808, 0xA72CE405, 0x69CDF067, 0x035512EE, 0xADCAB9EA, 0x95D3F12B, 0xD4B83A4F, 0x2EDD1857,
0xACF74798, 0x43FE446F, 0x7022F679, 0x179B1195, 0x709AD316, 0x488403A8, 0x38157EB7, 0xB5CE2750,
0x71F2AA5C, 0xAA48B1C4, 0xE1124C6B, 0xFF2EA2D0, 0x57840A94, 0x4A81179E, 0x53E2FA12, 0x1462A9A2,
0xDD361AA5, 0x61DC6CF0, 0x60B7308D, 0xB3938A0A, 0x3A72DDC4, 0xD3CA6348, 0xDCD667DC, 0x3AEF7E0E,
0x4513EB3E, 0xE02FC58B, 0x0744443F, 0x18FAEE12, 0x131B8126, 0x8CC83D6B, 0x97B19076, 0xE24FFB2F,
0x900489D6, 0x8D75141A, 0x9661E2CA, 0x1EB3AF28, 0xD04404F4, 0xDF9F559E, 0xE7B0F8F0, 0xE49179F7,
0xAA2E63F7, 0xFA5B5DF3, 0xB19D6E10, 0x19149357, 0xFBE8A488, 0x6AADC6F8, 0x7AFD6F0D, 0xAB583722,
0x10644431, 0xAF20D09A, 0xEE025A46, 0xB0DC5F77, 0x01BF3B9E, 0xC545A1D8, 0x88C25D8B, 0x34C2588B,
0x3ECA1AF5, 0xA67174B8, 0xE7AAB5B2, 0xC2D24A63, 0x240220E2, 0x3755BD79, 0x946818CD, 0x4D7A3DF3,
0x2FBEB825, 0x4877F84D, 0x44D66C5B, 0x3781D6B1, 0xD82F5408, 0xFF0BBF0A, 0x906BABE2, 0xD26588FB,
0x23EF583E, 0xC7E2C2B1, 0xF7194967, 0x41FF8804, 0x6C26A2A8, 0xECA20589, 0x9C9AF706, 0xE9D39305,
0x82DB5FA2, 0xB46DD348, 0x0BDF1796, 0xF5CBFEA4, 0x3CCDE738, 0x90B6AD5D, 0xE18E90DB, 0x7A4C639D,
0x30164160, 0x5F477A89, 0x8391C827, 0xCA39591C, 0x5D2A5E8F, 0xDE096E9C, 0xC7B9EAED, 0x8E995AAD,
0x49F78270, 0x2A0A06A0, 0x0D59B4A1, 0x8C468DAF, 0x188A5F5A, 0x042A046C, 0x6CF18FE0, 0x11561BBC,
0x038B273B, 0xF2C758D6, 0x870BBFA6, 0x1BF0945F, 0xC984561B, 0x2A5F3786, 0x542644FD, 0x33D29960,
0x41A99BEA, 0x655CE25C, 0xFF60AF4E, 0x771332BC, 0xAC9C6B99, 0x41D07D4E, 0x426B0782, 0x2CF04930,
0x6EA4A08A, 0xCDBC5B3D, 0xE2E1E0F7, 0x8CB1CC6A, 0x646E3524, 0x1874F91C, 0x6AD36E87, 0xE649A9FC,
0xACD87134, 0x3B3FCE3B, 0x4CC72A28, 0x156B9C7E, 0x97211158, 0x7B64B8E5, 0xF22AB8E9, 0xE3E8F795,
0xAF025C49, 0x36BB8118, 0xE7E9F17D, 0x15B5DDE2, 0x9F250A5D, 0xABDD38BC, 0xEFB04E1A, 0x186994F5,
0x86284E75, 0x97AA4AC4, 0xA8E5CD52, 0x8BAC3DDE, 0x722920E7, 0x8D1C7103, 0x29B24FE8, 0xECABDAB8,
0x75B2DB9E, 0xC34642CB, 0x69F06889, 0x4B2BFEDC, 0xE9C4A628, 0xBDAF413E, 0xB074A534, 0xB1A8DA88,
};
}
internal class WalpurgisCrypt : CxEncryption
{
public WalpurgisCrypt () : base (0x2C4, 0x757)
{
PrologOrder = new byte[] { 1, 0, 2 };
OddBranchOrder = new byte[] { 4, 3, 0, 5, 1, 2 };
EvenBranchOrder = new byte[] { 3, 2, 6, 0, 1, 5, 7, 4 };
}
protected override uint[] ControlBlock { get { return s_ControlBlock; } }
static readonly uint[] s_ControlBlock = {
0x9C91BADF, 0x8B8F868D, 0xDF919096, 0x8B91909C, 0xDF93908D, 0x9C90939D, 0xD2D2DF94, 0x9E8BACDF,
0x9E9C968B, 0xDF869393, 0x9BDF8D90, 0x929E9186, 0x939E9C96, 0xDFD38693, 0x9A8D969B, 0x86938B9C,
0xDF8D90DF, 0x969B9196, 0x8B9C9A8D, 0xDFD38693, 0x91968C8A, 0x978BDF98, 0x8FDF8C96, 0x8D98908D,
0x9EDF929E, 0x90D09B91, 0x939DDF8D, 0xDF949C90, 0x92908D99, 0x978B90DF, 0x8FDF8D9A, 0x8D98908D,
0xDF8C929E, 0x93939688, 0xDF9A9DDF, 0x9A939396, 0xDF939E98, 0x8BDF869D, 0x93DF9A97, 0x919A9C96,
0x9EDF9A8C, 0x9A9A8D98, 0x8B919A92, 0x4E7DDFD1, 0x897C337D, 0xB07C727C, 0x7F7C767C, 0x8A7C1D7D,
0x9D7C727C, 0x0F7DB17C, 0x3C6FBE7E, 0x3A7DB66C, 0x157D5F7D, 0xB66C516C, 0x5F7D3A7D, 0xBE7E157D,
0x256F436D, 0x3A7DB66C, 0x157D5F7D, 0x256F2B75, 0x3A7DB66C, 0x157D5F7D, 0x436EBE7E, 0x897C337D,
0xB07C727C, 0x7F7C767C, 0x187D567D, 0x5D7D8F68, 0x4E7D167D, 0x327D397D, 0xBC7C767C, 0x6C7CA57C,
0x367DA77C, 0x177D197D, 0x497D2974, 0x157D187D, 0x5D7D3B7D, 0x487D237D, 0xBCF5BD7E, 0x8D868F90,
0x8B979896, 0xD6BCD7DF, 0xCECFCDDF, 0xBEB4DFCF, 0xBEDFD1B6, 0x8DDF9393, 0x8B979896, 0x9A8DDF8C,
0x898D9A8C, 0xF5D19B9A, 0x7D5F7DF5, 0x7D816C16, 0x7E056C33, 0x7D936FBE, 0x73267755, 0x76337D9F,
0x7D576A09, 0x6E346C36, 0x6F306AAD, 0x7E4A7D98, 0x770371BE, 0x6F337D32, 0x7DA77E93, 0x718C740F,
0x7D487DBA, 0x7D397D16, 0x715B7D5D, 0x7D707369, 0x7DB17455, 0x7E427D54, 0x936FF5BD, 0x327D397D,
0x507D567D, 0x157D5C68, 0x8F71427D, 0x306A367D, 0x4A7D9A68, 0x557D377D, 0x1F7D187D, 0x0A73BE7E,
0xB776167D, 0x62710F7D, 0xBE7E407D, 0x1C70556C, 0x0A73367D, 0x0F7D2968, 0x5D7D076A, 0x447D427D,
0x8F71337D, 0xA96C327D, 0x0F7D9871, 0x636E856E, 0x467D4C7D, 0xBD7E427D, 0x7D936FF5, 0x71A96C55,
0x7D397D98, 0x6F177D37, 0x700F7D93, 0x7E5B7DAF, 0x7D447DBD, 0x7D327D15, 0x7D167D23, 0x7D936F3A,
0x69B67033, 0x730F7D69, 0x7D5971A4, 0x7D3B7D4A, 0x7D167D5D, 0x7D337D56, 0x7D5B7D19, 0x730A7337,
0x7D3A7D96, 0x7D5F7D1F, 0x7E427D3E, 0x6FF5F5BD, 0x6A557D93, 0x7D447630, 0x76427D4A, 0x6A507D44,
0x70337D57, 0x7D9C6DA8, 0x7D59680F, 0xDF167D5D, 0x336EAC7D, 0x4476337D, 0x576A507D, 0x7EDF327D,
0x7C8B7C88, 0x7CA47EB7, 0x7CBC7C88, 0x7CBA7C72, 0xDF877EA6, 0x4369397D, 0x177D1970, 0x9A75BE7E,
0x367DA77E, 0xBE7C327D, 0x767C8A7C, 0x7F7C917C, 0xA96C337D, 0x337D9871, 0x0F7D4369, 0x4A7D5A75,
0x5D7D3B7D, 0xBD7E427D, 0x7D216BF5, 0x7D557D18, 0x7D4E7D38, 0x73187D56, 0x7E157D44, 0x7D4276BE,
0x6C256933, 0x710F7DB6, 0x7D3E7D62, 0x7D936F3B, 0x7DAF700F, 0x7D337D5B, 0x7D9C7E56, 0x7D157D44,
0x7D237D32, 0x7D556A41, 0x7D187D56, 0x7E5D7D37, 0x417DF5BD, 0xBE7E557D, 0x196E6071, 0x447D367D,
0x2777337D, 0x487D836A, 0x547D287D, 0x2272496E, 0xBE7E327D, 0x337D936F, 0xBA755D6F, 0x9C670F7D,
0x3B7D207D, 0x3E7D5D7D, 0xBD7E427D, 0x7D1B7DDF, 0x7D527D3E, 0x7D397D17, 0x7E557D41, 0x719275BE,
0x7E367D3F, 0x7DF5F5BD, 0x7D4A7D44, 0x6A09763B, 0x7D427D57, 0x7D557D40, 0x7D427D1F, 0x6B487D18,
0x7D3A6995, 0x6F187D56, 0x7DBA755D, 0x7D81740F, 0x7D427D5B, 0x7E367D20, 0x732677BE, 0x68367D9F,
0x73407D58, 0x7D567D03, 0x69167D59, 0x6FBF697D, 0x7D927112, 0x6F18770F, 0x7D487D53, 0x76887516,
0x6F557D7F, 0x7D586822, 0x7D157D4C, 0xF5BD7E16, 0x337D447D, 0x7F768875, 0x4C74367D, 0x397D8B71,
0x3B7D4A7D, 0x936F1A71, 0x557D0973, 0x317D3B73, 0x427D157D, 0x447D9C7E, 0x567D4E7D, 0x576A187D,
0x327D1573, 0x237D9171, 0xBD7E167D, 0xE418F5F5, 0x5855C1E9, 0x0F7B077A, 0xA3587DF1, 0xD8245F50,
0xAA38C449, 0xB2E5B613, 0x10D3855C, 0xECAABBA2, 0xA5B0D57F, 0xF4F9A753, 0x6B1B173B, 0xEC955CD0,
0x7BD4C507, 0x55952A45, 0x3628D124, 0x5EB27966, 0xF3FC4226, 0x0E9E1724, 0x40F9F8AA, 0x776B886C,
0x7598325A, 0x1DC64A71, 0x6D1F874C, 0x5B812BA2, 0x5D793B23, 0x98D4DE2B, 0xD3F4568C, 0x4BA1B8BA,
0x730BADCD, 0xC748FD9A, 0xE7157887, 0x7729E399, 0xE967E416, 0xFA2B7FD2, 0xC3D08FAB, 0xF7DBF012,
0xBB7345A4, 0x75D0C47E, 0xC18DF4A6, 0xDBF614F1, 0x4D9F0588, 0x56F40E9C, 0xAB27708F, 0xB5AD30B1,
0xFC3B4413, 0x3BC84DDA, 0x01CCC334, 0xEF5F1A43, 0xE596EC03, 0x7B39364C, 0x9242B02A, 0x1C532415,
0x67C4E337, 0xD4FD4395, 0x2E80AC3C, 0x5A491010, 0x50BC0A3A, 0x1663BE1E, 0xE9E632DB, 0xEBC86067,
0x9490B21A, 0x293EFEC1, 0x38F45171, 0x5AC44996, 0xD401738D, 0x7C81AB7D, 0xA0C2D8ED, 0xA2423B69,
0x38E70130, 0x60046F9F, 0x7A6D2E84, 0xEACBD890, 0x653C6007, 0xC1A63D7C, 0x1184AC97, 0xBAA3731C,
0x75F6ECDD, 0xCB228299, 0x4FAE4014, 0xC5863B64, 0xB1750EB1, 0xF3CA715E, 0x3354A77A, 0x9C3AA37D,
0xEAD8E9ED, 0x15ABE5C6, 0xFA667916, 0xBDD94BD5, 0x181C2E7E, 0x90662F5E, 0xE877AD75, 0xC77ED233,
0x6D67CAE9, 0x986B1D6A, 0x5E70CE82, 0x9365CB3F, 0xCD9DF4BD, 0x2B1D3D79, 0x904DCCE5, 0xFA594694,
0x8923605A, 0x395BEB43, 0xC4115B86, 0x8375BF0D, 0x8465ECBB, 0x1A6C48C1, 0x43B292FF, 0x0059F91F,
0x1B7F7220, 0x1AE08F4E, 0xF70BDC41, 0x844294B6, 0x3F787DFF, 0xEC1040F7, 0x19FFB6E5, 0x4E4E2C80,
0x0114CB07, 0x760C64F0, 0x791FB43B, 0x3BAE624D, 0x69C58E7C, 0x4AFE7A9C, 0x96F85CB7, 0xB7C3B5DE,
0x18BBDC5B, 0x792AEEFF, 0xFFA7C7E8, 0x2A8C40BF, 0x897E7E14, 0x1DDB7D94, 0xD78E63BF, 0x691C84A1,
0x92B73490, 0xC54530B8, 0x9317A22A, 0x79556E27, 0x91782C90, 0x0835C7B9, 0x671E98C5, 0x3DEBCC47,
0xA1668E99, 0xEEC12A48, 0x3C633E4D, 0x93F31999, 0xA57D1F2A, 0x49C707C9, 0xCC7EF17B, 0x99C0767B,
0x762620D5, 0x1FDF0544, 0x827AD289, 0xDBF9AD6A, 0x8B797E54, 0xDBB85373, 0xFA85E56F, 0xA1122BA8,
0x97CCCEFA, 0x419B5700, 0xC33601D3, 0x22B67C56, 0x501E97FF, 0xF8DB804E, 0x4D2411AC, 0x92D9FD1F,
0x3A9EE6C1, 0xFCB0F37D, 0x5CED169D, 0x53383B8A, 0x230539F6, 0x6F3ECFB2, 0xA33402F9, 0x96B85EA3,
0xD289F49A, 0xDC0218D4, 0xA7F2DDB3, 0x96350399, 0x6761DC70, 0x822E2CEE, 0xC0D2B008, 0x52AB265F,
0x4BEA6E63, 0xF3E2E0DD, 0x5834CACC, 0x52D3B1D6, 0x35E5E5A3, 0x6B203081, 0x57BE6FFA, 0xAA6BEEBB,
0x0198F5E6, 0xE9CC50EC, 0x9DBCC1EF, 0x0361D842, 0xA63EF46C, 0x52795D93, 0x187BCD57, 0xAC71B9CC,
0x6867ACDA, 0xC17A2CFF, 0x28910F0D, 0xE79B4A75, 0x3E86E729, 0x47C6F6F9, 0x9DF62818, 0xC18D3742,
0xE0C6DA5E, 0x8DE1A1C1, 0xFCB72DF0, 0xF7E94544, 0x1C8387A1, 0x5D03A736, 0x9C36079E, 0x003D1208,
0x4A4138D1, 0x1BA18B5A, 0xD21A12E3, 0x456EE383, 0x4BE5F876, 0x8E57C676, 0x37C08E87, 0x3A7DA308,
0x3CDEE98D, 0xD4C9BEAE, 0x97575F9B, 0x538B27B0, 0x54D94CCA, 0x3F552A60, 0x0F948D70, 0xEE2FABD5,
0x80A23AC9, 0x8C100E3B, 0x6B72A328, 0x9BCC54F6, 0x780BCE78, 0x87BBD3DE, 0xFB504FCF, 0xC6382CB0,
0xB4FBF823, 0x141C79AC, 0x126F2695, 0xD72998A9, 0x2BC00748, 0x2085DC6E, 0xD4FA4D06, 0x27260F04,
0xF58698BD, 0x7BBE1AEA, 0x96CC1F2D, 0x6B46CA1C, 0x34A76FED, 0x0A6A8E3D, 0x5D59EA75, 0x26E2EE3A,
0x2FCAFEDD, 0xF932B777, 0xA4A521A5, 0x9733C1DF, 0x5CB15407, 0xE94BADB7, 0x745B46A4, 0xFD928A77,
0xE94AF9FC, 0xA3E29101, 0x9A2EF61C, 0x45ABFE9B, 0xE9F3F322, 0x91FA7AAE, 0xE32F6E9D, 0x2999137B,
0x00860239, 0x3972E7C5, 0xC01A6D6E, 0xA0D7EE25, 0xF8464535, 0x11F0B1B4, 0x716CC952, 0xD08375B1,
0x96689233, 0x3AC4A6AA, 0x4B19E877, 0x4A0B3B11, 0x56EBFF25, 0xA5E43B88, 0x51C77810, 0x42CC87C3,
0xF18A4BF4, 0x9E64D1B3, 0x6B434AEA, 0x55D5FB0D, 0x88BF9190, 0x644A1B81, 0xA16F7022, 0x0F98CC43,
0x581F3B61, 0xCBCC9B1E, 0xBDE1B266, 0xEC841EF2, 0x154CDA14, 0x8FF283B6, 0xFB137A90, 0x717BC3B3,
0x8EC4AF5C, 0x4120B228, 0xCAA4988B, 0x768E8127, 0xEB559275, 0xA7041EB7, 0xE8C93ECD, 0x7E32997E,
0x2FA7DC83, 0x3DF2C2B7, 0x15BB634F, 0x1958BF3F, 0x65DF5D2C, 0xA66814C2, 0x575760B6, 0xF7B663CD,
0x855F25E0, 0xBA7EF0E0, 0x9150B418, 0x94712BE7, 0x0DC59CD4, 0x4442BBC0, 0x3AEDFF17, 0x5B3F77C4,
0x159EE967, 0xCB3C9060, 0x19FAE916, 0x63D6D989, 0x92929D3B, 0xE46003C6, 0xEA68B9A7, 0x23AD12E4,
0x1214B44B, 0xC1648E24, 0xB7FC4DE8, 0x40AEC48D, 0x6919D7D8, 0xC67D0795, 0xDE108587, 0x87D0D1C8,
0x09EEFB3A, 0x2B868642, 0x1D028503, 0xFC5D4883, 0x2AE0411F, 0xD381601B, 0xF7A93597, 0xE8A03AC9,
0x02C2A33D, 0xB15C8E7E, 0xBE6AA25E, 0x5A8427AB, 0x1EBFFA40, 0xB38DA2BF, 0x96746A32, 0x8505923B,
0x55D539FB, 0xE8236816, 0xB5F8732A, 0x136EE66F, 0x78D48F56, 0x3902102A, 0x541D818E, 0xC78FD59E,
0xC25548D4, 0x61FCC207, 0xCCA00282, 0x22D47064, 0xD8717B69, 0x649B521B, 0xC87EB1CD, 0x548C426D,
0xA81E88A7, 0x690C88E7, 0x373E1371, 0xAA985E4E, 0xDA9A5FED, 0xF0EDD3FE, 0xF5599E10, 0xFF883063,
0xCF769B7C, 0x7A1E8EF9, 0x962FDBEA, 0xAC0C4619, 0x046D6042, 0xC44CE77F, 0xFA212720, 0x456890D3,
0xFDD4905A, 0xE9DB583D, 0x87C8E54E, 0xD2ABEBB0, 0xCBF048B4, 0x7148C0B1, 0x60B19AC3, 0xE1BC946D,
0x6594A1B4, 0xB6A7151E, 0xE0CC2D6B, 0x055E77BB, 0x9E3BD179, 0x491AF6E6, 0x2F619C2F, 0x3915A45C,
0xA3120756, 0x1F255C43, 0x292AE6F8, 0x29B8D74A, 0x5ACFEFB6, 0xC5BA661D, 0x5A8792EF, 0x8FEB6B0B,
0x02272389, 0x8D520780, 0xC0BC3669, 0xDF085DDD, 0xC4CA84C9, 0x8DDCD1EC, 0x3D13DD8F, 0xD1E57ACB,
0xF59544D5, 0x94D4D743, 0x0289E632, 0xF35BBE5C, 0xA2C44D91, 0x040E29AA, 0xB591F756, 0xA914C2AF,
0x314E752A, 0x87223AB8, 0x4A0244ED, 0x0D6A13A0, 0xA254C0C4, 0x393A5AA7, 0x0808D977, 0x3C071C72,
0x91AA7DE6, 0x61DE1B86, 0xC916C364, 0xFF5839E8, 0x912B2504, 0x98084B62, 0xE800B711, 0xEEF8A2EC,
0xA0029054, 0x4D049080, 0xE2B0C68A, 0x5CF4C335, 0xA5E59DC3, 0xB65B9304, 0x04E720AE, 0xCDCB56B2,
0xA2AA3B28, 0x2EFD9A26, 0x31269C83, 0x5F7C837F, 0x93DF22DD, 0xE842E161, 0xF7A99044, 0xC3E56753,
0xDA11F984, 0x18DDFAA3, 0x4D7C3D98, 0x2157376F, 0x499A3088, 0xFB3860FB, 0xF8B03FB7, 0xE41180BE,
0x764302F7, 0xC5F5584D, 0xBE1E2094, 0xE4A7F906, 0x65DBEAF8, 0x2D637C7F, 0x280221A5, 0x84CC7B78,
0xBF4679FA, 0x30548C78, 0x71A965AC, 0x7850CCE0, 0xAB4F61CE, 0xD4A77595, 0x27BB16AA, 0x70789815,
0xEA1F2B41, 0xFE311834, 0x86211CEF, 0xECDA74A9, 0xA2BDE105, 0x01A24EA5, 0xCEFBA9BB, 0xE57BD8B8,
0x293DE400, 0xFF339AAC, 0xF33B3FEB, 0x65C01C98, 0xF96DF494, 0x06A0032F, 0x7559633B, 0xB6E2A69C,
0x1A8A1C14, 0xF328AB36, 0xAD93F268, 0xFAA59EFF, 0x8A9F90AF, 0xCD59ACDE, 0xDEDAF78A, 0xF4959AD9,
0xC5F03307, 0xFE1F74E7, 0x7544D89B, 0x3898D08C, 0x1E8153F7, 0xFBDE0D1F, 0x692FB7B1, 0xF23BF8B3,
0x32F2CA8E, 0xCA61053C, 0x78E6BE24, 0x9ED63418, 0x686EDDC5, 0x776E66C4, 0xDFF39BB8, 0x16B7ECEA,
0xD2AE6CDB, 0x65934FA2, 0x7EFA5E61, 0xC28835FA, 0x982974F5, 0xBE142660, 0x063E9D92, 0xB81565FC,
0x8040FF8D, 0x4E352A70, 0x3C30AFAA, 0x797F7EC5, 0xC9A58037, 0x8A0922B1, 0x93A7618C, 0x285138CF,
0x9940569C, 0xAD842D38, 0x62A162B5, 0x224C24F5, 0xB43E0EDC, 0xD5DEF08E, 0x222D7772, 0xF6106939,
0xE2B1007E, 0x577ADA0A, 0x0E141520, 0x4BBD9AF8, 0xFACEADEF, 0x2F61908C, 0x4FFDA94A, 0x5CE578F9,
0x3B4447E5, 0xDE3BE0A2, 0xC6BB428A, 0xDCC8BAA0, 0x3D2C977A, 0x9AA0E03F, 0x21E08188, 0x3F0C91BC,
0xF29132EF, 0x7F286998, 0x11C44EBB, 0xE7522002, 0xD7C96EAD, 0x8E012562, 0x0908730A, 0xF37F4819,
0x52633625, 0xA1DF4D9C, 0x5FDBDC28, 0x3DEA1F5D, 0x200014EC, 0x759435DF, 0x29374D1A, 0x64F674E5,
0xDEEC207E, 0xEC59FC6E, 0x3DC7C9F1, 0x5C0DCB08, 0x5DEEA73F, 0x206D61CC, 0xC61BCC70, 0xBCD25371,
0x1ADB2A5A, 0x306A635C, 0x22B85F64, 0x9A611F9B, 0xEC55AFAF, 0x5F8215E8, 0xECFA67AE, 0xB36181B8,
0x73DCCC09, 0xE9A281CB, 0x849FC579, 0xFB4CF7A8, 0x19B911B2, 0xED4DE9A3, 0xCA9952B1, 0xAA9D83E3,
0xF3863991, 0xD2D0EAFF, 0x12130B23, 0x0F6E966E, 0xAC889E14, 0x72F1A314, 0x413AAFD8, 0x606C1FC5,
0x8D9E90FC, 0xCE6CCE66, 0x7A6E8096, 0x2491FE56, 0x27C9E2A3, 0xBFEBEF50, 0x69B84656, 0x3E5FD2E0,
0x36524CF8, 0x21DC206C, 0xD6F2AD6C, 0x20F09DF7, 0x3D82A566, 0xD5F8BEAA, 0x8C5B62CF, 0x6AC5DAE0,
0x4A7E53E6, 0xB53036B9, 0x58FB09B0, 0xD96C0BE2, 0x7636A0D0, 0xEE0E675E, 0x99AAF6E2, 0xB7270E1C,
0x1369474E, 0xB5E5995F, 0xA1E635D4, 0x1D57DF67, 0xDBD1E043, 0xF2CF6D16, 0x41D39259, 0x22EE5E19,
0x565609E6, 0xC5244ADF, 0xCE084F3C, 0x2AAC5970, 0xF16EE209, 0x72CDD167, 0xDEC3F17A, 0x66D87D56,
0x4507638F, 0xC6D2C821, 0x38A4A132, 0xA6542711, 0x159060A8, 0xC040C052, 0xF6D3CC7B, 0xE9E55492,
0x7DD5FB28, 0x4710BECF, 0x64A911F0, 0xB8E13220, 0xA36C4FA8, 0x5650D1C4, 0xFD788567, 0x3C9E8C71,
0x9807B47A, 0xAF2AC13C, 0x3271B069, 0x6D24D008, 0xF51C1066, 0x0B50DB66, 0x50A06E4B, 0xE07BB80C,
0x9DA46F2B, 0x145B24D6, 0x7D020D90, 0xC42AB2E4, 0x3DBAADAD, 0xE14F9B5F, 0x4BBA116D, 0xBB8B4860,
0xFBD7245C, 0xC787A549, 0xA04FE281, 0x63A975DA, 0x5ADEB3C8, 0x9818807E, 0xB31E37FF, 0xB6DE1529,
0xA1404B6B, 0x46FFE0BC, 0x4FC6D385, 0x9EC773BF, 0x6807D5A6, 0xEBA12141, 0xBC5094A1, 0xA2AEB853,
0x692218A3, 0x38C05882, 0xEA53C30F, 0x06D23FFD, 0xFE64336C, 0xD2CF8252, 0x45C037DD, 0x3E60B4DD,
0xC9831838, 0x0481D31B, 0x8D7B4FC3, 0x5808AE40, 0xA20EDC61, 0x6FAFE585, 0xD60C1DAA, 0xF357B98B,
0x2153C6CC, 0x3A3BFD31, 0xD260836A, 0x7A4FFB2F, 0x72CA0680, 0xC13EF5DD, 0xB8BB7C6A, 0xD810F198,
0xCFEB5A3D, 0x178B319D, 0x3E22934E, 0x42CCC19C, 0xF9C9E86B, 0xF4A10A85, 0x5D51C9BC, 0xBEF6356C,
0x1D654666, 0xC6014560, 0xF0293175, 0x6EDF8384, 0xBF6AE2C2, 0x6E6CF958, 0xE35065BC, 0x73FDC61B,
0xC0026A7B, 0xD8548B7A, 0x75106D00, 0xBC138512, 0x3876C161, 0xC45D44A9, 0x25A48AAE, 0xB45826E6,
0x6B75FF9E, 0x63AB03A8, 0x56442D69, 0xD362721D, 0x43313F10, 0x3270858C, 0xABE62F09, 0x53973FB9,
};
}
/* CxEncryption base branch order
OddBranchOrder
{
case 0: SHR_EAX_CL
case 1: SHL_EAX_CL
case 2: ADD_EAX_EBX
case 3: NEG_EAX; ADD_EAX_EBX
case 4: IMUL_EAX_EBX
case 5: SUB_EAX_EBX
}
EvenBranchOrder
{
case 0: NOT_EAX
case 1: DEC_EAX
case 2: NEG_EAX
case 3: INC_EAX
case 4: MOV_EAX_INDIRECT
case 5: OR_EAX_EBX
case 6: XOR_EAX_IMMED
case 7: ADD_EAX_IMMED
}
*/
}