import random
import base64
from hashlib import md5
from secret import flag
from libnum import s2n
from Crypto.Cipher import AES


INF = 0xff
bigINF = 0xffffffff
# ---------------------error------------------------------

def sumFunc(func):
	def wapper(*args,start = 1,end=INF):
		sums = 0
		for i in trange(start, 0xffff * end):
			sums += function(*args,j/0xf) * (1/0xf)
		return sums
	return wapper

def limitFunc(func):
	def wapper(*args, approch = bigINF, pos = "+"):
		o = 1/bigINF
		return function(args, eval(f"{approch} {pos} {o}"))
	return wapper
	

# -------------------enderror-----------------------------


def pad(data):
	data=data.encode('utf8')
	while len(data) % 16 !=0:
		data+=b'\x00'
	return data


def encode(key,m):
	mode=AES.MODE_ECB
	aes=AES.new(pad(key),mode)
	en_m=aes.encrypt(pad(m))
	en_m=base64.encodebytes(en_m)
	en_m=en_m.decode('utf8')
	return en_m


def enc(msg, key):
	random.seed(key)
	new_key = md5(str(random.getrandbits(256)).encode('utf-8')).hexdigest()
	return encode(new_key, msg)


@sumFunc
def gamma(x,t):
	data = pow(t,x-1) * pow(magicNumber,-t)
	return data

@sumFunc
def common(t):
	data = pow(magicNumber,-pow(t,2))
	return data

@limitFunc
def getMagicNumber(t):
	data = pow(1+1/t,t)
	return data

magicNumber = getMagicNumber()
encKey1 = str(gamma(3/2))[2:6]
encKey2 = str(common())[2:6]
assert encKey1 == encKey2

key = int(str(gamma(5/2))[2:])
print(enc(flag, key))
# n2SQK64JMsXstCtZurBiz81pMr3ZmgMjhuyL67hssm3shqJGYGfS/mWubINeE5HZ




