local v0 = {
    new = function()
        return {};
    end
};
v0.fromJsonData = function(v1)
    local v2 = v0.new();
    v2.creatorName = v1.Builder;
    v2.name = v1.Name;
    v2.description = v1.Description;
    v2.isFavorited = v1.IsFavoritedByUser;
    v2.updated = v1.Updated;
    v2.created = v1.Created;
    v2.maxPlayers = v1.MaxPlayers;
    v2.isExperimental = v1.IsExperimental;
    v2.creatorUserId = v1.BuilderId;
    v2.universeId = v1.UniverseId;
    return v2;
end;
return v0;


local v0 = {
    new = function()
        return {};
    end
};
v0.fromJsonData = function(v1)
    local v2 = v0.new();
    v2.creatorId = v1.CreatorID;
    v2.creatorName = v1.CreatorName;
    v2.name = v1.Name;
    v2.universeId = v1.UniverseID;
    v2.placeId = v1.PlaceID;
    v2.iconId = v1.ImageId;
    v2.totalUpVotes = v1.TotalUpVotes;
    v2.totalDownVotes = v1.TotalDownVotes;
    return v2;
end;
return v0;


local v0 = {
    new = function()
        return {};
    end
};
v0.fromJsonData = function(v1)
    local v2 = v0.new();
    v2.creatorId = v1.Creator and v1.Creator.CreatorTargetId;
    v2.creatorName = v1.Creator and v1.Creator.CreatorName;
    v2.name = v1.GameName;
    v2.placeId = v1.PlaceId;
    v2.iconId = v1.ImageId;
    return v2;
end;
return v0;


return {
    Priority = {
        Default = 1,
        Overlay = 2,
        Elevated = 3,
        Immediate = 4
    },
    new = function(v0, v1, v2)
        return {
            id = v0,
            priority = v1,
            createdAt = tick(),
            data = v2
        };
    end
};


local v0 = {
    new = function()
        return {};
    end
};
v0.fromJsonData = function(v1)
    local v2 = v0.new();
    v2.upVotes = v1.UpVotes;
    v2.downVotes = v1.DownVotes;
    v2.userVote = v1.UserVote;
    v2.canVote = v1.CanVote;
    v2.cantVoteReason = v1.ReasonForNotVoteable;
    return v2;
end;
return v0;


local v0 = {
    APP_SHELL = 0,
    GAME = 1
};
local l_Shell_0 = game:GetService("CoreGui"):FindFirstChild("RobloxGui"):FindFirstChild("Modules"):FindFirstChild("Shell");
local l_GuiService_0 = game:GetService("GuiService");
local l_ContextActionService_0 = game:GetService("ContextActionService");
local v4 = nil;
pcall(function()
    v4 = game:GetService("PlatformService");
end);
local l_BaseOverlay_0 = require(l_Shell_0:FindFirstChild("BaseOverlay"));
local l_GlobalSettings_0 = require(l_Shell_0:FindFirstChild("GlobalSettings"));
local l_Utility_0 = require(l_Shell_0:FindFirstChild("Utility"));
local l_Analytics_0 = require(l_Shell_0:FindFirstChild("Analytics"));
local v9 = require(l_Shell_0.LocalizedStrings);
return function(v10)
    local v11 = l_BaseOverlay_0();
    local l_Title_0 = v10.Title;
    local l_Msg_0 = v10.Msg;
    local l_Code_0 = v10.Code;
    local l_Id_0 = v10.Id;
    v11:SetImage((l_Utility_0.Create("ImageLabel")({
        Name = "IconImage",
        Size = UDim2.new(0, 416, 0, 416),
        BackgroundTransparency = 1,
        Image = "rbxasset://textures/ui/Shell/Icons/AlertIcon.png",
        AnchorPoint = Vector2.new(0.5, 0.5),
        Position = UDim2.new(0.5, 0, 0.5, 0)
    })));
    local v16 = l_Utility_0.Create("TextLabel")({
        Name = "DescriptionText",
        Size = UDim2.new(0, 762, 0, 304),
        Position = UDim2.new(0, v11.RightAlign, 0, l_Utility_0.Create("TextLabel")({
            Name = "TitleText",
            Size = UDim2.new(0, 0, 0, 0),
            Position = UDim2.new(0, v11.RightAlign, 0, 136),
            BackgroundTransparency = 1,
            Font = l_GlobalSettings_0.RegularFont,
            FontSize = l_GlobalSettings_0.HeaderSize,
            TextColor3 = l_GlobalSettings_0.WhiteTextColor,
            Text = l_Title_0,
            TextXAlignment = Enum.TextXAlignment.Left,
            Parent = v11.Container
        }).Position.Y.Offset + 62),
        BackgroundTransparency = 1,
        TextXAlignment = Enum.TextXAlignment.Left,
        TextYAlignment = Enum.TextYAlignment.Top,
        Font = l_GlobalSettings_0.LightFont,
        FontSize = l_GlobalSettings_0.TitleSize,
        TextColor3 = l_GlobalSettings_0.WhiteTextColor,
        TextWrapped = true,
        Text = l_Msg_0,
        Parent = v11.Container
    });
    if l_Code_0 then
        v16.Text = string.format(v9:LocalizedString("ErrorMessageAndCodePrase"), l_Msg_0, l_Code_0);
    end;
    v11.GetPriority = function(_)
        return l_GlobalSettings_0.ImmediatePriority;
    end;
    v11.GetAnalyticsInfo = function(_)
        local v19 = {
            [l_Analytics_0.WidgetNames("WidgetId")] = l_Analytics_0.WidgetNames("NoActionOverlayId"),
            Title = v10.Title
        };
        if l_Code_0 then
            v19.ErrorCode = l_Code_0;
        end;
        if l_Id_0 then
            v19.AlertId = l_Id_0;
        end;
        return v19;
    end;
    v11.RemoveFocus = function(_)
    end;
    local l_Show_0 = v11.Show;
    v11.Show = function(v22)
        l_ContextActionService_0:BindCoreAction("StopControllerInput", function()
        end, false, Enum.UserInputType.Gamepad1);
        l_Show_0(v22);
    end;
    local l_Hide_0 = v11.Hide;
    v11.Hide = function(v24)
        l_Hide_0(v24);
        l_ContextActionService_0:UnbindCoreAction("StopControllerInput");
    end;
    local l_Focus_0 = v11.Focus;
    v11.Focus = function(_)
        l_Focus_0();
        if v4 and v4.DatamodelType == v0.APP_SHELL then
            l_GuiService_0.SelectedCoreObject = nil;
        end;
    end;
    if l_Code_0 then
        l_Analytics_0.ReportCounter("Error-" .. tostring(l_Code_0), 1);
        l_Analytics_0.SetRBXEventStream("Error", {
            ErrorCode = l_Code_0
        });
    end;
    if l_Id_0 then
        l_Analytics_0.ReportCounter("Alert-" .. tostring(l_Id_0), 1);
        l_Analytics_0.SetRBXEventStream("Alert", {
            AlertId = l_Id_0
        });
    end;
    return v11;
end;


local l_Shell_0 = game:GetService("CoreGui"):FindFirstChild("RobloxGui"):FindFirstChild("Modules"):FindFirstChild("Shell");
local l_TextService_0 = game:GetService("TextService");
local l_GlobalSettings_0 = require(l_Shell_0:FindFirstChild("GlobalSettings"));
local l_Utility_0 = require(l_Shell_0:FindFirstChild("Utility"));
return function(v4)
    local v5 = {};
    local v6 = v4.AbsoluteSize.x * 0.5;
    local v7 = l_Utility_0.Create("Frame")({
        Size = UDim2.new(0, 0, 0, 0),
        Position = UDim2.new(1, 0, 0, 0),
        BackgroundTransparency = 1,
        Visible = false,
        Parent = v4
    });
    local v8 = l_Utility_0.Create("ImageLabel")({
        Size = UDim2.new(0, 40, 0, 40),
        Position = UDim2.new(0, 0, 0, 0),
        BackgroundTransparency = 1,
        Image = "rbxasset://textures/ui/Shell/Icons/AlertIcon.png",
        Parent = v7
    });
    local v9 = l_Utility_0.Create("TextLabel")({
        Size = UDim2.new(0, 0, 0, 0),
        Position = UDim2.new(0, 56, 0, 21.5),
        BackgroundTransparency = 1,
        Text = "",
        TextColor3 = l_GlobalSettings_0.WhiteTextColor,
        FontSize = l_GlobalSettings_0.DescriptionSize,
        Font = l_GlobalSettings_0.RegularFont,
        TextXAlignment = Enum.TextXAlignment.Left,
        TextYAlignment = Enum.TextYAlignment.Center,
        Parent = v7
    });
    local function v10()
        v7.Position = UDim2.new(1, -((math.min(l_TextService_0:GetTextSize(v9.Text, l_Utility_0.ConvertFontSizeEnumToInt(v9.FontSize), v9.Font, Vector2.new(0, 0)).x, v6) + v8.Size.X.Offset) + 4), 0, v8.Size.Y.Offset / 2);
    end;
    v5.SetVisible = function(_, v12)
        v7.Visible = v12;
    end;
    v5.SetText = function(_, v14)
        if v14 == v9.Text then
            return ;
        else
            v9.Text = v14;
            v10();
            return ;
        end;
    end;
    return v5;
end;


local v0 = {};
v0.__index = v0;
v0.new = function(v1, v2, ...)
    local v3 = {
        keys = {},
        values = {},
        getId = v1,
        sortPredicate = v2
    };
    setmetatable(v3, v0);
    v0._InsertInPlace(v3, ...);
    return v3;
end;
v0.Get = function(v4, v5)
    return v4.values[v5];
end;
v0.GetByIndex = function(v6, v7)
    local v8 = v6.keys[v7];
    if v8 == nil then
        return nil;
    else
        return v6.values[v8];
    end;
end;
v0.GetIds = function(v9)
    return v9.keys;
end;
v0.Length = function(v10)
    return #v10.keys;
end;
v0.Delete = function(v11, ...)
    local v12 = v0.new(v11.getId, v11.sortPredicate);
    local v13 = select("#", ...);
    for v14, v15 in pairs(v11.values) do
        v12.values[v14] = v15;
    end;
    for v16 = 1, v13 do
        v12.values[select(v16, ...)] = nil;
    end;
    for _, v18 in ipairs(v11.keys) do
        if v12.values[v18] ~= nil then
            v12.keys[#v12.keys + 1] = v18;
        end;
    end;
    return v12;
end;
v0.Insert = function(v19, ...)
    local v20 = v19:_Copy();
    v0._InsertInPlace(v20, ...);
    return v20;
end;
v0.First = function(v21)
    if not v21.keys[1] then
        return ;
    else
        return v21:Get(v21.keys[1]);
    end;
end;
v0.Last = function(v22)
    local v23 = #v22.keys;
    if not v22.keys[v23] then
        return ;
    else
        return v22:Get(v22.keys[v23]);
    end;
end;
v0.CreateIterator = function(v24)
    local v25 = 0;
    local v26 = #v24.keys;
    return function()
        v25 = v25 + 1;
        if v25 <= v26 then
            local v27 = v24.keys[v25];
            return v27, v24.values[v27], v25;
        else
            return ;
        end;
    end;
end;
v0.CreateReverseIterator = function(v28)
    local v29 = #v28.keys + 1;
    return function()
        v29 = v29 - 1;
        if v29 > 0 then
            local v30 = v28.keys[v29];
            return v30, v28.values[v30], v29;
        else
            return ;
        end;
    end;
end;
v0.Map = function(v31, v32)
    local v33 = v0.new(v31.getId, v31.sortPredicate);
    for v34, v35 in v31:CreateIterator() do
        v33:_InsertInPlaceUnsorted(v32(v35, v34));
    end;
    v33:_Sort();
    return v33;
end;
v0.Merge = function(v36, ...)
    local v37 = nil;
    for v38 = 1, select("#", ...) do
        local v39 = select(v38, ...);
        if v39:Length() > 0 then
            if not v37 then
                v37 = v36:_Copy();
            end;
            for _, v41 in v39:CreateIterator() do
                v37:_InsertInPlaceUnsorted(v41);
            end;
        end;
    end;
    if not v37 then
        return v36;
    else
        v37:_Sort();
        return v37;
    end;
end;
v0._Copy = function(v42)
    local v43 = v0.new(v42.getId, v42.sortPredicate);
    for v44, v45 in ipairs(v42.keys) do
        v43.keys[v44] = v45;
    end;
    for v46, v47 in pairs(v42.values) do
        v43.values[v46] = v47;
    end;
    return v43;
end;
v0._InsertInPlaceUnsorted = function(v48, ...)
    for v49 = 1, select("#", ...) do
        local v50 = select(v49, ...);
        local v51 = v48.getId(v50);
        if not v48.values[v51] then
            table.insert(v48.keys, v51);
        end;
        v48.values[v51] = v50;
    end;
end;
v0._Sort = function(v52)
    table.sort(v52.keys, function(v53, v54)
        return v52.sortPredicate(v52.values[v53], v52.values[v54]);
    end);
end;
v0._InsertInPlace = function(v55, ...)
    v55:_InsertInPlaceUnsorted(...);
    v55:_Sort();
end;
return v0;


local v0 = require(script.Parent.Analytics);
local v1 = {
    2,
    10
};
local v2 = {};
local v3 = {};
local function _(v4, v5, v6)
    local v7 = false;
    task.delay(v4, function()
        if not v7 then
            v6(v5);
        end;
    end);
    return function()
        v7 = true;
    end;
end;
local function v11()
    for _, v10 in ipairs(v2) do
        if v10 ~= nil then
            v10();
        end;
    end;
    v2 = {};
end;
v3.onPageChanged = function(v12)
    v11();
    for v13, v14 in ipairs(v1) do
        local l_v2_0 = v2;
        local function v17(v16)
            v0.reportPageHeartbeat(v16, v12);
        end;
        local v18 = false;
        local v19;
        do
            local l_v18_0 = v18;
            task.delay(v14, function()
                if not l_v18_0 then
                    v17(v13);
                end;
            end);
            v19 = function()
                l_v18_0 = true;
            end;
        end;
        l_v2_0[v13] = v19;
    end;
end;
return v3;


return {
    AccountSettings = {
        Key = "AccountSettingsKey",
        AccountInfo = {
            Key = "AccountInfoKey",
            LinkAccountSetting = {
                Key = "LinkAccountSetting",
                UnlinkAccountOverlay = {
                    Key = "UnlinkAccountOverlayKey"
                }
            }
        },
        Security = {
            Key = "SecurityKey"
        },
        XboxSettings = {
            Key = "XboxSettingsKey",
            CrossPlatformSetting = {
                Key = "CrossPlatformSettingKey"
            },
            PrivilegeSettings = {
                Key = "PrivilegeSettings",
                MultiplayerSetting = {
                    Key = "MultiplayerSettingKey"
                },
                SharedContentSetting = {
                    Key = "SharedContentSettingKey"
                }
            }
        }
    },
    FriendCategories = {
        Key = "FriendCategories",
        AllFriends = {
            Key = "AllFriends"
        },
        OnlineFriends = {
            Key = "OnlineFriends"
        }
    }
};


local v0 = nil;
pcall(function()
    v0 = game:GetService("PlatformService");
end);
local v1 = {};
local function v2()
    return {
        {
            ReducedName = "Default Short Title",
            Description = "Default Description",
            DisplayListPrice = "$199.99",
            IsPartOfAnyBundle = false,
            DisplayPrice = "$199.99",
            Price = "199.99",
            ProductId = "210d1d69-5189-40f4-a59b-ecfb4f849847",
            Name = "22,500 Robux",
            TitleId = 0,
            IsBundle = false
        },
        {
            ReducedName = "Default Short Title",
            Description = "Default Description",
            DisplayListPrice = "$4.99",
            IsPartOfAnyBundle = false,
            DisplayPrice = "$4.99",
            Price = "4.99",
            ProductId = "70c2075d-5e2f-4ffd-8de5-8a6d2f5e65ad",
            Name = "400 Robux",
            TitleId = 0,
            IsBundle = false
        },
        {
            ReducedName = "Default Short Title",
            Description = "Default Description",
            DisplayListPrice = "$99.99",
            IsPartOfAnyBundle = false,
            DisplayPrice = "$99.99",
            Price = "99.99",
            ProductId = "878c642b-cb27-4d5e-a150-a408ea40c41c",
            Name = "10\194\160000 Robux",
            TitleId = 0,
            IsBundle = false
        },
        {
            ReducedName = "Default Short Title",
            Description = "Default Description",
            DisplayListPrice = "$399.99",
            IsPartOfAnyBundle = false,
            DisplayPrice = "$399.99",
            Price = "399.99",
            ProductId = "878c642b-cb27-4d5e-a150-a408ea40c41c",
            Name = "50 000 Robux",
            TitleId = 0,
            IsBundle = false
        },
        {
            ReducedName = "Default Short Title",
            Description = "Default Description",
            DisplayListPrice = "$129.99",
            IsPartOfAnyBundle = false,
            DisplayPrice = "$129.99",
            Price = "129.99",
            ProductId = "878c642b-cb27-4d5e-a150-a408ea40c41c",
            Name = "12.500 Robux",
            TitleId = 0,
            IsBundle = false
        },
        {
            ReducedName = "Default Short Title",
            Description = "Default Description",
            DisplayListPrice = "$229.99",
            IsPartOfAnyBundle = false,
            DisplayPrice = "$229.99",
            Price = "229.99",
            ProductId = "878c642b-cb27-4d5e-a150-a408ea40c41c",
            Name = "\229\156\168Xbox\228\184\138\231\141\178\229\190\15132500 Robux",
            TitleId = 0,
            IsBundle = false
        }
    };
end;
v1.GetCatalogInfoAsync = function(_)
    if UserSettings().GameSettings:InStudioMode() or game:GetService("UserInputService"):GetPlatform() == Enum.Platform.Windows then
        return v2(), true, "";
    else
        local v4 = nil;
        local v5 = nil;
        local v6 = nil;
        for _ = 1, 5 do
            local l_status_0, l_result_0 = pcall(function()
                v4 = v0:BeginGetCatalogInfo();
            end);
            v5 = l_status_0;
            v6 = l_result_0;
            if not v5 or not v4 then
                wait(10);
            else
                return v4, v5, v6;
            end;
        end;
        return v4, v5, v6;
    end;
end;
v1.ParseMoneyValue = function(_, v11)
    return not not v11 and tonumber(v11.Price) or 0.99;
end;
v1.ParseRobuxValue = function(_, v13)
    if v13 and v13.Name then
        return (tonumber((string.gsub(v13.Name, "%D+", ""))));
    else
        return 0;
    end;
end;
v1.CalculateRobuxRatio = function(v14, v15)
    local v16 = v14:ParseRobuxValue(v15);
    local v17 = v14:ParseMoneyValue(v15);
    if not (v17 ~= 0) or v16 == 0 then
        return 0;
    else
        return v16 / v17;
    end;
end;
return v1;


local l_Utility_0 = require(game:GetService("CoreGui"):FindFirstChild("RobloxGui"):FindFirstChild("Modules"):FindFirstChild("Shell"):FindFirstChild("Utility"));
local v1 = nil;
pcall(function()
    v1 = game:GetService("PlatformService");
end);
local v2 = {};
local v3 = false;
v2.GetPartyMembersAsync = function(_)
    while v3 do
        wait();
    end;
    v3 = true;
    local v5 = nil;
    local l_status_0, l_result_0 = pcall(function()
        v5 = v1:GetPlatformPartyMembers();
    end);
    if not l_status_0 then
        l_Utility_0.DebugLog("HeroStatsManager - Error getting party members:", l_result_0);
    end;
    v3 = false;
    return v5;
end;
v2.IsInAParty = function(_, v9)
    return v9 and #v9 > 1;
end;
return v2;


local l_Shell_0 = game:GetService("CoreGui"):FindFirstChild("RobloxGui"):FindFirstChild("Modules"):FindFirstChild("Shell");
local l_GlobalSettings_0 = require(l_Shell_0:FindFirstChild("GlobalSettings"));
local l_Utility_0 = require(l_Shell_0:FindFirstChild("Utility"));
local l_TextService_0 = game:GetService("TextService");
return function(v4, v5)
    local v6 = {};
    local v7 = 0.3;
    local l_Quad_0 = Enum.EasingStyle.Quad;
    local l_Out_0 = Enum.EasingDirection.Out;
    local v10 = 2;
    local v11 = l_Utility_0.Create("Frame")({
        Name = "ClipFrame",
        Size = UDim2.new(1, 0, 1, 0),
        BackgroundTransparency = 1,
        ZIndex = v10,
        ClipsDescendants = true,
        Parent = v4
    });
    local v12 = l_Utility_0.Create("Frame")({
        Name = "PopupBG",
        Size = UDim2.new(1, 0, 1, 0),
        Position = UDim2.new(0, 0, 1, 5),
        BackgroundTransparency = l_GlobalSettings_0.ModalBackgroundTransparency,
        BackgroundColor3 = l_GlobalSettings_0.ModalBackgroundColor,
        BorderSizePixel = 0,
        ZIndex = v10,
        Parent = v11
    });
    local v13 = l_Utility_0.Create("TextLabel")({
        Name = "NameLabel",
        Size = UDim2.new(1, -18, 1, -12),
        Position = UDim2.new(0, 16, 0, 6),
        BackgroundTransparency = 1,
        TextColor3 = l_GlobalSettings_0.WhiteTextColor,
        TextWrapped = true,
        TextXAlignment = Enum.TextXAlignment.Left,
        TextYAlignment = Enum.TextYAlignment.Top,
        Font = l_GlobalSettings_0.LightFont,
        FontSize = l_GlobalSettings_0.TitleSize,
        ZIndex = v10,
        Text = v5,
        Parent = v12
    });
    local function v15()
        local l_l_TextService_0_TextSize_0 = l_TextService_0:GetTextSize(v13.Text, l_Utility_0.ConvertFontSizeEnumToInt(v13.FontSize), v13.Font, Vector2.new((v11.AbsoluteSize.x - 7) - 18, (v11.AbsoluteSize.y - 7) - 12));
        v12.Size = UDim2.new(0, (l_l_TextService_0_TextSize_0.x + 18) + 7, 0, math.min(l_l_TextService_0_TextSize_0.y + 12, v4.AbsoluteSize.y * 0.75) + 7);
    end;
    spawn(function()
        v15();
    end);
    v4.SelectionGained:connect(function()
        if #v13.Text > 0 then
            v15();
            l_Utility_0.TweenPositionOrSet(v12, UDim2.new(0, 0, 1, -v12.Size.Y.Offset), l_Out_0, l_Quad_0, v7, true);
        end;
    end);
    v4.SelectionLost:connect(function()
        l_Utility_0.TweenPositionOrSet(v12, UDim2.new(0, 0, 1, 5), l_Out_0, l_Quad_0, v7, true);
    end);
    v6.SetTweenTime = function(_, v17)
        v7 = v17;
    end;
    v6.SetEasingStyle = function(_, v19)
        l_Quad_0 = v19;
    end;
    v6.SetEasingDirection = function(_, v21)
        l_Out_0 = v21;
    end;
    v6.SetText = function(_, v23)
        v13.Text = v23;
        v15();
        if #v23 == 0 then
            v12.Position = UDim2.new(0, 0, 1, 5);
        end;
    end;
    v6.SetZIndex = function(_, v25)
        if v25 ~= v10 then
            v10 = v25;
            v11.ZIndex = v10;
            v12.ZIndex = v10;
            v13.ZIndex = v10;
        end;
    end;
    return v6;
end;


local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v1 = require(l_Modules_0.Common.Immutable);
local v2 = require(l_Modules_0.Shell.Actions.RequestCrossPlayEnabled);
local v3 = require(l_Modules_0.Shell.Actions.SetCrossPlayEnabled);
local v4 = require(l_Modules_0.Shell.Actions.PostCrossPlayEnabledFailed);
local v5 = require(l_Modules_0.Shell.Actions.GetCrossPlayEnabledFailed);
return function(v6, v7)
    v6 = v6 or {};
    assert(v6, "");
    if v7.type == v2.name then
        return (v1.Set(v6, "isRequesting", true));
    elseif v7.type == v3.name then
        if v7.enabled ~= nil then
            return {
                enabled = v7.enabled,
                lastUpdated = v7.timestamp,
                isRequesting = false
            };
        else
            return {};
        end;
    elseif v7.type == v4.name then
        return (v1.Set(v6, "isRequesting", false));
    else
        if v7.type == v5.name then
            v6 = v1.Set(v6, "isRequesting", false);
        end;
        return v6;
    end;
end;


local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v1 = require(l_Modules_0.Shell.OrderedMap);
local v2 = require(l_Modules_0.Shell.Actions.DeleteError);
local function v4(v3)
    return v3.Code;
end;
local function v7(v5, v6)
    return v5.timestamp < v6.timestamp;
end;
return function(v8, v9)
    v8 = v8 or v1.new(v4, v7);
    if v9.error and type(v9.error.Code) == "number" then
        if v9.type == v2.name then
            return (v1.Delete(v8, v9.error.Code));
        else
            v8 = v1.Insert(v8, v9.error);
        end;
    end;
    return v8;
end;


local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v1 = require(l_Modules_0.Shell.Actions.SetFriendsData);
local v2 = require(l_Modules_0.Common.Immutable);
return function(v3, v4)
    v3 = v3 or {
        initialized = false,
        data = {}
    };
    assert(v3, "");
    if v4.type == v1.name then
        if v4.data then
            local v5 = {};
            for v6 in ipairs(v4.data) do
                table.insert(v5, (v2.JoinDictionaries(v4.data[v6])));
            end;
            return {
                initialized = true,
                data = v5
            };
        else
            return {
                initialized = false,
                data = {}
            };
        end;
    else
        return v3;
    end;
end;


local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v1 = require(l_Modules_0.Common.Immutable);
local v2 = require(l_Modules_0.Shell.Actions.FetchPrivilegeSettings);
local v3 = require(l_Modules_0.Shell.Actions.SetPrivilegeSettings);
return function(v4, v5)
    v4 = v4 or {};
    if v5.type == v2.name then
        return (v1.Set(v4, "isRequesting", true));
    else
        if v5.type == v3.name then
            if not v5.Multiplayer or not v5.SharedContent then
                v4 = {};
            else
                return {
                    Multiplayer = v1.JoinDictionaries(v4.Multiplayer or {}, v5.Multiplayer),
                    SharedContent = v1.JoinDictionaries(v4.SharedContent or {}, v5.SharedContent),
                    lastUpdated = v5.timestamp,
                    isRequesting = false
                };
            end;
        end;
        return v4;
    end;
end;


local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v1 = require(l_Modules_0.Shell.Actions.SetRenderedFriendsData);
local v2 = require(l_Modules_0.Common.Immutable);
return function(v3, v4)
    v3 = v3 or {
        initialized = false,
        data = {}
    };
    assert(v3, "");
    if v4.type == v1.name then
        if v4.data then
            local v5 = {};
            for v6 in ipairs(v4.data) do
                table.insert(v5, (v2.JoinDictionaries(v4.data[v6])));
            end;
            return {
                initialized = true,
                data = v5
            };
        else
            return {
                initialized = false,
                data = {}
            };
        end;
    else
        return v3;
    end;
end;


local v0 = require(game:GetService("CoreGui").RobloxGui.Modules.Shell.Actions.SetRobloxUser);
return function(v1, v2)
    v1 = v1 or {};
    if v2.type == v0.name then
        return {
            robloxName = v2.robloxName,
            rbxuid = v2.rbxuid,
            under13 = v2.under13
        };
    else
        return v1;
    end;
end;


local l_CoreGui_0 = game:GetService("CoreGui");
local l_Actions_0 = l_CoreGui_0.RobloxGui.Modules.Shell.Actions;
local l_Common_0 = l_CoreGui_0.RobloxGui.Modules.Common;
local v3 = require(l_Actions_0.InsertScreen);
local v4 = require(l_Actions_0.RemoveScreen);
local v5 = require(l_Common_0.Immutable);
return function(v6, v7)
    v6 = v6 or {};
    assert(v6, "");
    if v7.type == v3.name then
        local v8 = v5.Append(v6, v7.item);
        table.sort(v8, function(v9, v10)
            if v9.priority == v10.priority then
                return v10.createdAt < v9.createdAt;
            else
                return v10.priority < v9.priority;
            end;
        end);
        return v8;
    elseif v7.type == v4.name then
        return v5.RemoveValueFromList(v6, v7.item);
    else
        return v6;
    end;
end;


local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v1 = require(l_Modules_0.Common.Immutable);
local v2 = require(l_Modules_0.Shell.Actions.FetchUserThumbnail);
local v3 = require(l_Modules_0.Shell.Actions.SetUserThumbnail);
local v4 = require(l_Modules_0.Shell.Actions.ResetUserThumbnails);
return function(v5, v6)
    v5 = v5 or {};
    assert(v5, "");
    if v6.type == v2.name then
        local v7 = table.concat({
            v6.rbxuid,
            v6.thumbnailType.Name,
            v6.thumbnailSize.Name
        });
        return (v1.Set(v5, v7, (v1.Set(v5[v7] or {}, "isFetching", true))));
    elseif v6.type == v3.name then
        local v8 = table.concat({
            v6.rbxuid,
            v6.thumbnailType.Name,
            v6.thumbnailSize.Name
        });
        local v9 = v5[v8] or {};
        if not v6.success or not v6.isFinal then
            return (v1.Set(v5, v8, v1.JoinDictionaries(v9, {
                fetchSuccess = false,
                isFetching = false,
                lastUpdated = v6.timestamp
            })));
        else
            return (v1.Set(v5, v8, v1.JoinDictionaries(v9, {
                fetchSuccess = true,
                isFetching = false,
                imageUrl = v6.imageUrl,
                lastUpdated = v6.timestamp
            })));
        end;
    else
        if v6.type == v4.name then
            v5 = {};
        end;
        return v5;
    end;
end;


local v0 = require(game:GetService("CoreGui").RobloxGui.Modules.Shell.Actions.SetXboxUser);
return function(v1, v2)
    v1 = v1 or {};
    if v2.type == v0.name then
        return {
            gamertag = v2.gamertag,
            xuid = v2.xuid
        };
    else
        return v1;
    end;
end;


local l_HttpService_0 = game:GetService("HttpService");
local v1 = nil;
pcall(function()
    v1 = game:GetService("PlatformService");
end);
local v2 = nil;
pcall(function()
    v2 = game:GetService("ThirdPartyUserService");
end);
local v3 = nil;
if v2 then
    v2.ActiveUserSignedOut:connect(function()
        v3 = {};
    end);
end;
local v4 = {};
local v7 = {
    addReloader = function(_, v6)
        if v4[v6] == nil then
            v4[v6] = {};
        end;
    end
};
v7.callReloader = function(_, v9, v10)
    if v4[v9] == nil then
        return ;
    else
        for v11, _ in pairs(v4[v9]) do
            v7:callReloaderFunc(v9, v11, v10);
        end;
        return ;
    end;
end;
v7.removeReloader = function(_, v14)
    if v4[v14] == nil then
        return ;
    else
        for v15, _ in pairs(v4[v14]) do
            v4[v14][v15] = nil;
        end;
        v4[v14] = nil;
        return ;
    end;
end;
local function _(v17, v18)
    if v17 and v18 then
        if not v4[v17] or not v4[v17][v18] then
            return ;
        else
            return v4[v17][v18];
        end;
    else
        return ;
    end;
end;
v7.addReloaderFunc = function(_, v21, v22, v23, v24)
    if not v4[v21] then
        v7:addReloader(v21);
        local v25 = l_HttpService_0:GenerateGUID();
        v4[v21][v25] = {
            reloaderFunc = v22,
            interval = v23,
            userRelated = v24,
            lastUpdateTime = nil,
            suspend = false,
            mutex = false,
            lastUserState = v24 and v3
        };
        spawn(function()
            while true do
                local l_v21_0 = v21;
                local l_v25_0 = v25;
                if if not not l_v21_0 and l_v25_0 then if v4[l_v21_0] and v4[l_v21_0][l_v25_0] then v4[l_v21_0][l_v25_0] else nil else nil then
                    l_v21_0 = v21;
                    l_v25_0 = v25;
                    local v28 = if not not l_v21_0 and l_v25_0 then if v4[l_v21_0] and v4[l_v21_0][l_v25_0] then v4[l_v21_0][l_v25_0] else nil else nil;
                    l_v21_0 = v28.interval;
                    if v28.lastUpdateTime then
                        l_v25_0 = tick() - v28.lastUpdateTime;
                        if l_v25_0 < l_v21_0 then
                            l_v21_0 = l_v21_0 - l_v25_0;
                        end;
                    end;
                    wait(l_v21_0);
                    l_v25_0 = v28.lastUserState;
                    if not v28.userRelated or l_v25_0 == v3 then
                        v7:callReloaderFunc(v21, v25, true);
                    else
                        v7:removeReloaderFunc(v21, v25);
                    end;
                else
                    break;
                end;
            end;
        end);
        return v25;
    else
        return ;
    end;
end;
v7.removeReloaderFunc = function(_, v30, v31)
    if not (v4[v30] ~= nil) or v4[v30][v31] == nil then
        return ;
    else
        v4[v30][v31] = nil;
        return ;
    end;
end;
v7.updateReloaderFunc = function(_, v33, v34, v35)
    local v36 = if not not v33 and v34 then if v4[v33] and v4[v33][v34] then v4[v33][v34] else nil else nil;
    if v36 then
        if v35 and type(v35) == "table" then
            for v37, v38 in pairs(v35) do
                v36[v37] = v38;
            end;
        end;
        return ;
    else
        return ;
    end;
end;
v7.suspendReloaderFunc = function(_, v40, v41)
    v7:updateReloaderFunc(v40, v41, {
        suspend = true
    });
end;
v7.resumeReloaderFunc = function(_, v43, v44)
    v7:updateReloaderFunc(v43, v44, {
        suspend = false
    });
end;
v7.callReloaderFunc = function(_, v46, v47, v48)
    local v49 = if not not v46 and v47 then if v4[v46] and v4[v46][v47] then v4[v46][v47] else nil else nil;
    if not (not v49 or not v49.reloaderFunc) then
        local v50 = false;
        if not v48 then
            if not v49.mutex then
                v50 = true;
            end;
        elseif not (v49.suspend or v49.mutex) and (not v49.lastUpdateTime or v49.interval <= tick() - v49.lastUpdateTime) then
            v50 = true;
        end;
        if v50 then
            v49.mutex = true;
            v49.lastUpdateTime = tick();
            v49.reloaderFunc();
            v49.mutex = false;
        end;
    end;
end;
if not UserSettings().GameSettings:InStudioMode() or game:GetService("UserInputService"):GetPlatform() == Enum.Platform.Windows then
    pcall(function()
        v1.Resumed:connect(function()
            for _, v52 in pairs(v4) do
                spawn(function()
                    v7:callReloader(v52, true);
                end);
            end;
        end);
    end);
end;
return v7;


local l_Shell_0 = game:GetService("CoreGui"):FindFirstChild("RobloxGui"):FindFirstChild("Modules"):FindFirstChild("Shell");
local l_AssetManager_0 = require(l_Shell_0:FindFirstChild("AssetManager"));
local l_GlobalSettings_0 = require(l_Shell_0:FindFirstChild("GlobalSettings"));
local l_LocalizedStrings_0 = require(l_Shell_0:FindFirstChild("LocalizedStrings"));
local l_Utility_0 = require(l_Shell_0:FindFirstChild("Utility"));
local l_BaseOverlay_0 = require(l_Shell_0:FindFirstChild("BaseOverlay"));
local l_SoundManager_0 = require(l_Shell_0:FindFirstChild("SoundManager"));
local l_Http_0 = require(l_Shell_0:FindFirstChild("Http"));
local l_Analytics_0 = require(l_Shell_0:FindFirstChild("Analytics"));
return {
    ReportType = {
        REPORT_GAME = 0
    },
    CreateReportOverlay = function(_, _, v11, v12, v13, v14, v15)
        local v16 = l_BaseOverlay_0();
        local l_GreyButtonColor_0 = l_GlobalSettings_0.GreyButtonColor;
        local l_GreySelectedButtonColor_0 = l_GlobalSettings_0.GreySelectedButtonColor;
        local l_WhiteTextColor_0 = l_GlobalSettings_0.WhiteTextColor;
        local l_TextSelectedColor_0 = l_GlobalSettings_0.TextSelectedColor;
        local v21 = l_Utility_0.Create("Frame")({
            Name = "SubmitButtonContainer",
            BackgroundTransparency = 1,
            Size = UDim2.new(0, 320, 0, 66),
            Position = UDim2.new(0, 776, 1, -166);
            l_AssetManager_0.CreateShadow(1)
        });
        local v22 = l_Utility_0.Create("ImageButton")({
            Name = "SubmitButton",
            Size = UDim2.new(1, 0, 1, 0),
            BackgroundTransparency = 1,
            ImageColor3 = l_GreyButtonColor_0,
            Image = l_GlobalSettings_0.RoundCornerButtonImage,
            ScaleType = Enum.ScaleType.Slice,
            SliceCenter = Rect.new(Vector2.new(4, 4), Vector2.new(28, 28)),
            ZIndex = 2,
            Parent = v21;
            l_SoundManager_0:CreateSound("MoveSelection")
        });
        local v23 = l_Utility_0.Create("TextLabel")({
            Name = "SubmitText",
            Size = UDim2.new(1, 0, 1, 0),
            BackgroundTransparency = 1,
            Font = l_GlobalSettings_0.RegularFont,
            FontSize = l_GlobalSettings_0.ButtonSize,
            TextColor3 = l_WhiteTextColor_0,
            Text = l_LocalizedStrings_0:LocalizedString("SubmitWord"),
            ZIndex = v22.ZIndex
        });
        l_Utility_0.ResizeButtonWithText(v21, v23, l_GlobalSettings_0.TextHorizontalPadding);
        local v24 = v21:Clone();
        local l_SubmitButton_0 = v24:FindFirstChild("SubmitButton");
        local v26 = v23:Clone();
        v24.Position = UDim2.new(l_SubmitButton_0.Position.X.Scale, (v21.Position.X.Offset + v21.Size.X.Offset) + 10, v24.Position.Y.Scale, v24.Position.Y.Offset);
        v26.Text = l_LocalizedStrings_0:LocalizedString("CancelWord");
        l_Utility_0.ResizeButtonWithText(v24, v26, l_GlobalSettings_0.TextHorizontalPadding);
        v23.Parent = v22;
        v21.Parent = v16.Container;
        v26.Parent = l_SubmitButton_0;
        v24.Parent = v16.Container;
        v22.SelectionGained:connect(function()
            v22.ImageColor3 = l_GreySelectedButtonColor_0;
            v23.TextColor3 = l_TextSelectedColor_0;
        end);
        v22.SelectionLost:connect(function()
            v22.ImageColor3 = l_GreyButtonColor_0;
            v23.TextColor3 = l_WhiteTextColor_0;
        end);
        l_SubmitButton_0.SelectionGained:connect(function()
            l_SubmitButton_0.ImageColor3 = l_GreySelectedButtonColor_0;
            v26.TextColor3 = l_TextSelectedColor_0;
        end);
        l_SubmitButton_0.SelectionLost:connect(function()
            l_SubmitButton_0.ImageColor3 = l_GreyButtonColor_0;
            v26.TextColor3 = l_WhiteTextColor_0;
        end);
        local v27 = l_Utility_0.Create("TextLabel")({
            Name = "TitleText",
            Size = UDim2.new(0, 0, 0, 0),
            Position = UDim2.new(0, v21.Position.X.Offset, 0, 136),
            BackgroundTransparency = 1,
            Font = l_GlobalSettings_0.RegularFont,
            FontSize = l_GlobalSettings_0.HeaderSize,
            TextColor3 = l_GlobalSettings_0.WhiteTextColor,
            Text = l_LocalizedStrings_0:LocalizedString("ReportGameWord"),
            TextXAlignment = Enum.TextXAlignment.Left,
            Parent = v16.Container
        });
        local _ = l_Utility_0.Create("TextLabel")({
            Name = "DescriptionText",
            Size = UDim2.new(0, 762, 0, 304),
            Position = UDim2.new(0, v27.Position.X.Offset, 0, v27.Position.Y.Offset + 62),
            BackgroundTransparency = 1,
            TextXAlignment = Enum.TextXAlignment.Left,
            TextYAlignment = Enum.TextYAlignment.Top,
            Font = l_GlobalSettings_0.LightFont,
            FontSize = l_GlobalSettings_0.TitleSize,
            TextColor3 = l_GlobalSettings_0.WhiteTextColor,
            TextWrapped = true,
            Text = l_LocalizedStrings_0:LocalizedString("ReportPhrase"),
            Parent = v16.Container
        });
        v16:SetImage((l_Utility_0.Create("ImageLabel")({
            Name = "ReportIcon",
            Position = UDim2.new(0, 226, 0, 204),
            BackgroundTransparency = 1,
            Image = "rbxasset://textures/ui/Shell/Icons/ErrorIconLargeCopy@1080.png",
            Size = UDim2.new(0, 321, 0, 264)
        })));
        v22.MouseButton1Click:connect(function()
            if v16:Close() then
                spawn(function()
                    if not ((not v11 or not v12) or not v15) then
                        l_Http_0.ReportAbuseAsyncV2(tostring(v15), tostring(v11), tostring(v12), v13, v14, "xbox-app", "xbox-experience", "7", "Game reported from the Xbox App.");
                    end;
                end);
            end;
        end);
        l_SubmitButton_0.MouseButton1Click:connect(function()
            v16:Close();
        end);
        v16.GetAnalyticsInfo = function(_)
            local v30 = {
                [l_Analytics_0.WidgetNames("WidgetId")] = l_Analytics_0.WidgetNames("ReportOverlayId")
            };
            if v11 then
                v30.AssetId = v11;
            end;
            return v30;
        end;
        v16.GetPriority = function(_)
            return l_GlobalSettings_0.ElevatedPriority;
        end;
        local l_Focus_0 = v16.Focus;
        v16.Focus = function(_)
            l_Focus_0(v16);
            l_Utility_0.SetSelectedCoreObject(l_SubmitButton_0);
        end;
        return v16;
    end
};


local l_Shell_0 = game:GetService("CoreGui"):FindFirstChild("RobloxGui"):FindFirstChild("Modules"):FindFirstChild("Shell");
local l_TextService_0 = game:GetService("TextService");
local l_GlobalSettings_0 = require(l_Shell_0:FindFirstChild("GlobalSettings"));
local l_LocalizedStrings_0 = require(l_Shell_0:FindFirstChild("LocalizedStrings"));
local l_Utility_0 = require(l_Shell_0:FindFirstChild("Utility"));
local l_BaseOverlay_0 = require(l_Shell_0:FindFirstChild("BaseOverlay"));
local l_SoundManager_0 = require(l_Shell_0:FindFirstChild("SoundManager"));
local l_CurrencyWidget_0 = require(l_Shell_0:FindFirstChild("CurrencyWidget"));
local l_UserData_0 = require(l_Shell_0:FindFirstChild("UserData"));
local l_Analytics_0 = require(l_Shell_0:FindFirstChild("Analytics"));
return function(v10, v11)
    local v12 = l_BaseOverlay_0();
    local v13 = nil;
    local v14 = nil;
    v12:SetImage((l_Utility_0.Create("ImageLabel")({
        Name = "OverlayImage",
        Size = UDim2.new(0, 416, 0, 416),
        BackgroundTransparency = 1,
        Image = "rbxasset://textures/ui/Shell/Icons/AlertIcon.png",
        AnchorPoint = Vector2.new(0.5, 0.5),
        Position = UDim2.new(0.5, 0, 0.5, 0)
    })));
    local v15 = l_Utility_0.Create("TextLabel")({
        Name = "TitleText",
        Size = UDim2.new(0, 0, 0, 0),
        Position = UDim2.new(0, v12.RightAlign, 0, 88),
        BackgroundTransparency = 1,
        Font = l_GlobalSettings_0.RegularFont,
        FontSize = l_GlobalSettings_0.HeaderSize,
        TextColor3 = l_GlobalSettings_0.WhiteTextColor,
        Text = l_LocalizedStrings_0:LocalizedString("RobuxBalanceOverlayTitle"),
        TextXAlignment = Enum.TextXAlignment.Left,
        Parent = v12.Container
    });
    local v16 = l_Utility_0.Create("TextLabel")({
        Name = "DescriptionText",
        Size = UDim2.new(0, 762, 0, 126),
        Position = UDim2.new(0, v12.RightAlign, 0, v15.Position.Y.Offset + 62),
        BackgroundTransparency = 1,
        TextXAlignment = Enum.TextXAlignment.Left,
        TextYAlignment = Enum.TextYAlignment.Top,
        Font = l_GlobalSettings_0.LightFont,
        FontSize = l_GlobalSettings_0.TitleSize,
        TextColor3 = l_GlobalSettings_0.WhiteTextColor,
        TextWrapped = true,
        Text = l_LocalizedStrings_0:LocalizedString("RobuxBalanceOverlayPhrase"),
        Parent = v12.Container
    });
    local v17 = l_Utility_0.Create("TextLabel")({
        Name = "platformBalanceTitle",
        BackgroundTransparency = 1,
        Font = l_GlobalSettings_0.RegularFont,
        FontSize = l_GlobalSettings_0.TitleSize,
        TextXAlignment = Enum.TextXAlignment.Left,
        TextColor3 = l_GlobalSettings_0.WhiteTextColor,
        Text = l_LocalizedStrings_0:LocalizedString("PlatformBalanceTitle"),
        Parent = v12.Container
    });
    local l_l_TextService_0_TextSize_0 = l_TextService_0:GetTextSize(v17.Text, 42, l_GlobalSettings_0.RegularFont, Vector2.new());
    v17.Size = UDim2.new(0, l_l_TextService_0_TextSize_0.x, 0, l_l_TextService_0_TextSize_0.y);
    v17.AnchorPoint = Vector2.new(0, 0.5);
    v17.Position = UDim2.new(0, v12.RightAlign, 0, (v16.Position.Y.Offset + v16.Size.Y.Offset) + 60);
    local v19 = v17:Clone();
    v19.Name = "TotalBalanceTitle";
    v19.Text = l_LocalizedStrings_0:LocalizedString("TotalBalanceTitle");
    v19.Parent = v12.Container;
    l_l_TextService_0_TextSize_0 = l_TextService_0:GetTextSize(v19.Text, 42, l_GlobalSettings_0.RegularFont, Vector2.new());
    v19.Size = UDim2.new(0, l_l_TextService_0_TextSize_0.x, 0, l_l_TextService_0_TextSize_0.y);
    v19.AnchorPoint = Vector2.new(0, 0.5);
    v19.Position = UDim2.new(0, v12.RightAlign, 0, (v17.Position.Y.Offset + v17.Size.Y.Offset) + 16);
    local v20 = l_Utility_0.Create("TextLabel")({
        Name = "XboxBalanceText",
        BackgroundTransparency = 1,
        Font = l_GlobalSettings_0.RegularFont,
        FontSize = l_GlobalSettings_0.TitleSize,
        TextXAlignment = Enum.TextXAlignment.Left,
        TextColor3 = l_GlobalSettings_0.GreenTextColor,
        Parent = v12.Container
    });
    local function v22(v21)
        v20.Text = l_Utility_0.FormatNumberString(v21);
        l_l_TextService_0_TextSize_0 = l_TextService_0:GetTextSize(v20.Text, 42, l_GlobalSettings_0.RegularFont, Vector2.new());
        v20.Size = UDim2.new(0, l_l_TextService_0_TextSize_0.x, 0, l_l_TextService_0_TextSize_0.y);
        v20.AnchorPoint = Vector2.new(0, 0.5);
        v20.Position = UDim2.new(0, (v12.RightAlign + v17.Size.X.Offset) + 8, 0, v17.Position.Y.Offset);
    end;
    v22(v10);
    local v23 = v20:Clone();
    v23.Name = "TotalBalanceText";
    v23.Parent = v12.Container;
    local function v25(v24)
        v23.Text = l_Utility_0.FormatNumberString(v24);
        l_l_TextService_0_TextSize_0 = l_TextService_0:GetTextSize(v23.Text, 42, l_GlobalSettings_0.RegularFont, Vector2.new());
        v23.Size = UDim2.new(0, l_l_TextService_0_TextSize_0.x, 0, l_l_TextService_0_TextSize_0.y);
        v23.Position = UDim2.new(0, (v12.RightAlign + v19.Size.X.Offset) + 8, 0, v19.Position.Y.Offset);
    end;
    v25(v11);
    local v26 = l_Utility_0.Create("TextButton")({
        Name = "OkButton",
        Size = UDim2.new(0, 320, 0, 66),
        Position = UDim2.new(0, v15.Position.X.Offset, 1, -121),
        BorderSizePixel = 0,
        BackgroundColor3 = l_GlobalSettings_0.BlueButtonColor,
        Font = l_GlobalSettings_0.RegularFont,
        FontSize = l_GlobalSettings_0.ButtonSize,
        TextColor3 = l_GlobalSettings_0.TextSelectedColor,
        Text = l_LocalizedStrings_0:LocalizedString("OkWord"),
        Parent = v12.Container;
        l_SoundManager_0:CreateSound("MoveSelection")
    });
    l_Utility_0.ResizeButtonWithText(v26, v26, l_GlobalSettings_0.TextHorizontalPadding);
    v26.MouseButton1Click:connect(function()
        v12:Close();
    end);
    v12.GetAnalyticsInfo = function(_)
        return {
            [l_Analytics_0.WidgetNames("WidgetId")] = l_Analytics_0.WidgetNames("RobuxBalanceOverlayId")
        };
    end;
    local l_Focus_0 = v12.Focus;
    v12.Focus = function(_)
        l_Focus_0(v12);
        l_Utility_0.SetSelectedCoreObject(v26);
        if not v13 then
            v13 = l_CurrencyWidget_0();
        end;
        v14 = l_Utility_0.DisconnectEvent(v14);
        v14 = v13.RobuxChanged:connect(function(v30)
            v22(v30);
            v25(l_UserData_0.GetTotalUserBalanceAsync());
        end);
    end;
    v12.ScreenRemoved = function(_)
        v14 = l_Utility_0.DisconnectEvent(v14);
        v13:Destroy();
        v13 = nil;
    end;
    return v12;
end;


local v0 = nil;
pcall(function()
    v0 = game:GetService("ThirdPartyUserService");
end);
local v1 = nil;
if v0 then
    v0.ActiveUserSignedOut:connect(function()
        v1 = {};
    end);
end;
return function(v2)
    local v3 = {};
    local v4 = nil;
    local l_asyncFunc_0 = v2.asyncFunc;
    assert(type(l_asyncFunc_0) == "function", "Must init with an async function.");
    local l_userRelated_0 = v2.userRelated;
    local l_callback_0 = v2.callback;
    local v8 = false;
    local v9 = v2.retries or 0;
    local v10 = v2.retryFunc or function()
        return false;
    end;
    local v12 = v2.waitFunc or function(v11)
        wait(v11 * v11);
    end;
    v3.Cancel = function(_)
        v8 = true;
    end;
    setmetatable(v3, {
        __call = function(_, ...)
            local v15 = {};
            v4 = v15;
            local l_v1_0 = v1;
            local function _()
                if v4 ~= v15 then
                    return true;
                elseif l_userRelated_0 and l_v1_0 ~= v1 then
                    return true;
                elseif not v8 then
                    return ;
                else
                    return true;
                end;
            end;
            local v18 = {
                l_asyncFunc_0(...)
            };
            local v19 = 1;
            local v20 = (v4 ~= v15 or l_userRelated_0 and l_v1_0 ~= v1) or (v8 and true or nil);
            while not (not (not v20 and v19 <= v9) or not v10(unpack(v18))) do
                v12(v19);
                v19 = v19 + 1;
                v20 = (v4 ~= v15 or l_userRelated_0 and l_v1_0 ~= v1) or (v8 and true or nil);
                if not v20 then
                    v18 = {
                        l_asyncFunc_0(...)
                    };
                    if v4 ~= v15 then
                        v20 = true;
                    elseif l_userRelated_0 and l_v1_0 ~= v1 then
                        v20 = true;
                    elseif not v8 then
                        v20 = nil;
                    else
                        v20 = true;
                    end;
                end;
            end;
            if not v20 and type(l_callback_0) == "function" then
                l_callback_0(unpack(v18));
            end;
        end
    });
    return v3;
end;


return function(v0)
    local v1 = {};
    local v2 = nil;
    local l_asyncFunc_0 = v0.asyncFunc;
    assert(type(l_asyncFunc_0) == "function", "Must init with an async function.");
    local l_userRelated_0 = v0.userRelated;
    local l_callback_0 = v0.callback;
    local v6 = v0.retries or 0;
    local v7 = v0.retryFunc or function()
        return false;
    end;
    local v9 = v0.waitFunc or function(v8)
        wait(v8 * v8);
    end;
    local v10 = false;
    v1.Cancel = function(_)
        v10 = true;
    end;
    setmetatable(v1, {
        __call = function(_, v13, ...)
            assert(type(v13) == "table", "Must call with the store.");
            local v14 = {};
            v2 = v14;
            local l_RobloxUser_0 = v13:getState().RobloxUser;
            local function _()
                if v2 ~= v14 then
                    return true;
                elseif l_userRelated_0 and l_RobloxUser_0 ~= v13:getState().RobloxUser then
                    return true;
                elseif not v10 then
                    return ;
                else
                    return true;
                end;
            end;
            local v17 = {
                l_asyncFunc_0(v13, ...)
            };
            local v18 = 1;
            local v19 = (v2 ~= v14 or l_userRelated_0 and l_RobloxUser_0 ~= v13:getState().RobloxUser) or (v10 and true or nil);
            while not (not (not v19 and v18 <= v6) or not v7(v13, unpack(v17))) do
                v9(v18);
                v18 = v18 + 1;
                v19 = (v2 ~= v14 or l_userRelated_0 and l_RobloxUser_0 ~= v13:getState().RobloxUser) or (v10 and true or nil);
                if not v19 then
                    v17 = {
                        l_asyncFunc_0(v13, ...)
                    };
                    if v2 ~= v14 then
                        v19 = true;
                    elseif l_userRelated_0 and l_RobloxUser_0 ~= v13:getState().RobloxUser then
                        v19 = true;
                    elseif not v10 then
                        v19 = nil;
                    else
                        v19 = true;
                    end;
                end;
            end;
            if not v19 and type(l_callback_0) == "function" then
                l_callback_0(v13, unpack(v17));
            end;
        end
    });
    return v1;
end;


local l_CoreGui_0 = game:GetService("CoreGui");
local l_RobloxGui_0 = l_CoreGui_0.RobloxGui;
local l_Shell_0 = l_RobloxGui_0:FindFirstChild("Modules"):FindFirstChild("Shell");
local v3 = require(script.Parent.Analytics);
local v4 = require(script.Parent.AppState);
local v5 = require(script.Parent.GlobalSettings);
local v6 = require(script.Parent.Models.ScreenItem);
local v7 = require(script.Parent.SoundManager);
local v8 = require(script.Parent.Utility);
local v9 = require(script.Parent.PageHeartbeatTimer);
local v10 = require(script.Parent.Actions.InsertScreen);
local v11 = require(script.Parent.Actions.RemoveScreen);
local l_contentHistory_0 = require(l_Shell_0.XboxPrimaryNav:FindFirstChild("contentHistory"));
local v13 = require(l_Shell_0.Flags.GetFIntXboxPrimaryNavABLogging);
local v14 = {};
local v15 = {};
local v16 = {
    [1] = l_RobloxGui_0
};
local function _(v17)
    local l_DefaultPriority_0 = v5.DefaultPriority;
    if v17.GetPriority ~= nil then
        l_DefaultPriority_0 = v17:GetPriority();
    end;
    return l_DefaultPriority_0;
end;
local function v23(v20, v21)
    if v20 and type(v20.GetAnalyticsInfo) == "function" then
        local l_v20_AnalyticsInfo_0 = v20:GetAnalyticsInfo();
        if not (not (type(l_v20_AnalyticsInfo_0) == "table") or not l_v20_AnalyticsInfo_0[v3.WidgetNames("WidgetId")]) then
            l_v20_AnalyticsInfo_0.Status = v21;
            v3.SetRBXEventStream("Widget", l_v20_AnalyticsInfo_0);
        end;
    end;
end;
v14.GetScreenGuiByPriority = function(_, v25)
    v25 = math.max(1, v25);
    if not v16[v25] then
        for v26 = 1, v25 do
            if not v16[v26] then
                v16[v26] = v8.Create("ScreenGui")({
                    Name = "AppShell" .. tostring(v26),
                    Parent = l_CoreGui_0
                });
            end;
        end;
    end;
    return v16[v25];
end;
v14.OpenScreen = function(_, v28, v29)
    if v29 == nil then
        v29 = true;
    end;
    local v30 = {
        hidePrevious = v29
    };
    local v31 = tostring(v28);
    v15[v31] = {
        screen = v28,
        isShown = false
    };
    local l_new_0 = v6.new;
    local l_v31_0 = v31;
    local l_DefaultPriority_1 = v5.DefaultPriority;
    if v28.GetPriority ~= nil then
        l_DefaultPriority_1 = v28:GetPriority();
    end;
    l_new_0 = l_new_0(l_v31_0, l_DefaultPriority_1, v30);
    if v13() > 0 then
        l_v31_0 = v14:GetTopScreen();
        if l_v31_0 then
            l_contentHistory_0:setLastSelectedContent(l_v31_0);
        end;
    end;
    v4.store:dispatch(v10(l_new_0));
end;
v14.CloseCurrent = function(_, v36)
    local l_ScreenList_0 = v4.store:getState().ScreenList;
    local v38 = false;
    if #l_ScreenList_0 > 0 then
        v38 = l_ScreenList_0[1];
    end;
    if v38 and v15[v38.id] then
        if v36 and v38.id ~= tostring(v36) then
            return ;
        else
            v4.store:dispatch(v11(v38));
            return ;
        end;
    else
        return ;
    end;
end;
local function v50(v39)
    local v40 = {};
    for _, v42 in ipairs(v39) do
        v40[v42.id] = true;
    end;
    local v43 = {};
    for v44, _ in pairs(v15) do
        if not v40[v44] then
            table.insert(v43, v44);
        end;
    end;
    for _, v47 in ipairs(v43) do
        local v48 = v15[v47];
        if v48 then
            local l_screen_0 = v48.screen;
            l_screen_0:RemoveFocus();
            l_screen_0:Hide();
            if l_screen_0.ScreenRemoved then
                l_screen_0:ScreenRemoved();
            end;
            v23(l_screen_0, "Close");
        end;
        v15[v47] = nil;
    end;
end;
local function v58(v51)
    for v52 = #v51, 1, -1 do
        local v53 = v15[v51[v52].id];
        if v53 then
            local l_screen_1 = v53.screen;
            if v52 > 1 then
                local v55 = true;
                local v56 = v51[v52 - 1];
                if not (not v56 or not v56.data) then
                    v55 = v56.data.hidePrevious;
                end;
                l_screen_1:RemoveFocus();
                if v55 then
                    l_screen_1:Hide();
                    v53.isShown = false;
                end;
                if not (v53.isShown or v55) then
                    l_screen_1:Show();
                    v53.isShown = true;
                end;
            else
                if not v53.isShown then
                    l_screen_1:Show();
                    v53.isShown = true;
                    v23(l_screen_1, "Show");
                end;
                l_screen_1:Focus();
                v23(l_screen_1, "Focus");
                local v57 = v53.screen.GetAnalyticsInfo and v53.screen.GetAnalyticsInfo();
                if v57 then
                    v9.onPageChanged(v57[v3.WidgetNames("WidgetId")]);
                end;
            end;
        end;
    end;
    v3.reportPageChanged();
end;
local function _(v59)
    v50(v59);
    v58(v59);
end;
v4.store.changed:connect(function(v61, v62)
    local l_ScreenList_1 = v61.ScreenList;
    if l_ScreenList_1 == v62.ScreenList then
        return ;
    else
        v50(l_ScreenList_1);
        v58(l_ScreenList_1);
        return ;
    end;
end);
v14.ContainsScreen = function(_, v65)
    for _, v67 in pairs(v15) do
        if v67.screen == v65 then
            return true;
        end;
    end;
    return false;
end;
v14.GetScreenBelow = function(_, v69)
    local l_ScreenList_2 = v4.store:getState().ScreenList;
    for v71, v72 in ipairs(l_ScreenList_2) do
        if v72.id == tostring(v69) then
            local v73 = l_ScreenList_2[v71 + 1];
            if v73 then
                local v74 = v15[v73.id];
                if v74 then
                    return v74.screen;
                end;
            end;
        end;
    end;
    return nil;
end;
v14.GetTopScreen = function(_)
    local l_ScreenList_3 = v4.store:getState().ScreenList;
    if l_ScreenList_3 and #l_ScreenList_3 > 0 then
        return v15[l_ScreenList_3[1].id].screen;
    else
        return nil;
    end;
end;
local function v77(v78, v79)
    if v78 == nil then
        return ;
    else
        if not (not v78:IsA("ImageLabel") and not v78:IsA("ImageButton")) then
            table.insert(v79, v8.PropertyTweener(v78, "ImageTransparency", 1, v78.ImageTransparency, 0.5, v8.EaseOutQuad));
        end;
        if v78:IsA("GuiObject") then
            table.insert(v79, v8.PropertyTweener(v78, "BackgroundTransparency", 1, v78.BackgroundTransparency, 0.5, v8.EaseOutQuad));
        end;
        if not (not (v78:IsA("TextLabel") or v78:IsA("TextBox")) and not v78:IsA("TextButton")) then
            table.insert(v79, v8.PropertyTweener(v78, "TextTransparency", 1, v78.TextTransparency, 0.5, v8.EaseOutQuad));
        end;
        for _, v81 in pairs(v78:GetChildren()) do
            v77(v81, v79);
        end;
        return ;
    end;
end;
v14.FadeInSitu = function(_, v83)
    local v84 = {};
    if v83 then
        v77(v83, v84);
    end;
    return v84;
end;
v14.DefaultFadeIn = function(_, v86)
    local v87 = {};
    if v86 then
        table.insert(v87, v8.PropertyTweener(v86, "Position", v86.Position + UDim2.new(0.15, 0, 0, 0), v86.Position, 0.5, function(v88, v89, v90, v91)
            if v91 <= v88 then
                return v89 + v90;
            else
                v88 = v88 / v91;
                local v92 = v88 * (v88 - 2);
                return -UDim2.new(v90.X.Scale * v92, v90.X.Offset * v92, v90.Y.Scale * v92, v90.Y.Offset * v92) + v89;
            end;
        end));
        v77(v86, v87);
    end;
    return v87;
end;
v14.DefaultCancelFade = function(_, v94)
    if v94 then
        for _, v96 in pairs(v94) do
            v96:Finish();
        end;
    end;
    return nil;
end;
v14.PlayDefaultOpenSound = function(_)
    v7:Play("ScreenChange");
end;
return v14;


local l_Utility_0 = require(game:GetService("CoreGui"):FindFirstChild("RobloxGui"):FindFirstChild("Modules"):FindFirstChild("Shell"):FindFirstChild("Utility"));
local l_GuiService_0 = game:GetService("GuiService");
return function(v2)
    local v3 = {
        Enum = {
            ScrollDirection = {
                Vertical = 1,
                Horizontal = 2
            },
            StartCorner = {
                UpperLeft = 1,
                UpperRight = 2,
                BottomLeft = 3,
                BottomRight = 4
            }
        },
        RecalcLayout = nil,
        GridItems = {},
        ItemSet = {}
    };
    v2 = v2 or {};
    v3.ScrollDirection = not not v2.ScrollDirection and v3.Enum.ScrollDirection[v2.ScrollDirection] or v3.Enum.ScrollDirection.Vertical;
    v3.StartCorner = not not v2.StartCorner and v3.Enum.StartCorner[v2.StartCorner] or v3.Enum.StartCorner.UpperLeft;
    v3.FixedRowColumnCount = v2.FixedRowColumnCount;
    v3.CellSize = v2.CellSize or Vector2.new(100, 100);
    v3.Padding = v2.Padding or Vector2.new(0, 0);
    v3.Spacing = v2.Spacing or Vector2.new(0, 0);
    v3.Dynamic = v2.Dynamic or false;
    local v4 = {
        Size = UDim2.new(1, 0, 1, 0),
        Position = UDim2.new(0, 0, 0, 0),
        CanvasSize = UDim2.new(1, 0, 1, 0),
        Name = "ScrollingGridContainer",
        BackgroundTransparency = 1,
        ClipsDescendants = true,
        Visible = true,
        ScrollingEnabled = false,
        ScrollBarThickness = 0,
        Selectable = false
    };
    for v5, v6 in pairs(v2) do
        if v4[v5] ~= nil then
            v4[v5] = v6;
        end;
    end;
    v3.Container = l_Utility_0.Create("ScrollingFrame")(v4);
    v3.DefaultSelection = v3.Container;
    v3.Container:GetPropertyChangedSignal("AbsoluteSize"):connect(function()
        v3:RecalcLayout();
    end);
    v3.GetPadding = function(v7)
        return v7.Padding;
    end;
    v3.SetPadding = function(v8, v9)
        if v9 ~= v8.Padding then
            v8.Padding = v9;
            v8:RecalcLayout();
        end;
    end;
    v3.GetSpacing = function(v10)
        return v10.Spacing;
    end;
    v3.SetSpacing = function(v11, v12)
        if v12 ~= v11.Spacing then
            v11.Spacing = v12;
            v11:RecalcLayout();
        end;
    end;
    v3.GetCellSize = function(v13)
        return v13.CellSize;
    end;
    v3.GetGridItemSize = function(v14)
        return v14.CellSize;
    end;
    v3.SetCellSize = function(v15, v16)
        if v16 ~= v15.CellSize then
            v15.CellSize = v16;
            v15:RecalcLayout();
        end;
    end;
    v3.GetScrollDirection = function(v17)
        return v17.ScrollDirection;
    end;
    v3.SetScrollDirection = function(v18, v19)
        if v19 ~= v18.ScrollDirection then
            v18.ScrollDirection = v19;
            v18:RecalcLayout();
        end;
    end;
    v3.GetStartCorner = function(v20)
        return v20.StartCorner;
    end;
    v3.SetStartCorner = function(v21, v22)
        if v22 ~= v21.StartCorner then
            v21.StartCorner = v22;
            v21:RecalcLayout();
        end;
    end;
    v3.GetRowColumnConstraint = function(v23)
        return v23.FixedRowColumnCount;
    end;
    v3.SetRowColumnConstraint = function(v24, v25)
        if v25 < 1 then
            v25 = nil;
        end;
        if v25 ~= v24.FixedRowColumnCount then
            v24.FixedRowColumnCount = v25;
            v24:RecalcLayout();
        end;
    end;
    v3.GetClipping = function(v26)
        return v26.Container.ClipsDescendants;
    end;
    v3.SetClipping = function(v27, v28)
        v27.Container.ClipsDescendants = v28;
    end;
    v3.GetVisible = function(v29)
        return v29.Container.Visible;
    end;
    v3.SetVisible = function(v30, v31)
        v30.Container.Visible = v31;
    end;
    v3.GetSize = function(v32)
        return v32.Container.Size;
    end;
    v3.SetSize = function(v33, v34)
        v33.Container.Size = v34;
    end;
    v3.GetPosition = function(v35)
        return v35.Container.Position;
    end;
    v3.SetPosition = function(v36, v37)
        v36.Container.Position = v37;
    end;
    v3.GetParent = function(v38)
        return v38.Container.Parent;
    end;
    v3.SetParent = function(v39, v40)
        v39.Container.Parent = v40;
    end;
    v3.GetGuiObject = function(v41)
        return v41.Container;
    end;
    v3.SetDefaultSelection = function(v42, v43)
        v42.DefaultSelection = v43;
    end;
    v3.ResetDefaultSelection = function(v44)
        v44.DefaultSelection = v44.Container;
    end;
    v3.ContainsItem = function(v45, v46)
        return v45.ItemSet[v46] ~= nil;
    end;
    v3.FindAncestorGridItem = function(v47, v48)
        if v48 ~= nil then
            if not v47:ContainsItem(v48) then
                return v47:FindAncestorGridItem(v48.Parent);
            else
                return v48;
            end;
        else
            return ;
        end;
    end;
    v3.Get2DGridIndex = function(v49, v50)
        local v51 = v50 - 1;
        local l_v49_NumRowsColumns_0, v53 = v49:GetNumRowsColumns();
        local _ = nil;
        local _ = nil;
        if v49.ScrollDirection == v49.Enum.ScrollDirection.Vertical then
            return math.floor(v51 / v53), v51 % v53;
        else
            return v51 % l_v49_NumRowsColumns_0, (math.floor(v51 / l_v49_NumRowsColumns_0));
        end;
    end;
    v3.GetGridPosition = function(v56, v57, v58)
        local l_v56_CellSize_0 = v56:GetCellSize();
        local l_v56_Spacing_0 = v56:GetSpacing();
        local l_v56_Padding_0 = v56:GetPadding();
        return UDim2.new(0, (l_v56_Padding_0.X + v58 * l_v56_CellSize_0.X) + v58 * l_v56_Spacing_0.X, 0, (l_v56_Padding_0.Y + v57 * l_v56_CellSize_0.Y) + v57 * l_v56_Spacing_0.Y);
    end;
    v3.GetCanvasPositionForOffscreenItem = function(v62, v63)
        if not ((not v63 or not v62.Container) or not v62:ContainsItem(v63)) then
            if v62.ScrollDirection == v62.Enum.ScrollDirection.Vertical then
                if v63.AbsolutePosition.Y <= v62.Container.AbsolutePosition.Y then
                    return l_Utility_0.ClampCanvasPosition(v62.Container, Vector2.new(0, v63.Position.Y.Offset));
                elseif v62.Container.AbsolutePosition.Y + v62.Container.AbsoluteWindowSize.Y <= v63.AbsolutePosition.Y + v63.AbsoluteSize.Y then
                    return l_Utility_0.ClampCanvasPosition(v62.Container, Vector2.new(0, -((v62.Container.AbsoluteWindowSize.Y - v63.Position.Y.Offset) - v63.AbsoluteSize.Y)));
                end;
            elseif v63.AbsolutePosition.X <= v62.Container.AbsolutePosition.X then
                return l_Utility_0.ClampCanvasPosition(v62.Container, Vector2.new(v63.Position.X.Offset, 0));
            elseif v62.Container.AbsolutePosition.X + v62.Container.AbsoluteWindowSize.X <= v63.AbsolutePosition.X + v63.AbsoluteSize.X then
                return l_Utility_0.ClampCanvasPosition(v62.Container, Vector2.new(-((v62.Container.AbsoluteWindowSize.X - v63.Position.X.Offset) - v63.AbsoluteSize.X), 0));
            end;
        end;
    end;
    v3.Destroy = function(v64)
        if v64.Container then
            v64.Container:Destroy();
        end;
    end;
    if v3.Dynamic then
        v3.targetCanvasPosition = Vector2.new(0, 0);
        v3.gridCount = v2.gridCount or 0;
        v3.Enum.SelectionMode = {
            Middle = 1,
            TopLeft = 2,
            Normal = 3
        };
        v3.SelectionMode = not not v2.SelectionMode and v3.Enum.SelectionMode[v2.SelectionMode] or v3.Enum.SelectionMode.Normal;
        v3.GetItemVisible = function(v65, v66, v67)
            if not v67 then
                if v3.ScrollDirection == v3.Enum.ScrollDirection.Vertical then
                    local v68 = true;
                    if v66.Position.Y.Offset >= v65.Container.CanvasPosition.Y + v65.Container.AbsoluteWindowSize.Y then
                        v68 = v65.Container.CanvasPosition.Y < v66.Position.Y.Offset + v66.AbsoluteSize.Y;
                    end;
                    return v68;
                else
                    local v69 = true;
                    if v66.Position.X.Offset >= v65.Container.CanvasPosition.X + v65.Container.AbsoluteWindowSize.X then
                        v69 = v65.Container.CanvasPosition.X < v66.Position.X.Offset + v66.AbsoluteSize.X;
                    end;
                    return v69;
                end;
            elseif v3.ScrollDirection == v3.Enum.ScrollDirection.Vertical then
                local v70 = false;
                if v65.Container.CanvasPosition.Y <= v66.Position.Y.Offset then
                    v70 = v66.Position.Y.Offset + v66.AbsoluteSize.Y <= v65.Container.CanvasPosition.Y + v65.Container.AbsoluteWindowSize.Y;
                end;
                return v70;
            else
                local v71 = false;
                if v65.Container.CanvasPosition.X <= v66.Position.X.Offset then
                    v71 = v66.Position.X.Offset + v66.AbsoluteSize.X <= v65.Container.CanvasPosition.X + v65.Container.AbsoluteWindowSize.X;
                end;
                return v71;
            end;
        end;
        v3.SetItemCallback = function(v72, v73, v74)
            v72.getItemFunc = v73;
            if v74 then
                v72:RecalcLayout();
            end;
        end;
        v3.GetNumRowsColumns = function(v75)
            local v76 = 0;
            local v77 = 0;
            local l_AbsoluteWindowSize_0 = v75.Container.AbsoluteWindowSize;
            local l_v75_Padding_0 = v75:GetPadding();
            local l_v75_CellSize_0 = v75:GetCellSize();
            local l_v75_Spacing_0 = v75:GetSpacing();
            local v82 = (l_Utility_0.ClampVector2(Vector2.new(0, 0), l_AbsoluteWindowSize_0 - l_v75_Padding_0, l_AbsoluteWindowSize_0 - l_v75_Padding_0) + l_v75_Spacing_0) / l_Utility_0.ClampVector2(Vector2.new(1, 1), l_v75_CellSize_0 + l_v75_Spacing_0, l_v75_CellSize_0 + l_v75_Spacing_0);
            local v83 = 0;
            for _, v85 in pairs(v75.GridItems) do
                if v85 then
                    v83 = v83 + 1;
                end;
            end;
            if v75.ScrollDirection == v75.Enum.ScrollDirection.Vertical then
                v77 = math.max(1, (math.floor(v82.x)));
                return math.ceil(math.max(1, v83) / v77), v77;
            else
                v76 = math.max(1, (math.floor(v82.y)));
                return v76, (math.ceil(math.max(1, v83) / v76));
            end;
        end;
        v3.GetIndexFrom2D = function(v86, v87, v88)
            local l_v86_NumRowsColumns_0, v90 = v86:GetNumRowsColumns();
            local _ = 0;
            if v86.ScrollDirection == v86.Enum.ScrollDirection.Vertical then
                return (v87 - 1) * v90 + v88;
            else
                return (v88 - 1) * l_v86_NumRowsColumns_0 + v87;
            end;
        end;
        v3.GetItemRowColumnFromScreenPosition = function(v92, v93, v94)
            local l_v92_CellSize_0 = v92:GetCellSize();
            local l_v92_Spacing_0 = v92:GetSpacing();
            local _ = v92:GetPadding();
            return math.floor(v94 / (l_v92_Spacing_0.Y + l_v92_CellSize_0.Y)) + 1, math.floor(v93 / (l_v92_Spacing_0.X + l_v92_CellSize_0.X)) + 1;
        end;
        v3.Add = function(v98, v99, v100)
            v98.GridItems[v99] = v100;
            v100.Parent = v98.Container;
            v98.ItemSet[v100] = true;
        end;
        v3.Remove = function(v101, v102)
            local v103 = v101.GridItems[v102];
            v101.GridItems[v102] = nil;
            if v103 then
                v103.Parent = nil;
                if l_GuiService_0.SelectedCoreObject == v103 then
                    l_Utility_0.SetSelectedCoreObject(nil);
                end;
                v101.ItemSet[v103] = nil;
            end;
        end;
        v3.GetActiveItemsRange = function(v104, v105)
            local v106 = v105 or v104.Container.AbsoluteWindowSize;
            local l_X_0 = v106.X;
            local l_Y_0 = v106.Y;
            local l_targetCanvasPosition_0 = v104.targetCanvasPosition;
            local l_X_1 = l_targetCanvasPosition_0.X;
            local l_Y_1 = l_targetCanvasPosition_0.Y;
            local l_v104_CellSize_0 = v104:GetCellSize();
            local l_v104_Spacing_0 = v104:GetSpacing();
            local _ = v104:GetPadding();
            local v115 = l_v104_Spacing_0.X + l_v104_CellSize_0.X;
            local v116 = l_v104_Spacing_0.Y + l_v104_CellSize_0.Y;
            local v117 = math.floor(l_X_1 / v115) + 1;
            local v118 = math.ceil((l_X_1 + l_X_0) / v115);
            local v119 = math.floor(l_Y_1 / v116) + 1;
            local v120 = math.ceil((l_Y_1 + l_Y_0) / v116);
            local l_v104_IndexFrom2D_0 = v104:GetIndexFrom2D(v119, v117);
            local l_v104_IndexFrom2D_1 = v104:GetIndexFrom2D(v120, v118);
            local l_v104_NumRowsColumns_0, v124 = v104:GetNumRowsColumns();
            if v104.ScrollDirection == v104.Enum.ScrollDirection.Vertical then
                l_v104_IndexFrom2D_1 = l_v104_IndexFrom2D_1 + v124;
                l_v104_IndexFrom2D_0 = l_v104_IndexFrom2D_0 - v124;
            else
                l_v104_IndexFrom2D_1 = l_v104_IndexFrom2D_1 + l_v104_NumRowsColumns_0;
                l_v104_IndexFrom2D_0 = l_v104_IndexFrom2D_0 - l_v104_NumRowsColumns_0;
            end;
            if l_v104_IndexFrom2D_0 < 1 then
                l_v104_IndexFrom2D_0 = 1;
            end;
            if l_v104_IndexFrom2D_1 < 1 then
                l_v104_IndexFrom2D_1 = 1;
            end;
            return l_v104_IndexFrom2D_0, l_v104_IndexFrom2D_1;
        end;
        v3.Rewindow = function(v125, v126)
            if v125.getItemFunc then
                local v127 = {};
                local v128 = {};
                for v129, v130 in pairs(v125.GridItems) do
                    v127[v130] = v129;
                end;
                local v131 = {};
                local l_v125_ActiveItemsRange_0, v133 = v125:GetActiveItemsRange(v126);
                for v134 = l_v125_ActiveItemsRange_0, v133 do
                    local v135 = v125.getItemFunc(v134);
                    if v135 then
                        local v136 = v127[v135];
                        if not v136 then
                            v131[v135] = v134;
                        else
                            v127[v135] = nil;
                            if v136 ~= v134 then
                                v128[v136] = v134;
                            end;
                        end;
                    end;
                end;
                for _, v138 in pairs(v127) do
                    v125:Remove(v138);
                end;
                for v139, v140 in pairs(v128) do
                    v131[v125.GridItems[v139]] = v140;
                    v125.GridItems[v139] = nil;
                end;
                for v141, v142 in pairs(v131) do
                    v125:Add(v142, v141);
                end;
                for v143, v144 in pairs(v125.GridItems) do
                    local l_v125_2DGridIndex_0, v146 = v125:Get2DGridIndex(v143);
                    v144.Position = v125:GetGridPosition(l_v125_2DGridIndex_0, v146);
                end;
            end;
        end;
        v3.GetSelectableItem = function(v147, v148, v149)
            local l_AbsoluteWindowSize_1 = v147.Container.AbsoluteWindowSize;
            local _, _ = v147:GetItemRowColumnFromScreenPosition(v147.Container.CanvasPosition.X + l_AbsoluteWindowSize_1.X / 2, v147.Container.CanvasPosition.Y + l_AbsoluteWindowSize_1.Y / 2);
            local v153 = nil;
            local l_huge_0 = math.huge;
            for v155, v156 in pairs(v147.GridItems) do
                local l_l_huge_0_0 = l_huge_0;
                if not v149 then
                    local l_v147_2DGridIndex_0, v159 = v147:Get2DGridIndex(v155);
                    l_l_huge_0_0 = math.abs(v159) + math.abs(l_v147_2DGridIndex_0);
                else
                    l_l_huge_0_0 = math.abs(v155 - v149);
                end;
                if not (v156.Position.X.Offset >= v3.targetCanvasPosition.X) or v156.Position.Y.Offset < v3.targetCanvasPosition.Y then
                    l_l_huge_0_0 = l_l_huge_0_0 + 10000;
                end;
                if l_l_huge_0_0 < l_huge_0 then
                    v153 = v156;
                    l_huge_0 = l_l_huge_0_0;
                end;
            end;
            return v153 or v148 and v147.Container;
        end;
        v3.SelectAvailableItem = function(v160, v161, v162)
            local l_v160_SelectableItem_0 = v160:GetSelectableItem(v161, v162);
            if l_v160_SelectableItem_0 then
                l_Utility_0.SetSelectedCoreObject(l_v160_SelectableItem_0);
            end;
        end;
        v3.Focus = function(v164)
            local l_v164_AncestorGridItem_0 = v164:FindAncestorGridItem(l_GuiService_0.SelectedCoreObject);
            if not (l_v164_AncestorGridItem_0 and v164:ContainsItem(l_v164_AncestorGridItem_0)) then
                v164:SelectAvailableItem();
            end;
        end;
        v3.RemoveFocus = function(_)
            if v3:ContainsItem(l_GuiService_0.SelectedCoreObject) then
                l_Utility_0.SetSelectedCoreObject(nil);
            end;
        end;
        v3.RecalcLayout = function(v167, v168)
            if v168 then
                v167.gridCount = v168;
            end;
            local l_v167_AncestorGridItem_0 = v167:FindAncestorGridItem(l_GuiService_0.SelectedCoreObject);
            local v170 = true;
            if l_GuiService_0.SelectedCoreObject ~= v167.Container then
                v170 = l_v167_AncestorGridItem_0 and v167:ContainsItem(l_v167_AncestorGridItem_0);
            end;
            local v171 = nil;
            if not (not v170 or not l_v167_AncestorGridItem_0) then
                local l_v167_ItemRowColumnFromScreenPosition_0, v173 = v167:GetItemRowColumnFromScreenPosition(l_v167_AncestorGridItem_0.Position.X.Offset, l_v167_AncestorGridItem_0.Position.Y.Offset);
                v171 = v167:GetIndexFrom2D(l_v167_ItemRowColumnFromScreenPosition_0, v173);
            end;
            local l_v167_Padding_0 = v167:GetPadding();
            local l_v167_Spacing_0 = v167:GetSpacing();
            local l_v167_GridItemSize_0 = v167:GetGridItemSize();
            local l_v167_NumRowsColumns_0, v178 = v167:GetNumRowsColumns();
            if v167.gridCount then
                if v167.ScrollDirection == v167.Enum.ScrollDirection.Vertical then
                    l_v167_NumRowsColumns_0 = math.ceil(math.max(1, v167.gridCount) / v178);
                else
                    v178 = math.ceil(math.max(1, v167.gridCount) / l_v167_NumRowsColumns_0);
                end;
            end;
            if v167.ScrollDirection == v167.Enum.ScrollDirection.Vertical then
                v167.Container.CanvasSize = UDim2.new(v167.Container.Size.X.Scale, v167.Container.Size.X.Offset, 0, (l_v167_Padding_0.Y * 2 + l_v167_NumRowsColumns_0 * l_v167_GridItemSize_0.Y) + math.max(0, l_v167_NumRowsColumns_0 - 1) * l_v167_Spacing_0.Y);
            else
                v167.Container.CanvasSize = UDim2.new(0, (l_v167_Padding_0.X * 2 + v178 * l_v167_GridItemSize_0.X) + math.max(0, v178 - 1) * l_v167_Spacing_0.X, v167.Container.Size.Y.Scale, v167.Container.Size.Y.Offset);
            end;
            v167.targetCanvasPosition = l_Utility_0.ClampCanvasPosition(v167.Container, v167.targetCanvasPosition);
            v167:Rewindow();
            local l_v167_AncestorGridItem_1 = v167:FindAncestorGridItem(l_GuiService_0.SelectedCoreObject);
            if not l_v167_AncestorGridItem_1 or not v167:ContainsItem(l_v167_AncestorGridItem_1) then
                if v170 then
                    v167:SelectAvailableItem(true, v171);
                end;
            else
                local l_v167_CanvasPositionForOffscreenItem_0 = v167:GetCanvasPositionForOffscreenItem(l_v167_AncestorGridItem_1);
                if l_v167_CanvasPositionForOffscreenItem_0 then
                    v167.targetCanvasPosition = l_v167_CanvasPositionForOffscreenItem_0;
                    l_Utility_0.PropertyTweener(v167.Container, "CanvasPosition", l_v167_CanvasPositionForOffscreenItem_0, l_v167_CanvasPositionForOffscreenItem_0, 0, l_Utility_0.EaseOutQuad, true, function()
                        v167:Rewindow();
                    end);
                    return ;
                end;
            end;
        end;
        v3.BackToInitial = function(v181, v182)
            if not v182 then
                v182 = 0;
            end;
            local v183 = Vector2.new(0, 0);
            local v184 = v181.Container.AbsoluteWindowSize + v181.targetCanvasPosition;
            v181.targetCanvasPosition = v183;
            v181:Rewindow(v184);
            l_Utility_0.PropertyTweener(v181.Container, "CanvasPosition", v181.Container.CanvasPosition, v183, v182, l_Utility_0.SCurveVector2, true, function()
                v181:Rewindow();
            end);
        end;
        l_GuiService_0:GetPropertyChangedSignal("SelectedCoreObject"):connect(function()
            local l_v3_AncestorGridItem_0 = v3:FindAncestorGridItem(l_GuiService_0.SelectedCoreObject);
            if not (not l_v3_AncestorGridItem_0 or not v3:ContainsItem(l_v3_AncestorGridItem_0)) then
                local v186 = nil;
                local l_v3_ItemRowColumnFromScreenPosition_0, v188 = v3:GetItemRowColumnFromScreenPosition(l_v3_AncestorGridItem_0.Position.X.Offset, l_v3_AncestorGridItem_0.Position.Y.Offset);
                local l_v3_CellSize_0 = v3:GetCellSize();
                local l_v3_Spacing_0 = v3:GetSpacing();
                local v191 = l_v3_Spacing_0.X + l_v3_CellSize_0.X;
                local v192 = l_v3_Spacing_0.Y + l_v3_CellSize_0.Y;
                if v3.SelectionMode == v3.Enum.SelectionMode.Middle then
                    local l_AbsoluteWindowSize_2 = v3.Container.AbsoluteWindowSize;
                    local l_X_2 = l_AbsoluteWindowSize_2.X;
                    local l_Y_2 = l_AbsoluteWindowSize_2.Y;
                    local l_v3_ItemRowColumnFromScreenPosition_1, v197 = v3:GetItemRowColumnFromScreenPosition(v3.Container.CanvasPosition.X + l_X_2 / 2, v3.Container.CanvasPosition.Y + l_Y_2 / 2);
                    if v3.ScrollDirection == v3.Enum.ScrollDirection.Vertical then
                        local v198 = math.floor((math.floor(l_Y_2 / v192) - 1) / 2);
                        if l_v3_ItemRowColumnFromScreenPosition_1 + v198 < l_v3_ItemRowColumnFromScreenPosition_0 then
                            v186 = Vector2.new(0, ((l_v3_ItemRowColumnFromScreenPosition_0 - v198) - 0.5) * v192 - l_Y_2 / 2);
                        elseif l_v3_ItemRowColumnFromScreenPosition_0 < l_v3_ItemRowColumnFromScreenPosition_1 - v198 then
                            v186 = Vector2.new(0, ((l_v3_ItemRowColumnFromScreenPosition_0 + v198) - 0.5) * v192 - l_Y_2 / 2);
                        end;
                    else
                        local v199 = math.floor((math.floor(l_X_2 / v191) - 1) / 2);
                        if v197 + v199 < v188 then
                            v186 = Vector2.new(((v188 - v199) - 0.5) * v191 - l_X_2 / 2, 0);
                        elseif v188 < v197 - v199 then
                            v186 = Vector2.new(((v188 + v199) - 0.5) * v191 - l_X_2 / 2, 0);
                        end;
                    end;
                else
                    v186 = if v3.SelectionMode == v3.Enum.SelectionMode.TopLeft then if v3.ScrollDirection == v3.Enum.ScrollDirection.Vertical then Vector2.new(0, (l_v3_ItemRowColumnFromScreenPosition_0 - 1) * v192) else Vector2.new((v188 - 1) * v191, 0) else v3:GetCanvasPositionForOffscreenItem(l_v3_AncestorGridItem_0);
                end;
                if (v186 and v186.X == v3.targetCanvasPosition.X) and v186.Y == v3.targetCanvasPosition.Y then
                    return ;
                elseif v186 then
                    local v200 = v3.targetCanvasPosition or v3.Container.CanvasPosition;
                    v186 = l_Utility_0.ClampCanvasPosition(v3.Container, v186);
                    v3.targetCanvasPosition = v186;
                    v3:Rewindow();
                    l_Utility_0.PropertyTweener(v3.Container, "CanvasPosition", v200, v186, 0.2, l_Utility_0.EaseOutQuad, true);
                end;
            end;
        end);
        return v3;
    else
        v3.GetFirstVisibleItem = function(v201)
            local v202 = nil;
            for v203 = #v201.GridItems, 1, -1 do
                local v204 = v201.GridItems[v203];
                if (v204 and v201.Container.CanvasPosition.X <= v204.Position.X.Offset) and v204.Position.X.Offset + v204.AbsoluteSize.X <= v201.Container.CanvasPosition.X + v201.Container.AbsoluteWindowSize.X then
                    v202 = v204;
                end;
            end;
            return v202;
        end;
        v3.SortItems = function(v205, v206)
            table.sort(v205.GridItems, v206);
            v205:RecalcLayout();
            local l_v205_AncestorGridItem_0 = v205:FindAncestorGridItem(l_GuiService_0.SelectedCoreObject);
            if not (not l_v205_AncestorGridItem_0 or not v205:ContainsItem(l_v205_AncestorGridItem_0)) then
                local l_v205_CanvasPositionForOffscreenItem_0 = v205:GetCanvasPositionForOffscreenItem(l_v205_AncestorGridItem_0);
                if l_v205_CanvasPositionForOffscreenItem_0 then
                    l_Utility_0.PropertyTweener(v205.Container, "CanvasPosition", l_v205_CanvasPositionForOffscreenItem_0, l_v205_CanvasPositionForOffscreenItem_0, 0, l_Utility_0.EaseOutQuad, true);
                end;
            end;
        end;
        v3.AddItem = function(v209, v210)
            if not v209:ContainsItem(v210) then
                table.insert(v209.GridItems, v210);
                v209.ItemSet[v210] = true;
                v210.Parent = v209.Container;
                if l_GuiService_0.SelectedCoreObject == v209.DefaultSelection then
                    l_Utility_0.SetSelectedCoreObject(v210);
                end;
                v209:RecalcLayout();
            end;
        end;
        v3.RemoveItem = function(v211, v212)
            if v211:ContainsItem(v212) then
                for v213, v214 in pairs(v211.GridItems) do
                    if v214 == v212 then
                        table.remove(v211.GridItems, v213);
                        if l_GuiService_0.SelectedCoreObject == v212 then
                            l_GuiService_0.SelectedCoreObject = ((v211.GridItems[v213] or v211.GridItems[v213 - 1]) or v211.GridItems[1]) or v211.DefaultSelection;
                        end;
                        v211.ItemSet[v212] = nil;
                        v212.Parent = nil;
                        v211:RecalcLayout();
                        return ;
                    end;
                end;
            end;
        end;
        v3.RemoveAllItems = function(v215)
            local v216 = false;
            local l_SelectedCoreObject_0 = l_GuiService_0.SelectedCoreObject;
            while l_SelectedCoreObject_0 ~= nil and v216 == false do
                v216 = v216 or v215:ContainsItem(l_SelectedCoreObject_0);
                l_SelectedCoreObject_0 = l_SelectedCoreObject_0.Parent;
            end;
            for v218 = #v215.GridItems, 1, -1 do
                local v219 = table.remove(v215.GridItems, v218);
                v215.ItemSet[v219] = nil;
                v219.Parent = nil;
            end;
            if v216 then
                l_GuiService_0.SelectedCoreObject = v215.Container;
            end;
            v215:RecalcLayout();
            v215.Container.CanvasPosition = Vector2.new(0, 0);
        end;
        v3.GetNumRowsColumns = function(v220)
            local v221 = 0;
            local v222 = 0;
            local l_AbsoluteWindowSize_3 = v220.Container.AbsoluteWindowSize;
            local l_v220_Padding_0 = v220:GetPadding();
            local l_v220_CellSize_0 = v220:GetCellSize();
            local l_v220_Spacing_0 = v220:GetSpacing();
            local v227 = (l_Utility_0.ClampVector2(Vector2.new(0, 0), l_AbsoluteWindowSize_3 - l_v220_Padding_0, l_AbsoluteWindowSize_3 - l_v220_Padding_0) + l_v220_Spacing_0) / l_Utility_0.ClampVector2(Vector2.new(1, 1), l_v220_CellSize_0 + l_v220_Spacing_0, l_v220_CellSize_0 + l_v220_Spacing_0);
            if v220.ScrollDirection == v220.Enum.ScrollDirection.Vertical then
                v222 = math.max(1, v220:GetRowColumnConstraint() or math.floor(v227.x));
                return math.ceil(math.max(1, #v220.GridItems) / v222), v222;
            else
                v221 = math.max(1, v220:GetRowColumnConstraint() or math.floor(v227.y));
                return v221, (math.ceil(math.max(1, #v220.GridItems) / v221));
            end;
        end;
        v3.RecalcLayout = function(v228)
            local l_v228_Padding_0 = v228:GetPadding();
            local l_v228_Spacing_0 = v228:GetSpacing();
            local l_v228_GridItemSize_0 = v228:GetGridItemSize();
            local l_v228_NumRowsColumns_0, v233 = v228:GetNumRowsColumns();
            if v228.ScrollDirection == v228.Enum.ScrollDirection.Vertical then
                v228.Container.CanvasSize = UDim2.new(v228.Container.Size.X.Scale, v228.Container.Size.X.Offset, 0, (l_v228_Padding_0.Y * 2 + l_v228_NumRowsColumns_0 * l_v228_GridItemSize_0.Y) + math.max(0, l_v228_NumRowsColumns_0 - 1) * l_v228_Spacing_0.Y);
            else
                v228.Container.CanvasSize = UDim2.new(0, (l_v228_Padding_0.X * 2 + v233 * l_v228_GridItemSize_0.X) + math.max(0, v233 - 1) * l_v228_Spacing_0.X, v228.Container.Size.Y.Scale, v228.Container.Size.Y.Offset);
            end;
            local v234 = {};
            for v235 = 1, #v228.GridItems do
                local l_v228_2DGridIndex_0, v237 = v228:Get2DGridIndex(v235);
                local v238 = v228.GridItems[v235];
                v238.Size = UDim2.new(0, l_v228_GridItemSize_0.X, 0, l_v228_GridItemSize_0.Y);
                v238.Position = v228:GetGridPosition(l_v228_2DGridIndex_0, v237, l_v228_GridItemSize_0);
                v234[l_v228_2DGridIndex_0] = v234[l_v228_2DGridIndex_0] or {};
                v234[l_v228_2DGridIndex_0][v237] = v238;
            end;
            for v239, v240 in pairs(v234) do
                for v241, _ in pairs(v240) do
                    local v243 = v234[v239][v241];
                    if v243 then
                        if v228.ScrollDirection == v228.Enum.ScrollDirection.Vertical then
                            v243.NextSelectionUp = not not v234[v239 - 1] and v234[v239 - 1][v241] or nil;
                            v243.NextSelectionDown = not not v234[v239 + 1] and v234[v239 + 1][v241] or nil;
                            if v243.NextSelectionDown == nil and v234[v239 + 1] ~= nil then
                                v243.NextSelectionDown = v228.GridItems[#v228.GridItems];
                            end;
                            v243.NextSelectionLeft = nil;
                            v243.NextSelectionRight = nil;
                        else
                            v243.NextSelectionLeft = not not v234[v239] and v234[v239][v241 - 1] or v243;
                            v243.NextSelectionRight = not not v234[v239] and v234[v239][v241 + 1] or nil;
                            if v243.NextSelectionRight == nil then
                                if not v234[0] or not v234[0][v241 + 1] then
                                    v243.NextSelectionRight = v243;
                                else
                                    v243.NextSelectionRight = v228.GridItems[#v228.GridItems];
                                end;
                            end;
                            v243.NextSelectionUp = nil;
                            v243.NextSelectionDown = nil;
                        end;
                    end;
                end;
            end;
        end;
        v3:RecalcLayout();
        local v244 = nil;
        l_GuiService_0:GetPropertyChangedSignal("SelectedCoreObject"):connect(function()
            local l_v3_AncestorGridItem_1 = v3:FindAncestorGridItem(l_GuiService_0.SelectedCoreObject);
            if not l_v3_AncestorGridItem_1 or not v3:ContainsItem(l_v3_AncestorGridItem_1) then
                v244 = nil;
                return ;
            else
                local v246 = v3.ScrollDirection == v3.Enum.ScrollDirection.Vertical and "NextSelectionUp" or "NextSelectionLeft";
                local v247 = v3.ScrollDirection == v3.Enum.ScrollDirection.Vertical and "NextSelectionDown" or "NextSelectionRight";
                local v248 = l_v3_AncestorGridItem_1[v246];
                local v249 = l_v3_AncestorGridItem_1[v247];
                local v250 = nil;
                local v251 = nil;
                local v252 = nil;
                local l_v3_GridItemSize_0 = v3:GetGridItemSize();
                local l_v3_CanvasPositionForOffscreenItem_0 = v3:GetCanvasPositionForOffscreenItem(l_v3_AncestorGridItem_1);
                if v244 then
                    local v255 = v244[v246];
                    local v256 = v244[v247];
                    if v248 and v255 == l_v3_AncestorGridItem_1 then
                        v251 = v3:GetCanvasPositionForOffscreenItem(v248);
                        if not (not (v248 ~= l_v3_AncestorGridItem_1) or not v251) then
                            v251 = v251 + l_v3_GridItemSize_0 / 2;
                        end;
                    elseif v249 and v256 == l_v3_AncestorGridItem_1 then
                        v252 = v3:GetCanvasPositionForOffscreenItem(v249);
                        if not (not (v249 ~= l_v3_AncestorGridItem_1) or not v252) then
                            v252 = v252 - l_v3_GridItemSize_0 / 2;
                        end;
                    end;
                end;
                v250 = if not not v251 and (not (v251.Y >= v3.Container.CanvasPosition.Y) or v251.X < v3.Container.CanvasPosition.X) then v251 else if v252 and (not (v3.Container.CanvasPosition.Y >= v252.Y) or v3.Container.CanvasPosition.X < v252.X) then v252 else l_v3_CanvasPositionForOffscreenItem_0;
                if v250 then
                    v250 = l_Utility_0.ClampCanvasPosition(v3.Container, v250);
                    if not l_v3_CanvasPositionForOffscreenItem_0 then
                        l_Utility_0.PropertyTweener(v3.Container, "CanvasPosition", v3.Container.CanvasPosition, v250, 0.2, l_Utility_0.EaseOutQuad, true);
                    elseif not (not v248 or not v249) then
                        l_Utility_0.PropertyTweener(v3.Container, "CanvasPosition", l_v3_CanvasPositionForOffscreenItem_0, l_v3_CanvasPositionForOffscreenItem_0, 0, l_Utility_0.EaseOutQuad, true, function()
                            l_Utility_0.PropertyTweener(v3.Container, "CanvasPosition", v3.Container.CanvasPosition, v250, 0.2, l_Utility_0.EaseOutQuad, true);
                        end);
                    end;
                end;
                v244 = l_v3_AncestorGridItem_1;
                return ;
            end;
        end);
        return v3;
    end;
end;