From 6776a65690fff96056057a6b2df5350a0171f972 Mon Sep 17 00:00:00 2001 From: ChrisChrome Date: Sun, 12 Jul 2026 16:50:25 -0600 Subject: [PATCH] Update template --- xcs-template.rbxmx | 3971 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 3445 insertions(+), 526 deletions(-) diff --git a/xcs-template.rbxmx b/xcs-template.rbxmx index 20fbe57..19fad13 100644 --- a/xcs-template.rbxmx +++ b/xcs-template.rbxmx @@ -4,7 +4,6 @@ nil - 0 0 @@ -27,12 +26,10 @@ 0 0 - Restrafes XCS false null 1 - 7108324788 - + yuZpQdnvvUBOTYh1jqZ2cA== 17.5 @@ -49,13 +46,16 @@ 7.38481347e-08 + + 0 + false + Restrafes XCS + 7108324788 + yuZpQdnvvUBOTYh1jqZ2cA== - - config - {B88BC829-2E70-458E-9567-27196412A674} + {B88BC829-2E70-458E-9567-27196412A674} + + 0 + false + config -1 - + yuZpQdnvvUBOTYh1jqZ2cA== - - false - - loader - 0 - {CD756DAA-C3CA-4FCF-8E82-33ACB5E578B6} - + false + + 0 + {CD756DAA-C3CA-4FCF-8E82-33ACB5E578B6} + + 0 + false + loader -1 - + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + {ef7612db-42e6-4525-8e79-9c583fec2bff} + + 17996771963439872 + true + xcssrc + 7108284356 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + true + + 0 + {cd26dcdf-c1c0-4c32-a66e-890426c8e596} + + 17996771963439872 + true + httpm + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + true + 0 + 1 + 2 + true + false + 0 + true + null + 0 + 0 + 0 + 0 + false + + 0 + false + XCS_HTTP + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + 0 + false + + 0 + 0 + + 0 + + 0 + 0 + 0 + + 0 + + 0.105882362 + 0.164705887 + 0.207843155 + + 0 + 0 + false + false + 0 + true + 0 + null + null + null + null + + 0.5 + -300 + 0 + 0 + + 0 + false + null + 0 + + 0 + 600 + 0 + 50 + + 0 + true + 1 + true + null + 0 + 0 + 0 + 0 + false + + 0 + false + Frame + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + http://www.roblox.com/asset/?id=14511145204 + + 1 + 1 + 1 + + + 0 + 0 + + + 0 + 0 + + 0 + + 0 + 3 + + + 0 + 0 + + + 0 + 0 + + + 1 + + 1 + 0 + 1 + 0 + + false + null + false + null + false + 0 + true + + 0 + 0.5 + + 0 + + 1 + 1 + 1 + + 1 + + 0.105882362 + 0.164705887 + 0.207843155 + + 0 + 0 + false + false + 0 + true + 0 + null + null + null + null + + 0 + 10 + 0.5 + 0 + + 0 + false + null + 0 + + 0 + 80 + 0 + 18 + + 0 + true + 1 + true + null + 0 + 0 + 0 + 0 + false + + 0 + false + Logo + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + + rbxasset://fonts/families/Roboto.json + 400 + + + 1 + + + -1 + + false + HttpService is required, please enable it in game settings. + + 1 + 1 + 1 + + 0 + false + 18 + + 0 + 0 + 0 + + 1 + 0 + 0 + true + 0 + 0 + false + + 0 + 0 + + 0 + + 1 + 1 + 1 + + 1 + + 0.105882362 + 0.164705887 + 0.207843155 + + 0 + 0 + false + false + 0 + true + 0 + null + null + null + null + + 0 + 100 + 0 + 25 + + 0 + false + null + 0 + + 0 + 500 + 0 + 25 + + 0 + true + 1 + true + null + 0 + 0 + 0 + 0 + false + + 0 + false + Line2 + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + + rbxasset://fonts/families/Roboto.json + 400 + + + 1 + + + -1 + + false + Restrafes XCS Controller Error + + 1 + 1 + 1 + + 0 + false + 18 + + 0 + 0 + 0 + + 1 + 0 + 0 + true + 0 + 2 + false + + 0 + 0 + + 0 + + 1 + 1 + 1 + + 1 + + 0.105882362 + 0.164705887 + 0.207843155 + + 0 + 0 + false + false + 0 + true + 0 + null + null + null + null + + 0 + 100 + 0 + 0 + + 0 + false + null + 0 + + 0 + 500 + 0 + 25 + + 0 + true + 1 + true + null + 0 + 0 + 0 + 0 + false + + 0 + false + Line1 + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + + + + + + {8416f780-f0d8-4765-95fe-36fa95288001} + + 17996771963439872 + true + controllerAxesys + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + + syncTimed + spawn(function() + _m.events["accessReady"](); + end) + _m.api:Fire({["request"]="setDoorTrigger";["value"]=false;["player"]=player;}); + if (proximityObject) then + proximityObject.Enabled = true; + end + else + spawn(function() + _m.events["accessDenied"](player); + end) + _m.api:Fire({["request"]="onAccessDenied";["player"]=player;["timerLength"]=_m.config["accessDeniedTimer"];}); + if (_m.sound) then + _m.sound.SoundId = _m.sounds["accessDenied"]; + _m.sound:Play(); + end + if (proximityObject) then + proximityObject.Enabled = false; + end + wait(_m.config["accessDeniedTimer"]); + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",1); + if (proximityObject) then + proximityObject.Enabled = true; + end + end + _m.cardScan = false + end +end + +function _m.touchScan(x) + if (x.Parent:FindFirstChild("CardNumber") or x.Parent:FindFirstChild("_axesysCard") and x.Name == "Handle" and x.Parent.ClassName == "Tool") then + local player = game.Players:GetPlayerFromCharacter(x.Parent.Parent); + local uid = tostring(player.UserId); + _m.negotiate(player); + end +end + +function readerSettings() + local newSettings = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="settings"})["data"]; + _m.doorActive = (newSettings["Active"] == "1" and true or false); + _m.doorLocked = (newSettings["Locked"] == "1" and true or false); + _m.api:Fire({["request"]="setDoorTrigger";["value"]=(newSettings["Locked"] == "0" and true or false);["player"]=player;}); + _m.indicatorChange("LEDR",(newSettings["Active"] == "0" and 1 or 0)); + _m.indicatorChange("LEDG",(newSettings["Locked"] == "1" and 0 or 1)); + _m.indicatorChange("LEDS",(newSettings["Active"] == "1" and newSettings["Locked"] == "1" and 1 or 0)); + + if (_m.doorActive and _m.doorLocked) then + spawn(function() + _m.events["accessReady"](); + end) + elseif (_m.doorActive and not _m.doorLocked) then + spawn(function() + _m.events["enabled"](); + end) + elseif (not _m.doorActive) then + spawn(function() + _m.events["disabled"](); + end) + end + + _m.doorTimer = tonumber(newSettings["Timer"]); + wait(60); + readerSettings(); +end + +function _m.indicatorChange(N,S) + for _,x in pairs(_m.model:GetChildren()) do + if (x.Name == N) then + x.BrickColor = BrickColor.new(_m.config["_legacy_indicators"][N][S]) + if (S == 1) then + x.Material = "Neon"; + else + x.Material = "SmoothPlastic"; + end + end + end +end + +function _m.init(data) + wait(2.5) + _m.config = data["config"]; + _m.model = _m.config["model"]; + _m.doorId = _m.config["doorId"]; + _m.sounds = _m.config["sounds"]; + _m.events = _m.config["events"]; + _m.sound = nil; + _m.api = _m.model.API; + + if (_m.model:FindFirstChild("_main")) then + _m.sound = _m.model:FindFirstChild("_main"):FindFirstChild("sound"); + end + if (_m.config["_legacy_indicators"] == nil) then + _m.config["_legacy_indicators"] = { + ["LEDR"]={[0]="Really black",[1]="Really red"}; + ["LEDG"]={[0]="Really black",[1]="Lime green"}; + ["LEDS"]={[0]="Really black",[1]="Institutional white"}; + }; + end + if (_m.events["accessGranted"] == nil) then + _m.events["accessGranted"] = function(player) + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",1); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["accessDenied"] == nil) then + _m.events["accessDenied"] = function(player) + _m.indicatorChange("LEDR",1); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["enabled"] == nil) then + _m.events["enabled"] = function() + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",1); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["disabled"] == nil) then + _m.events["disabled"] = function() + _m.indicatorChange("LEDR",1); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["accessReady"] == nil) then + _m.events["accessReady"] = function() + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",1); + end + end + + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + + local startUp = true; + + repeat + _m.indicatorChange("LEDR",1) + local waitPing = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="ping";}) + if (waitPing["response"]) then + startUp = false; + break; + end + if (waitPing["response"] == "invalid-reader") then + _m.indicatorChange("LEDR",1); + assert(false,"eve axesys (reader): [".._m.doorId.."]: invalid reader!"); + end + until not startUp + + _m.indicatorChange("LEDR",0); + wait(0.2); + _m.indicatorChange("LEDR",1); + wait(0.2); + _m.indicatorChange("LEDG",1); + wait(0.2); + _m.indicatorChange("LEDS",1); + wait(2.5); + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + + if (_m.model:FindFirstChild("_main")) then + _m.model:FindFirstChild("_main").Touched:connect(_m.touchScan); + end + -- new interaction method + _m.api.Event:Connect(function(data) + if (data["request"] == "onScan") then + if (data["isProximityPrompt"]) then + if (data["proximityPrompAccessWithoutCard"]) then + _m.negotiate(data["player"]); + else + for _,v in pairs(data["player"]:FindFirstChild("Backpack"):GetChildren()) do + if (v:FindFirstChild("CardNumber") or v:FindFirstChild("_axesysCard") and v.Parent.ClassName == "Tool") then + _m.negotiate(data["player"], data["proximityObject"]); + return; + end + end + for _,v in pairs(data["player"].Character:GetChildren()) do + if (v:FindFirstChild("CardNumber") or v:FindFirstChild("_axesysCard") and v.Parent.ClassName == "Tool") then + _m.negotiate(data["player"], data["proximityObject"]); + return; + end + end + end + else + _m.negotiate(data["player"]); + end + elseif (data["request"] == "setDoorTrigger") then + _m._legacy_trigger(data["value"]); + end + end) + readerSettings() +end + +return _m +]]> + {2ca9fb29-cd45-4b62-b6c1-f333e2d89b32} + + 17996771963439872 + true + unitAxesys + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + + + {c94b318e-9267-42d2-8881-9790a1f569d9} + + 17996771963439872 + true + controller + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + + syncTimed + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], checkUser["scan_data"]); + end) + _m.api:Fire({["request"]="setDoorTrigger";["value"]=false;["player"]=player;}); + if (proximityObject and _m.doorActive) then + proximityObject.Enabled = true; + end + else + if (_m.sound and _m.sounds) then + _m.sound.SoundId = _m.sounds["denied"] or _m.sounds["accessDenied"]; + _m.sound:Play(); + end + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessDenied"] or _m.events["denied"], player, checkUser["scan_data"]); + end) + _m.api:Fire({["request"]="onAccessDenied";["player"]=player;["timerLength"]=_m.config["accessDeniedTimer"];}); + wait(_m.config["accessDeniedTimer"]); + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",1); + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], checkUser["scan_data"]); + end) + if (proximityObject and _m.doorActive) then + proximityObject.Enabled = true; + end + end + _m.cardScan = false + end + end) + if (not s0) then + print(string.format("There was an error while negotiating an access point: %s", m0)) + end +end + +function _m.touchScan(x) + if (_m.findAny(x.Parent, {"CardNumber", "_xcsCard", "XCS"}) and x.Name == "Handle" and x.Parent.ClassName == "Tool") then + local player = game.Players:GetPlayerFromCharacter(x.Parent.Parent); + local uid = tostring(player.UserId); + local cardNumber = nil; + local cardNumberObject = _m.findAny(x.Parent, {"CardNumber", "_xcsCard", "XCS"}); + if (cardNumberObject and (cardNumberObject:IsA("StringValue") or cardNumberObject:IsA("NumberValue") or cardNumberObject:IsA("IntValue"))) then + cardNumber = cardNumberObject.Value; + end + _m.negotiate(player, nil, {cardNumber}); + end +end + +function readerSettings() + local s0, m0 = pcall(function() + spawn(function() + local proximityObject = _m.model:FindFirstChild("xcsInteraction", true); + local newSettings = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="settings"}); + if (newSettings["response"] == "invalid-reader") then + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessDisabled"] or _m.events["disabled"], {}); + end) + assert(false, string.format("Restrafes XCS (reader): [%s]: Invalid reader ID!\n%s", _m.doorId, _m.model:GetFullName())); + end + newSettings = newSettings["data"]; + _m.doorActive = (newSettings["active"]); + _m.doorLocked = (newSettings["armed"]); + _m.api:Fire({["request"]="setDoorTrigger";["value"]=(newSettings["armed"]);["player"]=player;}); + _m.indicatorChange("LEDR",(newSettings["active"] == false and 1 or 0)); + _m.indicatorChange("LEDG",(newSettings["armed"] == true and 0 or 1)); + _m.indicatorChange("LEDS",(newSettings["active"] == true and newSettings["armed"] == true and 1 or 0)); + + if (_m.doorActive and _m.doorLocked) then + if (not _m.cardScan) then + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], newSettings["scanData"]["ready"] or {}); + end) + if (proximityObject and _m.doorActive) then + proximityObject.Enabled = true; + end + end + elseif (_m.doorActive and not _m.doorLocked) then + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["enabled"] or _m.events["disarmed"], newSettings["scanData"]["disarmed"] or {}); + end) + if (proximityObject) then + proximityObject.Enabled = false; + end + elseif (not _m.doorActive) then + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessDisabled"] or _m.events["disabled"], {}); + end) + if (proximityObject) then + proximityObject.Enabled = false; + end + end + _m.doorTimer = tonumber(newSettings["unlockTime"] or 5); + wait(15); + readerSettings(); + end) + end) + if (not s0) then + print(string.format("There was an error while grabbing up-to-date reader settings: %s", m0)) + end +end + +function _m.indicatorChange(N,S) + for _,x in pairs(_m.model:GetChildren()) do + if (x.Name == N) then + x.BrickColor = BrickColor.new(_m.config["_legacy_indicators"][N][S]) + if (S == 1) then + x.Material = "Neon"; + else + x.Material = "SmoothPlastic"; + end + end + end +end + +function _m.remoteUnlock(unlockSeconds) + if (not _m.doorActive or _m.cardScan) then return; end + _m.cardScan = true; + if (_m.sound and _m.sounds) then + _m.sound.SoundId = _m.sounds["granted"] or _m.sounds["accessGranted"]; + _m.sound:Play(); + end + spawn(function() + local proximityObject = _m.model:FindFirstChild("xcsInteraction", true); + if (proximityObject) then + proximityObject.Enabled = false; + end + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessGranted"] or _m.events["granted"], nil, {}); + end) + _m.api:Fire({["request"]="setDoorTrigger";["value"]=true;}); + local time = 0; + local syncTimed = tonumber(unlockSeconds) or _m.doorTimer; + _m.api:Fire({["request"]="onAccessGranted";["timerLength"]=syncTimed;}); + repeat + wait(1); + time += 1; + until time > syncTimed + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], {}); + end) + _m.api:Fire({["request"]="setDoorTrigger";["value"]=false;}); + if (proximityObject and _m.doorActive) then + proximityObject.Enabled = true; + end + _m.cardScan = false; + end) +end + +function _m.init(data) + _m.config = data["config"]; + _m.model = _m.config["model"]; + _m.doorId = _m.config["accessPointId"] or _m.config["doorId"]; + _m.sounds = _m.config["sounds"]; + _m.events = _m.config["events"]; + _m.sound = nil; + _m.api = _m.model.API; + + if (_m.model:FindFirstChild("_main")) then + _m.sound = _m.model:FindFirstChild("_main"):FindFirstChild("sound"); + if (_m.sound and _m.sounds) then + _m.sounds["granted"] = _m.sounds["granted"] or _m.sounds["accessGranted"] or ""; + _m.sounds["denied"] = _m.sounds["denied"] or _m.sounds["accessDenied"] or ""; + _m.sounds["pending"] = _m.sounds["pending"] or _m.sounds["accessPending"] or ""; + end + end + if (_m.config["_legacy_indicators"] == nil) then + _m.config["_legacy_indicators"] = { + ["LEDR"]={[0]="Really black",[1]="Really red"}; + ["LEDG"]={[0]="Really black",[1]="Lime green"}; + ["LEDS"]={[0]="Really black",[1]="Institutional white"}; + }; + end + if (_m.events["accessGranted"] == nil and _m.events["granted"] == nil) then + _m.events["accessGranted"] = function(player) + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",1); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["accessDenied"] == nil and _m.events["denied"] == nil) then + _m.events["accessDenied"] = function(player) + _m.indicatorChange("LEDR",1); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["enabled"] == nil and _m.events["disarmed"] == nil) then + _m.events["enabled"] = function() + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",1); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["accessDisabled"] == nil and _m.events["disabled"] == nil) then + _m.events["disabled"] = function() + _m.indicatorChange("LEDR",1); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["accessReady"] == nil and _m.events["ready"] == nil) then + _m.events["accessReady"] = function() + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",1); + end + end + + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + + local startUp = true; + + repeat + _m.indicatorChange("LEDR",1) + local waitPing = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="ping";}) + if (waitPing["response"]) then + startUp = false; + break; + end + if (waitPing["response"] == "invalid-reader") then + _m.indicatorChange("LEDR",1); + assert(false, string.format("Restrafes XCS (reader): [%s]: Invalid reader ID!\n%s", _m.doorId, _m.model:GetFullName())); + end + until not startUp + + _m.indicatorChange("LEDR",0); + wait(0.2); + _m.indicatorChange("LEDR",1); + wait(0.2); + _m.indicatorChange("LEDG",1); + wait(0.2); + _m.indicatorChange("LEDS",1); + wait(2.5); + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + + if (_m.model:FindFirstChild("_touch")) then + _m.model:FindFirstChild("_touch").Touched:connect(_m.touchScan); + end + + if (_m.model:FindFirstChild("_main")) then + _m.model:FindFirstChild("_main").Touched:connect(_m.touchScan); + end + -- new interaction method + _m.api.Event:Connect(function(data) + if (data["request"] == "onScan") then + local cardNumbers = {}; + for _,v in pairs(data["player"]:FindFirstChild("Backpack"):GetChildren()) do + if (v:FindFirstChild("CardNumber") and v.ClassName == "Tool") then + table.insert(cardNumbers, v:FindFirstChild("CardNumber").Value); + end + end + for _,v in pairs(data["player"].Character:GetChildren()) do + if (v:FindFirstChild("CardNumber") and v.ClassName == "Tool") then + table.insert(cardNumbers, v:FindFirstChild("CardNumber").Value); + end + end + if (data["isProximityPrompt"]) then + if (data["proximityPromptAccessWithoutCard"]) then + _m.negotiate(data["player"], data["proximityObject"], cardNumbers); + end + else + _m.negotiate(data["player"], nil, cardNumbers); + end + elseif (data["request"] == "setDoorTrigger") then + _m._legacy_trigger(data["value"]); + end + end) + + repeat wait() until _G.xcsRemoteUnlock ~= nil; + _G.xcsRemoteUnlock.Event:Connect(function(accessPointId, payload) + if (accessPointId ~= _m.doorId) then return; end + local unlockSeconds = nil; + if (type(payload) == "table") then + unlockSeconds = payload["unlockTime"]; + end + _m.remoteUnlock(unlockSeconds); + end) + + readerSettings() +end + +return _m +]]> + {c00ee4b0-06dd-4ca9-a4a3-038539ed2047} + + 17996771963439872 + true + unit + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + 0 + false Readers -1 - + yuZpQdnvvUBOTYh1jqZ2cA== - 0 0 @@ -140,12 +1755,10 @@ _m.init({["config"]=require(script.Parent);}); 0 0 - XCS Ax1 false null 1 - -1 - + yuZpQdnvvUBOTYh1jqZ2cA== 4.9749999 @@ -162,12 +1775,55 @@ _m.init({["config"]=require(script.Parent);}); -4.37113883e-08 + + 0 + false + XCS Ax1 + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + false + false + false + + 0.200000003 + 0.600000024 + 0.0500000007 + + + 0 + 0 + 0 + + rbxassetid://14392193893 + + 0 + + 606 yuZpQdnvvUBOTYh1jqZ2cA== + 0 + true + 9youQqgpV70GZVe57RLKHg== + + -2.40652412e-06 + -2.03360287e-06 + 3.12777206e-06 + + + 4.21279692e-05 + 6.70220561e-06 + 4.84613956e-05 + + + -9.36211109e-11 + -6.75776058e-13 + 5.57743999e-12 + + 0.000885298126 true - + true -0.5 0.5 0 @@ -200,24 +1856,11 @@ _m.init({["config"]=require(script.Parent);}); false - false true -0.5 0.5 0 0 - false - false - - 0.200000003 - 0.600000024 - 0.0500000007 - - - 0 - 0 - 0 - -0.5 0.5 0 @@ -226,10 +1869,6 @@ _m.init({["config"]=require(script.Parent);}); false 272 - rbxassetid://14392193893 - finish - ruzpw2rIhPvsQsWrqW+qdg== - 0 0 @@ -245,7 +1884,6 @@ _m.init({["config"]=require(script.Parent);}); 1 0 - 0 -0.5 0.5 0 @@ -256,9 +1894,6 @@ _m.init({["config"]=require(script.Parent);}); 0 0 - -1 - - -0.5 0.5 0 @@ -269,19 +1904,61 @@ _m.init({["config"]=require(script.Parent);}); 0 0 - 606 0.200000003 0.600000024 0.0500000007 + + 0 + false + finish + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + false + false + false + + 0.180000007 + 0.579999983 + 0.0290130004 + + + 0 + 0 + 0 + + rbxassetid://14392195965 + + 0 + + 4352 yuZpQdnvvUBOTYh1jqZ2cA== + 0 + true + aTIjYIeEFqyQ2bhuh8rtLg== + + -1.80013018e-07 + 4.32734441e-06 + 3.48552157e-06 + + + 8.50336146e-05 + 8.37962762e-06 + 9.29887392e-05 + + + -3.94808665e-12 + -3.17759881e-12 + -1.5377595e-12 + + 0.00302734436 true - + true -0.5 0.5 0 @@ -314,24 +1991,11 @@ _m.init({["config"]=require(script.Parent);}); false - false true -0.5 0.5 0 0 - false - false - - 0.180000007 - 0.579999983 - 0.0290130004 - - - 0 - 0 - 0 - -0.5 0.5 0 @@ -340,10 +2004,6 @@ _m.init({["config"]=require(script.Parent);}); false 272 - rbxassetid://14392195965 - _main - 8bK8+Px3Ot0zJrOHgLue2Q== - 0 0 @@ -359,7 +2019,6 @@ _m.init({["config"]=require(script.Parent);}); 1 0 - 0 -0.5 0.5 0 @@ -370,9 +2029,6 @@ _m.init({["config"]=require(script.Parent);}); 0 0 - -1 - - -0.5 0.5 0 @@ -383,39 +2039,46 @@ _m.init({["config"]=require(script.Parent);}); 0 0 - 4352 0.180000007 0.579999983 0.0290130004 + + 0 + false + _main + -1 + yuZpQdnvvUBOTYh1jqZ2cA== - - 10 + true 0 60000 false - sound false 0 60000 false 4 false + 20 + 10 0 null rbxassetid://138093550 - 138093550 - 0 0.200000003 - 20 + + 0 + false + sound + 138093550 + yuZpQdnvvUBOTYh1jqZ2cA== Present your card - true true true @@ -424,24 +2087,30 @@ _m.init({["config"]=require(script.Parent);}); 0.5 101 3 - xcsInteraction + 0 Restrafes XCS true null - -1 0 - 0 0 + + 0 + false + xcsInteraction + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + 1 + 1 true - + true -0.5 0.5 0 @@ -487,7 +2156,6 @@ _m.init({["config"]=require(script.Parent);}); false 288 - LED 0 0 @@ -513,8 +2181,6 @@ _m.init({["config"]=require(script.Parent);}); 0 0 - -1 - -0.5 0.5 0 @@ -525,19 +2191,25 @@ _m.init({["config"]=require(script.Parent);}); 0 0 - 1 - 1 0.129999995 0.0299999993 0.0140100848 + + 0 + false + LED + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + 1 + 1 true - + true -0.5 0.5 0 @@ -583,7 +2255,6 @@ _m.init({["config"]=require(script.Parent);}); false 272 - logo 0 0 @@ -609,8 +2280,6 @@ _m.init({["config"]=require(script.Parent);}); 0 0 - -1 - -0.5 0.5 0 @@ -621,21 +2290,22 @@ _m.init({["config"]=require(script.Parent);}); 0 0 - 1 - 1 0.129999995 0.0464786291 0.0144716632 + + 0 + false + logo + -1 + yuZpQdnvvUBOTYh1jqZ2cA== - - config - {E15B3E24-9BEB-4154-9296-28F128C272E9} + {E15B3E24-9BEB-4154-9296-28F128C272E9} + + 0 + false + config -1 - + yuZpQdnvvUBOTYh1jqZ2cA== - - false - - loader - 0 - {02982804-CB63-4C38-9D47-006FC5451CFB} - + false + + 0 + {02982804-CB63-4C38-9D47-006FC5451CFB} + + 0 + false + loader -1 - + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + {6E7ABAAB-C1D7-4974-9A2A-6C2921275D30} + + 17996771963439872 + true + xcssrc + 7108284356 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + true + + 0 + {CB14BE36-E440-4206-BD11-413CD05BF88C} + + 17996771963439872 + true + httpm + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + true + 0 + 1 + 2 + true + false + 0 + true + null + 0 + 0 + 0 + 0 + false + + 0 + false + XCS_HTTP + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + 0 + false + + 0 + 0 + + 0 + + 0 + 0 + 0 + + 0 + + 0.105882362 + 0.164705887 + 0.207843155 + + 0 + 0 + false + false + 0 + true + 0 + null + null + null + null + + 0.5 + -300 + 0 + 0 + + 0 + false + null + 0 + + 0 + 600 + 0 + 50 + + 0 + true + 1 + true + null + 0 + 0 + 0 + 0 + false + + 0 + false + Frame + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + http://www.roblox.com/asset/?id=14511145204 + + 1 + 1 + 1 + + + 0 + 0 + + + 0 + 0 + + 0 + + 0 + 3 + + + 0 + 0 + + + 0 + 0 + + + 1 + + 1 + 0 + 1 + 0 + + false + null + false + null + false + 0 + true + + 0 + 0.5 + + 0 + + 1 + 1 + 1 + + 1 + + 0.105882362 + 0.164705887 + 0.207843155 + + 0 + 0 + false + false + 0 + true + 0 + null + null + null + null + + 0 + 10 + 0.5 + 0 + + 0 + false + null + 0 + + 0 + 80 + 0 + 18 + + 0 + true + 1 + true + null + 0 + 0 + 0 + 0 + false + + 0 + false + Logo + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + + rbxasset://fonts/families/Roboto.json + 400 + + + 1 + + + -1 + + false + HttpService is required, please enable it in game settings. + + 1 + 1 + 1 + + 0 + false + 18 + + 0 + 0 + 0 + + 1 + 0 + 0 + true + 0 + 0 + false + + 0 + 0 + + 0 + + 1 + 1 + 1 + + 1 + + 0.105882362 + 0.164705887 + 0.207843155 + + 0 + 0 + false + false + 0 + true + 0 + null + null + null + null + + 0 + 100 + 0 + 25 + + 0 + false + null + 0 + + 0 + 500 + 0 + 25 + + 0 + true + 1 + true + null + 0 + 0 + 0 + 0 + false + + 0 + false + Line2 + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + + rbxasset://fonts/families/Roboto.json + 400 + + + 1 + + + -1 + + false + Restrafes XCS Controller Error + + 1 + 1 + 1 + + 0 + false + 18 + + 0 + 0 + 0 + + 1 + 0 + 0 + true + 0 + 2 + false + + 0 + 0 + + 0 + + 1 + 1 + 1 + + 1 + + 0.105882362 + 0.164705887 + 0.207843155 + + 0 + 0 + false + false + 0 + true + 0 + null + null + null + null + + 0 + 100 + 0 + 0 + + 0 + false + null + 0 + + 0 + 500 + 0 + 25 + + 0 + true + 1 + true + null + 0 + 0 + 0 + 0 + false + + 0 + false + Line1 + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + + + + + + {37B9E8B8-0A75-4BA1-8AC7-90F7F2A33ECF} + + 17996771963439872 + true + controllerAxesys + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + + syncTimed + spawn(function() + _m.events["accessReady"](); + end) + _m.api:Fire({["request"]="setDoorTrigger";["value"]=false;["player"]=player;}); + if (proximityObject) then + proximityObject.Enabled = true; + end + else + spawn(function() + _m.events["accessDenied"](player); + end) + _m.api:Fire({["request"]="onAccessDenied";["player"]=player;["timerLength"]=_m.config["accessDeniedTimer"];}); + if (_m.sound) then + _m.sound.SoundId = _m.sounds["accessDenied"]; + _m.sound:Play(); + end + if (proximityObject) then + proximityObject.Enabled = false; + end + wait(_m.config["accessDeniedTimer"]); + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",1); + if (proximityObject) then + proximityObject.Enabled = true; + end + end + _m.cardScan = false + end +end + +function _m.touchScan(x) + if (x.Parent:FindFirstChild("CardNumber") or x.Parent:FindFirstChild("_axesysCard") and x.Name == "Handle" and x.Parent.ClassName == "Tool") then + local player = game.Players:GetPlayerFromCharacter(x.Parent.Parent); + local uid = tostring(player.UserId); + _m.negotiate(player); + end +end + +function readerSettings() + local newSettings = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="settings"})["data"]; + _m.doorActive = (newSettings["Active"] == "1" and true or false); + _m.doorLocked = (newSettings["Locked"] == "1" and true or false); + _m.api:Fire({["request"]="setDoorTrigger";["value"]=(newSettings["Locked"] == "0" and true or false);["player"]=player;}); + _m.indicatorChange("LEDR",(newSettings["Active"] == "0" and 1 or 0)); + _m.indicatorChange("LEDG",(newSettings["Locked"] == "1" and 0 or 1)); + _m.indicatorChange("LEDS",(newSettings["Active"] == "1" and newSettings["Locked"] == "1" and 1 or 0)); + + if (_m.doorActive and _m.doorLocked) then + spawn(function() + _m.events["accessReady"](); + end) + elseif (_m.doorActive and not _m.doorLocked) then + spawn(function() + _m.events["enabled"](); + end) + elseif (not _m.doorActive) then + spawn(function() + _m.events["disabled"](); + end) + end + + _m.doorTimer = tonumber(newSettings["Timer"]); + wait(60); + readerSettings(); +end + +function _m.indicatorChange(N,S) + for _,x in pairs(_m.model:GetChildren()) do + if (x.Name == N) then + x.BrickColor = BrickColor.new(_m.config["_legacy_indicators"][N][S]) + if (S == 1) then + x.Material = "Neon"; + else + x.Material = "SmoothPlastic"; + end + end + end +end + +function _m.init(data) + wait(2.5) + _m.config = data["config"]; + _m.model = _m.config["model"]; + _m.doorId = _m.config["doorId"]; + _m.sounds = _m.config["sounds"]; + _m.events = _m.config["events"]; + _m.sound = nil; + _m.api = _m.model.API; + + if (_m.model:FindFirstChild("_main")) then + _m.sound = _m.model:FindFirstChild("_main"):FindFirstChild("sound"); + end + if (_m.config["_legacy_indicators"] == nil) then + _m.config["_legacy_indicators"] = { + ["LEDR"]={[0]="Really black",[1]="Really red"}; + ["LEDG"]={[0]="Really black",[1]="Lime green"}; + ["LEDS"]={[0]="Really black",[1]="Institutional white"}; + }; + end + if (_m.events["accessGranted"] == nil) then + _m.events["accessGranted"] = function(player) + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",1); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["accessDenied"] == nil) then + _m.events["accessDenied"] = function(player) + _m.indicatorChange("LEDR",1); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["enabled"] == nil) then + _m.events["enabled"] = function() + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",1); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["disabled"] == nil) then + _m.events["disabled"] = function() + _m.indicatorChange("LEDR",1); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["accessReady"] == nil) then + _m.events["accessReady"] = function() + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",1); + end + end + + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + + local startUp = true; + + repeat + _m.indicatorChange("LEDR",1) + local waitPing = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="ping";}) + if (waitPing["response"]) then + startUp = false; + break; + end + if (waitPing["response"] == "invalid-reader") then + _m.indicatorChange("LEDR",1); + assert(false,"eve axesys (reader): [".._m.doorId.."]: invalid reader!"); + end + until not startUp + + _m.indicatorChange("LEDR",0); + wait(0.2); + _m.indicatorChange("LEDR",1); + wait(0.2); + _m.indicatorChange("LEDG",1); + wait(0.2); + _m.indicatorChange("LEDS",1); + wait(2.5); + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + + if (_m.model:FindFirstChild("_main")) then + _m.model:FindFirstChild("_main").Touched:connect(_m.touchScan); + end + -- new interaction method + _m.api.Event:Connect(function(data) + if (data["request"] == "onScan") then + if (data["isProximityPrompt"]) then + if (data["proximityPrompAccessWithoutCard"]) then + _m.negotiate(data["player"]); + else + for _,v in pairs(data["player"]:FindFirstChild("Backpack"):GetChildren()) do + if (v:FindFirstChild("CardNumber") or v:FindFirstChild("_axesysCard") and v.Parent.ClassName == "Tool") then + _m.negotiate(data["player"], data["proximityObject"]); + return; + end + end + for _,v in pairs(data["player"].Character:GetChildren()) do + if (v:FindFirstChild("CardNumber") or v:FindFirstChild("_axesysCard") and v.Parent.ClassName == "Tool") then + _m.negotiate(data["player"], data["proximityObject"]); + return; + end + end + end + else + _m.negotiate(data["player"]); + end + elseif (data["request"] == "setDoorTrigger") then + _m._legacy_trigger(data["value"]); + end + end) + readerSettings() +end + +return _m +]]> + {4214A8E4-66AA-4E63-99F9-A5806F1460C1} + + 17996771963439872 + true + unitAxesys + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + + + {0216645A-D8E9-4C6D-96F1-A05978DA1E36} + + 17996771963439872 + true + controller + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + + + syncTimed + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], checkUser["scan_data"]); + end) + _m.api:Fire({["request"]="setDoorTrigger";["value"]=false;["player"]=player;}); + if (proximityObject and _m.doorActive) then + proximityObject.Enabled = true; + end + else + if (_m.sound and _m.sounds) then + _m.sound.SoundId = _m.sounds["denied"] or _m.sounds["accessDenied"]; + _m.sound:Play(); + end + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessDenied"] or _m.events["denied"], player, checkUser["scan_data"]); + end) + _m.api:Fire({["request"]="onAccessDenied";["player"]=player;["timerLength"]=_m.config["accessDeniedTimer"];}); + wait(_m.config["accessDeniedTimer"]); + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",1); + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], checkUser["scan_data"]); + end) + if (proximityObject and _m.doorActive) then + proximityObject.Enabled = true; + end + end + _m.cardScan = false + end + end) + if (not s0) then + print(string.format("There was an error while negotiating an access point: %s", m0)) + end +end + +function _m.touchScan(x) + if (_m.findAny(x.Parent, {"CardNumber", "_xcsCard", "XCS"}) and x.Name == "Handle" and x.Parent.ClassName == "Tool") then + local player = game.Players:GetPlayerFromCharacter(x.Parent.Parent); + local uid = tostring(player.UserId); + local cardNumber = nil; + local cardNumberObject = _m.findAny(x.Parent, {"CardNumber", "_xcsCard", "XCS"}); + if (cardNumberObject and (cardNumberObject:IsA("StringValue") or cardNumberObject:IsA("NumberValue") or cardNumberObject:IsA("IntValue"))) then + cardNumber = cardNumberObject.Value; + end + _m.negotiate(player, nil, {cardNumber}); + end +end + +function readerSettings() + local s0, m0 = pcall(function() + spawn(function() + local proximityObject = _m.model:FindFirstChild("xcsInteraction", true); + local newSettings = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="settings"}); + if (newSettings["response"] == "invalid-reader") then + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessDisabled"] or _m.events["disabled"], {}); + end) + assert(false, string.format("Restrafes XCS (reader): [%s]: Invalid reader ID!\n%s", _m.doorId, _m.model:GetFullName())); + end + newSettings = newSettings["data"]; + _m.doorActive = (newSettings["active"]); + _m.doorLocked = (newSettings["armed"]); + _m.api:Fire({["request"]="setDoorTrigger";["value"]=(newSettings["armed"]);["player"]=player;}); + _m.indicatorChange("LEDR",(newSettings["active"] == false and 1 or 0)); + _m.indicatorChange("LEDG",(newSettings["armed"] == true and 0 or 1)); + _m.indicatorChange("LEDS",(newSettings["active"] == true and newSettings["armed"] == true and 1 or 0)); + + if (_m.doorActive and _m.doorLocked) then + if (not _m.cardScan) then + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], newSettings["scanData"]["ready"] or {}); + end) + if (proximityObject and _m.doorActive) then + proximityObject.Enabled = true; + end + end + elseif (_m.doorActive and not _m.doorLocked) then + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["enabled"] or _m.events["disarmed"], newSettings["scanData"]["disarmed"] or {}); + end) + if (proximityObject) then + proximityObject.Enabled = false; + end + elseif (not _m.doorActive) then + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessDisabled"] or _m.events["disabled"], {}); + end) + if (proximityObject) then + proximityObject.Enabled = false; + end + end + _m.doorTimer = tonumber(newSettings["unlockTime"] or 5); + wait(15); + readerSettings(); + end) + end) + if (not s0) then + print(string.format("There was an error while grabbing up-to-date reader settings: %s", m0)) + end +end + +function _m.indicatorChange(N,S) + for _,x in pairs(_m.model:GetChildren()) do + if (x.Name == N) then + x.BrickColor = BrickColor.new(_m.config["_legacy_indicators"][N][S]) + if (S == 1) then + x.Material = "Neon"; + else + x.Material = "SmoothPlastic"; + end + end + end +end + +function _m.remoteUnlock(unlockSeconds) + if (not _m.doorActive or _m.cardScan) then return; end + _m.cardScan = true; + if (_m.sound and _m.sounds) then + _m.sound.SoundId = _m.sounds["granted"] or _m.sounds["accessGranted"]; + _m.sound:Play(); + end + spawn(function() + local proximityObject = _m.model:FindFirstChild("xcsInteraction", true); + if (proximityObject) then + proximityObject.Enabled = false; + end + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessGranted"] or _m.events["granted"], nil, {}); + end) + _m.api:Fire({["request"]="setDoorTrigger";["value"]=true;}); + local time = 0; + local syncTimed = tonumber(unlockSeconds) or _m.doorTimer; + _m.api:Fire({["request"]="onAccessGranted";["timerLength"]=syncTimed;}); + repeat + wait(1); + time += 1; + until time > syncTimed + spawn(function() + _m.cancelEventThread() + _m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], {}); + end) + _m.api:Fire({["request"]="setDoorTrigger";["value"]=false;}); + if (proximityObject and _m.doorActive) then + proximityObject.Enabled = true; + end + _m.cardScan = false; + end) +end + +function _m.init(data) + _m.config = data["config"]; + _m.model = _m.config["model"]; + _m.doorId = _m.config["accessPointId"] or _m.config["doorId"]; + _m.sounds = _m.config["sounds"]; + _m.events = _m.config["events"]; + _m.sound = nil; + _m.api = _m.model.API; + + if (_m.model:FindFirstChild("_main")) then + _m.sound = _m.model:FindFirstChild("_main"):FindFirstChild("sound"); + if (_m.sound and _m.sounds) then + _m.sounds["granted"] = _m.sounds["granted"] or _m.sounds["accessGranted"] or ""; + _m.sounds["denied"] = _m.sounds["denied"] or _m.sounds["accessDenied"] or ""; + _m.sounds["pending"] = _m.sounds["pending"] or _m.sounds["accessPending"] or ""; + end + end + if (_m.config["_legacy_indicators"] == nil) then + _m.config["_legacy_indicators"] = { + ["LEDR"]={[0]="Really black",[1]="Really red"}; + ["LEDG"]={[0]="Really black",[1]="Lime green"}; + ["LEDS"]={[0]="Really black",[1]="Institutional white"}; + }; + end + if (_m.events["accessGranted"] == nil and _m.events["granted"] == nil) then + _m.events["accessGranted"] = function(player) + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",1); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["accessDenied"] == nil and _m.events["denied"] == nil) then + _m.events["accessDenied"] = function(player) + _m.indicatorChange("LEDR",1); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["enabled"] == nil and _m.events["disarmed"] == nil) then + _m.events["enabled"] = function() + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",1); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["accessDisabled"] == nil and _m.events["disabled"] == nil) then + _m.events["disabled"] = function() + _m.indicatorChange("LEDR",1); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + end + end + if (_m.events["accessReady"] == nil and _m.events["ready"] == nil) then + _m.events["accessReady"] = function() + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",1); + end + end + + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + + local startUp = true; + + repeat + _m.indicatorChange("LEDR",1) + local waitPing = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="ping";}) + if (waitPing["response"]) then + startUp = false; + break; + end + if (waitPing["response"] == "invalid-reader") then + _m.indicatorChange("LEDR",1); + assert(false, string.format("Restrafes XCS (reader): [%s]: Invalid reader ID!\n%s", _m.doorId, _m.model:GetFullName())); + end + until not startUp + + _m.indicatorChange("LEDR",0); + wait(0.2); + _m.indicatorChange("LEDR",1); + wait(0.2); + _m.indicatorChange("LEDG",1); + wait(0.2); + _m.indicatorChange("LEDS",1); + wait(2.5); + _m.indicatorChange("LEDR",0); + _m.indicatorChange("LEDG",0); + _m.indicatorChange("LEDS",0); + + if (_m.model:FindFirstChild("_touch")) then + _m.model:FindFirstChild("_touch").Touched:connect(_m.touchScan); + end + + if (_m.model:FindFirstChild("_main")) then + _m.model:FindFirstChild("_main").Touched:connect(_m.touchScan); + end + -- new interaction method + _m.api.Event:Connect(function(data) + if (data["request"] == "onScan") then + local cardNumbers = {}; + for _,v in pairs(data["player"]:FindFirstChild("Backpack"):GetChildren()) do + if (v:FindFirstChild("CardNumber") and v.ClassName == "Tool") then + table.insert(cardNumbers, v:FindFirstChild("CardNumber").Value); + end + end + for _,v in pairs(data["player"].Character:GetChildren()) do + if (v:FindFirstChild("CardNumber") and v.ClassName == "Tool") then + table.insert(cardNumbers, v:FindFirstChild("CardNumber").Value); + end + end + if (data["isProximityPrompt"]) then + if (data["proximityPromptAccessWithoutCard"]) then + _m.negotiate(data["player"], data["proximityObject"], cardNumbers); + end + else + _m.negotiate(data["player"], nil, cardNumbers); + end + elseif (data["request"] == "setDoorTrigger") then + _m._legacy_trigger(data["value"]); + end + end) + + repeat wait() until _G.xcsRemoteUnlock ~= nil; + _G.xcsRemoteUnlock.Event:Connect(function(accessPointId, payload) + if (accessPointId ~= _m.doorId) then return; end + local unlockSeconds = nil; + if (type(payload) == "table") then + unlockSeconds = payload["unlockTime"]; + end + _m.remoteUnlock(unlockSeconds); + end) + + readerSettings() +end + +return _m +]]> + {B5B5954E-557A-4C96-9012-20855D9E30F8} + + 17996771963439872 + true + unit + -1 + yuZpQdnvvUBOTYh1jqZ2cA== + + + + 0 + false API -1 - + yuZpQdnvvUBOTYh1jqZ2cA== - - false - - LICENSE - 0 - {78B78716-EAE9-4F7E-AC3F-B6940EE03A8A} SOFTWARE. --]]]]> + false + + 0 + {78B78716-EAE9-4F7E-AC3F-B6940EE03A8A} + + 0 + false + LICENSE -1 - + yuZpQdnvvUBOTYh1jqZ2cA== - Q1NHUEhTBwAAAAJaE2g6xX8htgh5CLa35lE2kLIwOADgza7MNj6rguPgNh09xCwHQ0s4EAAA -AAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAACAPyoAAAAEAAAA+e+4Pexlhr7N -zMy8SczMPexlhr7NzMy8c424Pexlhr7mO8q8+e+4PV5nZr7NzMy8SczMPV5nZr7NzMy8SczM -Pexlhr7NzMw8m2y4Pexlhr4XWsm8R3O4PV5nZr5pjcm8SczMPV5nZr7NzMw8cFK4Pexlhr7N -zMw8cFK4Pexlhr4+rLi822K4PV5nZr6CHMm8cFK4PV5nZr7NzMw8cFK4PV5nZr5i+J28SAAA -AAAAAAABAAAABQAAAAAAAAAFAAAACQAAAAAAAAAJAAAACgAAAAAAAAAKAAAABgAAAAAAAAAG -AAAAAgAAAAAAAAACAAAABwAAAAAAAAAHAAAAAwAAAAAAAAADAAAABAAAAAAAAAAEAAAAAQAA -AAEAAAAEAAAACAAAAAEAAAAIAAAABQAAAAIAAAAGAAAACwAAAAIAAAALAAAABwAAAAMAAAAH -AAAACwAAAAMAAAALAAAADQAAAAMAAAANAAAADAAAAAMAAAAMAAAACAAAAAMAAAAIAAAABAAA -AAUAAAAIAAAADAAAAAUAAAAMAAAACQAAAAYAAAAKAAAACwAAAAkAAAAMAAAADQAAAAkAAAAN -AAAACgAAAAoAAAANAAAACwAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAA -AAAAgD8qAAAABAAAAEnMzL1mZmY+zczMvEnMzL1mZoY+zczMvPnvuL1mZmY+zczMvEnMzL1m -ZmY+zczMPPnvuL1mZoY+zczMvEnMzL1mZoY+zczMPEdzuL1mZmY+aY3JvHBSuL1mZmY+zczM -PHONuL1mZoY+5jvKvHBSuL1mZoY+zczMPNtiuL1mZmY+ghzJvHBSuL1mZmY+YvidvJtsuL1m -ZoY+F1rJvHBSuL1mZoY+Pqy4vEgAAAAAAAAAAQAAAAQAAAAAAAAABAAAAAIAAAAAAAAAAgAA -AAYAAAAAAAAABgAAAAoAAAAAAAAACgAAAAsAAAAAAAAACwAAAAcAAAAAAAAABwAAAAMAAAAA -AAAAAwAAAAUAAAAAAAAABQAAAAEAAAABAAAABQAAAAkAAAABAAAACQAAAA0AAAABAAAADQAA -AAwAAAABAAAADAAAAAgAAAABAAAACAAAAAQAAAACAAAABAAAAAgAAAACAAAACAAAAAYAAAAD -AAAABwAAAAkAAAADAAAACQAAAAUAAAAGAAAACAAAAAwAAAAGAAAADAAAAAoAAAAHAAAACwAA -AA0AAAAHAAAADQAAAAkAAAAKAAAADQAAAAsAAAAKAAAADAAAAA0AAAAQAAAAAAAAAAAAAAAA -AAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAIA/IQAAAAQAAAD577g9XmdmPs3MzLxJzMw9Xmdm -Ps3MzLwK37g9XmdmPuVbzLz577g97GWGPs3MzLxJzMw97GWGPs3MzLxJzMw9XmdmPs3MzDxw -Urg9XmdmPpqryLxwUrg97GWGPpqryLxJzMw97GWGPs3MzDxwUrg9XmdmPs3MzDxwUrg97GWG -Ps3MzDw2AAAAAAAAAAEAAAAFAAAAAAAAAAUAAAAJAAAAAAAAAAkAAAAGAAAAAAAAAAYAAAAC -AAAAAAAAAAIAAAADAAAAAAAAAAMAAAAEAAAAAAAAAAQAAAABAAAAAQAAAAQAAAAIAAAAAQAA -AAgAAAAFAAAAAgAAAAYAAAAHAAAAAgAAAAcAAAADAAAAAwAAAAcAAAAKAAAAAwAAAAoAAAAI -AAAAAwAAAAgAAAAEAAAABQAAAAgAAAAKAAAABQAAAAoAAAAJAAAABgAAAAkAAAAKAAAABgAA -AAoAAAAHAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAACAPyEAAAAE -AAAASczMvWZmhr7NzMy8SczMvWZmZr7NzMy8+e+4vWZmhr7NzMy8SczMvWZmhr7NzMw8+e+4 -vWZmZr7NzMy8SczMvWZmZr7NzMw8Ct+4vWZmZr7lW8y8cFK4vWZmhr6aq8i8cFK4vWZmhr7N -zMw8cFK4vWZmZr7NzMw8cFK4vWZmZr6aq8i8NgAAAAAAAAABAAAABAAAAAAAAAAEAAAAAgAA -AAAAAAACAAAABwAAAAAAAAAHAAAACAAAAAAAAAAIAAAAAwAAAAAAAAADAAAABQAAAAAAAAAF -AAAAAQAAAAEAAAAFAAAACQAAAAEAAAAJAAAACgAAAAEAAAAKAAAABgAAAAEAAAAGAAAABAAA -AAIAAAAEAAAABgAAAAIAAAAGAAAABwAAAAMAAAAIAAAACQAAAAMAAAAJAAAABQAAAAYAAAAK -AAAABwAAAAcAAAAKAAAACQAAAAcAAAAJAAAACAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAA -AAAAAAAAAAAAAAAAAAAAgD8nAAAABAAAAM3MTL16mZm+zczMvM3MTL16mZm+zczMPM3MTL0w -eJi+zczMvAAApLZ6mZm+zczMvM3MTL3rUpe+zczMPAAApLZ6mZm+zczMPM3MTL1Oi5S+sVrK -vKvHTL1lopS+zczMvAAAADJlopS+zczMvKvHTL3iepS+zczMPAAApLbiepS+zczMPKvHTL3i -epS+mqvIvAAApLbiepS+mqvIvEIAAAAAAAAAAQAAAAQAAAAAAAAABAAAAAYAAAAAAAAABgAA -AAIAAAAAAAAAAgAAAAcAAAAAAAAABwAAAAgAAAAAAAAACAAAAAMAAAAAAAAAAwAAAAUAAAAA -AAAABQAAAAEAAAABAAAABQAAAAoAAAABAAAACgAAAAkAAAABAAAACQAAAAQAAAACAAAABgAA -AAcAAAADAAAACAAAAAUAAAAEAAAACQAAAAYAAAAFAAAACAAAAAoAAAAGAAAACQAAAAsAAAAG -AAAACwAAAAcAAAAHAAAACwAAAAwAAAAHAAAADAAAAAgAAAAIAAAADAAAAAoAAAAJAAAACgAA -AAwAAAAJAAAADAAAAAsAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA -AIA/JAAAAAQAAACsx0y9ZaKUPs3MzLzOzEy94nqUPpqryLzOzEy994KUPiaDybysx0y9epmZ -Ps3MzLwAAAAAZaKUPs3MzLzOzEy94nqUPknghrsAAAAA4nqUPpqryLysx0y9epmZPs3MzDwA -AAAAepmZPs3MzLysx0y94nqUPs3MzDwAAAAA4nqUPs3MzDwAAAAAepmZPs3MzDw8AAAAAAAA -AAEAAAACAAAAAAAAAAIAAAADAAAAAAAAAAMAAAAIAAAAAAAAAAgAAAAEAAAAAAAAAAQAAAAG -AAAAAAAAAAYAAAABAAAAAQAAAAUAAAACAAAAAQAAAAYAAAAKAAAAAQAAAAoAAAAJAAAAAQAA -AAkAAAAFAAAAAgAAAAUAAAAHAAAAAgAAAAcAAAADAAAAAwAAAAcAAAALAAAAAwAAAAsAAAAI -AAAABAAAAAgAAAALAAAABAAAAAsAAAAKAAAABAAAAAoAAAAGAAAABQAAAAkAAAAHAAAABwAA -AAkAAAAKAAAABwAAAAoAAAALAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAA -AAAAAACAPyoAAAAEAAAAAAAAAHqZmb7NzMy8AAAAAHqZmb7NzMw8AAAAAKsOl77NzMy8rMdM -PXqZmb7NzMy8AAAAAOJ6lL7NzMw8rMdMPXqZmb7NzMw8AAAAAKSOlL7OrMq8AECkNmWilL7N -zMy8rMdMPWWilL7NzMy8zsxMPeJ6lL6aq8i8zsxMPTyBlb7NzMw8AAAAAOJ6lL6aq8i8rMdM -PeJ6lL7NzMw8zsxMPeJ6lL5J4Ia7SAAAAAAAAAABAAAABAAAAAAAAAAEAAAACwAAAAAAAAAL -AAAABgAAAAAAAAAGAAAAAgAAAAAAAAACAAAABwAAAAAAAAAHAAAACAAAAAAAAAAIAAAAAwAA -AAAAAAADAAAABQAAAAAAAAAFAAAAAQAAAAEAAAAFAAAACgAAAAEAAAAKAAAADAAAAAEAAAAM -AAAABAAAAAIAAAAGAAAABwAAAAMAAAAIAAAACQAAAAMAAAAJAAAACgAAAAMAAAAKAAAABQAA -AAQAAAAMAAAADQAAAAQAAAANAAAACQAAAAQAAAAJAAAACwAAAAYAAAALAAAABwAAAAcAAAAL -AAAACQAAAAcAAAAJAAAACAAAAAkAAAANAAAACgAAAAoAAAANAAAADAAAABAAAAAAAAAAAAAA -AAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAgD8kAAAABAAAAAAAAABlopQ+zczMvAAAAAB6 -mZk+zczMvKzHTD1lopQ+zczMvAAAAADiepQ+mqvIvAAAAAB6mZk+zczMPKzHTD16mZk+zczM -vM7MTD33gpQ+JoPJvM7MTD3iepQ+mqvIvAAAAADiepQ+zczMPKzHTD16mZk+zczMPM7MTD24 -lpY+zczMPM7MTD3iepQ+zczMPDwAAAAAAAAAAQAAAAUAAAAAAAAABQAAAAIAAAAAAAAAAgAA -AAcAAAAAAAAABwAAAAMAAAAAAAAAAwAAAAgAAAAAAAAACAAAAAQAAAAAAAAABAAAAAEAAAAB -AAAABAAAAAkAAAABAAAACQAAAAUAAAACAAAABQAAAAYAAAACAAAABgAAAAcAAAADAAAABwAA -AAsAAAADAAAACwAAAAgAAAAEAAAACAAAAAsAAAAEAAAACwAAAAoAAAAEAAAACgAAAAkAAAAF -AAAACQAAAAoAAAAFAAAACgAAAAYAAAAGAAAACgAAAAsAAAAGAAAACwAAAAcAAAAQAAAAAAAA -AAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAIA/KgAAAAQAAABwUri9emRmPs3MzDxJ -zMy9emRmPs3MzDxwUri9h5sZPs3MzDxwUri9emRmPmL4nbxJzMy9emRmPs3MzLxJzMy9h5sZ -Ps3MzDz577i9mpkZPs3MzLxwUri9h5sZPpqryLzbYri9emRmPoIcybz577i9emRmPs3MzLxJ -zMy9h5sZPs3MzLxoYMK9mpkZPs3MzLzld7i9h5sZPjSsybxHc7i9emRmPmmNybxIAAAAAAAA -AAEAAAAFAAAAAAAAAAUAAAACAAAAAAAAAAIAAAAHAAAAAAAAAAcAAAADAAAAAAAAAAMAAAAI -AAAAAAAAAAgAAAANAAAAAAAAAA0AAAAJAAAAAAAAAAkAAAAEAAAAAAAAAAQAAAABAAAAAQAA -AAQAAAAKAAAAAQAAAAoAAAAFAAAAAgAAAAUAAAALAAAAAgAAAAsAAAAGAAAAAgAAAAYAAAAH -AAAAAwAAAAcAAAAIAAAABAAAAAkAAAAGAAAABAAAAAYAAAALAAAABAAAAAsAAAAKAAAABQAA -AAoAAAALAAAABgAAAAkAAAANAAAABgAAAA0AAAAMAAAABgAAAAwAAAAHAAAABwAAAAwAAAAN -AAAABwAAAA0AAAAIAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAACA -PycAAAAEAAAAcFK4vYebGb7NzMw8SczMvYebGb7NzMw8cFK4vXpkZr7NzMw8cFK4vYebGb6a -q8i8DqW4vZqZGb7c1cq8g8q4vZqZGb4zzMu8+e+4vZqZGb7NzMy8SczMvYebGb7NzMy8SczM -vXpkZr7NzMw8cFK4vXpkZr6aq8i8Ct+4vXpkZr7lW8y8+e+4vXpkZr7NzMy8SczMvXpkZr7N -zMy8QgAAAAAAAAABAAAACAAAAAAAAAAIAAAAAgAAAAAAAAACAAAACQAAAAAAAAAJAAAAAwAA -AAAAAAADAAAABAAAAAAAAAAEAAAAAQAAAAEAAAAEAAAABQAAAAEAAAAFAAAABgAAAAEAAAAG -AAAABwAAAAEAAAAHAAAADAAAAAEAAAAMAAAACAAAAAIAAAAIAAAADAAAAAIAAAAMAAAACwAA -AAIAAAALAAAACgAAAAIAAAAKAAAACQAAAAMAAAAGAAAABAAAAAMAAAAJAAAACgAAAAMAAAAK -AAAABgAAAAQAAAAGAAAABQAAAAYAAAAKAAAACwAAAAYAAAALAAAADAAAAAYAAAAMAAAABwAA -ABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAgD8nAAAABAAAAEnMzD2G -mxm+zczMPHBSuD2Gmxm+zczMPEnMzD1mZma+zczMPEnMzD2Gmxm+zczMvHBSuD2Gmxm+mqvI -vHBSuD1mZma+zczMPEnMzD1mZma+zczMvPnvuD2Gmxm+zczMvOV3uD2Gmxm+NKzJvEdzuD1m -Zma+aY3JvNtiuD1mZma+ghzJvHBSuD1mZma+YvidvPnvuD1mZma+zczMvEIAAAAAAAAAAQAA -AAUAAAAAAAAABQAAAAIAAAAAAAAAAgAAAAYAAAAAAAAABgAAAAMAAAAAAAAAAwAAAAcAAAAA -AAAABwAAAAgAAAAAAAAACAAAAAQAAAAAAAAABAAAAAEAAAABAAAABAAAAAsAAAABAAAACwAA -AAUAAAACAAAABQAAAAsAAAACAAAACwAAAAoAAAACAAAACgAAAAkAAAACAAAACQAAAAwAAAAC -AAAADAAAAAYAAAADAAAABgAAAAwAAAADAAAADAAAAAcAAAAEAAAACAAAAAkAAAAEAAAACQAA -AAoAAAAEAAAACgAAAAsAAAAHAAAADAAAAAkAAAAHAAAACQAAAAgAAAAQAAAAAAAAAAAAAAAA -AAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAIA/IQAAAAQAAABJzMw9ZmZmPs3MzDxwUrg9ZmZm -Ps3MzDxJzMw9hpsZPs3MzDxJzMw9ZmZmPs3MzLxwUrg9ZmZmPpqryLxwUrg9hpsZPs3MzDxJ -zMw9hpsZPs3MzLz577g9ZmZmPs3MzLwK37g9ZmZmPuVbzLxwUrg9hpsZPpqryLz577g9hpsZ -Ps3MzLw2AAAAAAAAAAEAAAAFAAAAAAAAAAUAAAACAAAAAAAAAAIAAAAGAAAAAAAAAAYAAAAD -AAAAAAAAAAMAAAAHAAAAAAAAAAcAAAAIAAAAAAAAAAgAAAAEAAAAAAAAAAQAAAABAAAAAQAA -AAQAAAAJAAAAAQAAAAkAAAAFAAAAAgAAAAUAAAAJAAAAAgAAAAkAAAAKAAAAAgAAAAoAAAAG -AAAAAwAAAAYAAAAKAAAAAwAAAAoAAAAHAAAABAAAAAgAAAAJAAAABwAAAAoAAAAIAAAACAAA -AAoAAAAJAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAACAP1cAAAAE -AAAArMfMPS16lD7NzMw8m2PMPRx6lT7NzMw8rMfMPeJmhj7NzMw8rMfMPS16lD7NzMy8+jnL -PfFvlj7NzMw8m2PMPRx6lT7NzMy80U24PeJmhj7NzMw8rMfMPeJmhj7NzMy8DFXJPYhSlz7N -zMw8+jnLPfFvlj7NzMy88NFMPS16lD7NzMw80U24PeJmhj6aq8i85ey4PeJmhj7NzMy8WMnG -PTgZmD7NzMw8DFXJPYhSlz7NzMy8z8xMPZqZmT7NzMw8z8xMPXKZlD796su88NFMPS16lD6a -q8i8z8xMPaChlD7NzMy8hrDDPdO7mD7NzMw8WMnGPTgZmD7NzMy80U24PZqZmT7NzMw8z8xM -PZqZmT7NzMy8PiTAPQ41mT7NzMw8hrDDPdO7mD7NzMy8jk28PaB/mT7NzMw80U24PZqZmT7N -zMy8PiTAPQ41mT7NzMy8jk28PaB/mT7NzMy8ogAAAAAAAAABAAAABAAAAAAAAAAEAAAACAAA -AAAAAAAIAAAADQAAAAAAAAANAAAAEwAAAAAAAAATAAAAFwAAAAAAAAAXAAAAGQAAAAAAAAAZ -AAAAFQAAAAAAAAAVAAAADwAAAAAAAAAPAAAACgAAAAAAAAAKAAAABgAAAAAAAAAGAAAAAgAA -AAAAAAACAAAABwAAAAAAAAAHAAAAAwAAAAAAAAADAAAABQAAAAAAAAAFAAAAAQAAAAEAAAAF -AAAACQAAAAEAAAAJAAAABAAAAAIAAAAGAAAACwAAAAIAAAALAAAADAAAAAIAAAAMAAAABwAA -AAMAAAAHAAAADAAAAAMAAAAMAAAAEgAAAAMAAAASAAAAFgAAAAMAAAAWAAAAGgAAAAMAAAAa -AAAAHAAAAAMAAAAcAAAAGwAAAAMAAAAbAAAAGAAAAAMAAAAYAAAAFAAAAAMAAAAUAAAADgAA -AAMAAAAOAAAACQAAAAMAAAAJAAAABQAAAAQAAAAJAAAADgAAAAQAAAAOAAAACAAAAAYAAAAK -AAAAEQAAAAYAAAARAAAACwAAAAgAAAAOAAAAFAAAAAgAAAAUAAAADQAAAAoAAAAPAAAAEAAA -AAoAAAAQAAAAEQAAAAsAAAARAAAADAAAAAwAAAARAAAAEgAAAA0AAAAUAAAAGAAAAA0AAAAY -AAAAEwAAAA8AAAAVAAAAGgAAAA8AAAAaAAAAFgAAAA8AAAAWAAAAEgAAAA8AAAASAAAAEAAA -ABAAAAASAAAAEQAAABMAAAAYAAAAGwAAABMAAAAbAAAAFwAAABUAAAAZAAAAHAAAABUAAAAc -AAAAGgAAABcAAAAbAAAAHAAAABcAAAAcAAAAGQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAA -AAAAAAAAAAAAAAAAAAAAgD9dAAAABAAAADzKzD3iZoa+zczMPNBNuD3iZoa+zczMPDzKzD0t -epS+zczMPDzKzD3iZoa+zczMvNBNuD3iZoa+Pqy4vO7RTD0tepS+zczMPJpjzD0cepW+zczM -PDzKzD0tepS+zczMvOTsuD3iZoa+zczMvBDXTD0tepS+mqvIvApquD3iZoa+F1rJvO7RTD2a -mZm+zczMPO7RTD1FkZS+chPLvPo5yz3xb5a+zczMPJpjzD0cepW+zczMvO7RTD2goZS+zczM -vNSIuD3iZoa+5jvKvNBNuD2amZm+zczMPO7RTD2amZm+zczMvAxVyT2IUpe+zczMPPo5yz3x -b5a+zczMvI5NvD2gf5m+zczMPNBNuD2amZm+zczMvFjJxj04GZi+zczMPAxVyT2IUpe+zczM -vD4kwD0ONZm+zczMPI5NvD2gf5m+zczMvIWwwz3Tu5i+zczMPFjJxj04GZi+zczMvD4kwD0O -NZm+zczMvIWwwz3Tu5i+zczMvK4AAAAAAAAAAQAAAAUAAAAAAAAABQAAAAsAAAAAAAAACwAA -ABEAAAAAAAAAEQAAABUAAAAAAAAAFQAAABkAAAAAAAAAGQAAABsAAAAAAAAAGwAAABcAAAAA -AAAAFwAAABMAAAAAAAAAEwAAAA0AAAAAAAAADQAAAAYAAAAAAAAABgAAAAIAAAAAAAAAAgAA -AAcAAAAAAAAABwAAAAMAAAAAAAAAAwAAAAgAAAAAAAAACAAAABAAAAAAAAAAEAAAAAoAAAAA -AAAACgAAAAQAAAAAAAAABAAAAAEAAAABAAAABAAAAAUAAAACAAAABgAAAA4AAAACAAAADgAA -AAcAAAADAAAABwAAAA4AAAADAAAADgAAABQAAAADAAAAFAAAABgAAAADAAAAGAAAABwAAAAD -AAAAHAAAAB4AAAADAAAAHgAAAB0AAAADAAAAHQAAABoAAAADAAAAGgAAABYAAAADAAAAFgAA -ABIAAAADAAAAEgAAAA8AAAADAAAADwAAAAgAAAAEAAAACQAAAAUAAAAEAAAACgAAAAkAAAAF -AAAACQAAAAwAAAAFAAAADAAAAA8AAAAFAAAADwAAABIAAAAFAAAAEgAAAAsAAAAGAAAADQAA -ABQAAAAGAAAAFAAAAA4AAAAIAAAADwAAAAwAAAAIAAAADAAAAAkAAAAIAAAACQAAABAAAAAJ -AAAACgAAABAAAAALAAAAEgAAABYAAAALAAAAFgAAABEAAAANAAAAEwAAABgAAAANAAAAGAAA -ABQAAAARAAAAFgAAABoAAAARAAAAGgAAABUAAAATAAAAFwAAABwAAAATAAAAHAAAABgAAAAV -AAAAGgAAAB0AAAAVAAAAHQAAABkAAAAXAAAAGwAAAB4AAAAXAAAAHgAAABwAAAAZAAAAHQAA -AB4AAAAZAAAAHgAAABsAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA -AIA/YAAAAAQAAADPzEy9mpmZPs3MzDzRTbi9mpmZPs3MzDzPzEy9DHqUPs3MzDzPzEy9mpmZ -Ps3MzLyOTby9n3+ZPs3MzDzRTbi9mpmZPs3MzLzRTbi9ZmaGPs3MzDzPzEy9DHqUPqxjarzP -zEy9+6GUPs3MzLw+JMC9hzWZPs3MzDyOTby9n3+ZPs3MzLysx8y9ZmaGPs3MzDzRTbi9ZmaG -Pj6suLzw0Uy9DHqUPpqryLzPzEy9UpmUPv3qy7zl7Li9ZmaGPs3MzLyGsMO9zbuYPs3MzDw+ -JMC9hzWZPs3MzLysx8y9DHqUPs3MzDysx8y9ZmaGPs3MzLwKari9ZmaGPhdaybzUiLi9ZmaG -PuY7yrxYyca9LhmYPs3MzDyGsMO9zbuYPs3MzLybY8y9fXqVPs3MzDysx8y9DHqUPs3MzLwM -Vcm99VKXPs3MzDxYyca9LhmYPs3MzLz6Ocu93W+WPs3MzDybY8y9fXqVPs3MzLwMVcm99VKX -Ps3MzLz6Ocu93W+WPs3MzLy0AAAAAAAAAAEAAAAEAAAAAAAAAAQAAAAJAAAAAAAAAAkAAAAQ -AAAAAAAAABAAAAAWAAAAAAAAABYAAAAaAAAAAAAAABoAAAAcAAAAAAAAABwAAAAYAAAAAAAA -ABgAAAASAAAAAAAAABIAAAALAAAAAAAAAAsAAAAGAAAAAAAAAAYAAAACAAAAAAAAAAIAAAAH -AAAAAAAAAAcAAAAOAAAAAAAAAA4AAAAIAAAAAAAAAAgAAAADAAAAAAAAAAMAAAAFAAAAAAAA -AAUAAAABAAAAAQAAAAUAAAAKAAAAAQAAAAoAAAAEAAAAAgAAAAYAAAAMAAAAAgAAAAwAAAAH -AAAAAwAAAAgAAAAPAAAAAwAAAA8AAAATAAAAAwAAABMAAAAZAAAAAwAAABkAAAAdAAAAAwAA -AB0AAAAfAAAAAwAAAB8AAAAeAAAAAwAAAB4AAAAbAAAAAwAAABsAAAAXAAAAAwAAABcAAAAR -AAAAAwAAABEAAAAKAAAAAwAAAAoAAAAFAAAABAAAAAoAAAARAAAABAAAABEAAAAJAAAABgAA -AAsAAAATAAAABgAAABMAAAAPAAAABgAAAA8AAAAVAAAABgAAABUAAAAUAAAABgAAABQAAAAM -AAAABwAAAAwAAAANAAAABwAAAA0AAAAOAAAACAAAAA4AAAAPAAAACQAAABEAAAAXAAAACQAA -ABcAAAAQAAAACwAAABIAAAAZAAAACwAAABkAAAATAAAADAAAABQAAAANAAAADQAAABQAAAAV -AAAADQAAABUAAAAPAAAADQAAAA8AAAAOAAAAEAAAABcAAAAbAAAAEAAAABsAAAAWAAAAEgAA -ABgAAAAdAAAAEgAAAB0AAAAZAAAAFgAAABsAAAAeAAAAFgAAAB4AAAAaAAAAGAAAABwAAAAf -AAAAGAAAAB8AAAAdAAAAGgAAAB4AAAAfAAAAGgAAAB8AAAAcAAAAEAAAAAAAAAAAAAAAAAAA -AAAAAAAQAAAAAAAAAAAAAAAAAAAAAACAP1QAAAAEAAAA7tFMvQx6lL7NzMw87tFMvZqZmb7N -zMw87tFMvQx6lL6aq8i80E24vWZmhr7NzMw80E24vZqZmb7NzMw87tFMvZqZmb7NzMy87tFM -vfuhlL7NzMy85Oy4vWZmhr7NzMy80E24vWZmhr6aq8i8PMrMvWZmhr7NzMw8jk28vZ9/mb7N -zMw80E24vZqZmb7NzMy8PMrMvWZmhr7NzMy8PMrMvQx6lL7NzMw8PiTAvYc1mb7NzMw8jk28 -vZ9/mb7NzMy8PMrMvQx6lL7NzMy8mmPMvX16lb7NzMw8hbDDvc27mL7NzMw8PiTAvYc1mb7N -zMy8mmPMvX16lb7NzMy8+jnLvd1vlr7NzMw8WMnGvS4ZmL7NzMw8hbDDvc27mL7NzMy8+jnL -vd1vlr7NzMy8DFXJvfVSl77NzMw8WMnGvS4ZmL7NzMy8DFXJvfVSl77NzMy8nAAAAAAAAAAB -AAAABQAAAAAAAAAFAAAABgAAAAAAAAAGAAAAAgAAAAAAAAACAAAACAAAAAAAAAAIAAAAAwAA -AAAAAAADAAAACQAAAAAAAAAJAAAADQAAAAAAAAANAAAAEQAAAAAAAAARAAAAFQAAAAAAAAAV -AAAAGQAAAAAAAAAZAAAAFgAAAAAAAAAWAAAAEgAAAAAAAAASAAAADgAAAAAAAAAOAAAACgAA -AAAAAAAKAAAABAAAAAAAAAAEAAAAAQAAAAEAAAAEAAAACwAAAAEAAAALAAAABQAAAAIAAAAG -AAAABwAAAAIAAAAHAAAACAAAAAMAAAAIAAAABwAAAAMAAAAHAAAADAAAAAMAAAAMAAAACQAA -AAQAAAAKAAAADwAAAAQAAAAPAAAACwAAAAUAAAALAAAADwAAAAUAAAAPAAAAEwAAAAUAAAAT -AAAAFwAAAAUAAAAXAAAAGgAAAAUAAAAaAAAAGwAAAAUAAAAbAAAAGAAAAAUAAAAYAAAAFAAA -AAUAAAAUAAAAEAAAAAUAAAAQAAAADAAAAAUAAAAMAAAABwAAAAUAAAAHAAAABgAAAAkAAAAM -AAAAEAAAAAkAAAAQAAAADQAAAAoAAAAOAAAAEwAAAAoAAAATAAAADwAAAA0AAAAQAAAAFAAA -AA0AAAAUAAAAEQAAAA4AAAASAAAAFwAAAA4AAAAXAAAAEwAAABEAAAAUAAAAGAAAABEAAAAY -AAAAFQAAABIAAAAWAAAAGgAAABIAAAAaAAAAFwAAABUAAAAYAAAAGwAAABUAAAAbAAAAGQAA -ABYAAAAZAAAAGwAAABYAAAAbAAAAGgAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAA -AAAAAAAAAAAAgD8kAAAABAAAAEnMzD3ClRk+zczMPDafvT2bmRk+zczMvA6luD2bmRk+3NXK -vHBSuD3ClRk+zczMPEnMzD0AAAAAzczMPEnMzD3ClRk+zczMvPnvuD2bmRk+zczMvHBSuD3C -lRk+mqvIvHBSuD0AAAAAzczMPEnMzD0AAAAAzczMvPnvuD0AAAAAzczMvHBSuD0AAAAAmqvI -vDwAAAAAAAAAAQAAAAIAAAAAAAAAAgAAAAMAAAAAAAAAAwAAAAgAAAAAAAAACAAAAAQAAAAA -AAAABAAAAAkAAAAAAAAACQAAAAUAAAAAAAAABQAAAAEAAAABAAAABgAAAAIAAAABAAAABQAA -AAkAAAABAAAACQAAAAoAAAABAAAACgAAAAYAAAACAAAABgAAAAcAAAACAAAABwAAAAMAAAAD -AAAABwAAAAsAAAADAAAACwAAAAgAAAAEAAAACAAAAAsAAAAEAAAACwAAAAoAAAAEAAAACgAA -AAkAAAAGAAAACgAAAAsAAAAGAAAACwAAAAcAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA -AAAAAAAAAAAAAAAAAIA/HgAAAAQAAABwUri9AAAAAM3MzDxwUri9AAAAAJqryLxJzMy9AAAA -AM3MzDxwUri9mpkZvs3MzDz577i9AAAAAM3MzLxwUri9mpkZvpqryLxJzMy9AAAAAM3MzLxJ -zMy9mpkZvs3MzDz577i9mpkZvs3MzLxJzMy9mpkZvs3MzLwwAAAAAAAAAAEAAAAEAAAAAAAA -AAQAAAAGAAAAAAAAAAYAAAACAAAAAAAAAAIAAAAHAAAAAAAAAAcAAAADAAAAAAAAAAMAAAAF -AAAAAAAAAAUAAAABAAAAAQAAAAUAAAAIAAAAAQAAAAgAAAAEAAAAAgAAAAYAAAAJAAAAAgAA -AAkAAAAHAAAAAwAAAAcAAAAJAAAAAwAAAAkAAAAIAAAAAwAAAAgAAAAFAAAABAAAAAgAAAAJ -AAAABAAAAAkAAAAGAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAACA -PyEAAAAEAAAAcFK4vZqZGT7NzMw8SczMvZqZGT7NzMw8cFK4vQAAAADNzMw8cFK4vZqZGT6a -q8i8SczMvZqZGT7NzMy8SczMvQAAAADNzMw8cFK4vQAAAACaq8i85Xe4vZqZGT40rMm8SczM -vQAAAADNzMy8+e+4vZqZGT7NzMy8+e+4vQAAAADNzMy8NgAAAAAAAAABAAAABQAAAAAAAAAF -AAAAAgAAAAAAAAACAAAABgAAAAAAAAAGAAAAAwAAAAAAAAADAAAABwAAAAAAAAAHAAAACQAA -AAAAAAAJAAAABAAAAAAAAAAEAAAAAQAAAAEAAAAEAAAACAAAAAEAAAAIAAAABQAAAAIAAAAF -AAAACAAAAAIAAAAIAAAACgAAAAIAAAAKAAAABgAAAAMAAAAGAAAABwAAAAQAAAAJAAAACgAA -AAQAAAAKAAAACAAAAAYAAAAKAAAABwAAAAcAAAAKAAAACQAAABAAAAAAAAAAAAAAAAAAAAAA -AAAAEAAAAAAAAAAAAAAAAAAAAAAAgD8hAAAABAAAAEnMzD0AAAAAzczMPHBSuD0AAAAAzczM -PEnMzD2amRm+zczMPEnMzD0AAAAAzczMvHBSuD0AAAAAmqvIvHBSuD2amRm+zczMPEnMzD2a -mRm+zczMvPnvuD0AAAAAzczMvOV3uD2amRm+NKzJvHBSuD2amRm+mqvIvPnvuD2amRm+zczM -vDYAAAAAAAAAAQAAAAUAAAAAAAAABQAAAAIAAAAAAAAAAgAAAAYAAAAAAAAABgAAAAMAAAAA -AAAAAwAAAAcAAAAAAAAABwAAAAQAAAAAAAAABAAAAAEAAAABAAAABAAAAAkAAAABAAAACQAA -AAUAAAACAAAABQAAAAkAAAACAAAACQAAAAgAAAACAAAACAAAAAoAAAACAAAACgAAAAYAAAAD -AAAABgAAAAoAAAADAAAACgAAAAcAAAAEAAAABwAAAAgAAAAEAAAACAAAAAkAAAAHAAAACgAA -AAgAAAA= + Q1NHUEhTCAAAAAIAKLUv/WDEDW0mANQiEgAAACsBAAAOAgAAI0IACgQAAIQEDgAA7FG4veF6 +lL6srG28PT48bcstFNduQeHrAsVdLZS7tgsFb1sUbrd1yl3XLVuU2y1RLRS3QGkBbtJSbbXr +um7bcAHgrqVVJ1UC7Vmqb92ivK5yu0W5AC0FgGpVVbW3Ps+q3tqtXaBaABRVVa0WujerqlvX +bu3bckHBC4r3LoJyu3YtrdKWgOJunbZVZrm/AwAAsEg4vfzrgbztUTi9EM6MRfeTad0/Xezi +ehQ+rJg5YEO2CEa39Z9lCeW2N6ZovD0+krd3QGO8QhG4+ktfhUL3k+GamTlSuF48Dj1uEq49 +8nmUzxCwPdttBvmtPc72kyy6Xgb/sT25Rxs2sT3hzTKrrz2k62Cesj2EnRLdsz1pXAnitD1a +DbihtT00spLOGbY9i1C545G4POqRHR+4PahpkgGJtz1b5YSWtj3mVeNQtT1ruavDsz1EC5TO +HLi9qWm9PX8Xtr2MvVy9Nb1bw9qzvWpcvYW94r2lt/atvbq9571svUW9ur3cvfN2tl4+y/aT +LOqRvZtpkrKGt71S5c5Wk5ROtb1VulzBs70wDJQY+LG9uEceE7C97WxEpK+9kOx8MbG9zM5/ +nb1iXLrftL1ADr0pspK9bFG9qeORPT09PT09PT09PVC8fBQWwLYYxGm8bH9iuGu87KAsdLaY +0LctTGFwc83QRb0AAIAyAOBttwfiu1JET7cUvpRMNz6hawo9sh9qVr2B66jR1pBEqVHZ48Gp +gAxZ3TaREKioUkIVJSlIljG36P19NSaVnLYUhh8RfWdRvA3Z9AL9spQ/ifrjF93u+BDlio1e +knVdtX9mEpY7vRawre1I/ky0iw8X/HlBojb3wNqite/f94/qejz8DKXGc3vCfBMyuHvh/tMe +/fps740Yfue3HK/EWmoETlIKC09s3ItHuhLQKmipFe3pBMcLAEh0+7i/d2v+AqA9gNdOnEcd +7h/H5WZULctuiB48uzb71/sH506nrkn7lfe/5EzqD4ldv4j341NvrmdXos/5Xaf9+zxxHhMx +7oIbX17XgI54Ri+MiJpd2CySHFbFx42MvRsuAMnOnOzYpzKWdHQH7ND16sh6CvEMPHCo9OAW +5zaHC6JJ//gYtffm7C1fpY5iPSV3wp0CFs2E9Ivje170mD/X+14mdq0kHayHZnjqG5uL+lnS +FLWnKSYNKFeCfjUHdL67bWzoAhCT8ttmEva7Gx9kx0jyvhLmHgJJl/hx1MelIU+8bhEfYpTj +bdGvyWu1aBtTHpX21N81HJedvnscC1Pf5xHH9EJk+ELEzkcOgJ3Ig2NfQl2A+K38mUfTYZ9j +dcd7+Lw5BO5ajR9D9B2C6QnzcmY/p2VfJLIasitcmMwvcBFxdj5bvuMAwMvTFmS8TyiGsL2I +WzzwjQTyvzk4pZ3rXQ3uJZ6mKNkinrCLNIHvJe6U6NwCvYLc/qnfzVxDXWsOmd45Kstz1D+4 +AeGqMQun/40XOaJg43Oka76Ix/kP8GIj6p2+U9O234z32UtSRfnhWO3nzmMSsNRFu8ieyuyX +X65/JKc8afeH6TJhnbIGjTgWidthBEOH80ZsdrzeInUep+fzIHAR09lq2190t4LMh6fqgXpl +JeyXlfLQLZEK - Q1NHUEhTBwAAAAJpZkY7mklBtJszkTbO6Gk2E1SyODTpiqyIml+sOpYMN6Br2KvzAsM4EAAA -AAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAACAPyEAAAAEAAAAAAAAAPzrgb6s -rG08AAAAAPzrgb6srG28sEg4vfzrgb6srG08AAAAAGl6lL6srG08AAAAAEX3k76srG28sEg4 -vfzrgb6srG287VE4vRDOjL6srG28sEg4vWl6lL6srG08AAAAAGl6lL7dP128sEg4vUX3k76s -rG28sEg4vWl6lL7dP128NgAAAAAAAAABAAAABQAAAAAAAAAFAAAAAgAAAAAAAAACAAAABwAA -AAAAAAAHAAAAAwAAAAAAAAADAAAACAAAAAAAAAAIAAAABAAAAAAAAAAEAAAAAQAAAAEAAAAE -AAAACQAAAAEAAAAJAAAABgAAAAEAAAAGAAAABQAAAAIAAAAFAAAABgAAAAIAAAAGAAAABwAA -AAMAAAAHAAAACgAAAAMAAAAKAAAACAAAAAQAAAAIAAAACgAAAAQAAAAKAAAACQAAAAYAAAAK -AAAABwAAAAYAAAAJAAAACgAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAA -AAAAgD8kAAAABAAAAOxROL2smDk+rKxtPOxROL3iehQ+rKxtPOxROL2smDk+rKxtvOxRuL2s -mDk+rKxtPOxROL3iehQ+rKxtvOxRuL3iehQ+rKxtPGBDtr2smDk+rKxtvOxRuL2smDk+3T9d -vGBDtr3iehQ+rKxtvOxRuL3iehQ+3T9dvAnltr2smDk+N6ZovAhGt73iehQ+9Z9lvDwAAAAA -AAAAAQAAAAQAAAAAAAAABAAAAAIAAAAAAAAAAgAAAAYAAAAAAAAABgAAAAoAAAAAAAAACgAA -AAcAAAAAAAAABwAAAAMAAAAAAAAAAwAAAAUAAAAAAAAABQAAAAEAAAABAAAABQAAAAkAAAAB -AAAACQAAAAsAAAABAAAACwAAAAgAAAABAAAACAAAAAQAAAACAAAABAAAAAgAAAACAAAACAAA -AAYAAAADAAAABwAAAAkAAAADAAAACQAAAAUAAAAGAAAACAAAAAoAAAAHAAAACgAAAAsAAAAH -AAAACwAAAAkAAAAIAAAACwAAAAoAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAA -AAAAAAAAAIA/JAAAAAQAAADsUbg9rJg5PqysbTzsUbg94noUPqysbTzsUbg9rJg5Pt0/Xbzs -UTg9rJg5PqysbTzsUbg94noUPt0/XbzsUTg94noUPqysbTxCEbg9rJg5PvpLX7zsUTg9rJg5 -PqysbbxgQ7Y94noUPqysbbzsUTg94noUPqysbbw+krc9rJg5PndAY7xgQ7Y9rJg5Pqysbbw8 -AAAAAAAAAAEAAAAEAAAAAAAAAAQAAAACAAAAAAAAAAIAAAAGAAAAAAAAAAYAAAAKAAAAAAAA -AAoAAAALAAAAAAAAAAsAAAAHAAAAAAAAAAcAAAADAAAAAAAAAAMAAAAFAAAAAAAAAAUAAAAB -AAAAAQAAAAUAAAAJAAAAAQAAAAkAAAAIAAAAAQAAAAgAAAAEAAAAAgAAAAQAAAAGAAAAAwAA -AAcAAAAJAAAAAwAAAAkAAAAFAAAABAAAAAgAAAAGAAAABgAAAAgAAAAKAAAABwAAAAsAAAAI -AAAABwAAAAgAAAAJAAAACAAAAAsAAAAKAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAA -AAAAAAAAAAAAAACAPx4AAAAEAAAA7FE4PYXrgb6srG087FE4PYXrgb6srG28AAAAAIXrgb6s -rG087FE4PeF6lL6srG087FE4PUL3k76srG28AAAAAIXrgb6srG28AAAAAOF6lL6srG087FE4 -PeF6lL7dP128AAAAAEL3k76srG28AAAAAOF6lL7dP128MAAAAAAAAAABAAAABQAAAAAAAAAF -AAAAAgAAAAAAAAACAAAABgAAAAAAAAAGAAAAAwAAAAAAAAADAAAABwAAAAAAAAAHAAAABAAA -AAAAAAAEAAAAAQAAAAEAAAAEAAAACAAAAAEAAAAIAAAABQAAAAIAAAAFAAAACAAAAAIAAAAI -AAAACQAAAAIAAAAJAAAABgAAAAMAAAAGAAAACQAAAAMAAAAJAAAABwAAAAQAAAAHAAAACQAA -AAQAAAAJAAAACAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAgD8k -AAAABAAAAOxRuD1SuF4+rKxtPOxRuD2amTk+rKxtPOxRuD1SuF4+3T9dvOxROD1SuF4+rKxt -POxRuD2amTk+3T9dvOxROD2amTk+rKxtPEIRuD2amTk++ktfvGBDtj1SuF4+rKxtvOxROD1S -uF4+rKxtvOxROD2amTk+rKxtvD6Stz2amTk+d0BjvGBDtj2amTk+rKxtvDwAAAAAAAAAAQAA -AAQAAAAAAAAABAAAAAIAAAAAAAAAAgAAAAcAAAAAAAAABwAAAAgAAAAAAAAACAAAAAMAAAAA -AAAAAwAAAAUAAAAAAAAABQAAAAEAAAABAAAABQAAAAkAAAABAAAACQAAAAsAAAABAAAACwAA -AAoAAAABAAAACgAAAAYAAAABAAAABgAAAAQAAAACAAAABAAAAAYAAAACAAAABgAAAAcAAAAD -AAAACAAAAAkAAAADAAAACQAAAAUAAAAGAAAACgAAAAcAAAAHAAAACgAAAAsAAAAHAAAACwAA -AAkAAAAHAAAACQAAAAgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA -AIA/IQAAAAQAAADsUTi9UrhePqysbTzsUTi9mpk5PqysbTzsUTi9UrhePqysbbzsUbi9Urhe -PqysbTzsUTi9mpk5PqysbbzsUbi9mpk5PqysbTxgQ7a9UrhePqysbbzsUbi9UrhePt0/Xbxg -Q7a9mpk5PqysbbzsUbi9mpk5Pt0/XbwJ5ba9mpk5PjemaLw2AAAAAAAAAAEAAAAEAAAAAAAA -AAQAAAACAAAAAAAAAAIAAAAGAAAAAAAAAAYAAAAHAAAAAAAAAAcAAAADAAAAAAAAAAMAAAAF -AAAAAAAAAAUAAAABAAAAAQAAAAUAAAAJAAAAAQAAAAkAAAAKAAAAAQAAAAoAAAAIAAAAAQAA -AAgAAAAEAAAAAgAAAAQAAAAIAAAAAgAAAAgAAAAGAAAAAwAAAAcAAAAJAAAAAwAAAAkAAAAF -AAAABgAAAAgAAAAKAAAABgAAAAoAAAAHAAAABwAAAAoAAAAJAAAAEAAAAAAAAAAAAAAAAAAA -AAAAAAAQAAAAAAAAAAAAAAAAAAAAAACAPxgAAAAEAAAAAAAAAFK4Xr6srG08AAAAAFK4Xr6s -rG287FE4vVK4Xr6srG08AAAAAA7rgb6srG08AAAAAA7rgb6srG287FE4vVK4Xr6srG287FE4 -vQ7rgb6srG087FE4vQ7rgb6srG28JAAAAAAAAAABAAAABQAAAAAAAAAFAAAAAgAAAAAAAAAC -AAAABgAAAAAAAAAGAAAAAwAAAAAAAAADAAAABAAAAAAAAAAEAAAAAQAAAAEAAAAEAAAABwAA -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 -vVK4Xr6srG087FE4vVK4Xr6srG28w9qzvWpck76srG2841C1vWy5k77dP128hJa2vedVk76s -rG087FE4vfN5lL6srG087FE4vc72k76srG28YJ6yvYWdk76srG28q8OzvUULlL7dP12841C1 -vWy5k76srG08bhKuvfN5lL6srG087FE4vfN5lL7dP128t/atvc72k76srG28GzaxveLNk76s -rG28q8OzvUULlL6srG08Bv+xvbpHlL7dP128bhKuvfN5lL7dP128zxCwvdxtlL6srG08Mquv -vaXrk76srG28zxCwvdxtlL7dP128Bv+xvbpHlL6srG08xgAAAAAAAAABAAAAAgAAAAAAAAAC -AAAACAAAAAAAAAAIAAAAAwAAAAAAAAADAAAACQAAAAAAAAAJAAAABAAAAAAAAAAEAAAACgAA -AAAAAAAKAAAABQAAAAAAAAAFAAAAAQAAAAEAAAAFAAAACgAAAAEAAAAKAAAADwAAAAEAAAAP -AAAAFAAAAAEAAAAUAAAAGgAAAAEAAAAaAAAAIAAAAAEAAAAgAAAAGwAAAAEAAAAbAAAAFQAA -AAEAAAAVAAAAEAAAAAEAAAAQAAAACwAAAAEAAAALAAAABgAAAAEAAAAGAAAABwAAAAEAAAAH -AAAAAgAAAAIAAAAHAAAADAAAAAIAAAAMAAAACAAAAAMAAAAIAAAADAAAAAMAAAAMAAAAEgAA -AAMAAAASAAAAFwAAAAMAAAAXAAAAHAAAAAMAAAAcAAAAIgAAAAMAAAAiAAAAHwAAAAMAAAAf -AAAAGAAAAAMAAAAYAAAAEwAAAAMAAAATAAAADgAAAAMAAAAOAAAACQAAAAQAAAAJAAAADgAA -AAQAAAAOAAAADwAAAAQAAAAPAAAACgAAAAYAAAALAAAABwAAAAcAAAALAAAADQAAAAcAAAAN -AAAAEgAAAAcAAAASAAAADAAAAAsAAAAQAAAAEQAAAAsAAAARAAAADQAAAA0AAAARAAAAFwAA -AA0AAAAXAAAAEgAAAA4AAAATAAAAGQAAAA4AAAAZAAAAFAAAAA4AAAAUAAAADwAAABAAAAAV -AAAAFgAAABAAAAAWAAAAEQAAABEAAAAWAAAAHAAAABEAAAAcAAAAFwAAABMAAAAYAAAAHgAA -ABMAAAAeAAAAGQAAABQAAAAZAAAAHgAAABQAAAAeAAAAGgAAABUAAAAbAAAAFgAAABYAAAAb -AAAAHQAAABYAAAAdAAAAIgAAABYAAAAiAAAAHAAAABgAAAAfAAAAIQAAABgAAAAhAAAAHgAA -ABoAAAAeAAAAIQAAABoAAAAhAAAAIAAAABsAAAAgAAAAIQAAABsAAAAhAAAAHQAAAB0AAAAh -AAAAHwAAAB0AAAAfAAAAIgAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAA -AAAAgD8YAAAABAAAAAAAAADiehQ+rKxtvAAAAADiehQ+rKxtPAAAAAB2tl4+rKxtvOxROD3i -ehQ+rKxtvOxROD3iehQ+rKxtPAAAAAB2tl4+rKxtPOxROD12tl4+rKxtvOxROD12tl4+rKxt -PCQAAAAAAAAAAQAAAAUAAAAAAAAABQAAAAIAAAAAAAAAAgAAAAYAAAAAAAAABgAAAAMAAAAA -AAAAAwAAAAQAAAAAAAAABAAAAAEAAAABAAAABAAAAAcAAAABAAAABwAAAAUAAAACAAAABQAA -AAcAAAACAAAABwAAAAYAAAADAAAABgAAAAcAAAADAAAABwAAAAQAAAAQAAAAAAAAAAAAAAAA -AAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAIA/GAAAAAQAAADsUTi94noUPqysbbzsUTi94noU -PqysbTzsUTi9drZePqysbbwAAAAA4noUPqysbbwAAAAA4noUPqysbTzsUTi9drZePqysbTwA -AAAAdrZePqysbbwAAAAAdrZePqysbTwkAAAAAAAAAAEAAAAFAAAAAAAAAAUAAAACAAAAAAAA -AAIAAAAGAAAAAAAAAAYAAAADAAAAAAAAAAMAAAAEAAAAAAAAAAQAAAABAAAAAQAAAAQAAAAH -AAAAAQAAAAcAAAAFAAAAAgAAAAUAAAAHAAAAAgAAAAcAAAAGAAAAAwAAAAYAAAAHAAAAAwAA -AAcAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAACAP2kAAAAE -AAAAAAAAAOF6lD6srG08AAAAAOF6lD7dP128bhKuveF6lD6srG08AAAAAFK4Xj6srG08AAAA -AMv2kz6srG28bhKuveF6lD7dP128HhOwve1slD6srG08AAAAAFK4Xj6srG287FG4vVK4Xj6s -rG08t/atvcv2kz6srG28RKSvvZDskz6srG28HhOwve1slD7dP128GPixvbhHlD6srG08YEO2 -vVK4Xj6srG287FG4vSzqkT6srG087FG4vVK4Xj7dP128fDGxvczOkz6srG28GPixvbhHlD7d -P128XMGzvTAMlD6srG08YEO2vanjkT6srG287FG4vSzqkT7dP128HR+4vZtpkj6srG08YJ6y -vX+dkz6srG28XMGzvTAMlD7dP128lE61vVW6kz6srG08zhm2vWxRkj6srG28HR+4vZtpkj7d -P128soa3vVLlkj6srG08Et2zvWJckz6srG28lE61vVW6kz7dP128hJa2vc5Wkz6srG08uKG1 -vSmykj6srG28soa3vVLlkj7dP128ut+0vUAOkz6srG28hJa2vc5Wkz7dP128xgAAAAAAAAAB -AAAABQAAAAAAAAAFAAAAAgAAAAAAAAACAAAABgAAAAAAAAAGAAAADAAAAAAAAAAMAAAAEgAA -AAAAAAASAAAAGAAAAAAAAAAYAAAAHgAAAAAAAAAeAAAAGwAAAAAAAAAbAAAAFQAAAAAAAAAV -AAAADgAAAAAAAAAOAAAACAAAAAAAAAAIAAAAAwAAAAAAAAADAAAABwAAAAAAAAAHAAAABAAA -AAAAAAAEAAAAAQAAAAEAAAAEAAAACQAAAAEAAAAJAAAABQAAAAIAAAAFAAAACwAAAAIAAAAL -AAAABgAAAAMAAAAIAAAADwAAAAMAAAAPAAAADQAAAAMAAAANAAAABwAAAAQAAAAHAAAADQAA -AAQAAAANAAAAEwAAAAQAAAATAAAAGQAAAAQAAAAZAAAAHwAAAAQAAAAfAAAAIQAAAAQAAAAh -AAAAHAAAAAQAAAAcAAAAFgAAAAQAAAAWAAAAEAAAAAQAAAAQAAAACgAAAAQAAAAKAAAACQAA -AAUAAAAJAAAACgAAAAUAAAAKAAAACwAAAAYAAAALAAAAEQAAAAYAAAARAAAADAAAAAgAAAAO -AAAAFAAAAAgAAAAUAAAADwAAAAoAAAAQAAAACwAAAAsAAAAQAAAAEQAAAAwAAAARAAAAFwAA -AAwAAAAXAAAAEgAAAA0AAAAPAAAAFAAAAA0AAAAUAAAAEwAAAA4AAAAVAAAAGgAAAA4AAAAa -AAAAFAAAABAAAAAWAAAAFwAAABAAAAAXAAAAEQAAABIAAAAXAAAAHQAAABIAAAAdAAAAGAAA -ABMAAAAUAAAAGQAAABQAAAAaAAAAGQAAABUAAAAbAAAAIAAAABUAAAAgAAAAGgAAABYAAAAc -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 - + \ No newline at end of file