// Methods
        public static gamecard_info DecryptGamecardInfo(xci_header header, Aes aes)
        {
            // REVERSE THA IV
            byte[] iv_flipped = new byte[XCIManager.XCI_IV_SIZE];
            Array.Copy(header.GamecardIV, iv_flipped, XCIManager.XCI_IV_SIZE);
            Array.Reverse(iv_flipped);

            // GameCardInfo Decrypt
            var decrypt        = aes.CreateDecryptor(XCIManager.XCI_GAMECARDINFO_KEY, iv_flipped);
            var gcInfoStream   = new MemoryStream(header.GamecardInfo);
            var gcCryptoStream = new CryptoStream(gcInfoStream, decrypt, CryptoStreamMode.Read);

            // Create the struct
            XCIManager.gamecard_info gamecardInfoStruct = Utils.FromStream <XCIManager.gamecard_info>(gcCryptoStream);

            // Clean stuff up
            gcInfoStream.Close();
            gcCryptoStream.Close();
            decrypt.Dispose();

            return(gamecardInfoStruct);
        }