public static void LoadProfiles(bool onlyUserProfiles)
        {
            var origProfiles = Directory.GetFiles("GameProfiles\\", "*.xml");

            Directory.CreateDirectory("UserProfiles");
            var userProfiles = Directory.GetFiles("UserProfiles\\", "*.xml");

            List <GameProfile> profileList     = new List <GameProfile>();
            List <GameProfile> userprofileList = new List <GameProfile>();

            if (!onlyUserProfiles)
            {
                foreach (var file in origProfiles)
                {
                    var gameProfile = JoystickHelper.DeSerializeGameProfile(file, false);

                    if (gameProfile == null)
                    {
                        continue;
                    }

                    var isThereOther = userProfiles.FirstOrDefault(x => Path.GetFileName(x) == Path.GetFileName(file));
                    if (!string.IsNullOrWhiteSpace(isThereOther))
                    {
                        var other = JoystickHelper.DeSerializeGameProfile(isThereOther, true);

                        if (other == null)
                        {
                            continue;
                        }

                        if (other.GameProfileRevision == gameProfile.GameProfileRevision)
                        {
                            other.FileName = isThereOther;
                            other.IconName = "Icons/" + Path.GetFileNameWithoutExtension(file) + ".png";
                            other.GameInfo = JoystickHelper.DeSerializeDescription(file);
                            profileList.Add(other);
                            continue;
                        }
                        else
                        {
                            //woah automapper
                            Debug.WriteLine("gameprofile " + gameProfile.GameProfileRevision + " userprofile " + other.GameProfileRevision);

                            for (int i = 0; i < other.JoystickButtons.Count; i++)
                            {
                                var button = gameProfile.JoystickButtons.FirstOrDefault(x => x.ButtonName == other.JoystickButtons[i].ButtonName);

                                if (button != null)
                                {
                                    button.DirectInputButton = other.JoystickButtons[i].DirectInputButton;
                                    button.XInputButton      = other.JoystickButtons[i].XInputButton;
                                    button.RawInputButton    = other.JoystickButtons[i].RawInputButton;
                                    button.BindNameDi        = other.JoystickButtons[i].BindNameDi;
                                    button.BindNameXi        = other.JoystickButtons[i].BindNameXi;
                                    button.BindNameRi        = other.JoystickButtons[i].BindNameRi;
                                    button.BindName          = other.JoystickButtons[i].BindName;

                                    // Clear DolphinBar binds without DevicePath
                                    if (button.BindNameRi != null && button.BindNameRi.Contains("DolphinBar") && string.IsNullOrWhiteSpace(button.RawInputButton?.DevicePath))
                                    {
                                        var riButton = new RawInputButton
                                        {
                                            DevicePath  = "",
                                            DeviceType  = RawDeviceType.None,
                                            MouseButton = RawMouseButton.None,
                                            KeyboardKey = Keys.None
                                        };

                                        button.RawInputButton = riButton;
                                        button.BindNameRi     = "";
                                    }
                                }
                            }

                            for (int i = 0; i < gameProfile.ConfigValues.Count; i++)
                            {
                                for (int j = 0; j < other.ConfigValues.Count; j++)
                                {
                                    if (gameProfile.ConfigValues[i].FieldName == other.ConfigValues[j].FieldName)
                                    {
                                        gameProfile.ConfigValues[i].FieldValue = other.ConfigValues[j].FieldValue;
                                    }
                                }
                            }

                            gameProfile.FileName = isThereOther;
                            gameProfile.IconName = "Icons/" + Path.GetFileNameWithoutExtension(file) + ".png";
                            gameProfile.GameInfo = JoystickHelper.DeSerializeDescription(file);
                            gameProfile.GamePath = other.GamePath;
                            JoystickHelper.SerializeGameProfile(gameProfile);
                            profileList.Add(gameProfile);
                            continue;
                        }
                    }
                    gameProfile.FileName = file;
                    gameProfile.IconName = "Icons/" + Path.GetFileNameWithoutExtension(file) + ".png";
                    gameProfile.GameInfo = JoystickHelper.DeSerializeDescription(file);
                    profileList.Add(gameProfile);
                }

                GameProfiles = profileList.OrderBy(x => x.GameName).ToList();
            }

            foreach (var file in userProfiles)
            {
                var gameProfile = JoystickHelper.DeSerializeGameProfile(file, false);
                if (gameProfile == null)
                {
                    continue;
                }
                var isThereOther = origProfiles.FirstOrDefault(x => Path.GetFileName(x) == Path.GetFileName(file));
                if (!string.IsNullOrWhiteSpace(isThereOther))
                {
                    var other = JoystickHelper.DeSerializeGameProfile(isThereOther, true);
                    if (other == null)
                    {
                        continue;
                    }

                    if (other.GameProfileRevision == gameProfile.GameProfileRevision)
                    {
                        gameProfile.FileName = file;
                        gameProfile.IconName = "Icons/" + Path.GetFileNameWithoutExtension(file) + ".png";
                        gameProfile.GameInfo = JoystickHelper.DeSerializeDescription(file);
                        userprofileList.Add(gameProfile);
                        continue;
                    }
                    else
                    {
                        other.FileName = isThereOther;
                        other.IconName = "Icons/" + Path.GetFileNameWithoutExtension(file) + ".png";
                        other.GameInfo = JoystickHelper.DeSerializeDescription(file);
                        userprofileList.Add(other);
                        continue;
                    }
                }
            }
            UserProfiles = userprofileList.OrderBy(x => x.GameName).ToList();
        }
        static GameProfileLoader()
        {
            var origProfiles = Directory.GetFiles("GameProfiles\\", "*.xml");

            if (!Directory.Exists("UserProfiles"))
            {
                Directory.CreateDirectory("UserProfiles");
            }
            var userProfiles = Directory.GetFiles("UserProfiles\\", "*.xml");

            List <GameProfile> profileList     = new List <GameProfile>();
            List <GameProfile> userprofileList = new List <GameProfile>();

            foreach (var file in origProfiles)
            {
                var gameProfile  = JoystickHelper.DeSerializeGameProfile(file);
                var isThereOther = userProfiles.FirstOrDefault(x => Path.GetFileName(x) == Path.GetFileName(file));
                if (!string.IsNullOrWhiteSpace(isThereOther))
                {
                    var other = JoystickHelper.DeSerializeGameProfile(isThereOther);
                    if (other.GameProfileRevision == gameProfile.GameProfileRevision)
                    {
                        other.FileName = isThereOther;
                        other.IconName = "Icons/" + Path.GetFileNameWithoutExtension(file) + ".png";
                        profileList.Add(other);
                        continue;
                    }
                    else
                    {
                        //woah automapper
                        Console.WriteLine("gameprofile " + gameProfile.GameProfileRevision + " userprofile " + other.GameProfileRevision);

                        for (int i = 0; i < gameProfile.JoystickButtons.Count; i++)
                        {
                            gameProfile.JoystickButtons[i].DirectInputButton = other.JoystickButtons[i].DirectInputButton;
                            gameProfile.JoystickButtons[i].XInputButton      = other.JoystickButtons[i].XInputButton;
                            gameProfile.JoystickButtons[i].InputMapping      = other.JoystickButtons[i].InputMapping;
                            gameProfile.JoystickButtons[i].AnalogType        = other.JoystickButtons[i].AnalogType;
                            gameProfile.JoystickButtons[i].BindNameDi        = other.JoystickButtons[i].BindNameDi;
                            gameProfile.JoystickButtons[i].BindNameXi        = other.JoystickButtons[i].BindNameXi;
                            gameProfile.JoystickButtons[i].BindName          = other.JoystickButtons[i].BindName;
                        }

                        for (int i = 0; i < gameProfile.ConfigValues.Count; i++)
                        {
                            for (int j = 0; j < other.ConfigValues.Count; j++)
                            {
                                if (gameProfile.ConfigValues[i].FieldName == other.ConfigValues[j].FieldName)
                                {
                                    gameProfile.ConfigValues[i].FieldValue = other.ConfigValues[j].FieldValue;
                                }
                            }
                        }
                        gameProfile.FileName = isThereOther;
                        gameProfile.IconName = "Icons/" + Path.GetFileNameWithoutExtension(file) + ".png";
                        gameProfile.GamePath = other.GamePath;
                        JoystickHelper.SerializeGameProfile(gameProfile);
                        profileList.Add(gameProfile);
                        continue;
                    }
                }
                gameProfile.FileName = file;
                gameProfile.IconName = "Icons/" + Path.GetFileNameWithoutExtension(file) + ".png";
                profileList.Add(gameProfile);
            }

            GameProfiles = profileList.OrderBy(x => x.GameName).ToList();


            foreach (var file in userProfiles)
            {
                var gameProfile  = JoystickHelper.DeSerializeGameProfile(file);
                var isThereOther = origProfiles.FirstOrDefault(x => Path.GetFileName(x) == Path.GetFileName(file));
                if (!string.IsNullOrWhiteSpace(isThereOther))
                {
                    var other = JoystickHelper.DeSerializeGameProfile(isThereOther);
                    if (other.GameProfileRevision == gameProfile.GameProfileRevision)
                    {
                        gameProfile.FileName = file;
                        gameProfile.IconName = "Icons/" + Path.GetFileNameWithoutExtension(file) + ".png";
                        userprofileList.Add(gameProfile);
                        continue;
                    }
                    else
                    {
                        other.FileName = isThereOther;
                        other.IconName = "Icons/" + Path.GetFileNameWithoutExtension(file) + ".png";
                        userprofileList.Add(other);
                        continue;
                    }
                }
            }
            UserProfiles = userprofileList.OrderBy(x => x.GameName).ToList();
        }