713 lines
54 KiB
Lua
713 lines
54 KiB
Lua
--[[
|
|
|
|
This is free and unencumbered software released into the public domain.
|
|
|
|
Anyone is free to copy, modify, publish, use, compile, sell, or
|
|
distribute this software, either in source code form or as a compiled
|
|
binary, for any purpose, commercial or non-commercial, and by any
|
|
means.
|
|
|
|
In jurisdictions that recognize copyright laws, the author or authors
|
|
of this software dedicate any and all copyright interest in the
|
|
software to the public domain. We make this dedication for the benefit
|
|
of the public at large and to the detriment of our heirs and
|
|
successors. We intend this dedication to be an overt act of
|
|
relinquishment in perpetuity of all present and future rights to this
|
|
software under copyright law.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
For more information, please refer to <https://unlicense.org>
|
|
|
|
]]
|
|
|
|
script_name("killsay")
|
|
script_author("treywisp")
|
|
script_description("Sends a message when an opponent is killed and places a mark on his corpse")
|
|
|
|
local inicfg = require("inicfg")
|
|
local imgui = require("mimgui")
|
|
local encoding = require("encoding")
|
|
local sampev = require("samp.events")
|
|
local ffi = require("ffi")
|
|
local addons = require("ADDONS")
|
|
|
|
-- encoding
|
|
encoding.default = 'CP1251'
|
|
local u8 = encoding.UTF8
|
|
|
|
-- Ïåðåìåííûå äëÿ ôóíêöèé òàáëèöû
|
|
local data_file_path = getWorkingDirectory() .. "\\killsay_table.json"
|
|
local player_data = {}
|
|
|
|
local mark_data = {}
|
|
local script_image
|
|
|
|
local script_states = {
|
|
antiflood = false
|
|
}
|
|
|
|
local imgui_states = {
|
|
window_state = imgui.new.bool(),
|
|
menu_state = imgui.new.int(1),
|
|
}
|
|
|
|
-- Êîíôèã
|
|
local settings_source = "killsay.ini"
|
|
local settings = inicfg.load({
|
|
variables = {
|
|
-- Ãëàâíîå ìåíþ
|
|
script_state = false,
|
|
startup_notif = true,
|
|
|
|
-- Íàñòðîéêà îòûãðîâîê
|
|
killsay_variation = 0,
|
|
killsay_variation_custom = u8[[Ýòî îêíî ñîçäàíî äëÿ ñîáñòâåííîé îòûãðîâêè]],
|
|
killsay_distance = false,
|
|
|
|
-- Íàñòðîéêà ìåòîê
|
|
send_mark = false,
|
|
use_mark = false,
|
|
ignore_text_mark = false,
|
|
ignore_self_mark = false,
|
|
sound_mark = false,
|
|
variation_sound_mark = 21001,
|
|
sound_mark_alt = false,
|
|
time_mark = false,
|
|
variation_time_mark = 1500,
|
|
custom_icon_mark = false,
|
|
variation_icon_mark = 6,
|
|
|
|
-- Ïðî÷èå íàñòðîéêè
|
|
radio_report = false,
|
|
squad_report = false,
|
|
table_insert = true;
|
|
}
|
|
}, settings_source)
|
|
|
|
local imgui_buffers = {
|
|
-- Ãëàâíîå ìåíþ
|
|
script_image = nil,
|
|
script_state = imgui.new.bool(settings.variables.script_state),
|
|
startup_notif = imgui.new.bool(settings.variables.startup_notif),
|
|
|
|
-- Íàñòîéêà îòûãðîâîê
|
|
killsay_variation = imgui.new.int(settings.variables.killsay_variation),
|
|
killsay_variation_custom = imgui.new.char[256](u8(tostring(settings.variables.killsay_variation_custom):gsub("&nl", "\n"):sub(1, 255))),
|
|
killsay_distance = imgui.new.bool(settings.variables.killsay_distance),
|
|
|
|
-- Íàñòðîéêà ìåòîê
|
|
send_mark = imgui.new.bool(settings.variables.send_mark),
|
|
use_mark = imgui.new.bool(settings.variables.use_mark),
|
|
ignore_text_mark = imgui.new.bool(settings.variables.ignore_text_mark),
|
|
ignore_self_mark = imgui.new.bool(settings.variables.ignore_self_mark),
|
|
sound_mark = imgui.new.bool(settings.variables.sound_mark),
|
|
variation_sound_mark = imgui.new.int(settings.variables.variation_sound_mark),
|
|
sound_mark_alt = imgui.new.bool(settings.variables.sound_mark_alt),
|
|
time_mark = imgui.new.bool(settings.variables.time_mark),
|
|
variation_time_mark = imgui.new.int(settings.variables.variation_time_mark),
|
|
custom_icon_mark = imgui.new.bool(settings.variables.custom_icon_mark),
|
|
variation_icon_mark = imgui.new.int(settings.variables.variation_icon_mark),
|
|
|
|
-- Ïðî÷èå íàñòðîéêè
|
|
radio_report = imgui.new.bool(settings.variables.radio_report),
|
|
squad_report = imgui.new.bool(settings.variables.squad_report),
|
|
table_search = imgui.new.char[256](),
|
|
table_insert = imgui.new.bool(settings.variables.table_insert);
|
|
}
|
|
|
|
-- Ñòàíäàðòíûå âàðèàöèè îòûãðîâîê, $nickname == nickname, $id == id
|
|
local killsay_text = {
|
|
[1] = { -- Êëàññè÷åñêàÿ
|
|
"/me ðàññòåãíóë øèðèíêó, ïðèñïóñòèë äæèíñû, ñäåëàë òÿæåëûé âäîõ, äîñòàë èíñòðóìåíò",
|
|
"/do Àðîìàòíàÿ çîëîòàÿ æèäêîñòü ñòðóéêîé ñòåêàåò ïî òðóïó $nickname",
|
|
"/me ïîäòÿíóë äæèíñû, âçäîõíóë c îáëåã÷åíèåì, çàñòåãíóë øèðèíêó";
|
|
},
|
|
|
|
[2] = { -- Çà ìàò èçâåíè
|
|
"Ñëûøü $nickname õóëå òû ìíå ñäåëàåøü??",
|
|
"âîâòîðûõ ïîøåë íàõóé",
|
|
"âòåòüèõ ÷òî òû ìíå ñäåëàåøü, ÿ â äðóãîì ãîðîäå, çà ìàò èçâåíè";
|
|
},
|
|
|
|
[3] = { -- Hasta la vista
|
|
"Hasta la vista, $nickname";
|
|
},
|
|
|
|
[4] = { -- Íîâîãîäíÿÿ
|
|
"/me êèíóë îòêðûòêó îò Äåäà Ìîðîçà íà òðóï $nickname",
|
|
"/do  îòêðûòêå íàïèñàíî: Ñ íîâûì ãîäîì, $nickname";
|
|
}
|
|
}
|
|
|
|
local function userNotification(text)
|
|
sampAddChatMessage("[killsay] {FFFFFF}"..text, 0xDC143C)
|
|
end
|
|
|
|
-- Îïòèìèçèðîâàííàÿ ñîðòèðîâêà äëÿ òàáëèöû
|
|
local function tableOptimizedSort()
|
|
table.sort(player_data, function(a, b)
|
|
return (tonumber(a.killed) or 0) > (tonumber(b.killed) or 0)
|
|
end)
|
|
end
|
|
|
|
-- Ñîõðàíåíèå íàñòðîåê òàáëèöû
|
|
local function tableSaveData()
|
|
local file = io.open(data_file_path, 'w')
|
|
if not file then return false end
|
|
|
|
local content = encodeJson(player_data)
|
|
file:write(content)
|
|
file:close()
|
|
return true
|
|
end
|
|
|
|
-- Âíåñåíèå â òàáëèöó íèêà ïðè óáèéñòâå ïðîòèâíèêà
|
|
local function tableUpdateKillCount(nickname)
|
|
if not nickname or nickname == "" then return false end
|
|
|
|
nickname = nickname:match("^%s*(.-)%s*$"):sub(1, 30)
|
|
|
|
for i = 1, #player_data do
|
|
if player_data[i].nickname == nickname then
|
|
player_data[i].killed = (player_data[i].killed or 0) + 1
|
|
tableOptimizedSort()
|
|
return true
|
|
end
|
|
end
|
|
|
|
player_data[#player_data+1] = {nickname = nickname, killed = 1}
|
|
tableOptimizedSort()
|
|
tableSaveData()
|
|
return true
|
|
end
|
|
|
|
local function tableLoadData()
|
|
local file = io.open(data_file_path, 'r')
|
|
if not file then
|
|
file = io.open(data_file_path, 'w')
|
|
if not file then return false end
|
|
file:write('[]')
|
|
file:close()
|
|
userNotification("Ôàéë äàííûõ íå áûë îáíàðóæåí, ñîçäàí íîâûé ïîä íàçâàíèåì \"killsay_table.json\"")
|
|
return true
|
|
end
|
|
|
|
local content = file:read('*a')
|
|
file:close()
|
|
|
|
local ok, data = pcall(decodeJson, content)
|
|
if not ok then return false end
|
|
|
|
player_data = data or {}
|
|
tableOptimizedSort()
|
|
return true
|
|
end
|
|
|
|
local function saveSettings()
|
|
userNotification("Ïîïûòêà ñîõðàíåíèÿ íàñòðîåê...")
|
|
|
|
local text_fields = {
|
|
killsay_variation_custom = true,
|
|
}
|
|
|
|
-- Àâòîìàòèçèðîâàííàÿ ïðîâåðêà íà íàõîæäåíèå â òàáëèöå
|
|
for key, _ in pairs(settings.variables) do
|
|
if imgui_buffers[key] then
|
|
if text_fields[key] then
|
|
settings.variables[key] = (u8:decode(ffi.string(imgui_buffers[key]))):gsub("\n", "&nl")
|
|
else
|
|
settings.variables[key] = imgui_buffers[key][0]
|
|
end
|
|
end
|
|
end
|
|
|
|
if inicfg.save(settings, settings_source) then userNotification("Íàñòðîéêè áûëè óñïåøíî ñîõðàíåíû") end
|
|
end
|
|
|
|
-- Äîáàâëÿåò çâóêîâîå óâåäîìëåíèå ïðè óñòàíîâêå ìåòêè
|
|
local function setSoundBlip()
|
|
if imgui_buffers.sound_mark_alt[0] then
|
|
-- Àëüòåðíàòèâíàÿ âàðèàöèÿ
|
|
addOneOffSound(0.0, 0.0, 0.0, imgui_buffers.variation_sound_mark[0])
|
|
|
|
else
|
|
-- Ñòàíäàðòíàÿ âàðèàöèÿ (raknet)
|
|
local bs = raknetNewBitStream()
|
|
raknetBitStreamWriteInt32(bs, imgui_buffers.variation_sound_mark[0])
|
|
raknetBitStreamWriteFloat(bs, 0)
|
|
raknetBitStreamWriteFloat(bs, 0)
|
|
raknetBitStreamWriteFloat(bs, 0)
|
|
raknetEmulRpcReceiveBitStream(16, bs)
|
|
raknetDeleteBitStream(bs)
|
|
end
|
|
end
|
|
|
|
local function setDeathBlip(x, y, z)
|
|
lua_thread.create(function()
|
|
setSoundBlip()
|
|
|
|
local mark = {
|
|
checkpoint = createCheckpoint(2, x, y, z, 0, 0, 0, 1),
|
|
blip = addSpriteBlipForContactPoint(x, y, z, imgui_buffers.custom_icon_mark[0] and imgui_buffers.variation_icon_mark[0] or 19)
|
|
}
|
|
|
|
mark_data[#mark_data + 1] = mark
|
|
|
|
wait(imgui_buffers.time_mark[0] and imgui_buffers.variation_time_mark[0] or 1000)
|
|
|
|
if mark.checkpoint then deleteCheckpoint(mark.checkpoint) end
|
|
if mark.blip then removeBlip(mark.blip) end
|
|
|
|
for i = #mark_data, 1, -1 do
|
|
if mark_data[i] == mark then
|
|
table.remove(mark_data, i)
|
|
break
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
local function sendMark(x, y, z)
|
|
sampSendChat("/u DCHECKSEALKPOSX".. math.floor(x) .."Y".. math.floor(y) .."Z".. math.floor(z))
|
|
end
|
|
|
|
local function sendRolePlay(nickname, id)
|
|
-- Îòïðàâêà ñîáñòâåííîé îòûãðîâêè
|
|
if imgui_buffers.killsay_variation[0] == 5 then
|
|
for text in u8:decode(ffi.string(imgui_buffers.killsay_variation_custom)):gmatch("[^\r\n]+") do
|
|
sampSendChat(text:gsub("$nickname", nickname):gsub("$id", id))
|
|
wait(1400)
|
|
end
|
|
return true
|
|
end
|
|
|
|
-- Îòïðàâêà ñòàíäàðòíîé îòûãðîâêè
|
|
for _, text in ipairs(killsay_text[imgui_buffers.killsay_variation[0]]) do
|
|
text = (text:gsub("$nickname", ''.. nickname)):gsub("$id", ''.. id)
|
|
sampSendChat(text)
|
|
wait(1400)
|
|
end
|
|
end
|
|
|
|
-- Ãëàâíàÿ ôóíêöèÿ ñêðèïòà
|
|
local function killsay(id)
|
|
local x, y, z, nickname
|
|
local _, handle = sampGetCharHandleBySampPlayerId(id)
|
|
|
|
if _ then x, y, z = getCharCoordinates(handle) end
|
|
if sampIsPlayerConnected(id) then nickname = (sampGetPlayerNickname(id)):gsub("^%b[]", "") end
|
|
|
|
local px, py, pz = getCharCoordinates(PLAYER_PED)
|
|
|
|
if not (x and y and z and nickname) or x == "" or y == "" or z == "" or nickname == "" then
|
|
print("[" .. os.date("%H:%M:%S") .. "]: Ïðîèçîøëà îøèáêà èíèöèàëèçàöèè ïåðåìåííûõ")
|
|
print("[" .. os.date("%H:%M:%S") .. "]: Âîçìîæíàÿ ïðîáëåìà: âûõîä ïðîòèâíèêà / áûñòðûé ðåñïàâí")
|
|
return false
|
|
else
|
|
tableUpdateKillCount(nickname)
|
|
|
|
if imgui_buffers.send_mark[0] then
|
|
sendMark(x, y, z)
|
|
wait((imgui_buffers.killsay_variation[0] or imgui_buffers.radio_report[0] or imgui_buffers.squad_report[0]) and 1400 or 0)
|
|
end
|
|
|
|
if imgui_buffers.killsay_variation[0] ~= 0 and (imgui_buffers.killsay_distance[0] or (not imgui_buffers.killsay_distance[0] and getDistanceBetweenCoords3d(x, y, z, px, py, pz) < 15)) then
|
|
sendRolePlay(nickname, id)
|
|
end
|
|
|
|
if imgui_buffers.radio_report[0] then
|
|
sampSendChat("/rb " .. nickname .. "[" .. id .. "] íåéòðàëèçîâàí")
|
|
wait(imgui_buffers.squad_report[0] and 1400 or 0)
|
|
end
|
|
|
|
if imgui_buffers.squad_report[0] then
|
|
sampSendChat("/fs ".. nickname .. "[" .. id .. "] íåéòðàëèçîâàí")
|
|
end
|
|
end
|
|
end
|
|
|
|
local function centerColumnText(text)
|
|
imgui.SetCursorPosX((imgui.GetColumnOffset() + (imgui.GetColumnWidth() / 2)) - imgui.CalcTextSize(text).x / 2)
|
|
imgui.Text(text)
|
|
end
|
|
|
|
local function customizedHint(text, variation)
|
|
imgui.SameLine()
|
|
|
|
if variation then
|
|
local pos = imgui.GetCursorPosY()
|
|
imgui.SetCursorPosY(pos + 3)
|
|
end
|
|
imgui.TextDisabled(u8"(?)")
|
|
|
|
if imgui.IsItemHovered() then
|
|
imgui.BeginTooltip()
|
|
imgui.PushTextWrapPos(450)
|
|
imgui.TextUnformatted(u8(text))
|
|
imgui.PopTextWrapPos()
|
|
imgui.EndTooltip()
|
|
end
|
|
end
|
|
|
|
imgui.OnInitialize(function()
|
|
imgui.DarkTheme()
|
|
imgui_buffers.script_image = imgui.CreateTextureFromFileInMemory(imgui.new("const char*", script_image), #script_image)
|
|
end)
|
|
|
|
imgui.OnFrame(function() return imgui_states.window_state[0] end, function(player)
|
|
imgui.SetNextWindowPos(imgui.ImVec2(500, 500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
|
|
imgui.SetNextWindowSize(imgui.ImVec2(523, 550), imgui.Cond.Always)
|
|
imgui.Begin(u8"killsay", imgui_states.window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoScrollbar + imgui.WindowFlags.NoScrollWithMouse)
|
|
|
|
-- Ñåëåêòîð ìåíþ
|
|
if addons.HeaderButton(imgui_states.menu_state[0] == 1, u8"Ãëàâíîå ìåíþ") then
|
|
imgui_states.menu_state[0] = 1
|
|
end
|
|
imgui.SameLine(nil, 30)
|
|
|
|
if addons.HeaderButton(imgui_states.menu_state[0] == 2, u8"Íàñòðîéêà îòûãðîâîê") then
|
|
imgui_states.menu_state[0] = 2
|
|
end
|
|
imgui.SameLine(nil, 30)
|
|
|
|
if addons.HeaderButton(imgui_states.menu_state[0] == 3, u8"Íàñòðîéêà ìåòîê") then
|
|
imgui_states.menu_state[0] = 3
|
|
end
|
|
imgui.SameLine(nil, 30)
|
|
|
|
if addons.HeaderButton(imgui_states.menu_state[0] == 4, u8"Ïðî÷èå íàñòðîéêè") then
|
|
imgui_states.menu_state[0] = 4
|
|
end
|
|
|
|
-- Ãëàâíîå ìåíþ
|
|
if imgui_states.menu_state[0] == 1 then
|
|
imgui.SetCursorPos(imgui.ImVec2(188, 170))
|
|
imgui.Image(imgui_buffers.script_image, imgui.ImVec2(150, 150))
|
|
|
|
imgui.SetCursorPosX(183)
|
|
addons.ToggleButton(u8"Àêòèâàöèÿ ñêðèïòà", imgui_buffers.script_state)
|
|
|
|
imgui.SetCursorPos(imgui.ImVec2(165, 482))
|
|
addons.ToggleButton(u8"Óâåäîìëåíèå ïðè çàïóñêå", imgui_buffers.startup_notif)
|
|
|
|
imgui.SetCursorPosY(450)
|
|
addons.AlignedText(u8"This software is unlicensed. You can do whatever you want with it", 2)
|
|
if imgui.IsItemClicked(0) then os.execute(("start %s"):format("https://unlicense.org")) end
|
|
end
|
|
|
|
-- Íàñòðîéêà îòûãðîâîê
|
|
if imgui_states.menu_state[0] == 2 then
|
|
-- Âûáîð âàðèàöèè îòûãðîâêè
|
|
imgui.SetCursorPos(imgui.ImVec2(50, 95))
|
|
imgui.RadioButtonIntPtr(u8"Áåç îòûãðîâîê", imgui_buffers.killsay_variation, 0)
|
|
customizedHint("Ñêðèïò áóäåò ïðîïóñêàòü îòûãðîâêè, ïåðåõîäÿ ê äðóãèì ôóíêöèÿì")
|
|
|
|
imgui.SameLine(200)
|
|
imgui.RadioButtonIntPtr(u8"Êëàññè÷åñêàÿ", imgui_buffers.killsay_variation, 1)
|
|
customizedHint("[1]: /me ðàññòåãíóë øèðèíêó, ïðèñïóñòèë äæèíñû, ñäåëàë òÿæåëûé âäîõ, äîñòàë èíñòðóìåíò\n[2]: /do Àðîìàòíàÿ çîëîòàÿ æèäêîñòü ñòðóéêîé ñòåêàåò ïî òðóïó $nickname\n[3]: /me ïîäòÿíóë äæèíñû, âçäîõíóë c îáëåã÷åíèåì, çàñòåãíóë øèðèíêó")
|
|
|
|
imgui.SameLine(348)
|
|
imgui.RadioButtonIntPtr(u8"Çà ìàò èçâåíè", imgui_buffers.killsay_variation, 2)
|
|
customizedHint("[1]: Ñëûøü $nickname õóëå òû ìíå ñäåëàåøü??\n[2]: âîâòîðûõ ïîøåë íàõóé\n[3]: âòåòüèõ ÷òî òû ìíå ñäåëàåøü, ÿ â äðóãîì ãîðîäå, çà ìàò èçâåíè")
|
|
|
|
imgui.SetCursorPos(imgui.ImVec2(50, 130))
|
|
imgui.RadioButtonIntPtr(u8"Hasta la vista", imgui_buffers.killsay_variation, 3)
|
|
customizedHint("[1]: Hasta la vista, $nickname")
|
|
|
|
imgui.SameLine(200)
|
|
imgui.RadioButtonIntPtr(u8"Happy new year", imgui_buffers.killsay_variation, 4)
|
|
customizedHint("[1]: /me êèíóë îòêðûòêó îò Äåäà Ìîðîçà íà òðóï $nickname\n[2]: /do  îòêðûòêå íàïèñàíî: Ñ íîâûì ãîäîì, $nickname")
|
|
|
|
imgui.SameLine(348)
|
|
imgui.RadioButtonIntPtr(u8"Êàñòîìèçàöèÿ", imgui_buffers.killsay_variation, 5)
|
|
customizedHint("Íå ðåêîìåíäóåòñÿ èñïîëüçîâàòü ñî÷åòàíèå \"&nl\", ïîñêîëüêó îíî\nêîñòûëüíî îòâå÷àåò çà ïåðåíîñ íà íîâóþ ñòðîêó. Åñëè íå âûáðàíà\nýòà ôóêíöèÿ - îòûãðîâêè, ââåäåííûå íèæå, íå ñðàáàòûâàþò")
|
|
|
|
-- Ñîáñòâåííàÿ âàðèàöèÿ îòûãðîâêè
|
|
imgui.SetCursorPos(imgui.ImVec2(60, 185))
|
|
imgui.InputTextMultiline("##killsay_variation_custom", imgui_buffers.killsay_variation_custom, 256, imgui.ImVec2(400, 150))
|
|
|
|
imgui.SetCursorPosY(360)
|
|
addons.AlignedText(u8"Ìàêñèìàëüíî âîçìîæíàÿ äëèíà òâîèõ îòûãðîâîê - 256 ñèìâîëîâ.\nÒàêæå òû ìîæåøü èñïîëüçîâàòü ïåðåìåííûå ïðÿìî â îòûãðîâêàõ:\nÂïèñûâàé $nickname äëÿ âñòàâêè â îòûãðîâêè íèêà ïðîòèâíèêà,\n$id ñëåäóåò èñïîëüçîâàòü, åñëè õî÷åøü ïîäñòàâèòü ID ïðîòèâíèêà", 2)
|
|
|
|
imgui.SetCursorPos(imgui.ImVec2(85, 460))
|
|
addons.ToggleButton(u8"Èãíîðèðîâàòü ìàêñèìàëüíóþ äèñòàíöèþ îòûãðîâîê", imgui_buffers.killsay_distance)
|
|
end
|
|
|
|
-- Íàñòðîéêà ìåòêè
|
|
if imgui_states.menu_state[0] == 3 then
|
|
imgui.SetCursorPos(imgui.ImVec2(75, 95))
|
|
addons.ToggleButton(u8"Îòïðàâëÿòü ìåòêè", imgui_buffers.send_mark)
|
|
customizedHint("Ïðè ëèêâèäàöèè áóäåò îòïðàâëÿòü ñîîáùåíèå â ÷àò ñêâàäà â ôîðìàòå DCHECKSEALKPOSX$Y$Z$, ãäå $ - ñîîòâåòñòâóþùàÿ êîîðäèíàòà", true)
|
|
|
|
imgui.SameLine(275)
|
|
addons.ToggleButton(u8"Óñòàíàâëèâàòü ìåòêè", imgui_buffers.use_mark)
|
|
|
|
imgui.SetCursorPos(imgui.ImVec2(75, 130))
|
|
addons.ToggleButton(u8"Èãíîðèðîâàòü òåêñò", imgui_buffers.ignore_text_mark)
|
|
customizedHint("Òåêñò ìåòîê íå áóäåò îòîáðàæàòüñÿ â ÷àòå, îäíàêî ñàìè ìåòêè áóäóò óñòàíàâëèâàòüñÿ", true)
|
|
|
|
imgui.SameLine(275)
|
|
addons.ToggleButton(u8"Èãíîðèðîâàòü ñâîè", imgui_buffers.ignore_self_mark)
|
|
customizedHint("Ñâîè îòïðàâëåííûå ìåòêè óñòàíàâëèâàòüñÿ íå áóäóò", true)
|
|
|
|
-- Íàñòðîéêà çâóêîâûõ óâåäîìëåíèé
|
|
imgui.SetCursorPos(imgui.ImVec2(75, 185))
|
|
addons.ToggleButton(u8"Ïðîèãðûâàòü çâóêîâ. îïîâåùåíèå ïðè óñòàíîâêå ìåòêè", imgui_buffers.sound_mark)
|
|
|
|
imgui.SetCursorPos(imgui.ImVec2(75, 220))
|
|
imgui.RadioButtonIntPtr(u8"Ïåéäæåð", imgui_buffers.variation_sound_mark, 21001)
|
|
imgui.SameLine(220)
|
|
imgui.RadioButtonIntPtr(u8"Ñèíòåçàòîð", imgui_buffers.variation_sound_mark, 5205)
|
|
imgui.SameLine(382)
|
|
imgui.RadioButtonIntPtr(u8"Ïèíîê", imgui_buffers.variation_sound_mark, 1136)
|
|
|
|
imgui.SetCursorPos(imgui.ImVec2(75, 260))
|
|
addons.ToggleButton(u8"Èñïîëüçîâàòü àëüò. ïðèìåíåí.", imgui_buffers.sound_mark_alt)
|
|
customizedHint(" áîëüøèíñòâå ñëó÷àåâ íå áóäåò ðàáîòàòü, îäíàêî äëÿ êîãî-òî ýòî ìîæåò ñòàòü ðåøåíèåì ïðîáëåìû", true)
|
|
|
|
imgui.SetCursorPos(imgui.ImVec2(327, 258))
|
|
if imgui.Button(u8"Ïðîâåðèòü çâóê", imgui.ImVec2(120, 0)) then setSoundBlip() end
|
|
|
|
-- Íàñòðîéêà âðåìåíè ìåòêè
|
|
imgui.SetCursorPos(imgui.ImVec2(75, 315))
|
|
addons.ToggleButton(u8"Èñïîëüçîâàòü ñîáñòâåííîå âðåìÿ îòîáðàæåíèÿ ìåòêè", imgui_buffers.time_mark)
|
|
imgui.SetCursorPos(imgui.ImVec2(75, 350))
|
|
imgui.PushItemWidth(372)
|
|
imgui.SliderInt(u8"", imgui_buffers.variation_time_mark, 100, 3500)
|
|
|
|
-- Íàñòðîéêà êàñòîìèçèðîâàííîé èêîíêè ìåòêè
|
|
imgui.SetCursorPos(imgui.ImVec2(75, 405))
|
|
addons.ToggleButton(u8"Çàìåíèòü ñòàíäàðòíóþ èêîíêó íà êàñòîìèçèðîâàííóþ", imgui_buffers.custom_icon_mark)
|
|
customizedHint("Ïî óìîë÷àíèþ èêîíêîé ÿâëÿåòñÿ êðàñíûé ôëàæîê", true)
|
|
|
|
imgui.SetCursorPos(imgui.ImVec2(75, 435))
|
|
imgui.RadioButtonIntPtr(u8"Ïèñòîëåò", imgui_buffers.variation_icon_mark, 6)
|
|
imgui.SameLine(200)
|
|
imgui.RadioButtonIntPtr(u8"Ñåðäå÷êî", imgui_buffers.variation_icon_mark, 21)
|
|
imgui.SameLine(323)
|
|
imgui.RadioButtonIntPtr(u8"Æåëòûé êðóæîê", imgui_buffers.variation_icon_mark, 56)
|
|
|
|
end
|
|
|
|
-- Ïðî÷èå íàñòðîéêè
|
|
if imgui_states.menu_state[0] == 4 then
|
|
-- Íàñòðîéêà îò÷åòîâ
|
|
imgui.SetCursorPos(imgui.ImVec2(85, 95))
|
|
addons.ToggleButton(u8"Îòïðàâëÿòü ñîîáùåíèå î ëèêâèäàöèè â ðàöèþ (/rb)", imgui_buffers.radio_report)
|
|
customizedHint("/rb $nickname[$id] íåéòðàëèçîâàí", true)
|
|
|
|
imgui.SetCursorPos(imgui.ImVec2(85, 125))
|
|
addons.ToggleButton(u8"Îòïðàâëÿòü ñîîáùåíèå î ëèêâèäàöèè â ñêâàä (/fs)", imgui_buffers.squad_report)
|
|
customizedHint("/fs $nickname[$id] íåéòðàëèçîâàí", true)
|
|
|
|
|
|
imgui.SetCursorPosY(165)
|
|
addons.AlignedText(u8"Ëè÷íàÿ ñòàòèñòèêà ëèêâèäàöèè ïðîòèâíèêîâ", 2)
|
|
|
|
-- Àâòîìàòèçèðîâàííàÿ òàáëèöà
|
|
imgui.SetCursorPos(imgui.ImVec2(85, 190))
|
|
imgui.BeginChild(u8"##Òàáëèöà", imgui.ImVec2(355, 200), true)
|
|
|
|
imgui.Columns(3)
|
|
imgui.SetColumnWidth(-1, 140)
|
|
centerColumnText(u8"Nickname")
|
|
imgui.NextColumn()
|
|
|
|
imgui.SetColumnWidth(-1, 90)
|
|
centerColumnText(u8"Óáèéñòâ")
|
|
imgui.NextColumn()
|
|
|
|
imgui.SetColumnWidth(-1, 135)
|
|
centerColumnText(u8"Äåéñòâèÿ")
|
|
imgui.NextColumn()
|
|
|
|
imgui.Columns(1)
|
|
imgui.Separator()
|
|
|
|
for i, player in ipairs(player_data) do
|
|
if (u8:decode(ffi.string(imgui_buffers.table_search))):gsub("%s+", "") == "" or player.nickname:find("^" .. (u8:decode(ffi.string(imgui_buffers.table_search))):gsub("%s+", ""):gsub("[%%%.%[%]%(%)%+%-%?%^%$]", "%%%0")) then
|
|
imgui.Columns(3)
|
|
imgui.SetColumnWidth(-1, 140)
|
|
centerColumnText(u8(player.nickname))
|
|
imgui.NextColumn()
|
|
|
|
imgui.SetColumnWidth(-1, 90)
|
|
centerColumnText(u8(player.killed))
|
|
imgui.NextColumn()
|
|
|
|
imgui.SetColumnWidth(-1, 135)
|
|
centerColumnText(u8"Óäàëèòü çàïèñü")
|
|
if imgui.IsItemClicked() then
|
|
table.remove(player_data, i)
|
|
tableSaveData()
|
|
end
|
|
|
|
imgui.Columns(1)
|
|
imgui.Separator()
|
|
end
|
|
end
|
|
|
|
imgui.EndChild()
|
|
|
|
-- Ïîèñê ïî òàáëèöå
|
|
imgui.SetCursorPos(imgui.ImVec2(85, 395))
|
|
imgui.PushItemWidth(285)
|
|
imgui.InputTextWithHint(u8"##Ïîèñê", u8"Ðåãèñòðîçàâèñèìûé ïîèñê", imgui_buffers.table_search, 256)
|
|
|
|
-- Î÷èñòêà ñòðîêè ïîèñêà
|
|
imgui.SetCursorPos(imgui.ImVec2(375, 395))
|
|
if imgui.Button(u8"Î÷èñòèòü") then
|
|
imgui.StrCopy(imgui_buffers.table_search, '')
|
|
end
|
|
|
|
imgui.SetCursorPos(imgui.ImVec2(85, 435))
|
|
addons.ToggleButton(u8"Çàíîñèòü ëèêâèäèðîâàííûõ ïðîòèâíèêîâ â òàáëèöó", imgui_buffers.table_insert)
|
|
|
|
end
|
|
|
|
-- Êíîïêà ñîõðàíåíèÿ íàñòðîåê
|
|
imgui.SetCursorPos(imgui.ImVec2(-5, 520))
|
|
if imgui.Button(u8"Ñîõðàíåíèå íàñòðîåê", imgui.ImVec2(535, 30)) then
|
|
saveSettings()
|
|
end
|
|
|
|
imgui.End()
|
|
end)
|
|
|
|
function main()
|
|
if not isSampfuncsLoaded() or not isSampLoaded() then return end
|
|
while not isSampAvailable() do wait(100) end
|
|
|
|
if not tableLoadData() then
|
|
userNotification("{FF0000}Ôàéë äàííûõ íå áûë óñïåøíî çàãðóæåí, ñêðèïò ìîæåò ðàáîòàòü íåñòàáèëüíî!")
|
|
print("Ôàéë äàííûõ íå áûë óñïåøíî çàãðóæåí, ñêðèïò ìîæåò ðàáîòàòü íåñòàáèëüíî!")
|
|
end
|
|
|
|
if imgui_buffers.startup_notif[0] then
|
|
userNotification("Ñêðèïò çàãðóæåí. Îòêðûòü ìåíþ: /killsay")
|
|
end
|
|
|
|
sampRegisterChatCommand("killsay", function() imgui_states.window_state[0] = not imgui_states.window_state[0] end)
|
|
end
|
|
|
|
-- Ïðîâåðêà íà óáèéñòâî ïðîòèâíèêà
|
|
function sampev.onSendGiveDamage(id, damage, weaponid, bodypart)
|
|
if id ~= 65535 and sampGetPlayerHealth(id) - damage <= 0 and imgui_buffers.script_state[0] then
|
|
lua_thread.create(function()
|
|
wait(350)
|
|
if sampGetPlayerHealth(id) <= 0 and isCharDead(select(2, sampGetCharHandleBySampPlayerId(id))) and not script_states.antiflood then
|
|
script_states.antiflood = true
|
|
killsay(id)
|
|
script_states.antiflood = false
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
-- Ïîèñê òåêñòà ìåòêè
|
|
function sampev.onServerMessage(color, text)
|
|
if imgui_buffers.script_state[0] and imgui_buffers.use_mark[0] and text:find("^.+%[.*%]% {FFFFFF%}(.*)%[(.*)%]: DCHECKSEALKPOSX.+Y.+Z.+") then
|
|
local nickname, id, x, y, z = text:match("^.+%[.*%]% {FFFFFF%}(.*)%[(.*)%]: DCHECKSEALKPOSX(.+)Y(.+)Z(.+)")
|
|
local self_nickname = sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)))
|
|
|
|
if not imgui_buffers.ignore_self_mark[0] or (imgui_buffers.ignore_self_mark[0] and self_nickname ~= nickname) then setDeathBlip(x, y, z) end
|
|
|
|
if imgui_buffers.ignore_text_mark[0] then return false end
|
|
end
|
|
end
|
|
|
|
-- ìîäèôèöèðîâàííàÿ òåìà Chapo è ôóíêöèÿ êíîïêè Cosmo
|
|
function imgui.DarkTheme()
|
|
imgui.SwitchContext()
|
|
imgui.GetStyle().WindowPadding = imgui.ImVec2(5, 5)
|
|
imgui.GetStyle().FramePadding = imgui.ImVec2(5, 5)
|
|
imgui.GetStyle().ItemSpacing = imgui.ImVec2(5, 5)
|
|
imgui.GetStyle().ItemInnerSpacing = imgui.ImVec2(2, 2)
|
|
imgui.GetStyle().TouchExtraPadding = imgui.ImVec2(0, 0)
|
|
imgui.GetStyle().IndentSpacing = 0
|
|
imgui.GetStyle().ScrollbarSize = 10
|
|
imgui.GetStyle().GrabMinSize = 10
|
|
imgui.GetStyle().WindowBorderSize = 1
|
|
imgui.GetStyle().ChildBorderSize = 1
|
|
imgui.GetStyle().PopupBorderSize = 1
|
|
imgui.GetStyle().FrameBorderSize = 1
|
|
imgui.GetStyle().TabBorderSize = 1
|
|
imgui.GetStyle().WindowRounding = 0
|
|
imgui.GetStyle().ChildRounding = 5
|
|
imgui.GetStyle().FrameRounding = 5
|
|
imgui.GetStyle().PopupRounding = 5
|
|
imgui.GetStyle().ScrollbarRounding = 5
|
|
imgui.GetStyle().GrabRounding = 5
|
|
imgui.GetStyle().TabRounding = 5
|
|
imgui.GetStyle().WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
|
|
imgui.GetStyle().ButtonTextAlign = imgui.ImVec2(0.5, 0.5)
|
|
imgui.GetStyle().SelectableTextAlign = imgui.ImVec2(0.5, 0.5)
|
|
imgui.GetStyle().Colors[imgui.Col.Text] = imgui.ImVec4(1.00, 1.00, 1.00, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.TextDisabled] = imgui.ImVec4(0.50, 0.50, 0.50, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.WindowBg] = imgui.ImVec4(0.07, 0.07, 0.07, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.ChildBg] = imgui.ImVec4(0.07, 0.07, 0.07, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.PopupBg] = imgui.ImVec4(0.07, 0.07, 0.07, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.Border] = imgui.ImVec4(0.25, 0.25, 0.26, 0.54)
|
|
imgui.GetStyle().Colors[imgui.Col.BorderShadow] = imgui.ImVec4(0.00, 0.00, 0.00, 0.00)
|
|
imgui.GetStyle().Colors[imgui.Col.FrameBg] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.FrameBgHovered] = imgui.ImVec4(0.25, 0.25, 0.26, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.FrameBgActive] = imgui.ImVec4(0.25, 0.25, 0.26, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.TitleBg] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.TitleBgActive] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.TitleBgCollapsed] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.MenuBarBg] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.ScrollbarBg] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.ScrollbarGrab] = imgui.ImVec4(0.00, 0.00, 0.00, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabHovered] = imgui.ImVec4(0.41, 0.41, 0.41, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabActive] = imgui.ImVec4(0.51, 0.51, 0.51, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.CheckMark] = imgui.ImVec4(1.00, 1.00, 1.00, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.SliderGrab] = imgui.ImVec4(0.21, 0.20, 0.20, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.SliderGrabActive] = imgui.ImVec4(0.21, 0.20, 0.20, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.Button] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.ButtonHovered] = imgui.ImVec4(0.21, 0.20, 0.20, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.ButtonActive] = imgui.ImVec4(1.00, 1.00, 1.00, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.Header] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.HeaderHovered] = imgui.ImVec4(0.20, 0.20, 0.20, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.HeaderActive] = imgui.ImVec4(0.47, 0.47, 0.47, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.Separator] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.SeparatorHovered] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.SeparatorActive] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.ResizeGrip] = imgui.ImVec4(1.00, 1.00, 1.00, 0.25)
|
|
imgui.GetStyle().Colors[imgui.Col.ResizeGripHovered] = imgui.ImVec4(1.00, 1.00, 1.00, 0.67)
|
|
imgui.GetStyle().Colors[imgui.Col.ResizeGripActive] = imgui.ImVec4(1.00, 1.00, 1.00, 0.95)
|
|
imgui.GetStyle().Colors[imgui.Col.Tab] = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.TabHovered] = imgui.ImVec4(0.28, 0.28, 0.28, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.TabActive] = imgui.ImVec4(0.30, 0.30, 0.30, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.TabUnfocused] = imgui.ImVec4(0.07, 0.10, 0.15, 0.97)
|
|
imgui.GetStyle().Colors[imgui.Col.TabUnfocusedActive] = imgui.ImVec4(0.14, 0.26, 0.42, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.PlotLines] = imgui.ImVec4(0.61, 0.61, 0.61, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.PlotLinesHovered] = imgui.ImVec4(1.00, 0.43, 0.35, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.PlotHistogram] = imgui.ImVec4(0.90, 0.70, 0.00, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.PlotHistogramHovered] = imgui.ImVec4(1.00, 0.60, 0.00, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.TextSelectedBg] = imgui.ImVec4(1.00, 0.00, 0.00, 0.35)
|
|
imgui.GetStyle().Colors[imgui.Col.DragDropTarget] = imgui.ImVec4(1.00, 1.00, 0.00, 0.90)
|
|
imgui.GetStyle().Colors[imgui.Col.NavHighlight] = imgui.ImVec4(0.26, 0.59, 0.98, 1.00)
|
|
imgui.GetStyle().Colors[imgui.Col.NavWindowingHighlight] = imgui.ImVec4(1.00, 1.00, 1.00, 0.70)
|
|
imgui.GetStyle().Colors[imgui.Col.NavWindowingDimBg] = imgui.ImVec4(0.80, 0.80, 0.80, 0.20)
|
|
imgui.GetStyle().Colors[imgui.Col.ModalWindowDimBg] = imgui.ImVec4(0.00, 0.00, 0.00, 0.70)
|
|
|
|
local but_orig = imgui.Button
|
|
imgui.Button = function(...)
|
|
imgui.PushStyleColor(imgui.Col.Text, imgui.ImVec4(1.00, 1.00, 1.00, 1.00))
|
|
imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(0.12, 0.12, 0.12, 1.00))
|
|
imgui.PushStyleColor(imgui.Col.ButtonHovered, imgui.ImVec4(0.21, 0.20, 0.20, 1.00))
|
|
imgui.PushStyleColor(imgui.Col.ButtonActive, imgui.ImVec4(0.41, 0.41, 0.41, 1.00))
|
|
local result = but_orig(...)
|
|
imgui.PopStyleColor(4)
|
|
return result
|
|
end
|
|
end
|
|
|
|
script_image = "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\xC8\x00\x00\x00\xC8\x08\x06\x00\x00\x00\xAD\x58\xAE\x9E\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0B\x13\x00\x00\x0B\x13\x01\x00\x9A\x9C\x18\x00\x00\x17\x28\x49\x44\x41\x54\x78\x9C\xED\x9D\x79\x9C\x15\xD5\x95\xC7\xBF\xA0\x82\xEC\x36\x28\x88\x5B\x10\x44\x8D\x2B\xDA\x44\x31\x71\x34\x2A\xA8\x71\x37\x4A\x66\xC6\x8C\x19\x83\xB1\xC9\x18\x63\xCC\xC4\x04\x9C\x89\xD9\xC6\x89\x10\x93\x31\xF1\x93\x31\xD2\x6A\xD4\xA0\xC9\x47\x50\x27\xD1\xC4\x95\x89\x1B\x2E\x41\x08\xE2\x12\xB7\x11\x23\xE0\x12\x44\x9A\x28\x02\x8A\xF1\xCD\x1F\xE7\x95\xFD\xE8\xEE\x57\x75\x6F\x55\xDD\xBA\xB7\xDE\x3B\xDF\xCF\xA7\x3E\xBD\xD5\x72\xBA\x5E\xFD\xEA\xDE\x7B\xEE\xB9\xE7\xF4\xAA\x54\x2A\x28\x8A\xD2\x33\xBD\x7D\x1B\xA0\x28\x21\xA3\x02\x51\x94\x18\x54\x20\x8A\x12\x83\x0A\x44\x51\x62\x50\x81\x28\x4A\x0C\x2A\x10\x45\x89\x41\x05\xA2\x28\x31\xA8\x40\x14\x25\x06\x15\x88\xA2\xC4\xA0\x02\x51\x94\x18\x54\x20\x8A\x12\x83\x0A\x44\x51\x62\x50\x81\x28\x4A\x0C\x2A\x10\x45\x89\x41\x05\xA2\x28\x31\xA8\x40\x14\x25\x06\x15\x88\xA2\xC4\xB0\xB9\x6F\x03\x9A\x98\x2D\x81\xE1\xC0\xD6\xC0\xB0\xEA\x36\x1C\x18\x02\xF4\x01\xFA\x22\x2F\xB0\xBE\xC0\x66\x40\xB4\xF4\xB3\x57\xF5\xEB\x7A\xE0\x1D\x60\x6D\xF5\xEB\x6A\xA0\xA3\xBA\xBD\x09\xBC\x5E\xFD\x9B\x92\x01\x15\x88\x7B\xFA\x02\xDB\x01\xBB\x00\xFB\x00\x7B\x56\xBF\xDF\x1E\x11\xC5\x10\x07\xD7\x5C\x0F\xAC\x04\xFE\x52\xDD\x9E\x07\x9E\x06\x9E\x04\x5E\xAD\x6E\x8A\x01\xBD\x74\x4D\x7A\xEE\xF4\x03\x5A\xAB\xDB\x47\x81\x03\x81\xBD\x08\xE7\x65\xB4\x06\x58\x0C\x2C\x01\x9E\x03\x1E\x44\xC4\xA3\xF4\x80\x0A\x24\x1F\xF6\x00\xC6\x03\xC7\x01\x13\x80\x1D\xFD\x9A\x63\xC5\x3A\x60\x29\x30\x1F\xB8\x1B\x58\x00\xBC\xE2\xD5\xA2\x80\x50\x81\xA4\x63\x0B\xE0\x00\xE0\x54\x44\x10\x13\xFC\x9A\x93\x2B\x6B\x80\x47\x80\x3B\x80\xDF\x21\xE2\x69\x5A\x54\x20\x76\xB4\x02\x47\x01\x27\x23\x2D\x46\xA3\xB3\x0E\xB8\xBD\xBA\xDD\x8A\x0C\xFE\x9B\x0A\x15\x48\x32\x5B\x01\x27\x00\x53\x80\x83\x11\x8F\x52\x33\xF2\x1A\x70\x0B\x30\x1B\xF8\x83\x67\x5B\x0A\x43\x05\x52\x9F\x7D\x80\xD3\x80\x7F\x00\x3E\xE2\xD9\x96\xD0\xB8\x03\xB8\x1C\xF8\xAD\x6F\x43\x5C\xA3\x02\xE9\xCE\x78\xE0\x3C\x64\x7C\xD1\xB7\x80\xEB\xBD\x03\xBC\x84\xB8\x63\x57\x02\xAB\x10\x37\xEC\x06\x60\x63\xF5\xEB\x7B\xC8\xFC\xC7\x20\x60\x20\xD0\x1F\x18\x0C\x0C\x05\x46\x02\x23\x6A\xB6\x22\xF9\x5F\xE0\xA7\xC0\xAF\x0B\xBE\x6E\x61\xA8\x40\x3A\x39\x04\xF8\x0A\xF0\x69\x87\xD7\x58\x07\xBC\x00\x3C\x06\xFC\x11\x78\x16\x11\xC7\x0A\xE0\xFD\x0C\xE7\xDD\x8C\xCE\x89\xC6\x91\xC0\xDE\xC0\x38\x60\x77\x60\x27\xDC\x0B\xE7\x09\xE0\x32\xE0\x6A\xC7\xD7\x29\x1C\x15\x08\x7C\x0C\xB8\x00\x19\x78\xBB\xE0\x59\xE0\x5E\x60\x21\xF0\x28\xF0\x27\x47\xD7\xA9\xC7\x08\x64\x1E\x66\x1C\xE2\x79\x3B\x00\x18\xE5\xE8\x5A\xF7\x03\xDF\x47\xDC\xC5\x0D\x41\x33\x0B\xA4\x05\x98\x06\x7C\x8D\xFC\x27\xF1\x96\x20\xA2\xB8\x15\x69\x2D\x42\x0A\xF9\xD8\x0A\xD8\x15\x38\x1C\xF8\x24\xE2\x78\x18\x90\xF3\x35\xAE\x05\xBE\x03\xBC\x9C\xF3\x79\x0B\xA7\x59\x05\xF2\x2F\xC0\xBF\x23\xE1\x1E\x79\xF1\x0A\x70\x73\x75\x7B\x20\xC7\xF3\xBA\x66\x67\x64\xB6\xFF\x53\xC0\x11\xE4\x77\x4F\xD6\x02\xFF\x05\xFC\x27\x32\x86\x2A\x25\xCD\x26\x90\xDD\x81\x8B\x81\x93\x72\x3C\xE7\xBD\xC0\x0D\xC0\xFF\x20\x01\x83\x65\x66\x18\x12\x0D\x70\x32\x22\x98\x3E\x39\x9C\xF3\x31\xA4\x95\x7E\x30\x87\x73\x15\x4E\x33\x09\x64\x2A\xF0\x23\xF2\xEB\x4E\xDC\x0C\x5C\x09\xDC\x95\xD3\xF9\x42\x63\x57\xE0\x14\xC4\xD5\xBD\x57\x0E\xE7\xBB\x04\xF8\x46\x0E\xE7\x29\x94\x66\x10\xC8\x08\xE4\xC3\x39\x3D\x87\x73\x55\x80\xEB\x81\x1F\x23\x5E\xA8\x66\xE1\x64\xE0\x0B\xC0\x31\x19\xCF\xF3\x08\x70\x36\xF0\x78\x56\x83\x8A\xA2\xD1\x05\xD2\x8A\x0C\x18\xF3\x78\x03\xDE\x0C\x5C\x0A\x3C\x94\xC3\xB9\xCA\xCA\x91\x48\x44\xC1\xDF\x67\x38\xC7\x2A\x64\x0C\x78\x53\x2E\x16\x39\xA6\x91\x05\xD2\x86\xCC\xF6\x66\x0D\x0D\xF9\x3D\x70\x11\x32\xD6\x50\x84\x7D\x91\xEE\xD2\x69\x19\xCE\x71\x21\x72\x5F\x83\xA6\x51\x05\xF2\x63\x64\xD2\x2F\x0B\x4B\x91\x01\xFD\x55\x99\xAD\x69\x5C\x0E\x46\xBC\x81\x47\xA7\x3C\xFE\x46\xE0\x9F\x81\x77\x73\xB3\x28\x67\x1A\x4D\x20\x5B\x02\xD7\x20\xF1\x53\x59\xF8\x19\xF0\x5D\x24\xFC\x43\x49\xE6\x73\xC0\xF7\x48\x17\xB3\x76\x27\x30\x99\xB0\xE6\x8A\x3E\xA4\x91\x04\x32\x1C\x99\x98\x3B\x30\xC3\x39\x9E\x46\x66\xD5\x6F\xCB\xC5\xA2\xE6\x62\x10\xF2\x52\xF9\x6A\x8A\x63\x97\x00\x27\x12\xE0\xC4\x62\xA3\x08\x64\x7B\xE4\xA1\xDE\x2F\xC3\x39\xAE\x42\xC4\xB1\x2A\x17\x8B\x9A\x97\x23\x80\x1F\x22\xA1\x2D\x36\xFC\x09\x59\x6B\xB3\x22\x6F\x83\xB2\xD0\x08\x02\xD9\x0E\x69\xA6\xF7\x4E\x79\xFC\x06\x64\xBC\xD2\x9E\x9B\x45\x4A\x1F\x24\x78\x71\xAA\xE5\x71\x4F\x21\x21\x30\x6F\xE4\x6E\x51\x4A\xCA\x2E\x90\x11\x88\x97\x69\x8F\x94\xC7\x3F\x86\x0C\x12\x9F\xC9\xCD\x22\xA5\x96\x29\xC0\x15\xC8\x12\x65\x53\x16\x02\x93\x90\xA5\xBF\xDE\x29\xB3\x40\x06\x00\xF3\x48\xBF\x1E\xFC\x16\xE0\x4C\x02\xF9\x20\x1A\x98\x89\xC8\xE4\xAA\x4D\xC8\xFD\xBD\x48\x57\xCD\xFB\xC3\x59\xE6\xCC\x8A\x73\x48\x2F\x8E\x4B\x90\x30\x8A\x35\xB9\x59\xA3\xD4\x63\x1E\xB2\xD6\xC6\xA6\x95\x3E\x8C\x40\xDC\xEB\x65\x15\xC8\x2C\xD2\x87\x3D\x7C\x95\x12\xC6\x04\x95\x9C\xE7\x91\x6E\x93\x4D\x78\xCE\x14\xE0\x9B\x6E\xCC\x31\xA7\x8C\x5D\xAC\xCF\x03\x3F\x4F\x79\xEC\x14\x64\x9E\x44\xF1\xC3\x08\x24\x43\xCA\xFE\x16\xC7\x4C\x44\x96\xF6\x7A\xA1\x6C\x02\x39\x80\xF4\x19\x35\x3E\x03\xCC\xCD\xD1\x16\x25\x1D\x43\x80\xFB\x30\x77\x03\xAF\x42\x62\xE9\xBC\x4C\xDA\x96\xA9\x8B\x35\x10\x19\xEC\xA5\xE1\xB3\xA8\x38\x42\xE1\xAF\xC8\xA4\xE0\x72\xC3\xFD\xB7\x46\x22\x1B\xBC\x50\x26\x81\x5C\x0A\x8C\x4D\x71\xDC\x54\xE0\x97\x39\xDB\xA2\x64\x63\x19\x22\x92\xB7\x0D\xF7\x3F\x19\xE9\x1E\x17\x4E\x59\xBA\x58\x47\x23\xB9\x98\x6C\xF9\x26\xB2\xE4\x53\x09\x93\x63\x90\xF4\xA6\x26\xAC\x43\x5E\x90\x85\x66\xA6\x2F\x43\x0B\xD2\x0F\x99\x95\xB5\xE5\x7A\x54\x1C\xA1\x73\x3B\xF0\x2D\xC3\x7D\xFB\x23\x19\x53\x0A\xA5\x0C\x2D\xC8\x0F\x80\xAF\x5B\x1E\xF3\x04\x12\xB4\xB8\x21\x7F\x73\x14\x07\xCC\x43\x26\x06\x4D\x38\x84\x02\xD7\xB7\x87\x2E\x90\xD1\x48\x5E\x29\x9B\x50\x85\xB7\x10\x6F\xD7\x73\x4E\x2C\x52\x5C\xB0\x23\x32\x47\xB2\xB5\xC1\xBE\x8F\x00\x1F\x77\x6B\x4E\x27\xA1\x77\xB1\xBE\x8D\x9D\x38\x40\x22\x72\x55\x1C\xE5\x62\x39\xB2\xF0\xCA\x84\x83\xC8\xBE\x36\xDE\x98\x90\x5B\x90\x7D\xB1\x5F\xDC\x7F\x27\x92\xAE\x46\x29\x27\x0B\x90\x4C\x97\x49\x2C\xC6\x6E\xB2\x31\x35\x21\xB7\x20\xB6\x0B\x6F\xDE\x06\xCE\x75\x61\x88\x52\x18\xA6\x21\x40\xFB\x21\x63\x11\xE7\x84\x2A\x90\xB1\xC0\x3F\x5A\x1E\x73\x29\x92\x18\x5A\x29\x2F\xF7\x21\x9E\x2D\x13\x0A\x79\x19\x86\x2A\x90\x2F\x62\x97\xD5\x6F\x25\xB2\x8A\x4D\x29\x3F\x17\x1B\xEE\x77\x0A\x52\x31\xD8\x29\x21\x0A\x64\x4B\xEC\x93\x2E\x5C\x86\xF9\xAC\xAC\x12\x36\xF3\x81\x87\x0D\xF7\x9D\xEC\xD2\x10\x08\x53\x20\xC7\x22\xCB\x68\x4D\x79\x03\x8F\xB1\x3A\x8A\x13\xAE\x30\xDC\xEF\x54\xA4\xB0\x90\x33\x42\x14\xC8\xA9\x96\xFB\xDF\x40\xF9\x93\x46\x2B\x9B\x72\x3B\x12\xD4\x98\xC4\x9E\x38\x2E\xA6\x1A\x9A\x40\x86\x21\x0B\x6B\x6C\xD0\x40\xC4\xC6\xE3\x4D\xCC\x33\x59\x1E\xE5\xD2\x90\xD0\x04\x72\x18\x22\x12\x53\x1E\x47\x12\x2F\x28\x8D\x87\x69\xD6\x7C\xA7\x93\x86\xA1\x09\xE4\x60\xCB\xFD\x1B\xBE\xCA\x6A\x13\x73\x1F\x66\x85\x77\xF6\x02\xB6\x75\x65\x44\x48\x02\xE9\x85\x7D\x12\x86\x86\xA9\x85\xA7\x74\xE3\x39\x24\xD3\x65\x12\x83\xB0\x4F\x52\x67\x4C\x48\x02\xD9\x09\xBB\x32\x05\xAF\x21\x51\xBB\x4A\x63\x52\x41\x02\x13\x4D\x18\xE7\xCA\x88\x90\x04\xB2\x3B\x76\xD5\x9F\x9E\xC6\xCC\xD3\xA1\x94\x17\xD3\x8A\xC0\xBB\xB9\x32\x20\x24\x81\xD8\xE6\xD5\x35\x5D\xD3\xAC\x94\x97\x97\x0C\xF7\xDB\x0D\xD8\xC6\x85\x01\x79\x97\x3F\xCE\xC2\x2E\x96\xFB\xE7\x35\x73\xBE\x19\xB2\x6A\xB1\x3F\x32\x8B\xDF\x07\x69\xDE\x7B\x55\xBF\xAE\x47\xD6\x98\x6C\x00\xDE\xCF\xE9\x9A\x8A\x19\x2B\xE9\xFC\x2C\xE2\x18\x83\x0C\xD4\x73\xCF\xE9\x1B\x92\x40\x76\xB4\xDC\xDF\xF6\x66\xEC\x80\x88\xF0\x23\xC8\x0D\xDD\x11\xC9\xD3\x34\x02\xA9\x1D\xDE\x07\x59\x7B\xB2\x39\x9B\x0A\xE4\x3D\x44\x1C\x6B\x11\xFF\xFC\xAB\x48\x06\xF2\x15\xC0\x8B\xC8\x5B\xEE\xCF\xE8\xEA\x45\x17\xAC\x47\xEE\x7F\xDF\x84\xFD\x86\x60\xB6\xD8\xCA\x9A\x90\x04\x62\x9B\xBB\x35\x2E\x01\x5C\x6F\x44\x04\x07\x21\xD9\xC2\xF7\x41\xEA\x81\x6F\x95\xD6\xB8\x18\xDE\x43\xBA\x7B\xCF\x20\x89\x97\x17\x00\x8B\x90\xB7\x9F\x92\x8D\xF7\x80\x8D\x24\x0B\xA4\x2F\xF9\xD6\xBC\xFF\x90\x50\x04\xD2\x0F\x79\x0B\x24\xB1\x0A\x09\x6B\x9F\x09\xFC\xAD\xCB\xDF\xB6\x40\x8A\x4C\x1E\x0E\x7C\x02\xF1\x6C\x24\xDD\xD8\x3C\xE8\x83\x88\x71\x0C\x52\x63\x1C\xE0\x75\x64\xDD\xF4\x83\xC8\x84\xD7\xF3\x05\xD8\xD1\xEC\x0C\x75\x71\xD2\x50\x04\xD2\x02\x0C\x4E\xD8\xA7\x1D\x49\xE0\xF0\x62\x97\xDF\x1F\x08\x9C\x80\xE4\x4E\xFA\x68\xFE\xA6\xA5\x62\x5B\x24\xD2\x34\x2A\x2D\xF6\x30\x52\x25\xF7\x36\xC4\x3D\xAD\xE4\x4F\x3F\x17\x27\x0D\x45\x20\x83\x90\xCC\x89\x3D\xF1\x2B\x24\x1B\xFB\xE2\x9A\xDF\x0D\x40\xEA\x9E\x4F\xC1\x6C\x89\xA6\x4F\x06\x22\x2D\xDB\x91\x48\x1A\xA2\xDB\x80\xEB\x80\xFB\x7D\x1A\x55\x12\x2A\x98\x97\x40\xD8\xD2\x85\x01\xA1\xB8\x79\x07\xD2\x7D\x81\xD4\x03\x48\x20\xDA\x69\x74\x8A\x63\x24\x70\x3E\xD2\xC7\xFF\x19\xE1\x8B\xA3\x2B\x5B\x23\xC9\xB7\xEF\x43\xEA\x29\x1E\xEB\xD5\x9A\xF0\xD9\x0C\xF3\x32\xDE\x4E\xC2\xDE\x43\x11\x48\xFF\x9A\xEF\x5F\x42\xAA\xA6\x1E\x4A\x67\x28\x49\x3F\x24\xC3\xC9\x13\x48\x6B\xE2\x6C\x62\xA8\x40\x8E\x47\x62\xC9\xEE\xC2\x3E\x82\xB9\x59\xE8\x8B\xF9\xCA\xD2\xF5\x2E\x0C\x08\x45\x20\x83\x11\x37\xE9\x45\x88\xC7\x69\x76\xCD\xDF\x4E\x47\x72\x26\x7D\x07\x47\xAE\x3C\xCF\x1C\x89\xBC\x08\x7E\x83\x64\x72\x51\x3A\xE9\x87\xF9\x30\x60\x9D\x0B\x03\x42\x11\xC8\x13\x48\xB2\xB7\x0B\xE9\xAC\x97\xBD\x17\xD2\x5F\xFF\x05\x12\x86\xD2\xE8\x9C\x80\x2C\x37\xBD\x90\x70\x3E\x17\xDF\xD8\xBC\x10\x1B\x5A\x20\xCB\x81\x27\x6B\x7E\x3E\x1F\x19\x77\x1C\xD7\xF3\xEE\x0D\xCB\x40\xE0\x7B\x48\x0D\x94\x56\xCF\xB6\x84\xC0\x68\xC3\xFD\x36\x02\xAF\xB8\x30\x20\x14\x81\x44\xEC\x8C\x74\x35\x2E\x21\x1C\x0F\x9B\x0F\xC6\x23\x03\xF9\xF3\xFC\x9A\xE1\x1D\xD3\xAC\x25\xAB\x71\x54\x5F\x3D\x24\x81\x4C\x42\x3C\x57\x27\xF8\x36\x24\x10\x06\x22\x93\xA2\xED\xD8\xA5\x40\x6A\x14\x7A\x63\x9E\x83\xF7\x15\x1C\xE5\x25\x08\x45\x20\x6D\xC8\x40\x75\x07\xDF\x86\x04\xC8\x59\xC8\x44\xE3\x28\xCF\x76\x14\x4D\x2B\xB0\xB7\xE1\xBE\xCF\xE0\xA8\x44\x5B\x08\x02\xB9\x00\xA9\x5A\xAB\xD4\xA7\x15\x79\x81\xEC\xEA\xDB\x90\x02\xB1\x49\xC6\xB0\x84\xEE\xA1\x47\xB9\xE0\x5B\x20\x17\xE0\xA1\x28\x4A\x49\x19\x8B\x8C\x4B\x6C\x56\x5D\x96\x19\x9B\x49\x54\x93\xA5\xB9\xA9\xF0\x99\xDD\xFD\x5C\xE0\x27\xBE\x2E\x5E\x62\x56\x02\x7F\x47\x63\x07\x40\xEE\x09\x3C\x65\xB8\xEF\x5A\xA4\x65\x75\x12\xE3\xE6\xAB\x05\x39\x09\x15\x47\x5A\x86\x23\x9E\xBE\xE1\xBE\x0D\x71\xC8\x67\x2C\xF6\x5D\x88\xC3\x00\x50\x1F\x02\x19\x0B\xDC\xE4\xE1\xBA\x8D\xC4\xEE\x48\xF6\x41\xDB\xE2\x42\x65\xA0\x1F\x70\xA6\xC5\xFE\x4E\x53\x3F\x15\x2D\x90\xCD\x91\xE2\x9A\xA6\x01\x68\x4A\x7D\x5A\x81\xAB\x7D\x1B\xE1\x80\x53\xB0\x5B\xFC\x94\xA6\xFA\xB1\x31\x45\x0B\xE4\xBB\x48\x48\x89\x92\x0F\xA7\x23\x75\xE0\x1B\x89\x73\x2C\xF6\x5D\x80\x79\xE6\x93\x54\x14\x29\x90\x83\x81\x7F\x2B\xF0\x7A\xCD\xC2\x15\x34\x8E\x67\xEB\x44\x64\x01\x9C\x29\xB3\x93\x77\xC9\x46\x51\x5E\xAC\xCD\x91\xD8\xAA\x46\xF9\x20\x43\xE3\x01\x64\x79\x40\xD9\x79\x0C\xF3\x6C\xED\x6B\x91\xF1\xEC\xEB\xEE\xCC\x29\xAE\x05\x99\x8A\x8A\xC3\x25\x87\x20\x55\xB9\xCA\xCC\xC9\xD8\x95\x32\xF8\x15\x8E\xC5\x01\xC5\xB4\x20\xC3\x90\x5A\xE7\x8D\xB8\x96\x23\x24\xDE\x44\xA2\x5F\xDF\xF2\x6D\x48\x0A\x06\x20\x3D\x8C\xB1\x86\xFB\x57\x80\x3D\x90\xE7\xCA\x29\x45\xB4\x20\x67\xA3\xE2\x28\x82\x61\x48\xDC\x56\x19\xF9\x0A\xE6\xE2\x00\x29\xF7\xED\x5C\x1C\xE0\xBE\x05\xE9\x87\x64\x21\x19\xE9\xF2\x22\xCA\x87\xFC\x05\x79\xB3\x96\xA9\xE2\xD6\x28\x24\xD8\xD0\x26\xE9\xC2\x04\x64\xCD\x8C\x73\x5C\xB7\x20\x93\x51\x71\x14\xC9\x08\xEC\x66\xA1\x43\xE0\x0A\xEC\xC4\x71\x23\x05\x89\x03\xDC\x0B\xE4\x74\xC7\xE7\x57\xBA\x63\x5B\x21\xD8\x27\xA7\x61\x5F\x42\xED\x5B\x2E\x0C\xA9\x87\x4B\x81\x8C\x44\x32\x1C\x2A\xC5\x72\x28\xE6\xEB\x28\x7C\x32\x1A\xFB\xEA\xC4\x3F\xA4\xE0\x20\x4D\x97\x02\x39\x1C\x47\xD9\xEE\x94\x44\x8E\xF4\x6D\x80\x01\x57\x91\x9C\x4D\xB3\x96\x95\xC0\x7F\x38\xB2\xA5\x2E\x2E\x05\x32\xCE\xE1\xB9\x95\x78\x0E\xF3\x6D\x40\x02\xE7\x62\x6F\xE3\x97\xF1\xE0\xC2\x76\x25\x90\xC1\x68\x56\x0E\x9F\xB4\xE2\x26\x93\x7D\x1E\xEC\x8D\xAC\xB5\xB7\x61\x4E\x75\x2B\x1C\x57\x02\xD9\x0E\x3B\xBF\xB6\x92\x2F\xC3\xB1\x2F\x48\x54\x14\x97\x62\xF7\xDC\xBD\x03\x7C\xCD\x91\x2D\x89\xB8\x12\xC8\x70\x74\x72\xD0\x27\xBD\x09\x33\xC9\xC3\x29\xC0\x11\x96\xC7\x9C\x83\xA3\x94\x3E\x26\xB8\x12\xC8\x8E\x38\xCA\xB6\xAD\x18\xB3\xB3\x6F\x03\x7A\xE0\x5F\x2D\xF7\xBF\x0B\xB8\xD6\x81\x1D\xC6\xB8\x12\xC8\x20\x47\xE7\x55\xCC\x71\x52\x50\x26\x03\xBB\x62\x17\xCA\xFE\x01\x1E\xBB\x56\x11\xAE\x04\x62\x53\xCE\x59\x71\x43\xBD\x7A\x2B\xBE\x38\x1A\xBB\x95\xA4\x97\xE0\x30\x5B\x89\x29\xAE\x04\xD2\xCC\x69\x43\x43\x21\xB4\x56\x7C\x7F\x8B\x7D\xDF\x42\xCA\xEC\x79\xC7\x95\x40\xB4\x5C\xB2\x7F\x9C\x14\x94\xC9\x80\x8D\x57\xB3\x1D\xE8\x70\x65\x88\x0D\xAE\x04\xE2\xA4\x98\x89\x62\x45\x48\x65\xA9\x07\x61\x9E\xA6\x68\x03\x70\xB9\x43\x5B\xAC\x70\x25\x90\x0E\xCC\x6B\xCB\x29\x6E\x08\xE9\x25\x35\x08\xF3\xB0\xA3\xDF\x23\x55\xC6\x82\xC0\x95\x40\x5E\x47\x6A\x36\x28\xFE\x08\xA9\x4E\xFB\x16\x98\x8F\x4B\xE7\xB9\x34\xC4\x16\x57\x02\x79\x95\x02\xD6\x0B\x2B\xB1\x38\x29\x28\x93\x12\xD3\x6A\xB5\x15\xA4\x40\x6B\x30\xB8\x12\xC8\x32\x02\x70\xD1\x35\x39\x21\x09\xE4\x3D\xCC\x1C\x37\x6B\x80\x17\xDC\x9A\x62\x87\xCB\x41\xFA\x1F\x1D\x9D\x5B\x49\x66\x35\x9B\x96\xB4\xF3\xCD\x5F\x91\x98\xAA\x24\x96\x13\x58\xCF\xC3\x65\xB8\xFB\x23\x0E\xCF\xAD\xC4\xF3\x3C\x8E\x0A\xCA\xA4\x64\x3D\x66\x6E\xDB\x37\x09\xCC\xB9\xE3\x5A\x20\x65\x4C\x41\xD3\x08\x3C\xE8\xDB\x80\x1E\x58\x6E\xB0\x4F\x70\xCF\x8B\x4B\x81\xAC\x06\x7E\xE7\xF0\xFC\x4A\x7D\x6E\xF6\x6D\x40\x0F\x98\x8C\x2D\x42\x72\x4D\x03\xEE\x93\x36\x5C\xE7\xF8\xFC\x4A\x77\x9E\x21\x9B\x27\x68\x18\x52\xA0\xE7\x3C\xA4\x0E\xC9\x7D\xE4\x93\x08\xC2\xA4\x05\x71\x52\x46\x2D\x0B\xAE\x63\xA6\xEE\x42\xB2\x6F\xEF\xE1\xF8\x3A\x4A\x27\xB3\x31\xF3\x18\xF5\x47\x16\xB6\xED\x8C\x2C\xAE\xDA\x13\x59\xED\x37\x86\xEE\xE5\x07\x0E\x45\xD2\xC7\xCE\x40\x3E\xD3\x34\xBC\x6C\xB0\xCF\xBB\x29\xCF\xED\x8C\x22\x82\x0A\x2F\x01\xAE\x29\xE0\x3A\x8A\xF4\xE1\x7B\x6A\xB5\x77\xA9\x6E\xBB\x23\x82\x18\x53\xFD\x79\x27\xCC\x67\xB8\x3F\x59\xDD\x6E\x47\xB2\x8B\xDC\x6B\x69\xDB\xB3\x88\x00\xFA\x5A\x1E\xE7\x95\x22\x72\xF3\x6E\x09\x3C\x0E\xEC\xE6\xFA\x42\x0A\x3F\x02\xCE\xEF\xF2\xBB\x99\xC0\x97\xC8\x7F\x09\xC2\x2F\xAA\xD7\x7B\xC2\x70\xFF\x5E\x48\x35\xDA\xB8\x94\x44\xD7\x01\x67\x64\x33\x2B\x5F\x8A\xC8\xCD\xBB\x01\xF8\x7A\x01\xD7\x69\x76\xD6\x22\x5D\xA0\x5A\x8E\x00\xBE\x81\x9B\xF5\x39\x9F\x43\x12\x4E\xFF\x37\xD2\x22\x25\x51\x21\x59\x4C\xFD\xB3\x1A\x95\x37\x45\x95\x3F\xB8\x0D\x98\x5F\xD0\xB5\x9A\x95\x1F\x00\xAB\x6A\x7E\xEE\x0D\x5C\xE4\xF8\x9A\xBD\x91\xE4\xE4\x0B\xAA\xD7\x4F\x2A\x9D\xF6\x58\xC2\xDF\x83\x5B\x68\x57\x64\x85\xA9\xB3\x09\x6C\x12\xA8\x81\x78\x9A\xEE\x0B\x8C\xCE\x42\x92\x3C\x17\xC1\x50\xA4\x97\xB0\x00\xB8\x80\xFA\xAB\x19\x17\x26\x9C\x67\x48\x9E\x46\xE5\x41\x91\x02\x79\x12\xA9\x51\xA8\xE4\xCF\x17\x91\x78\xA7\x88\xED\x11\xE7\x48\xD1\x6C\x07\x7C\x1F\xF9\xAC\xBF\x44\xF7\x01\xF9\x12\xE2\xBD\x59\x23\x81\x3E\x6E\x4C\x4B\x47\xD1\x45\x3C\x67\xE2\xB8\xE8\x62\x13\x72\x31\xDD\xBB\xAF\x3F\xC5\xEF\x92\xDB\x51\x55\x1B\x1E\x46\x12\x54\x47\xCF\xD9\x5A\xE2\xE7\x68\xB6\x06\xB6\x75\x6A\x99\x25\x45\x0B\x64\x03\xE5\x2F\x15\x16\x12\x8F\xD0\xBD\x30\xEA\x59\xC0\x49\x29\xCE\xF5\x3E\xF0\x28\x70\x25\xC9\x5D\x21\x53\xF6\x07\x6E\x00\x1E\xA2\x73\xB2\xF1\x96\x98\xFD\x07\x13\x98\xB7\xD3\x47\x72\x85\x07\x91\x41\xFB\xF1\x1E\xAE\xDD\x48\x2C\xA3\x7B\x2D\x90\x03\x90\x37\xB7\x29\x2F\x23\x05\x40\xE7\x23\xE2\x88\xBC\x4C\xBD\x81\x4F\x03\xFF\x04\x9C\x40\xF6\xF5\xED\x13\xAA\xDB\x29\x48\x12\xB8\x8D\xC8\x22\xAA\x9E\xD8\x07\xB8\x27\xE3\xF5\x72\xA3\xA8\x2A\xB7\x5D\x99\x80\x46\xFB\x66\x61\x1D\x32\xBB\x5D\xFB\xA6\xDF\x01\xE9\xE3\xD7\xCB\x87\xB5\x11\xF8\x3F\x24\x14\x65\x21\x22\x88\x25\x24\x57\xA3\xFA\x38\x52\xE7\xE5\x54\xF2\xCB\x96\xF9\x01\xF5\x7B\x2F\xD7\x13\x50\x5D\x19\x5F\x02\x01\xB8\x1B\x98\xE4\xEB\xE2\x25\xE7\x28\xE4\xFE\x45\x0C\x45\xDE\xBA\xFB\x03\xAF\x21\xA1\xEE\xCB\xAB\xDB\x73\xC0\x52\xA4\x14\xDE\x4B\xA4\x4F\xE6\x30\x12\x79\x70\x4F\xC7\x6D\xC5\xE2\xE7\x90\xCA\x00\x41\x24\x9D\xF0\x29\x90\x33\xD0\x10\x14\x5B\xD6\x20\x83\xDE\x3B\xBA\xFC\x7E\x04\x12\x60\xF8\x02\xD2\x85\xE9\x40\xDE\xD2\x2E\xE8\x83\x74\x8F\xCF\x00\x8E\x73\x70\xFE\x0F\x80\xFD\x30\x9F\xA1\x77\x8A\x4F\x81\xEC\x84\xC4\xE7\x68\x91\x1D\x33\x3A\x80\x13\x09\x6B\xAD\xC7\x04\xE0\xF3\x48\xF7\x2B\xCF\x54\xA7\xE7\x20\x33\xF4\xDE\x29\xDA\x8B\x55\xCB\x32\xA4\x0F\xAC\x24\x33\x1F\xD8\x97\xB0\xC4\x01\x32\x8E\x99\x8A\xC4\x57\x9D\x0F\x3C\x95\xD3\x79\x3F\x95\xD3\x79\x32\xE3\x53\x20\x20\xFD\x4D\x25\x9E\x6B\x80\x63\x30\x5B\x4F\xE1\x8B\x57\x91\xC0\xC5\x8F\x21\xEE\xDC\xDF\x66\x3C\xDF\x01\x04\x92\x5B\xD8\xB7\x40\x96\x79\xBE\x7E\xC8\xBC\x8D\xCC\x19\x4D\xA9\x7E\x5F\x06\x36\x20\x65\x9A\x8F\x07\x0E\x42\x8A\x74\xA6\xA9\xD9\xBE\x0D\x81\x14\x80\xF5\x2D\x90\x35\x9E\xAF\x1F\x2A\xBF\x41\x3C\x39\xB3\x3C\xDB\x91\x85\x47\x91\xF8\xBB\x7D\x91\x88\xE2\xC5\x96\xC7\x9F\x98\xBB\x45\x29\xF0\x2D\x10\xCD\xBE\xB8\x29\x2F\x21\x2D\xC6\x49\x88\x6B\xB6\x11\x58\x81\xC4\x85\x1D\x88\x4C\x3C\xDE\x1D\xBF\xFB\x87\x1C\x4B\x00\xE1\xEF\xBE\x05\x62\x53\x06\xB8\x91\x79\x1B\x09\x17\x1F\x47\xE3\xBA\xBE\x37\x22\x61\x27\x47\x21\xF3\x35\x97\x03\x6F\xC4\xEC\xBF\x13\x52\x53\xC4\x2B\xBE\x05\xD2\xEC\x75\x0C\xD7\x02\x3F\x41\xAA\xD2\x4E\x23\xC0\xB4\x37\x8E\x58\x8C\x44\xFB\x8E\x43\xCA\xB2\xD5\x0B\x60\x3C\xAD\x28\x83\xEA\xE1\x73\x1E\x04\x60\x2E\xE2\x43\x6F\x36\x5E\x46\xDE\xA6\xD7\x21\x49\xDE\x9A\x9D\x3E\x48\x97\xEA\x2C\x36\x75\xF1\xBE\x8B\xAC\x9D\xF7\x56\xC4\xD3\xB7\x40\x16\xD2\x3C\xF5\xD4\xD7\x21\xF3\x19\x73\x11\x4F\x4F\x59\x3C\x53\x45\xB3\x07\xF0\x59\xE0\x4C\x24\x42\x60\x36\xB2\xBC\xD7\x0B\x3E\x05\x32\x04\x79\x7B\x9A\x16\x56\x31\xA1\x03\x19\xDC\xEE\x45\x18\xD9\x33\xD6\x03\xF7\x23\xC2\xF8\x35\x9A\xD0\xDB\x86\xE1\xC0\x17\x90\x6E\xD8\x59\x48\x7E\xDF\xC2\xF1\x29\x90\x4F\x90\xDF\x3A\xF5\x65\x48\x97\xA5\x1D\x69\x8E\x77\x06\xC6\x03\x87\x54\xBF\x8E\xA2\x98\xF1\xCE\x3A\x24\x62\x76\x31\x12\x2F\xF5\x07\xE0\xCF\x05\x5C\xB7\xD1\xE9\x8F\xDC\xDB\xC2\xF1\x29\x90\x2F\x03\x97\x65\x3C\xC7\x43\xC0\xD5\x48\xAA\xCD\xB8\x01\xEE\x76\x48\xD3\xBD\x27\xD2\xBA\x8C\x45\xC2\xC3\xB7\x21\x9D\x27\x6D\x03\xD2\x5A\x2D\x47\x04\xF0\x14\x12\x5C\xF7\x34\x22\x10\xA5\x41\xF0\x59\x8D\xF6\xA0\x94\xC7\xFD\x0D\xB8\x09\xC9\xCB\x74\xBB\xE1\x31\xAF\x56\xB7\xDA\xEA\x45\x03\x90\x34\x9B\xA3\x90\xD6\x65\xAB\x9A\x6D\x33\x3A\x13\x4C\xF4\x42\xBA\x4A\x6F\x22\x13\x9B\x1D\x48\x2B\xF5\x0A\x22\xCA\xE0\xD2\x65\x2A\xF9\xE1\xAB\x05\x19\x80\xC4\x61\x25\xA5\x89\xA9\x65\x05\xB2\x98\xE6\x5A\x34\x86\x4B\x29\x08\x5F\x2D\xC8\x81\x98\x8B\xE3\x21\xC4\x93\x71\x23\x1A\x9A\xA2\x14\x8C\x2F\x81\x1C\x95\xF0\xF7\xF7\x81\x5B\x91\xF1\xC5\x9D\xB8\x5B\xFC\xA3\x28\xB1\xF8\x12\xC8\xB1\x75\x7E\xBF\x02\xE9\x42\xCD\x46\x27\xD0\x94\x00\xF0\x21\x90\x7D\x11\x6F\x52\x2D\xF3\x11\x51\xCC\x41\xBB\x51\x4A\x40\xF8\x10\xC8\x79\xD5\xAF\xEB\x91\xB0\xEE\x2B\x91\xE2\xF1\x8A\x12\x1C\x45\x7B\xB1\x06\x23\x63\x8B\xFB\x91\x16\x43\xE7\x0C\x94\xA0\xF1\x1D\x8B\xA5\x28\x41\xE3\x3B\xDC\x5D\x51\x82\x46\x05\xA2\x28\x31\xA8\x40\x14\x25\x06\x15\x88\xA2\xC4\xE0\x33\x58\x51\xC9\xCE\x68\x60\x22\xD0\x82\x2C\x3C\x6B\xA9\xF9\xDB\x22\x24\xB0\x72\x51\xCD\xF7\x8A\x2D\x95\x4A\x25\xCD\x36\xB1\x92\x4C\xD2\x39\x5A\x0D\xCE\x51\xA9\x54\x2A\x6D\x19\xAF\x99\x87\xAD\x45\xDC\x0F\xD3\xAD\xA5\x52\xA9\x4C\xAB\x54\x2A\x2F\x1A\x5C\xB3\x96\x85\x15\xB9\x97\x2D\x39\x5C\x7F\x75\xC2\xB5\xEE\xA9\x73\xEC\x8C\x84\xE3\x56\xA7\xB4\x6F\x9A\xC1\x79\x47\xA7\xF9\x7F\x7D\x75\xB1\x46\x63\x56\x03\x62\x26\xB2\x08\x4A\x11\x26\x23\x59\xDA\x67\x20\xF7\xD0\x86\x56\x24\xCF\xD6\x8B\x48\x82\x88\x2C\x36\xB4\x24\xEC\x33\x91\x9E\xED\x9B\x49\x7C\x3A\xA3\x16\xBA\x57\xEA\x4D\x62\x34\xC9\xFF\x4F\xD2\x75\xEB\xE2\x43\x20\x2D\x48\x48\x49\xD2\x4D\x9E\x0B\x4C\x77\x6F\x4E\x69\x98\x81\xD9\x7D\x4B\x22\x7A\x08\xD3\xE6\x03\x98\x9C\x61\xBF\x0E\x92\x3F\xD3\x36\x44\x60\xA6\xCC\x22\xFE\x9E\x2C\xA2\x7B\x81\x53\x63\x7C\x08\x64\x16\xC9\x1F\xCC\x22\x24\x29\xB2\x22\x4C\x23\xDB\x5B\xBF\x27\x5A\x91\x56\xDC\x46\x24\xD1\x98\xC7\x84\xB6\x3A\xBF\x9F\x5B\xDD\xE2\x30\xCD\x28\x69\x22\xA6\x4C\xCF\x51\xD1\x02\x99\x45\xF2\x1B\xA8\x03\x29\x2D\xA6\x83\x4A\xA1\x15\xFB\x6E\x87\x29\x2D\xD8\x89\xA4\xDE\x43\xDF\x13\x71\x62\x9A\x4A\xFC\xE7\x6B\xD2\x6D\x32\xE9\x8E\xCD\x24\xBE\x68\x68\x22\x45\x0A\xA4\x0D\xB3\x1B\x3C\x89\xC6\x49\xBB\x99\x07\x36\x0F\x65\x1A\x22\x0F\x98\x09\xA6\xDD\xAB\xA4\xFD\x3B\x48\xEE\xF6\xCC\x20\xDE\xAE\x19\xC4\x77\xAD\x96\x1A\x5C\x23\x91\xA2\x04\x32\x11\xB3\x66\x73\x2A\x19\x15\xDF\x80\x98\x08\xA4\x03\x59\x6F\x3F\xBD\xBA\xB5\xB3\xE9\xFA\xFB\xB8\xE3\x26\x61\xE6\x08\x99\x8C\xBD\x63\x20\x6E\x40\x3F\x93\x64\x1B\xEB\xB5\x10\x13\x49\xBE\x2F\x49\xAD\x94\x19\x69\x5C\x5F\x15\x3B\xB7\x66\x6B\x25\xD9\x2D\x58\xA9\x88\x0B\xD0\x85\x2B\xB5\xCC\x6E\x5E\x13\x57\xF8\xAC\x4A\xBC\x6B\xB4\xAD\x22\x6E\xD7\xAE\x2C\xAC\x9E\xDF\xD4\x96\x59\x06\xB6\xF4\x44\xE4\xA6\x4F\xFB\xFF\x4D\xEB\x72\x4C\x4B\x25\xD9\xC5\x3D\x27\xE6\x9A\x41\xB9\x79\x5B\x48\xF6\x32\x80\x7A\xAC\xEA\x61\xE2\xB1\x4A\x7A\x53\xB6\x23\xAD\xC4\x24\x3A\x5B\xE7\x79\x5D\x7E\x36\xB1\x23\x6D\x57\x2F\xAE\x5B\xB6\x88\xE4\xCF\x7D\x1A\x9B\xDE\x87\x36\xE2\x5B\xB2\x0E\x72\x74\xF0\xB8\x16\xC8\x1C\xD4\x63\x95\x05\x93\xB1\x98\xE9\x83\x1B\x89\x62\x7A\xF5\xAB\x4D\xF7\xC3\x76\xEC\x51\x4B\xBD\x39\x91\x88\x76\x92\xE7\x46\xA2\xEE\xB9\x89\xC3\x62\x26\x39\x3A\x78\x5C\x0A\x64\x16\xC9\x2E\x38\xF5\x58\xC5\xB3\x94\xE4\x7B\x33\x0B\xF1\x44\x4D\xA3\x33\xEC\xA4\x1E\x26\x83\xE3\x9E\xC8\xEA\x28\x88\x3B\xDE\xE4\x8D\x3F\xB9\xBA\x25\x89\x63\x1E\x39\x0C\xCC\x6B\x71\x29\x10\xF5\x58\xE5\x83\xC9\x60\x7B\x22\xF2\xF0\xDC\x83\x94\x3C\xAB\x20\x33\xE6\xB5\xC2\x49\xCB\x68\xCC\x7A\x01\x71\x24\xB5\x40\xF3\x48\x76\x14\xCC\x21\xF9\xFF\xC8\xBD\x9B\xEE\x33\x9A\x57\x3D\x56\x66\xA4\x0D\xB5\x89\xE6\x21\x22\xE1\x54\x30\x7B\xC8\xBA\x92\xF4\xA2\x8B\x7A\x01\x49\xB6\x24\x89\x64\x3A\xD9\x7A\x12\xD3\x71\xF0\x3C\xF9\x12\x88\xC6\x58\x99\x63\xF2\x76\x35\x65\x32\x22\x96\x17\xC9\x3E\x23\x1E\x11\x8D\x21\x92\x1E\x4E\x93\xEE\x76\xDA\x16\x20\x97\x39\x8F\x9E\xF0\x21\x90\xA5\xA8\xC7\xCA\x96\xA9\xE4\xFB\x42\x89\x82\x45\x93\xFA\xF4\x26\x81\x89\x51\xD8\x48\x92\x7D\x6D\x06\xE7\x32\x9D\xBF\xE9\x8A\x33\x27\x8F\x0F\x81\x98\x84\x11\x28\xDD\x99\x8A\x74\x65\xF2\x1C\xB3\x4D\x23\x5E\x24\x49\xDD\xA2\x68\xAD\x09\x24\xC7\x57\x99\x9C\x0F\xEC\x1F\xF6\xB4\xA2\x32\xC2\x57\x17\x6B\x06\xD9\x5C\x87\xCD\xCA\x5C\x60\x0C\xF9\x8E\xDF\xEA\x0D\xE2\x5B\x48\xFE\x8C\x6A\x5B\x8D\x0E\x92\x45\x62\xE2\xB8\xB1\xE9\x61\x64\xE9\x96\x19\xE1\x73\x90\x6E\x12\xD5\xAB\xF4\x4C\x3B\x52\x18\x28\x12\x4B\x3B\xD9\x04\xD3\xD3\x83\x6B\xF2\x30\x77\x15\x44\x92\x40\x5A\x31\x0B\x57\x31\x0D\x32\xCC\x3A\xB0\x4F\xC4\xE5\x92\xDB\x76\xE2\x6F\x72\xB4\x2E\x64\x3C\x3A\x0F\x92\x96\xA5\x74\xEF\xFB\x8F\xEE\xB2\x4D\x24\xF9\x45\xD4\x53\x4B\x91\xD4\x7A\x2C\x25\xDD\xFC\x48\x1B\x66\x6F\xFD\x99\xC8\xF3\x11\x87\x73\x47\x8F\x4B\x81\x4C\x47\x3E\x98\xB8\x0F\x27\x1A\x2C\x8E\x77\x68\x47\x23\x32\x91\xFA\xFD\xEE\xA5\x74\x1F\xA7\xB4\x91\x1C\x2C\xDA\x4A\xE7\x5B\x3B\xE9\x73\x03\xF9\xEC\xD2\x84\xE1\x9B\x0A\x24\x88\x97\xA6\xCB\x2E\x56\x14\x29\x9A\xF4\x8F\x46\x4B\x41\x15\x33\xA2\x99\xF3\x85\x98\x47\xD7\x9A\xBC\x69\x6B\x3D\x4C\x2E\xC7\x87\x26\x63\x9B\x60\x70\x9D\xD5\x24\x12\xC9\x3D\xC4\xBB\xF8\xDA\x70\xE8\xCB\x36\x20\x8D\x57\x6D\x2E\x76\x1E\xA5\xAC\xD7\x88\xBA\xA4\xD1\x80\xBA\x15\x99\xCF\x68\x27\x79\x0C\x62\x7B\x6D\xD7\x6B\x50\x26\x63\xE6\xF5\xF2\x4E\x11\x69\x7F\xA2\x88\xCD\xA4\x56\x62\x06\xF2\x30\xF8\xB8\x71\x69\xBA\x0A\x8B\xB0\x13\x48\x96\x6B\x44\xAD\x6C\x4F\xDD\x9E\x68\x21\x5A\x34\x59\x57\x2B\x94\xE8\x6D\x6D\xD2\xD2\x44\xC7\x99\xCC\x57\x64\x25\x9A\x5F\x09\xA2\x1B\x15\x47\x51\x79\xB1\xDA\x31\x5B\x22\x39\x0B\xB3\x59\xD9\x66\x62\x22\x66\xC9\x1A\xA2\x41\x79\x9A\xEE\xCB\x3C\x3A\x1F\xD6\x2C\x71\x5B\x36\xB4\xE1\xAF\xC7\x60\x4C\x91\x6E\x5E\x93\xF0\x12\xD3\x8C\x27\xCD\x86\xEB\xFB\x11\x7D\x2E\x69\x05\x96\x86\x52\x8C\x43\x8A\x9E\x07\x31\x09\x28\x33\xCD\x99\xD5\x2C\xCC\xC3\xED\x7A\x99\x76\x3A\xBB\xB5\x26\x09\x35\x86\x22\xA5\xB1\x93\xB6\x49\x09\xE7\x32\xF1\x94\x79\xA7\x68\x81\xA8\x67\x2B\x1D\xD1\xC4\x60\xDE\x4B\x03\xDA\xD9\x54\x7C\x49\x83\xF3\xB9\x98\x8F\x1B\xE6\x91\x6C\x6F\xF0\xAD\x88\x8F\x99\x74\x53\x91\xB4\xA1\x31\x5B\xB5\x2C\x42\x44\x92\x57\x68\xC5\x74\x36\x15\x87\xC9\x2C\xB7\xED\xC4\x9C\x49\x00\x63\xD0\xF8\x0A\x35\x31\x59\x8B\x0C\x1A\xB3\xD5\x95\x68\x45\xE0\x50\xE4\xFE\xD9\xB6\x28\x1D\xC8\x43\x3B\x86\xEE\x03\xE4\xA4\x87\x35\x8D\xF3\x24\xC9\x23\x99\x65\xAD\x7B\x21\x68\x09\xB6\xF2\x13\x85\x93\xD4\x5B\xF9\x17\x65\x78\xF7\xE5\x42\x2F\x35\x2A\x10\x45\x89\x41\x0B\xE8\x28\x4A\x0C\x2A\x10\x45\x89\x41\x05\xA2\x28\x31\xA8\x40\x14\x25\x06\x15\x88\xA2\xC4\xA0\x02\x51\x94\x18\x54\x20\x8A\x12\x83\x0A\x44\x51\x62\x50\x81\x28\x4A\x0C\x2A\x10\x45\x89\x41\x05\xA2\x28\x31\xFC\x3F\x0A\x00\xEF\x12\x6A\x59\xC5\x19\x00\x00\x00\x00\x49\x45\x4E\x44\xAE\x42\x60\x82" |