#!/usr/bin/env python3

import sys

key = b'\xac\x78\x3c\x9e\xcf\x67\xb3\x59'

filename = sys.argv[1]

def decrypter(reference):
    n = len(key)
    def decrypt(value, offset):
        nonlocal n, reference
        return value ^ key[(offset-reference)%n]

    return decrypt

with open(filename, 'rb') as f:
    s = bytearray(f.read())
    n = s[0x87]
    d = n + 0x88
    end = len(s)

    decrypt = decrypter(s.find(key))
    sys.stdout.buffer.write(bytes(s[0:d]))

    while d < end:
        stop = min(d + 4096, end)
        for offset in range(d, stop):
            s[offset] = decrypt(s[offset], offset)

        sys.stdout.buffer.write(bytes(s[d:stop]))
        d = stop