local l_Parent_0 = script.Parent;
local _ = require(l_Parent_0.Types);
local v2 = require(l_Parent_0.assertEqual);
return function(v3, v4)
    v2(typeof(v3), "table", "Attempted to call Dash.mapFirst with argument #1 of type {left:?} not {right:?}");
    v2(typeof(v4), "function", "Attempted to call Dash.mapFirst with argument #2 of type {left:?} not {right:?}");
    for v5, v6 in ipairs(v3) do
        local v7 = v4(v6, v5);
        if v7 ~= nil then
            return v7;
        end;
    end;
end;


local l_Parent_0 = script.Parent;
local _ = require(l_Parent_0.Types);
local v2 = require(l_Parent_0.assertEqual);
return function(v3, v4)
    v2(typeof(v3), "table", "Attempted to call Dash.mapLast with argument #1 of type {left:?} not {right:?}");
    v2(typeof(v4), "function", "Attempted to call Dash.mapLast with argument #2 of type {left:?} not {right:?}");
    for v5 = #v3, 1, -1 do
        local v6 = v4(v3[v5], v5);
        if v6 ~= nil then
            return v6;
        end;
    end;
end;


local l_Parent_0 = script.Parent;
local _ = require(l_Parent_0.Types);
local v2 = require(l_Parent_0.assertEqual);
return function(v3, v4)
    v2(typeof(v3), "table", "Attempted to call Dash.mapOne with argument #1 of type {left:?} not {right:?}");
    for v5, v6 in pairs(v3) do
        local v7 = nil;
        v7 = if not v4 then v6 else v4(v6, v5);
        if v7 ~= nil then
            return v7;
        end;
    end;
end;


local l_Parent_0 = script.Parent;
local _ = require(l_Parent_0.Types);
local v2 = require(l_Parent_0.assertEqual);
local v3 = require(l_Parent_0.collectSet);
local v4 = require(l_Parent_0.forEach);
return function(v5, v6)
    v2(typeof(v5), "table", "Attempted to call Dash.omit with argument #1 of type {left:?} not {right:?}");
    v2(typeof(v6), "table", "Attempted to call Dash.omit with argument #2 of type {left:?} not {right:?}");
    local v7 = {};
    local v8 = v3(v6);
    v4(v5, function(_, v10)
        if not v8[v10] then
            v7[v10] = v5[v10];
        end;
    end);
    return v7;
end;


local l_Parent_0 = script.Parent;
local _ = require(l_Parent_0.Types);
local v2 = require(l_Parent_0.assertEqual);
local v3 = require(l_Parent_0.iterator);
return function(v4, v5)
    v2(typeof(v4), "table", "Attempted to call Dash.pick with argument #1 of type {left:?} not {right:?}");
    v2(typeof(v5), "function", "Attempted to call Dash.pick with argument #2 of type {left:?} not {right:?}");
    local v6 = {};
    for v7, v8 in v3(v4) do
        if v5(v8, v7) then
            v6[v7] = v8;
        end;
    end;
    return v6;
end;


local l_Parent_0 = script.Parent;
local _ = require(l_Parent_0.Types);
local v2 = require(l_Parent_0.append);
local v3 = require(l_Parent_0.assign);
local v4 = require(l_Parent_0.cycles);
local v5 = require(l_Parent_0.includes);
local v6 = require(l_Parent_0.join);
local v7 = require(l_Parent_0.map);
local v8 = require(l_Parent_0.keys);
local v9 = require(l_Parent_0.slice);
local l_concat_0 = table.concat;
local l_insert_0 = table.insert;
local l_sort_0 = table.sort;
local function _(v13, v14)
    return v7(v13, function(v15)
        return v14 .. v15;
    end);
end;
local v17 = nil;
local function v18(v19, v20)
    v20 = v20 or {};
    if type(v19) == "table" then
        local v21 = v3({
            visited = {},
            indent = "\t",
            depth = 2
        }, v20, {
            depth = not not v20.depth and v20.depth - 1 or nil,
            cycles = v20.cycles or v4(v19, v20.depth, {
                visited = {},
                refs = {},
                nextRef = 0,
                depth = v20.depth,
                omit = v20.omit or {}
            })
        });
        if v21.depth == -1 then
            return {
                "..."
            };
        elseif not v21.visited[v19] then
            v21.visited[v19] = true;
            local v22 = not v21.multiline and ", " or ",";
            local v23 = v21.cycles.refs[v19];
            local v24 = {
                (not not v23 and ("<%s>"):format(v23) or "") .. "{"
            };
            local v25 = v6(v21, {
                noQuotes = true,
                multiline = false
            });
            local v26 = 0;
            local v27 = true;
            for v28, v29 in ipairs(v19) do
                if not (v21.omit and v5(v21.omit, v28)) then
                    if not v27 then
                        v24[#v24] = v24[#v24] .. v22;
                    else
                        v27 = false;
                    end;
                    if not v21.multiline then
                        v24[#v24] = v24[#v24] .. v17(v29, v21);
                    else
                        local v30 = v18(v29, v21);
                        local l_indent_0 = v21.indent;
                        v2(v24, (v7(v30, function(v32)
                            return l_indent_0 .. v32;
                        end)));
                    end;
                    v26 = v28;
                end;
            end;
            if not (not (#v19 > 0) or not v21.arrayLength) then
                v24[1] = ("#%d %s"):format(#v19, v24[1]);
            end;
            local v33 = v8(v19);
            l_sort_0(v33, function(v34, v35)
                if typeof(v34) == "number" and typeof(v35) == "number" then
                    return v34 < v35;
                else
                    return tostring(v34) < tostring(v35);
                end;
            end);
            for _, v37 in ipairs(v33) do
                local v38 = v19[v37];
                if not (not (not ((typeof(v37) == "number" and v37 % 1 == 0) and v37 >= 1) or v37 > v26) or v21.omit and v5(v21.omit, v37)) then
                    if not v27 then
                        v24[#v24] = v24[#v24] .. v22;
                    else
                        v27 = false;
                    end;
                    if not v21.multiline then
                        v24[#v24] = ("%s%s = %s"):format(v24[#v24], v17(v37, v25), v17(v38, v21));
                    else
                        local v39 = v18(v37, v25);
                        local l_indent_1 = v21.indent;
                        local l_l_indent_1_0 = l_indent_1 --[[ copy: 20 -> 24 ]];
                        local v43 = v7(v39, function(v42)
                            return l_l_indent_1_0 .. v42;
                        end);
                        l_indent_1 = v18(v38, v21);
                        local v44 = v9(l_indent_1, 2);
                        local l_indent_2 = v21.indent;
                        local v47 = v7(v44, function(v46)
                            return l_indent_2 .. v46;
                        end);
                        v43[#v43] = ("%s = %s"):format(v43[#v43], l_indent_1[1]);
                        v2(v24, v43);
                        v2(v24, v47);
                    end;
                end;
            end;
            if not v21.multiline then
                v24[#v24] = ("%s}"):format(v24[#v24]);
                return v24;
            elseif not v27 then
                l_insert_0(v24, "}");
                return v24;
            else
                v24[#v24] = v24[#v24] .. "}";
                return v24;
            end;
        else
            return {
                "&" .. v21.cycles.refs[v19]
            };
        end;
    elseif not (type(v19) == "string") or v20.noQuotes then
        return {
            (tostring(v19))
        };
    else
        return {
            ("\"%s\""):format(v19)
        };
    end;
end;
v17 = function(v48, v49)
    return l_concat_0(v18(v48, v49), "\n");
end;
return v17;


local l_Parent_0 = script.Parent;
local _ = require(l_Parent_0.Types);
local v2 = require(l_Parent_0.assertEqual);
return function(v3, v4, v5)
    v2(typeof(v3), "table", "Attempted to call Dash.reduce with argument #1 of type {left:?} not {right:?}");
    v2(typeof(v4), "function", "Attempted to call Dash.reduce with argument #2 of type {left:?} not {right:?}");
    local l_v5_0 = v5;
    for v7 = 1, #v3 do
        l_v5_0 = v4(l_v5_0, v3[v7], v7);
    end;
    return l_v5_0;
end;


local l_Parent_0 = script.Parent;
local _ = require(l_Parent_0.Types);
local v2 = require(l_Parent_0.assertEqual);
local l_insert_0 = table.insert;
return function(v4)
    v2(typeof(v4), "table", "Attempted to call Dash.reverse with argument #1 of type {left:?} not {right:?}");
    local v5 = {};
    for v6 = #v4, 1, -1 do
        l_insert_0(v5, v4[v6]);
    end;
    return v5;
end;


local v0 = require(script.Parent.assertEqual);
return function(v1, v2, v3)
    v0(typeof(v1), "string", "Attempted to call Dash.rightPad with argument #1 of type {left:?} not {right:?}");
    v0(typeof(v2), "number", "Attempted to call Dash.rightPad with argument #2 of type {left:?} not {right:?}");
    local v4 = v3 or " ";
    v0(typeof(v4), "string", "Attempted to call Dash.rightPad with argument #3 of type {left:?} not {right:?}");
    local v5 = v2 - v1:len();
    local v6 = v5 % v4:len();
    return v1 .. string.rep(v3 or " ", (v5 - v6) / v4:len()) .. v4:sub(1, v6);
end;


return function(v0, v1)
    if v0 == v1 then
        return true;
    elseif not (typeof(v0) == "table" and typeof(v1) == "table") or #v0 ~= #v1 then
        return false;
    elseif not (v0 ~= nil) or v1 == nil then
        return false;
    else
        for v2, v3 in pairs(v0) do
            if v1[v2] ~= v3 then
                return false;
            end;
        end;
        for v4, v5 in pairs(v1) do
            if v0[v4] ~= v5 then
                return false;
            end;
        end;
        return true;
    end;
end;


local l_Parent_0 = script.Parent;
local _ = require(l_Parent_0.Types);
local v2 = require(l_Parent_0.assertEqual);
local l_insert_0 = table.insert;
return function(v4, v5, v6)
    v2(typeof(v4), "table", "Attempted to call Dash.slice with argument #1 of type {left:?} not {right:?}");
    local v7 = {};
    v5 = v5 or 1;
    v6 = v6 or #v4;
    v2(typeof(v5), "number", "Attempted to call Dash.slice with argument #2 of type {left:?} not {right:?}");
    v2(typeof(v6), "number", "Attempted to call Dash.slice with argument #3 of type {left:?} not {right:?}");
    if v5 < 0 then
        v5 = #v4 + v5;
    end;
    if v6 and v6 < 0 then
        v6 = #v4 + v6;
    end;
    for v8 = v5, v6 do
        l_insert_0(v7, v4[v8]);
    end;
    return v7;
end;


local l_Parent_0 = script.Parent;
local _ = require(l_Parent_0.Types);
local v2 = require(l_Parent_0.assertEqual);
return function(v3, v4)
    v2(typeof(v3), "table", "Attempted to call Dash.some with argument #1 of type {left:?} not {right:?}");
    v2(typeof(v4), "function", "Attempted to call Dash.some with argument #2 of type {left:?} not {right:?}");
    for v5, v6 in pairs(v3) do
        if v4(v6, v5) then
            return true;
        end;
    end;
    return false;
end;


local v0 = require(script.Parent.assertEqual);
local l_insert_0 = table.insert;
return function(v2, v3)
    v0(typeof(v2), "string", "Attempted to call Dash.splitOn with argument #1 of type {left:?} not {right:?}");
    v0(typeof(v3), "string", "Attempted to call Dash.splitOn with argument #2 of type {left:?} not {right:?}");
    local v4 = {};
    local v5 = {};
    local v6 = 1;
    if v3 then
        local v7, v8 = v2:find(v3, v6);
        while v7 do
            l_insert_0(v5, v2:sub(v7, v8));
            l_insert_0(v4, v2:sub(v6, v7 - 1));
            v6 = v8 + 1;
            local v9, v10 = v2:find(v3, v6);
            v7 = v9;
            v8 = v10;
        end;
        l_insert_0(v4, v2:sub(v6));
        return v4, v5;
    else
        for v11 = 1, #v2 do
            l_insert_0(v4, v2:sub(v11, v11));
        end;
        return v4;
    end;
end;


local v0 = require(script.Parent.assertEqual);
return function(v1, v2)
    v0(typeof(v1), "string", "Attempted to call Dash.startsWith with argument #1 of type {left:?} not {right:?}");
    v0(typeof(v2), "string", "Attempted to call Dash.startsWith with argument #2 of type {left:?} not {right:?}");
    return v1:sub(1, v2:len()) == v2;
end;


local v0 = require(script.Parent.assertEqual);
return function(v1)
    v0(typeof(v1), "string", "Attempted to call Dash.trim with argument #1 of type {left:?} not {right:?}");
    return v1:match("^%s*(.-)%s*$");
end;


local l_Parent_0 = script.Parent;
local _ = require(l_Parent_0.Types);
local v2 = require(l_Parent_0.assertEqual);
local v3 = require(l_Parent_0.iterator);
local l_insert_0 = table.insert;
return function(v5)
    v2(typeof(v5), "table", "Attempted to call Dash.values with argument #1 of type {left:?} not {right:?}");
    local v6 = {};
    for _, v8 in v3(v5) do
        l_insert_0(v6, v8);
    end;
    return v6;
end;


local l_Parent_0 = script.Parent;
local v1 = require(l_Parent_0.LuauPolyfill);
local l_Array_0 = v1.Array;
local l_Boolean_0 = v1.Boolean;
local l_Map_0 = v1.Map;
local l_instanceof_0 = v1.instanceof;
local l_setTimeout_0 = v1.setTimeout;
local l_Error_0 = v1.Error;
local l_Error_1 = v1.Error;
local v9 = require(l_Parent_0.Promise);
local v10 = {};
local v11 = nil;
local v12 = nil;
local v13 = nil;
local v14 = nil;
local v15 = nil;
local v16 = nil;
local v17 = nil;
local v18 = nil;
local v19 = nil;
local v20 = nil;
local v21 = {};
v21.__index = v21;
v21.new = function(v22, v23)
    local v24 = setmetatable({}, v21);
    if typeof(v22) ~= "function" then
        error(l_Error_0.new("DataLoader must be constructed with a function which accepts " .. ("Array<key> and returns Promise<Array<value>>, but got: %s."):format((tostring(v22)))));
    end;
    v24._batchLoadFn = v22;
    v24._maxBatchSize = v12(v23);
    v24._batchScheduleFn = v16(v23);
    v24._cacheKeyFn = v17(v23);
    v24._cacheMap = v18(v23);
    v24._batch = nil;
    v24.name = v19(v23);
    return v24;
end;
v21.load = function(v25, v26)
    if v26 == nil then
        error(l_Error_0.new("The loader.load() function must be called with a value, " .. ("but got: %s."):format((tostring(v26)))));
    end;
    local v27 = v11(v25);
    local l__cacheMap_0 = v25._cacheMap;
    local v29 = v25._cacheKeyFn(v26);
    if l_Boolean_0.toJSBoolean(l__cacheMap_0) then
        local v30 = l__cacheMap_0:get(v29);
        if l_Boolean_0.toJSBoolean(v30) then
            local v31;
            if l_Boolean_0.toJSBoolean(v27.cacheHits) then
                v31 = v27.cacheHits;
                if v31 then
                    goto label0;
                end;
            end;
            v27.cacheHits = {};
            v31 = v27.cacheHits;
            ::label0::;
            return v9.new(function(v32)
                table.insert(v31, function()
                    v32(v30);
                end);
            end);
        end;
    end;
    table.insert(v27.keys, v26);
    local v35 = v9.new(function(v33, v34)
        table.insert(v27.callbacks, {
            resolve = v33,
            reject = v34
        });
    end);
    if l_Boolean_0.toJSBoolean(l__cacheMap_0) then
        l__cacheMap_0:set(v29, v35);
    end;
    return v35;
end;
v21.loadMany = function(v36, v37)
    if not l_Boolean_0.toJSBoolean(v20(v37)) then
        error(l_Error_0.new("The loader.loadMany() function must be called with Array<key> " .. ("but got: %s."):format((tostring(v37)))));
    end;
    local v38 = {};
    local v39 = 0;
    while v39 < #v37 do
        table.insert(v38, v36:load(v37[v39 + 1]):catch(function(v40)
            return v40;
        end));
        v39 = v39 + 1;
    end;
    return v9.all(v38);
end;
v21.clear = function(v41, v42)
    local l__cacheMap_1 = v41._cacheMap;
    if l_Boolean_0.toJSBoolean(l__cacheMap_1) then
        l__cacheMap_1:delete((v41._cacheKeyFn(v42)));
    end;
    return v41;
end;
v21.clearAll = function(v44)
    local l__cacheMap_2 = v44._cacheMap;
    if l_Boolean_0.toJSBoolean(l__cacheMap_2) then
        l__cacheMap_2:clear();
    end;
    return v44;
end;
v21.prime = function(v46, v47, v48)
    local l__cacheMap_3 = v46._cacheMap;
    if l_Boolean_0.toJSBoolean(l__cacheMap_3) then
        local v50 = v46._cacheKeyFn(v47);
        if l__cacheMap_3:get(v50) == nil then
            local v51 = nil;
            if not l_instanceof_0(v48, l_Error_1) then
                v51 = v9.resolve(v48);
            else
                v51 = v9.reject(v48);
                v51:catch(function()
                end);
            end;
            l__cacheMap_3:set(v50, v51);
        end;
    end;
    return v46;
end;
local function v53(v52)
    l_setTimeout_0(v52);
end;
v11 = function(v54)
    local l__batch_0 = v54._batch;
    if not (not (l__batch_0 ~= nil) or l_Boolean_0.toJSBoolean(l__batch_0.hasDispatched)) and #l__batch_0.keys < v54._maxBatchSize then
        return l__batch_0;
    else
        local v56 = {
            hasDispatched = false,
            keys = {},
            callbacks = {}
        };
        v54._batch = v56;
        v54._batchScheduleFn(function()
            v13(v54, v56);
        end);
        return v56;
    end;
end;
v13 = function(v57, v58)
    v58.hasDispatched = true;
    if #v58.keys == 0 then
        v15(v58);
        return ;
    else
        local v59 = nil;
        local _, v62, v63 = xpcall(function()
            v59 = v57._batchLoadFn(v58.keys);
        end, function(v60)
            return v14(v57, v58, l_Error_0.new("DataLoader must be constructed with a function which accepts " .. "Array<key> and returns Promise<Array<value>>, but the function " .. ("errored synchronously: %s."):format((tostring(v60))))), true;
        end);
        if not v63 then
            if not l_Boolean_0.toJSBoolean(v59) or typeof(v59.andThen) ~= "function" then
                return v14(v57, v58, l_Error_0.new("DataLoader must be constructed with a function which accepts " .. "Array<key> and returns Promise<Array<value>>, but the function did " .. ("not return a Promise: %s."):format((tostring(v59)))));
            else
                v59:andThen(function(v64)
                    if not l_Boolean_0.toJSBoolean(v20(v64)) then
                        error(l_Error_0.new("DataLoader must be constructed with a function which accepts " .. "Array<key> and returns Promise<Array<value>>, but the function did " .. ("not return a Promise of an Array: %s."):format(table.concat(v64, ","))));
                    end;
                    if #v64 ~= #v58.keys then
                        error(l_Error_0.new("DataLoader must be constructed with a function which accepts " .. "Array<key> and returns Promise<Array<value>>, but the function did " .. "not return a Promise of an Array of the same length as the Array " .. "of keys." .. ("\n\nKeys:\n%s"):format(table.concat(v58.keys, ",")) .. ("\n\nValues:\n%s"):format(table.concat(v64, ","))));
                    end;
                    v15(v58);
                    local v65 = 0;
                    while v65 < #v58.callbacks do
                        local v66 = v64[v65 + 1];
                        if not l_instanceof_0(v66, l_Error_1) then
                            v58.callbacks[v65 + 1].resolve(v66);
                        else
                            v58.callbacks[v65 + 1].reject(v66);
                        end;
                        v65 = v65 + 1;
                    end;
                end):catch(function(v67)
                    v14(v57, v58, v67);
                end);
                return nil;
            end;
        else
            return v62;
        end;
    end;
end;
v14 = function(v68, v69, v70)
    v15(v69);
    local v71 = 0;
    while v71 < #v69.keys do
        v68:clear(v69.keys[v71 + 1]);
        v69.callbacks[v71 + 1].reject(v70);
        v71 = v71 + 1;
    end;
end;
v15 = function(v72)
    if l_Boolean_0.toJSBoolean(v72.cacheHits) then
        local v73 = 0;
        while v73 < #v72.cacheHits do
            v72.cacheHits[v73 + 1]();
            v73 = v73 + 1;
        end;
    end;
end;
v12 = function(v74)
    if l_Boolean_0.toJSBoolean(not l_Boolean_0.toJSBoolean(v74) or v74.batch ~= false) then
        local v75 = if not l_Boolean_0.toJSBoolean(v74) then v74 else v74.maxBatchSize;
        if v75 == nil then
            return math.huge;
        else
            if not (typeof(v75) == "number") or v75 < 1 then
                error(l_Error_0.new(("maxBatchSize must be a positive number: %s"):format((tostring(v75)))));
            end;
            return v75;
        end;
    else
        return 1;
    end;
end;
v16 = function(v76)
    local v77 = if not l_Boolean_0.toJSBoolean(v76) then v76 else v76.batchScheduleFn;
    if v77 == nil then
        return v53;
    else
        if typeof(v77) ~= "function" then
            error(l_Error_0.new(("batchScheduleFn must be a function: %s"):format((tostring(v77)))));
        end;
        return v77;
    end;
end;
v17 = function(v78)
    local v79 = if not l_Boolean_0.toJSBoolean(v78) then v78 else v78.cacheKeyFn;
    if v79 == nil then
        return function(v80)
            return v80;
        end;
    else
        if typeof(v79) ~= "function" then
            error(l_Error_0.new(("cacheKeyFn must be a function: %s"):format((tostring(v79)))));
        end;
        return v79;
    end;
end;
v18 = function(v81)
    if l_Boolean_0.toJSBoolean(not l_Boolean_0.toJSBoolean(v81) or v81.cache ~= false) then
        local v82 = if not l_Boolean_0.toJSBoolean(v81) then v81 else v81.cacheMap;
        if v82 == nil then
            return l_Map_0.new();
        else
            if v82 ~= nil then
                local v84 = l_Array_0.filter({
                    "get",
                    "set",
                    "delete",
                    "clear"
                }, function(v83)
                    if not l_Boolean_0.toJSBoolean(v82) then
                        return v82;
                    else
                        return typeof(v82[tostring(v83)]) ~= "function";
                    end;
                end);
                if #v84 ~= 0 then
                    error(l_Error_0.new("Custom cacheMap missing methods: " .. tostring(l_Array_0.join(v84, ", "))));
                end;
            end;
            return v82;
        end;
    else
        return nil;
    end;
end;
v19 = function(v85)
    if not l_Boolean_0.toJSBoolean(if not l_Boolean_0.toJSBoolean(v85) then v85 else v85.name) then
        return nil;
    else
        return v85.name;
    end;
end;
v20 = function(v86)
    local v87 = false;
    if typeof(v86) == "table" then
        v87 = true;
        if #v86 ~= 0 then
            v87 = false;
            if #v86 > 0 then
                v87 = v86[#v86] ~= nil;
            end;
        end;
    end;
    return v87;
end;
v10.DataLoader = v21;
return v10;


local l_HttpService_0 = game:GetService("HttpService");
local v1 = require(script.Parent.Parent.Parent.Dash);
local l_join_0 = v1.join;
local l_class_0 = v1.class;
local l_forEach_0 = v1.forEach;
local l_insert_0 = table.insert;
local v8 = l_class_0("BindableEventBridge", function(_, v7)
    return {
        id = l_HttpService_0:GenerateGUID(),
        connections = {},
        noCreate = v7
    };
end);
v8._createEvent = function(v9, v10)
    if not v9.noCreate then
        local l_BindableEvent_0 = Instance.new("BindableEvent");
        l_BindableEvent_0.Name = "DeveloperTools";
        l_BindableEvent_0.Parent = v10;
        return l_BindableEvent_0;
    else
        return nil;
    end;
end;
v8._init = function(v12, v13)
    v12.event = v13:FindFirstChild("DeveloperTools") or v12:_createEvent(v13);
end;
v8.send = function(v14, v15)
    local v16 = l_join_0(v15, {
        fromBridgeId = v14.id
    });
    if v14.event then
        v14.event:Fire(v16);
    end;
end;
v8.connect = function(v17, v18)
    local function v20(v19)
        if v19.fromBridgeId ~= v17.id then
            v18(v19);
        end;
    end;
    if not v17.event then
        return nil;
    else
        local v21 = v17.event.Event:Connect(v20);
        l_insert_0(v17.connections, v21);
        return v21;
    end;
end;
v8.destroy = function(v22)
    l_forEach_0(v22.connections, function(v23)
        v23:Disconnect();
    end);
end;
return v8;


local l_Parent_0 = script.Parent.Parent;
local v1 = require(l_Parent_0.Classes.BindableEventBridge);
local v2 = require(l_Parent_0.Classes.DebugInterface);
local l_CoreGui_0 = game:GetService("CoreGui");
return (v2:extend("CoreGuiDebugInterface", function(v4, v5)
    local v6 = v2.new("CoreGui", v4, {
        (v1.new(l_CoreGui_0))
    });
    if not v5 then
        v6:setGuiOptions({
            rootInstance = l_CoreGui_0,
            pickerParent = l_CoreGui_0,
            rootPath = {}
        });
        return v6;
    else
        spawn(function()
            v6:setGuiOptions({
                rootInstance = l_CoreGui_0:WaitForChild(v5.rootInstance, 10),
                pickerParent = not not v5.pickerParent and l_CoreGui_0:WaitForChild(v5.pickerParent, 10) or nil,
                rootPath = v5.rootPath or {
                    v5.rootInstance
                }
            });
        end);
        return v6;
    end;
end));


local l_HttpService_0 = game:GetService("HttpService");
local l_Parent_0 = script.Parent.Parent;
local v2 = require(l_Parent_0.Parent.Dash);
local l_class_0 = v2.class;
local l_forEach_0 = v2.forEach;
local l_map_0 = v2.map;
local l_insert_0 = table.insert;
local _ = require(l_Parent_0.Services);
local v8 = require(l_Parent_0.EventName);
local v9 = require(l_Parent_0.Classes.PluginEventRouter);
local v10 = require(l_Parent_0.RoactInspector.Classes.RoactInspectorWorker);
local v11 = require(l_Parent_0.Roact17.Classes.Roact17TargetWatcher);
local v15 = l_class_0("DebugInterface", function(v12, v13, v14)
    return {
        sourceId = l_HttpService_0:GenerateGUID(),
        sourceKind = v12,
        sourceName = v13,
        bridges = v14,
        routers = {},
        targets = {},
        workers = {},
        connectionsForListener = {},
        outboundBridgeForBridgeId = {}
    };
end);
v15.addRoactTree = function(v16, v17, v18, v19)
    assert(typeof(v17) == "string", "targetName must be a string");
    assert(v18, "roactTree must be defined");
    return v16:addTarget(v17, function(v20, v21)
        return v10.new(v16, v20, v21, v18, v19);
    end);
end;
v15.initRoact = function(v22, v23, v24)
    v22.workers.reactTargetWatcher = v11.new(v22, (v23.setup(v24)));
end;
v15.addPluginRouter = function(v25, v26)
    l_insert_0(v25.routers, v9.new(v25.sourceName, v26, v25.bridges));
end;
v15._connectTargets = function(v27)
    if not next(v27.targets) then
        v27:_connect({
            eventName = v8.GetTargets,
            onEvent = function(v28)
                v27:_send({
                    eventName = v8.ShowTargets,
                    toBridgeId = v28.fromBridgeId,
                    sourceId = v27.sourceId,
                    sourceName = v27.sourceName,
                    sourceKind = v27.sourceKind,
                    targets = l_map_0(v27.targets, function(v29)
                        return {
                            id = v29.id,
                            name = v29.name
                        };
                    end)
                });
            end
        });
        return ;
    else
        return ;
    end;
end;
v15._send = function(v30, v31)
    if v31.toBridgeId then
        local v32 = v30.outboundBridgeForBridgeId[v31.toBridgeId];
        if not v32 then
            error(("[DeveloperTools] No bridge to other bridge %s"):format(v31.toBridgeId));
        end;
        v32:send(v31);
        return ;
    else
        l_forEach_0(v30.bridges, function(v33)
            v33:send(v31);
        end);
        return ;
    end;
end;
v15._connect = function(v34, v35)
    local v36 = {};
    v34.connectionsForListener[v35] = v36;
    l_forEach_0(v34.bridges, function(v37)
        l_insert_0(v36, (v37:connect(function(v38)
            v34.outboundBridgeForBridgeId[v38.fromBridgeId] = v37;
            local v39 = true;
            if v35.eventName ~= nil then
                v39 = v35.eventName == v38.eventName;
            end;
            local v40 = true;
            if v35.bridgeId ~= nil then
                v40 = v35.bridgeId == v38.toBridgeId;
            end;
            local v41 = true;
            if v35.targetId ~= nil then
                v41 = v35.targetId == v38.toTargetId;
            end;
            if not ((not v39 or not v40) or not v41) then
                v35.onEvent(v38);
            end;
        end)));
    end);
end;
v15._disconnect = function(v42, v43)
    l_forEach_0(v42.connectionsForListener[v43], function(v44)
        v44:Disconnect();
    end);
end;
v15.addTarget = function(v45, v46, v47)
    v45:_connectTargets();
    local v48 = l_HttpService_0:GenerateGUID();
    local v50 = {
        id = v48,
        name = v46,
        listener = {
            targetId = v48,
            eventName = v8.AttachTarget,
            onEvent = function(v49)
                v45.workers[v48] = v45.workers[v48] or v47(v48, v49.fromBridgeId);
            end
        }
    };
    v45.targets[v48] = v50;
    v45:_connect(v50.listener);
    return v48;
end;
v15.removeTarget = function(v51, v52)
    local v53 = v51.targets[v52];
    if v53 ~= nil then
        v51:_disconnect(v53.listener);
        v51.targets[v52] = nil;
    end;
end;
v15.removeWorker = function(v54, v55)
    local v56 = v54.workers[v55];
    if v56 then
        v56:destroy();
    end;
    v54.workers[v55] = nil;
end;
v15.setGuiOptions = function(v57, v58)
    v57.rootInstance = v58.rootInstance;
    v57.pickerParent = v58.pickerParent;
    v57.rootPath = v58.rootPath;
    v57.rootPrefix = v58.rootPrefix;
end;
v15.destroy = function(v59)
    l_forEach_0(v59.bridges, function(v60)
        v60:destroy();
    end);
    l_forEach_0(v59.routers, function(v61)
        v61:destroy();
    end);
    l_forEach_0(v59.workers, function(v62)
        v62:destroy();
    end);
end;
return v15;


local l_Parent_0 = script.Parent.Parent;
local v1 = require(l_Parent_0.Classes.BindableEventBridge);
local v2 = require(l_Parent_0.Classes.DebugInterface);
local v3 = require(l_Parent_0.RoactInspector.Classes.RoactInspectorApi);
local v4 = require(l_Parent_0.Services);
local v5 = require(l_Parent_0.EventName);
local v8 = v2:extend("InspectorDebugInterface", function(v6)
    local v7 = v2.new("Inspector", "Inspector", {
        v1.new(v4.getStudioService()),
        v1.new(game:GetService("CoreGui")),
        (v1.new(game:GetService("ReplicatedStorage"), true))
    });
    v7.handlers = v6;
    return v7;
end);
v8._init = function(v9)
    v9:_connectInspector();
end;
v8.getTargetApi = function(v10)
    return v10.targetApi;
end;
v8.closeTargetApi = function(v11)
    if v11.targetApi then
        v11.targetApi:close();
    end;
end;
v8._connectInspector = function(v12)
    v12:_connect({
        eventName = v5.ShowTargets,
        onEvent = function(v13)
            v12.handlers.onAddTargets(v13);
        end
    });
end;
v8.getTargets = function(v14)
    v14:_send({
        eventName = v5.GetTargets
    });
end;
v8.attachRoactTree = function(v15, v16, v17)
    local v18 = v3.new(v15, v16, v17);
    v18:attach(v15.handlers.RoactInspector);
    v15.targetApi = v18;
    return v15.targetApi;
end;
return v8;


local l_Parent_0 = script.Parent.Parent;
local v1 = require(l_Parent_0.Classes.BindableEventBridge);
local v2 = require(l_Parent_0.Classes.DebugInterface);
local v3 = require(l_Parent_0.Services);
return (v2:extend("LibraryDebuggerInterface", function(v4, v5)
    local v6 = nil;
    pcall(function()
        local v7 = v3.getCoreGui();
        if v7:IsA("BasePlayerGui") then
            v6 = v7;
        end;
    end);
    pcall(function()
        v6 = game:GetService("ReplicatedStorage");
    end);
    if not v6 then
        v6 = Instance.new("Folder");
    end;
    local v8 = v2.new("Library", v4, {
        (v1.new(v6))
    });
    v8:setGuiOptions(v5 or {
        rootInstance = game:GetService("ReplicatedStorage")
    });
    return v8;
end));


local l_Parent_0 = script.Parent.Parent;
local v1 = require(l_Parent_0.Classes.BindableEventBridge);
local v2 = require(l_Parent_0.Classes.DebugInterface);
local v3 = require(l_Parent_0.Services);
return (v2:extend("PluginDebugInterface", function(v4, _, v6)
    local v7 = v2.new("Plugin", v4, {
        (v1.new(v3.getStudioService()))
    });
    if not v6 then
        spawn(function()
            local v8 = v3.getRobloxPluginGuiService():WaitForChild(v4, 10);
            if v8 then
                v7:setGuiOptions({
                    rootInstance = v8
                });
            end;
        end);
        return v7;
    else
        v7:setGuiOptions({
            rootInstance = v6
        });
        return v7;
    end;
end));


local l_HttpService_0 = game:GetService("HttpService");
local v1 = require(script.Parent.Parent.Parent.Dash);
local l_class_0 = v1.class;
local l_join_0 = v1.join;
local l_forEach_0 = v1.forEach;
local l_insert_0 = table.insert;
local v7 = l_class_0("PluginEventBridge", function(v6)
    return {
        id = l_HttpService_0:GenerateGUID(),
        plugin = v6,
        connections = {}
    };
end);
v7.send = function(v8, v9)
    v8.plugin:Invoke("DeveloperTools", (l_join_0(v9, {
        fromBridgeId = v8.id
    })));
end;
v7.connect = function(v10, v11)
    l_insert_0(v10.connections, (v10.plugin:OnInvoke("DeveloperTools", function(v12)
        if v12.fromBridgeId ~= v10.id then
            v11(v12);
        end;
    end)));
end;
v7.destroy = function(v13)
    l_forEach_0(v13.connections, function(v14)
        v14:Disconnect();
    end);
end;
return v7;


local l_HttpService_0 = game:GetService("HttpService");
local v1 = require(script.Parent.Parent.Parent.Dash);
local l_join_0 = v1.join;
local l_class_0 = v1.class;
local l_forEach_0 = v1.forEach;
local v8 = l_class_0("PluginEventRouter", function(v5, v6, v7)
    return {
        routerId = l_HttpService_0:GenerateGUID(),
        sourceName = v5,
        plugin = v6,
        bridges = v7,
        outboundBridgeIds = {}
    };
end);
v8._init = function(v9)
    v9.connection = v9.plugin:OnInvoke("DeveloperTools", function(v10)
        if not v10.fromRouter then
            v9.outboundBridgeIds[v10.fromBridgeId] = true;
            local v11 = l_join_0(v10, {
                sourceName = v9.sourceName
            });
            l_forEach_0(v9.bridges, function(v12)
                v12:send(v11);
            end);
            return ;
        else
            return ;
        end;
    end);
    local function v14(v13)
        v9.plugin:Invoke("DeveloperTools", (l_join_0(v13, {
            fromRouter = true
        })));
    end;
    l_forEach_0(v9.bridges, function(v15)
        v15:connect(v14);
    end);
end;
v8.destroy = function(v16)
    v16.connection:Disconnect();
end;
return v8;


local l_Parent_0 = script.Parent.Parent;
local v1 = require(l_Parent_0.Classes.PluginEventBridge);
local v2 = require(l_Parent_0.Classes.DebugInterface);
return (v2:extend("StandalonePluginDebugInterface", function(v3, v4, v5)
    local v6 = v2.new("StandalonePlugin", v3, {
        (v1.new(v4))
    });
    v6:setGuiOptions(v5);
    return v6;
end));


local l_Parent_0 = script.Parent.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local v2 = require(l_Parent_0.EventName);
local v3 = require(l_Parent_1.Dash);
local l_join_0 = v3.join;
local v8 = v3.class("TargetApi", function(v5, v6, v7)
    return {
        debugInterface = v5,
        bridgeId = v6,
        targetId = v7
    };
end);
v8.close = function(v9)
    v9:_send({
        eventName = v2.CloseTarget
    });
end;
v8._send = function(v10, v11)
    v10.debugInterface:_send((l_join_0(v11, {
        toBridgeId = v10.bridgeId,
        toTargetId = v10.targetId
    })));
end;
v8._connect = function(v12, v13)
    v12.debugInterface:_connect((l_join_0(v13, {
        fromTargetId = v12.targetId
    })));
end;
v8.attach = function(v14)
    v14:_send({
        eventName = v2.AttachTarget
    });
end;
return v8;


local l_Parent_0 = script.Parent.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local v2 = require(l_Parent_0.EventName);
local v3 = require(l_Parent_1.Dash);
local l_class_0 = v3.class;
local l_forEach_0 = v3.forEach;
local l_join_0 = v3.join;
local l_insert_0 = table.insert;
local v11 = l_class_0("TargetWorker", function(v8, v9, v10)
    return {
        targetId = v9,
        toBridgeId = v10,
        debugInterface = v8,
        listeners = {}
    };
end);
v11.connectEvents = function(v12)
    v12:connect({
        eventName = v2.CloseTarget,
        onEvent = function(_)
            v12.debugInterface:removeWorker(v12.targetId);
        end
    });
end;
v11.connect = function(v14, v15)
    local v16 = l_join_0(v15, {
        targetId = v14.targetId
    });
    v14.debugInterface:_connect(v16);
    l_insert_0(v14.listeners, v16);
end;
v11.send = function(v17, v18)
    v17.debugInterface:_send((l_join_0(v18, {
        fromTargetId = v17.targetId,
        toBridgeId = v17.toBridgeId
    })));
end;
v11.destroy = function(v19)
    l_forEach_0(v19.listeners, function(v20)
        v19.debugInterface:_disconnect(v20);
    end);
end;
return v11;


local l_freeze_0 = require(script.Parent.Parent.Dash).freeze;
return l_freeze_0("EventName", {
    CloseTarget = "CloseTarget",
    GetTargets = "GetTargets",
    ShowTargets = "ShowTargets",
    AttachTarget = "AttachTarget",
    RoactInspector = l_freeze_0("EventName.RoactInspector", {
        GetChildren = "RoactInspector.GetChildren",
        ShowChildren = "RoactInspector.ShowChildren",
        GetBranch = "RoactInspector.GetBranch",
        ShowBranch = "RoactInspector.ShowBranch",
        GetFields = "RoactInspector.GetFields",
        ShowFields = "RoactInspector.ShowFields",
        SetPicking = "RoactInspector.SetPicking",
        PickInstance = "RoactInspector.PickInstance",
        OpenPath = "RoactInspector.OpenPath",
        Highlight = "RoactInspector.GetHighlight",
        Dehighlight = "RoactInspector.Dehighlight",
        SetProfiling = "RoactInspector.SetProfiling",
        SetProfileFilter = "RoactInspector.SetProfileFilter",
        SetProfileSearchTerm = "RoactInspector.SetProfileSearchTerm",
        GetProfileData = "RoactInspector.GetProfileData",
        ShowProfileData = "RoactInspector.ShowProfileData",
        SortProfileData = "RoactInspector.SortProfileData",
        ClearProfileData = "RoactInspector.ClearProfileData",
        SelectProfileInstance = "RoactInspector.SelectProfileInstance"
    }, true)
}, true);


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Parent.Dash);
local l_class_0 = v1.class;
local l_slice_0 = v1.slice;
local l_filter_0 = v1.filter;
local l_forEach_0 = v1.forEach;
local l_pretty_0 = v1.pretty;
local l_reverse_0 = v1.reverse;
local l_some_0 = v1.some;
local l_find_0 = v1.find;
local l_concat_0 = table.concat;
local l_insert_0 = table.insert;
local l_sort_0 = table.sort;
local _ = require(l_Parent_0.Types);
local _ = require(l_Parent_0.Roact17.types);
local v16 = l_class_0("Roact17Profiler", function(v15)
    return {
        active = false,
        devtools = v15.devtools,
        root = v15.root,
        rows = {},
        instanceEvents = {},
        selectedEvents = {},
        commitCount = 0,
        eventCount = 0,
        worker = v15,
        currentEvents = {},
        filter = {},
        searchTerm = nil,
        profileComponents = {
            sortIndex = nil,
            sortOrder = nil,
            columns = {
                "instanceName",
                "depth",
                "count",
                "renderTime",
                "time"
            }
        },
        profileEvents = {
            sortIndex = nil,
            sortOrder = nil,
            columns = {
                "startTime",
                "renderTime",
                "time",
                "cause",
                "details"
            }
        },
        slices = {
            componentSliceStart = -1,
            componentSliceEnd = -1,
            eventSliceStart = -1,
            eventSliceEnd = -1
        }
    };
end);
v16._init = function(v17)
    v17.devtools.bridge:addListener("profilingData", function(v18)
        v17:updateRows(v18);
    end);
end;
v16.sortData = function(v19, v20, v21, v22)
    v19[v20].sortIndex = v21;
    v19[v20].sortOrder = v22;
end;
v16.getData = function(v23, v24)
    v23.slices = v24;
    local l_status_0, l_result_0 = pcall(function()
        v23.devtools.agent:getProfilingData({
            rendererID = v23.devtools.store:getRendererIDForElement(v23.root)
        });
    end);
    if not (l_status_0 or l_result_0:find("getProfilingData%(%) called before any profiling data was recorded")) then
        warn(l_result_0);
    end;
end;
v16.updateRows = function(v27, v28)
    local v30 = l_find_0(v28.dataForRoots, function(v29)
        return v29.rootID == v27.root;
    end);
    if v30 then
        local v31 = v27.worker:getHostInstance(v27.root);
        local l_commitData_0 = v30.commitData;
        while v27.commitCount < #l_commitData_0 do
            v27.commitCount = v27.commitCount + 1;
            local v33 = l_commitData_0[v27.commitCount];
            l_forEach_0(v33.changeDescriptions, function(v34)
                local v35 = v34[1];
                local v36 = v27.devtools.store:getElementByID(v35);
                local v37 = v34[2];
                local v38 = v27.worker:getHostNode(v35);
                local v39 = if not v38 then nil else v27.worker:getHostInstance(v38.id);
                local v40 = if not v39 then nil else v27.worker:getPath(v39);
                local v41 = nil;
                if not v40 then
                    v41 = "Unknown";
                else
                    local v42 = {};
                    while v39 ~= nil and v39 ~= v31 do
                        l_insert_0(v42, v39.Name);
                        v39 = v39.Parent;
                    end;
                    l_insert_0(v42, v31.Name);
                    v41 = l_concat_0(l_reverse_0(v42), ".");
                end;
                local v43 = not v36 and "Unknown" or v36.displayName;
                if (v36 and #v36.key > 0) and v36.key ~= v36.displayName then
                    v43 = ("%s: %s"):format(v36.key, v43);
                end;
                local v44 = v27.rows[v35] or {
                    instanceId = v35,
                    count = 0,
                    depth = not v40 and 0 or #v40,
                    path = v40 or {},
                    pathString = v41,
                    instanceName = v43,
                    time = 0,
                    renderTime = 0
                };
                v27.rows[v35] = v44;
                local l_v27_0 = v27;
                l_v27_0.eventCount = l_v27_0.eventCount + 1;
                v44.count = v44.count + 1;
                if not v27.instanceEvents[v35] then
                    v27.instanceEvents[v35] = {};
                end;
                l_v27_0 = {};
                if not v37.isFirstMount then
                    if v37.props then
                        l_insert_0(l_v27_0, "props");
                    end;
                    if v37.state then
                        l_insert_0(l_v27_0, "state");
                    end;
                else
                    l_insert_0(l_v27_0, "mount");
                end;
                local v46 = (not v37.props and "" or l_pretty_0(v37.props)) .. " " .. (not v37.state and "" or l_pretty_0(v37.state));
                local v47 = {
                    startTime = v33.timestamp,
                    renderTime = 0,
                    time = 0,
                    cause = l_concat_0(l_v27_0, ", "),
                    updateTrace = "",
                    log = "",
                    details = v46,
                    detailsTip = v46
                };
                v27.currentEvents[v35] = v47;
                l_insert_0(v27.instanceEvents[v35], v47);
            end);
            l_forEach_0(v33.fiberActualDurations, function(v48)
                local v49 = v48[1];
                local v50 = v27.currentEvents[v49];
                if v50 then
                    v50.time = v50.time + v48[2];
                    local v51 = v27.rows[v49];
                    v51.time = v51.time + v48[2];
                    return ;
                else
                    return ;
                end;
            end);
            l_forEach_0(v33.fiberSelfDurations, function(v52)
                local v53 = v52[1];
                local v54 = v27.currentEvents[v53];
                if v54 then
                    v54.renderTime = v54.renderTime + v52[2];
                    local v55 = v27.rows[v53];
                    v55.renderTime = v55.renderTime + v52[2];
                    return ;
                else
                    return ;
                end;
            end);
            for v56 in pairs(v27.currentEvents) do
                v27.currentEvents[v56] = nil;
            end;
        end;
        local v57 = v27:getComponentRows();
        v27.worker:showProfileData({
            componentRows = l_slice_0(v57, v27.slices.componentSliceStart, v27.slices.componentSliceEnd),
            eventRows = l_slice_0(v27:getEventRows(), v27.slices.eventSliceStart, v27.slices.eventSliceEnd),
            rowCount = #v57,
            eventCount = v27.eventCount,
            instanceEventCount = #v27.selectedEvents
        });
        return ;
    else
        return ;
    end;
end;
v16.selectInstance = function(v58, v59)
    v58.instanceEvents[v59] = v58.instanceEvents[v59] or {};
    v58.selectedEvents = v58.instanceEvents[v59];
end;
v16.getComponentRows = function(v60)
    local v61 = {};
    for _, v63 in pairs(v60.rows) do
        l_insert_0(v61, v63);
    end;
    if not (not v60.filter and not v60.searchTerm) then
        v61 = l_filter_0(v61, function(v64)
            if not v60.searchTerm or v64.instanceName:lower():find(v60.searchTerm) then
                return not l_some_0(v60.filter, function(v65)
                    return v64.instanceName:find(v65);
                end);
            else
                return false;
            end;
        end);
    end;
    return v60:getSortedData(v61, v60.profileComponents);
end;
v16.getEventRows = function(v66)
    return v66:getSortedData(v66.selectedEvents, v66.profileEvents);
end;
v16.getSortedData = function(v67, v68, v69)
    if v69.sortIndex then
        l_sort_0(v68, function(v70, v71)
            local v72 = v69.columns[v69.sortIndex];
            if v67.profileComponents.sortOrder == Enum.SortDirection.Descending then
                return v70[v72] < v71[v72];
            else
                return v71[v72] < v70[v72];
            end;
        end);
    end;
    return v68;
end;
v16.setSearchTerm = function(v73, v74)
    v73.searchTerm = v74:lower();
end;
v16.clearData = function(v75)
    v75.events = {};
    v75.eventCount = 0;
    v75.commitCount = 0;
    v75.rows = {};
    v75.instanceEvents = {};
    v75.selectedEvents = {};
end;
v16.setActive = function(v76, v77)
    if v76.active == v77 then
        return ;
    else
        v76.active = v77;
        if not v77 then
            v76.devtools.agent:stopProfiling(true);
            return ;
        else
            v76.devtools.agent:startProfiling(true);
            return ;
        end;
    end;
end;
v16.destroy = function(v78)
    v78:setActive(false);
    v78:clearData();
end;
return v16;


local l_Parent_0 = script.Parent.Parent.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local _ = require(l_Parent_0.Roact17.types);
local v3 = require(l_Parent_0.Roact17.Classes.Roact17Worker);
local v4 = require(l_Parent_1.Dash);
local l_collect_0 = v4.collect;
local l_collectSet_0 = v4.collectSet;
local l_class_0 = v4.class;
local l_forEach_0 = v4.forEach;
local v11 = l_class_0("Roact17TargetWatcher", function(v9, v10)
    return {
        debugInterface = v9,
        devtools = v10,
        rootToTarget = {}
    };
end);
v11._init = function(v12)
    v12.devtools.store:addListener("roots", function()
        v12:_updateTargets();
    end);
end;
v11._updateTargets = function(v13)
    local l_store_0 = v13.devtools.store;
    local v15 = l_store_0:getRoots();
    local v16 = l_collectSet_0(v15);
    local l_rootToTarget_0 = v13.rootToTarget;
    l_forEach_0(l_rootToTarget_0, function(v18)
        if v16[v18.root] == nil then
            v13.debugInterface:removeTarget(v18);
        end;
    end);
    v13.rootToTarget = l_collect_0(v15, function(_, v20)
        local v21 = v13.devtools.hook.rendererInterfaces[l_store_0:getRendererIDForElement(v20)]:getDisplayNameForRoot(v20);
        if v21 == "Anonymous" then
            v21 = "#" .. v20;
        end;
        return v20, l_rootToTarget_0[v20] or v13.debugInterface:addTarget(v21, function(v22, v23)
            return v3.new(v13.debugInterface, v22, v23, v13.devtools, v20);
        end);
    end);
end;
return v11;


local l_Parent_0 = script.Parent.Parent.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local v2 = require(l_Parent_0.RoactInspector.Utils.getChildAtKey);
local v3 = require(l_Parent_0.Roact17.types);
local v4 = require(l_Parent_0.EventName);
local v5 = require(l_Parent_0.RoactInspector.Classes.InstancePicker);
local v6 = require(l_Parent_0.Roact17.Classes.Roact17Profiler);
local v7 = require(l_Parent_0.RoactInspector.Classes.FieldWatcher);
local v8 = require(l_Parent_0.Classes.TargetWorker);
local v9 = require(l_Parent_1.Dash);
local l_append_0 = v9.append;
local l_map_0 = v9.map;
local _ = v9.mapOne;
local l_forEach_0 = v9.forEach;
local l_filter_0 = v9.filter;
local l_last_0 = v9.last;
local l_reduce_0 = v9.reduce;
local l_reverse_0 = v9.reverse;
local l_startsWith_0 = v9.startsWith;
local _ = require(l_Parent_0.Types);
local l_concat_0 = table.concat;
local l_insert_0 = table.insert;
local v28 = v8:extend("Roact17Worker", function(v22, v23, v24, v25, v26)
    local v27 = v8.new(v22, v23, v24);
    v27.devtools = v25;
    v27.root = v26;
    v27.pendingFields = {};
    return v27;
end);
v28._init = function(v29)
    v29.picker = v5.new(v29.debugInterface, function(v30)
        return v29:pickInstance(v30);
    end);
    v29.fieldWatcher = v7.new(function(v31)
        l_forEach_0(v31, function(v32)
            v29:reduceAndSendFields(v29.fieldWatcher.root, v32);
        end);
    end, "data");
    v29.fieldWatcher.onPoll = function()
        if v29.fieldWatcher.polling then
            if v29.currentPath then
                local v33 = v29:getNodes(l_last_0(v29.currentPath));
                if v33 then
                    local v34 = v33[v29.currentNodeIndex];
                    if v34 then
                        v29.devtools.agent:inspectElement({
                            id = v34.id,
                            rendererID = v29.devtools.store:getRendererIDForElement(v29.root),
                            path = {}
                        });
                        delay(0.5, v29.fieldWatcher.onPoll);
                        return ;
                    else
                        return ;
                    end;
                else
                    return ;
                end;
            else
                return ;
            end;
        else
            return ;
        end;
    end;
    v29.profiler = v6.new(v29);
    v29:connectEvents();
    v29:connectDevtools();
end;
v28.connectEvents = function(v35)
    v8.connectEvents(v35);
    v35:connect({
        eventName = v4.RoactInspector.GetChildren,
        onEvent = function(v36)
            v35:showChildren(v36.path);
        end
    });
    v35:connect({
        eventName = v4.RoactInspector.GetBranch,
        onEvent = function(v37)
            v35:showBranch(v37.path);
        end
    });
    v35:connect({
        eventName = v4.RoactInspector.GetFields,
        onEvent = function(v38)
            v35.fieldWatcher:clear();
            v35.currentPath = v38.path;
            v35.currentNodeIndex = v38.nodeIndex;
            v35:showFields(v38.fieldPath or {});
        end
    });
    v35:connect({
        eventName = v4.RoactInspector.Highlight,
        onEvent = function(v39)
            if #v39.path == 0 then
                return ;
            else
                local v40 = tonumber(l_last_0(l_last_0(v39.path):split(".")));
                local v41 = v35:getHostNode(v40);
                local v42 = v35:getHostInstance(v40);
                if not v41 or not v42 then
                    v35.picker:dehighlight();
                    return ;
                else
                    v35.picker:highlight(v42);
                    return ;
                end;
            end;
        end
    });
    v35:connect({
        eventName = v4.RoactInspector.Dehighlight,
        onEvent = function()
            v35.picker:dehighlight();
        end
    });
    v35:connect({
        eventName = v4.RoactInspector.SetPicking,
        onEvent = function(v43)
            v35.picker:setActive(v43.isPicking);
        end
    });
    v35:connect({
        eventName = v4.RoactInspector.OpenPath,
        onEvent = function(v44)
            v35:openPath(v44.path);
        end
    });
    v35:connect({
        eventName = v4.RoactInspector.SetProfiling,
        onEvent = function(v45)
            v35.profiler:setActive(v45.isProfiling);
        end
    });
    v35:connect({
        eventName = v4.RoactInspector.GetProfileData,
        onEvent = function(v46)
            v35.profiler:getData(v46, function(v47)
                v35:showProfileData(v47);
            end);
        end
    });
    v35:connect({
        eventName = v4.RoactInspector.ClearProfileData,
        onEvent = function()
            v35.profiler:clearData();
        end
    });
    v35:connect({
        eventName = v4.RoactInspector.SortProfileData,
        onEvent = function(v48)
            v35.profiler:sortData(v48.tableName, v48.index, v48.order);
        end
    });
    v35:connect({
        eventName = v4.RoactInspector.SelectProfileInstance,
        onEvent = function(v49)
            v35.profiler:selectInstance(v49.instanceId);
        end
    });
    v35:connect({
        eventName = v4.RoactInspector.SetProfileFilter,
        onEvent = function(v50)
            v35.profiler:setFilter(v50.filter);
        end
    });
    v35:connect({
        eventName = v4.RoactInspector.SetProfileSearchTerm,
        onEvent = function(v51)
            v35.profiler:setSearchTerm(v51.searchTerm);
        end
    });
end;
v28.getNodeInfo = function(v52, v53)
    if v53.type == v3.ElementType.Root then
        return {
            Name = "Root",
            Source = "",
            Link = "",
            Icon = "Branch"
        };
    else
        local v54 = "Branch";
        if v53.type == v3.ElementType.HostComponent then
            local v55 = v52:getHostInstance(v53.id);
            if v55 then
                v54 = v55.ClassName;
            end;
        end;
        local l_displayName_0 = v53.displayName;
        if #v53.key > 0 and v53.displayName ~= v53.key then
            l_displayName_0 = v53.key .. ": " .. v53.displayName;
        end;
        return {
            Name = l_displayName_0,
            Source = "",
            Link = "",
            Icon = v54
        };
    end;
end;
v28.connectDevtools = function(v57)
    v57.devtools.bridge:addListener("inspectedElement", function(v58)
        if not (v58.type == "full-data") then
            if v58.value ~= nil and #v58.path > 0 then
                if #v58.path > 0 then
                    v57.fieldWatcher:addPath(v58.path);
                    local v59 = l_concat_0(v58.path, ",");
                    v57.pendingFields = l_filter_0(v57.pendingFields, function(v60)
                        local v61 = l_concat_0(v60, ",");
                        local v62 = true;
                        if v61 ~= v59 then
                            v62 = l_startsWith_0(v61, v59 .. ",");
                        end;
                        return v62;
                    end);
                    v57:send({
                        eventName = v4.RoactInspector.ShowFields,
                        path = v57.currentPath,
                        nodeIndex = v57.currentNodeIndex,
                        fieldPath = v58.path,
                        fields = v57.fieldWatcher:collect(v58.value.data, 2, v58.path)
                    });
                else
                    v57.fieldWatcher:setRoot(v58.value.data);
                    return ;
                end;
            end;
            return ;
        else
            v57.fieldWatcher:setRoot(v58.value);
            v57.fieldWatcher:checkFields();
            l_forEach_0(v57.pendingFields, function(v63)
                v57.fieldWatcher:addPath(v63);
                v57:reduceAndSendFields(v58.value, v63);
            end);
            v57.pendingFields = {};
            return ;
        end;
    end);
    v57.devtools.bridge:addListener("operations", function(_)
    end);
    v57.devtools.bridge:addListener("shutdown", function(_)
        v57:send({
            eventName = v4.CloseTarget
        });
        v57.debugInterface:removeWorker(v57.targetId);
        v57:destroy();
    end);
end;
v28.reduceAndSendFields = function(v66, v67, v68)
    local v74 = l_reduce_0(v68, function(v69, v70, v71)
        local l_status_0, l_result_0 = pcall(function()
            return v2(v69, v70);
        end);
        if l_status_0 and l_result_0 ~= nil then
            if v71 == 1 then
                return l_result_0.data;
            else
                return l_result_0;
            end;
        else
            return nil;
        end;
    end, v67);
    if v74 == nil then
        return ;
    else
        v66:send({
            eventName = v4.RoactInspector.ShowFields,
            path = v66.currentPath,
            nodeIndex = v66.currentNodeIndex,
            fieldPath = v68,
            fields = v66.fieldWatcher:collect(v74, 2, v68)
        });
        return ;
    end;
end;
v28.pickInstance = function(v75, v76)
    local v77 = v75:getPath(v76);
    v75.picker:setActive(false);
    v75:openPath(v77);
end;
v28.getPath = function(v78, v79)
    local v80 = v78:getRenderer().getFiberIDForNative(v79);
    if v80 then
        local v81 = {};
        local v82 = {};
        while v80 ~= v78.root do
            local v83 = v78.devtools.store:getElementByID(v80);
            if v83.type == v3.ElementType.HostComponent and #v82 > 0 then
                l_insert_0(v81, l_concat_0(l_reverse_0(v82), "."));
                v82 = {};
            end;
            l_insert_0(v82, v80);
            v80 = v83.parentID;
        end;
        if #v82 > 0 then
            l_insert_0(v82, v78.root);
            l_insert_0(v81, l_concat_0(l_reverse_0(v82), "."));
        end;
        return l_reverse_0(v81);
    else
        return nil;
    end;
end;
v28.openPath = function(v84, v85)
    local v86 = {};
    l_forEach_0(v85, function(v87)
        l_insert_0(v86, v87);
        v84:showChildren(l_append_0({}, v86));
    end);
    v84:send({
        eventName = v4.RoactInspector.PickInstance,
        path = v85
    });
    v84:showBranch(v85);
end;
v28.showChildren = function(v88, v89, v90)
    if #v89 == 0 then
        local v91, v92 = v88:getHostNode(v88.root);
        local v93 = if not v91 then nil else v88:getHostInstance(v91.id);
        local v94 = {
            v92
        };
        v88:send({
            eventName = v4.RoactInspector.ShowChildren,
            path = v89,
            children = {
                [v92 or "None"] = {
                    Name = if not v93 then if v91 then v91.displayName else "<None>" else v93.Name,
                    Icon = "Branch",
                    Children = v88:getChildren(v94, v88.root, 1),
                    Path = v94
                }
            },
            updatedIndexes = v90
        });
        return ;
    else
        v88:send({
            eventName = v4.RoactInspector.ShowChildren,
            path = v89,
            children = v88:getChildren(v89, tonumber(l_last_0(l_last_0(v89):split("."))), 2),
            updatedIndexes = v90
        });
        return ;
    end;
end;
v28.getChildren = function(v95, v96, v97, v98)
    if v98 == 0 then
        return nil;
    else
        local v99 = v95:getHostNode(v97);
        if v99 then
            local v100 = {};
            l_forEach_0(v99.children, function(v101)
                v95:_collectChildren(v101, v96, "", v98, v100);
            end);
            return v100;
        else
            return nil;
        end;
    end;
end;
v28._collectChildren = function(v102, v103, v104, v105, v106, v107)
    local v108 = tostring(v103);
    local v109 = #v105 == 0 and v108 or ("%s.%s"):format(v105, v108);
    local v110 = v102.devtools.store:getElementByID(v103);
    if v110.type == v3.ElementType.HostComponent then
        local v111 = v102:getHostInstance(v103);
        local v112 = not not v111 and v111.Name or v110.displayName;
        if #v110.key > 0 and v112 ~= v110.key then
            v112 = ("%s: %s"):format(v110.key, v112);
        end;
        local v113 = l_append_0({}, v104, {
            v109
        });
        v107[v109] = {
            Name = v112,
            Icon = not not v111 and v111.ClassName or "Branch",
            Children = v102:getChildren(v113, v103, v106 - 1),
            Path = v113
        };
        return ;
    else
        l_forEach_0(v110.children, function(v114)
            v102:_collectChildren(v114, v104, v109, v106, v107);
        end);
        return ;
    end;
end;
v28.getHostNode = function(v115, v116, v117, v118)
    local v119 = tostring(v116);
    local v120 = if not v118 then v119 else ("%s.%s"):format(v118, v119);
    if v116 then
        local v121 = v115.devtools.store:getElementByID(v116);
        if v121 then
            if v121.type == v3.ElementType.HostComponent then
                return v121, v120;
            else
                for v122 = 1, #v121.children do
                    local v123, v124 = v115:getHostNode(v121.children[v122], v117, v120);
                    if v123 then
                        return v123, v124;
                    end;
                end;
            end;
        else
            return nil;
        end;
    end;
    return nil;
end;
v28.getRenderer = function(v125)
    return v125.devtools.hook.rendererInterfaces[v125.devtools.store:getRendererIDForElement(v125.root)];
end;
v28.getHostInstance = function(v126, v127)
    local v128 = v126:getRenderer();
    local v129 = v126:getHostNode(v127);
    if v129 then
        local v130 = v128.findNativeNodesForFiberID(v129.id);
        return not not v130 and v130[1] or nil;
    else
        return ;
    end;
end;
v28.showBranch = function(v131, v132)
    local v133 = v131:getNodes(l_last_0(v132));
    if v133 then
        local v134 = nil;
        local v135 = l_last_0(v133);
        if v135 then
            v134 = v131:getHostInstance(v135.id);
        end;
        v131:send({
            eventName = v4.RoactInspector.ShowBranch,
            path = v132,
            branch = l_map_0(v133, function(v136)
                return v131:getNodeInfo(v136);
            end),
            instance = v134
        });
        return ;
    else
        return ;
    end;
end;
v28.showFields = function(v137, v138)
    local v139 = v137:getNodes(l_last_0(v137.currentPath));
    if v139 then
        local v140 = v139[v137.currentNodeIndex];
        if v140 then
            if v138[1] == "_context" then
                return ;
            else
                l_insert_0(v137.pendingFields, v138);
                v137.devtools.agent:inspectElement({
                    id = v140.id,
                    rendererID = v137.devtools.store:getRendererIDForElement(v137.root),
                    path = v138
                });
                return ;
            end;
        else
            return ;
        end;
    else
        return ;
    end;
end;
v28.getNodes = function(v141, v142)
    return l_map_0(v142:split("."), function(v143)
        return v141.devtools.store:getElementByID((tonumber(v143)));
    end);
end;
v28.showProfileData = function(v144, v145)
    v144:send({
        eventName = v4.RoactInspector.ShowProfileData,
        data = v145
    });
end;
v28.destroy = function(v146)
    v8.destroy(v146);
    v146.picker:destroy();
    v146.profiler:destroy();
    v146.fieldWatcher:destroy();
end;
return v28;


local _ = require(script.Parent.Parent.Types);
return {
    ElementType = {
        Class = 1,
        Context = 2,
        Function = 5,
        ForwardRef = 6,
        HostComponent = 7,
        Memo = 8,
        OtherOrUnknown = 9,
        Profiler = 10,
        Root = 11,
        Suspense = 12,
        SuspenseList = 13
    }
};


local l_Parent_0 = script.Parent.Parent.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local v2 = require(l_Parent_0.RoactInspector.Utils.getChildAtKey);
local v3 = require(l_Parent_1.Dash);
local l_assign_0 = v3.assign;
local l_class_0 = v3.class;
local l_collect_0 = v3.collect;
local l_copy_0 = v3.copy;
local l_keys_0 = v3.keys;
local l_pretty_0 = v3.pretty;
local l_reduce_0 = v3.reduce;
local l_shallowEqual_0 = v3.shallowEqual;
local l_insert_0 = table.insert;
local v15 = l_class_0("FieldWatcher", function(v13, v14)
    return {
        onFieldsChanged = v13,
        activeFields = {},
        rootKey = v14
    };
end);
v15._init = function(v16)
    v16.onPoll = function()
        if not (not v16.root or not v16.polling) then
            v16:checkFields();
            delay(0.5, v16.onPoll);
        end;
    end;
end;
v15.monitor = function(v17)
    if not v17.polling then
        v17.polling = true;
        spawn(v17.onPoll);
    end;
end;
v15.checkFields = function(v18)
    local v22 = l_collect_0(v18.activeFields, function(v19, v20)
        local v21 = v18:walk(v18.root, v19);
        if l_shallowEqual_0(v20, v21) then
            return nil;
        else
            return v19, v21;
        end;
    end);
    l_assign_0(v18.activeFields, v22);
    local v23 = l_keys_0(v22);
    if #v23 > 0 then
        v18.onFieldsChanged(v23);
    end;
end;
v15.collect = function(v24, v25, v26, v27)
    if typeof(v25) ~= "table" then
        return {};
    else
        return (l_collect_0(v25, function(v28, v29)
            local v30 = typeof(v28) == "number" and v28 or tostring(v28);
            local v31 = l_copy_0(v27);
            l_insert_0(v31, v30);
            return v30, {
                Name = v30,
                Summary = l_pretty_0(v29, {
                    depth = 2,
                    arrayLength = true
                }),
                Path = v31,
                Children = (typeof(v29) == "table" and v26 > 0) and v24:collect(v29, v26 - 1, v31) or {}
            };
        end));
    end;
end;
v15.walk = function(v32, _, v34)
    local l_status_0, l_result_0 = pcall(function()
        return l_reduce_0(v34, function(v35, v36, v37)
            local v38 = v2(v35, v36);
            if not (v38 and v37 == 1) or not v32.rootKey then
                return v38;
            else
                return v38[v32.rootKey];
            end;
        end, v32.root);
    end);
    if not l_status_0 then
        warn(("Cannot walk path %s: %s "):format(l_pretty_0(v34), l_result_0));
        l_result_0 = nil;
    end;
    return l_result_0;
end;
v15.setRoot = function(v41, v42)
    v41.root = v42;
end;
v15.clear = function(v43)
    v43.activeFields = {};
    v43:monitor();
end;
v15.addPath = function(v44, v45)
    local v46 = v44:walk(v44.root, v45);
    v44.activeFields[v45] = not not v46 and l_copy_0(v46) or {};
end;
v15.destroy = function(v47)
    v47.root = nil;
    v47.polling = false;
end;
return v15;


local l_Parent_0 = script.Parent.Parent.Parent.Parent;
local l_RunService_0 = game:GetService("RunService");
local v2 = require(l_Parent_0.Dash);
local l_class_0 = v2.class;
local l_format_0 = v2.format;
local l_reduce_0 = v2.reduce;
local v6 = UDim2.fromScale(0, 0);
local function v10(v7, v8, v9)
    return UDim2.new(v7.X.Scale * (1 - v9) + v8.X.Scale * v9, v7.X.Offset * (1 - v9) + v8.X.Offset * v9, v7.Y.Scale * (1 - v9) + v8.Y.Scale * v9, v7.Y.Offset * (1 - v9) + v8.Y.Offset * v9);
end;
local function v12()
    local l_ImageButton_0 = Instance.new("ImageButton");
    l_ImageButton_0.Name = "InspectorHover";
    l_ImageButton_0.Active = true;
    l_ImageButton_0.AutoButtonColor = false;
    l_ImageButton_0.BorderSizePixel = 1;
    l_ImageButton_0.BorderColor3 = Color3.fromRGB(0, 0, 0);
    l_ImageButton_0.BackgroundColor3 = Color3.fromRGB(220, 230, 255);
    l_ImageButton_0.BackgroundTransparency = 0.2;
    l_ImageButton_0.ZIndex = 1100000;
    return l_ImageButton_0;
end;
local function v15()
    local l_Frame_0 = Instance.new("Frame");
    l_Frame_0.Name = "InspectorHover";
    l_Frame_0.BorderSizePixel = 1;
    l_Frame_0.BorderColor3 = Color3.fromRGB(0, 0, 0);
    l_Frame_0.BackgroundColor3 = Color3.fromRGB(220, 230, 255);
    l_Frame_0.BackgroundTransparency = 0.2;
    l_Frame_0.ZIndex = 1100000;
    local l_TextLabel_0 = Instance.new("TextLabel");
    l_TextLabel_0.Name = "Dimensions";
    l_TextLabel_0.Size = UDim2.new(0, 60, 0, 24);
    l_TextLabel_0.Parent = l_Frame_0;
    l_TextLabel_0.BorderColor3 = Color3.fromRGB(0, 0, 0);
    l_TextLabel_0.BorderSizePixel = 1;
    l_TextLabel_0.BackgroundColor3 = Color3.fromRGB(255, 255, 255);
    l_TextLabel_0.BackgroundTransparency = 0.2;
    l_TextLabel_0.ZIndex = 1100001;
    return l_Frame_0;
end;
local v18 = l_class_0("InstancePicker", function(v16, v17)
    return {
        debugInterface = v16,
        onSelect = v17,
        active = false,
        connection = nil,
        selectedObject = nil,
        pickerArea = v12(),
        highlightArea = v15(),
        selectedTime = os.clock(),
        nextPosition = v6,
        nextSize = v6,
        prevPosition = v6,
        prevSize = v6
    };
end);
v18.getRoot = function(v19)
    return v19.debugInterface.rootInstance;
end;
v18.getPickerParent = function(v20, v21)
    return (v21 and v21:FindFirstAncestorWhichIsA("ScreenGui") or v20.debugInterface.pickerParent) or v20:getRoot();
end;
v18.getRelativeMousePosition = function(v22)
    local v23 = v22:getRoot();
    if v23 then
        if not v23:IsA("PluginGui") then
            local l_Mouse_0 = game:GetService("Players").LocalPlayer:GetMouse();
            return Vector2.new(l_Mouse_0.X, l_Mouse_0.Y);
        else
            return v23:GetRelativeMousePosition();
        end;
    else
        return nil;
    end;
end;
v18._init = function(v25)
    v25.pickerArea.Activated:Connect(function()
        v25.onSelect(v25.selectedObject);
    end);
end;
v18.setActive = function(v26, v27)
    v26.active = v27;
    if v26:getRoot() then
        if not v27 then
            if v26.connection then
                v26.connection:Disconnect();
                v26.connection = nil;
                v26.pickerArea.Parent = nil;
            end;
            return ;
        else
            v26.pickerArea.Parent = v26:getPickerParent();
            local v28 = nil;
            v28 = function()
                if v26.active then
                    v26:calculateFramePosition();
                    delay(0.2, v28);
                    return ;
                else
                    return ;
                end;
            end;
            v28();
            v26.connection = l_RunService_0.RenderStepped:Connect(function()
                v26:updateFrame();
            end);
            return ;
        end;
    else
        return ;
    end;
end;
v18.updateFrame = function(v29)
    local v30 = math.min(1, (os.clock() - v29.selectedTime) / 0.1);
    v29.pickerArea.Position = v10(v29.prevPosition, v29.nextPosition, v30);
    v29.pickerArea.Size = v10(v29.prevSize, v29.nextSize, v30);
end;
v18.intersectMouse = function(v31, v32, v33)
    return l_reduce_0(v32:GetDescendants(), function(v34, v35)
        if v35 == v31.pickerArea then
            return v34;
        else
            local v36 = false;
            if v35:IsA("GuiBase2d") then
                local v37 = v33 - v35.AbsolutePosition;
                local v38 = false;
                if v37.X >= 0 then
                    v38 = false;
                    if v37.X <= v35.AbsoluteSize.X then
                        v38 = false;
                        if v37.Y >= 0 then
                            v38 = v37.Y <= v35.AbsoluteSize.Y;
                        end;
                    end;
                end;
                v36 = v38;
            end;
            if not (not v35:IsA("GuiObject") or v35.Visible) then
                v36 = false;
            end;
            local l_v35_FirstAncestorWhichIsA_0 = v35:FindFirstAncestorWhichIsA("ScreenGui");
            local v40 = l_v35_FirstAncestorWhichIsA_0 and l_v35_FirstAncestorWhichIsA_0.Enabled == false;
            if not (not v36 or v40) then
                local v41 = v35.AbsoluteSize.X * v35.AbsoluteSize.Y;
                if v41 < v34.minArea then
                    v34.minArea = v41;
                    v34.instance = v35;
                end;
            end;
            return v34;
        end;
    end, {
        minArea = math.huge
    }).instance;
end;
v18.calculateFramePosition = function(v42)
    local v43 = v42:getRoot();
    local v44 = v42:getRelativeMousePosition();
    if v43 and v44 then
        if v44 ~= v42.mousePosition then
            v42.mousePosition = v44;
            local v45 = v42:intersectMouse(v43, v44);
            if not v45 then
                v42.selectedObject = nil;
            elseif v45 ~= v42.selectedObject then
                v42.pickerArea.Parent = v42:getPickerParent(v45);
                v42.selectedObject = v45;
                v42.prevPosition = UDim2.fromOffset(v42.pickerArea.AbsolutePosition.X, v42.pickerArea.AbsolutePosition.Y);
                v42.prevSize = UDim2.fromOffset(v42.pickerArea.AbsoluteSize.X, v42.pickerArea.AbsoluteSize.Y);
                v42.nextPosition = UDim2.fromOffset(v45.AbsolutePosition.X, v45.AbsolutePosition.Y);
                v42.nextSize = UDim2.fromOffset(v45.AbsoluteSize.X, v45.AbsoluteSize.Y);
                v42.selectedTime = os.clock();
                return ;
            end;
        end;
        return ;
    else
        return ;
    end;
end;
v18.highlight = function(v46, v47)
    pcall(function()
        v46.highlightArea.Parent = v46:getPickerParent(v47);
        v46.highlightArea.Position = UDim2.fromOffset(v47.AbsolutePosition.X, v47.AbsolutePosition.Y);
        v46.highlightArea.Size = UDim2.fromOffset(v47.AbsoluteSize.X, v47.AbsoluteSize.Y);
        v46.highlightArea:FindFirstChild("Dimensions").Text = l_format_0("{X}x{Y}", v47.AbsoluteSize);
    end);
end;
v18.dehighlight = function(v48)
    v48.highlightArea.Parent = nil;
end;
v18.destroy = function(v49)
    if v49.connection then
        v49.connection:Disconnect();
    end;
    v49.pickerArea:Destroy();
end;
return v18;


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.EventName);
local v2 = require(l_Parent_0.Classes.TargetApi);
local v3 = v2:extend("RoactInspectorApi");
v3._init = function(v4)
    v4.profileComponentsPageIndex = 1;
    v4.profileComponentsPageSize = 1;
    v4.profileEventsPageIndex = 1;
    v4.profileEventsPageSize = 1;
end;
v3.attach = function(v5, v6)
    v5.handlers = v6;
    v2.attach(v5);
    v5:_connect({
        eventName = v1.RoactInspector.ShowChildren,
        onEvent = function(v7)
            v5.handlers.onUpdateInstances(v7.path, v7.children, v7.updatedIndexes);
        end
    });
    v5:_connect({
        eventName = v1.RoactInspector.ShowBranch,
        onEvent = function(v8)
            v5.handlers.onUpdateBranch(v8.path, v8.branch);
        end
    });
    v5:_connect({
        eventName = v1.RoactInspector.ShowFields,
        onEvent = function(v9)
            v5.handlers.onUpdateFields(v9.path, v9.nodeIndex, v9.fieldPath, v9.fields);
        end
    });
    v5:_connect({
        eventName = v1.RoactInspector.PickInstance,
        onEvent = function(v10)
            v5.handlers.onPickInstance(v10.path);
        end
    });
    v5:_connect({
        eventName = v1.RoactInspector.ShowProfileData,
        onEvent = function(v11)
            v5.handlers.onUpdateProfileData(v11.data);
        end
    });
end;
v3.getChildren = function(v12, v13)
    v12:_send({
        eventName = v1.RoactInspector.GetChildren,
        path = v13
    });
end;
v3.getRoot = function(v14)
    v14:getChildren({});
end;
v3.getBranch = function(v15, v16)
    v15:_send({
        eventName = v1.RoactInspector.GetBranch,
        path = v16
    });
end;
v3.getFields = function(v17, v18, v19, v20)
    v17:_send({
        eventName = v1.RoactInspector.GetFields,
        path = v18,
        nodeIndex = v19,
        fieldPath = v20
    });
end;
v3.setPicking = function(v21, v22)
    v21:_send({
        eventName = v1.RoactInspector.SetPicking,
        isPicking = v22
    });
end;
v3.openPath = function(v23, v24)
    v23:_send({
        eventName = v1.RoactInspector.OpenPath,
        path = v24
    });
end;
v3.setProfiling = function(v25, v26)
    if not v26 then
        v25.profileThread = nil;
    else
        local v27 = nil;
        do
            local l_v27_0 = v27;
            l_v27_0 = coroutine.wrap(function()
                while l_v27_0 == v25.profileThread do
                    v25:getProfileData();
                    wait(0.5);
                end;
            end);
            v25.profileThread = l_v27_0;
            l_v27_0();
        end;
    end;
    v25:_send({
        eventName = v1.RoactInspector.SetProfiling,
        isProfiling = v26
    });
end;
v3.clearProfileData = function(v29)
    v29:_send({
        eventName = v1.RoactInspector.ClearProfileData
    });
end;
v3.sortProfileData = function(v30, v31, v32, v33)
    v30:_send({
        eventName = v1.RoactInspector.SortProfileData,
        tableName = v31,
        index = v32,
        order = v33
    });
end;
v3.selectProfileInstance = function(v34, v35)
    v34:_send({
        eventName = v1.RoactInspector.SelectProfileInstance,
        instanceId = v35
    });
end;
v3.setProfileFilter = function(v36, v37)
    v36:_send({
        eventName = v1.RoactInspector.SetProfileFilter,
        filter = v37
    });
end;
v3.setProfileSearchTerm = function(v38, v39)
    v38:_send({
        eventName = v1.RoactInspector.SetProfileSearchTerm,
        searchTerm = v39
    });
end;
v3.setProfileComponentsPageIndex = function(v40, v41)
    v40.profileComponentsPageIndex = v41;
end;
v3.setProfileComponentsPageSize = function(v42, v43)
    v42.profileComponentsPageSize = v43;
end;
v3.setProfileEventsPageIndex = function(v44, v45)
    v44.profileEventsPageIndex = v45;
end;
v3.setProfileEventsPageSize = function(v46, v47)
    v46.profileEventsPageSize = v47;
end;
v3.getProfileData = function(v48)
    local v49 = (v48.profileComponentsPageIndex - 1) * v48.profileComponentsPageSize + 1;
    local v50 = (v49 + v48.profileComponentsPageSize) - 1;
    local v51 = (v48.profileEventsPageIndex - 1) * v48.profileEventsPageSize + 1;
    v48:_send({
        eventName = v1.RoactInspector.GetProfileData,
        componentSliceStart = v49,
        componentSliceEnd = v50,
        eventSliceStart = v51,
        eventSliceEnd = (v51 + v48.profileEventsPageSize) - 1
    });
end;
v3.highlight = function(v52, v53)
    v52:_send({
        eventName = v1.RoactInspector.Highlight,
        path = v53
    });
end;
v3.dehighlight = function(v54)
    v54:_send({
        eventName = v1.RoactInspector.Dehighlight
    });
end;
return v3;


local l_Parent_0 = script.Parent.Parent.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local v2 = require(l_Parent_0.RoactInspector.Utils.getChildAtKey);
local v3 = require(l_Parent_0.EventName);
local v4 = require(l_Parent_0.RoactInspector.Classes.FieldWatcher);
local v5 = require(l_Parent_0.RoactInspector.Classes.InstancePicker);
local v6 = require(l_Parent_0.RoactInspector.Classes.RoactProfiler);
local v7 = require(l_Parent_0.Classes.TargetWorker);
local v8 = require(l_Parent_0.RoactInspector.Classes.RoactTreeWatcher);
local l_Selection_0 = game:GetService("Selection");
local v10 = require(l_Parent_1.Dash);
local l_map_0 = v10.map;
local l_forEach_0 = v10.forEach;
local l_last_0 = v10.last;
local l_pretty_0 = v10.pretty;
local l_reduce_0 = v10.reduce;
local _ = require(l_Parent_0.Types);
local l_insert_0 = table.insert;
local v24 = v7:extend("RoactInspectorWorker", function(v18, v19, v20, v21, v22)
    local v23 = v7.new(v18, v19, v20);
    v23.roact = v22;
    v23.tree = v21;
    return v23;
end);
v24._init = function(v25)
    v25.treeWatcher = v8.new(v25.debugInterface, v25.tree, function(v26, v27)
        v25:showChildren(v26, v27);
    end);
    v25.treeWatcher:monitor();
    v25.fieldWatcher = v4.new(function(_)
        v25:showFields({});
    end);
    v25.picker = v5.new(v25.debugInterface, function(v29)
        return v25:pickInstance(v29);
    end);
    v25.profiler = v6.new(v25.debugInterface, v25.treeWatcher, v25.tree, v25.roact);
    v25:connectEvents();
end;
v24.connectEvents = function(v30)
    v7.connectEvents(v30);
    v30:connect({
        eventName = v3.RoactInspector.GetChildren,
        onEvent = function(v31)
            v30:showChildren(v31.path);
        end
    });
    v30:connect({
        eventName = v3.RoactInspector.GetBranch,
        onEvent = function(v32)
            v30:showBranch(v32.path);
        end
    });
    v30:connect({
        eventName = v3.RoactInspector.GetFields,
        onEvent = function(v33)
            v30.currentPath = v33.path;
            v30.currentNodeIndex = v33.nodeIndex;
            v30:showFields(v33.fieldPath or {});
        end
    });
    v30:connect({
        eventName = v3.RoactInspector.Highlight,
        onEvent = function(v34)
            local v35 = v30.treeWatcher:getNode(v34.path);
            if v35 then
                local v36 = v30.treeWatcher:getHostNode(v35);
                if not v36 or not v36.hostObject then
                    v30.picker:dehighlight();
                    return ;
                else
                    v30.picker:highlight(v36.hostObject);
                    return ;
                end;
            else
                return ;
            end;
        end
    });
    v30:connect({
        eventName = v3.RoactInspector.Dehighlight,
        onEvent = function()
            v30.picker:dehighlight();
        end
    });
    v30:connect({
        eventName = v3.RoactInspector.SetPicking,
        onEvent = function(v37)
            v30.picker:setActive(v37.isPicking);
        end
    });
    v30:connect({
        eventName = v3.RoactInspector.OpenPath,
        onEvent = function(v38)
            v30:openPath(v38.path);
        end
    });
    v30:connect({
        eventName = v3.RoactInspector.SetProfiling,
        onEvent = function(v39)
            v30.profiler:setActive(v39.isProfiling);
        end
    });
    v30:connect({
        eventName = v3.RoactInspector.GetProfileData,
        onEvent = function(v40)
            v30:showProfileData((v30.profiler:getData(v40.componentSliceStart, v40.componentSliceEnd, v40.eventSliceStart, v40.eventSliceEnd)));
        end
    });
    v30:connect({
        eventName = v3.RoactInspector.ClearProfileData,
        onEvent = function()
            v30.profiler:clearData();
        end
    });
    v30:connect({
        eventName = v3.RoactInspector.SortProfileData,
        onEvent = function(v41)
            v30.profiler:sortData(v41.tableName, v41.index, v41.order);
        end
    });
    v30:connect({
        eventName = v3.RoactInspector.SelectProfileInstance,
        onEvent = function(v42)
            v30.profiler:selectInstance(v42.instanceId);
        end
    });
    v30:connect({
        eventName = v3.RoactInspector.SetProfileFilter,
        onEvent = function(v43)
            v30.profiler:setFilter(v43.filter);
        end
    });
    v30:connect({
        eventName = v3.RoactInspector.SetProfileSearchTerm,
        onEvent = function(v44)
            v30.profiler:setSearchTerm(v44.searchTerm);
        end
    });
end;
v24.getNodeInfo = function(v45, v46)
    local v47 = "";
    local v48 = "";
    if v46.currentElement.source then
        local v49 = v46.currentElement.source:find("\n");
        if v49 then
            v47 = v47:sub(1, v49 - 1);
            v48 = v47:match("[A-Za-z0-9_]+%.[A-Za-z0-9_]+:[0-9]+") or "";
        end;
    end;
    return {
        Name = v45.treeWatcher:getNodeName(v46),
        Source = v47,
        Link = v48,
        Icon = v45.treeWatcher:getNodeIcon(v46)
    };
end;
v24.pickInstance = function(v50, v51)
    v50.picker:setActive(false);
    v50:openPath((v50.treeWatcher:getPath(v51)));
end;
v24.openPath = function(v52, v53)
    local v54 = {};
    l_forEach_0(v53, function(v55)
        l_insert_0(v54, v55);
        v52:showChildren(v54);
    end);
    v52:send({
        eventName = v3.RoactInspector.PickInstance,
        path = v53
    });
    v52:showBranch(v53);
end;
v24.showChildren = function(v56, v57, v58)
    local v59 = v56.treeWatcher:getNode(v57);
    if v59 then
        v56.treeWatcher:watchPath(v57);
        v56:send({
            eventName = v3.RoactInspector.ShowChildren,
            path = v57,
            children = v56.treeWatcher:getChildren(v57, v59, 2),
            updatedIndexes = v58
        });
        return ;
    else
        warn("[DeveloperInspector - Roact] Missing path " .. l_pretty_0(v57));
        return ;
    end;
end;
v24.showBranch = function(v60, v61)
    local v62 = v60.treeWatcher:getNodes(v61);
    if v62 then
        local v63 = l_last_0(v62);
        if not (not v63 or not v63.hostObject) then
            l_Selection_0:Set({
                v63.hostObject
            });
        end;
        v60:send({
            eventName = v3.RoactInspector.ShowBranch,
            path = v61,
            branch = l_map_0(v62, function(v64)
                return v60:getNodeInfo(v64);
            end)
        });
        return ;
    else
        return ;
    end;
end;
v24.showFields = function(v65, v66)
    local v67 = v65.treeWatcher:getNodes(v65.currentPath);
    if v67 then
        local v68 = v67[v65.currentNodeIndex];
        if v68 then
            local v69 = v68.instance or v68.currentElement;
            v65.fieldWatcher:clear();
            v65.fieldWatcher:setRoot(v69);
            v65.fieldWatcher:addPath(v66);
            local v74 = l_reduce_0(v66, function(v70, v71)
                local l_status_0, l_result_0 = pcall(function()
                    return v2(v70, v71);
                end);
                if not l_status_0 then
                    return nil;
                else
                    return l_result_0;
                end;
            end, v69);
            if v74 == nil then
                return ;
            else
                v65:send({
                    eventName = v3.RoactInspector.ShowFields,
                    path = v65.currentPath,
                    nodeIndex = v65.currentNodeIndex,
                    fieldPath = v66,
                    fields = v65.fieldWatcher:collect(v74, 2, v66)
                });
                return ;
            end;
        else
            return ;
        end;
    else
        return ;
    end;
end;
v24.showProfileData = function(v75, v76)
    v75:send({
        eventName = v3.RoactInspector.ShowProfileData,
        data = v76
    });
end;
v24.destroy = function(v77)
    v7.destroy(v77);
    v77.profiler:destroy();
    v77.picker:destroy();
    v77.treeWatcher:destroy();
    v77.fieldWatcher:destroy();
    v77.treeWatcher = nil;
end;
return v24;