Rating: 3.0

1. Google for the constants from the python file (0.4829629131445341, 0.8365163037378077, 0.2241438680420134, -0.12940952255126034])
2. Find a few pages on Daubechies Wavelets and Discrete Wavelet Transforms (the wikipedia article on DWTs has an image with a similar structure to the given one)
3. At this point, we tried dumping the original image to disk, trying to do a single-pass inverse discrete wavelet transform (iwdt), and messing around with switching up some of coefficients/quadrants in the algorithm
a. In some cases, we could make out the flag's VolgaCTF{ header, but the rest of the flag was still too distorted or noisy to read
4. We ended up scripting an inverse wavelet transform that iteratively reconstructed the image: [https://gist.github.com/wwong/6a812908a3a06d884ce4b1547c5aeb54](https://gist.github.com/wwong/6a812908a3a06d884ce4b1547c5aeb54)
1. Starting at the top-left 4px by 4px square: reconstruct the image and replace the input section with its own result (plus some padding for alignment)
1. A 4x4 square was the smallest size we could start reconstructing the image
2. We originally padded the wrong ends of the output, which left us with an image that looked like it had been smeared up and left by a few pixels. Switching up the padding fixed that
2. Keep expanding the area we process until we process the whole image
3. Clamp values to something that sci-kit image will export (any |value| < 1)
4. Dump image to file and get the flag