diff --git a/rattletrap.cabal b/rattletrap.cabal
--- a/rattletrap.cabal
+++ b/rattletrap.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.2
 
 name: rattletrap
-version: 12.1.0
+version: 12.1.1
 synopsis: Parse and generate Rocket League replays.
 description: Rattletrap parses and generates Rocket League replays.
 
@@ -54,7 +54,7 @@
 
   autogen-modules: Paths_rattletrap
   build-depends:
-    , aeson >= 2.0.3 && < 2.2
+    , aeson >= 2.0.3 && < 2.3
     , aeson-pretty >= 0.8.9 && < 0.9
     , array >= 0.5.4 && < 0.6
     , bytestring >= 0.11.3 && < 0.12
diff --git a/src/lib/Rattletrap/Data.hs b/src/lib/Rattletrap/Data.hs
--- a/src/lib/Rattletrap/Data.hs
+++ b/src/lib/Rattletrap/Data.hs
@@ -106,6 +106,7 @@
         "TAGame.Default__CameraSettingsActor_TA",
         "TAGame.Default__PRI_TA",
         "TAGame.GameEvent_Football_TA",
+        "TAGame.GameEvent_FTE_TA",
         "TAGame.GameEvent_GodBall_TA",
         "TAGame.GameEvent_Season_TA",
         "TAGame.GameEvent_Soccar_TA",
@@ -193,6 +194,7 @@
         ("Archetypes.GameEvent.GameEvent_BasketballPrivate", "TAGame.GameEvent_SoccarPrivate_TA"),
         ("Archetypes.GameEvent.GameEvent_BasketballSplitscreen", "TAGame.GameEvent_SoccarSplitscreen_TA"),
         ("Archetypes.GameEvent.GameEvent_Breakout", "TAGame.GameEvent_Soccar_TA"),
+        ("Archetypes.GameEvent.GameEvent_FTE_Part1_Prime", "TAGame.GameEvent_FTE_TA"),
         ("Archetypes.GameEvent.GameEvent_Hockey", "TAGame.GameEvent_Soccar_TA"),
         ("Archetypes.GameEvent.GameEvent_HockeyPrivate", "TAGame.GameEvent_SoccarPrivate_TA"),
         ("Archetypes.GameEvent.GameEvent_HockeySplitscreen", "TAGame.GameEvent_SoccarSplitscreen_TA"),
@@ -225,6 +227,7 @@
         ("GameInfo_Breakout.GameInfo.GameInfo_Breakout:GameReplicationInfoArchetype", "TAGame.GRI_TA"),
         ("GameInfo_FootBall.GameInfo.GameInfo_FootBall:Archetype", "TAGame.GameEvent_Football_TA"),
         ("GameInfo_FootBall.GameInfo.GameInfo_FootBall:GameReplicationInfoArchetype", "TAGame.GRI_TA"),
+        ("GameInfo_FTE.GameInfo.GameInfo_FTE:GameReplicationInfoArchetype", "TAGame.GRI_TA"),
         ("gameinfo_godball.GameInfo.gameinfo_godball:Archetype", "TAGame.GameEvent_GodBall_TA"),
         ("GameInfo_GodBall.GameInfo.GameInfo_GodBall:Archetype", "TAGame.GameEvent_GodBall_TA"),
         ("gameinfo_godball.GameInfo.gameinfo_godball:GameReplicationInfoArchetype", "TAGame.GRI_TA"),
diff --git a/src/lib/Rattletrap/Utility/Json.hs b/src/lib/Rattletrap/Utility/Json.hs
--- a/src/lib/Rattletrap/Utility/Json.hs
+++ b/src/lib/Rattletrap/Utility/Json.hs
@@ -1,4 +1,6 @@
-{- hlint ignore "Avoid restricted flags" -}
+{- hlint ignore "Avoid restricted extensions" -}
+{-# LANGUAGE CPP #-}
+
 module Rattletrap.Utility.Json
   ( module Rattletrap.Utility.Json,
     Aeson.FromJSON (parseJSON),
@@ -33,7 +35,11 @@
   Aeson.Parser (Maybe value)
 optional object key = object Aeson..:? Key.fromString key
 
+# if MIN_VERSION_aeson(2, 2, 0)
+pair :: (Aeson.ToJSON value, Aeson.KeyValue e pair) => String -> value -> pair
+# else
 pair :: (Aeson.ToJSON value, Aeson.KeyValue pair) => String -> value -> pair
+# endif
 pair key value = Key.fromString key Aeson..= value
 
 decode :: (Aeson.FromJSON a) => ByteString.ByteString -> Either String a
diff --git a/src/test/Main.hs b/src/test/Main.hs
--- a/src/test/Main.hs
+++ b/src/test/Main.hs
@@ -57,6 +57,7 @@
     ("0416", "v1.78 demolition"), -- https://github.com/tfausak/rattletrap/pull/164
     ("07e9", "a game mode before Neo Tokyo"), -- https://github.com/tfausak/rattletrap/commit/b806f9b
     ("0ad2", "some Latin-1 text"), -- https://github.com/tfausak/rattletrap/commit/13a8b2d
+    ("0ae9", "fte"), -- https://github.com/jjbott/RocketLeagueReplayParser/issues/50
     ("0ca5", "with QQ remote ID"), -- https://github.com/nickbabcock/boxcars/pull/69
     ("0e76", "v1.95 rumble"), -- https://github.com/tfausak/rattletrap/pull/237
     ("1205", "rumble mode"), -- https://github.com/tfausak/rattletrap/commit/5256500
